Status for Dolphin Central

Recent events

2019-12-07T15:09:09.381660	{'type': 'internal_log', 'lineno': 147, 'level': 'INFO', 'source': 'logging', 'msg': 'New GH %s: %s', 'args': "('dolphin-emu/core-developers', 'degasus,leoetlino,Armada651,lioncash,phire,spycrab,linkmauve,Helios747,hrydgard,Tilka,JosJuice,delroth,skidau,Parlane,stenzek')", 'pathname': '/home/central/sadm/central/github.py'}
2019-12-07T15:09:08.913270	{'type': 'internal_log', 'lineno': 657, 'level': 'INFO', 'source': 'logging', 'msg': 'Starting new HTTPS connection (1): api.github.com', 'args': '()', 'pathname': '/home/central/venv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py'}
2019-12-07T15:09:08.688941	{'type': 'internal_log', 'lineno': 657, 'level': 'INFO', 'source': 'logging', 'msg': 'Starting new HTTPS connection (1): api.github.com', 'args': '()', 'pathname': '/home/central/venv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py'}
2019-12-07T15:09:08.688353	{'type': 'internal_log', 'lineno': 132, 'level': 'INFO', 'source': 'logging', 'msg': 'Refreshing list of trusted users (from %s/%s)', 'args': "('dolphin-emu', 'core-developers')", 'pathname': '/home/central/sadm/central/github.py'}
2019-12-07T15:06:45.377032	{'type': 'internal_log', 'lineno': 147, 'level': 'INFO', 'source': 'logging', 'msg': 'New GH %s: %s', 'args': "('dolphin-emu/trusted-developers', 'rohit-n,NanoByte011,RachelBryk,Tilka,Stevoisiak,riking,CrystalGamma,marcan,stenzek,mrgreywater,AdmiralCurtiss,aldelaro5,iwubcode,jezze,EmptyChaos,Tinob,sigmabeta,delroth,cylgom,Buddybenj,neobrain,Sintendo,aroulin,hthh,Alcaro,hackbar,booto,Ziek,mathieui,yourWaifu,galop1n,CookiePLMonster,endrift,spycrab,LAGonauta,jordan-woyak,hrydgard,zackhow,kamiyo,Hydr8gon,rlnilsen,leoetlino,JMC47,Pokechu22,Ebola16,OrN,glennricster,Linktothepast,Aestek,Helios747,LPFaint99,gwicks,adamdmoss,skidau,degasus,hdcmeta,phire,shonumi,bentley,comex,FioraAeterna,Orphis,MayImilae,mahdihijazi,Parlane,mmastrac,Armada651,Zopieux,randomstuff,Ryanel,vladfi1,MerryMage,meffij,Phatcat,mimimi085181,spxtr,archshift,lioncash,sepalani,RisingFog,Starsam80,Techjar,magumagu,BhaaLseN,unknownbrackets,ColinDTaylor,kayru,clinchergt,magcius,JosJuice,jloehr,ligfx,moncefmechri,rukai,linkmauve')", 'pathname': '/home/central/sadm/central/github.py'}
2019-12-07T15:06:45.041803	{'type': 'internal_log', 'lineno': 657, 'level': 'INFO', 'source': 'logging', 'msg': 'Starting new HTTPS connection (1): api.github.com', 'args': '()', 'pathname': '/home/central/venv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py'}
2019-12-07T15:06:44.734783	{'type': 'internal_log', 'lineno': 657, 'level': 'INFO', 'source': 'logging', 'msg': 'Starting new HTTPS connection (1): api.github.com', 'args': '()', 'pathname': '/home/central/venv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py'}
2019-12-07T15:06:44.395036	{'type': 'internal_log', 'lineno': 657, 'level': 'INFO', 'source': 'logging', 'msg': 'Starting new HTTPS connection (1): api.github.com', 'args': '()', 'pathname': '/home/central/venv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py'}
2019-12-07T15:06:44.099240	{'type': 'internal_log', 'lineno': 657, 'level': 'INFO', 'source': 'logging', 'msg': 'Starting new HTTPS connection (1): api.github.com', 'args': '()', 'pathname': '/home/central/venv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py'}
2019-12-07T15:06:43.869013	{'type': 'internal_log', 'lineno': 657, 'level': 'INFO', 'source': 'logging', 'msg': 'Starting new HTTPS connection (1): api.github.com', 'args': '()', 'pathname': '/home/central/venv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py'}
2019-12-07T15:06:43.868405	{'type': 'internal_log', 'lineno': 132, 'level': 'INFO', 'source': 'logging', 'msg': 'Refreshing list of trusted users (from %s/%s)', 'args': "('dolphin-emu', 'trusted-developers')", 'pathname': '/home/central/sadm/central/github.py'}
2019-12-07T15:02:41.943438	{'type': 'internal_log', 'lineno': 657, 'level': 'INFO', 'source': 'logging', 'msg': 'Starting new HTTPS connection (1): api.github.com', 'args': '()', 'pathname': '/home/central/venv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py'}
2019-12-07T15:02:41.942798	{'type': 'internal_log', 'lineno': 196, 'level': 'INFO', 'source': 'logging', 'msg': "Watched repo 'dolphin-emu/netplay-index' has our hook installed", 'args': '()', 'pathname': '/home/central/sadm/central/github.py'}
2019-12-07T15:02:41.382109	{'type': 'internal_log', 'lineno': 657, 'level': 'INFO', 'source': 'logging', 'msg': 'Starting new HTTPS connection (1): api.github.com', 'args': '()', 'pathname': '/home/central/venv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py'}
2019-12-07T15:02:41.025117	{'type': 'internal_log', 'lineno': 657, 'level': 'INFO', 'source': 'logging', 'msg': 'Starting new HTTPS connection (1): api.github.com', 'args': '()', 'pathname': '/home/central/venv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py'}
2019-12-07T15:02:41.024482	{'type': 'internal_log', 'lineno': 196, 'level': 'INFO', 'source': 'logging', 'msg': "Watched repo 'dolphin-emu/gcdsp-ida' has our hook installed", 'args': '()', 'pathname': '/home/central/sadm/central/github.py'}
2019-12-07T15:02:40.756571	{'type': 'internal_log', 'lineno': 657, 'level': 'INFO', 'source': 'logging', 'msg': 'Starting new HTTPS connection (1): api.github.com', 'args': '()', 'pathname': '/home/central/venv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py'}
2019-12-07T15:02:40.423443	{'type': 'internal_log', 'lineno': 657, 'level': 'INFO', 'source': 'logging', 'msg': 'Starting new HTTPS connection (1): api.github.com', 'args': '()', 'pathname': '/home/central/venv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py'}
2019-12-07T15:02:40.422757	{'type': 'internal_log', 'lineno': 196, 'level': 'INFO', 'source': 'logging', 'msg': "Watched repo 'dolphin-emu/hwtests' has our hook installed", 'args': '()', 'pathname': '/home/central/sadm/central/github.py'}
2019-12-07T15:02:39.947167	{'type': 'internal_log', 'lineno': 657, 'level': 'INFO', 'source': 'logging', 'msg': 'Starting new HTTPS connection (1): api.github.com', 'args': '()', 'pathname': '/home/central/venv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py'}
2019-12-07T15:02:39.587942	{'type': 'internal_log', 'lineno': 657, 'level': 'INFO', 'source': 'logging', 'msg': 'Starting new HTTPS connection (1): api.github.com', 'args': '()', 'pathname': '/home/central/venv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py'}
2019-12-07T15:02:39.586734	{'type': 'internal_log', 'lineno': 196, 'level': 'INFO', 'source': 'logging', 'msg': "Watched repo 'dolphin-emu/www' has our hook installed", 'args': '()', 'pathname': '/home/central/sadm/central/github.py'}
2019-12-07T15:02:39.323500	{'type': 'internal_log', 'lineno': 657, 'level': 'INFO', 'source': 'logging', 'msg': 'Starting new HTTPS connection (1): api.github.com', 'args': '()', 'pathname': '/home/central/venv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py'}
2019-12-07T15:02:39.012814	{'type': 'internal_log', 'lineno': 657, 'level': 'INFO', 'source': 'logging', 'msg': 'Starting new HTTPS connection (1): api.github.com', 'args': '()', 'pathname': '/home/central/venv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py'}
2019-12-07T15:02:39.011989	{'type': 'internal_log', 'lineno': 196, 'level': 'INFO', 'source': 'logging', 'msg': "Watched repo 'dolphin-emu/sadm' has our hook installed", 'args': '()', 'pathname': '/home/central/sadm/central/github.py'}

Recent 'build_status' events

2019-12-06T21:39:18.439369	{'type': 'build_status', 'description': 'Build succeeded on builder pr-win-dbg-x64', 'shortrev': '8fa120', 'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'pending': False, 'hash': '8fa12028d58be5f2e3e86fe5abc4401b512e995e', 'pr': 8268, 'success': True, 'service': 'pr-win-dbg-x64', 'url': 'https://buildbot.dolphin-emu.org/#builders/7/builds/6064'}
2019-12-06T21:35:50.049763	{'type': 'build_status', 'description': 'Auto build in progress on builder pr-win-dbg-x64', 'shortrev': '8fa120', 'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'pending': True, 'hash': '8fa12028d58be5f2e3e86fe5abc4401b512e995e', 'pr': 8268, 'success': False, 'service': 'pr-win-dbg-x64', 'url': 'https://buildbot.dolphin-emu.org/#builders/7/builds/6064'}
2019-12-06T21:35:49.625013	{'type': 'build_status', 'description': 'Build succeeded on builder pr-win-x64', 'shortrev': '8fa120', 'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'pending': False, 'hash': '8fa12028d58be5f2e3e86fe5abc4401b512e995e', 'pr': 8268, 'success': True, 'service': 'pr-win-x64', 'url': 'https://buildbot.dolphin-emu.org/#builders/20/builds/6084'}
2019-12-06T21:35:16.867492	{'type': 'build_status', 'description': 'Build succeeded on builder pr-osx-x64', 'shortrev': '8fa120', 'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'pending': False, 'hash': '8fa12028d58be5f2e3e86fe5abc4401b512e995e', 'pr': 8268, 'success': True, 'service': 'pr-osx-x64', 'url': 'https://buildbot.dolphin-emu.org/#builders/33/builds/5978'}
2019-12-06T21:34:59.114473	{'type': 'build_status', 'description': 'Build succeeded on builder pr-android', 'shortrev': '8fa120', 'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'pending': False, 'hash': '8fa12028d58be5f2e3e86fe5abc4401b512e995e', 'pr': 8268, 'success': True, 'service': 'pr-android', 'url': 'https://buildbot.dolphin-emu.org/#builders/8/builds/6029'}
2019-12-06T21:34:12.309754	{'type': 'build_status', 'description': 'Build succeeded on builder pr-deb-dbg-x64', 'shortrev': '8fa120', 'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'pending': False, 'hash': '8fa12028d58be5f2e3e86fe5abc4401b512e995e', 'pr': 8268, 'success': True, 'service': 'pr-deb-dbg-x64', 'url': 'https://buildbot.dolphin-emu.org/#builders/21/builds/5475'}
2019-12-06T21:32:23.157387	{'type': 'build_status', 'description': 'Auto build in progress on builder pr-deb-dbg-x64', 'shortrev': '8fa120', 'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'pending': True, 'hash': '8fa12028d58be5f2e3e86fe5abc4401b512e995e', 'pr': 8268, 'success': False, 'service': 'pr-deb-dbg-x64', 'url': 'https://buildbot.dolphin-emu.org/#builders/21/builds/5475'}
2019-12-06T21:32:22.684035	{'type': 'build_status', 'description': 'Build succeeded on builder pr-deb-x64', 'shortrev': '8fa120', 'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'pending': False, 'hash': '8fa12028d58be5f2e3e86fe5abc4401b512e995e', 'pr': 8268, 'success': True, 'service': 'pr-deb-x64', 'url': 'https://buildbot.dolphin-emu.org/#builders/6/builds/5493'}
2019-12-06T21:31:54.611774	{'type': 'build_status', 'description': 'Auto build in progress on builder pr-android', 'shortrev': '8fa120', 'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'pending': True, 'hash': '8fa12028d58be5f2e3e86fe5abc4401b512e995e', 'pr': 8268, 'success': False, 'service': 'pr-android', 'url': 'https://buildbot.dolphin-emu.org/#builders/8/builds/6029'}
2019-12-06T21:31:53.446293	{'type': 'build_status', 'description': 'Build succeeded on builder pr-ubu-x64', 'shortrev': '8fa120', 'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'pending': False, 'hash': '8fa12028d58be5f2e3e86fe5abc4401b512e995e', 'pr': 8268, 'success': True, 'service': 'pr-ubu-x64', 'url': 'https://buildbot.dolphin-emu.org/#builders/2/builds/6018'}
2019-12-06T21:31:50.429229	{'type': 'build_status', 'description': 'Build succeeded on builder pr-freebsd-x64', 'shortrev': '8fa120', 'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'pending': False, 'hash': '8fa12028d58be5f2e3e86fe5abc4401b512e995e', 'pr': 8268, 'success': True, 'service': 'pr-freebsd-x64', 'url': 'https://buildbot.dolphin-emu.org/#builders/34/builds/6061'}
2019-12-06T21:30:41.023864	{'type': 'build_status', 'description': 'Auto build in progress on builder pr-ubu-x64', 'shortrev': '8fa120', 'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'pending': True, 'hash': '8fa12028d58be5f2e3e86fe5abc4401b512e995e', 'pr': 8268, 'success': False, 'service': 'pr-ubu-x64', 'url': 'https://buildbot.dolphin-emu.org/#builders/2/builds/6018'}
2019-12-06T21:30:40.021869	{'type': 'build_status', 'description': 'Build succeeded on builder lint', 'shortrev': '8fa120', 'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'pending': False, 'hash': '8fa12028d58be5f2e3e86fe5abc4401b512e995e', 'pr': 8268, 'success': True, 'service': 'lint', 'url': 'https://buildbot.dolphin-emu.org/#builders/22/builds/6013'}
2019-12-06T21:30:36.847015	{'type': 'build_status', 'description': 'Auto build in progress on builder pr-freebsd-x64', 'shortrev': '8fa120', 'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'pending': True, 'hash': '8fa12028d58be5f2e3e86fe5abc4401b512e995e', 'pr': 8268, 'success': False, 'service': 'pr-freebsd-x64', 'url': 'https://buildbot.dolphin-emu.org/#builders/34/builds/6061'}
2019-12-06T21:30:36.413165	{'type': 'build_status', 'description': 'Auto build in progress on builder pr-win-x64', 'shortrev': '8fa120', 'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'pending': True, 'hash': '8fa12028d58be5f2e3e86fe5abc4401b512e995e', 'pr': 8268, 'success': False, 'service': 'pr-win-x64', 'url': 'https://buildbot.dolphin-emu.org/#builders/20/builds/6084'}
2019-12-06T21:30:36.009388	{'type': 'build_status', 'description': 'Auto build in progress on builder pr-deb-x64', 'shortrev': '8fa120', 'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'pending': True, 'hash': '8fa12028d58be5f2e3e86fe5abc4401b512e995e', 'pr': 8268, 'success': False, 'service': 'pr-deb-x64', 'url': 'https://buildbot.dolphin-emu.org/#builders/6/builds/5493'}
2019-12-06T21:30:35.612917	{'type': 'build_status', 'description': 'Auto build in progress on builder lint', 'shortrev': '8fa120', 'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'pending': True, 'hash': '8fa12028d58be5f2e3e86fe5abc4401b512e995e', 'pr': 8268, 'success': False, 'service': 'lint', 'url': 'https://buildbot.dolphin-emu.org/#builders/22/builds/6013'}
2019-12-06T21:30:35.193294	{'type': 'build_status', 'description': 'Auto build in progress on builder pr-osx-x64', 'shortrev': '8fa120', 'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'pending': True, 'hash': '8fa12028d58be5f2e3e86fe5abc4401b512e995e', 'pr': 8268, 'success': False, 'service': 'pr-osx-x64', 'url': 'https://buildbot.dolphin-emu.org/#builders/33/builds/5978'}
2019-12-06T21:30:29.751355	{'type': 'build_status', 'description': 'Very basic checks passed, handed off to Buildbot.', 'shortrev': '8fa120', 'source': 'prbuilder', 'repo': 'dolphin-emu/dolphin', 'pending': False, 'hash': '8fa12028d58be5f2e3e86fe5abc4401b512e995e', 'pr': 8268, 'success': True, 'service': 'default', 'url': ''}
2019-12-06T17:14:45.742778	{'type': 'build_status', 'description': 'PR not built because Simonx22 is not auto-trusted.', 'shortrev': '345152', 'source': 'prbuilder', 'repo': 'dolphin-emu/dolphin', 'pending': False, 'hash': '345152b1486f037d65069de4654a08312d014323', 'pr': 8515, 'success': False, 'service': 'default', 'url': ''}
2019-12-06T15:03:32.759146	{'type': 'build_status', 'description': 'Build succeeded on builder pr-win-dbg-x64', 'shortrev': '81edcc', 'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'pending': False, 'hash': '81edcca8db0bbbe9904956d7038bd1a2abdd9a87', 'pr': 8514, 'success': True, 'service': 'pr-win-dbg-x64', 'url': 'https://buildbot.dolphin-emu.org/#builders/7/builds/6063'}
2019-12-06T15:02:17.069827	{'type': 'build_status', 'description': 'Build succeeded on builder pr-android', 'shortrev': '81edcc', 'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'pending': False, 'hash': '81edcca8db0bbbe9904956d7038bd1a2abdd9a87', 'pr': 8514, 'success': True, 'service': 'pr-android', 'url': 'https://buildbot.dolphin-emu.org/#builders/8/builds/6028'}
2019-12-06T15:01:46.930006	{'type': 'build_status', 'description': 'Auto build in progress on builder pr-win-dbg-x64', 'shortrev': '81edcc', 'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'pending': True, 'hash': '81edcca8db0bbbe9904956d7038bd1a2abdd9a87', 'pr': 8514, 'success': False, 'service': 'pr-win-dbg-x64', 'url': 'https://buildbot.dolphin-emu.org/#builders/7/builds/6063'}
2019-12-06T15:01:43.774082	{'type': 'build_status', 'description': 'Build succeeded on builder pr-win-x64', 'shortrev': '81edcc', 'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'pending': False, 'hash': '81edcca8db0bbbe9904956d7038bd1a2abdd9a87', 'pr': 8514, 'success': True, 'service': 'pr-win-x64', 'url': 'https://buildbot.dolphin-emu.org/#builders/20/builds/6083'}
2019-12-06T15:01:33.308104	{'type': 'build_status', 'description': 'Build succeeded on builder pr-osx-x64', 'shortrev': '81edcc', 'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'pending': False, 'hash': '81edcca8db0bbbe9904956d7038bd1a2abdd9a87', 'pr': 8514, 'success': True, 'service': 'pr-osx-x64', 'url': 'https://buildbot.dolphin-emu.org/#builders/33/builds/5977'}

Recent 'gh_commit_comment' events

2019-11-16T20:28:30.231821	{'type': 'gh_commit_comment', 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'url': 'https://github.com/dolphin-emu/dolphin/commit/a9a8c730748b8c8a2e83feb4c38626361cf9daa1#commitcomment-35989102', 'author': 'benjewmin', 'commit': 'a9a8c730748b8c8a2e83feb4c38626361cf9daa1'}

Recent 'gh_issue_comment' events

2019-12-07T10:54:53.201039	{'type': 'gh_issue_comment', 'id': 8451, 'raw': {'action': 'created', 'repository': {'fork': False, 'has_wiki': True, 'mirror_url': None, 'open_issues_count': 171, 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'forks': 1330, 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'html_url': 'https://github.com/dolphin-emu/dolphin', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'open_issues': 171, 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'language': 'C++', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'default_branch': 'master', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'watchers_count': 5799, 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'name': 'dolphin', 'size': 386668, 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'has_pages': False, 'has_issues': False, 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'disabled': False, 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'stargazers_count': 5799, 'created_at': '2013-07-22T09:07:57Z', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'archived': False, 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'full_name': 'dolphin-emu/dolphin', 'updated_at': '2019-12-06T19:51:14Z', 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'private': False, 'forks_count': 1330, 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'has_projects': False, 'owner': {'type': 'Organization', 'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'html_url': 'https://github.com/dolphin-emu', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'id': 5050316, 'site_admin': False, 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'url': 'https://api.github.com/users/dolphin-emu', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}'}, 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'has_downloads': True, 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'watchers': 5799, 'license': {'name': 'GNU General Public License v2.0', 'node_id': 'MDc6TGljZW5zZTg=', 'spdx_id': 'GPL-2.0', 'key': 'gpl-2.0', 'url': 'https://api.github.com/licenses/gpl-2.0'}, 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'homepage': 'https://dolphin-emu.org/', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'id': 11577304, 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'pushed_at': '2019-12-06T21:30:29Z', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}'}, 'comment': {'id': 562839772, 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8451', 'created_at': '2019-12-07T10:54:52Z', 'node_id': 'MDEyOklzc3VlQ29tbWVudDU2MjgzOTc3Mg==', 'author_association': 'CONTRIBUTOR', 'body': 'I think this PR is ready to merge now.', 'updated_at': '2019-12-07T10:54:52Z', 'user': {'type': 'User', 'avatar_url': 'https://avatars1.githubusercontent.com/u/47765059?v=4', 'login': 'rlnilsen', 'gists_url': 'https://api.github.com/users/rlnilsen/gists{/gist_id}', 'html_url': 'https://github.com/rlnilsen', 'events_url': 'https://api.github.com/users/rlnilsen/events{/privacy}', 'id': 47765059, 'site_admin': False, 'followers_url': 'https://api.github.com/users/rlnilsen/followers', 'subscriptions_url': 'https://api.github.com/users/rlnilsen/subscriptions', 'node_id': 'MDQ6VXNlcjQ3NzY1MDU5', 'organizations_url': 'https://api.github.com/users/rlnilsen/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/rlnilsen/received_events', 'following_url': 'https://api.github.com/users/rlnilsen/following{/other_user}', 'repos_url': 'https://api.github.com/users/rlnilsen/repos', 'url': 'https://api.github.com/users/rlnilsen', 'starred_url': 'https://api.github.com/users/rlnilsen/starred{/owner}{/repo}'}, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/562839772', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8451#issuecomment-562839772'}, 'organization': {'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'description': '', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events', 'id': 5050316, 'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'url': 'https://api.github.com/orgs/dolphin-emu'}, 'issue': {'created_at': '2019-11-04T03:53:51Z', 'assignees': [], 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8451/labels{/name}', 'milestone': None, 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'number': 8451, 'updated_at': '2019-12-07T10:54:52Z', 'node_id': 'MDExOlB1bGxSZXF1ZXN0MzM2MTE0MDIz', 'author_association': 'CONTRIBUTOR', 'labels': [], 'state': 'open', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8451', 'user': {'type': 'User', 'avatar_url': 'https://avatars1.githubusercontent.com/u/47765059?v=4', 'login': 'rlnilsen', 'gists_url': 'https://api.github.com/users/rlnilsen/gists{/gist_id}', 'html_url': 'https://github.com/rlnilsen', 'events_url': 'https://api.github.com/users/rlnilsen/events{/privacy}', 'id': 47765059, 'site_admin': False, 'followers_url': 'https://api.github.com/users/rlnilsen/followers', 'subscriptions_url': 'https://api.github.com/users/rlnilsen/subscriptions', 'node_id': 'MDQ6VXNlcjQ3NzY1MDU5', 'organizations_url': 'https://api.github.com/users/rlnilsen/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/rlnilsen/received_events', 'following_url': 'https://api.github.com/users/rlnilsen/following{/other_user}', 'repos_url': 'https://api.github.com/users/rlnilsen/repos', 'url': 'https://api.github.com/users/rlnilsen', 'starred_url': 'https://api.github.com/users/rlnilsen/starred{/owner}{/repo}'}, 'locked': False, 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8451', 'body': "After discussions we ended up with the following UI layout. When (and only when) Nunchuk is selected as extension, two extra tabs appear: 'Extension Motion Simulation' and 'Extension Motion Input'.\r\n\r\n![2019-11-06 18_43_04-vs2017 (1) - Remote Viewer](https://user-images.githubusercontent.com/47765059/68323410-aa10b380-00c5-11ea-8e6a-a979458a6d73.png)\r\n![2019-11-06 18_43_27-vs2017 (1) - Remote Viewer](https://user-images.githubusercontent.com/47765059/68323417-ac730d80-00c5-11ea-8693-be56f26c9bfe.png)\r\n![2019-11-06 18_55_52-vs2017 (1) - Remote Viewer](https://user-images.githubusercontent.com/47765059/68324178-25bf3000-00c7-11ea-9757-612f3344ffa3.png)\r\n\r\n#### To preserve the context of the discussion that took place, the original version of this post is preserved below\r\n\r\nThe UI layout was slightly adjusted to allow fitting five control groups on a 1024 pixel wide screen.\r\nAdded the same warning text and `Alternate Input Sources` button as on the `Motion Input` tab.\r\n\r\n![2019-11-04 18_48_38-vs2017 (1) - Remote Viewer](https://user-images.githubusercontent.com/47765059/68145593-72bfcc80-ff36-11e9-843a-e3bbb43a1f97.png)\r\n", 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8451/events', 'id': 516948473, 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8451/comments', 'title': 'Add motion input support to nunchuk', 'comments': 32, 'closed_at': None, 'pull_request': {'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/8451.patch', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/8451.diff', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8451', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8451'}, 'assignee': None}, 'sender': {'type': 'User', 'avatar_url': 'https://avatars1.githubusercontent.com/u/47765059?v=4', 'login': 'rlnilsen', 'gists_url': 'https://api.github.com/users/rlnilsen/gists{/gist_id}', 'html_url': 'https://github.com/rlnilsen', 'events_url': 'https://api.github.com/users/rlnilsen/events{/privacy}', 'id': 47765059, 'site_admin': False, 'followers_url': 'https://api.github.com/users/rlnilsen/followers', 'subscriptions_url': 'https://api.github.com/users/rlnilsen/subscriptions', 'node_id': 'MDQ6VXNlcjQ3NzY1MDU5', 'organizations_url': 'https://api.github.com/users/rlnilsen/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/rlnilsen/received_events', 'following_url': 'https://api.github.com/users/rlnilsen/following{/other_user}', 'repos_url': 'https://api.github.com/users/rlnilsen/repos', 'url': 'https://api.github.com/users/rlnilsen', 'starred_url': 'https://api.github.com/users/rlnilsen/starred{/owner}{/repo}'}}, 'safe_author': True, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'body': 'I think this PR is ready to merge now.', 'action': 'created', 'title': 'Add motion input support to nunchuk', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8451#issuecomment-562839772', 'author': 'rlnilsen'}
2019-12-06T17:47:30.555919	{'type': 'gh_issue_comment', 'id': 8492, 'raw': {'action': 'created', 'repository': {'fork': False, 'has_wiki': True, 'mirror_url': None, 'open_issues_count': 171, 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'forks': 1329, 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'html_url': 'https://github.com/dolphin-emu/dolphin', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'open_issues': 171, 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'language': 'C++', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'default_branch': 'master', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'watchers_count': 5798, 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'name': 'dolphin', 'size': 386668, 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'has_pages': False, 'has_issues': False, 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'disabled': False, 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'stargazers_count': 5798, 'created_at': '2013-07-22T09:07:57Z', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'archived': False, 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'full_name': 'dolphin-emu/dolphin', 'updated_at': '2019-12-06T16:00:46Z', 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'private': False, 'forks_count': 1329, 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'has_projects': False, 'owner': {'type': 'Organization', 'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'html_url': 'https://github.com/dolphin-emu', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'id': 5050316, 'site_admin': False, 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'url': 'https://api.github.com/users/dolphin-emu', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}'}, 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'has_downloads': True, 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'watchers': 5798, 'license': {'name': 'GNU General Public License v2.0', 'node_id': 'MDc6TGljZW5zZTg=', 'spdx_id': 'GPL-2.0', 'key': 'gpl-2.0', 'url': 'https://api.github.com/licenses/gpl-2.0'}, 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'homepage': 'https://dolphin-emu.org/', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'id': 11577304, 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'pushed_at': '2019-12-06T17:14:44Z', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}'}, 'comment': {'id': 562671499, 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8492', 'created_at': '2019-12-06T17:47:29Z', 'node_id': 'MDEyOklzc3VlQ29tbWVudDU2MjY3MTQ5OQ==', 'author_association': 'NONE', 'body': '@OatmealDome thnx', 'updated_at': '2019-12-06T17:47:29Z', 'user': {'type': 'User', 'avatar_url': 'https://avatars2.githubusercontent.com/u/58544833?v=4', 'login': 'SGamer33', 'gists_url': 'https://api.github.com/users/SGamer33/gists{/gist_id}', 'html_url': 'https://github.com/SGamer33', 'events_url': 'https://api.github.com/users/SGamer33/events{/privacy}', 'id': 58544833, 'site_admin': False, 'followers_url': 'https://api.github.com/users/SGamer33/followers', 'subscriptions_url': 'https://api.github.com/users/SGamer33/subscriptions', 'node_id': 'MDQ6VXNlcjU4NTQ0ODMz', 'organizations_url': 'https://api.github.com/users/SGamer33/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/SGamer33/received_events', 'following_url': 'https://api.github.com/users/SGamer33/following{/other_user}', 'repos_url': 'https://api.github.com/users/SGamer33/repos', 'url': 'https://api.github.com/users/SGamer33', 'starred_url': 'https://api.github.com/users/SGamer33/starred{/owner}{/repo}'}, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/562671499', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8492#issuecomment-562671499'}, 'organization': {'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'description': '', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events', 'id': 5050316, 'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'url': 'https://api.github.com/orgs/dolphin-emu'}, 'issue': {'created_at': '2019-11-24T21:15:23Z', 'assignees': [], 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8492/labels{/name}', 'milestone': None, 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'number': 8492, 'updated_at': '2019-12-06T17:47:29Z', 'node_id': 'MDExOlB1bGxSZXF1ZXN0MzQ0OTQ5Mzk4', 'author_association': 'CONTRIBUTOR', 'labels': [], 'state': 'open', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8492', 'user': {'type': 'User', 'avatar_url': 'https://avatars0.githubusercontent.com/u/11504941?v=4', 'login': 'OatmealDome', 'gists_url': 'https://api.github.com/users/OatmealDome/gists{/gist_id}', 'html_url': 'https://github.com/OatmealDome', 'events_url': 'https://api.github.com/users/OatmealDome/events{/privacy}', 'id': 11504941, 'site_admin': False, 'followers_url': 'https://api.github.com/users/OatmealDome/followers', 'subscriptions_url': 'https://api.github.com/users/OatmealDome/subscriptions', 'node_id': 'MDQ6VXNlcjExNTA0OTQx', 'organizations_url': 'https://api.github.com/users/OatmealDome/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/OatmealDome/received_events', 'following_url': 'https://api.github.com/users/OatmealDome/following{/other_user}', 'repos_url': 'https://api.github.com/users/OatmealDome/repos', 'url': 'https://api.github.com/users/OatmealDome', 'starred_url': 'https://api.github.com/users/OatmealDome/starred{/owner}{/repo}'}, 'locked': False, 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8492', 'body': 'This PR adds experimental support for iOS devices with a working JIT. It is by no means complete, and is only intended to initiate a discussion as to whether iOS is a platform that Dolphin should support.\r\n\r\n# READ THIS FIRST\r\n\r\nYou probably shouldn\'t ask for technical support in the comments here.\r\n\r\n**Please remember that this isn\'t ready for general use yet. I cannot stress this enough. If you only know enough to press the run button in Xcode, you should probably wait for some sort of release. If you still really want to try it out, be sure you read the PR fully to understand the current issues and limitations.**\r\n\r\nIf you need support, or are a developer who would like to contribute, contact me on [Twitter](https://twitter.com/OatmealDome) or [ask in #dolphin-ios on my Discord server](https://discord.gg/rdx6Bt8) (I may take a while to respond since I\'m currently busy with other responsibilities - I\'ll ping you when I get a chance).\r\n\r\n# PR details\r\n\r\nFirst off, [here\'s a quick demo video](https://youtu.be/CI4SGePajYo) and some screenshots.\r\n\r\n<img src="https://cdn.oatmealdome.me/screenshots/dolphin-ios/xenoblade.png" width="50%" height="50%">\r\n\r\n<img src="https://cdn.oatmealdome.me/screenshots/dolphin-ios/animal_crossing.png" width="50%" height="50%">\r\n\r\n<img src="https://cdn.oatmealdome.me/screenshots/dolphin-ios/melee.png" width="50%" height="50%">\r\n\r\n<img src="https://cdn.oatmealdome.me/screenshots/dolphin-ios/mkw.png" width="50%" height="50%">\r\n\r\nLet\'s get into the details.\r\n\r\n## Application\r\n\r\nA new Xcode project has been placed in `Source/iOS/DolphiniOS`. The build system for iOS takes inspiration from the Android version of Dolphin.\r\n\r\nXcode has been configured to run some shell scripts on every build. The first one runs `cmake` using an iOS toolchain to create static libraries, which are then linked into the application.  The second shell script copies image assets from the Android port.\r\n\r\nThe ``Sys`` folder is embedded into the bundle.\r\n\r\nA "jni" equivalent can be found in `Source/iOS/Interface`. Its only purpose is to hold the `MainiOS` source file.\r\n\r\n### User interface\r\n\r\nThe UI is written in Objective-C and Swift. It is extremely barebones at the moment - while there is a working touchscreen controller, pretty much everything else needs work.\r\n\r\nThe code is 50/50 Objective-C and Swift, but I believe it would be best to write future UI code in Swift and transition what we can away from Objective-C. (Given the necessity of using C++ to access Dolphin code, some Objective-C++ will likely need to stay if this port is given a green light.) \r\n\r\nAll Dolphin user files are stored in the app container\'s Documents directory. [This folder is then exposed to `Files.app`, allowing users to modify files as they wish](https://cdn.oatmealdome.me/screenshots/dolphin-ios/oMRQ0DA.png).\r\n\r\nA `Software` folder is automatically created in the Documents directory. The UI will automatically scan this folder for software and show found files in a list on startup.\r\n\r\n### Target devices\r\n\r\n* **The device must be jailbroken.**\r\n* Devices with A9, A10, and A11 processors were tested. These were an iPhone 6s, a 6th gen iPad, and an iPhone X.\r\n* A8, A12, and A13 devices were unable to be tested because @Simonx22 and I don\'t own any.\r\n* [A7 and A8 processors have GPUs that don\'t support arrays of textures](https://developer.apple.com/metal/Metal-Feature-Set-Tables.pdf), so the Vulkan backend is not supported.\r\n* A6 processors and below are 32-bit.\r\n\r\nThe minimum supported devices should be ones with an A9 processor.\r\n\r\n### Building\r\n\r\nYou need the following:\r\n\r\n* Mac\r\n* Xcode 11 (older Xcode versions may work, not tested)\r\n* `cmake`\r\n* Jailbroken iOS / iPadOS device running iOS 12 and above\r\n\r\nThen, you can build:\r\n\r\n1. Install AppSync Unified on your device from `cydia.angelxwind.net`.\r\n2. Clone the repo.\r\n3. Open `Source/iOS/DolphiniOS/DolphiniOS.xcodeproj`.\r\n4. Initiate a build in Xcode.\r\n\r\n## Problems\r\n\r\n### Limitations\r\n\r\n* BoundingBox is not supported, since [MoltenVK sets ``fragmentStoresAndAtomics``  to `true` only on macOS](https://github.com/KhronosGroup/MoltenVK/blob/789ef74d11d9ea9ce912f6df3d018e1d194a1fdb/MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm#L1038). However, forcing this feature to be enabled shows that it works fine on iOS (albeit with minor glitches). I\'m not sure what I should be looking for on the Metal feature set table to see if iOS GPU drivers really support this feature.\r\n* Metal does not support geometry shaders or setting line width.\r\n* OpenGLES, like OpenGL on macOS, has been abandoned for a very long time. `EXT_buffer_storage` support is nowhere to be found. As expected, the OpenGL backend is unusable.\r\n\r\n### Known issues\r\n\r\n* `Core::IsCPUThread()` does not work for some reason. The call in `JitArm64::HandleFault()` needs to be commented out when testing for now.\r\n* Controller INIs from the Android version needs to be copied manually. ``GCPadNew.ini`` and `WiimoteNew.ini` go in ``Config`` and  ``WiimoteProfile.ini`` in ``Config/Profiles/Wiimote``.\r\n* To stop emulation, you have to quit the application.\r\n* You have to manually switch the controller type (GameCube controller or Wiimote with Nunchuk) in the source code.\r\n* There is no D-Pad on any controller type.\r\n* There is no build system that generates a ``deb`` for Cydia.\r\n* There are likely code style compliance issues. Swift code is entirely unchecked by lint.\r\n* Many other things.\r\n\r\n### Regarding the jailbroken device requirement\r\n\r\nThe iOS kernel places an artificial restriction on the amount of address space that each process can access, depending on how much RAM the device has. This is the core issue that plagued Dolphin support for a very, *very* long time. Fastmem requires a large amount of virtual memory to play with, which unfortunately is greater than the limit of every publicly released iOS device.\r\n\r\nThankfully, Apple created an entitlement called `dynamic-codesigning` that allows the process to create executable memory. It was added for applications that need JIT, like Safari. An additional perk of `dynamic-codesigning` is that [it also allows the process to access a large amount of address space](https://github.com/apple/darwin-xnu/blob/master/tests/jumbo_va_spaces_28530648.c). However, it cannot be set on third-party apps as it is an Apple-internal entitlement. This is why a jailbroken device is needed.\r\n\r\nThere is a way, however, to run Dolphin under a jailed device. (In fact, I am doing the majority of my testing on a jailed device.) It requires modifying the iOS bootloader and setting the boot argument `arm64_maxoffset`. Because this method is quite complicated, I don\'t think this is a viable option for end-users. It is significantly easier to just require a jailbroken device than to support users who try this method.\r\n\r\n### The future\r\n\r\nAs we all know, Dolphin support for macOS doesn\'t get much love because of a lack of maintainers. While I don\'t plan to abandon this project, I think it would be best to see if any others are willing to contribute. I am just one person, after all.\r\n\r\n## Changes to Dolphin\r\n\r\nThis is a non-exhaustive list.\r\n\r\n* The define ``IPHONEOS`` has been introduced. ``IOS`` is not used to avoid confusion and conflicts with the Wii\'s IOS.\r\n* The iOS cmake toolchain from [here](https://github.com/leetal/ios-cmake) has been added. `CMakeLists` use ``IOS`` because it is set from the toolchain.\r\n* Mach\'s vm functions are used wherever possible ([one](https://github.com/OatmealDome/dolphin/commit/fbffaa4b429af4fc725c7093837aa142f21cc006#diff-1f416de641b3f6132c533a0feb099829), [two](https://github.com/OatmealDome/dolphin/commit/d3e100a0a854becaaf053cb5aeae2de77a961eed)).\r\n* (This only applies to jailed devices.) When attached to a debugger, iOS allows memory to be marked as executable. However, memory cannot be writable and executable at the same time, so code has been introduced into the ARM64 JIT to support W^X exclusivity.\r\n* A new "EAGL" GLInterface was introduced. Also, because iOS doesn\'t create a default framebuffer, [the OpenGL backend calls the EAGL GLInterface to create one](https://github.com/OatmealDome/dolphin/commit/8b9064ececa69ee47e468d242dd7ac270b209f40).\r\n* The iOS MoltenVK dylib has been added to Externals.\r\n* The CoreAudio backend has been restored, because [Cubeb support for iOS is old and broken](https://github.com/kinetiknz/cubeb/issues/394).\r\n* Since `ButtonManager` and `Touchscreen` are useful on iOS too, they have been moved into a new "Touch" folder in InputCommon.\r\n* The required clang-format version has been updated to 9.0. Some Objective-C code was not being formatted correctly on 7.0 for whatever reason.\r\n\r\n## Credits\r\n\r\nThis PR is the culmination of many attempts by several people, including myself. It could not be done without them and support from others.\r\n\r\nPrevious PRs:\r\n\r\n* #3881\r\n* #3885\r\n* #3941\r\n\r\nThanks to:\r\n\r\n* @Simonx22 for testing\r\n* leetal\'s [iOS toolchain for cmake](https://github.com/leetal/ios-cmake)\r\n* ppsspp for mach vm functions and W^X exclusivity example code \r\n* Apple for releasing their ARM XNU sources', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8492/events', 'id': 527757689, 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8492/comments', 'title': '[RFC / WIP] iOS support with working JIT', 'comments': 35, 'closed_at': None, 'pull_request': {'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/8492.patch', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/8492.diff', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8492', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8492'}, 'assignee': None}, 'sender': {'type': 'User', 'avatar_url': 'https://avatars2.githubusercontent.com/u/58544833?v=4', 'login': 'SGamer33', 'gists_url': 'https://api.github.com/users/SGamer33/gists{/gist_id}', 'html_url': 'https://github.com/SGamer33', 'events_url': 'https://api.github.com/users/SGamer33/events{/privacy}', 'id': 58544833, 'site_admin': False, 'followers_url': 'https://api.github.com/users/SGamer33/followers', 'subscriptions_url': 'https://api.github.com/users/SGamer33/subscriptions', 'node_id': 'MDQ6VXNlcjU4NTQ0ODMz', 'organizations_url': 'https://api.github.com/users/SGamer33/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/SGamer33/received_events', 'following_url': 'https://api.github.com/users/SGamer33/following{/other_user}', 'repos_url': 'https://api.github.com/users/SGamer33/repos', 'url': 'https://api.github.com/users/SGamer33', 'starred_url': 'https://api.github.com/users/SGamer33/starred{/owner}{/repo}'}}, 'safe_author': False, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'body': '@OatmealDome thnx', 'action': 'created', 'title': '[RFC / WIP] iOS support with working JIT', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8492#issuecomment-562671499', 'author': 'SGamer33'}
2019-12-06T12:25:20.387900	{'type': 'gh_issue_comment', 'id': 8492, 'raw': {'action': 'deleted', 'repository': {'fork': False, 'has_wiki': True, 'mirror_url': None, 'open_issues_count': 170, 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'forks': 1329, 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'html_url': 'https://github.com/dolphin-emu/dolphin', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'open_issues': 170, 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'language': 'C++', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'default_branch': 'master', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'watchers_count': 5797, 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'name': 'dolphin', 'size': 386665, 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'has_pages': False, 'has_issues': False, 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'disabled': False, 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'stargazers_count': 5797, 'created_at': '2013-07-22T09:07:57Z', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'archived': False, 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'full_name': 'dolphin-emu/dolphin', 'updated_at': '2019-12-06T08:15:33Z', 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'private': False, 'forks_count': 1329, 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'has_projects': False, 'owner': {'type': 'Organization', 'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'html_url': 'https://github.com/dolphin-emu', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'id': 5050316, 'site_admin': False, 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'url': 'https://api.github.com/users/dolphin-emu', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}'}, 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'has_downloads': True, 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'watchers': 5797, 'license': {'name': 'GNU General Public License v2.0', 'node_id': 'MDc6TGljZW5zZTg=', 'spdx_id': 'GPL-2.0', 'key': 'gpl-2.0', 'url': 'https://api.github.com/licenses/gpl-2.0'}, 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'homepage': 'https://dolphin-emu.org/', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'id': 11577304, 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'pushed_at': '2019-12-05T19:02:51Z', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}'}, 'comment': {'id': 562412571, 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8492', 'created_at': '2019-12-06T03:03:52Z', 'node_id': 'MDEyOklzc3VlQ29tbWVudDU2MjQxMjU3MQ==', 'author_association': 'NONE', 'body': 'First of all thanks OatmealDome for making this pull request, super interested in ios support for Dolphin. I just had a quick question, I am getting an error when I try running an iso. I get the same error after building on two Macs and running on two different devices. (iPhone X 12.4 and iPad Air 2 13.1.2) I keep getting a "CPU thread (14): EXC_BAD_ACCESS (code=1, address=0x56c00500a)" error after i try and open an iso. I\'m also getting a "Thread 1: signal SIGABRT" error on line 16 in the main. ', 'updated_at': '2019-12-06T03:03:52Z', 'user': {'type': 'User', 'avatar_url': 'https://avatars1.githubusercontent.com/u/52388606?v=4', 'login': 'JohnG210', 'gists_url': 'https://api.github.com/users/JohnG210/gists{/gist_id}', 'html_url': 'https://github.com/JohnG210', 'events_url': 'https://api.github.com/users/JohnG210/events{/privacy}', 'id': 52388606, 'site_admin': False, 'followers_url': 'https://api.github.com/users/JohnG210/followers', 'subscriptions_url': 'https://api.github.com/users/JohnG210/subscriptions', 'node_id': 'MDQ6VXNlcjUyMzg4NjA2', 'organizations_url': 'https://api.github.com/users/JohnG210/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/JohnG210/received_events', 'following_url': 'https://api.github.com/users/JohnG210/following{/other_user}', 'repos_url': 'https://api.github.com/users/JohnG210/repos', 'url': 'https://api.github.com/users/JohnG210', 'starred_url': 'https://api.github.com/users/JohnG210/starred{/owner}{/repo}'}, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/562412571', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8492#issuecomment-562412571'}, 'organization': {'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'description': '', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events', 'id': 5050316, 'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'url': 'https://api.github.com/orgs/dolphin-emu'}, 'issue': {'created_at': '2019-11-24T21:15:23Z', 'assignees': [], 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8492/labels{/name}', 'milestone': None, 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'number': 8492, 'updated_at': '2019-12-06T06:19:56Z', 'node_id': 'MDExOlB1bGxSZXF1ZXN0MzQ0OTQ5Mzk4', 'author_association': 'CONTRIBUTOR', 'labels': [], 'state': 'open', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8492', 'user': {'type': 'User', 'avatar_url': 'https://avatars0.githubusercontent.com/u/11504941?v=4', 'login': 'OatmealDome', 'gists_url': 'https://api.github.com/users/OatmealDome/gists{/gist_id}', 'html_url': 'https://github.com/OatmealDome', 'events_url': 'https://api.github.com/users/OatmealDome/events{/privacy}', 'id': 11504941, 'site_admin': False, 'followers_url': 'https://api.github.com/users/OatmealDome/followers', 'subscriptions_url': 'https://api.github.com/users/OatmealDome/subscriptions', 'node_id': 'MDQ6VXNlcjExNTA0OTQx', 'organizations_url': 'https://api.github.com/users/OatmealDome/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/OatmealDome/received_events', 'following_url': 'https://api.github.com/users/OatmealDome/following{/other_user}', 'repos_url': 'https://api.github.com/users/OatmealDome/repos', 'url': 'https://api.github.com/users/OatmealDome', 'starred_url': 'https://api.github.com/users/OatmealDome/starred{/owner}{/repo}'}, 'locked': False, 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8492', 'body': 'This PR adds experimental support for iOS devices with a working JIT. It is by no means complete, and is only intended to initiate a discussion as to whether iOS is a platform that Dolphin should support.\r\n\r\n# READ THIS FIRST\r\n\r\nYou probably shouldn\'t ask for technical support in the comments here.\r\n\r\n**Please remember that this isn\'t ready for general use yet. I cannot stress this enough. If you only know enough to press the run button in Xcode, you should probably wait for some sort of release. If you still really want to try it out, be sure you read the PR fully to understand the current issues and limitations.**\r\n\r\nIf you need support, or are a developer who would like to contribute, contact me on [Twitter](https://twitter.com/OatmealDome) or [ask in #dolphin-ios on my Discord server](https://discord.gg/rdx6Bt8) (I may take a while to respond since I\'m currently busy with other responsibilities - I\'ll ping you when I get a chance).\r\n\r\n# PR details\r\n\r\nFirst off, [here\'s a quick demo video](https://youtu.be/CI4SGePajYo) and some screenshots.\r\n\r\n<img src="https://cdn.oatmealdome.me/screenshots/dolphin-ios/xenoblade.png" width="50%" height="50%">\r\n\r\n<img src="https://cdn.oatmealdome.me/screenshots/dolphin-ios/animal_crossing.png" width="50%" height="50%">\r\n\r\n<img src="https://cdn.oatmealdome.me/screenshots/dolphin-ios/melee.png" width="50%" height="50%">\r\n\r\n<img src="https://cdn.oatmealdome.me/screenshots/dolphin-ios/mkw.png" width="50%" height="50%">\r\n\r\nLet\'s get into the details.\r\n\r\n## Application\r\n\r\nA new Xcode project has been placed in `Source/iOS/DolphiniOS`. The build system for iOS takes inspiration from the Android version of Dolphin.\r\n\r\nXcode has been configured to run some shell scripts on every build. The first one runs `cmake` using an iOS toolchain to create static libraries, which are then linked into the application.  The second shell script copies image assets from the Android port.\r\n\r\nThe ``Sys`` folder is embedded into the bundle.\r\n\r\nA "jni" equivalent can be found in `Source/iOS/Interface`. Its only purpose is to hold the `MainiOS` source file.\r\n\r\n### User interface\r\n\r\nThe UI is written in Objective-C and Swift. It is extremely barebones at the moment - while there is a working touchscreen controller, pretty much everything else needs work.\r\n\r\nThe code is 50/50 Objective-C and Swift, but I believe it would be best to write future UI code in Swift and transition what we can away from Objective-C. (Given the necessity of using C++ to access Dolphin code, some Objective-C++ will likely need to stay if this port is given a green light.) \r\n\r\nAll Dolphin user files are stored in the app container\'s Documents directory. [This folder is then exposed to `Files.app`, allowing users to modify files as they wish](https://cdn.oatmealdome.me/screenshots/dolphin-ios/oMRQ0DA.png).\r\n\r\nA `Software` folder is automatically created in the Documents directory. The UI will automatically scan this folder for software and show found files in a list on startup.\r\n\r\n### Target devices\r\n\r\n* **The device must be jailbroken.**\r\n* Devices with A9, A10, and A11 processors were tested. These were an iPhone 6s, a 6th gen iPad, and an iPhone X.\r\n* A8, A12, and A13 devices were unable to be tested because @Simonx22 and I don\'t own any.\r\n* [A7 and A8 processors have GPUs that don\'t support arrays of textures](https://developer.apple.com/metal/Metal-Feature-Set-Tables.pdf), so the Vulkan backend is not supported.\r\n* A6 processors and below are 32-bit.\r\n\r\nThe minimum supported devices should be ones with an A9 processor.\r\n\r\n### Building\r\n\r\nYou need the following:\r\n\r\n* Mac\r\n* Xcode 11 (older Xcode versions may work, not tested)\r\n* `cmake`\r\n* Jailbroken iOS / iPadOS device running iOS 12 and above\r\n\r\nThen, you can build:\r\n\r\n1. Install AppSync Unified on your device from `cydia.angelxwind.net`.\r\n2. Clone the repo.\r\n3. Open `Source/iOS/DolphiniOS/DolphiniOS.xcodeproj`.\r\n4. Initiate a build in Xcode.\r\n\r\n## Problems\r\n\r\n### Limitations\r\n\r\n* BoundingBox is not supported, since [MoltenVK sets ``fragmentStoresAndAtomics``  to `true` only on macOS](https://github.com/KhronosGroup/MoltenVK/blob/789ef74d11d9ea9ce912f6df3d018e1d194a1fdb/MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm#L1038). However, forcing this feature to be enabled shows that it works fine on iOS (albeit with minor glitches). I\'m not sure what I should be looking for on the Metal feature set table to see if iOS GPU drivers really support this feature.\r\n* Metal does not support geometry shaders or setting line width.\r\n* OpenGLES, like OpenGL on macOS, has been abandoned for a very long time. `EXT_buffer_storage` support is nowhere to be found. As expected, the OpenGL backend is unusable.\r\n\r\n### Known issues\r\n\r\n* `Core::IsCPUThread()` does not work for some reason. The call in `JitArm64::HandleFault()` needs to be commented out when testing for now.\r\n* Controller INIs from the Android version needs to be copied manually. ``GCPadNew.ini`` and `WiimoteNew.ini` go in ``Config`` and  ``WiimoteProfile.ini`` in ``Config/Profiles/Wiimote``.\r\n* To stop emulation, you have to quit the application.\r\n* You have to manually switch the controller type (GameCube controller or Wiimote with Nunchuk) in the source code.\r\n* There is no D-Pad on any controller type.\r\n* There is no build system that generates a ``deb`` for Cydia.\r\n* There are likely code style compliance issues. Swift code is entirely unchecked by lint.\r\n* Many other things.\r\n\r\n### Regarding the jailbroken device requirement\r\n\r\nThe iOS kernel places an artificial restriction on the amount of address space that each process can access, depending on how much RAM the device has. This is the core issue that plagued Dolphin support for a very, *very* long time. Fastmem requires a large amount of virtual memory to play with, which unfortunately is greater than the limit of every publicly released iOS device.\r\n\r\nThankfully, Apple created an entitlement called `dynamic-codesigning` that allows the process to create executable memory. It was added for applications that need JIT, like Safari. An additional perk of `dynamic-codesigning` is that [it also allows the process to access a large amount of address space](https://github.com/apple/darwin-xnu/blob/master/tests/jumbo_va_spaces_28530648.c). However, it cannot be set on third-party apps as it is an Apple-internal entitlement. This is why a jailbroken device is needed.\r\n\r\nThere is a way, however, to run Dolphin under a jailed device. (In fact, I am doing the majority of my testing on a jailed device.) It requires modifying the iOS bootloader and setting the boot argument `arm64_maxoffset`. Because this method is quite complicated, I don\'t think this is a viable option for end-users. It is significantly easier to just require a jailbroken device than to support users who try this method.\r\n\r\n### The future\r\n\r\nAs we all know, Dolphin support for macOS doesn\'t get much love because of a lack of maintainers. While I don\'t plan to abandon this project, I think it would be best to see if any others are willing to contribute. I am just one person, after all.\r\n\r\n## Changes to Dolphin\r\n\r\nThis is a non-exhaustive list.\r\n\r\n* The define ``IPHONEOS`` has been introduced. ``IOS`` is not used to avoid confusion and conflicts with the Wii\'s IOS.\r\n* The iOS cmake toolchain from [here](https://github.com/leetal/ios-cmake) has been added. `CMakeLists` use ``IOS`` because it is set from the toolchain.\r\n* Mach\'s vm functions are used wherever possible ([one](https://github.com/OatmealDome/dolphin/commit/fbffaa4b429af4fc725c7093837aa142f21cc006#diff-1f416de641b3f6132c533a0feb099829), [two](https://github.com/OatmealDome/dolphin/commit/d3e100a0a854becaaf053cb5aeae2de77a961eed)).\r\n* (This only applies to jailed devices.) When attached to a debugger, iOS allows memory to be marked as executable. However, memory cannot be writable and executable at the same time, so code has been introduced into the ARM64 JIT to support W^X exclusivity.\r\n* A new "EAGL" GLInterface was introduced. Also, because iOS doesn\'t create a default framebuffer, [the OpenGL backend calls the EAGL GLInterface to create one](https://github.com/OatmealDome/dolphin/commit/8b9064ececa69ee47e468d242dd7ac270b209f40).\r\n* The iOS MoltenVK dylib has been added to Externals.\r\n* The CoreAudio backend has been restored, because [Cubeb support for iOS is old and broken](https://github.com/kinetiknz/cubeb/issues/394).\r\n* Since `ButtonManager` and `Touchscreen` are useful on iOS too, they have been moved into a new "Touch" folder in InputCommon.\r\n* The required clang-format version has been updated to 9.0. Some Objective-C code was not being formatted correctly on 7.0 for whatever reason.\r\n\r\n## Credits\r\n\r\nThis PR is the culmination of many attempts by several people, including myself. It could not be done without them and support from others.\r\n\r\nPrevious PRs:\r\n\r\n* #3881\r\n* #3885\r\n* #3941\r\n\r\nThanks to:\r\n\r\n* @Simonx22 for testing\r\n* leetal\'s [iOS toolchain for cmake](https://github.com/leetal/ios-cmake)\r\n* ppsspp for mach vm functions and W^X exclusivity example code \r\n* Apple for releasing their ARM XNU sources', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8492/events', 'id': 527757689, 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8492/comments', 'title': '[RFC / WIP] iOS support with working JIT', 'comments': 36, 'closed_at': None, 'pull_request': {'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/8492.patch', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/8492.diff', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8492', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8492'}, 'assignee': None}, 'sender': {'type': 'User', 'avatar_url': 'https://avatars1.githubusercontent.com/u/52388606?v=4', 'login': 'JohnG210', 'gists_url': 'https://api.github.com/users/JohnG210/gists{/gist_id}', 'html_url': 'https://github.com/JohnG210', 'events_url': 'https://api.github.com/users/JohnG210/events{/privacy}', 'id': 52388606, 'site_admin': False, 'followers_url': 'https://api.github.com/users/JohnG210/followers', 'subscriptions_url': 'https://api.github.com/users/JohnG210/subscriptions', 'node_id': 'MDQ6VXNlcjUyMzg4NjA2', 'organizations_url': 'https://api.github.com/users/JohnG210/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/JohnG210/received_events', 'following_url': 'https://api.github.com/users/JohnG210/following{/other_user}', 'repos_url': 'https://api.github.com/users/JohnG210/repos', 'url': 'https://api.github.com/users/JohnG210', 'starred_url': 'https://api.github.com/users/JohnG210/starred{/owner}{/repo}'}}, 'safe_author': False, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'body': 'First of all thanks OatmealDome for making this pull request, super interested in ios support for Dolphin. I just had a quick question, I am getting an error when I try running an iso. I get the same error after building on two Macs and running on two different devices. (iPhone X 12.4 and iPad Air 2 13.1.2) I keep getting a "CPU thread (14): EXC_BAD_ACCESS (code=1, address=0x56c00500a)" error after i try and open an iso. I\'m also getting a "Thread 1: signal SIGABRT" error on line 16 in the main. ', 'action': 'deleted', 'title': '[RFC / WIP] iOS support with working JIT', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8492#issuecomment-562412571', 'author': 'JohnG210'}
2019-12-06T08:49:35.213051	{'type': 'gh_issue_comment', 'id': 8513, 'raw': {'action': 'created', 'repository': {'fork': False, 'has_wiki': True, 'mirror_url': None, 'open_issues_count': 170, 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'forks': 1329, 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'html_url': 'https://github.com/dolphin-emu/dolphin', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'open_issues': 170, 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'language': 'C++', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'default_branch': 'master', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'watchers_count': 5797, 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'name': 'dolphin', 'size': 386665, 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'has_pages': False, 'has_issues': False, 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'disabled': False, 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'stargazers_count': 5797, 'created_at': '2013-07-22T09:07:57Z', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'archived': False, 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'full_name': 'dolphin-emu/dolphin', 'updated_at': '2019-12-06T08:15:33Z', 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'private': False, 'forks_count': 1329, 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'has_projects': False, 'owner': {'type': 'Organization', 'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'html_url': 'https://github.com/dolphin-emu', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'id': 5050316, 'site_admin': False, 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'url': 'https://api.github.com/users/dolphin-emu', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}'}, 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'has_downloads': True, 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'watchers': 5797, 'license': {'name': 'GNU General Public License v2.0', 'node_id': 'MDc6TGljZW5zZTg=', 'spdx_id': 'GPL-2.0', 'key': 'gpl-2.0', 'url': 'https://api.github.com/licenses/gpl-2.0'}, 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'homepage': 'https://dolphin-emu.org/', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'id': 11577304, 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'pushed_at': '2019-12-05T19:02:51Z', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}'}, 'comment': {'id': 562486995, 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8513', 'created_at': '2019-12-06T08:49:34Z', 'node_id': 'MDEyOklzc3VlQ29tbWVudDU2MjQ4Njk5NQ==', 'author_association': 'CONTRIBUTOR', 'body': "You are typecasting `u16` to `Coordinate` in user code just to have `Coordinate` typecast to `u32` again internally. I'd suggest either making `Coordinate` a private implementation detail of BoundingBox.cpp or introducing overloads so `Coordinate` overloads call `[G/S]etCoordinate(u16)`. It's an enum class so it's all fine.", 'updated_at': '2019-12-06T08:49:34Z', 'user': {'type': 'User', 'avatar_url': 'https://avatars1.githubusercontent.com/u/7947461?v=4', 'login': 'CookiePLMonster', 'gists_url': 'https://api.github.com/users/CookiePLMonster/gists{/gist_id}', 'html_url': 'https://github.com/CookiePLMonster', 'events_url': 'https://api.github.com/users/CookiePLMonster/events{/privacy}', 'id': 7947461, 'site_admin': False, 'followers_url': 'https://api.github.com/users/CookiePLMonster/followers', 'subscriptions_url': 'https://api.github.com/users/CookiePLMonster/subscriptions', 'node_id': 'MDQ6VXNlcjc5NDc0NjE=', 'organizations_url': 'https://api.github.com/users/CookiePLMonster/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/CookiePLMonster/received_events', 'following_url': 'https://api.github.com/users/CookiePLMonster/following{/other_user}', 'repos_url': 'https://api.github.com/users/CookiePLMonster/repos', 'url': 'https://api.github.com/users/CookiePLMonster', 'starred_url': 'https://api.github.com/users/CookiePLMonster/starred{/owner}{/repo}'}, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/562486995', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8513#issuecomment-562486995'}, 'organization': {'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'description': '', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events', 'id': 5050316, 'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'url': 'https://api.github.com/orgs/dolphin-emu'}, 'issue': {'created_at': '2019-12-05T17:03:54Z', 'assignees': [], 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8513/labels{/name}', 'milestone': None, 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'number': 8513, 'updated_at': '2019-12-06T08:49:34Z', 'node_id': 'MDExOlB1bGxSZXF1ZXN0MzQ5NTQ2MjYz', 'author_association': 'MEMBER', 'labels': [], 'state': 'open', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8513', 'user': {'type': 'User', 'avatar_url': 'https://avatars1.githubusercontent.com/u/712067?v=4', 'login': 'lioncash', 'gists_url': 'https://api.github.com/users/lioncash/gists{/gist_id}', 'html_url': 'https://github.com/lioncash', 'events_url': 'https://api.github.com/users/lioncash/events{/privacy}', 'id': 712067, 'site_admin': False, 'followers_url': 'https://api.github.com/users/lioncash/followers', 'subscriptions_url': 'https://api.github.com/users/lioncash/subscriptions', 'node_id': 'MDQ6VXNlcjcxMjA2Nw==', 'organizations_url': 'https://api.github.com/users/lioncash/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/lioncash/received_events', 'following_url': 'https://api.github.com/users/lioncash/following{/other_user}', 'repos_url': 'https://api.github.com/users/lioncash/repos', 'url': 'https://api.github.com/users/lioncash', 'starred_url': 'https://api.github.com/users/lioncash/starred{/owner}{/repo}'}, 'locked': False, 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8513', 'body': 'Rather than exposing the bounding box members directly, we can instead provide an interface for code to use. This makes it nicer to transition off of global data, as the interface function names are already in place when the stateful class is introduced, meaning only `BoundingBox::` generally needs to be replaced.\r\n\r\nWith this, we now also have a place for both the disabling of bounding box itself, but also a single location for notifying the pixel shader manager when bounding box is disabled or enabled.', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8513/events', 'id': 533478995, 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8513/comments', 'title': 'VideoCommon/BoundingBox: Make interface for querying bounding box data', 'comments': 1, 'closed_at': None, 'pull_request': {'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/8513.patch', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/8513.diff', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8513', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8513'}, 'assignee': None}, 'sender': {'type': 'User', 'avatar_url': 'https://avatars1.githubusercontent.com/u/7947461?v=4', 'login': 'CookiePLMonster', 'gists_url': 'https://api.github.com/users/CookiePLMonster/gists{/gist_id}', 'html_url': 'https://github.com/CookiePLMonster', 'events_url': 'https://api.github.com/users/CookiePLMonster/events{/privacy}', 'id': 7947461, 'site_admin': False, 'followers_url': 'https://api.github.com/users/CookiePLMonster/followers', 'subscriptions_url': 'https://api.github.com/users/CookiePLMonster/subscriptions', 'node_id': 'MDQ6VXNlcjc5NDc0NjE=', 'organizations_url': 'https://api.github.com/users/CookiePLMonster/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/CookiePLMonster/received_events', 'following_url': 'https://api.github.com/users/CookiePLMonster/following{/other_user}', 'repos_url': 'https://api.github.com/users/CookiePLMonster/repos', 'url': 'https://api.github.com/users/CookiePLMonster', 'starred_url': 'https://api.github.com/users/CookiePLMonster/starred{/owner}{/repo}'}}, 'safe_author': True, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'body': "You are typecasting `u16` to `Coordinate` in user code just to have `Coordinate` typecast to `u32` again internally. I'd suggest either making `Coordinate` a private implementation detail of BoundingBox.cpp or introducing overloads so `Coordinate` overloads call `[G/S]etCoordinate(u16)`. It's an enum class so it's all fine.", 'action': 'created', 'title': 'VideoCommon/BoundingBox: Make interface for querying bounding box data', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8513#issuecomment-562486995', 'author': 'CookiePLMonster'}
2019-12-06T06:17:59.393176	{'type': 'gh_issue_comment', 'id': 8492, 'raw': {'action': 'created', 'repository': {'fork': False, 'has_wiki': True, 'mirror_url': None, 'open_issues_count': 170, 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'forks': 1329, 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'html_url': 'https://github.com/dolphin-emu/dolphin', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'open_issues': 170, 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'language': 'C++', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'default_branch': 'master', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'watchers_count': 5798, 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'name': 'dolphin', 'size': 386665, 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'has_pages': False, 'has_issues': False, 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'disabled': False, 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'stargazers_count': 5798, 'created_at': '2013-07-22T09:07:57Z', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'archived': False, 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'full_name': 'dolphin-emu/dolphin', 'updated_at': '2019-12-06T01:07:51Z', 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'private': False, 'forks_count': 1329, 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'has_projects': False, 'owner': {'type': 'Organization', 'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'html_url': 'https://github.com/dolphin-emu', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'id': 5050316, 'site_admin': False, 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'url': 'https://api.github.com/users/dolphin-emu', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}'}, 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'has_downloads': True, 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'watchers': 5798, 'license': {'name': 'GNU General Public License v2.0', 'node_id': 'MDc6TGljZW5zZTg=', 'spdx_id': 'GPL-2.0', 'key': 'gpl-2.0', 'url': 'https://api.github.com/licenses/gpl-2.0'}, 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'homepage': 'https://dolphin-emu.org/', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'id': 11577304, 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'pushed_at': '2019-12-05T19:02:51Z', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}'}, 'comment': {'id': 562448045, 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8492', 'created_at': '2019-12-06T06:17:58Z', 'node_id': 'MDEyOklzc3VlQ29tbWVudDU2MjQ0ODA0NQ==', 'author_association': 'CONTRIBUTOR', 'body': 'Hi everyone,\r\n\r\nThanks for your interest. Out of respect for the Dolphin devs, I\'d rather that this PR not become a technical support thread.\r\n\r\n**Please remember that this isn\'t ready for general use yet. I cannot stress this enough. If you only know enough to press the run button in Xcode, you should probably wait for some sort of release.**\r\n\r\nIf you need support, or are a developer who would like to contribute, contact me on [Twitter](https://twitter.com/OatmealDome) or [ask in #dolphin-ios on my Discord server](https://discord.gg/rdx6Bt8) (I may take a while to respond since I\'m currently busy with other responsibilities - I\'ll ping you when I get a chance).\r\n\r\n@SGamer33 Clone my fork and checkout the ``ios`` branch.\r\n\r\n@JohnG210 Read "Known Issues".\r\n\r\n@Nuxx5 Set the video backend in ``Config/Dolphin.ini`` to Vulkan.\r\n\r\n', 'updated_at': '2019-12-06T06:17:58Z', 'user': {'type': 'User', 'avatar_url': 'https://avatars0.githubusercontent.com/u/11504941?v=4', 'login': 'OatmealDome', 'gists_url': 'https://api.github.com/users/OatmealDome/gists{/gist_id}', 'html_url': 'https://github.com/OatmealDome', 'events_url': 'https://api.github.com/users/OatmealDome/events{/privacy}', 'id': 11504941, 'site_admin': False, 'followers_url': 'https://api.github.com/users/OatmealDome/followers', 'subscriptions_url': 'https://api.github.com/users/OatmealDome/subscriptions', 'node_id': 'MDQ6VXNlcjExNTA0OTQx', 'organizations_url': 'https://api.github.com/users/OatmealDome/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/OatmealDome/received_events', 'following_url': 'https://api.github.com/users/OatmealDome/following{/other_user}', 'repos_url': 'https://api.github.com/users/OatmealDome/repos', 'url': 'https://api.github.com/users/OatmealDome', 'starred_url': 'https://api.github.com/users/OatmealDome/starred{/owner}{/repo}'}, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/562448045', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8492#issuecomment-562448045'}, 'organization': {'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'description': '', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events', 'id': 5050316, 'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'url': 'https://api.github.com/orgs/dolphin-emu'}, 'issue': {'created_at': '2019-11-24T21:15:23Z', 'assignees': [], 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8492/labels{/name}', 'milestone': None, 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'number': 8492, 'updated_at': '2019-12-06T06:17:58Z', 'node_id': 'MDExOlB1bGxSZXF1ZXN0MzQ0OTQ5Mzk4', 'author_association': 'CONTRIBUTOR', 'labels': [], 'state': 'open', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8492', 'user': {'type': 'User', 'avatar_url': 'https://avatars0.githubusercontent.com/u/11504941?v=4', 'login': 'OatmealDome', 'gists_url': 'https://api.github.com/users/OatmealDome/gists{/gist_id}', 'html_url': 'https://github.com/OatmealDome', 'events_url': 'https://api.github.com/users/OatmealDome/events{/privacy}', 'id': 11504941, 'site_admin': False, 'followers_url': 'https://api.github.com/users/OatmealDome/followers', 'subscriptions_url': 'https://api.github.com/users/OatmealDome/subscriptions', 'node_id': 'MDQ6VXNlcjExNTA0OTQx', 'organizations_url': 'https://api.github.com/users/OatmealDome/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/OatmealDome/received_events', 'following_url': 'https://api.github.com/users/OatmealDome/following{/other_user}', 'repos_url': 'https://api.github.com/users/OatmealDome/repos', 'url': 'https://api.github.com/users/OatmealDome', 'starred_url': 'https://api.github.com/users/OatmealDome/starred{/owner}{/repo}'}, 'locked': False, 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8492', 'body': 'This PR adds experimental support for iOS devices with a working JIT. It is by no means complete, and is only intended to initiate a discussion as to whether iOS is a platform that Dolphin should support.\r\n\r\n**This is not ready for general users.**\r\n\r\nFirst off, [here\'s a quick demo video](https://youtu.be/CI4SGePajYo) and some screenshots.\r\n\r\n<img src="https://cdn.oatmealdome.me/screenshots/dolphin-ios/xenoblade.png" width="50%" height="50%">\r\n\r\n<img src="https://cdn.oatmealdome.me/screenshots/dolphin-ios/animal_crossing.png" width="50%" height="50%">\r\n\r\n<img src="https://cdn.oatmealdome.me/screenshots/dolphin-ios/melee.png" width="50%" height="50%">\r\n\r\n<img src="https://cdn.oatmealdome.me/screenshots/dolphin-ios/mkw.png" width="50%" height="50%">\r\n\r\nLet\'s get into the details.\r\n\r\n## Application\r\n\r\nA new Xcode project has been placed in `Source/iOS/DolphiniOS`. The build system for iOS takes inspiration from the Android version of Dolphin.\r\n\r\nXcode has been configured to run some shell scripts on every build. The first one runs `cmake` using an iOS toolchain to create static libraries, which are then linked into the application.  The second shell script copies image assets from the Android port.\r\n\r\nThe ``Sys`` folder is embedded into the bundle.\r\n\r\nA "jni" equivalent can be found in `Source/iOS/Interface`. Its only purpose is to hold the `MainiOS` source file.\r\n\r\n### User interface\r\n\r\nThe UI is written in Objective-C and Swift. It is extremely barebones at the moment - while there is a working touchscreen controller, pretty much everything else needs work.\r\n\r\nThe code is 50/50 Objective-C and Swift, but I believe it would be best to write future UI code in Swift and transition what we can away from Objective-C. (Given the necessity of using C++ to access Dolphin code, some Objective-C++ will likely need to stay if this port is given a green light.) \r\n\r\nAll Dolphin user files are stored in the app container\'s Documents directory. [This folder is then exposed to `Files.app`, allowing users to modify files as they wish](https://cdn.oatmealdome.me/screenshots/dolphin-ios/oMRQ0DA.png).\r\n\r\nA `Software` folder is automatically created in the Documents directory. The UI will automatically scan this folder for software and show found files in a list on startup.\r\n\r\n### Target devices\r\n\r\n* **The device must be jailbroken.**\r\n* Devices with A9, A10, and A11 processors were tested. These were an iPhone 6s, a 6th gen iPad, and an iPhone X.\r\n* A8, A12, and A13 devices were unable to be tested because @Simonx22 and I don\'t own any.\r\n* [A7 and A8 processors have GPUs that don\'t support arrays of textures](https://developer.apple.com/metal/Metal-Feature-Set-Tables.pdf), so the Vulkan backend is not supported.\r\n* A6 processors and below are 32-bit.\r\n\r\nThe minimum supported devices should be ones with an A9 processor.\r\n\r\n### Building\r\n\r\nYou need the following:\r\n\r\n* Mac\r\n* Xcode 11 (older Xcode versions may work, not tested)\r\n* `cmake`\r\n* Jailbroken iOS / iPadOS device running iOS 12 and above\r\n\r\nThen, you can build:\r\n\r\n1. Install AppSync Unified on your device from `cydia.angelxwind.net`.\r\n2. Clone the repo.\r\n3. Open `Source/iOS/DolphiniOS/DolphiniOS.xcodeproj`.\r\n4. Initiate a build in Xcode.\r\n\r\n## Problems\r\n\r\n### Limitations\r\n\r\n* BoundingBox is not supported, since [MoltenVK sets ``fragmentStoresAndAtomics``  to `true` only on macOS](https://github.com/KhronosGroup/MoltenVK/blob/789ef74d11d9ea9ce912f6df3d018e1d194a1fdb/MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm#L1038). However, forcing this feature to be enabled shows that it works fine on iOS (albeit with minor glitches). I\'m not sure what I should be looking for on the Metal feature set table to see if iOS GPU drivers really support this feature.\r\n* Metal does not support geometry shaders or setting line width.\r\n* OpenGLES, like OpenGL on macOS, has been abandoned for a very long time. `EXT_buffer_storage` support is nowhere to be found. As expected, the OpenGL backend is unusable.\r\n\r\n### Known issues\r\n\r\n* `Core::IsCPUThread()` does not work for some reason. The call in `JitArm64::HandleFault()` needs to be commented out when testing for now.\r\n* Controller INIs from the Android version needs to be copied manually. ``GCPadNew.ini`` and `WiimoteNew.ini` go in ``Config`` and  ``WiimoteProfile.ini`` in ``Config/Profiles/Wiimote``.\r\n* To stop emulation, you have to quit the application.\r\n* You have to manually switch the controller type (GameCube controller or Wiimote with Nunchuk) in the source code.\r\n* There is no D-Pad on any controller type.\r\n* There is no build system that generates a ``deb`` for Cydia.\r\n* There are likely code style compliance issues. Swift code is entirely unchecked by lint.\r\n* Many other things.\r\n\r\n### Regarding the jailbroken device requirement\r\n\r\nThe iOS kernel places an artificial restriction on the amount of address space that each process can access, depending on how much RAM the device has. This is the core issue that plagued Dolphin support for a very, *very* long time. Fastmem requires a large amount of virtual memory to play with, which unfortunately is greater than the limit of every publicly released iOS device.\r\n\r\nThankfully, Apple created an entitlement called `dynamic-codesigning` that allows the process to create executable memory. It was added for applications that need JIT, like Safari. An additional perk of `dynamic-codesigning` is that [it also allows the process to access a large amount of address space](https://github.com/apple/darwin-xnu/blob/master/tests/jumbo_va_spaces_28530648.c). However, it cannot be set on third-party apps as it is an Apple-internal entitlement. This is why a jailbroken device is needed.\r\n\r\nThere is a way, however, to run Dolphin under a jailed device. (In fact, I am doing the majority of my testing on a jailed device.) It requires modifying the iOS bootloader and setting the boot argument `arm64_maxoffset`. Because this method is quite complicated, I don\'t think this is a viable option for end-users. It is significantly easier to just require a jailbroken device than to support users who try this method.\r\n\r\n### The future\r\n\r\nAs we all know, Dolphin support for macOS doesn\'t get much love because of a lack of maintainers. While I don\'t plan to abandon this project, I think it would be best to see if any others are willing to contribute. I am just one person, after all.\r\n\r\n## Changes to Dolphin\r\n\r\nThis is a non-exhaustive list.\r\n\r\n* The define ``IPHONEOS`` has been introduced. ``IOS`` is not used to avoid confusion and conflicts with the Wii\'s IOS.\r\n* The iOS cmake toolchain from [here](https://github.com/leetal/ios-cmake) has been added. `CMakeLists` use ``IOS`` because it is set from the toolchain.\r\n* Mach\'s vm functions are used wherever possible ([one](https://github.com/OatmealDome/dolphin/commit/fbffaa4b429af4fc725c7093837aa142f21cc006#diff-1f416de641b3f6132c533a0feb099829), [two](https://github.com/OatmealDome/dolphin/commit/d3e100a0a854becaaf053cb5aeae2de77a961eed)).\r\n* (This only applies to jailed devices.) When attached to a debugger, iOS allows memory to be marked as executable. However, memory cannot be writable and executable at the same time, so code has been introduced into the ARM64 JIT to support W^X exclusivity.\r\n* A new "EAGL" GLInterface was introduced. Also, because iOS doesn\'t create a default framebuffer, [the OpenGL backend calls the EAGL GLInterface to create one](https://github.com/OatmealDome/dolphin/commit/8b9064ececa69ee47e468d242dd7ac270b209f40).\r\n* The iOS MoltenVK dylib has been added to Externals.\r\n* The CoreAudio backend has been restored, because [Cubeb support for iOS is old and broken](https://github.com/kinetiknz/cubeb/issues/394).\r\n* Since `ButtonManager` and `Touchscreen` are useful on iOS too, they have been moved into a new "Touch" folder in InputCommon.\r\n* The required clang-format version has been updated to 9.0. Some Objective-C code was not being formatted correctly on 7.0 for whatever reason.\r\n\r\n## Credits\r\n\r\nThis PR is the culmination of many attempts by several people, including myself. It could not be done without them and support from others.\r\n\r\nPrevious PRs:\r\n\r\n* #3881\r\n* #3885\r\n* #3941\r\n\r\nThanks to:\r\n\r\n* @Simonx22 for testing\r\n* leetal\'s [iOS toolchain for cmake](https://github.com/leetal/ios-cmake)\r\n* ppsspp for mach vm functions and W^X exclusivity example code \r\n* Apple for releasing their ARM XNU sources', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8492/events', 'id': 527757689, 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8492/comments', 'title': '[RFC / WIP] iOS support with working JIT', 'comments': 35, 'closed_at': None, 'pull_request': {'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/8492.patch', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/8492.diff', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8492', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8492'}, 'assignee': None}, 'sender': {'type': 'User', 'avatar_url': 'https://avatars0.githubusercontent.com/u/11504941?v=4', 'login': 'OatmealDome', 'gists_url': 'https://api.github.com/users/OatmealDome/gists{/gist_id}', 'html_url': 'https://github.com/OatmealDome', 'events_url': 'https://api.github.com/users/OatmealDome/events{/privacy}', 'id': 11504941, 'site_admin': False, 'followers_url': 'https://api.github.com/users/OatmealDome/followers', 'subscriptions_url': 'https://api.github.com/users/OatmealDome/subscriptions', 'node_id': 'MDQ6VXNlcjExNTA0OTQx', 'organizations_url': 'https://api.github.com/users/OatmealDome/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/OatmealDome/received_events', 'following_url': 'https://api.github.com/users/OatmealDome/following{/other_user}', 'repos_url': 'https://api.github.com/users/OatmealDome/repos', 'url': 'https://api.github.com/users/OatmealDome', 'starred_url': 'https://api.github.com/users/OatmealDome/starred{/owner}{/repo}'}}, 'safe_author': False, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'body': 'Hi everyone,\r\n\r\nThanks for your interest. Out of respect for the Dolphin devs, I\'d rather that this PR not become a technical support thread.\r\n\r\n**Please remember that this isn\'t ready for general use yet. I cannot stress this enough. If you only know enough to press the run button in Xcode, you should probably wait for some sort of release.**\r\n\r\nIf you need support, or are a developer who would like to contribute, contact me on [Twitter](https://twitter.com/OatmealDome) or [ask in #dolphin-ios on my Discord server](https://discord.gg/rdx6Bt8) (I may take a while to respond since I\'m currently busy with other responsibilities - I\'ll ping you when I get a chance).\r\n\r\n@SGamer33 Clone my fork and checkout the ``ios`` branch.\r\n\r\n@JohnG210 Read "Known Issues".\r\n\r\n@Nuxx5 Set the video backend in ``Config/Dolphin.ini`` to Vulkan.\r\n\r\n', 'action': 'created', 'title': '[RFC / WIP] iOS support with working JIT', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8492#issuecomment-562448045', 'author': 'OatmealDome'}
2019-12-06T06:00:42.934434	{'type': 'gh_issue_comment', 'id': 8492, 'raw': {'action': 'created', 'repository': {'fork': False, 'has_wiki': True, 'mirror_url': None, 'open_issues_count': 170, 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'forks': 1329, 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'html_url': 'https://github.com/dolphin-emu/dolphin', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'open_issues': 170, 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'language': 'C++', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'default_branch': 'master', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'watchers_count': 5798, 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'name': 'dolphin', 'size': 386665, 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'has_pages': False, 'has_issues': False, 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'disabled': False, 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'stargazers_count': 5798, 'created_at': '2013-07-22T09:07:57Z', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'archived': False, 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'full_name': 'dolphin-emu/dolphin', 'updated_at': '2019-12-06T01:07:51Z', 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'private': False, 'forks_count': 1329, 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'has_projects': False, 'owner': {'type': 'Organization', 'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'html_url': 'https://github.com/dolphin-emu', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'id': 5050316, 'site_admin': False, 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'url': 'https://api.github.com/users/dolphin-emu', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}'}, 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'has_downloads': True, 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'watchers': 5798, 'license': {'name': 'GNU General Public License v2.0', 'node_id': 'MDc6TGljZW5zZTg=', 'spdx_id': 'GPL-2.0', 'key': 'gpl-2.0', 'url': 'https://api.github.com/licenses/gpl-2.0'}, 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'homepage': 'https://dolphin-emu.org/', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'id': 11577304, 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'pushed_at': '2019-12-05T19:02:51Z', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}'}, 'comment': {'id': 562444378, 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8492', 'created_at': '2019-12-06T06:00:41Z', 'node_id': 'MDEyOklzc3VlQ29tbWVudDU2MjQ0NDM3OA==', 'author_association': 'NONE', 'body': 'I got it to compile after commenting out the line from point 1 in known issues. However all of the roms I tried will just play sound. No video. I do see the touch controls but other than that just black screen. iPhone X on iOS 13.x Checkra1n ', 'updated_at': '2019-12-06T06:00:41Z', 'user': {'type': 'User', 'avatar_url': 'https://avatars0.githubusercontent.com/u/13183613?v=4', 'login': 'Nuxx5', 'gists_url': 'https://api.github.com/users/Nuxx5/gists{/gist_id}', 'html_url': 'https://github.com/Nuxx5', 'events_url': 'https://api.github.com/users/Nuxx5/events{/privacy}', 'id': 13183613, 'site_admin': False, 'followers_url': 'https://api.github.com/users/Nuxx5/followers', 'subscriptions_url': 'https://api.github.com/users/Nuxx5/subscriptions', 'node_id': 'MDQ6VXNlcjEzMTgzNjEz', 'organizations_url': 'https://api.github.com/users/Nuxx5/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/Nuxx5/received_events', 'following_url': 'https://api.github.com/users/Nuxx5/following{/other_user}', 'repos_url': 'https://api.github.com/users/Nuxx5/repos', 'url': 'https://api.github.com/users/Nuxx5', 'starred_url': 'https://api.github.com/users/Nuxx5/starred{/owner}{/repo}'}, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/562444378', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8492#issuecomment-562444378'}, 'organization': {'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'description': '', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events', 'id': 5050316, 'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'url': 'https://api.github.com/orgs/dolphin-emu'}, 'issue': {'created_at': '2019-11-24T21:15:23Z', 'assignees': [], 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8492/labels{/name}', 'milestone': None, 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'number': 8492, 'updated_at': '2019-12-06T06:00:41Z', 'node_id': 'MDExOlB1bGxSZXF1ZXN0MzQ0OTQ5Mzk4', 'author_association': 'CONTRIBUTOR', 'labels': [], 'state': 'open', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8492', 'user': {'type': 'User', 'avatar_url': 'https://avatars0.githubusercontent.com/u/11504941?v=4', 'login': 'OatmealDome', 'gists_url': 'https://api.github.com/users/OatmealDome/gists{/gist_id}', 'html_url': 'https://github.com/OatmealDome', 'events_url': 'https://api.github.com/users/OatmealDome/events{/privacy}', 'id': 11504941, 'site_admin': False, 'followers_url': 'https://api.github.com/users/OatmealDome/followers', 'subscriptions_url': 'https://api.github.com/users/OatmealDome/subscriptions', 'node_id': 'MDQ6VXNlcjExNTA0OTQx', 'organizations_url': 'https://api.github.com/users/OatmealDome/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/OatmealDome/received_events', 'following_url': 'https://api.github.com/users/OatmealDome/following{/other_user}', 'repos_url': 'https://api.github.com/users/OatmealDome/repos', 'url': 'https://api.github.com/users/OatmealDome', 'starred_url': 'https://api.github.com/users/OatmealDome/starred{/owner}{/repo}'}, 'locked': False, 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8492', 'body': 'This PR adds experimental support for iOS devices with a working JIT. It is by no means complete, and is only intended to initiate a discussion as to whether iOS is a platform that Dolphin should support.\r\n\r\n**This is not ready for general users.**\r\n\r\nFirst off, [here\'s a quick demo video](https://youtu.be/CI4SGePajYo) and some screenshots.\r\n\r\n<img src="https://cdn.oatmealdome.me/screenshots/dolphin-ios/xenoblade.png" width="50%" height="50%">\r\n\r\n<img src="https://cdn.oatmealdome.me/screenshots/dolphin-ios/animal_crossing.png" width="50%" height="50%">\r\n\r\n<img src="https://cdn.oatmealdome.me/screenshots/dolphin-ios/melee.png" width="50%" height="50%">\r\n\r\n<img src="https://cdn.oatmealdome.me/screenshots/dolphin-ios/mkw.png" width="50%" height="50%">\r\n\r\nLet\'s get into the details.\r\n\r\n## Application\r\n\r\nA new Xcode project has been placed in `Source/iOS/DolphiniOS`. The build system for iOS takes inspiration from the Android version of Dolphin.\r\n\r\nXcode has been configured to run some shell scripts on every build. The first one runs `cmake` using an iOS toolchain to create static libraries, which are then linked into the application.  The second shell script copies image assets from the Android port.\r\n\r\nThe ``Sys`` folder is embedded into the bundle.\r\n\r\nA "jni" equivalent can be found in `Source/iOS/Interface`. Its only purpose is to hold the `MainiOS` source file.\r\n\r\n### User interface\r\n\r\nThe UI is written in Objective-C and Swift. It is extremely barebones at the moment - while there is a working touchscreen controller, pretty much everything else needs work.\r\n\r\nThe code is 50/50 Objective-C and Swift, but I believe it would be best to write future UI code in Swift and transition what we can away from Objective-C. (Given the necessity of using C++ to access Dolphin code, some Objective-C++ will likely need to stay if this port is given a green light.) \r\n\r\nAll Dolphin user files are stored in the app container\'s Documents directory. [This folder is then exposed to `Files.app`, allowing users to modify files as they wish](https://cdn.oatmealdome.me/screenshots/dolphin-ios/oMRQ0DA.png).\r\n\r\nA `Software` folder is automatically created in the Documents directory. The UI will automatically scan this folder for software and show found files in a list on startup.\r\n\r\n### Target devices\r\n\r\n* **The device must be jailbroken.**\r\n* Devices with A9, A10, and A11 processors were tested. These were an iPhone 6s, a 6th gen iPad, and an iPhone X.\r\n* A8, A12, and A13 devices were unable to be tested because @Simonx22 and I don\'t own any.\r\n* [A7 and A8 processors have GPUs that don\'t support arrays of textures](https://developer.apple.com/metal/Metal-Feature-Set-Tables.pdf), so the Vulkan backend is not supported.\r\n* A6 processors and below are 32-bit.\r\n\r\nThe minimum supported devices should be ones with an A9 processor.\r\n\r\n### Building\r\n\r\nYou need the following:\r\n\r\n* Mac\r\n* Xcode 11 (older Xcode versions may work, not tested)\r\n* `cmake`\r\n* Jailbroken iOS / iPadOS device running iOS 12 and above\r\n\r\nThen, you can build:\r\n\r\n1. Install AppSync Unified on your device from `cydia.angelxwind.net`.\r\n2. Clone the repo.\r\n3. Open `Source/iOS/DolphiniOS/DolphiniOS.xcodeproj`.\r\n4. Initiate a build in Xcode.\r\n\r\n## Problems\r\n\r\n### Limitations\r\n\r\n* BoundingBox is not supported, since [MoltenVK sets ``fragmentStoresAndAtomics``  to `true` only on macOS](https://github.com/KhronosGroup/MoltenVK/blob/789ef74d11d9ea9ce912f6df3d018e1d194a1fdb/MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm#L1038). However, forcing this feature to be enabled shows that it works fine on iOS (albeit with minor glitches). I\'m not sure what I should be looking for on the Metal feature set table to see if iOS GPU drivers really support this feature.\r\n* Metal does not support geometry shaders or setting line width.\r\n* OpenGLES, like OpenGL on macOS, has been abandoned for a very long time. `EXT_buffer_storage` support is nowhere to be found. As expected, the OpenGL backend is unusable.\r\n\r\n### Known issues\r\n\r\n* `Core::IsCPUThread()` does not work for some reason. The call in `JitArm64::HandleFault()` needs to be commented out when testing for now.\r\n* Controller INIs from the Android version needs to be copied manually. ``GCPadNew.ini`` and `WiimoteNew.ini` go in ``Config`` and  ``WiimoteProfile.ini`` in ``Config/Profiles/Wiimote``.\r\n* To stop emulation, you have to quit the application.\r\n* You have to manually switch the controller type (GameCube controller or Wiimote with Nunchuk) in the source code.\r\n* There is no D-Pad on any controller type.\r\n* There is no build system that generates a ``deb`` for Cydia.\r\n* There are likely code style compliance issues. Swift code is entirely unchecked by lint.\r\n* Many other things.\r\n\r\n### Regarding the jailbroken device requirement\r\n\r\nThe iOS kernel places an artificial restriction on the amount of address space that each process can access, depending on how much RAM the device has. This is the core issue that plagued Dolphin support for a very, *very* long time. Fastmem requires a large amount of virtual memory to play with, which unfortunately is greater than the limit of every publicly released iOS device.\r\n\r\nThankfully, Apple created an entitlement called `dynamic-codesigning` that allows the process to create executable memory. It was added for applications that need JIT, like Safari. An additional perk of `dynamic-codesigning` is that [it also allows the process to access a large amount of address space](https://github.com/apple/darwin-xnu/blob/master/tests/jumbo_va_spaces_28530648.c). However, it cannot be set on third-party apps as it is an Apple-internal entitlement. This is why a jailbroken device is needed.\r\n\r\nThere is a way, however, to run Dolphin under a jailed device. (In fact, I am doing the majority of my testing on a jailed device.) It requires modifying the iOS bootloader and setting the boot argument `arm64_maxoffset`. Because this method is quite complicated, I don\'t think this is a viable option for end-users. It is significantly easier to just require a jailbroken device than to support users who try this method.\r\n\r\n### The future\r\n\r\nAs we all know, Dolphin support for macOS doesn\'t get much love because of a lack of maintainers. While I don\'t plan to abandon this project, I think it would be best to see if any others are willing to contribute. I am just one person, after all.\r\n\r\n## Changes to Dolphin\r\n\r\nThis is a non-exhaustive list.\r\n\r\n* The define ``IPHONEOS`` has been introduced. ``IOS`` is not used to avoid confusion and conflicts with the Wii\'s IOS.\r\n* The iOS cmake toolchain from [here](https://github.com/leetal/ios-cmake) has been added. `CMakeLists` use ``IOS`` because it is set from the toolchain.\r\n* Mach\'s vm functions are used wherever possible ([one](https://github.com/OatmealDome/dolphin/commit/fbffaa4b429af4fc725c7093837aa142f21cc006#diff-1f416de641b3f6132c533a0feb099829), [two](https://github.com/OatmealDome/dolphin/commit/d3e100a0a854becaaf053cb5aeae2de77a961eed)).\r\n* (This only applies to jailed devices.) When attached to a debugger, iOS allows memory to be marked as executable. However, memory cannot be writable and executable at the same time, so code has been introduced into the ARM64 JIT to support W^X exclusivity.\r\n* A new "EAGL" GLInterface was introduced. Also, because iOS doesn\'t create a default framebuffer, [the OpenGL backend calls the EAGL GLInterface to create one](https://github.com/OatmealDome/dolphin/commit/8b9064ececa69ee47e468d242dd7ac270b209f40).\r\n* The iOS MoltenVK dylib has been added to Externals.\r\n* The CoreAudio backend has been restored, because [Cubeb support for iOS is old and broken](https://github.com/kinetiknz/cubeb/issues/394).\r\n* Since `ButtonManager` and `Touchscreen` are useful on iOS too, they have been moved into a new "Touch" folder in InputCommon.\r\n* The required clang-format version has been updated to 9.0. Some Objective-C code was not being formatted correctly on 7.0 for whatever reason.\r\n\r\n## Credits\r\n\r\nThis PR is the culmination of many attempts by several people, including myself. It could not be done without them and support from others.\r\n\r\nPrevious PRs:\r\n\r\n* #3881\r\n* #3885\r\n* #3941\r\n\r\nThanks to:\r\n\r\n* @Simonx22 for testing\r\n* leetal\'s [iOS toolchain for cmake](https://github.com/leetal/ios-cmake)\r\n* ppsspp for mach vm functions and W^X exclusivity example code \r\n* Apple for releasing their ARM XNU sources', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8492/events', 'id': 527757689, 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8492/comments', 'title': '[RFC / WIP] iOS support with working JIT', 'comments': 34, 'closed_at': None, 'pull_request': {'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/8492.patch', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/8492.diff', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8492', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8492'}, 'assignee': None}, 'sender': {'type': 'User', 'avatar_url': 'https://avatars0.githubusercontent.com/u/13183613?v=4', 'login': 'Nuxx5', 'gists_url': 'https://api.github.com/users/Nuxx5/gists{/gist_id}', 'html_url': 'https://github.com/Nuxx5', 'events_url': 'https://api.github.com/users/Nuxx5/events{/privacy}', 'id': 13183613, 'site_admin': False, 'followers_url': 'https://api.github.com/users/Nuxx5/followers', 'subscriptions_url': 'https://api.github.com/users/Nuxx5/subscriptions', 'node_id': 'MDQ6VXNlcjEzMTgzNjEz', 'organizations_url': 'https://api.github.com/users/Nuxx5/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/Nuxx5/received_events', 'following_url': 'https://api.github.com/users/Nuxx5/following{/other_user}', 'repos_url': 'https://api.github.com/users/Nuxx5/repos', 'url': 'https://api.github.com/users/Nuxx5', 'starred_url': 'https://api.github.com/users/Nuxx5/starred{/owner}{/repo}'}}, 'safe_author': False, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'body': 'I got it to compile after commenting out the line from point 1 in known issues. However all of the roms I tried will just play sound. No video. I do see the touch controls but other than that just black screen. iPhone X on iOS 13.x Checkra1n ', 'action': 'created', 'title': '[RFC / WIP] iOS support with working JIT', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8492#issuecomment-562444378', 'author': 'Nuxx5'}
2019-12-06T03:03:53.403563	{'type': 'gh_issue_comment', 'id': 8492, 'raw': {'action': 'created', 'repository': {'fork': False, 'has_wiki': True, 'mirror_url': None, 'open_issues_count': 170, 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'forks': 1329, 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'html_url': 'https://github.com/dolphin-emu/dolphin', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'open_issues': 170, 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'language': 'C++', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'default_branch': 'master', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'watchers_count': 5798, 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'name': 'dolphin', 'size': 386665, 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'has_pages': False, 'has_issues': False, 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'disabled': False, 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'stargazers_count': 5798, 'created_at': '2013-07-22T09:07:57Z', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'archived': False, 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'full_name': 'dolphin-emu/dolphin', 'updated_at': '2019-12-06T01:07:51Z', 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'private': False, 'forks_count': 1329, 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'has_projects': False, 'owner': {'type': 'Organization', 'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'html_url': 'https://github.com/dolphin-emu', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'id': 5050316, 'site_admin': False, 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'url': 'https://api.github.com/users/dolphin-emu', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}'}, 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'has_downloads': True, 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'watchers': 5798, 'license': {'name': 'GNU General Public License v2.0', 'node_id': 'MDc6TGljZW5zZTg=', 'spdx_id': 'GPL-2.0', 'key': 'gpl-2.0', 'url': 'https://api.github.com/licenses/gpl-2.0'}, 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'homepage': 'https://dolphin-emu.org/', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'id': 11577304, 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'pushed_at': '2019-12-05T19:02:51Z', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}'}, 'comment': {'id': 562412571, 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8492', 'created_at': '2019-12-06T03:03:52Z', 'node_id': 'MDEyOklzc3VlQ29tbWVudDU2MjQxMjU3MQ==', 'author_association': 'NONE', 'body': 'First of all thanks OatmealDome for making this pull request, super interested in ios support for Dolphin. I just had a quick question, I am getting an error when I try running an iso. I get the same error after building on two Macs and running on two different devices. (iPhone X 12.4 and iPad Air 2 13.1.2) I keep getting a "CPU thread (14): EXC_BAD_ACCESS (code=1, address=0x56c00500a)" error after i try and open an iso. I\'m also getting a "Thread 1: signal SIGABRT" error on line 16 in the main. ', 'updated_at': '2019-12-06T03:03:52Z', 'user': {'type': 'User', 'avatar_url': 'https://avatars1.githubusercontent.com/u/52388606?v=4', 'login': 'JohnG210', 'gists_url': 'https://api.github.com/users/JohnG210/gists{/gist_id}', 'html_url': 'https://github.com/JohnG210', 'events_url': 'https://api.github.com/users/JohnG210/events{/privacy}', 'id': 52388606, 'site_admin': False, 'followers_url': 'https://api.github.com/users/JohnG210/followers', 'subscriptions_url': 'https://api.github.com/users/JohnG210/subscriptions', 'node_id': 'MDQ6VXNlcjUyMzg4NjA2', 'organizations_url': 'https://api.github.com/users/JohnG210/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/JohnG210/received_events', 'following_url': 'https://api.github.com/users/JohnG210/following{/other_user}', 'repos_url': 'https://api.github.com/users/JohnG210/repos', 'url': 'https://api.github.com/users/JohnG210', 'starred_url': 'https://api.github.com/users/JohnG210/starred{/owner}{/repo}'}, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/562412571', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8492#issuecomment-562412571'}, 'organization': {'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'description': '', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events', 'id': 5050316, 'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'url': 'https://api.github.com/orgs/dolphin-emu'}, 'issue': {'created_at': '2019-11-24T21:15:23Z', 'assignees': [], 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8492/labels{/name}', 'milestone': None, 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'number': 8492, 'updated_at': '2019-12-06T03:03:52Z', 'node_id': 'MDExOlB1bGxSZXF1ZXN0MzQ0OTQ5Mzk4', 'author_association': 'CONTRIBUTOR', 'labels': [], 'state': 'open', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8492', 'user': {'type': 'User', 'avatar_url': 'https://avatars0.githubusercontent.com/u/11504941?v=4', 'login': 'OatmealDome', 'gists_url': 'https://api.github.com/users/OatmealDome/gists{/gist_id}', 'html_url': 'https://github.com/OatmealDome', 'events_url': 'https://api.github.com/users/OatmealDome/events{/privacy}', 'id': 11504941, 'site_admin': False, 'followers_url': 'https://api.github.com/users/OatmealDome/followers', 'subscriptions_url': 'https://api.github.com/users/OatmealDome/subscriptions', 'node_id': 'MDQ6VXNlcjExNTA0OTQx', 'organizations_url': 'https://api.github.com/users/OatmealDome/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/OatmealDome/received_events', 'following_url': 'https://api.github.com/users/OatmealDome/following{/other_user}', 'repos_url': 'https://api.github.com/users/OatmealDome/repos', 'url': 'https://api.github.com/users/OatmealDome', 'starred_url': 'https://api.github.com/users/OatmealDome/starred{/owner}{/repo}'}, 'locked': False, 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8492', 'body': 'This PR adds experimental support for iOS devices with a working JIT. It is by no means complete, and is only intended to initiate a discussion as to whether iOS is a platform that Dolphin should support.\r\n\r\n**This is not ready for general users.**\r\n\r\nFirst off, [here\'s a quick demo video](https://youtu.be/CI4SGePajYo) and some screenshots.\r\n\r\n<img src="https://cdn.oatmealdome.me/screenshots/dolphin-ios/xenoblade.png" width="50%" height="50%">\r\n\r\n<img src="https://cdn.oatmealdome.me/screenshots/dolphin-ios/animal_crossing.png" width="50%" height="50%">\r\n\r\n<img src="https://cdn.oatmealdome.me/screenshots/dolphin-ios/melee.png" width="50%" height="50%">\r\n\r\n<img src="https://cdn.oatmealdome.me/screenshots/dolphin-ios/mkw.png" width="50%" height="50%">\r\n\r\nLet\'s get into the details.\r\n\r\n## Application\r\n\r\nA new Xcode project has been placed in `Source/iOS/DolphiniOS`. The build system for iOS takes inspiration from the Android version of Dolphin.\r\n\r\nXcode has been configured to run some shell scripts on every build. The first one runs `cmake` using an iOS toolchain to create static libraries, which are then linked into the application.  The second shell script copies image assets from the Android port.\r\n\r\nThe ``Sys`` folder is embedded into the bundle.\r\n\r\nA "jni" equivalent can be found in `Source/iOS/Interface`. Its only purpose is to hold the `MainiOS` source file.\r\n\r\n### User interface\r\n\r\nThe UI is written in Objective-C and Swift. It is extremely barebones at the moment - while there is a working touchscreen controller, pretty much everything else needs work.\r\n\r\nThe code is 50/50 Objective-C and Swift, but I believe it would be best to write future UI code in Swift and transition what we can away from Objective-C. (Given the necessity of using C++ to access Dolphin code, some Objective-C++ will likely need to stay if this port is given a green light.) \r\n\r\nAll Dolphin user files are stored in the app container\'s Documents directory. [This folder is then exposed to `Files.app`, allowing users to modify files as they wish](https://cdn.oatmealdome.me/screenshots/dolphin-ios/oMRQ0DA.png).\r\n\r\nA `Software` folder is automatically created in the Documents directory. The UI will automatically scan this folder for software and show found files in a list on startup.\r\n\r\n### Target devices\r\n\r\n* **The device must be jailbroken.**\r\n* Devices with A9, A10, and A11 processors were tested. These were an iPhone 6s, a 6th gen iPad, and an iPhone X.\r\n* A8, A12, and A13 devices were unable to be tested because @Simonx22 and I don\'t own any.\r\n* [A7 and A8 processors have GPUs that don\'t support arrays of textures](https://developer.apple.com/metal/Metal-Feature-Set-Tables.pdf), so the Vulkan backend is not supported.\r\n* A6 processors and below are 32-bit.\r\n\r\nThe minimum supported devices should be ones with an A9 processor.\r\n\r\n### Building\r\n\r\nYou need the following:\r\n\r\n* Mac\r\n* Xcode 11 (older Xcode versions may work, not tested)\r\n* `cmake`\r\n* Jailbroken iOS / iPadOS device running iOS 12 and above\r\n\r\nThen, you can build:\r\n\r\n1. Install AppSync Unified on your device from `cydia.angelxwind.net`.\r\n2. Clone the repo.\r\n3. Open `Source/iOS/DolphiniOS/DolphiniOS.xcodeproj`.\r\n4. Initiate a build in Xcode.\r\n\r\n## Problems\r\n\r\n### Limitations\r\n\r\n* BoundingBox is not supported, since [MoltenVK sets ``fragmentStoresAndAtomics``  to `true` only on macOS](https://github.com/KhronosGroup/MoltenVK/blob/789ef74d11d9ea9ce912f6df3d018e1d194a1fdb/MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm#L1038). However, forcing this feature to be enabled shows that it works fine on iOS (albeit with minor glitches). I\'m not sure what I should be looking for on the Metal feature set table to see if iOS GPU drivers really support this feature.\r\n* Metal does not support geometry shaders or setting line width.\r\n* OpenGLES, like OpenGL on macOS, has been abandoned for a very long time. `EXT_buffer_storage` support is nowhere to be found. As expected, the OpenGL backend is unusable.\r\n\r\n### Known issues\r\n\r\n* `Core::IsCPUThread()` does not work for some reason. The call in `JitArm64::HandleFault()` needs to be commented out when testing for now.\r\n* Controller INIs from the Android version needs to be copied manually. ``GCPadNew.ini`` and `WiimoteNew.ini` go in ``Config`` and  ``WiimoteProfile.ini`` in ``Config/Profiles/Wiimote``.\r\n* To stop emulation, you have to quit the application.\r\n* You have to manually switch the controller type (GameCube controller or Wiimote with Nunchuk) in the source code.\r\n* There is no D-Pad on any controller type.\r\n* There is no build system that generates a ``deb`` for Cydia.\r\n* There are likely code style compliance issues. Swift code is entirely unchecked by lint.\r\n* Many other things.\r\n\r\n### Regarding the jailbroken device requirement\r\n\r\nThe iOS kernel places an artificial restriction on the amount of address space that each process can access, depending on how much RAM the device has. This is the core issue that plagued Dolphin support for a very, *very* long time. Fastmem requires a large amount of virtual memory to play with, which unfortunately is greater than the limit of every publicly released iOS device.\r\n\r\nThankfully, Apple created an entitlement called `dynamic-codesigning` that allows the process to create executable memory. It was added for applications that need JIT, like Safari. An additional perk of `dynamic-codesigning` is that [it also allows the process to access a large amount of address space](https://github.com/apple/darwin-xnu/blob/master/tests/jumbo_va_spaces_28530648.c). However, it cannot be set on third-party apps as it is an Apple-internal entitlement. This is why a jailbroken device is needed.\r\n\r\nThere is a way, however, to run Dolphin under a jailed device. (In fact, I am doing the majority of my testing on a jailed device.) It requires modifying the iOS bootloader and setting the boot argument `arm64_maxoffset`. Because this method is quite complicated, I don\'t think this is a viable option for end-users. It is significantly easier to just require a jailbroken device than to support users who try this method.\r\n\r\n### The future\r\n\r\nAs we all know, Dolphin support for macOS doesn\'t get much love because of a lack of maintainers. While I don\'t plan to abandon this project, I think it would be best to see if any others are willing to contribute. I am just one person, after all.\r\n\r\n## Changes to Dolphin\r\n\r\nThis is a non-exhaustive list.\r\n\r\n* The define ``IPHONEOS`` has been introduced. ``IOS`` is not used to avoid confusion and conflicts with the Wii\'s IOS.\r\n* The iOS cmake toolchain from [here](https://github.com/leetal/ios-cmake) has been added. `CMakeLists` use ``IOS`` because it is set from the toolchain.\r\n* Mach\'s vm functions are used wherever possible ([one](https://github.com/OatmealDome/dolphin/commit/fbffaa4b429af4fc725c7093837aa142f21cc006#diff-1f416de641b3f6132c533a0feb099829), [two](https://github.com/OatmealDome/dolphin/commit/d3e100a0a854becaaf053cb5aeae2de77a961eed)).\r\n* (This only applies to jailed devices.) When attached to a debugger, iOS allows memory to be marked as executable. However, memory cannot be writable and executable at the same time, so code has been introduced into the ARM64 JIT to support W^X exclusivity.\r\n* A new "EAGL" GLInterface was introduced. Also, because iOS doesn\'t create a default framebuffer, [the OpenGL backend calls the EAGL GLInterface to create one](https://github.com/OatmealDome/dolphin/commit/8b9064ececa69ee47e468d242dd7ac270b209f40).\r\n* The iOS MoltenVK dylib has been added to Externals.\r\n* The CoreAudio backend has been restored, because [Cubeb support for iOS is old and broken](https://github.com/kinetiknz/cubeb/issues/394).\r\n* Since `ButtonManager` and `Touchscreen` are useful on iOS too, they have been moved into a new "Touch" folder in InputCommon.\r\n* The required clang-format version has been updated to 9.0. Some Objective-C code was not being formatted correctly on 7.0 for whatever reason.\r\n\r\n## Credits\r\n\r\nThis PR is the culmination of many attempts by several people, including myself. It could not be done without them and support from others.\r\n\r\nPrevious PRs:\r\n\r\n* #3881\r\n* #3885\r\n* #3941\r\n\r\nThanks to:\r\n\r\n* @Simonx22 for testing\r\n* leetal\'s [iOS toolchain for cmake](https://github.com/leetal/ios-cmake)\r\n* ppsspp for mach vm functions and W^X exclusivity example code \r\n* Apple for releasing their ARM XNU sources', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8492/events', 'id': 527757689, 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8492/comments', 'title': '[RFC / WIP] iOS support with working JIT', 'comments': 33, 'closed_at': None, 'pull_request': {'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/8492.patch', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/8492.diff', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8492', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8492'}, 'assignee': None}, 'sender': {'type': 'User', 'avatar_url': 'https://avatars1.githubusercontent.com/u/52388606?v=4', 'login': 'JohnG210', 'gists_url': 'https://api.github.com/users/JohnG210/gists{/gist_id}', 'html_url': 'https://github.com/JohnG210', 'events_url': 'https://api.github.com/users/JohnG210/events{/privacy}', 'id': 52388606, 'site_admin': False, 'followers_url': 'https://api.github.com/users/JohnG210/followers', 'subscriptions_url': 'https://api.github.com/users/JohnG210/subscriptions', 'node_id': 'MDQ6VXNlcjUyMzg4NjA2', 'organizations_url': 'https://api.github.com/users/JohnG210/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/JohnG210/received_events', 'following_url': 'https://api.github.com/users/JohnG210/following{/other_user}', 'repos_url': 'https://api.github.com/users/JohnG210/repos', 'url': 'https://api.github.com/users/JohnG210', 'starred_url': 'https://api.github.com/users/JohnG210/starred{/owner}{/repo}'}}, 'safe_author': False, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'body': 'First of all thanks OatmealDome for making this pull request, super interested in ios support for Dolphin. I just had a quick question, I am getting an error when I try running an iso. I get the same error after building on two Macs and running on two different devices. (iPhone X 12.4 and iPad Air 2 13.1.2) I keep getting a "CPU thread (14): EXC_BAD_ACCESS (code=1, address=0x56c00500a)" error after i try and open an iso. I\'m also getting a "Thread 1: signal SIGABRT" error on line 16 in the main. ', 'action': 'created', 'title': '[RFC / WIP] iOS support with working JIT', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8492#issuecomment-562412571', 'author': 'JohnG210'}
2019-12-05T12:57:01.262329	{'type': 'gh_issue_comment', 'id': 8492, 'raw': {'action': 'created', 'repository': {'fork': False, 'has_wiki': True, 'mirror_url': None, 'open_issues_count': 167, 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'forks': 1329, 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'html_url': 'https://github.com/dolphin-emu/dolphin', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'open_issues': 167, 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'language': 'C++', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'default_branch': 'master', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'watchers_count': 5795, 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'name': 'dolphin', 'size': 386665, 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'has_pages': False, 'has_issues': False, 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'disabled': False, 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'stargazers_count': 5795, 'created_at': '2013-07-22T09:07:57Z', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'archived': False, 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'full_name': 'dolphin-emu/dolphin', 'updated_at': '2019-12-05T05:54:39Z', 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'private': False, 'forks_count': 1329, 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'has_projects': False, 'owner': {'type': 'Organization', 'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'html_url': 'https://github.com/dolphin-emu', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'id': 5050316, 'site_admin': False, 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'url': 'https://api.github.com/users/dolphin-emu', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}'}, 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'has_downloads': True, 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'watchers': 5795, 'license': {'name': 'GNU General Public License v2.0', 'node_id': 'MDc6TGljZW5zZTg=', 'spdx_id': 'GPL-2.0', 'key': 'gpl-2.0', 'url': 'https://api.github.com/licenses/gpl-2.0'}, 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'homepage': 'https://dolphin-emu.org/', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'id': 11577304, 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'pushed_at': '2019-12-05T08:04:08Z', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}'}, 'comment': {'id': 562118042, 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8492', 'created_at': '2019-12-05T12:57:00Z', 'node_id': 'MDEyOklzc3VlQ29tbWVudDU2MjExODA0Mg==', 'author_association': 'NONE', 'body': '@degasus Do you mean with compiling with: compiling trough Xcode? Then: yes. But where can I find the files to compile it to a ipa?', 'updated_at': '2019-12-05T12:57:00Z', 'user': {'type': 'User', 'avatar_url': 'https://avatars2.githubusercontent.com/u/58544833?v=4', 'login': 'SGamer33', 'gists_url': 'https://api.github.com/users/SGamer33/gists{/gist_id}', 'html_url': 'https://github.com/SGamer33', 'events_url': 'https://api.github.com/users/SGamer33/events{/privacy}', 'id': 58544833, 'site_admin': False, 'followers_url': 'https://api.github.com/users/SGamer33/followers', 'subscriptions_url': 'https://api.github.com/users/SGamer33/subscriptions', 'node_id': 'MDQ6VXNlcjU4NTQ0ODMz', 'organizations_url': 'https://api.github.com/users/SGamer33/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/SGamer33/received_events', 'following_url': 'https://api.github.com/users/SGamer33/following{/other_user}', 'repos_url': 'https://api.github.com/users/SGamer33/repos', 'url': 'https://api.github.com/users/SGamer33', 'starred_url': 'https://api.github.com/users/SGamer33/starred{/owner}{/repo}'}, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/562118042', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8492#issuecomment-562118042'}, 'organization': {'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'description': '', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events', 'id': 5050316, 'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'url': 'https://api.github.com/orgs/dolphin-emu'}, 'issue': {'created_at': '2019-11-24T21:15:23Z', 'assignees': [], 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8492/labels{/name}', 'milestone': None, 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'number': 8492, 'updated_at': '2019-12-05T12:57:00Z', 'node_id': 'MDExOlB1bGxSZXF1ZXN0MzQ0OTQ5Mzk4', 'author_association': 'CONTRIBUTOR', 'labels': [], 'state': 'open', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8492', 'user': {'type': 'User', 'avatar_url': 'https://avatars0.githubusercontent.com/u/11504941?v=4', 'login': 'OatmealDome', 'gists_url': 'https://api.github.com/users/OatmealDome/gists{/gist_id}', 'html_url': 'https://github.com/OatmealDome', 'events_url': 'https://api.github.com/users/OatmealDome/events{/privacy}', 'id': 11504941, 'site_admin': False, 'followers_url': 'https://api.github.com/users/OatmealDome/followers', 'subscriptions_url': 'https://api.github.com/users/OatmealDome/subscriptions', 'node_id': 'MDQ6VXNlcjExNTA0OTQx', 'organizations_url': 'https://api.github.com/users/OatmealDome/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/OatmealDome/received_events', 'following_url': 'https://api.github.com/users/OatmealDome/following{/other_user}', 'repos_url': 'https://api.github.com/users/OatmealDome/repos', 'url': 'https://api.github.com/users/OatmealDome', 'starred_url': 'https://api.github.com/users/OatmealDome/starred{/owner}{/repo}'}, 'locked': False, 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8492', 'body': 'This PR adds experimental support for iOS devices with a working JIT. It is by no means complete, and is only intended to initiate a discussion as to whether iOS is a platform that Dolphin should support.\r\n\r\n**This is not ready for general users.**\r\n\r\nFirst off, [here\'s a quick demo video](https://youtu.be/CI4SGePajYo) and some screenshots.\r\n\r\n<img src="https://cdn.oatmealdome.me/screenshots/dolphin-ios/xenoblade.png" width="50%" height="50%">\r\n\r\n<img src="https://cdn.oatmealdome.me/screenshots/dolphin-ios/animal_crossing.png" width="50%" height="50%">\r\n\r\n<img src="https://cdn.oatmealdome.me/screenshots/dolphin-ios/melee.png" width="50%" height="50%">\r\n\r\n<img src="https://cdn.oatmealdome.me/screenshots/dolphin-ios/mkw.png" width="50%" height="50%">\r\n\r\nLet\'s get into the details.\r\n\r\n## Application\r\n\r\nA new Xcode project has been placed in `Source/iOS/DolphiniOS`. The build system for iOS takes inspiration from the Android version of Dolphin.\r\n\r\nXcode has been configured to run some shell scripts on every build. The first one runs `cmake` using an iOS toolchain to create static libraries, which are then linked into the application.  The second shell script copies image assets from the Android port.\r\n\r\nThe ``Sys`` folder is embedded into the bundle.\r\n\r\nA "jni" equivalent can be found in `Source/iOS/Interface`. Its only purpose is to hold the `MainiOS` source file.\r\n\r\n### User interface\r\n\r\nThe UI is written in Objective-C and Swift. It is extremely barebones at the moment - while there is a working touchscreen controller, pretty much everything else needs work.\r\n\r\nThe code is 50/50 Objective-C and Swift, but I believe it would be best to write future UI code in Swift and transition what we can away from Objective-C. (Given the necessity of using C++ to access Dolphin code, some Objective-C++ will likely need to stay if this port is given a green light.) \r\n\r\nAll Dolphin user files are stored in the app container\'s Documents directory. [This folder is then exposed to `Files.app`, allowing users to modify files as they wish](https://cdn.oatmealdome.me/screenshots/dolphin-ios/oMRQ0DA.png).\r\n\r\nA `Software` folder is automatically created in the Documents directory. The UI will automatically scan this folder for software and show found files in a list on startup.\r\n\r\n### Target devices\r\n\r\n* **The device must be jailbroken.**\r\n* Devices with A9, A10, and A11 processors were tested. These were an iPhone 6s, a 6th gen iPad, and an iPhone X.\r\n* A8, A12, and A13 devices were unable to be tested because @Simonx22 and I don\'t own any.\r\n* [A7 and A8 processors have GPUs that don\'t support arrays of textures](https://developer.apple.com/metal/Metal-Feature-Set-Tables.pdf), so the Vulkan backend is not supported.\r\n* A6 processors and below are 32-bit.\r\n\r\nThe minimum supported devices should be ones with an A9 processor.\r\n\r\n### Building\r\n\r\nYou need the following:\r\n\r\n* Mac\r\n* Xcode 11 (older Xcode versions may work, not tested)\r\n* `cmake`\r\n* Jailbroken iOS / iPadOS device running iOS 12 and above\r\n\r\nThen, you can build:\r\n\r\n1. Install AppSync Unified on your device from `cydia.angelxwind.net`.\r\n2. Clone the repo.\r\n3. Open `Source/iOS/DolphiniOS/DolphiniOS.xcodeproj`.\r\n4. Initiate a build in Xcode.\r\n\r\n## Problems\r\n\r\n### Limitations\r\n\r\n* BoundingBox is not supported, since [MoltenVK sets ``fragmentStoresAndAtomics``  to `true` only on macOS](https://github.com/KhronosGroup/MoltenVK/blob/789ef74d11d9ea9ce912f6df3d018e1d194a1fdb/MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm#L1038). However, forcing this feature to be enabled shows that it works fine on iOS (albeit with minor glitches). I\'m not sure what I should be looking for on the Metal feature set table to see if iOS GPU drivers really support this feature.\r\n* Metal does not support geometry shaders or setting line width.\r\n* OpenGLES, like OpenGL on macOS, has been abandoned for a very long time. `EXT_buffer_storage` support is nowhere to be found. As expected, the OpenGL backend is unusable.\r\n\r\n### Known issues\r\n\r\n* `Core::IsCPUThread()` does not work for some reason. The call in `JitArm64::HandleFault()` needs to be commented out when testing for now.\r\n* Controller INIs from the Android version needs to be copied manually. ``GCPadNew.ini`` and `WiimoteNew.ini` go in ``Config`` and  ``WiimoteProfile.ini`` in ``Config/Profiles/Wiimote``.\r\n* To stop emulation, you have to quit the application.\r\n* You have to manually switch the controller type (GameCube controller or Wiimote with Nunchuk) in the source code.\r\n* There is no D-Pad on any controller type.\r\n* There is no build system that generates a ``deb`` for Cydia.\r\n* There are likely code style compliance issues. Swift code is entirely unchecked by lint.\r\n* Many other things.\r\n\r\n### Regarding the jailbroken device requirement\r\n\r\nThe iOS kernel places an artificial restriction on the amount of address space that each process can access, depending on how much RAM the device has. This is the core issue that plagued Dolphin support for a very, *very* long time. Fastmem requires a large amount of virtual memory to play with, which unfortunately is greater than the limit of every publicly released iOS device.\r\n\r\nThankfully, Apple created an entitlement called `dynamic-codesigning` that allows the process to create executable memory. It was added for applications that need JIT, like Safari. An additional perk of `dynamic-codesigning` is that [it also allows the process to access a large amount of address space](https://github.com/apple/darwin-xnu/blob/master/tests/jumbo_va_spaces_28530648.c). However, it cannot be set on third-party apps as it is an Apple-internal entitlement. This is why a jailbroken device is needed.\r\n\r\nThere is a way, however, to run Dolphin under a jailed device. (In fact, I am doing the majority of my testing on a jailed device.) It requires modifying the iOS bootloader and setting the boot argument `arm64_maxoffset`. Because this method is quite complicated, I don\'t think this is a viable option for end-users. It is significantly easier to just require a jailbroken device than to support users who try this method.\r\n\r\n### The future\r\n\r\nAs we all know, Dolphin support for macOS doesn\'t get much love because of a lack of maintainers. While I don\'t plan to abandon this project, I think it would be best to see if any others are willing to contribute. I am just one person, after all.\r\n\r\n## Changes to Dolphin\r\n\r\nThis is a non-exhaustive list.\r\n\r\n* The define ``IPHONEOS`` has been introduced. ``IOS`` is not used to avoid confusion and conflicts with the Wii\'s IOS.\r\n* The iOS cmake toolchain from [here](https://github.com/leetal/ios-cmake) has been added. `CMakeLists` use ``IOS`` because it is set from the toolchain.\r\n* Mach\'s vm functions are used wherever possible ([one](https://github.com/OatmealDome/dolphin/commit/fbffaa4b429af4fc725c7093837aa142f21cc006#diff-1f416de641b3f6132c533a0feb099829), [two](https://github.com/OatmealDome/dolphin/commit/d3e100a0a854becaaf053cb5aeae2de77a961eed)).\r\n* (This only applies to jailed devices.) When attached to a debugger, iOS allows memory to be marked as executable. However, memory cannot be writable and executable at the same time, so code has been introduced into the ARM64 JIT to support W^X exclusivity.\r\n* A new "EAGL" GLInterface was introduced. Also, because iOS doesn\'t create a default framebuffer, [the OpenGL backend calls the EAGL GLInterface to create one](https://github.com/OatmealDome/dolphin/commit/8b9064ececa69ee47e468d242dd7ac270b209f40).\r\n* The iOS MoltenVK dylib has been added to Externals.\r\n* The CoreAudio backend has been restored, because [Cubeb support for iOS is old and broken](https://github.com/kinetiknz/cubeb/issues/394).\r\n* Since `ButtonManager` and `Touchscreen` are useful on iOS too, they have been moved into a new "Touch" folder in InputCommon.\r\n* The required clang-format version has been updated to 9.0. Some Objective-C code was not being formatted correctly on 7.0 for whatever reason.\r\n\r\n## Credits\r\n\r\nThis PR is the culmination of many attempts by several people, including myself. It could not be done without them and support from others.\r\n\r\nPrevious PRs:\r\n\r\n* #3881\r\n* #3885\r\n* #3941\r\n\r\nThanks to:\r\n\r\n* @Simonx22 for testing\r\n* leetal\'s [iOS toolchain for cmake](https://github.com/leetal/ios-cmake)\r\n* ppsspp for mach vm functions and W^X exclusivity example code \r\n* Apple for releasing their ARM XNU sources', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8492/events', 'id': 527757689, 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8492/comments', 'title': '[RFC / WIP] iOS support with working JIT', 'comments': 32, 'closed_at': None, 'pull_request': {'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/8492.patch', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/8492.diff', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8492', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8492'}, 'assignee': None}, 'sender': {'type': 'User', 'avatar_url': 'https://avatars2.githubusercontent.com/u/58544833?v=4', 'login': 'SGamer33', 'gists_url': 'https://api.github.com/users/SGamer33/gists{/gist_id}', 'html_url': 'https://github.com/SGamer33', 'events_url': 'https://api.github.com/users/SGamer33/events{/privacy}', 'id': 58544833, 'site_admin': False, 'followers_url': 'https://api.github.com/users/SGamer33/followers', 'subscriptions_url': 'https://api.github.com/users/SGamer33/subscriptions', 'node_id': 'MDQ6VXNlcjU4NTQ0ODMz', 'organizations_url': 'https://api.github.com/users/SGamer33/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/SGamer33/received_events', 'following_url': 'https://api.github.com/users/SGamer33/following{/other_user}', 'repos_url': 'https://api.github.com/users/SGamer33/repos', 'url': 'https://api.github.com/users/SGamer33', 'starred_url': 'https://api.github.com/users/SGamer33/starred{/owner}{/repo}'}}, 'safe_author': False, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'body': '@degasus Do you mean with compiling with: compiling trough Xcode? Then: yes. But where can I find the files to compile it to a ipa?', 'action': 'created', 'title': '[RFC / WIP] iOS support with working JIT', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8492#issuecomment-562118042', 'author': 'SGamer33'}
2019-12-05T11:11:45.268411	{'type': 'gh_issue_comment', 'id': 8436, 'raw': {'action': 'created', 'repository': {'fork': False, 'has_wiki': True, 'mirror_url': None, 'open_issues_count': 167, 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'forks': 1329, 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'html_url': 'https://github.com/dolphin-emu/dolphin', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'open_issues': 167, 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'language': 'C++', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'default_branch': 'master', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'watchers_count': 5795, 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'name': 'dolphin', 'size': 386665, 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'has_pages': False, 'has_issues': False, 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'disabled': False, 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'stargazers_count': 5795, 'created_at': '2013-07-22T09:07:57Z', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'archived': False, 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'full_name': 'dolphin-emu/dolphin', 'updated_at': '2019-12-05T05:54:39Z', 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'private': False, 'forks_count': 1329, 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'has_projects': False, 'owner': {'type': 'Organization', 'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'html_url': 'https://github.com/dolphin-emu', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'id': 5050316, 'site_admin': False, 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'url': 'https://api.github.com/users/dolphin-emu', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}'}, 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'has_downloads': True, 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'watchers': 5795, 'license': {'name': 'GNU General Public License v2.0', 'node_id': 'MDc6TGljZW5zZTg=', 'spdx_id': 'GPL-2.0', 'key': 'gpl-2.0', 'url': 'https://api.github.com/licenses/gpl-2.0'}, 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'homepage': 'https://dolphin-emu.org/', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'id': 11577304, 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'pushed_at': '2019-12-05T08:04:08Z', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}'}, 'comment': {'id': 562084410, 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8436', 'created_at': '2019-12-05T11:11:44Z', 'node_id': 'MDEyOklzc3VlQ29tbWVudDU2MjA4NDQxMA==', 'author_association': 'CONTRIBUTOR', 'body': "We're working on the Progress Report and having some trouble with some of the details of this one. Could you please ping either me or JMC  on IRC and answer a few questions? Thanks!", 'updated_at': '2019-12-05T11:11:44Z', 'user': {'type': 'User', 'avatar_url': 'https://avatars2.githubusercontent.com/u/6551020?v=4', 'login': 'MayImilae', 'gists_url': 'https://api.github.com/users/MayImilae/gists{/gist_id}', 'html_url': 'https://github.com/MayImilae', 'events_url': 'https://api.github.com/users/MayImilae/events{/privacy}', 'id': 6551020, 'site_admin': False, 'followers_url': 'https://api.github.com/users/MayImilae/followers', 'subscriptions_url': 'https://api.github.com/users/MayImilae/subscriptions', 'node_id': 'MDQ6VXNlcjY1NTEwMjA=', 'organizations_url': 'https://api.github.com/users/MayImilae/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/MayImilae/received_events', 'following_url': 'https://api.github.com/users/MayImilae/following{/other_user}', 'repos_url': 'https://api.github.com/users/MayImilae/repos', 'url': 'https://api.github.com/users/MayImilae', 'starred_url': 'https://api.github.com/users/MayImilae/starred{/owner}{/repo}'}, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/562084410', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8436#issuecomment-562084410'}, 'organization': {'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'description': '', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events', 'id': 5050316, 'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'url': 'https://api.github.com/orgs/dolphin-emu'}, 'issue': {'created_at': '2019-10-27T09:52:59Z', 'assignees': [], 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8436/labels{/name}', 'milestone': None, 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'number': 8436, 'updated_at': '2019-12-05T11:11:44Z', 'node_id': 'MDExOlB1bGxSZXF1ZXN0MzMyODQwNDc5', 'author_association': 'CONTRIBUTOR', 'labels': [], 'state': 'closed', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8436', 'user': {'type': 'User', 'avatar_url': 'https://avatars2.githubusercontent.com/u/6716818?v=4', 'login': 'JosJuice', 'gists_url': 'https://api.github.com/users/JosJuice/gists{/gist_id}', 'html_url': 'https://github.com/JosJuice', 'events_url': 'https://api.github.com/users/JosJuice/events{/privacy}', 'id': 6716818, 'site_admin': False, 'followers_url': 'https://api.github.com/users/JosJuice/followers', 'subscriptions_url': 'https://api.github.com/users/JosJuice/subscriptions', 'node_id': 'MDQ6VXNlcjY3MTY4MTg=', 'organizations_url': 'https://api.github.com/users/JosJuice/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/JosJuice/received_events', 'following_url': 'https://api.github.com/users/JosJuice/following{/other_user}', 'repos_url': 'https://api.github.com/users/JosJuice/repos', 'url': 'https://api.github.com/users/JosJuice', 'starred_url': 'https://api.github.com/users/JosJuice/starred{/owner}{/repo}'}, 'locked': False, 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8436', 'body': 'Datel\'s Wii Freeloaders set `m_PictureConfiguration.WPL` to 0 for a while. Not sure if the fix in this commit is a proper fix or just a hack, since I\'m not very familiar with this code.\r\n\r\nWith this change, it\'s possible to run a Wii Freeloader if you are running an old enough version of the Wii Menu, but the "coloured bars" that Datel reference in their documentation never show up. The screen just freezes for a few seconds instead.', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8436/events', 'id': 512944347, 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8436/comments', 'title': "VideoInterface: Don't crash when running Wii Freeloader", 'comments': 3, 'closed_at': '2019-11-08T00:56:26Z', 'pull_request': {'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/8436.patch', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/8436.diff', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8436', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8436'}, 'assignee': None}, 'sender': {'type': 'User', 'avatar_url': 'https://avatars2.githubusercontent.com/u/6551020?v=4', 'login': 'MayImilae', 'gists_url': 'https://api.github.com/users/MayImilae/gists{/gist_id}', 'html_url': 'https://github.com/MayImilae', 'events_url': 'https://api.github.com/users/MayImilae/events{/privacy}', 'id': 6551020, 'site_admin': False, 'followers_url': 'https://api.github.com/users/MayImilae/followers', 'subscriptions_url': 'https://api.github.com/users/MayImilae/subscriptions', 'node_id': 'MDQ6VXNlcjY1NTEwMjA=', 'organizations_url': 'https://api.github.com/users/MayImilae/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/MayImilae/received_events', 'following_url': 'https://api.github.com/users/MayImilae/following{/other_user}', 'repos_url': 'https://api.github.com/users/MayImilae/repos', 'url': 'https://api.github.com/users/MayImilae', 'starred_url': 'https://api.github.com/users/MayImilae/starred{/owner}{/repo}'}}, 'safe_author': True, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'body': "We're working on the Progress Report and having some trouble with some of the details of this one. Could you please ping either me or JMC  on IRC and answer a few questions? Thanks!", 'action': 'created', 'title': "VideoInterface: Don't crash when running Wii Freeloader", 'url': 'https://github.com/dolphin-emu/dolphin/pull/8436#issuecomment-562084410', 'author': 'MayImilae'}
2019-12-05T09:58:15.758798	{'type': 'gh_issue_comment', 'id': 8492, 'raw': {'action': 'created', 'repository': {'fork': False, 'has_wiki': True, 'mirror_url': None, 'open_issues_count': 167, 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'forks': 1329, 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'html_url': 'https://github.com/dolphin-emu/dolphin', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'open_issues': 167, 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'language': 'C++', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'default_branch': 'master', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'watchers_count': 5795, 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'name': 'dolphin', 'size': 386665, 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'has_pages': False, 'has_issues': False, 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'disabled': False, 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'stargazers_count': 5795, 'created_at': '2013-07-22T09:07:57Z', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'archived': False, 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'full_name': 'dolphin-emu/dolphin', 'updated_at': '2019-12-05T05:54:39Z', 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'private': False, 'forks_count': 1329, 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'has_projects': False, 'owner': {'type': 'Organization', 'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'html_url': 'https://github.com/dolphin-emu', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'id': 5050316, 'site_admin': False, 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'url': 'https://api.github.com/users/dolphin-emu', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}'}, 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'has_downloads': True, 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'watchers': 5795, 'license': {'name': 'GNU General Public License v2.0', 'node_id': 'MDc6TGljZW5zZTg=', 'spdx_id': 'GPL-2.0', 'key': 'gpl-2.0', 'url': 'https://api.github.com/licenses/gpl-2.0'}, 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'homepage': 'https://dolphin-emu.org/', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'id': 11577304, 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'pushed_at': '2019-12-05T08:04:08Z', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}'}, 'comment': {'id': 562056951, 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8492', 'created_at': '2019-12-05T09:58:14Z', 'node_id': 'MDEyOklzc3VlQ29tbWVudDU2MjA1Njk1MQ==', 'author_association': 'MEMBER', 'body': "@SGamer33 It is in early development right now. If you can't compile it on your own, you won't be able to use it.", 'updated_at': '2019-12-05T09:58:14Z', 'user': {'type': 'User', 'avatar_url': 'https://avatars0.githubusercontent.com/u/2787141?v=4', 'login': 'degasus', 'gists_url': 'https://api.github.com/users/degasus/gists{/gist_id}', 'html_url': 'https://github.com/degasus', 'events_url': 'https://api.github.com/users/degasus/events{/privacy}', 'id': 2787141, 'site_admin': False, 'followers_url': 'https://api.github.com/users/degasus/followers', 'subscriptions_url': 'https://api.github.com/users/degasus/subscriptions', 'node_id': 'MDQ6VXNlcjI3ODcxNDE=', 'organizations_url': 'https://api.github.com/users/degasus/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/degasus/received_events', 'following_url': 'https://api.github.com/users/degasus/following{/other_user}', 'repos_url': 'https://api.github.com/users/degasus/repos', 'url': 'https://api.github.com/users/degasus', 'starred_url': 'https://api.github.com/users/degasus/starred{/owner}{/repo}'}, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/562056951', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8492#issuecomment-562056951'}, 'organization': {'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'description': '', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events', 'id': 5050316, 'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'url': 'https://api.github.com/orgs/dolphin-emu'}, 'issue': {'created_at': '2019-11-24T21:15:23Z', 'assignees': [], 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8492/labels{/name}', 'milestone': None, 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'number': 8492, 'updated_at': '2019-12-05T09:58:14Z', 'node_id': 'MDExOlB1bGxSZXF1ZXN0MzQ0OTQ5Mzk4', 'author_association': 'CONTRIBUTOR', 'labels': [], 'state': 'open', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8492', 'user': {'type': 'User', 'avatar_url': 'https://avatars0.githubusercontent.com/u/11504941?v=4', 'login': 'OatmealDome', 'gists_url': 'https://api.github.com/users/OatmealDome/gists{/gist_id}', 'html_url': 'https://github.com/OatmealDome', 'events_url': 'https://api.github.com/users/OatmealDome/events{/privacy}', 'id': 11504941, 'site_admin': False, 'followers_url': 'https://api.github.com/users/OatmealDome/followers', 'subscriptions_url': 'https://api.github.com/users/OatmealDome/subscriptions', 'node_id': 'MDQ6VXNlcjExNTA0OTQx', 'organizations_url': 'https://api.github.com/users/OatmealDome/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/OatmealDome/received_events', 'following_url': 'https://api.github.com/users/OatmealDome/following{/other_user}', 'repos_url': 'https://api.github.com/users/OatmealDome/repos', 'url': 'https://api.github.com/users/OatmealDome', 'starred_url': 'https://api.github.com/users/OatmealDome/starred{/owner}{/repo}'}, 'locked': False, 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8492', 'body': 'This PR adds experimental support for iOS devices with a working JIT. It is by no means complete, and is only intended to initiate a discussion as to whether iOS is a platform that Dolphin should support.\r\n\r\n**This is not ready for general users.**\r\n\r\nFirst off, [here\'s a quick demo video](https://youtu.be/CI4SGePajYo) and some screenshots.\r\n\r\n<img src="https://cdn.oatmealdome.me/screenshots/dolphin-ios/xenoblade.png" width="50%" height="50%">\r\n\r\n<img src="https://cdn.oatmealdome.me/screenshots/dolphin-ios/animal_crossing.png" width="50%" height="50%">\r\n\r\n<img src="https://cdn.oatmealdome.me/screenshots/dolphin-ios/melee.png" width="50%" height="50%">\r\n\r\n<img src="https://cdn.oatmealdome.me/screenshots/dolphin-ios/mkw.png" width="50%" height="50%">\r\n\r\nLet\'s get into the details.\r\n\r\n## Application\r\n\r\nA new Xcode project has been placed in `Source/iOS/DolphiniOS`. The build system for iOS takes inspiration from the Android version of Dolphin.\r\n\r\nXcode has been configured to run some shell scripts on every build. The first one runs `cmake` using an iOS toolchain to create static libraries, which are then linked into the application.  The second shell script copies image assets from the Android port.\r\n\r\nThe ``Sys`` folder is embedded into the bundle.\r\n\r\nA "jni" equivalent can be found in `Source/iOS/Interface`. Its only purpose is to hold the `MainiOS` source file.\r\n\r\n### User interface\r\n\r\nThe UI is written in Objective-C and Swift. It is extremely barebones at the moment - while there is a working touchscreen controller, pretty much everything else needs work.\r\n\r\nThe code is 50/50 Objective-C and Swift, but I believe it would be best to write future UI code in Swift and transition what we can away from Objective-C. (Given the necessity of using C++ to access Dolphin code, some Objective-C++ will likely need to stay if this port is given a green light.) \r\n\r\nAll Dolphin user files are stored in the app container\'s Documents directory. [This folder is then exposed to `Files.app`, allowing users to modify files as they wish](https://cdn.oatmealdome.me/screenshots/dolphin-ios/oMRQ0DA.png).\r\n\r\nA `Software` folder is automatically created in the Documents directory. The UI will automatically scan this folder for software and show found files in a list on startup.\r\n\r\n### Target devices\r\n\r\n* **The device must be jailbroken.**\r\n* Devices with A9, A10, and A11 processors were tested. These were an iPhone 6s, a 6th gen iPad, and an iPhone X.\r\n* A8, A12, and A13 devices were unable to be tested because @Simonx22 and I don\'t own any.\r\n* [A7 and A8 processors have GPUs that don\'t support arrays of textures](https://developer.apple.com/metal/Metal-Feature-Set-Tables.pdf), so the Vulkan backend is not supported.\r\n* A6 processors and below are 32-bit.\r\n\r\nThe minimum supported devices should be ones with an A9 processor.\r\n\r\n### Building\r\n\r\nYou need the following:\r\n\r\n* Mac\r\n* Xcode 11 (older Xcode versions may work, not tested)\r\n* `cmake`\r\n* Jailbroken iOS / iPadOS device running iOS 12 and above\r\n\r\nThen, you can build:\r\n\r\n1. Install AppSync Unified on your device from `cydia.angelxwind.net`.\r\n2. Clone the repo.\r\n3. Open `Source/iOS/DolphiniOS/DolphiniOS.xcodeproj`.\r\n4. Initiate a build in Xcode.\r\n\r\n## Problems\r\n\r\n### Limitations\r\n\r\n* BoundingBox is not supported, since [MoltenVK sets ``fragmentStoresAndAtomics``  to `true` only on macOS](https://github.com/KhronosGroup/MoltenVK/blob/789ef74d11d9ea9ce912f6df3d018e1d194a1fdb/MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm#L1038). However, forcing this feature to be enabled shows that it works fine on iOS (albeit with minor glitches). I\'m not sure what I should be looking for on the Metal feature set table to see if iOS GPU drivers really support this feature.\r\n* Metal does not support geometry shaders or setting line width.\r\n* OpenGLES, like OpenGL on macOS, has been abandoned for a very long time. `EXT_buffer_storage` support is nowhere to be found. As expected, the OpenGL backend is unusable.\r\n\r\n### Known issues\r\n\r\n* `Core::IsCPUThread()` does not work for some reason. The call in `JitArm64::HandleFault()` needs to be commented out when testing for now.\r\n* Controller INIs from the Android version needs to be copied manually. ``GCPadNew.ini`` and `WiimoteNew.ini` go in ``Config`` and  ``WiimoteProfile.ini`` in ``Config/Profiles/Wiimote``.\r\n* To stop emulation, you have to quit the application.\r\n* You have to manually switch the controller type (GameCube controller or Wiimote with Nunchuk) in the source code.\r\n* There is no D-Pad on any controller type.\r\n* There is no build system that generates a ``deb`` for Cydia.\r\n* There are likely code style compliance issues. Swift code is entirely unchecked by lint.\r\n* Many other things.\r\n\r\n### Regarding the jailbroken device requirement\r\n\r\nThe iOS kernel places an artificial restriction on the amount of address space that each process can access, depending on how much RAM the device has. This is the core issue that plagued Dolphin support for a very, *very* long time. Fastmem requires a large amount of virtual memory to play with, which unfortunately is greater than the limit of every publicly released iOS device.\r\n\r\nThankfully, Apple created an entitlement called `dynamic-codesigning` that allows the process to create executable memory. It was added for applications that need JIT, like Safari. An additional perk of `dynamic-codesigning` is that [it also allows the process to access a large amount of address space](https://github.com/apple/darwin-xnu/blob/master/tests/jumbo_va_spaces_28530648.c). However, it cannot be set on third-party apps as it is an Apple-internal entitlement. This is why a jailbroken device is needed.\r\n\r\nThere is a way, however, to run Dolphin under a jailed device. (In fact, I am doing the majority of my testing on a jailed device.) It requires modifying the iOS bootloader and setting the boot argument `arm64_maxoffset`. Because this method is quite complicated, I don\'t think this is a viable option for end-users. It is significantly easier to just require a jailbroken device than to support users who try this method.\r\n\r\n### The future\r\n\r\nAs we all know, Dolphin support for macOS doesn\'t get much love because of a lack of maintainers. While I don\'t plan to abandon this project, I think it would be best to see if any others are willing to contribute. I am just one person, after all.\r\n\r\n## Changes to Dolphin\r\n\r\nThis is a non-exhaustive list.\r\n\r\n* The define ``IPHONEOS`` has been introduced. ``IOS`` is not used to avoid confusion and conflicts with the Wii\'s IOS.\r\n* The iOS cmake toolchain from [here](https://github.com/leetal/ios-cmake) has been added. `CMakeLists` use ``IOS`` because it is set from the toolchain.\r\n* Mach\'s vm functions are used wherever possible ([one](https://github.com/OatmealDome/dolphin/commit/fbffaa4b429af4fc725c7093837aa142f21cc006#diff-1f416de641b3f6132c533a0feb099829), [two](https://github.com/OatmealDome/dolphin/commit/d3e100a0a854becaaf053cb5aeae2de77a961eed)).\r\n* (This only applies to jailed devices.) When attached to a debugger, iOS allows memory to be marked as executable. However, memory cannot be writable and executable at the same time, so code has been introduced into the ARM64 JIT to support W^X exclusivity.\r\n* A new "EAGL" GLInterface was introduced. Also, because iOS doesn\'t create a default framebuffer, [the OpenGL backend calls the EAGL GLInterface to create one](https://github.com/OatmealDome/dolphin/commit/8b9064ececa69ee47e468d242dd7ac270b209f40).\r\n* The iOS MoltenVK dylib has been added to Externals.\r\n* The CoreAudio backend has been restored, because [Cubeb support for iOS is old and broken](https://github.com/kinetiknz/cubeb/issues/394).\r\n* Since `ButtonManager` and `Touchscreen` are useful on iOS too, they have been moved into a new "Touch" folder in InputCommon.\r\n* The required clang-format version has been updated to 9.0. Some Objective-C code was not being formatted correctly on 7.0 for whatever reason.\r\n\r\n## Credits\r\n\r\nThis PR is the culmination of many attempts by several people, including myself. It could not be done without them and support from others.\r\n\r\nPrevious PRs:\r\n\r\n* #3881\r\n* #3885\r\n* #3941\r\n\r\nThanks to:\r\n\r\n* @Simonx22 for testing\r\n* leetal\'s [iOS toolchain for cmake](https://github.com/leetal/ios-cmake)\r\n* ppsspp for mach vm functions and W^X exclusivity example code \r\n* Apple for releasing their ARM XNU sources', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8492/events', 'id': 527757689, 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8492/comments', 'title': '[RFC / WIP] iOS support with working JIT', 'comments': 31, 'closed_at': None, 'pull_request': {'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/8492.patch', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/8492.diff', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8492', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8492'}, 'assignee': None}, 'sender': {'type': 'User', 'avatar_url': 'https://avatars0.githubusercontent.com/u/2787141?v=4', 'login': 'degasus', 'gists_url': 'https://api.github.com/users/degasus/gists{/gist_id}', 'html_url': 'https://github.com/degasus', 'events_url': 'https://api.github.com/users/degasus/events{/privacy}', 'id': 2787141, 'site_admin': False, 'followers_url': 'https://api.github.com/users/degasus/followers', 'subscriptions_url': 'https://api.github.com/users/degasus/subscriptions', 'node_id': 'MDQ6VXNlcjI3ODcxNDE=', 'organizations_url': 'https://api.github.com/users/degasus/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/degasus/received_events', 'following_url': 'https://api.github.com/users/degasus/following{/other_user}', 'repos_url': 'https://api.github.com/users/degasus/repos', 'url': 'https://api.github.com/users/degasus', 'starred_url': 'https://api.github.com/users/degasus/starred{/owner}{/repo}'}}, 'safe_author': True, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'body': "@SGamer33 It is in early development right now. If you can't compile it on your own, you won't be able to use it.", 'action': 'created', 'title': '[RFC / WIP] iOS support with working JIT', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8492#issuecomment-562056951', 'author': 'degasus'}
2019-12-05T06:26:37.320513	{'type': 'gh_issue_comment', 'id': 8492, 'raw': {'action': 'created', 'repository': {'fork': False, 'has_wiki': True, 'mirror_url': None, 'open_issues_count': 166, 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'forks': 1329, 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'html_url': 'https://github.com/dolphin-emu/dolphin', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'open_issues': 166, 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'language': 'C++', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'default_branch': 'master', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'watchers_count': 5795, 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'name': 'dolphin', 'size': 386665, 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'has_pages': False, 'has_issues': False, 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'disabled': False, 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'stargazers_count': 5795, 'created_at': '2013-07-22T09:07:57Z', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'archived': False, 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'full_name': 'dolphin-emu/dolphin', 'updated_at': '2019-12-05T05:54:39Z', 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'private': False, 'forks_count': 1329, 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'has_projects': False, 'owner': {'type': 'Organization', 'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'html_url': 'https://github.com/dolphin-emu', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'id': 5050316, 'site_admin': False, 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'url': 'https://api.github.com/users/dolphin-emu', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}'}, 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'has_downloads': True, 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'watchers': 5795, 'license': {'name': 'GNU General Public License v2.0', 'node_id': 'MDc6TGljZW5zZTg=', 'spdx_id': 'GPL-2.0', 'key': 'gpl-2.0', 'url': 'https://api.github.com/licenses/gpl-2.0'}, 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'homepage': 'https://dolphin-emu.org/', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'id': 11577304, 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'pushed_at': '2019-12-05T05:19:16Z', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}'}, 'comment': {'id': 561990163, 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8492', 'created_at': '2019-12-05T06:26:36Z', 'node_id': 'MDEyOklzc3VlQ29tbWVudDU2MTk5MDE2Mw==', 'author_association': 'NONE', 'body': 'Hello, this looks great so far! But where can I download it (if it’s already public). And how does it work?', 'updated_at': '2019-12-05T06:26:36Z', 'user': {'type': 'User', 'avatar_url': 'https://avatars2.githubusercontent.com/u/58544833?v=4', 'login': 'SGamer33', 'gists_url': 'https://api.github.com/users/SGamer33/gists{/gist_id}', 'html_url': 'https://github.com/SGamer33', 'events_url': 'https://api.github.com/users/SGamer33/events{/privacy}', 'id': 58544833, 'site_admin': False, 'followers_url': 'https://api.github.com/users/SGamer33/followers', 'subscriptions_url': 'https://api.github.com/users/SGamer33/subscriptions', 'node_id': 'MDQ6VXNlcjU4NTQ0ODMz', 'organizations_url': 'https://api.github.com/users/SGamer33/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/SGamer33/received_events', 'following_url': 'https://api.github.com/users/SGamer33/following{/other_user}', 'repos_url': 'https://api.github.com/users/SGamer33/repos', 'url': 'https://api.github.com/users/SGamer33', 'starred_url': 'https://api.github.com/users/SGamer33/starred{/owner}{/repo}'}, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/561990163', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8492#issuecomment-561990163'}, 'organization': {'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'description': '', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events', 'id': 5050316, 'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'url': 'https://api.github.com/orgs/dolphin-emu'}, 'issue': {'created_at': '2019-11-24T21:15:23Z', 'assignees': [], 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8492/labels{/name}', 'milestone': None, 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'number': 8492, 'updated_at': '2019-12-05T06:26:36Z', 'node_id': 'MDExOlB1bGxSZXF1ZXN0MzQ0OTQ5Mzk4', 'author_association': 'CONTRIBUTOR', 'labels': [], 'state': 'open', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8492', 'user': {'type': 'User', 'avatar_url': 'https://avatars0.githubusercontent.com/u/11504941?v=4', 'login': 'OatmealDome', 'gists_url': 'https://api.github.com/users/OatmealDome/gists{/gist_id}', 'html_url': 'https://github.com/OatmealDome', 'events_url': 'https://api.github.com/users/OatmealDome/events{/privacy}', 'id': 11504941, 'site_admin': False, 'followers_url': 'https://api.github.com/users/OatmealDome/followers', 'subscriptions_url': 'https://api.github.com/users/OatmealDome/subscriptions', 'node_id': 'MDQ6VXNlcjExNTA0OTQx', 'organizations_url': 'https://api.github.com/users/OatmealDome/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/OatmealDome/received_events', 'following_url': 'https://api.github.com/users/OatmealDome/following{/other_user}', 'repos_url': 'https://api.github.com/users/OatmealDome/repos', 'url': 'https://api.github.com/users/OatmealDome', 'starred_url': 'https://api.github.com/users/OatmealDome/starred{/owner}{/repo}'}, 'locked': False, 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8492', 'body': 'This PR adds experimental support for iOS devices with a working JIT. It is by no means complete, and is only intended to initiate a discussion as to whether iOS is a platform that Dolphin should support.\r\n\r\n**This is not ready for general users.**\r\n\r\nFirst off, [here\'s a quick demo video](https://youtu.be/CI4SGePajYo) and some screenshots.\r\n\r\n<img src="https://cdn.oatmealdome.me/screenshots/dolphin-ios/xenoblade.png" width="50%" height="50%">\r\n\r\n<img src="https://cdn.oatmealdome.me/screenshots/dolphin-ios/animal_crossing.png" width="50%" height="50%">\r\n\r\n<img src="https://cdn.oatmealdome.me/screenshots/dolphin-ios/melee.png" width="50%" height="50%">\r\n\r\n<img src="https://cdn.oatmealdome.me/screenshots/dolphin-ios/mkw.png" width="50%" height="50%">\r\n\r\nLet\'s get into the details.\r\n\r\n## Application\r\n\r\nA new Xcode project has been placed in `Source/iOS/DolphiniOS`. The build system for iOS takes inspiration from the Android version of Dolphin.\r\n\r\nXcode has been configured to run some shell scripts on every build. The first one runs `cmake` using an iOS toolchain to create static libraries, which are then linked into the application.  The second shell script copies image assets from the Android port.\r\n\r\nThe ``Sys`` folder is embedded into the bundle.\r\n\r\nA "jni" equivalent can be found in `Source/iOS/Interface`. Its only purpose is to hold the `MainiOS` source file.\r\n\r\n### User interface\r\n\r\nThe UI is written in Objective-C and Swift. It is extremely barebones at the moment - while there is a working touchscreen controller, pretty much everything else needs work.\r\n\r\nThe code is 50/50 Objective-C and Swift, but I believe it would be best to write future UI code in Swift and transition what we can away from Objective-C. (Given the necessity of using C++ to access Dolphin code, some Objective-C++ will likely need to stay if this port is given a green light.) \r\n\r\nAll Dolphin user files are stored in the app container\'s Documents directory. [This folder is then exposed to `Files.app`, allowing users to modify files as they wish](https://cdn.oatmealdome.me/screenshots/dolphin-ios/oMRQ0DA.png).\r\n\r\nA `Software` folder is automatically created in the Documents directory. The UI will automatically scan this folder for software and show found files in a list on startup.\r\n\r\n### Target devices\r\n\r\n* **The device must be jailbroken.**\r\n* Devices with A9, A10, and A11 processors were tested. These were an iPhone 6s, a 6th gen iPad, and an iPhone X.\r\n* A8, A12, and A13 devices were unable to be tested because @Simonx22 and I don\'t own any.\r\n* [A7 and A8 processors have GPUs that don\'t support arrays of textures](https://developer.apple.com/metal/Metal-Feature-Set-Tables.pdf), so the Vulkan backend is not supported.\r\n* A6 processors and below are 32-bit.\r\n\r\nThe minimum supported devices should be ones with an A9 processor.\r\n\r\n### Building\r\n\r\nYou need the following:\r\n\r\n* Mac\r\n* Xcode 11 (older Xcode versions may work, not tested)\r\n* `cmake`\r\n* Jailbroken iOS / iPadOS device running iOS 12 and above\r\n\r\nThen, you can build:\r\n\r\n1. Install AppSync Unified on your device from `cydia.angelxwind.net`.\r\n2. Clone the repo.\r\n3. Open `Source/iOS/DolphiniOS/DolphiniOS.xcodeproj`.\r\n4. Initiate a build in Xcode.\r\n\r\n## Problems\r\n\r\n### Limitations\r\n\r\n* BoundingBox is not supported, since [MoltenVK sets ``fragmentStoresAndAtomics``  to `true` only on macOS](https://github.com/KhronosGroup/MoltenVK/blob/789ef74d11d9ea9ce912f6df3d018e1d194a1fdb/MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm#L1038). However, forcing this feature to be enabled shows that it works fine on iOS (albeit with minor glitches). I\'m not sure what I should be looking for on the Metal feature set table to see if iOS GPU drivers really support this feature.\r\n* Metal does not support geometry shaders or setting line width.\r\n* OpenGLES, like OpenGL on macOS, has been abandoned for a very long time. `EXT_buffer_storage` support is nowhere to be found. As expected, the OpenGL backend is unusable.\r\n\r\n### Known issues\r\n\r\n* `Core::IsCPUThread()` does not work for some reason. The call in `JitArm64::HandleFault()` needs to be commented out when testing for now.\r\n* Controller INIs from the Android version needs to be copied manually. ``GCPadNew.ini`` and `WiimoteNew.ini` go in ``Config`` and  ``WiimoteProfile.ini`` in ``Config/Profiles/Wiimote``.\r\n* To stop emulation, you have to quit the application.\r\n* You have to manually switch the controller type (GameCube controller or Wiimote with Nunchuk) in the source code.\r\n* There is no D-Pad on any controller type.\r\n* There is no build system that generates a ``deb`` for Cydia.\r\n* There are likely code style compliance issues. Swift code is entirely unchecked by lint.\r\n* Many other things.\r\n\r\n### Regarding the jailbroken device requirement\r\n\r\nThe iOS kernel places an artificial restriction on the amount of address space that each process can access, depending on how much RAM the device has. This is the core issue that plagued Dolphin support for a very, *very* long time. Fastmem requires a large amount of virtual memory to play with, which unfortunately is greater than the limit of every publicly released iOS device.\r\n\r\nThankfully, Apple created an entitlement called `dynamic-codesigning` that allows the process to create executable memory. It was added for applications that need JIT, like Safari. An additional perk of `dynamic-codesigning` is that [it also allows the process to access a large amount of address space](https://github.com/apple/darwin-xnu/blob/master/tests/jumbo_va_spaces_28530648.c). However, it cannot be set on third-party apps as it is an Apple-internal entitlement. This is why a jailbroken device is needed.\r\n\r\nThere is a way, however, to run Dolphin under a jailed device. (In fact, I am doing the majority of my testing on a jailed device.) It requires modifying the iOS bootloader and setting the boot argument `arm64_maxoffset`. Because this method is quite complicated, I don\'t think this is a viable option for end-users. It is significantly easier to just require a jailbroken device than to support users who try this method.\r\n\r\n### The future\r\n\r\nAs we all know, Dolphin support for macOS doesn\'t get much love because of a lack of maintainers. While I don\'t plan to abandon this project, I think it would be best to see if any others are willing to contribute. I am just one person, after all.\r\n\r\n## Changes to Dolphin\r\n\r\nThis is a non-exhaustive list.\r\n\r\n* The define ``IPHONEOS`` has been introduced. ``IOS`` is not used to avoid confusion and conflicts with the Wii\'s IOS.\r\n* The iOS cmake toolchain from [here](https://github.com/leetal/ios-cmake) has been added. `CMakeLists` use ``IOS`` because it is set from the toolchain.\r\n* Mach\'s vm functions are used wherever possible ([one](https://github.com/OatmealDome/dolphin/commit/fbffaa4b429af4fc725c7093837aa142f21cc006#diff-1f416de641b3f6132c533a0feb099829), [two](https://github.com/OatmealDome/dolphin/commit/d3e100a0a854becaaf053cb5aeae2de77a961eed)).\r\n* (This only applies to jailed devices.) When attached to a debugger, iOS allows memory to be marked as executable. However, memory cannot be writable and executable at the same time, so code has been introduced into the ARM64 JIT to support W^X exclusivity.\r\n* A new "EAGL" GLInterface was introduced. Also, because iOS doesn\'t create a default framebuffer, [the OpenGL backend calls the EAGL GLInterface to create one](https://github.com/OatmealDome/dolphin/commit/8b9064ececa69ee47e468d242dd7ac270b209f40).\r\n* The iOS MoltenVK dylib has been added to Externals.\r\n* The CoreAudio backend has been restored, because [Cubeb support for iOS is old and broken](https://github.com/kinetiknz/cubeb/issues/394).\r\n* Since `ButtonManager` and `Touchscreen` are useful on iOS too, they have been moved into a new "Touch" folder in InputCommon.\r\n* The required clang-format version has been updated to 9.0. Some Objective-C code was not being formatted correctly on 7.0 for whatever reason.\r\n\r\n## Credits\r\n\r\nThis PR is the culmination of many attempts by several people, including myself. It could not be done without them and support from others.\r\n\r\nPrevious PRs:\r\n\r\n* #3881\r\n* #3885\r\n* #3941\r\n\r\nThanks to:\r\n\r\n* @Simonx22 for testing\r\n* leetal\'s [iOS toolchain for cmake](https://github.com/leetal/ios-cmake)\r\n* ppsspp for mach vm functions and W^X exclusivity example code \r\n* Apple for releasing their ARM XNU sources', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8492/events', 'id': 527757689, 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8492/comments', 'title': '[RFC / WIP] iOS support with working JIT', 'comments': 30, 'closed_at': None, 'pull_request': {'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/8492.patch', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/8492.diff', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8492', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8492'}, 'assignee': None}, 'sender': {'type': 'User', 'avatar_url': 'https://avatars2.githubusercontent.com/u/58544833?v=4', 'login': 'SGamer33', 'gists_url': 'https://api.github.com/users/SGamer33/gists{/gist_id}', 'html_url': 'https://github.com/SGamer33', 'events_url': 'https://api.github.com/users/SGamer33/events{/privacy}', 'id': 58544833, 'site_admin': False, 'followers_url': 'https://api.github.com/users/SGamer33/followers', 'subscriptions_url': 'https://api.github.com/users/SGamer33/subscriptions', 'node_id': 'MDQ6VXNlcjU4NTQ0ODMz', 'organizations_url': 'https://api.github.com/users/SGamer33/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/SGamer33/received_events', 'following_url': 'https://api.github.com/users/SGamer33/following{/other_user}', 'repos_url': 'https://api.github.com/users/SGamer33/repos', 'url': 'https://api.github.com/users/SGamer33', 'starred_url': 'https://api.github.com/users/SGamer33/starred{/owner}{/repo}'}}, 'safe_author': False, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'body': 'Hello, this looks great so far! But where can I download it (if it’s already public). And how does it work?', 'action': 'created', 'title': '[RFC / WIP] iOS support with working JIT', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8492#issuecomment-561990163', 'author': 'SGamer33'}
2019-12-04T21:51:56.898067	{'type': 'gh_issue_comment', 'id': 8451, 'raw': {'action': 'created', 'repository': {'fork': False, 'has_wiki': True, 'mirror_url': None, 'open_issues_count': 165, 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'forks': 1328, 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'html_url': 'https://github.com/dolphin-emu/dolphin', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'open_issues': 165, 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'language': 'C++', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'default_branch': 'master', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'watchers_count': 5793, 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'name': 'dolphin', 'size': 386665, 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'has_pages': False, 'has_issues': False, 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'disabled': False, 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'stargazers_count': 5793, 'created_at': '2013-07-22T09:07:57Z', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'archived': False, 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'full_name': 'dolphin-emu/dolphin', 'updated_at': '2019-12-04T04:19:03Z', 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'private': False, 'forks_count': 1328, 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'has_projects': False, 'owner': {'type': 'Organization', 'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'html_url': 'https://github.com/dolphin-emu', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'id': 5050316, 'site_admin': False, 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'url': 'https://api.github.com/users/dolphin-emu', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}'}, 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'has_downloads': True, 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'watchers': 5793, 'license': {'name': 'GNU General Public License v2.0', 'node_id': 'MDc6TGljZW5zZTg=', 'spdx_id': 'GPL-2.0', 'key': 'gpl-2.0', 'url': 'https://api.github.com/licenses/gpl-2.0'}, 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'homepage': 'https://dolphin-emu.org/', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'id': 11577304, 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'pushed_at': '2019-12-04T21:07:45Z', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}'}, 'comment': {'id': 561855633, 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8451', 'created_at': '2019-12-04T21:51:55Z', 'node_id': 'MDEyOklzc3VlQ29tbWVudDU2MTg1NTYzMw==', 'author_association': 'CONTRIBUTOR', 'body': "> Ok, I'll test this a bit more tomorrow and report back...\r\n\r\nJust tested this PR with a DualShock 4 set to the Wiimote and a separate DualShock 3 set to the Nunchuk and it worked fine on the games I tried.", 'updated_at': '2019-12-04T21:51:55Z', 'user': {'type': 'User', 'avatar_url': 'https://avatars0.githubusercontent.com/u/8005966?v=4', 'login': 'mbc07', 'gists_url': 'https://api.github.com/users/mbc07/gists{/gist_id}', 'html_url': 'https://github.com/mbc07', 'events_url': 'https://api.github.com/users/mbc07/events{/privacy}', 'id': 8005966, 'site_admin': False, 'followers_url': 'https://api.github.com/users/mbc07/followers', 'subscriptions_url': 'https://api.github.com/users/mbc07/subscriptions', 'node_id': 'MDQ6VXNlcjgwMDU5NjY=', 'organizations_url': 'https://api.github.com/users/mbc07/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/mbc07/received_events', 'following_url': 'https://api.github.com/users/mbc07/following{/other_user}', 'repos_url': 'https://api.github.com/users/mbc07/repos', 'url': 'https://api.github.com/users/mbc07', 'starred_url': 'https://api.github.com/users/mbc07/starred{/owner}{/repo}'}, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/561855633', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8451#issuecomment-561855633'}, 'organization': {'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'description': '', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events', 'id': 5050316, 'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'url': 'https://api.github.com/orgs/dolphin-emu'}, 'issue': {'created_at': '2019-11-04T03:53:51Z', 'assignees': [], 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8451/labels{/name}', 'milestone': None, 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'number': 8451, 'updated_at': '2019-12-04T21:51:56Z', 'node_id': 'MDExOlB1bGxSZXF1ZXN0MzM2MTE0MDIz', 'author_association': 'CONTRIBUTOR', 'labels': [], 'state': 'open', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8451', 'user': {'type': 'User', 'avatar_url': 'https://avatars1.githubusercontent.com/u/47765059?v=4', 'login': 'rlnilsen', 'gists_url': 'https://api.github.com/users/rlnilsen/gists{/gist_id}', 'html_url': 'https://github.com/rlnilsen', 'events_url': 'https://api.github.com/users/rlnilsen/events{/privacy}', 'id': 47765059, 'site_admin': False, 'followers_url': 'https://api.github.com/users/rlnilsen/followers', 'subscriptions_url': 'https://api.github.com/users/rlnilsen/subscriptions', 'node_id': 'MDQ6VXNlcjQ3NzY1MDU5', 'organizations_url': 'https://api.github.com/users/rlnilsen/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/rlnilsen/received_events', 'following_url': 'https://api.github.com/users/rlnilsen/following{/other_user}', 'repos_url': 'https://api.github.com/users/rlnilsen/repos', 'url': 'https://api.github.com/users/rlnilsen', 'starred_url': 'https://api.github.com/users/rlnilsen/starred{/owner}{/repo}'}, 'locked': False, 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8451', 'body': "After discussions we ended up with the following UI layout. When (and only when) Nunchuk is selected as extension, two extra tabs appear: 'Extension Motion Simulation' and 'Extension Motion Input'.\r\n\r\n![2019-11-06 18_43_04-vs2017 (1) - Remote Viewer](https://user-images.githubusercontent.com/47765059/68323410-aa10b380-00c5-11ea-8e6a-a979458a6d73.png)\r\n![2019-11-06 18_43_27-vs2017 (1) - Remote Viewer](https://user-images.githubusercontent.com/47765059/68323417-ac730d80-00c5-11ea-8693-be56f26c9bfe.png)\r\n![2019-11-06 18_55_52-vs2017 (1) - Remote Viewer](https://user-images.githubusercontent.com/47765059/68324178-25bf3000-00c7-11ea-9757-612f3344ffa3.png)\r\n\r\n#### To preserve the context of the discussion that took place, the original version of this post is preserved below\r\n\r\nThe UI layout was slightly adjusted to allow fitting five control groups on a 1024 pixel wide screen.\r\nAdded the same warning text and `Alternate Input Sources` button as on the `Motion Input` tab.\r\n\r\n![2019-11-04 18_48_38-vs2017 (1) - Remote Viewer](https://user-images.githubusercontent.com/47765059/68145593-72bfcc80-ff36-11e9-843a-e3bbb43a1f97.png)\r\n", 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8451/events', 'id': 516948473, 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8451/comments', 'title': 'Add motion input support to nunchuk', 'comments': 31, 'closed_at': None, 'pull_request': {'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/8451.patch', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/8451.diff', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8451', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8451'}, 'assignee': None}, 'sender': {'type': 'User', 'avatar_url': 'https://avatars0.githubusercontent.com/u/8005966?v=4', 'login': 'mbc07', 'gists_url': 'https://api.github.com/users/mbc07/gists{/gist_id}', 'html_url': 'https://github.com/mbc07', 'events_url': 'https://api.github.com/users/mbc07/events{/privacy}', 'id': 8005966, 'site_admin': False, 'followers_url': 'https://api.github.com/users/mbc07/followers', 'subscriptions_url': 'https://api.github.com/users/mbc07/subscriptions', 'node_id': 'MDQ6VXNlcjgwMDU5NjY=', 'organizations_url': 'https://api.github.com/users/mbc07/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/mbc07/received_events', 'following_url': 'https://api.github.com/users/mbc07/following{/other_user}', 'repos_url': 'https://api.github.com/users/mbc07/repos', 'url': 'https://api.github.com/users/mbc07', 'starred_url': 'https://api.github.com/users/mbc07/starred{/owner}{/repo}'}}, 'safe_author': False, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'body': "> Ok, I'll test this a bit more tomorrow and report back...\r\n\r\nJust tested this PR with a DualShock 4 set to the Wiimote and a separate DualShock 3 set to the Nunchuk and it worked fine on the games I tried.", 'action': 'created', 'title': 'Add motion input support to nunchuk', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8451#issuecomment-561855633', 'author': 'mbc07'}
2019-12-04T19:12:53.795619	{'type': 'gh_issue_comment', 'id': 8394, 'raw': {'action': 'created', 'repository': {'fork': False, 'has_wiki': True, 'mirror_url': None, 'open_issues_count': 165, 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'forks': 1328, 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'html_url': 'https://github.com/dolphin-emu/dolphin', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'open_issues': 165, 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'language': 'C++', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'default_branch': 'master', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'watchers_count': 5793, 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'name': 'dolphin', 'size': 386665, 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'has_pages': False, 'has_issues': False, 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'disabled': False, 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'stargazers_count': 5793, 'created_at': '2013-07-22T09:07:57Z', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'archived': False, 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'full_name': 'dolphin-emu/dolphin', 'updated_at': '2019-12-04T04:19:03Z', 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'private': False, 'forks_count': 1328, 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'has_projects': False, 'owner': {'type': 'Organization', 'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'html_url': 'https://github.com/dolphin-emu', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'id': 5050316, 'site_admin': False, 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'url': 'https://api.github.com/users/dolphin-emu', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}'}, 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'has_downloads': True, 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'watchers': 5793, 'license': {'name': 'GNU General Public License v2.0', 'node_id': 'MDc6TGljZW5zZTg=', 'spdx_id': 'GPL-2.0', 'key': 'gpl-2.0', 'url': 'https://api.github.com/licenses/gpl-2.0'}, 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'homepage': 'https://dolphin-emu.org/', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'id': 11577304, 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'pushed_at': '2019-12-04T18:52:06Z', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}'}, 'comment': {'id': 561795781, 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8394', 'created_at': '2019-12-04T19:12:52Z', 'node_id': 'MDEyOklzc3VlQ29tbWVudDU2MTc5NTc4MQ==', 'author_association': 'CONTRIBUTOR', 'body': 'Should be fixed now.', 'updated_at': '2019-12-04T19:12:52Z', 'user': {'type': 'User', 'avatar_url': 'https://avatars2.githubusercontent.com/u/8334194?v=4', 'login': 'Pokechu22', 'gists_url': 'https://api.github.com/users/Pokechu22/gists{/gist_id}', 'html_url': 'https://github.com/Pokechu22', 'events_url': 'https://api.github.com/users/Pokechu22/events{/privacy}', 'id': 8334194, 'site_admin': False, 'followers_url': 'https://api.github.com/users/Pokechu22/followers', 'subscriptions_url': 'https://api.github.com/users/Pokechu22/subscriptions', 'node_id': 'MDQ6VXNlcjgzMzQxOTQ=', 'organizations_url': 'https://api.github.com/users/Pokechu22/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/Pokechu22/received_events', 'following_url': 'https://api.github.com/users/Pokechu22/following{/other_user}', 'repos_url': 'https://api.github.com/users/Pokechu22/repos', 'url': 'https://api.github.com/users/Pokechu22', 'starred_url': 'https://api.github.com/users/Pokechu22/starred{/owner}{/repo}'}, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/561795781', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8394#issuecomment-561795781'}, 'organization': {'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'description': '', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events', 'id': 5050316, 'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'url': 'https://api.github.com/orgs/dolphin-emu'}, 'issue': {'created_at': '2019-10-08T02:48:51Z', 'assignees': [], 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8394/labels{/name}', 'milestone': None, 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'number': 8394, 'updated_at': '2019-12-04T19:12:52Z', 'node_id': 'MDExOlB1bGxSZXF1ZXN0MzI1NTc1MzY1', 'author_association': 'CONTRIBUTOR', 'labels': [], 'state': 'open', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8394', 'user': {'type': 'User', 'avatar_url': 'https://avatars2.githubusercontent.com/u/8334194?v=4', 'login': 'Pokechu22', 'gists_url': 'https://api.github.com/users/Pokechu22/gists{/gist_id}', 'html_url': 'https://github.com/Pokechu22', 'events_url': 'https://api.github.com/users/Pokechu22/events{/privacy}', 'id': 8334194, 'site_admin': False, 'followers_url': 'https://api.github.com/users/Pokechu22/followers', 'subscriptions_url': 'https://api.github.com/users/Pokechu22/subscriptions', 'node_id': 'MDQ6VXNlcjgzMzQxOTQ=', 'organizations_url': 'https://api.github.com/users/Pokechu22/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/Pokechu22/received_events', 'following_url': 'https://api.github.com/users/Pokechu22/following{/other_user}', 'repos_url': 'https://api.github.com/users/Pokechu22/repos', 'url': 'https://api.github.com/users/Pokechu22', 'starred_url': 'https://api.github.com/users/Pokechu22/starred{/owner}{/repo}'}, 'locked': False, 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8394', 'body': "An early draft of my improved DI work.  I still need to do some testing (and write automated hardware tests), but there [is documentation](https://wiibrew.org/wiki//dev/di) of what I've figured out so far.\r\n\r\nThe GPIO change fixes [bug 11818](https://bugs.dolphin-emu.org/issues/11818) (not DI related) and also implements GPIO-based ejection (which is used by the system menu when booting from the eject button in conjunction with the RTC flag; I don't think any games use it though.)\r\n\r\nThe RTC change should fix [bug 8115](https://bugs.dolphin-emu.org/issues/8115) (including the case when a channel other than the system menu is running which I reported as [bug 11803](https://bugs.dolphin-emu.org/issues/8115)).  Note that the trade-off is that currently, it *always* acts like the disc has changed and *never* uses the cache when first loading the system menu, though it should still use it when exiting from a game.  To be more accurate about it dolphin would need to track the current disc in the configuration file, probably.\r\n\r\nMost of the other changes are related to errors reported by the disc drive, or various commands that were not implemented before.  I've made some attempts to organize these nicely into different commits, but it's still not the clearest yet.\r\n\r\nI have only tested this with Wii games.  Testing it with gamecube games would be appreciated (in particular, I suspect that the stricter DTK changes will cause issues when starting from emulated BS2, but I haven't tested it).\r\n\r\nAlthough this is a draft, I would like feedback on the implementation, since some of the code is rather hacky and I'm not completely sure how to do it better.", 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8394/events', 'id': 503792795, 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8394/comments', 'title': 'Various DI improvements', 'comments': 10, 'closed_at': None, 'pull_request': {'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/8394.patch', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/8394.diff', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8394', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8394'}, 'assignee': None}, 'sender': {'type': 'User', 'avatar_url': 'https://avatars2.githubusercontent.com/u/8334194?v=4', 'login': 'Pokechu22', 'gists_url': 'https://api.github.com/users/Pokechu22/gists{/gist_id}', 'html_url': 'https://github.com/Pokechu22', 'events_url': 'https://api.github.com/users/Pokechu22/events{/privacy}', 'id': 8334194, 'site_admin': False, 'followers_url': 'https://api.github.com/users/Pokechu22/followers', 'subscriptions_url': 'https://api.github.com/users/Pokechu22/subscriptions', 'node_id': 'MDQ6VXNlcjgzMzQxOTQ=', 'organizations_url': 'https://api.github.com/users/Pokechu22/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/Pokechu22/received_events', 'following_url': 'https://api.github.com/users/Pokechu22/following{/other_user}', 'repos_url': 'https://api.github.com/users/Pokechu22/repos', 'url': 'https://api.github.com/users/Pokechu22', 'starred_url': 'https://api.github.com/users/Pokechu22/starred{/owner}{/repo}'}}, 'safe_author': True, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'body': 'Should be fixed now.', 'action': 'created', 'title': 'Various DI improvements', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8394#issuecomment-561795781', 'author': 'Pokechu22'}
2019-12-04T05:17:48.209159	{'type': 'gh_issue_comment', 'id': 8451, 'raw': {'action': 'created', 'repository': {'fork': False, 'has_wiki': True, 'mirror_url': None, 'open_issues_count': 165, 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'forks': 1328, 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'html_url': 'https://github.com/dolphin-emu/dolphin', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'open_issues': 165, 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'language': 'C++', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'default_branch': 'master', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'watchers_count': 5793, 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'name': 'dolphin', 'size': 386665, 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'has_pages': False, 'has_issues': False, 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'disabled': False, 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'stargazers_count': 5793, 'created_at': '2013-07-22T09:07:57Z', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'archived': False, 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'full_name': 'dolphin-emu/dolphin', 'updated_at': '2019-12-04T04:19:03Z', 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'private': False, 'forks_count': 1328, 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'has_projects': False, 'owner': {'type': 'Organization', 'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'html_url': 'https://github.com/dolphin-emu', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'id': 5050316, 'site_admin': False, 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'url': 'https://api.github.com/users/dolphin-emu', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}'}, 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'has_downloads': True, 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'watchers': 5793, 'license': {'name': 'GNU General Public License v2.0', 'node_id': 'MDc6TGljZW5zZTg=', 'spdx_id': 'GPL-2.0', 'key': 'gpl-2.0', 'url': 'https://api.github.com/licenses/gpl-2.0'}, 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'homepage': 'https://dolphin-emu.org/', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'id': 11577304, 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'pushed_at': '2019-12-04T05:16:49Z', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}'}, 'comment': {'id': 561481214, 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8451', 'created_at': '2019-12-04T05:17:47Z', 'node_id': 'MDEyOklzc3VlQ29tbWVudDU2MTQ4MTIxNA==', 'author_association': 'CONTRIBUTOR', 'body': "Ok, I'll test this a bit more tomorrow and report back...", 'updated_at': '2019-12-04T05:17:47Z', 'user': {'type': 'User', 'avatar_url': 'https://avatars0.githubusercontent.com/u/8005966?v=4', 'login': 'mbc07', 'gists_url': 'https://api.github.com/users/mbc07/gists{/gist_id}', 'html_url': 'https://github.com/mbc07', 'events_url': 'https://api.github.com/users/mbc07/events{/privacy}', 'id': 8005966, 'site_admin': False, 'followers_url': 'https://api.github.com/users/mbc07/followers', 'subscriptions_url': 'https://api.github.com/users/mbc07/subscriptions', 'node_id': 'MDQ6VXNlcjgwMDU5NjY=', 'organizations_url': 'https://api.github.com/users/mbc07/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/mbc07/received_events', 'following_url': 'https://api.github.com/users/mbc07/following{/other_user}', 'repos_url': 'https://api.github.com/users/mbc07/repos', 'url': 'https://api.github.com/users/mbc07', 'starred_url': 'https://api.github.com/users/mbc07/starred{/owner}{/repo}'}, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/561481214', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8451#issuecomment-561481214'}, 'organization': {'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'description': '', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events', 'id': 5050316, 'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'url': 'https://api.github.com/orgs/dolphin-emu'}, 'issue': {'created_at': '2019-11-04T03:53:51Z', 'assignees': [], 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8451/labels{/name}', 'milestone': None, 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'number': 8451, 'updated_at': '2019-12-04T05:17:47Z', 'node_id': 'MDExOlB1bGxSZXF1ZXN0MzM2MTE0MDIz', 'author_association': 'CONTRIBUTOR', 'labels': [], 'state': 'open', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8451', 'user': {'type': 'User', 'avatar_url': 'https://avatars1.githubusercontent.com/u/47765059?v=4', 'login': 'rlnilsen', 'gists_url': 'https://api.github.com/users/rlnilsen/gists{/gist_id}', 'html_url': 'https://github.com/rlnilsen', 'events_url': 'https://api.github.com/users/rlnilsen/events{/privacy}', 'id': 47765059, 'site_admin': False, 'followers_url': 'https://api.github.com/users/rlnilsen/followers', 'subscriptions_url': 'https://api.github.com/users/rlnilsen/subscriptions', 'node_id': 'MDQ6VXNlcjQ3NzY1MDU5', 'organizations_url': 'https://api.github.com/users/rlnilsen/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/rlnilsen/received_events', 'following_url': 'https://api.github.com/users/rlnilsen/following{/other_user}', 'repos_url': 'https://api.github.com/users/rlnilsen/repos', 'url': 'https://api.github.com/users/rlnilsen', 'starred_url': 'https://api.github.com/users/rlnilsen/starred{/owner}{/repo}'}, 'locked': False, 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8451', 'body': "After discussions we ended up with the following UI layout. When (and only when) Nunchuk is selected as extension, two extra tabs appear: 'Extension Motion Simulation' and 'Extension Motion Input'.\r\n\r\n![2019-11-06 18_43_04-vs2017 (1) - Remote Viewer](https://user-images.githubusercontent.com/47765059/68323410-aa10b380-00c5-11ea-8e6a-a979458a6d73.png)\r\n![2019-11-06 18_43_27-vs2017 (1) - Remote Viewer](https://user-images.githubusercontent.com/47765059/68323417-ac730d80-00c5-11ea-8693-be56f26c9bfe.png)\r\n![2019-11-06 18_55_52-vs2017 (1) - Remote Viewer](https://user-images.githubusercontent.com/47765059/68324178-25bf3000-00c7-11ea-9757-612f3344ffa3.png)\r\n\r\n#### To preserve the context of the discussion that took place, the original version of this post is preserved below\r\n\r\nThe UI layout was slightly adjusted to allow fitting five control groups on a 1024 pixel wide screen.\r\nAdded the same warning text and `Alternate Input Sources` button as on the `Motion Input` tab.\r\n\r\n![2019-11-04 18_48_38-vs2017 (1) - Remote Viewer](https://user-images.githubusercontent.com/47765059/68145593-72bfcc80-ff36-11e9-843a-e3bbb43a1f97.png)\r\n", 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8451/events', 'id': 516948473, 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8451/comments', 'title': 'Add motion input support to nunchuk', 'comments': 30, 'closed_at': None, 'pull_request': {'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/8451.patch', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/8451.diff', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8451', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8451'}, 'assignee': None}, 'sender': {'type': 'User', 'avatar_url': 'https://avatars0.githubusercontent.com/u/8005966?v=4', 'login': 'mbc07', 'gists_url': 'https://api.github.com/users/mbc07/gists{/gist_id}', 'html_url': 'https://github.com/mbc07', 'events_url': 'https://api.github.com/users/mbc07/events{/privacy}', 'id': 8005966, 'site_admin': False, 'followers_url': 'https://api.github.com/users/mbc07/followers', 'subscriptions_url': 'https://api.github.com/users/mbc07/subscriptions', 'node_id': 'MDQ6VXNlcjgwMDU5NjY=', 'organizations_url': 'https://api.github.com/users/mbc07/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/mbc07/received_events', 'following_url': 'https://api.github.com/users/mbc07/following{/other_user}', 'repos_url': 'https://api.github.com/users/mbc07/repos', 'url': 'https://api.github.com/users/mbc07', 'starred_url': 'https://api.github.com/users/mbc07/starred{/owner}{/repo}'}}, 'safe_author': False, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'body': "Ok, I'll test this a bit more tomorrow and report back...", 'action': 'created', 'title': 'Add motion input support to nunchuk', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8451#issuecomment-561481214', 'author': 'mbc07'}
2019-12-04T05:11:03.227927	{'type': 'gh_issue_comment', 'id': 8451, 'raw': {'action': 'created', 'repository': {'fork': False, 'has_wiki': True, 'mirror_url': None, 'open_issues_count': 165, 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'forks': 1328, 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'html_url': 'https://github.com/dolphin-emu/dolphin', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'open_issues': 165, 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'language': 'C++', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'default_branch': 'master', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'watchers_count': 5793, 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'name': 'dolphin', 'size': 386665, 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'has_pages': False, 'has_issues': False, 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'disabled': False, 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'stargazers_count': 5793, 'created_at': '2013-07-22T09:07:57Z', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'archived': False, 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'full_name': 'dolphin-emu/dolphin', 'updated_at': '2019-12-04T04:19:03Z', 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'private': False, 'forks_count': 1328, 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'has_projects': False, 'owner': {'type': 'Organization', 'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'html_url': 'https://github.com/dolphin-emu', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'id': 5050316, 'site_admin': False, 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'url': 'https://api.github.com/users/dolphin-emu', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}'}, 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'has_downloads': True, 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'watchers': 5793, 'license': {'name': 'GNU General Public License v2.0', 'node_id': 'MDc6TGljZW5zZTg=', 'spdx_id': 'GPL-2.0', 'key': 'gpl-2.0', 'url': 'https://api.github.com/licenses/gpl-2.0'}, 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'homepage': 'https://dolphin-emu.org/', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'id': 11577304, 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'pushed_at': '2019-12-04T01:36:53Z', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}'}, 'comment': {'id': 561479677, 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8451', 'created_at': '2019-12-04T05:11:02Z', 'node_id': 'MDEyOklzc3VlQ29tbWVudDU2MTQ3OTY3Nw==', 'author_association': 'CONTRIBUTOR', 'body': "I'm fine with merging it as long as it's been tested.  I don't have a second motion controller to test it with.", 'updated_at': '2019-12-04T05:11:02Z', 'user': {'type': 'User', 'avatar_url': 'https://avatars2.githubusercontent.com/u/6598209?v=4', 'login': 'JMC47', 'gists_url': 'https://api.github.com/users/JMC47/gists{/gist_id}', 'html_url': 'https://github.com/JMC47', 'events_url': 'https://api.github.com/users/JMC47/events{/privacy}', 'id': 6598209, 'site_admin': False, 'followers_url': 'https://api.github.com/users/JMC47/followers', 'subscriptions_url': 'https://api.github.com/users/JMC47/subscriptions', 'node_id': 'MDQ6VXNlcjY1OTgyMDk=', 'organizations_url': 'https://api.github.com/users/JMC47/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/JMC47/received_events', 'following_url': 'https://api.github.com/users/JMC47/following{/other_user}', 'repos_url': 'https://api.github.com/users/JMC47/repos', 'url': 'https://api.github.com/users/JMC47', 'starred_url': 'https://api.github.com/users/JMC47/starred{/owner}{/repo}'}, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/561479677', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8451#issuecomment-561479677'}, 'organization': {'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'description': '', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events', 'id': 5050316, 'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'url': 'https://api.github.com/orgs/dolphin-emu'}, 'issue': {'created_at': '2019-11-04T03:53:51Z', 'assignees': [], 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8451/labels{/name}', 'milestone': None, 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'number': 8451, 'updated_at': '2019-12-04T05:11:02Z', 'node_id': 'MDExOlB1bGxSZXF1ZXN0MzM2MTE0MDIz', 'author_association': 'CONTRIBUTOR', 'labels': [], 'state': 'open', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8451', 'user': {'type': 'User', 'avatar_url': 'https://avatars1.githubusercontent.com/u/47765059?v=4', 'login': 'rlnilsen', 'gists_url': 'https://api.github.com/users/rlnilsen/gists{/gist_id}', 'html_url': 'https://github.com/rlnilsen', 'events_url': 'https://api.github.com/users/rlnilsen/events{/privacy}', 'id': 47765059, 'site_admin': False, 'followers_url': 'https://api.github.com/users/rlnilsen/followers', 'subscriptions_url': 'https://api.github.com/users/rlnilsen/subscriptions', 'node_id': 'MDQ6VXNlcjQ3NzY1MDU5', 'organizations_url': 'https://api.github.com/users/rlnilsen/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/rlnilsen/received_events', 'following_url': 'https://api.github.com/users/rlnilsen/following{/other_user}', 'repos_url': 'https://api.github.com/users/rlnilsen/repos', 'url': 'https://api.github.com/users/rlnilsen', 'starred_url': 'https://api.github.com/users/rlnilsen/starred{/owner}{/repo}'}, 'locked': False, 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8451', 'body': "After discussions we ended up with the following UI layout. When (and only when) Nunchuk is selected as extension, two extra tabs appear: 'Extension Motion Simulation' and 'Extension Motion Input'.\r\n\r\n![2019-11-06 18_43_04-vs2017 (1) - Remote Viewer](https://user-images.githubusercontent.com/47765059/68323410-aa10b380-00c5-11ea-8e6a-a979458a6d73.png)\r\n![2019-11-06 18_43_27-vs2017 (1) - Remote Viewer](https://user-images.githubusercontent.com/47765059/68323417-ac730d80-00c5-11ea-8693-be56f26c9bfe.png)\r\n![2019-11-06 18_55_52-vs2017 (1) - Remote Viewer](https://user-images.githubusercontent.com/47765059/68324178-25bf3000-00c7-11ea-9757-612f3344ffa3.png)\r\n\r\n#### To preserve the context of the discussion that took place, the original version of this post is preserved below\r\n\r\nThe UI layout was slightly adjusted to allow fitting five control groups on a 1024 pixel wide screen.\r\nAdded the same warning text and `Alternate Input Sources` button as on the `Motion Input` tab.\r\n\r\n![2019-11-04 18_48_38-vs2017 (1) - Remote Viewer](https://user-images.githubusercontent.com/47765059/68145593-72bfcc80-ff36-11e9-843a-e3bbb43a1f97.png)\r\n", 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8451/events', 'id': 516948473, 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8451/comments', 'title': 'Add motion input support to nunchuk', 'comments': 29, 'closed_at': None, 'pull_request': {'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/8451.patch', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/8451.diff', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8451', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8451'}, 'assignee': None}, 'sender': {'type': 'User', 'avatar_url': 'https://avatars2.githubusercontent.com/u/6598209?v=4', 'login': 'JMC47', 'gists_url': 'https://api.github.com/users/JMC47/gists{/gist_id}', 'html_url': 'https://github.com/JMC47', 'events_url': 'https://api.github.com/users/JMC47/events{/privacy}', 'id': 6598209, 'site_admin': False, 'followers_url': 'https://api.github.com/users/JMC47/followers', 'subscriptions_url': 'https://api.github.com/users/JMC47/subscriptions', 'node_id': 'MDQ6VXNlcjY1OTgyMDk=', 'organizations_url': 'https://api.github.com/users/JMC47/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/JMC47/received_events', 'following_url': 'https://api.github.com/users/JMC47/following{/other_user}', 'repos_url': 'https://api.github.com/users/JMC47/repos', 'url': 'https://api.github.com/users/JMC47', 'starred_url': 'https://api.github.com/users/JMC47/starred{/owner}{/repo}'}}, 'safe_author': True, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'body': "I'm fine with merging it as long as it's been tested.  I don't have a second motion controller to test it with.", 'action': 'created', 'title': 'Add motion input support to nunchuk', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8451#issuecomment-561479677', 'author': 'JMC47'}
2019-12-04T04:34:06.929089	{'type': 'gh_issue_comment', 'id': 8451, 'raw': {'action': 'created', 'repository': {'fork': False, 'has_wiki': True, 'mirror_url': None, 'open_issues_count': 165, 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'forks': 1328, 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'html_url': 'https://github.com/dolphin-emu/dolphin', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'open_issues': 165, 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'language': 'C++', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'default_branch': 'master', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'watchers_count': 5793, 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'name': 'dolphin', 'size': 386665, 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'has_pages': False, 'has_issues': False, 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'disabled': False, 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'stargazers_count': 5793, 'created_at': '2013-07-22T09:07:57Z', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'archived': False, 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'full_name': 'dolphin-emu/dolphin', 'updated_at': '2019-12-04T04:19:03Z', 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'private': False, 'forks_count': 1328, 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'has_projects': False, 'owner': {'type': 'Organization', 'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'html_url': 'https://github.com/dolphin-emu', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'id': 5050316, 'site_admin': False, 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'url': 'https://api.github.com/users/dolphin-emu', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}'}, 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'has_downloads': True, 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'watchers': 5793, 'license': {'name': 'GNU General Public License v2.0', 'node_id': 'MDc6TGljZW5zZTg=', 'spdx_id': 'GPL-2.0', 'key': 'gpl-2.0', 'url': 'https://api.github.com/licenses/gpl-2.0'}, 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'homepage': 'https://dolphin-emu.org/', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'id': 11577304, 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'pushed_at': '2019-12-04T01:36:53Z', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}'}, 'comment': {'id': 561472516, 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8451', 'created_at': '2019-12-04T04:34:05Z', 'node_id': 'MDEyOklzc3VlQ29tbWVudDU2MTQ3MjUxNg==', 'author_association': 'CONTRIBUTOR', 'body': 'Is there anything else holding this PR back? Emulated motion controls mapping would be finally feature complete on all platforms with the merge of this and #8473 PRs...', 'updated_at': '2019-12-04T04:34:05Z', 'user': {'type': 'User', 'avatar_url': 'https://avatars0.githubusercontent.com/u/8005966?v=4', 'login': 'mbc07', 'gists_url': 'https://api.github.com/users/mbc07/gists{/gist_id}', 'html_url': 'https://github.com/mbc07', 'events_url': 'https://api.github.com/users/mbc07/events{/privacy}', 'id': 8005966, 'site_admin': False, 'followers_url': 'https://api.github.com/users/mbc07/followers', 'subscriptions_url': 'https://api.github.com/users/mbc07/subscriptions', 'node_id': 'MDQ6VXNlcjgwMDU5NjY=', 'organizations_url': 'https://api.github.com/users/mbc07/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/mbc07/received_events', 'following_url': 'https://api.github.com/users/mbc07/following{/other_user}', 'repos_url': 'https://api.github.com/users/mbc07/repos', 'url': 'https://api.github.com/users/mbc07', 'starred_url': 'https://api.github.com/users/mbc07/starred{/owner}{/repo}'}, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/561472516', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8451#issuecomment-561472516'}, 'organization': {'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'description': '', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events', 'id': 5050316, 'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'url': 'https://api.github.com/orgs/dolphin-emu'}, 'issue': {'created_at': '2019-11-04T03:53:51Z', 'assignees': [], 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8451/labels{/name}', 'milestone': None, 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'number': 8451, 'updated_at': '2019-12-04T04:34:06Z', 'node_id': 'MDExOlB1bGxSZXF1ZXN0MzM2MTE0MDIz', 'author_association': 'CONTRIBUTOR', 'labels': [], 'state': 'open', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8451', 'user': {'type': 'User', 'avatar_url': 'https://avatars1.githubusercontent.com/u/47765059?v=4', 'login': 'rlnilsen', 'gists_url': 'https://api.github.com/users/rlnilsen/gists{/gist_id}', 'html_url': 'https://github.com/rlnilsen', 'events_url': 'https://api.github.com/users/rlnilsen/events{/privacy}', 'id': 47765059, 'site_admin': False, 'followers_url': 'https://api.github.com/users/rlnilsen/followers', 'subscriptions_url': 'https://api.github.com/users/rlnilsen/subscriptions', 'node_id': 'MDQ6VXNlcjQ3NzY1MDU5', 'organizations_url': 'https://api.github.com/users/rlnilsen/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/rlnilsen/received_events', 'following_url': 'https://api.github.com/users/rlnilsen/following{/other_user}', 'repos_url': 'https://api.github.com/users/rlnilsen/repos', 'url': 'https://api.github.com/users/rlnilsen', 'starred_url': 'https://api.github.com/users/rlnilsen/starred{/owner}{/repo}'}, 'locked': False, 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8451', 'body': "After discussions we ended up with the following UI layout. When (and only when) Nunchuk is selected as extension, two extra tabs appear: 'Extension Motion Simulation' and 'Extension Motion Input'.\r\n\r\n![2019-11-06 18_43_04-vs2017 (1) - Remote Viewer](https://user-images.githubusercontent.com/47765059/68323410-aa10b380-00c5-11ea-8e6a-a979458a6d73.png)\r\n![2019-11-06 18_43_27-vs2017 (1) - Remote Viewer](https://user-images.githubusercontent.com/47765059/68323417-ac730d80-00c5-11ea-8693-be56f26c9bfe.png)\r\n![2019-11-06 18_55_52-vs2017 (1) - Remote Viewer](https://user-images.githubusercontent.com/47765059/68324178-25bf3000-00c7-11ea-9757-612f3344ffa3.png)\r\n\r\n#### To preserve the context of the discussion that took place, the original version of this post is preserved below\r\n\r\nThe UI layout was slightly adjusted to allow fitting five control groups on a 1024 pixel wide screen.\r\nAdded the same warning text and `Alternate Input Sources` button as on the `Motion Input` tab.\r\n\r\n![2019-11-04 18_48_38-vs2017 (1) - Remote Viewer](https://user-images.githubusercontent.com/47765059/68145593-72bfcc80-ff36-11e9-843a-e3bbb43a1f97.png)\r\n", 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8451/events', 'id': 516948473, 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8451/comments', 'title': 'Add motion input support to nunchuk', 'comments': 28, 'closed_at': None, 'pull_request': {'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/8451.patch', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/8451.diff', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8451', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8451'}, 'assignee': None}, 'sender': {'type': 'User', 'avatar_url': 'https://avatars0.githubusercontent.com/u/8005966?v=4', 'login': 'mbc07', 'gists_url': 'https://api.github.com/users/mbc07/gists{/gist_id}', 'html_url': 'https://github.com/mbc07', 'events_url': 'https://api.github.com/users/mbc07/events{/privacy}', 'id': 8005966, 'site_admin': False, 'followers_url': 'https://api.github.com/users/mbc07/followers', 'subscriptions_url': 'https://api.github.com/users/mbc07/subscriptions', 'node_id': 'MDQ6VXNlcjgwMDU5NjY=', 'organizations_url': 'https://api.github.com/users/mbc07/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/mbc07/received_events', 'following_url': 'https://api.github.com/users/mbc07/following{/other_user}', 'repos_url': 'https://api.github.com/users/mbc07/repos', 'url': 'https://api.github.com/users/mbc07', 'starred_url': 'https://api.github.com/users/mbc07/starred{/owner}{/repo}'}}, 'safe_author': False, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'body': 'Is there anything else holding this PR back? Emulated motion controls mapping would be finally feature complete on all platforms with the merge of this and #8473 PRs...', 'action': 'created', 'title': 'Add motion input support to nunchuk', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8451#issuecomment-561472516', 'author': 'mbc07'}
2019-12-04T00:08:28.420952	{'type': 'gh_issue_comment', 'id': 8394, 'raw': {'action': 'created', 'repository': {'fork': False, 'has_wiki': True, 'mirror_url': None, 'open_issues_count': 165, 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'forks': 1328, 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'html_url': 'https://github.com/dolphin-emu/dolphin', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'open_issues': 165, 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'language': 'C++', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'default_branch': 'master', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'watchers_count': 5791, 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'name': 'dolphin', 'size': 386665, 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'has_pages': False, 'has_issues': False, 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'disabled': False, 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'stargazers_count': 5791, 'created_at': '2013-07-22T09:07:57Z', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'archived': False, 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'full_name': 'dolphin-emu/dolphin', 'updated_at': '2019-12-03T11:40:49Z', 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'private': False, 'forks_count': 1328, 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'has_projects': False, 'owner': {'type': 'Organization', 'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'html_url': 'https://github.com/dolphin-emu', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'id': 5050316, 'site_admin': False, 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'url': 'https://api.github.com/users/dolphin-emu', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}'}, 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'has_downloads': True, 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'watchers': 5791, 'license': {'name': 'GNU General Public License v2.0', 'node_id': 'MDc6TGljZW5zZTg=', 'spdx_id': 'GPL-2.0', 'key': 'gpl-2.0', 'url': 'https://api.github.com/licenses/gpl-2.0'}, 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'homepage': 'https://dolphin-emu.org/', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'id': 11577304, 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'pushed_at': '2019-12-03T21:31:15Z', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}'}, 'comment': {'id': 561414527, 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8394', 'created_at': '2019-12-04T00:08:27Z', 'node_id': 'MDEyOklzc3VlQ29tbWVudDU2MTQxNDUyNw==', 'author_association': 'CONTRIBUTOR', 'body': 'Wii System Menu 3.1E freezes on boot with this PR.\r\n\r\n![image](https://user-images.githubusercontent.com/6598209/70100629-47e19a80-1600-11ea-97fc-80e4a7a68d92.png)\r\n\r\n', 'updated_at': '2019-12-04T00:08:27Z', 'user': {'type': 'User', 'avatar_url': 'https://avatars2.githubusercontent.com/u/6598209?v=4', 'login': 'JMC47', 'gists_url': 'https://api.github.com/users/JMC47/gists{/gist_id}', 'html_url': 'https://github.com/JMC47', 'events_url': 'https://api.github.com/users/JMC47/events{/privacy}', 'id': 6598209, 'site_admin': False, 'followers_url': 'https://api.github.com/users/JMC47/followers', 'subscriptions_url': 'https://api.github.com/users/JMC47/subscriptions', 'node_id': 'MDQ6VXNlcjY1OTgyMDk=', 'organizations_url': 'https://api.github.com/users/JMC47/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/JMC47/received_events', 'following_url': 'https://api.github.com/users/JMC47/following{/other_user}', 'repos_url': 'https://api.github.com/users/JMC47/repos', 'url': 'https://api.github.com/users/JMC47', 'starred_url': 'https://api.github.com/users/JMC47/starred{/owner}{/repo}'}, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/561414527', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8394#issuecomment-561414527'}, 'organization': {'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'description': '', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events', 'id': 5050316, 'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'url': 'https://api.github.com/orgs/dolphin-emu'}, 'issue': {'created_at': '2019-10-08T02:48:51Z', 'assignees': [], 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8394/labels{/name}', 'milestone': None, 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'number': 8394, 'updated_at': '2019-12-04T00:08:27Z', 'node_id': 'MDExOlB1bGxSZXF1ZXN0MzI1NTc1MzY1', 'author_association': 'CONTRIBUTOR', 'labels': [], 'state': 'open', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8394', 'user': {'type': 'User', 'avatar_url': 'https://avatars2.githubusercontent.com/u/8334194?v=4', 'login': 'Pokechu22', 'gists_url': 'https://api.github.com/users/Pokechu22/gists{/gist_id}', 'html_url': 'https://github.com/Pokechu22', 'events_url': 'https://api.github.com/users/Pokechu22/events{/privacy}', 'id': 8334194, 'site_admin': False, 'followers_url': 'https://api.github.com/users/Pokechu22/followers', 'subscriptions_url': 'https://api.github.com/users/Pokechu22/subscriptions', 'node_id': 'MDQ6VXNlcjgzMzQxOTQ=', 'organizations_url': 'https://api.github.com/users/Pokechu22/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/Pokechu22/received_events', 'following_url': 'https://api.github.com/users/Pokechu22/following{/other_user}', 'repos_url': 'https://api.github.com/users/Pokechu22/repos', 'url': 'https://api.github.com/users/Pokechu22', 'starred_url': 'https://api.github.com/users/Pokechu22/starred{/owner}{/repo}'}, 'locked': False, 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8394', 'body': "An early draft of my improved DI work.  I still need to do some testing (and write automated hardware tests), but there [is documentation](https://wiibrew.org/wiki//dev/di) of what I've figured out so far.\r\n\r\nThe GPIO change fixes [bug 11818](https://bugs.dolphin-emu.org/issues/11818) (not DI related) and also implements GPIO-based ejection (which is used by the system menu when booting from the eject button in conjunction with the RTC flag; I don't think any games use it though.)\r\n\r\nThe RTC change should fix [bug 8115](https://bugs.dolphin-emu.org/issues/8115) (including the case when a channel other than the system menu is running which I reported as [bug 11803](https://bugs.dolphin-emu.org/issues/8115)).  Note that the trade-off is that currently, it *always* acts like the disc has changed and *never* uses the cache when first loading the system menu, though it should still use it when exiting from a game.  To be more accurate about it dolphin would need to track the current disc in the configuration file, probably.\r\n\r\nMost of the other changes are related to errors reported by the disc drive, or various commands that were not implemented before.  I've made some attempts to organize these nicely into different commits, but it's still not the clearest yet.\r\n\r\nI have only tested this with Wii games.  Testing it with gamecube games would be appreciated (in particular, I suspect that the stricter DTK changes will cause issues when starting from emulated BS2, but I haven't tested it).\r\n\r\nAlthough this is a draft, I would like feedback on the implementation, since some of the code is rather hacky and I'm not completely sure how to do it better.", 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8394/events', 'id': 503792795, 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8394/comments', 'title': 'Various DI improvements', 'comments': 8, 'closed_at': None, 'pull_request': {'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/8394.patch', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/8394.diff', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8394', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8394'}, 'assignee': None}, 'sender': {'type': 'User', 'avatar_url': 'https://avatars2.githubusercontent.com/u/6598209?v=4', 'login': 'JMC47', 'gists_url': 'https://api.github.com/users/JMC47/gists{/gist_id}', 'html_url': 'https://github.com/JMC47', 'events_url': 'https://api.github.com/users/JMC47/events{/privacy}', 'id': 6598209, 'site_admin': False, 'followers_url': 'https://api.github.com/users/JMC47/followers', 'subscriptions_url': 'https://api.github.com/users/JMC47/subscriptions', 'node_id': 'MDQ6VXNlcjY1OTgyMDk=', 'organizations_url': 'https://api.github.com/users/JMC47/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/JMC47/received_events', 'following_url': 'https://api.github.com/users/JMC47/following{/other_user}', 'repos_url': 'https://api.github.com/users/JMC47/repos', 'url': 'https://api.github.com/users/JMC47', 'starred_url': 'https://api.github.com/users/JMC47/starred{/owner}{/repo}'}}, 'safe_author': True, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'body': 'Wii System Menu 3.1E freezes on boot with this PR.\r\n\r\n![image](https://user-images.githubusercontent.com/6598209/70100629-47e19a80-1600-11ea-97fc-80e4a7a68d92.png)\r\n\r\n', 'action': 'created', 'title': 'Various DI improvements', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8394#issuecomment-561414527', 'author': 'JMC47'}
2019-12-03T11:08:28.224109	{'type': 'gh_issue_comment', 'id': 8507, 'raw': {'action': 'created', 'repository': {'fork': False, 'has_wiki': True, 'mirror_url': None, 'open_issues_count': 165, 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'forks': 1327, 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'html_url': 'https://github.com/dolphin-emu/dolphin', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'open_issues': 165, 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'language': 'C++', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'default_branch': 'master', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'watchers_count': 5789, 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'name': 'dolphin', 'size': 386665, 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'has_pages': False, 'has_issues': False, 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'disabled': False, 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'stargazers_count': 5789, 'created_at': '2013-07-22T09:07:57Z', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'archived': False, 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'full_name': 'dolphin-emu/dolphin', 'updated_at': '2019-12-03T11:07:09Z', 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'private': False, 'forks_count': 1327, 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'has_projects': False, 'owner': {'type': 'Organization', 'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'html_url': 'https://github.com/dolphin-emu', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'id': 5050316, 'site_admin': False, 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'url': 'https://api.github.com/users/dolphin-emu', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}'}, 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'has_downloads': True, 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'watchers': 5789, 'license': {'name': 'GNU General Public License v2.0', 'node_id': 'MDc6TGljZW5zZTg=', 'spdx_id': 'GPL-2.0', 'key': 'gpl-2.0', 'url': 'https://api.github.com/licenses/gpl-2.0'}, 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'homepage': 'https://dolphin-emu.org/', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'id': 11577304, 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'pushed_at': '2019-12-03T10:43:22Z', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}'}, 'comment': {'id': 561119925, 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8507', 'created_at': '2019-12-03T11:08:27Z', 'node_id': 'MDEyOklzc3VlQ29tbWVudDU2MTExOTkyNQ==', 'author_association': 'NONE', 'body': "Again, i apologize. I'm new to GitHub.", 'updated_at': '2019-12-03T11:08:27Z', 'user': {'type': 'User', 'avatar_url': 'https://avatars3.githubusercontent.com/u/43527795?v=4', 'login': 'SubsonicBeatz154', 'gists_url': 'https://api.github.com/users/SubsonicBeatz154/gists{/gist_id}', 'html_url': 'https://github.com/SubsonicBeatz154', 'events_url': 'https://api.github.com/users/SubsonicBeatz154/events{/privacy}', 'id': 43527795, 'site_admin': False, 'followers_url': 'https://api.github.com/users/SubsonicBeatz154/followers', 'subscriptions_url': 'https://api.github.com/users/SubsonicBeatz154/subscriptions', 'node_id': 'MDQ6VXNlcjQzNTI3Nzk1', 'organizations_url': 'https://api.github.com/users/SubsonicBeatz154/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/SubsonicBeatz154/received_events', 'following_url': 'https://api.github.com/users/SubsonicBeatz154/following{/other_user}', 'repos_url': 'https://api.github.com/users/SubsonicBeatz154/repos', 'url': 'https://api.github.com/users/SubsonicBeatz154', 'starred_url': 'https://api.github.com/users/SubsonicBeatz154/starred{/owner}{/repo}'}, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/561119925', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8507#issuecomment-561119925'}, 'organization': {'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'description': '', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events', 'id': 5050316, 'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'url': 'https://api.github.com/orgs/dolphin-emu'}, 'issue': {'created_at': '2019-12-03T09:39:31Z', 'assignees': [], 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8507/labels{/name}', 'milestone': None, 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'number': 8507, 'updated_at': '2019-12-03T11:08:27Z', 'node_id': 'MDExOlB1bGxSZXF1ZXN0MzQ4MjIyMDg2', 'author_association': 'NONE', 'labels': [], 'state': 'closed', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8507', 'user': {'type': 'User', 'avatar_url': 'https://avatars3.githubusercontent.com/u/43527795?v=4', 'login': 'SubsonicBeatz154', 'gists_url': 'https://api.github.com/users/SubsonicBeatz154/gists{/gist_id}', 'html_url': 'https://github.com/SubsonicBeatz154', 'events_url': 'https://api.github.com/users/SubsonicBeatz154/events{/privacy}', 'id': 43527795, 'site_admin': False, 'followers_url': 'https://api.github.com/users/SubsonicBeatz154/followers', 'subscriptions_url': 'https://api.github.com/users/SubsonicBeatz154/subscriptions', 'node_id': 'MDQ6VXNlcjQzNTI3Nzk1', 'organizations_url': 'https://api.github.com/users/SubsonicBeatz154/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/SubsonicBeatz154/received_events', 'following_url': 'https://api.github.com/users/SubsonicBeatz154/following{/other_user}', 'repos_url': 'https://api.github.com/users/SubsonicBeatz154/repos', 'url': 'https://api.github.com/users/SubsonicBeatz154', 'starred_url': 'https://api.github.com/users/SubsonicBeatz154/starred{/owner}{/repo}'}, 'locked': False, 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8507', 'body': 'Enabled SyncGPU, this fixes the flickering and black bar issues that have plagued the game for the longest of times. At a pretty substantial performance cost unfortunately... SyncGPU is the only way to fix those issues, the wiki is wrong and lists them as already having been fixed.\r\n\r\nSet ImmediateXFBEnable and XFBToTextureEnable to true, this way if the user chooses to disable SyncGPU manually for performance reasons, they will get the black bar instead of the horrible flickering.\r\n\r\nAlso updated the game name in the GameINI to read as Metroid Prime: Trilogy instead of Metroid Prime Trilogy. Metroid Prime: Trilogy is the correct name according to the name in the game list.\r\n\r\nNone of these changes interfere with the effectiveness of the previous PR that fixed the loading screens.', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8507/events', 'id': 531850427, 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8507/comments', 'title': 'Fix flickering in Metroid Prime: Trilogy.', 'comments': 27, 'closed_at': '2019-12-03T10:59:08Z', 'pull_request': {'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/8507.patch', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/8507.diff', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8507', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8507'}, 'assignee': None}, 'sender': {'type': 'User', 'avatar_url': 'https://avatars3.githubusercontent.com/u/43527795?v=4', 'login': 'SubsonicBeatz154', 'gists_url': 'https://api.github.com/users/SubsonicBeatz154/gists{/gist_id}', 'html_url': 'https://github.com/SubsonicBeatz154', 'events_url': 'https://api.github.com/users/SubsonicBeatz154/events{/privacy}', 'id': 43527795, 'site_admin': False, 'followers_url': 'https://api.github.com/users/SubsonicBeatz154/followers', 'subscriptions_url': 'https://api.github.com/users/SubsonicBeatz154/subscriptions', 'node_id': 'MDQ6VXNlcjQzNTI3Nzk1', 'organizations_url': 'https://api.github.com/users/SubsonicBeatz154/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/SubsonicBeatz154/received_events', 'following_url': 'https://api.github.com/users/SubsonicBeatz154/following{/other_user}', 'repos_url': 'https://api.github.com/users/SubsonicBeatz154/repos', 'url': 'https://api.github.com/users/SubsonicBeatz154', 'starred_url': 'https://api.github.com/users/SubsonicBeatz154/starred{/owner}{/repo}'}}, 'safe_author': False, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'body': "Again, i apologize. I'm new to GitHub.", 'action': 'created', 'title': 'Fix flickering in Metroid Prime: Trilogy.', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8507#issuecomment-561119925', 'author': 'SubsonicBeatz154'}
2019-12-03T11:07:10.039469	{'type': 'gh_issue_comment', 'id': 8507, 'raw': {'action': 'created', 'repository': {'fork': False, 'has_wiki': True, 'mirror_url': None, 'open_issues_count': 165, 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'forks': 1328, 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'html_url': 'https://github.com/dolphin-emu/dolphin', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'open_issues': 165, 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'language': 'C++', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'default_branch': 'master', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'watchers_count': 5790, 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'name': 'dolphin', 'size': 386665, 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'has_pages': False, 'has_issues': False, 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'disabled': False, 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'stargazers_count': 5790, 'created_at': '2013-07-22T09:07:57Z', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'archived': False, 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'full_name': 'dolphin-emu/dolphin', 'updated_at': '2019-12-03T03:03:56Z', 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'private': False, 'forks_count': 1328, 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'has_projects': False, 'owner': {'type': 'Organization', 'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'html_url': 'https://github.com/dolphin-emu', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'id': 5050316, 'site_admin': False, 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'url': 'https://api.github.com/users/dolphin-emu', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}'}, 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'has_downloads': True, 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'watchers': 5790, 'license': {'name': 'GNU General Public License v2.0', 'node_id': 'MDc6TGljZW5zZTg=', 'spdx_id': 'GPL-2.0', 'key': 'gpl-2.0', 'url': 'https://api.github.com/licenses/gpl-2.0'}, 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'homepage': 'https://dolphin-emu.org/', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'id': 11577304, 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'pushed_at': '2019-12-03T10:43:22Z', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}'}, 'comment': {'id': 561119464, 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8507', 'created_at': '2019-12-03T11:07:09Z', 'node_id': 'MDEyOklzc3VlQ29tbWVudDU2MTExOTQ2NA==', 'author_association': 'NONE', 'body': 'Well, at least i now know what NOT to do when it comes to default GameINI modifications.', 'updated_at': '2019-12-03T11:07:09Z', 'user': {'type': 'User', 'avatar_url': 'https://avatars3.githubusercontent.com/u/43527795?v=4', 'login': 'SubsonicBeatz154', 'gists_url': 'https://api.github.com/users/SubsonicBeatz154/gists{/gist_id}', 'html_url': 'https://github.com/SubsonicBeatz154', 'events_url': 'https://api.github.com/users/SubsonicBeatz154/events{/privacy}', 'id': 43527795, 'site_admin': False, 'followers_url': 'https://api.github.com/users/SubsonicBeatz154/followers', 'subscriptions_url': 'https://api.github.com/users/SubsonicBeatz154/subscriptions', 'node_id': 'MDQ6VXNlcjQzNTI3Nzk1', 'organizations_url': 'https://api.github.com/users/SubsonicBeatz154/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/SubsonicBeatz154/received_events', 'following_url': 'https://api.github.com/users/SubsonicBeatz154/following{/other_user}', 'repos_url': 'https://api.github.com/users/SubsonicBeatz154/repos', 'url': 'https://api.github.com/users/SubsonicBeatz154', 'starred_url': 'https://api.github.com/users/SubsonicBeatz154/starred{/owner}{/repo}'}, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/561119464', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8507#issuecomment-561119464'}, 'organization': {'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'description': '', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events', 'id': 5050316, 'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'url': 'https://api.github.com/orgs/dolphin-emu'}, 'issue': {'created_at': '2019-12-03T09:39:31Z', 'assignees': [], 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8507/labels{/name}', 'milestone': None, 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'number': 8507, 'updated_at': '2019-12-03T11:07:09Z', 'node_id': 'MDExOlB1bGxSZXF1ZXN0MzQ4MjIyMDg2', 'author_association': 'NONE', 'labels': [], 'state': 'closed', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8507', 'user': {'type': 'User', 'avatar_url': 'https://avatars3.githubusercontent.com/u/43527795?v=4', 'login': 'SubsonicBeatz154', 'gists_url': 'https://api.github.com/users/SubsonicBeatz154/gists{/gist_id}', 'html_url': 'https://github.com/SubsonicBeatz154', 'events_url': 'https://api.github.com/users/SubsonicBeatz154/events{/privacy}', 'id': 43527795, 'site_admin': False, 'followers_url': 'https://api.github.com/users/SubsonicBeatz154/followers', 'subscriptions_url': 'https://api.github.com/users/SubsonicBeatz154/subscriptions', 'node_id': 'MDQ6VXNlcjQzNTI3Nzk1', 'organizations_url': 'https://api.github.com/users/SubsonicBeatz154/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/SubsonicBeatz154/received_events', 'following_url': 'https://api.github.com/users/SubsonicBeatz154/following{/other_user}', 'repos_url': 'https://api.github.com/users/SubsonicBeatz154/repos', 'url': 'https://api.github.com/users/SubsonicBeatz154', 'starred_url': 'https://api.github.com/users/SubsonicBeatz154/starred{/owner}{/repo}'}, 'locked': False, 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8507', 'body': 'Enabled SyncGPU, this fixes the flickering and black bar issues that have plagued the game for the longest of times. At a pretty substantial performance cost unfortunately... SyncGPU is the only way to fix those issues, the wiki is wrong and lists them as already having been fixed.\r\n\r\nSet ImmediateXFBEnable and XFBToTextureEnable to true, this way if the user chooses to disable SyncGPU manually for performance reasons, they will get the black bar instead of the horrible flickering.\r\n\r\nAlso updated the game name in the GameINI to read as Metroid Prime: Trilogy instead of Metroid Prime Trilogy. Metroid Prime: Trilogy is the correct name according to the name in the game list.\r\n\r\nNone of these changes interfere with the effectiveness of the previous PR that fixed the loading screens.', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8507/events', 'id': 531850427, 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8507/comments', 'title': 'Fix flickering in Metroid Prime: Trilogy.', 'comments': 26, 'closed_at': '2019-12-03T10:59:08Z', 'pull_request': {'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/8507.patch', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/8507.diff', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8507', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8507'}, 'assignee': None}, 'sender': {'type': 'User', 'avatar_url': 'https://avatars3.githubusercontent.com/u/43527795?v=4', 'login': 'SubsonicBeatz154', 'gists_url': 'https://api.github.com/users/SubsonicBeatz154/gists{/gist_id}', 'html_url': 'https://github.com/SubsonicBeatz154', 'events_url': 'https://api.github.com/users/SubsonicBeatz154/events{/privacy}', 'id': 43527795, 'site_admin': False, 'followers_url': 'https://api.github.com/users/SubsonicBeatz154/followers', 'subscriptions_url': 'https://api.github.com/users/SubsonicBeatz154/subscriptions', 'node_id': 'MDQ6VXNlcjQzNTI3Nzk1', 'organizations_url': 'https://api.github.com/users/SubsonicBeatz154/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/SubsonicBeatz154/received_events', 'following_url': 'https://api.github.com/users/SubsonicBeatz154/following{/other_user}', 'repos_url': 'https://api.github.com/users/SubsonicBeatz154/repos', 'url': 'https://api.github.com/users/SubsonicBeatz154', 'starred_url': 'https://api.github.com/users/SubsonicBeatz154/starred{/owner}{/repo}'}}, 'safe_author': False, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'body': 'Well, at least i now know what NOT to do when it comes to default GameINI modifications.', 'action': 'created', 'title': 'Fix flickering in Metroid Prime: Trilogy.', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8507#issuecomment-561119464', 'author': 'SubsonicBeatz154'}
2019-12-03T10:59:09.659294	{'type': 'gh_issue_comment', 'id': 8507, 'raw': {'action': 'created', 'repository': {'fork': False, 'has_wiki': True, 'mirror_url': None, 'open_issues_count': 165, 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'forks': 1328, 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'html_url': 'https://github.com/dolphin-emu/dolphin', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'open_issues': 165, 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'language': 'C++', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'default_branch': 'master', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'watchers_count': 5790, 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'name': 'dolphin', 'size': 386665, 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'has_pages': False, 'has_issues': False, 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'disabled': False, 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'stargazers_count': 5790, 'created_at': '2013-07-22T09:07:57Z', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'archived': False, 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'full_name': 'dolphin-emu/dolphin', 'updated_at': '2019-12-03T03:03:56Z', 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'private': False, 'forks_count': 1328, 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'has_projects': False, 'owner': {'type': 'Organization', 'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'html_url': 'https://github.com/dolphin-emu', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'id': 5050316, 'site_admin': False, 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'url': 'https://api.github.com/users/dolphin-emu', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}'}, 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'has_downloads': True, 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'watchers': 5790, 'license': {'name': 'GNU General Public License v2.0', 'node_id': 'MDc6TGljZW5zZTg=', 'spdx_id': 'GPL-2.0', 'key': 'gpl-2.0', 'url': 'https://api.github.com/licenses/gpl-2.0'}, 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'homepage': 'https://dolphin-emu.org/', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'id': 11577304, 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'pushed_at': '2019-12-03T10:43:22Z', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}'}, 'comment': {'id': 561115761, 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8507', 'created_at': '2019-12-03T10:59:08Z', 'node_id': 'MDEyOklzc3VlQ29tbWVudDU2MTExNTc2MQ==', 'author_association': 'NONE', 'body': "Well, i apologize for the inconvenience then. I guess i don't share the same opinions as you guys...", 'updated_at': '2019-12-03T10:59:08Z', 'user': {'type': 'User', 'avatar_url': 'https://avatars3.githubusercontent.com/u/43527795?v=4', 'login': 'SubsonicBeatz154', 'gists_url': 'https://api.github.com/users/SubsonicBeatz154/gists{/gist_id}', 'html_url': 'https://github.com/SubsonicBeatz154', 'events_url': 'https://api.github.com/users/SubsonicBeatz154/events{/privacy}', 'id': 43527795, 'site_admin': False, 'followers_url': 'https://api.github.com/users/SubsonicBeatz154/followers', 'subscriptions_url': 'https://api.github.com/users/SubsonicBeatz154/subscriptions', 'node_id': 'MDQ6VXNlcjQzNTI3Nzk1', 'organizations_url': 'https://api.github.com/users/SubsonicBeatz154/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/SubsonicBeatz154/received_events', 'following_url': 'https://api.github.com/users/SubsonicBeatz154/following{/other_user}', 'repos_url': 'https://api.github.com/users/SubsonicBeatz154/repos', 'url': 'https://api.github.com/users/SubsonicBeatz154', 'starred_url': 'https://api.github.com/users/SubsonicBeatz154/starred{/owner}{/repo}'}, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/561115761', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8507#issuecomment-561115761'}, 'organization': {'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'description': '', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events', 'id': 5050316, 'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'url': 'https://api.github.com/orgs/dolphin-emu'}, 'issue': {'created_at': '2019-12-03T09:39:31Z', 'assignees': [], 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8507/labels{/name}', 'milestone': None, 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'number': 8507, 'updated_at': '2019-12-03T10:59:08Z', 'node_id': 'MDExOlB1bGxSZXF1ZXN0MzQ4MjIyMDg2', 'author_association': 'NONE', 'labels': [], 'state': 'closed', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8507', 'user': {'type': 'User', 'avatar_url': 'https://avatars3.githubusercontent.com/u/43527795?v=4', 'login': 'SubsonicBeatz154', 'gists_url': 'https://api.github.com/users/SubsonicBeatz154/gists{/gist_id}', 'html_url': 'https://github.com/SubsonicBeatz154', 'events_url': 'https://api.github.com/users/SubsonicBeatz154/events{/privacy}', 'id': 43527795, 'site_admin': False, 'followers_url': 'https://api.github.com/users/SubsonicBeatz154/followers', 'subscriptions_url': 'https://api.github.com/users/SubsonicBeatz154/subscriptions', 'node_id': 'MDQ6VXNlcjQzNTI3Nzk1', 'organizations_url': 'https://api.github.com/users/SubsonicBeatz154/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/SubsonicBeatz154/received_events', 'following_url': 'https://api.github.com/users/SubsonicBeatz154/following{/other_user}', 'repos_url': 'https://api.github.com/users/SubsonicBeatz154/repos', 'url': 'https://api.github.com/users/SubsonicBeatz154', 'starred_url': 'https://api.github.com/users/SubsonicBeatz154/starred{/owner}{/repo}'}, 'locked': False, 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8507', 'body': 'Enabled SyncGPU, this fixes the flickering and black bar issues that have plagued the game for the longest of times. At a pretty substantial performance cost unfortunately... SyncGPU is the only way to fix those issues, the wiki is wrong and lists them as already having been fixed.\r\n\r\nSet ImmediateXFBEnable and XFBToTextureEnable to true, this way if the user chooses to disable SyncGPU manually for performance reasons, they will get the black bar instead of the horrible flickering.\r\n\r\nAlso updated the game name in the GameINI to read as Metroid Prime: Trilogy instead of Metroid Prime Trilogy. Metroid Prime: Trilogy is the correct name according to the name in the game list.\r\n\r\nNone of these changes interfere with the effectiveness of the previous PR that fixed the loading screens.', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8507/events', 'id': 531850427, 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8507/comments', 'title': 'Fix flickering in Metroid Prime: Trilogy.', 'comments': 25, 'closed_at': '2019-12-03T10:59:08Z', 'pull_request': {'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/8507.patch', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/8507.diff', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8507', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8507'}, 'assignee': None}, 'sender': {'type': 'User', 'avatar_url': 'https://avatars3.githubusercontent.com/u/43527795?v=4', 'login': 'SubsonicBeatz154', 'gists_url': 'https://api.github.com/users/SubsonicBeatz154/gists{/gist_id}', 'html_url': 'https://github.com/SubsonicBeatz154', 'events_url': 'https://api.github.com/users/SubsonicBeatz154/events{/privacy}', 'id': 43527795, 'site_admin': False, 'followers_url': 'https://api.github.com/users/SubsonicBeatz154/followers', 'subscriptions_url': 'https://api.github.com/users/SubsonicBeatz154/subscriptions', 'node_id': 'MDQ6VXNlcjQzNTI3Nzk1', 'organizations_url': 'https://api.github.com/users/SubsonicBeatz154/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/SubsonicBeatz154/received_events', 'following_url': 'https://api.github.com/users/SubsonicBeatz154/following{/other_user}', 'repos_url': 'https://api.github.com/users/SubsonicBeatz154/repos', 'url': 'https://api.github.com/users/SubsonicBeatz154', 'starred_url': 'https://api.github.com/users/SubsonicBeatz154/starred{/owner}{/repo}'}}, 'safe_author': False, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'body': "Well, i apologize for the inconvenience then. I guess i don't share the same opinions as you guys...", 'action': 'created', 'title': 'Fix flickering in Metroid Prime: Trilogy.', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8507#issuecomment-561115761', 'author': 'SubsonicBeatz154'}
2019-12-03T10:56:58.602312	{'type': 'gh_issue_comment', 'id': 8507, 'raw': {'action': 'created', 'repository': {'fork': False, 'has_wiki': True, 'mirror_url': None, 'open_issues_count': 166, 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'forks': 1328, 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'html_url': 'https://github.com/dolphin-emu/dolphin', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'open_issues': 166, 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'language': 'C++', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'default_branch': 'master', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'watchers_count': 5790, 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'name': 'dolphin', 'size': 386665, 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'has_pages': False, 'has_issues': False, 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'disabled': False, 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'stargazers_count': 5790, 'created_at': '2013-07-22T09:07:57Z', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'archived': False, 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'full_name': 'dolphin-emu/dolphin', 'updated_at': '2019-12-03T03:03:56Z', 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'private': False, 'forks_count': 1328, 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'has_projects': False, 'owner': {'type': 'Organization', 'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'html_url': 'https://github.com/dolphin-emu', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'id': 5050316, 'site_admin': False, 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'url': 'https://api.github.com/users/dolphin-emu', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}'}, 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'has_downloads': True, 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'watchers': 5790, 'license': {'name': 'GNU General Public License v2.0', 'node_id': 'MDc6TGljZW5zZTg=', 'spdx_id': 'GPL-2.0', 'key': 'gpl-2.0', 'url': 'https://api.github.com/licenses/gpl-2.0'}, 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'homepage': 'https://dolphin-emu.org/', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'id': 11577304, 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'pushed_at': '2019-12-03T10:43:22Z', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}'}, 'comment': {'id': 561114989, 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8507', 'created_at': '2019-12-03T10:56:57Z', 'node_id': 'MDEyOklzc3VlQ29tbWVudDU2MTExNDk4OQ==', 'author_association': 'CONTRIBUTOR', 'body': "As we said, Immediate XFB is a hack for highly specific use cases and it shouldn't be enabled here.", 'updated_at': '2019-12-03T10:56:57Z', 'user': {'type': 'User', 'avatar_url': 'https://avatars3.githubusercontent.com/u/532821?v=4', 'login': 'Techjar', 'gists_url': 'https://api.github.com/users/Techjar/gists{/gist_id}', 'html_url': 'https://github.com/Techjar', 'events_url': 'https://api.github.com/users/Techjar/events{/privacy}', 'id': 532821, 'site_admin': False, 'followers_url': 'https://api.github.com/users/Techjar/followers', 'subscriptions_url': 'https://api.github.com/users/Techjar/subscriptions', 'node_id': 'MDQ6VXNlcjUzMjgyMQ==', 'organizations_url': 'https://api.github.com/users/Techjar/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/Techjar/received_events', 'following_url': 'https://api.github.com/users/Techjar/following{/other_user}', 'repos_url': 'https://api.github.com/users/Techjar/repos', 'url': 'https://api.github.com/users/Techjar', 'starred_url': 'https://api.github.com/users/Techjar/starred{/owner}{/repo}'}, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/561114989', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8507#issuecomment-561114989'}, 'organization': {'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'description': '', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events', 'id': 5050316, 'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'url': 'https://api.github.com/orgs/dolphin-emu'}, 'issue': {'created_at': '2019-12-03T09:39:31Z', 'assignees': [], 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8507/labels{/name}', 'milestone': None, 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'number': 8507, 'updated_at': '2019-12-03T10:56:57Z', 'node_id': 'MDExOlB1bGxSZXF1ZXN0MzQ4MjIyMDg2', 'author_association': 'NONE', 'labels': [], 'state': 'open', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8507', 'user': {'type': 'User', 'avatar_url': 'https://avatars3.githubusercontent.com/u/43527795?v=4', 'login': 'SubsonicBeatz154', 'gists_url': 'https://api.github.com/users/SubsonicBeatz154/gists{/gist_id}', 'html_url': 'https://github.com/SubsonicBeatz154', 'events_url': 'https://api.github.com/users/SubsonicBeatz154/events{/privacy}', 'id': 43527795, 'site_admin': False, 'followers_url': 'https://api.github.com/users/SubsonicBeatz154/followers', 'subscriptions_url': 'https://api.github.com/users/SubsonicBeatz154/subscriptions', 'node_id': 'MDQ6VXNlcjQzNTI3Nzk1', 'organizations_url': 'https://api.github.com/users/SubsonicBeatz154/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/SubsonicBeatz154/received_events', 'following_url': 'https://api.github.com/users/SubsonicBeatz154/following{/other_user}', 'repos_url': 'https://api.github.com/users/SubsonicBeatz154/repos', 'url': 'https://api.github.com/users/SubsonicBeatz154', 'starred_url': 'https://api.github.com/users/SubsonicBeatz154/starred{/owner}{/repo}'}, 'locked': False, 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8507', 'body': 'Enabled SyncGPU, this fixes the flickering and black bar issues that have plagued the game for the longest of times. At a pretty substantial performance cost unfortunately... SyncGPU is the only way to fix those issues, the wiki is wrong and lists them as already having been fixed.\r\n\r\nSet ImmediateXFBEnable and XFBToTextureEnable to true, this way if the user chooses to disable SyncGPU manually for performance reasons, they will get the black bar instead of the horrible flickering.\r\n\r\nAlso updated the game name in the GameINI to read as Metroid Prime: Trilogy instead of Metroid Prime Trilogy. Metroid Prime: Trilogy is the correct name according to the name in the game list.\r\n\r\nNone of these changes interfere with the effectiveness of the previous PR that fixed the loading screens.', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8507/events', 'id': 531850427, 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8507/comments', 'title': 'Fix flickering in Metroid Prime: Trilogy.', 'comments': 24, 'closed_at': None, 'pull_request': {'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/8507.patch', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/8507.diff', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8507', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8507'}, 'assignee': None}, 'sender': {'type': 'User', 'avatar_url': 'https://avatars3.githubusercontent.com/u/532821?v=4', 'login': 'Techjar', 'gists_url': 'https://api.github.com/users/Techjar/gists{/gist_id}', 'html_url': 'https://github.com/Techjar', 'events_url': 'https://api.github.com/users/Techjar/events{/privacy}', 'id': 532821, 'site_admin': False, 'followers_url': 'https://api.github.com/users/Techjar/followers', 'subscriptions_url': 'https://api.github.com/users/Techjar/subscriptions', 'node_id': 'MDQ6VXNlcjUzMjgyMQ==', 'organizations_url': 'https://api.github.com/users/Techjar/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/Techjar/received_events', 'following_url': 'https://api.github.com/users/Techjar/following{/other_user}', 'repos_url': 'https://api.github.com/users/Techjar/repos', 'url': 'https://api.github.com/users/Techjar', 'starred_url': 'https://api.github.com/users/Techjar/starred{/owner}{/repo}'}}, 'safe_author': True, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'body': "As we said, Immediate XFB is a hack for highly specific use cases and it shouldn't be enabled here.", 'action': 'created', 'title': 'Fix flickering in Metroid Prime: Trilogy.', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8507#issuecomment-561114989', 'author': 'Techjar'}
2019-12-03T10:55:00.921861	{'type': 'gh_issue_comment', 'id': 8507, 'raw': {'action': 'created', 'repository': {'fork': False, 'has_wiki': True, 'mirror_url': None, 'open_issues_count': 166, 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'forks': 1328, 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'html_url': 'https://github.com/dolphin-emu/dolphin', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'open_issues': 166, 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'language': 'C++', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'default_branch': 'master', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'watchers_count': 5790, 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'name': 'dolphin', 'size': 386665, 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'has_pages': False, 'has_issues': False, 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'disabled': False, 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'stargazers_count': 5790, 'created_at': '2013-07-22T09:07:57Z', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'archived': False, 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'full_name': 'dolphin-emu/dolphin', 'updated_at': '2019-12-03T03:03:56Z', 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'private': False, 'forks_count': 1328, 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'has_projects': False, 'owner': {'type': 'Organization', 'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'html_url': 'https://github.com/dolphin-emu', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'id': 5050316, 'site_admin': False, 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'url': 'https://api.github.com/users/dolphin-emu', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}'}, 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'has_downloads': True, 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'watchers': 5790, 'license': {'name': 'GNU General Public License v2.0', 'node_id': 'MDc6TGljZW5zZTg=', 'spdx_id': 'GPL-2.0', 'key': 'gpl-2.0', 'url': 'https://api.github.com/licenses/gpl-2.0'}, 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'homepage': 'https://dolphin-emu.org/', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'id': 11577304, 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'pushed_at': '2019-12-03T10:43:22Z', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}'}, 'comment': {'id': 561114221, 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8507', 'created_at': '2019-12-03T10:54:59Z', 'node_id': 'MDEyOklzc3VlQ29tbWVudDU2MTExNDIyMQ==', 'author_association': 'NONE', 'body': "When both Immediately Present XFB and Store XFB Copies to Texture Only are on, you'll get the classic black bar instead of... Whatever that nonsense was. I personally think seeing this vs the flickering from the Fix loading screens on Metroid Prime Trilogy PR's config is better as a default config than it.\r\n![2019 12 03-05 51](https://user-images.githubusercontent.com/43527795/70044893-2ac1b300-1591-11ea-9bc6-c5af88893803.png)\r\n", 'updated_at': '2019-12-03T10:54:59Z', 'user': {'type': 'User', 'avatar_url': 'https://avatars3.githubusercontent.com/u/43527795?v=4', 'login': 'SubsonicBeatz154', 'gists_url': 'https://api.github.com/users/SubsonicBeatz154/gists{/gist_id}', 'html_url': 'https://github.com/SubsonicBeatz154', 'events_url': 'https://api.github.com/users/SubsonicBeatz154/events{/privacy}', 'id': 43527795, 'site_admin': False, 'followers_url': 'https://api.github.com/users/SubsonicBeatz154/followers', 'subscriptions_url': 'https://api.github.com/users/SubsonicBeatz154/subscriptions', 'node_id': 'MDQ6VXNlcjQzNTI3Nzk1', 'organizations_url': 'https://api.github.com/users/SubsonicBeatz154/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/SubsonicBeatz154/received_events', 'following_url': 'https://api.github.com/users/SubsonicBeatz154/following{/other_user}', 'repos_url': 'https://api.github.com/users/SubsonicBeatz154/repos', 'url': 'https://api.github.com/users/SubsonicBeatz154', 'starred_url': 'https://api.github.com/users/SubsonicBeatz154/starred{/owner}{/repo}'}, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/561114221', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8507#issuecomment-561114221'}, 'organization': {'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'description': '', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events', 'id': 5050316, 'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'url': 'https://api.github.com/orgs/dolphin-emu'}, 'issue': {'created_at': '2019-12-03T09:39:31Z', 'assignees': [], 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8507/labels{/name}', 'milestone': None, 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'number': 8507, 'updated_at': '2019-12-03T10:55:00Z', 'node_id': 'MDExOlB1bGxSZXF1ZXN0MzQ4MjIyMDg2', 'author_association': 'NONE', 'labels': [], 'state': 'open', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8507', 'user': {'type': 'User', 'avatar_url': 'https://avatars3.githubusercontent.com/u/43527795?v=4', 'login': 'SubsonicBeatz154', 'gists_url': 'https://api.github.com/users/SubsonicBeatz154/gists{/gist_id}', 'html_url': 'https://github.com/SubsonicBeatz154', 'events_url': 'https://api.github.com/users/SubsonicBeatz154/events{/privacy}', 'id': 43527795, 'site_admin': False, 'followers_url': 'https://api.github.com/users/SubsonicBeatz154/followers', 'subscriptions_url': 'https://api.github.com/users/SubsonicBeatz154/subscriptions', 'node_id': 'MDQ6VXNlcjQzNTI3Nzk1', 'organizations_url': 'https://api.github.com/users/SubsonicBeatz154/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/SubsonicBeatz154/received_events', 'following_url': 'https://api.github.com/users/SubsonicBeatz154/following{/other_user}', 'repos_url': 'https://api.github.com/users/SubsonicBeatz154/repos', 'url': 'https://api.github.com/users/SubsonicBeatz154', 'starred_url': 'https://api.github.com/users/SubsonicBeatz154/starred{/owner}{/repo}'}, 'locked': False, 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8507', 'body': 'Enabled SyncGPU, this fixes the flickering and black bar issues that have plagued the game for the longest of times. At a pretty substantial performance cost unfortunately... SyncGPU is the only way to fix those issues, the wiki is wrong and lists them as already having been fixed.\r\n\r\nSet ImmediateXFBEnable and XFBToTextureEnable to true, this way if the user chooses to disable SyncGPU manually for performance reasons, they will get the black bar instead of the horrible flickering.\r\n\r\nAlso updated the game name in the GameINI to read as Metroid Prime: Trilogy instead of Metroid Prime Trilogy. Metroid Prime: Trilogy is the correct name according to the name in the game list.\r\n\r\nNone of these changes interfere with the effectiveness of the previous PR that fixed the loading screens.', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8507/events', 'id': 531850427, 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8507/comments', 'title': 'Fix flickering in Metroid Prime: Trilogy.', 'comments': 23, 'closed_at': None, 'pull_request': {'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/8507.patch', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/8507.diff', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8507', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8507'}, 'assignee': None}, 'sender': {'type': 'User', 'avatar_url': 'https://avatars3.githubusercontent.com/u/43527795?v=4', 'login': 'SubsonicBeatz154', 'gists_url': 'https://api.github.com/users/SubsonicBeatz154/gists{/gist_id}', 'html_url': 'https://github.com/SubsonicBeatz154', 'events_url': 'https://api.github.com/users/SubsonicBeatz154/events{/privacy}', 'id': 43527795, 'site_admin': False, 'followers_url': 'https://api.github.com/users/SubsonicBeatz154/followers', 'subscriptions_url': 'https://api.github.com/users/SubsonicBeatz154/subscriptions', 'node_id': 'MDQ6VXNlcjQzNTI3Nzk1', 'organizations_url': 'https://api.github.com/users/SubsonicBeatz154/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/SubsonicBeatz154/received_events', 'following_url': 'https://api.github.com/users/SubsonicBeatz154/following{/other_user}', 'repos_url': 'https://api.github.com/users/SubsonicBeatz154/repos', 'url': 'https://api.github.com/users/SubsonicBeatz154', 'starred_url': 'https://api.github.com/users/SubsonicBeatz154/starred{/owner}{/repo}'}}, 'safe_author': False, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'body': "When both Immediately Present XFB and Store XFB Copies to Texture Only are on, you'll get the classic black bar instead of... Whatever that nonsense was. I personally think seeing this vs the flickering from the Fix loading screens on Metroid Prime Trilogy PR's config is better as a default config than it.\r\n![2019 12 03-05 51](https://user-images.githubusercontent.com/43527795/70044893-2ac1b300-1591-11ea-9bc6-c5af88893803.png)\r\n", 'action': 'created', 'title': 'Fix flickering in Metroid Prime: Trilogy.', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8507#issuecomment-561114221', 'author': 'SubsonicBeatz154'}
2019-12-03T10:52:50.430032	{'type': 'gh_issue_comment', 'id': 8507, 'raw': {'action': 'edited', 'repository': {'fork': False, 'has_wiki': True, 'mirror_url': None, 'open_issues_count': 166, 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'forks': 1328, 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'html_url': 'https://github.com/dolphin-emu/dolphin', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'open_issues': 166, 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'language': 'C++', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'default_branch': 'master', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'watchers_count': 5790, 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'name': 'dolphin', 'size': 386665, 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'has_pages': False, 'has_issues': False, 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'disabled': False, 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'stargazers_count': 5790, 'created_at': '2013-07-22T09:07:57Z', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'archived': False, 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'full_name': 'dolphin-emu/dolphin', 'updated_at': '2019-12-03T03:03:56Z', 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'private': False, 'forks_count': 1328, 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'has_projects': False, 'owner': {'type': 'Organization', 'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'html_url': 'https://github.com/dolphin-emu', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'id': 5050316, 'site_admin': False, 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'url': 'https://api.github.com/users/dolphin-emu', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}'}, 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'has_downloads': True, 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'watchers': 5790, 'license': {'name': 'GNU General Public License v2.0', 'node_id': 'MDc6TGljZW5zZTg=', 'spdx_id': 'GPL-2.0', 'key': 'gpl-2.0', 'url': 'https://api.github.com/licenses/gpl-2.0'}, 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'homepage': 'https://dolphin-emu.org/', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'id': 11577304, 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'pushed_at': '2019-12-03T10:43:22Z', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}'}, 'comment': {'id': 561112971, 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8507', 'created_at': '2019-12-03T10:51:42Z', 'node_id': 'MDEyOklzc3VlQ29tbWVudDU2MTExMjk3MQ==', 'author_association': 'CONTRIBUTOR', 'body': "It was consolidated into one option like EFB to RAM, so it's either texture only or texture+RAM (aka Hybrid XFB). We still throw around the internal terminology because it makes sense, though it doesn't necessarily reflect what the end user sees.", 'updated_at': '2019-12-03T10:52:49Z', 'user': {'type': 'User', 'avatar_url': 'https://avatars3.githubusercontent.com/u/532821?v=4', 'login': 'Techjar', 'gists_url': 'https://api.github.com/users/Techjar/gists{/gist_id}', 'html_url': 'https://github.com/Techjar', 'events_url': 'https://api.github.com/users/Techjar/events{/privacy}', 'id': 532821, 'site_admin': False, 'followers_url': 'https://api.github.com/users/Techjar/followers', 'subscriptions_url': 'https://api.github.com/users/Techjar/subscriptions', 'node_id': 'MDQ6VXNlcjUzMjgyMQ==', 'organizations_url': 'https://api.github.com/users/Techjar/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/Techjar/received_events', 'following_url': 'https://api.github.com/users/Techjar/following{/other_user}', 'repos_url': 'https://api.github.com/users/Techjar/repos', 'url': 'https://api.github.com/users/Techjar', 'starred_url': 'https://api.github.com/users/Techjar/starred{/owner}{/repo}'}, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/561112971', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8507#issuecomment-561112971'}, 'organization': {'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'description': '', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events', 'id': 5050316, 'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'url': 'https://api.github.com/orgs/dolphin-emu'}, 'issue': {'created_at': '2019-12-03T09:39:31Z', 'assignees': [], 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8507/labels{/name}', 'milestone': None, 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'number': 8507, 'updated_at': '2019-12-03T10:52:49Z', 'node_id': 'MDExOlB1bGxSZXF1ZXN0MzQ4MjIyMDg2', 'author_association': 'NONE', 'labels': [], 'state': 'open', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8507', 'user': {'type': 'User', 'avatar_url': 'https://avatars3.githubusercontent.com/u/43527795?v=4', 'login': 'SubsonicBeatz154', 'gists_url': 'https://api.github.com/users/SubsonicBeatz154/gists{/gist_id}', 'html_url': 'https://github.com/SubsonicBeatz154', 'events_url': 'https://api.github.com/users/SubsonicBeatz154/events{/privacy}', 'id': 43527795, 'site_admin': False, 'followers_url': 'https://api.github.com/users/SubsonicBeatz154/followers', 'subscriptions_url': 'https://api.github.com/users/SubsonicBeatz154/subscriptions', 'node_id': 'MDQ6VXNlcjQzNTI3Nzk1', 'organizations_url': 'https://api.github.com/users/SubsonicBeatz154/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/SubsonicBeatz154/received_events', 'following_url': 'https://api.github.com/users/SubsonicBeatz154/following{/other_user}', 'repos_url': 'https://api.github.com/users/SubsonicBeatz154/repos', 'url': 'https://api.github.com/users/SubsonicBeatz154', 'starred_url': 'https://api.github.com/users/SubsonicBeatz154/starred{/owner}{/repo}'}, 'locked': False, 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8507', 'body': 'Enabled SyncGPU, this fixes the flickering and black bar issues that have plagued the game for the longest of times. At a pretty substantial performance cost unfortunately... SyncGPU is the only way to fix those issues, the wiki is wrong and lists them as already having been fixed.\r\n\r\nSet ImmediateXFBEnable and XFBToTextureEnable to true, this way if the user chooses to disable SyncGPU manually for performance reasons, they will get the black bar instead of the horrible flickering.\r\n\r\nAlso updated the game name in the GameINI to read as Metroid Prime: Trilogy instead of Metroid Prime Trilogy. Metroid Prime: Trilogy is the correct name according to the name in the game list.\r\n\r\nNone of these changes interfere with the effectiveness of the previous PR that fixed the loading screens.', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8507/events', 'id': 531850427, 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8507/comments', 'title': 'Fix flickering in Metroid Prime: Trilogy.', 'comments': 22, 'closed_at': None, 'pull_request': {'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/8507.patch', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/8507.diff', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8507', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8507'}, 'assignee': None}, 'changes': {'body': {'from': "It was consolidated into one option like EFB to RAM, so it's either texture only or texture+RAM (aka Hybrid XFB)."}}, 'sender': {'type': 'User', 'avatar_url': 'https://avatars3.githubusercontent.com/u/532821?v=4', 'login': 'Techjar', 'gists_url': 'https://api.github.com/users/Techjar/gists{/gist_id}', 'html_url': 'https://github.com/Techjar', 'events_url': 'https://api.github.com/users/Techjar/events{/privacy}', 'id': 532821, 'site_admin': False, 'followers_url': 'https://api.github.com/users/Techjar/followers', 'subscriptions_url': 'https://api.github.com/users/Techjar/subscriptions', 'node_id': 'MDQ6VXNlcjUzMjgyMQ==', 'organizations_url': 'https://api.github.com/users/Techjar/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/Techjar/received_events', 'following_url': 'https://api.github.com/users/Techjar/following{/other_user}', 'repos_url': 'https://api.github.com/users/Techjar/repos', 'url': 'https://api.github.com/users/Techjar', 'starred_url': 'https://api.github.com/users/Techjar/starred{/owner}{/repo}'}}, 'safe_author': True, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'body': "It was consolidated into one option like EFB to RAM, so it's either texture only or texture+RAM (aka Hybrid XFB). We still throw around the internal terminology because it makes sense, though it doesn't necessarily reflect what the end user sees.", 'action': 'edited', 'title': 'Fix flickering in Metroid Prime: Trilogy.', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8507#issuecomment-561112971', 'author': 'Techjar'}
2019-12-03T10:51:49.490962	{'type': 'gh_issue_comment', 'id': 8507, 'raw': {'action': 'edited', 'repository': {'fork': False, 'has_wiki': True, 'mirror_url': None, 'open_issues_count': 166, 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'forks': 1328, 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'html_url': 'https://github.com/dolphin-emu/dolphin', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'open_issues': 166, 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'language': 'C++', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'default_branch': 'master', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'watchers_count': 5790, 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'name': 'dolphin', 'size': 386665, 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'has_pages': False, 'has_issues': False, 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'disabled': False, 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'stargazers_count': 5790, 'created_at': '2013-07-22T09:07:57Z', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'archived': False, 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'full_name': 'dolphin-emu/dolphin', 'updated_at': '2019-12-03T03:03:56Z', 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'private': False, 'forks_count': 1328, 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'has_projects': False, 'owner': {'type': 'Organization', 'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'html_url': 'https://github.com/dolphin-emu', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'id': 5050316, 'site_admin': False, 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'url': 'https://api.github.com/users/dolphin-emu', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}'}, 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'has_downloads': True, 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'watchers': 5790, 'license': {'name': 'GNU General Public License v2.0', 'node_id': 'MDc6TGljZW5zZTg=', 'spdx_id': 'GPL-2.0', 'key': 'gpl-2.0', 'url': 'https://api.github.com/licenses/gpl-2.0'}, 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'homepage': 'https://dolphin-emu.org/', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'id': 11577304, 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'pushed_at': '2019-12-03T10:43:22Z', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}'}, 'comment': {'id': 561112971, 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8507', 'created_at': '2019-12-03T10:51:42Z', 'node_id': 'MDEyOklzc3VlQ29tbWVudDU2MTExMjk3MQ==', 'author_association': 'CONTRIBUTOR', 'body': "It was consolidated into one option like EFB to RAM, so it's either texture only or texture+RAM (aka Hybrid XFB).", 'updated_at': '2019-12-03T10:51:48Z', 'user': {'type': 'User', 'avatar_url': 'https://avatars3.githubusercontent.com/u/532821?v=4', 'login': 'Techjar', 'gists_url': 'https://api.github.com/users/Techjar/gists{/gist_id}', 'html_url': 'https://github.com/Techjar', 'events_url': 'https://api.github.com/users/Techjar/events{/privacy}', 'id': 532821, 'site_admin': False, 'followers_url': 'https://api.github.com/users/Techjar/followers', 'subscriptions_url': 'https://api.github.com/users/Techjar/subscriptions', 'node_id': 'MDQ6VXNlcjUzMjgyMQ==', 'organizations_url': 'https://api.github.com/users/Techjar/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/Techjar/received_events', 'following_url': 'https://api.github.com/users/Techjar/following{/other_user}', 'repos_url': 'https://api.github.com/users/Techjar/repos', 'url': 'https://api.github.com/users/Techjar', 'starred_url': 'https://api.github.com/users/Techjar/starred{/owner}{/repo}'}, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/561112971', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8507#issuecomment-561112971'}, 'organization': {'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'description': '', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events', 'id': 5050316, 'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'url': 'https://api.github.com/orgs/dolphin-emu'}, 'issue': {'created_at': '2019-12-03T09:39:31Z', 'assignees': [], 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8507/labels{/name}', 'milestone': None, 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'number': 8507, 'updated_at': '2019-12-03T10:51:48Z', 'node_id': 'MDExOlB1bGxSZXF1ZXN0MzQ4MjIyMDg2', 'author_association': 'NONE', 'labels': [], 'state': 'open', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8507', 'user': {'type': 'User', 'avatar_url': 'https://avatars3.githubusercontent.com/u/43527795?v=4', 'login': 'SubsonicBeatz154', 'gists_url': 'https://api.github.com/users/SubsonicBeatz154/gists{/gist_id}', 'html_url': 'https://github.com/SubsonicBeatz154', 'events_url': 'https://api.github.com/users/SubsonicBeatz154/events{/privacy}', 'id': 43527795, 'site_admin': False, 'followers_url': 'https://api.github.com/users/SubsonicBeatz154/followers', 'subscriptions_url': 'https://api.github.com/users/SubsonicBeatz154/subscriptions', 'node_id': 'MDQ6VXNlcjQzNTI3Nzk1', 'organizations_url': 'https://api.github.com/users/SubsonicBeatz154/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/SubsonicBeatz154/received_events', 'following_url': 'https://api.github.com/users/SubsonicBeatz154/following{/other_user}', 'repos_url': 'https://api.github.com/users/SubsonicBeatz154/repos', 'url': 'https://api.github.com/users/SubsonicBeatz154', 'starred_url': 'https://api.github.com/users/SubsonicBeatz154/starred{/owner}{/repo}'}, 'locked': False, 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8507', 'body': 'Enabled SyncGPU, this fixes the flickering and black bar issues that have plagued the game for the longest of times. At a pretty substantial performance cost unfortunately... SyncGPU is the only way to fix those issues, the wiki is wrong and lists them as already having been fixed.\r\n\r\nSet ImmediateXFBEnable and XFBToTextureEnable to true, this way if the user chooses to disable SyncGPU manually for performance reasons, they will get the black bar instead of the horrible flickering.\r\n\r\nAlso updated the game name in the GameINI to read as Metroid Prime: Trilogy instead of Metroid Prime Trilogy. Metroid Prime: Trilogy is the correct name according to the name in the game list.\r\n\r\nNone of these changes interfere with the effectiveness of the previous PR that fixed the loading screens.', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8507/events', 'id': 531850427, 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8507/comments', 'title': 'Fix flickering in Metroid Prime: Trilogy.', 'comments': 22, 'closed_at': None, 'pull_request': {'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/8507.patch', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/8507.diff', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8507', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8507'}, 'assignee': None}, 'changes': {'body': {'from': "It was consolidated into one option like EFB to RAM, so it's either tecture only or texture+RAM (aka Hybrid XFB)."}}, 'sender': {'type': 'User', 'avatar_url': 'https://avatars3.githubusercontent.com/u/532821?v=4', 'login': 'Techjar', 'gists_url': 'https://api.github.com/users/Techjar/gists{/gist_id}', 'html_url': 'https://github.com/Techjar', 'events_url': 'https://api.github.com/users/Techjar/events{/privacy}', 'id': 532821, 'site_admin': False, 'followers_url': 'https://api.github.com/users/Techjar/followers', 'subscriptions_url': 'https://api.github.com/users/Techjar/subscriptions', 'node_id': 'MDQ6VXNlcjUzMjgyMQ==', 'organizations_url': 'https://api.github.com/users/Techjar/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/Techjar/received_events', 'following_url': 'https://api.github.com/users/Techjar/following{/other_user}', 'repos_url': 'https://api.github.com/users/Techjar/repos', 'url': 'https://api.github.com/users/Techjar', 'starred_url': 'https://api.github.com/users/Techjar/starred{/owner}{/repo}'}}, 'safe_author': True, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'body': "It was consolidated into one option like EFB to RAM, so it's either texture only or texture+RAM (aka Hybrid XFB).", 'action': 'edited', 'title': 'Fix flickering in Metroid Prime: Trilogy.', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8507#issuecomment-561112971', 'author': 'Techjar'}
2019-12-03T10:51:43.582861	{'type': 'gh_issue_comment', 'id': 8507, 'raw': {'action': 'created', 'repository': {'fork': False, 'has_wiki': True, 'mirror_url': None, 'open_issues_count': 166, 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'forks': 1328, 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'html_url': 'https://github.com/dolphin-emu/dolphin', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'open_issues': 166, 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'language': 'C++', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'default_branch': 'master', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'watchers_count': 5790, 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'name': 'dolphin', 'size': 386665, 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'has_pages': False, 'has_issues': False, 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'disabled': False, 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'stargazers_count': 5790, 'created_at': '2013-07-22T09:07:57Z', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'archived': False, 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'full_name': 'dolphin-emu/dolphin', 'updated_at': '2019-12-03T03:03:56Z', 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'private': False, 'forks_count': 1328, 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'has_projects': False, 'owner': {'type': 'Organization', 'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'html_url': 'https://github.com/dolphin-emu', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'id': 5050316, 'site_admin': False, 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'url': 'https://api.github.com/users/dolphin-emu', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}'}, 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'has_downloads': True, 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'watchers': 5790, 'license': {'name': 'GNU General Public License v2.0', 'node_id': 'MDc6TGljZW5zZTg=', 'spdx_id': 'GPL-2.0', 'key': 'gpl-2.0', 'url': 'https://api.github.com/licenses/gpl-2.0'}, 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'homepage': 'https://dolphin-emu.org/', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'id': 11577304, 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'pushed_at': '2019-12-03T10:43:22Z', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}'}, 'comment': {'id': 561112971, 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8507', 'created_at': '2019-12-03T10:51:42Z', 'node_id': 'MDEyOklzc3VlQ29tbWVudDU2MTExMjk3MQ==', 'author_association': 'CONTRIBUTOR', 'body': "It was consolidated into one option like EFB to RAM, so it's either tecture only or texture+RAM (aka Hybrid XFB).", 'updated_at': '2019-12-03T10:51:42Z', 'user': {'type': 'User', 'avatar_url': 'https://avatars3.githubusercontent.com/u/532821?v=4', 'login': 'Techjar', 'gists_url': 'https://api.github.com/users/Techjar/gists{/gist_id}', 'html_url': 'https://github.com/Techjar', 'events_url': 'https://api.github.com/users/Techjar/events{/privacy}', 'id': 532821, 'site_admin': False, 'followers_url': 'https://api.github.com/users/Techjar/followers', 'subscriptions_url': 'https://api.github.com/users/Techjar/subscriptions', 'node_id': 'MDQ6VXNlcjUzMjgyMQ==', 'organizations_url': 'https://api.github.com/users/Techjar/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/Techjar/received_events', 'following_url': 'https://api.github.com/users/Techjar/following{/other_user}', 'repos_url': 'https://api.github.com/users/Techjar/repos', 'url': 'https://api.github.com/users/Techjar', 'starred_url': 'https://api.github.com/users/Techjar/starred{/owner}{/repo}'}, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/561112971', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8507#issuecomment-561112971'}, 'organization': {'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'description': '', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events', 'id': 5050316, 'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'url': 'https://api.github.com/orgs/dolphin-emu'}, 'issue': {'created_at': '2019-12-03T09:39:31Z', 'assignees': [], 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8507/labels{/name}', 'milestone': None, 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'number': 8507, 'updated_at': '2019-12-03T10:51:43Z', 'node_id': 'MDExOlB1bGxSZXF1ZXN0MzQ4MjIyMDg2', 'author_association': 'NONE', 'labels': [], 'state': 'open', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8507', 'user': {'type': 'User', 'avatar_url': 'https://avatars3.githubusercontent.com/u/43527795?v=4', 'login': 'SubsonicBeatz154', 'gists_url': 'https://api.github.com/users/SubsonicBeatz154/gists{/gist_id}', 'html_url': 'https://github.com/SubsonicBeatz154', 'events_url': 'https://api.github.com/users/SubsonicBeatz154/events{/privacy}', 'id': 43527795, 'site_admin': False, 'followers_url': 'https://api.github.com/users/SubsonicBeatz154/followers', 'subscriptions_url': 'https://api.github.com/users/SubsonicBeatz154/subscriptions', 'node_id': 'MDQ6VXNlcjQzNTI3Nzk1', 'organizations_url': 'https://api.github.com/users/SubsonicBeatz154/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/SubsonicBeatz154/received_events', 'following_url': 'https://api.github.com/users/SubsonicBeatz154/following{/other_user}', 'repos_url': 'https://api.github.com/users/SubsonicBeatz154/repos', 'url': 'https://api.github.com/users/SubsonicBeatz154', 'starred_url': 'https://api.github.com/users/SubsonicBeatz154/starred{/owner}{/repo}'}, 'locked': False, 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8507', 'body': 'Enabled SyncGPU, this fixes the flickering and black bar issues that have plagued the game for the longest of times. At a pretty substantial performance cost unfortunately... SyncGPU is the only way to fix those issues, the wiki is wrong and lists them as already having been fixed.\r\n\r\nSet ImmediateXFBEnable and XFBToTextureEnable to true, this way if the user chooses to disable SyncGPU manually for performance reasons, they will get the black bar instead of the horrible flickering.\r\n\r\nAlso updated the game name in the GameINI to read as Metroid Prime: Trilogy instead of Metroid Prime Trilogy. Metroid Prime: Trilogy is the correct name according to the name in the game list.\r\n\r\nNone of these changes interfere with the effectiveness of the previous PR that fixed the loading screens.', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8507/events', 'id': 531850427, 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8507/comments', 'title': 'Fix flickering in Metroid Prime: Trilogy.', 'comments': 22, 'closed_at': None, 'pull_request': {'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/8507.patch', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/8507.diff', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8507', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8507'}, 'assignee': None}, 'sender': {'type': 'User', 'avatar_url': 'https://avatars3.githubusercontent.com/u/532821?v=4', 'login': 'Techjar', 'gists_url': 'https://api.github.com/users/Techjar/gists{/gist_id}', 'html_url': 'https://github.com/Techjar', 'events_url': 'https://api.github.com/users/Techjar/events{/privacy}', 'id': 532821, 'site_admin': False, 'followers_url': 'https://api.github.com/users/Techjar/followers', 'subscriptions_url': 'https://api.github.com/users/Techjar/subscriptions', 'node_id': 'MDQ6VXNlcjUzMjgyMQ==', 'organizations_url': 'https://api.github.com/users/Techjar/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/Techjar/received_events', 'following_url': 'https://api.github.com/users/Techjar/following{/other_user}', 'repos_url': 'https://api.github.com/users/Techjar/repos', 'url': 'https://api.github.com/users/Techjar', 'starred_url': 'https://api.github.com/users/Techjar/starred{/owner}{/repo}'}}, 'safe_author': True, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'body': "It was consolidated into one option like EFB to RAM, so it's either tecture only or texture+RAM (aka Hybrid XFB).", 'action': 'created', 'title': 'Fix flickering in Metroid Prime: Trilogy.', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8507#issuecomment-561112971', 'author': 'Techjar'}

Recent 'gh_pull_request' events

2019-12-06T21:30:28.925793	{'type': 'gh_pull_request', 'action': 'synchronize', 'head_sha': '8fa12028d58be5f2e3e86fe5abc4401b512e995e', 'safe_author': True, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8268', 'id': 8268, 'head_ref_name': 'balance-board', 'title': '[WIP] Balance Board emulation', 'base_sha': '5a5c46a8b15990e1e38636d017c28572e4370745', 'requested_reviewers': [], 'merged': False, 'author': 'Pokechu22'}
2019-12-06T17:14:44.911578	{'type': 'gh_pull_request', 'action': 'opened', 'head_sha': '345152b1486f037d65069de4654a08312d014323', 'safe_author': False, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8515', 'id': 8515, 'head_ref_name': 'gradle-353', 'title': 'Android: update to Gradle 3.5.3', 'base_sha': '5a5c46a8b15990e1e38636d017c28572e4370745', 'requested_reviewers': [], 'merged': False, 'author': 'Simonx22'}
2019-12-06T16:00:44.322230	{'type': 'gh_pull_request', 'action': 'closed', 'head_sha': '81edcca8db0bbbe9904956d7038bd1a2abdd9a87', 'safe_author': True, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8514', 'id': 8514, 'head_ref_name': 'sview', 'title': 'Common/Network: Make StringToMacAddress use a string_view ', 'base_sha': '15fc71cfcf5f94221443aaff99ae559fa3cb4633', 'requested_reviewers': [], 'merged': True, 'author': 'JosJuice'}
2019-12-06T14:59:51.426407	{'type': 'gh_pull_request', 'action': 'synchronize', 'head_sha': '81edcca8db0bbbe9904956d7038bd1a2abdd9a87', 'safe_author': True, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8514', 'id': 8514, 'head_ref_name': 'sview', 'title': 'Common/Network: Make StringToMacAddress use a string_view ', 'base_sha': '15fc71cfcf5f94221443aaff99ae559fa3cb4633', 'requested_reviewers': [], 'merged': False, 'author': 'lioncash'}
2019-12-06T14:54:40.593320	{'type': 'gh_pull_request', 'action': 'opened', 'head_sha': 'cbfacc41bab03f0171981a64fe90949bc2456d3e', 'safe_author': True, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8514', 'id': 8514, 'head_ref_name': 'sview', 'title': 'Common/Network: Make StringToMacAddress use a string_view ', 'base_sha': '15fc71cfcf5f94221443aaff99ae559fa3cb4633', 'requested_reviewers': [], 'merged': False, 'author': 'lioncash'}
2019-12-06T10:24:10.508659	{'type': 'gh_pull_request', 'action': 'review_requested', 'head_sha': '6de75214bb47973a88a6fdea8ed4e7844df0f65f', 'safe_author': True, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8505', 'id': 8505, 'head_ref_name': 'fix-signed-unsigned-mismatches', 'title': 'Re-enable signed/unsigned mismatch warnings', 'base_sha': '15fc71cfcf5f94221443aaff99ae559fa3cb4633', 'requested_reviewers': [{'type': 'User', 'avatar_url': 'https://avatars1.githubusercontent.com/u/712067?v=4', 'login': 'lioncash', 'gists_url': 'https://api.github.com/users/lioncash/gists{/gist_id}', 'html_url': 'https://github.com/lioncash', 'events_url': 'https://api.github.com/users/lioncash/events{/privacy}', 'id': 712067, 'site_admin': False, 'followers_url': 'https://api.github.com/users/lioncash/followers', 'subscriptions_url': 'https://api.github.com/users/lioncash/subscriptions', 'node_id': 'MDQ6VXNlcjcxMjA2Nw==', 'organizations_url': 'https://api.github.com/users/lioncash/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/lioncash/received_events', 'following_url': 'https://api.github.com/users/lioncash/following{/other_user}', 'repos_url': 'https://api.github.com/users/lioncash/repos', 'url': 'https://api.github.com/users/lioncash', 'starred_url': 'https://api.github.com/users/lioncash/starred{/owner}{/repo}'}], 'merged': False, 'author': 'CookiePLMonster'}
2019-12-06T06:19:57.713648	{'type': 'gh_pull_request', 'action': 'edited', 'head_sha': '5d0bf9698e9730b9e6cb4396323521e03a457547', 'safe_author': False, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8492', 'id': 8492, 'head_ref_name': 'ios', 'title': '[RFC / WIP] iOS support with working JIT', 'base_sha': 'ba8b5bea11596c6ed2cb710dd35796ae750f6bd7', 'requested_reviewers': [{'type': 'User', 'avatar_url': 'https://avatars1.githubusercontent.com/u/712067?v=4', 'login': 'lioncash', 'gists_url': 'https://api.github.com/users/lioncash/gists{/gist_id}', 'html_url': 'https://github.com/lioncash', 'events_url': 'https://api.github.com/users/lioncash/events{/privacy}', 'id': 712067, 'site_admin': False, 'followers_url': 'https://api.github.com/users/lioncash/followers', 'subscriptions_url': 'https://api.github.com/users/lioncash/subscriptions', 'node_id': 'MDQ6VXNlcjcxMjA2Nw==', 'organizations_url': 'https://api.github.com/users/lioncash/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/lioncash/received_events', 'following_url': 'https://api.github.com/users/lioncash/following{/other_user}', 'repos_url': 'https://api.github.com/users/lioncash/repos', 'url': 'https://api.github.com/users/lioncash', 'starred_url': 'https://api.github.com/users/lioncash/starred{/owner}{/repo}'}], 'merged': False, 'author': 'OatmealDome'}
2019-12-05T19:02:51.257445	{'type': 'gh_pull_request', 'action': 'synchronize', 'head_sha': 'b3b208e05ac15f0668a7bed8c2f9ee3fc1874fd2', 'safe_author': True, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8510', 'id': 8510, 'head_ref_name': 'tex-convert', 'title': 'VideoCommon/TextureConversionShader: Migrate generation off sprintf', 'base_sha': '15fc71cfcf5f94221443aaff99ae559fa3cb4633', 'requested_reviewers': [], 'merged': False, 'author': 'lioncash'}
2019-12-05T17:03:56.299201	{'type': 'gh_pull_request', 'action': 'opened', 'head_sha': '2c9ec6cb8abba5a4dfd7a3792b0d866ed4898118', 'safe_author': True, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8513', 'id': 8513, 'head_ref_name': 'bounding-box', 'title': 'VideoCommon/BoundingBox: Make interface for querying bounding box data', 'base_sha': '15fc71cfcf5f94221443aaff99ae559fa3cb4633', 'requested_reviewers': [], 'merged': False, 'author': 'lioncash'}
2019-12-05T15:49:44.105785	{'type': 'gh_pull_request', 'action': 'synchronize', 'head_sha': '10f76746515a9a7bd8122f40c33b65813aa17b38', 'safe_author': True, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8512', 'id': 8512, 'head_ref_name': 'index', 'title': 'VideoCommon/IndexGenerator: Eliminate static state', 'base_sha': '15fc71cfcf5f94221443aaff99ae559fa3cb4633', 'requested_reviewers': [], 'merged': False, 'author': 'lioncash'}
2019-12-05T15:47:40.641724	{'type': 'gh_pull_request', 'action': 'opened', 'head_sha': 'b74b53a2f9cb420f1be34dba7c967be3cba42837', 'safe_author': True, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8512', 'id': 8512, 'head_ref_name': 'index', 'title': 'VideoCommon/IndexGenerator: Eliminate static state', 'base_sha': '15fc71cfcf5f94221443aaff99ae559fa3cb4633', 'requested_reviewers': [], 'merged': False, 'author': 'lioncash'}
2019-12-05T14:13:23.365848	{'type': 'gh_pull_request', 'action': 'synchronize', 'head_sha': '1f46a6a64bfaade4550276879b475511fd11f136', 'safe_author': True, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8511', 'id': 8511, 'head_ref_name': 'if-constexpr', 'title': 'VideoCommon/OpcodeDecoding: Make use of if constexpr ', 'base_sha': '15fc71cfcf5f94221443aaff99ae559fa3cb4633', 'requested_reviewers': [], 'merged': False, 'author': 'lioncash'}
2019-12-05T14:11:18.738434	{'type': 'gh_pull_request', 'action': 'opened', 'head_sha': 'f08d39e31185752b25eb09d8212998ce1452d5f9', 'safe_author': True, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8511', 'id': 8511, 'head_ref_name': 'if-constexpr', 'title': 'VideoCommon/OpcodeDecoding: Make use of if constexpr ', 'base_sha': '15fc71cfcf5f94221443aaff99ae559fa3cb4633', 'requested_reviewers': [], 'merged': False, 'author': 'lioncash'}
2019-12-05T08:04:08.104373	{'type': 'gh_pull_request', 'action': 'synchronize', 'head_sha': '69691d593793c738769fa22643cdca86e9e60ec2', 'safe_author': True, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8510', 'id': 8510, 'head_ref_name': 'tex-convert', 'title': 'VideoCommon/TextureConversionShader: Migrate generation off sprintf', 'base_sha': '15fc71cfcf5f94221443aaff99ae559fa3cb4633', 'requested_reviewers': [], 'merged': False, 'author': 'lioncash'}
2019-12-05T08:01:56.902984	{'type': 'gh_pull_request', 'action': 'opened', 'head_sha': 'ba8497529a2a75bd6a4c8fb97009036b1dbc5bf8', 'safe_author': True, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8510', 'id': 8510, 'head_ref_name': 'tex-convert', 'title': 'VideoCommon/TextureConversionShader: Migrate generation off sprintf', 'base_sha': '15fc71cfcf5f94221443aaff99ae559fa3cb4633', 'requested_reviewers': [], 'merged': False, 'author': 'lioncash'}
2019-12-05T05:19:16.275670	{'type': 'gh_pull_request', 'action': 'synchronize', 'head_sha': 'f29730944fbcda8207504b8ee8a22907e754b5ef', 'safe_author': True, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8509', 'id': 8509, 'head_ref_name': 'shader-str', 'title': 'VideoCommon/FramebufferShaderGen: Minor clean up', 'base_sha': '15fc71cfcf5f94221443aaff99ae559fa3cb4633', 'requested_reviewers': [], 'merged': False, 'author': 'lioncash'}
2019-12-05T05:12:50.080412	{'type': 'gh_pull_request', 'action': 'opened', 'head_sha': 'c46b53d88e5d06140521559906254619bc2cfe67', 'safe_author': True, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8509', 'id': 8509, 'head_ref_name': 'shader-str', 'title': 'VideoCommon/FramebufferShaderGen: Minor clean up', 'base_sha': '15fc71cfcf5f94221443aaff99ae559fa3cb4633', 'requested_reviewers': [], 'merged': False, 'author': 'lioncash'}
2019-12-04T22:22:32.155843	{'type': 'gh_pull_request', 'action': 'synchronize', 'head_sha': '965781ea9dd13b9d3f1739d489cc842e6ae25597', 'safe_author': True, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8451', 'id': 8451, 'head_ref_name': 'motion-input-nunchuk', 'title': 'Add motion input support to nunchuk', 'base_sha': '15fc71cfcf5f94221443aaff99ae559fa3cb4633', 'requested_reviewers': [], 'merged': False, 'author': 'rlnilsen'}
2019-12-04T21:30:39.357252	{'type': 'gh_pull_request', 'action': 'labeled', 'head_sha': '4589c8a34dc360c28fb5904c71bf2617a96982b6', 'safe_author': False, 'source': 'ghhookparser', 'repo': 'dolphin-emu/www', 'base_ref_name': 'stable', 'url': 'https://github.com/dolphin-emu/www/pull/108', 'id': 108, 'head_ref_name': 'dependabot/pip/django-2.2.8', 'title': 'build(deps): bump django from 2.2.6 to 2.2.8', 'base_sha': '2d34145c3039741046e0854b2f22e9cf8a8d5f58', 'requested_reviewers': [], 'merged': False, 'author': 'dependabot[bot]'}
2019-12-04T21:30:39.164869	{'type': 'gh_pull_request', 'action': 'opened', 'head_sha': '4589c8a34dc360c28fb5904c71bf2617a96982b6', 'safe_author': False, 'source': 'ghhookparser', 'repo': 'dolphin-emu/www', 'base_ref_name': 'stable', 'url': 'https://github.com/dolphin-emu/www/pull/108', 'id': 108, 'head_ref_name': 'dependabot/pip/django-2.2.8', 'title': 'build(deps): bump django from 2.2.6 to 2.2.8', 'base_sha': '2d34145c3039741046e0854b2f22e9cf8a8d5f58', 'requested_reviewers': [], 'merged': False, 'author': 'dependabot[bot]'}
2019-12-04T21:07:45.634571	{'type': 'gh_pull_request', 'action': 'synchronize', 'head_sha': '6de75214bb47973a88a6fdea8ed4e7844df0f65f', 'safe_author': True, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8505', 'id': 8505, 'head_ref_name': 'fix-signed-unsigned-mismatches', 'title': 'Re-enable signed/unsigned mismatch warnings', 'base_sha': '15fc71cfcf5f94221443aaff99ae559fa3cb4633', 'requested_reviewers': [], 'merged': False, 'author': 'CookiePLMonster'}
2019-12-04T18:52:06.437985	{'type': 'gh_pull_request', 'action': 'synchronize', 'head_sha': 'b1103da0a4bf5a44d681be3c5872fc6940dbcd48', 'safe_author': True, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8394', 'id': 8394, 'head_ref_name': 'misc-di-gpio', 'title': 'Various DI improvements', 'base_sha': '15fc71cfcf5f94221443aaff99ae559fa3cb4633', 'requested_reviewers': [], 'merged': False, 'author': 'Pokechu22'}
2019-12-04T05:16:50.007877	{'type': 'gh_pull_request', 'action': 'synchronize', 'head_sha': '1fa151f1b6e0c27ab7f1651b00abbf30ebc71d8a', 'safe_author': True, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8394', 'id': 8394, 'head_ref_name': 'misc-di-gpio', 'title': 'Various DI improvements', 'base_sha': '15fc71cfcf5f94221443aaff99ae559fa3cb4633', 'requested_reviewers': [], 'merged': False, 'author': 'Pokechu22'}
2019-12-04T01:36:53.613785	{'type': 'gh_pull_request', 'action': 'synchronize', 'head_sha': '71a37666a5c6167d2f4941284443a829e2141760', 'safe_author': True, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8394', 'id': 8394, 'head_ref_name': 'misc-di-gpio', 'title': 'Various DI improvements', 'base_sha': '15fc71cfcf5f94221443aaff99ae559fa3cb4633', 'requested_reviewers': [], 'merged': False, 'author': 'Pokechu22'}
2019-12-03T21:31:15.131502	{'type': 'gh_pull_request', 'action': 'synchronize', 'head_sha': '1e3c4e7c861e257d8fb06b6f48f8c2d5e002a367', 'safe_author': True, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8394', 'id': 8394, 'head_ref_name': 'misc-di-gpio', 'title': 'Various DI improvements', 'base_sha': '15fc71cfcf5f94221443aaff99ae559fa3cb4633', 'requested_reviewers': [], 'merged': False, 'author': 'Pokechu22'}

Recent 'gh_pull_request_comment' events

2019-12-06T14:57:08.211694	{'type': 'gh_pull_request_comment', 'id': 8514, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'is_part_of_review': False, 'action': 'created', 'hash': 'cbfacc41bab03f0171981a64fe90949bc2456d3e', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8514#discussion_r354871955', 'author': 'CookiePLMonster'}
2019-12-06T10:38:57.946788	{'type': 'gh_pull_request_comment', 'id': 8512, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'is_part_of_review': False, 'action': 'created', 'hash': '10f76746515a9a7bd8122f40c33b65813aa17b38', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8512#discussion_r354768238', 'author': 'lioncash'}
2019-12-06T10:37:55.650520	{'type': 'gh_pull_request_comment', 'id': 8512, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'is_part_of_review': False, 'action': 'deleted', 'hash': '10f76746515a9a7bd8122f40c33b65813aa17b38', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8512#discussion_r354767749', 'author': 'lioncash'}
2019-12-06T10:37:37.671655	{'type': 'gh_pull_request_comment', 'id': 8512, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'is_part_of_review': False, 'action': 'created', 'hash': '10f76746515a9a7bd8122f40c33b65813aa17b38', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8512#discussion_r354767749', 'author': 'lioncash'}
2019-12-06T10:30:53.119149	{'type': 'gh_pull_request_comment', 'id': 8512, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'is_part_of_review': False, 'action': 'created', 'hash': '10f76746515a9a7bd8122f40c33b65813aa17b38', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8512#discussion_r354765117', 'author': 'CookiePLMonster'}
2019-12-06T10:29:00.488212	{'type': 'gh_pull_request_comment', 'id': 8512, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'is_part_of_review': False, 'action': 'created', 'hash': '10f76746515a9a7bd8122f40c33b65813aa17b38', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8512#discussion_r354764238', 'author': 'lioncash'}
2019-12-06T08:54:02.976324	{'type': 'gh_pull_request_comment', 'id': 8512, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'is_part_of_review': False, 'action': 'created', 'hash': '10f76746515a9a7bd8122f40c33b65813aa17b38', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8512#discussion_r354721906', 'author': 'CookiePLMonster'}
2019-12-05T17:57:17.249087	{'type': 'gh_pull_request_comment', 'id': 8510, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'is_part_of_review': True, 'action': 'created', 'hash': '69691d593793c738769fa22643cdca86e9e60ec2', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8510#discussion_r354460975', 'author': 'BhaaLseN'}
2019-12-05T12:45:37.371227	{'type': 'gh_pull_request_comment', 'id': 8509, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'is_part_of_review': False, 'action': 'edited', 'hash': 'f29730944fbcda8207504b8ee8a22907e754b5ef', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8509#discussion_r354291470', 'author': 'lioncash'}
2019-12-05T12:45:23.729769	{'type': 'gh_pull_request_comment', 'id': 8509, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'is_part_of_review': False, 'action': 'created', 'hash': 'f29730944fbcda8207504b8ee8a22907e754b5ef', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8509#discussion_r354291470', 'author': 'lioncash'}
2019-12-05T11:17:43.205968	{'type': 'gh_pull_request_comment', 'id': 8509, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'is_part_of_review': True, 'action': 'created', 'hash': 'f29730944fbcda8207504b8ee8a22907e754b5ef', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8509#discussion_r354250042', 'author': 'CookiePLMonster'}
2019-12-05T09:54:47.601337	{'type': 'gh_pull_request_comment', 'id': 8509, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'is_part_of_review': True, 'action': 'created', 'hash': 'f29730944fbcda8207504b8ee8a22907e754b5ef', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8509#discussion_r354205673', 'author': 'lioncash'}
2019-12-05T08:37:07.152407	{'type': 'gh_pull_request_comment', 'id': 8509, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'is_part_of_review': False, 'action': 'created', 'hash': 'f29730944fbcda8207504b8ee8a22907e754b5ef', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8509#discussion_r354168043', 'author': 'CookiePLMonster'}
2019-12-05T05:20:28.315788	{'type': 'gh_pull_request_comment', 'id': 8509, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'is_part_of_review': False, 'action': 'deleted', 'hash': 'f29730944fbcda8207504b8ee8a22907e754b5ef', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8509#discussion_r354114374', 'author': 'Warepire'}
2019-12-05T05:19:56.778196	{'type': 'gh_pull_request_comment', 'id': 8509, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'is_part_of_review': True, 'action': 'created', 'hash': 'f29730944fbcda8207504b8ee8a22907e754b5ef', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8509#discussion_r354114374', 'author': 'Warepire'}
2019-12-04T21:33:55.046962	{'type': 'gh_pull_request_comment', 'id': 8451, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'is_part_of_review': True, 'action': 'created', 'hash': 'cd90e2d55af7b67a3c29309ab2197c24b723b199', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8451#discussion_r353992013', 'author': 'jordan-woyak'}
2019-12-04T21:33:54.702570	{'type': 'gh_pull_request_comment', 'id': 8451, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'is_part_of_review': True, 'action': 'created', 'hash': 'cd90e2d55af7b67a3c29309ab2197c24b723b199', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8451#discussion_r353993004', 'author': 'jordan-woyak'}
2019-12-04T21:33:54.250056	{'type': 'gh_pull_request_comment', 'id': 8451, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'is_part_of_review': True, 'action': 'created', 'hash': 'cd90e2d55af7b67a3c29309ab2197c24b723b199', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8451#discussion_r353991927', 'author': 'jordan-woyak'}
2019-12-03T20:39:11.412069	{'type': 'gh_pull_request_comment', 'id': 8505, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'is_part_of_review': True, 'action': 'created', 'hash': 'd3c054122ee778ae0d62900a3175469ab8f11a6c', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8505#discussion_r353409569', 'author': 'CookiePLMonster'}
2019-12-03T20:37:32.657871	{'type': 'gh_pull_request_comment', 'id': 8505, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'is_part_of_review': True, 'action': 'created', 'hash': 'd3c054122ee778ae0d62900a3175469ab8f11a6c', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8505#discussion_r353408921', 'author': 'CookiePLMonster'}
2019-12-03T20:07:16.064310	{'type': 'gh_pull_request_comment', 'id': 8505, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'is_part_of_review': False, 'action': 'created', 'hash': 'd3c054122ee778ae0d62900a3175469ab8f11a6c', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8505#discussion_r353396134', 'author': 'CookiePLMonster'}
2019-12-03T17:05:35.884121	{'type': 'gh_pull_request_comment', 'id': 8505, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'is_part_of_review': True, 'action': 'created', 'hash': 'd3c054122ee778ae0d62900a3175469ab8f11a6c', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8505#discussion_r353306008', 'author': 'BhaaLseN'}
2019-12-03T10:24:29.556311	{'type': 'gh_pull_request_comment', 'id': 8508, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'is_part_of_review': False, 'action': 'created', 'hash': '0f28f4049ba1df95ba038419f00ef8f75c5260f9', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8508#discussion_r353094110', 'author': 'lioncash'}
2019-12-03T10:22:15.565497	{'type': 'gh_pull_request_comment', 'id': 8508, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'is_part_of_review': False, 'action': 'created', 'hash': '0f28f4049ba1df95ba038419f00ef8f75c5260f9', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8508#discussion_r353092988', 'author': 'CookiePLMonster'}
2019-12-03T10:17:55.376317	{'type': 'gh_pull_request_comment', 'id': 8508, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'is_part_of_review': True, 'action': 'created', 'hash': '0f28f4049ba1df95ba038419f00ef8f75c5260f9', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8508#discussion_r353090298', 'author': 'CookiePLMonster'}

Recent 'gh_pull_request_review' events

2019-12-06T15:02:42.159761	{'type': 'gh_pull_request_review', 'pr_id': 8514, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'action': 'submitted', 'pr_title': 'Common/Network: Make StringToMacAddress use a string_view ', 'comments': [], 'state': 'approved', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8514#pullrequestreview-328258121', 'author': 'CookiePLMonster'}
2019-12-06T14:57:08.209814	{'type': 'gh_pull_request_review', 'pr_id': 8514, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'action': 'submitted', 'pr_title': 'Common/Network: Make StringToMacAddress use a string_view ', 'comments': [{'created_at': '2019-12-06T14:57:06Z', 'user': {'type': 'User', 'avatar_url': 'https://avatars1.githubusercontent.com/u/7947461?v=4', 'login': 'CookiePLMonster', 'gists_url': 'https://api.github.com/users/CookiePLMonster/gists{/gist_id}', 'html_url': 'https://github.com/CookiePLMonster', 'events_url': 'https://api.github.com/users/CookiePLMonster/events{/privacy}', 'id': 7947461, 'site_admin': False, 'followers_url': 'https://api.github.com/users/CookiePLMonster/followers', 'subscriptions_url': 'https://api.github.com/users/CookiePLMonster/subscriptions', 'node_id': 'MDQ6VXNlcjc5NDc0NjE=', 'organizations_url': 'https://api.github.com/users/CookiePLMonster/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/CookiePLMonster/received_events', 'following_url': 'https://api.github.com/users/CookiePLMonster/following{/other_user}', 'repos_url': 'https://api.github.com/users/CookiePLMonster/repos', 'url': 'https://api.github.com/users/CookiePLMonster', 'starred_url': 'https://api.github.com/users/CookiePLMonster/starred{/owner}{/repo}'}, 'original_commit_id': 'cbfacc41bab03f0171981a64fe90949bc2456d3e', 'pull_request_review_id': 328254597, 'diff_hunk': '@@ -43,7 +41,7 @@ std::string MacAddressToString(const MACAddress& mac)\n                      mac[4], mac[5]);\n }\n \n-std::optional<MACAddress> StringToMacAddress(const std::string& mac_string)\n+std::optional<MACAddress> StringToMacAddress(std::string_view mac_string)\n {\n   if (mac_string.empty())\n     return {};', 'original_position': 17, 'body': 'You yourself recommended `std::nullopt` a while back, would be a good fit there. Since this PR only touches a single function, I see no reason not to go for it together with `string_view` change.', 'commit_id': 'cbfacc41bab03f0171981a64fe90949bc2456d3e', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8514#discussion_r354871955', 'id': 354871955, 'updated_at': '2019-12-06T14:57:06Z', 'node_id': 'MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDM1NDg3MTk1NQ==', 'author_association': 'MEMBER', 'path': 'Source/Core/Common/Network.cpp', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/354871955'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8514'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/8514#discussion_r354871955'}}, 'position': 17, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/354871955', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8514'}], 'state': 'commented', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8514#pullrequestreview-328254597', 'author': 'CookiePLMonster'}
2019-12-06T10:38:57.945705	{'type': 'gh_pull_request_review', 'pr_id': 8512, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'action': 'submitted', 'pr_title': 'VideoCommon/IndexGenerator: Eliminate static state', 'comments': [{'created_at': '2019-12-06T10:38:56Z', 'user': {'type': 'User', 'avatar_url': 'https://avatars1.githubusercontent.com/u/712067?v=4', 'login': 'lioncash', 'gists_url': 'https://api.github.com/users/lioncash/gists{/gist_id}', 'html_url': 'https://github.com/lioncash', 'events_url': 'https://api.github.com/users/lioncash/events{/privacy}', 'id': 712067, 'site_admin': False, 'followers_url': 'https://api.github.com/users/lioncash/followers', 'subscriptions_url': 'https://api.github.com/users/lioncash/subscriptions', 'node_id': 'MDQ6VXNlcjcxMjA2Nw==', 'organizations_url': 'https://api.github.com/users/lioncash/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/lioncash/received_events', 'following_url': 'https://api.github.com/users/lioncash/following{/other_user}', 'repos_url': 'https://api.github.com/users/lioncash/repos', 'url': 'https://api.github.com/users/lioncash', 'starred_url': 'https://api.github.com/users/lioncash/starred{/owner}{/repo}'}, 'original_commit_id': '10f76746515a9a7bd8122f40c33b65813aa17b38', 'pull_request_review_id': 328122194, 'diff_hunk': '@@ -182,77 +133,122 @@ u16* IndexGenerator::AddFan(u16* Iptr, u32 numVerts, u32 index)\n  * ZWW do this for sun rays\n  */\n template <bool pr>\n-u16* IndexGenerator::AddQuads(u16* Iptr, u32 numVerts, u32 index)\n+u16* AddQuads(u16* index_ptr, u32 num_verts, u32 index)\n {\n   u32 i = 3;\n-  for (; i < numVerts; i += 4)\n+  for (; i < num_verts; i += 4)\n   {\n-    if (pr)\n+    if constexpr (pr)\n     {\n-      *Iptr++ = index + i - 2;\n-      *Iptr++ = index + i - 1;\n-      *Iptr++ = index + i - 3;\n-      *Iptr++ = index + i - 0;\n-      *Iptr++ = s_primitive_restart;\n+      *index_ptr++ = index + i - 2;\n+      *index_ptr++ = index + i - 1;\n+      *index_ptr++ = index + i - 3;\n+      *index_ptr++ = index + i - 0;\n+      *index_ptr++ = s_primitive_restart;\n     }\n     else\n     {\n-      Iptr = WriteTriangle<pr>(Iptr, index + i - 3, index + i - 2, index + i - 1);\n-      Iptr = WriteTriangle<pr>(Iptr, index + i - 3, index + i - 1, index + i - 0);\n+      index_ptr = WriteTriangle<pr>(index_ptr, index + i - 3, index + i - 2, index + i - 1);\n+      index_ptr = WriteTriangle<pr>(index_ptr, index + i - 3, index + i - 1, index + i - 0);\n     }\n   }\n \n   // three vertices remaining, so render a triangle\n-  if (i == numVerts)\n+  if (i == num_verts)\n   {\n-    Iptr =\n-        WriteTriangle<pr>(Iptr, index + numVerts - 3, index + numVerts - 2, index + numVerts - 1);\n+    index_ptr = WriteTriangle<pr>(index_ptr, index + num_verts - 3, index + num_verts - 2,\n+                                  index + num_verts - 1);\n   }\n-  return Iptr;\n+  return index_ptr;\n }\n \n template <bool pr>\n-u16* IndexGenerator::AddQuads_nonstandard(u16* Iptr, u32 numVerts, u32 index)\n+u16* AddQuads_nonstandard(u16* index_ptr, u32 num_verts, u32 index)\n {\n   WARN_LOG(VIDEO, "Non-standard primitive drawing command GL_DRAW_QUADS_2");\n-  return AddQuads<pr>(Iptr, numVerts, index);\n+  return AddQuads<pr>(index_ptr, num_verts, index);\n }\n \n-// Lines\n-u16* IndexGenerator::AddLineList(u16* Iptr, u32 numVerts, u32 index)\n+u16* AddLineList(u16* index_ptr, u32 num_verts, u32 index)\n {\n-  for (u32 i = 1; i < numVerts; i += 2)\n+  for (u32 i = 1; i < num_verts; i += 2)\n   {\n-    *Iptr++ = index + i - 1;\n-    *Iptr++ = index + i;\n+    *index_ptr++ = index + i - 1;\n+    *index_ptr++ = index + i;\n   }\n-  return Iptr;\n+  return index_ptr;\n }\n \n-// shouldn\'t be used as strips as LineLists are much more common\n+// Shouldn\'t be used as strips as LineLists are much more common\n // so converting them to lists\n-u16* IndexGenerator::AddLineStrip(u16* Iptr, u32 numVerts, u32 index)\n+u16* AddLineStrip(u16* index_ptr, u32 num_verts, u32 index)\n {\n-  for (u32 i = 1; i < numVerts; ++i)\n+  for (u32 i = 1; i < num_verts; ++i)\n   {\n-    *Iptr++ = index + i - 1;\n-    *Iptr++ = index + i;\n+    *index_ptr++ = index + i - 1;\n+    *index_ptr++ = index + i;\n   }\n-  return Iptr;\n+  return index_ptr;\n }\n \n-// Points\n-u16* IndexGenerator::AddPoints(u16* Iptr, u32 numVerts, u32 index)\n+u16* AddPoints(u16* index_ptr, u32 num_verts, u32 index)\n {\n-  for (u32 i = 0; i != numVerts; ++i)\n+  for (u32 i = 0; i != num_verts; ++i)\n+  {\n+    *index_ptr++ = index + i;\n+  }\n+  return index_ptr;\n+}\n+}  // Anonymous namespace\n+\n+void IndexGenerator::Init()\n+{\n+  if (g_Config.backend_info.bSupportsPrimitiveRestart)\n+  {\n+    m_primitive_table[OpcodeDecoder::GX_DRAW_QUADS] = AddQuads<true>;\n+    m_primitive_table[OpcodeDecoder::GX_DRAW_QUADS_2] = AddQuads_nonstandard<true>;\n+    m_primitive_table[OpcodeDecoder::GX_DRAW_TRIANGLES] = AddList<true>;\n+    m_primitive_table[OpcodeDecoder::GX_DRAW_TRIANGLE_STRIP] = AddStrip<true>;\n+    m_primitive_table[OpcodeDecoder::GX_DRAW_TRIANGLE_FAN] = AddFan<true>;\n+  }\n+  else\n   {\n-    *Iptr++ = index + i;\n+    m_primitive_table[OpcodeDecoder::GX_DRAW_QUADS] = AddQuads<false>;\n+    m_primitive_table[OpcodeDecoder::GX_DRAW_QUADS_2] = AddQuads_nonstandard<false>;\n+    m_primitive_table[OpcodeDecoder::GX_DRAW_TRIANGLES] = AddList<false>;\n+    m_primitive_table[OpcodeDecoder::GX_DRAW_TRIANGLE_STRIP] = AddStrip<false>;\n+    m_primitive_table[OpcodeDecoder::GX_DRAW_TRIANGLE_FAN] = AddFan<false>;\n   }\n-  return Iptr;\n+  m_primitive_table[OpcodeDecoder::GX_DRAW_LINES] = AddLineList;\n+  m_primitive_table[OpcodeDecoder::GX_DRAW_LINE_STRIP] = AddLineStrip;\n+  m_primitive_table[OpcodeDecoder::GX_DRAW_POINTS] = AddPoints;\n }\n \n-u32 IndexGenerator::GetRemainingIndices()\n+void IndexGenerator::Start(u16* index_ptr)\n {\n-  u32 max_index = 65534;  // -1 is reserved for primitive restart (ogl + dx11)\n-  return max_index - base_index;\n+  m_index_buffer_current = index_ptr;\n+  m_base_index_ptr = index_ptr;\n+  m_base_index = 0;\n+}\n+\n+void IndexGenerator::AddIndices(int primitive, u32 num_vertices)\n+{\n+  m_index_buffer_current =\n+      m_primitive_table[primitive](m_index_buffer_current, num_vertices, m_base_index);\n+  m_base_index += num_vertices;\n+}\n+\n+void IndexGenerator::AddExternalIndices(const u16* indices, u32 num_indices, u32 num_vertices)\n+{\n+  std::memcpy(m_index_buffer_current, indices, sizeof(u16) * num_indices);', 'original_position': 341, 'body': "Yes. I've changed the line because we follow a naming convention for member variables in classes. This does not mean I also need to resolve everything else related to that line within an unrelated PR. The purpose of this change is to eliminate static state in the class, which it does. It does not try to address anything else with the interface.", 'commit_id': '10f76746515a9a7bd8122f40c33b65813aa17b38', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8512#discussion_r354768238', 'id': 354768238, 'updated_at': '2019-12-06T10:38:56Z', 'node_id': 'MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDM1NDc2ODIzOA==', 'author_association': 'MEMBER', 'path': 'Source/Core/VideoCommon/IndexGenerator.cpp', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/354768238'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8512'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/8512#discussion_r354768238'}}, 'position': 341, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/354768238', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8512', 'in_reply_to_id': 354721906}], 'state': 'commented', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8512#pullrequestreview-328122194', 'author': 'lioncash'}
2019-12-06T10:37:38.019545	{'type': 'gh_pull_request_review', 'pr_id': 8512, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'action': 'submitted', 'pr_title': 'VideoCommon/IndexGenerator: Eliminate static state', 'comments': [{'created_at': '2019-12-06T10:37:36Z', 'user': {'type': 'User', 'avatar_url': 'https://avatars1.githubusercontent.com/u/712067?v=4', 'login': 'lioncash', 'gists_url': 'https://api.github.com/users/lioncash/gists{/gist_id}', 'html_url': 'https://github.com/lioncash', 'events_url': 'https://api.github.com/users/lioncash/events{/privacy}', 'id': 712067, 'site_admin': False, 'followers_url': 'https://api.github.com/users/lioncash/followers', 'subscriptions_url': 'https://api.github.com/users/lioncash/subscriptions', 'node_id': 'MDQ6VXNlcjcxMjA2Nw==', 'organizations_url': 'https://api.github.com/users/lioncash/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/lioncash/received_events', 'following_url': 'https://api.github.com/users/lioncash/following{/other_user}', 'repos_url': 'https://api.github.com/users/lioncash/repos', 'url': 'https://api.github.com/users/lioncash', 'starred_url': 'https://api.github.com/users/lioncash/starred{/owner}{/repo}'}, 'original_commit_id': '10f76746515a9a7bd8122f40c33b65813aa17b38', 'pull_request_review_id': 328121587, 'diff_hunk': '@@ -182,77 +133,122 @@ u16* IndexGenerator::AddFan(u16* Iptr, u32 numVerts, u32 index)\n  * ZWW do this for sun rays\n  */\n template <bool pr>\n-u16* IndexGenerator::AddQuads(u16* Iptr, u32 numVerts, u32 index)\n+u16* AddQuads(u16* index_ptr, u32 num_verts, u32 index)\n {\n   u32 i = 3;\n-  for (; i < numVerts; i += 4)\n+  for (; i < num_verts; i += 4)\n   {\n-    if (pr)\n+    if constexpr (pr)\n     {\n-      *Iptr++ = index + i - 2;\n-      *Iptr++ = index + i - 1;\n-      *Iptr++ = index + i - 3;\n-      *Iptr++ = index + i - 0;\n-      *Iptr++ = s_primitive_restart;\n+      *index_ptr++ = index + i - 2;\n+      *index_ptr++ = index + i - 1;\n+      *index_ptr++ = index + i - 3;\n+      *index_ptr++ = index + i - 0;\n+      *index_ptr++ = s_primitive_restart;\n     }\n     else\n     {\n-      Iptr = WriteTriangle<pr>(Iptr, index + i - 3, index + i - 2, index + i - 1);\n-      Iptr = WriteTriangle<pr>(Iptr, index + i - 3, index + i - 1, index + i - 0);\n+      index_ptr = WriteTriangle<pr>(index_ptr, index + i - 3, index + i - 2, index + i - 1);\n+      index_ptr = WriteTriangle<pr>(index_ptr, index + i - 3, index + i - 1, index + i - 0);\n     }\n   }\n \n   // three vertices remaining, so render a triangle\n-  if (i == numVerts)\n+  if (i == num_verts)\n   {\n-    Iptr =\n-        WriteTriangle<pr>(Iptr, index + numVerts - 3, index + numVerts - 2, index + numVerts - 1);\n+    index_ptr = WriteTriangle<pr>(index_ptr, index + num_verts - 3, index + num_verts - 2,\n+                                  index + num_verts - 1);\n   }\n-  return Iptr;\n+  return index_ptr;\n }\n \n template <bool pr>\n-u16* IndexGenerator::AddQuads_nonstandard(u16* Iptr, u32 numVerts, u32 index)\n+u16* AddQuads_nonstandard(u16* index_ptr, u32 num_verts, u32 index)\n {\n   WARN_LOG(VIDEO, "Non-standard primitive drawing command GL_DRAW_QUADS_2");\n-  return AddQuads<pr>(Iptr, numVerts, index);\n+  return AddQuads<pr>(index_ptr, num_verts, index);\n }\n \n-// Lines\n-u16* IndexGenerator::AddLineList(u16* Iptr, u32 numVerts, u32 index)\n+u16* AddLineList(u16* index_ptr, u32 num_verts, u32 index)\n {\n-  for (u32 i = 1; i < numVerts; i += 2)\n+  for (u32 i = 1; i < num_verts; i += 2)\n   {\n-    *Iptr++ = index + i - 1;\n-    *Iptr++ = index + i;\n+    *index_ptr++ = index + i - 1;\n+    *index_ptr++ = index + i;\n   }\n-  return Iptr;\n+  return index_ptr;\n }\n \n-// shouldn\'t be used as strips as LineLists are much more common\n+// Shouldn\'t be used as strips as LineLists are much more common\n // so converting them to lists\n-u16* IndexGenerator::AddLineStrip(u16* Iptr, u32 numVerts, u32 index)\n+u16* AddLineStrip(u16* index_ptr, u32 num_verts, u32 index)\n {\n-  for (u32 i = 1; i < numVerts; ++i)\n+  for (u32 i = 1; i < num_verts; ++i)\n   {\n-    *Iptr++ = index + i - 1;\n-    *Iptr++ = index + i;\n+    *index_ptr++ = index + i - 1;\n+    *index_ptr++ = index + i;\n   }\n-  return Iptr;\n+  return index_ptr;\n }\n \n-// Points\n-u16* IndexGenerator::AddPoints(u16* Iptr, u32 numVerts, u32 index)\n+u16* AddPoints(u16* index_ptr, u32 num_verts, u32 index)\n {\n-  for (u32 i = 0; i != numVerts; ++i)\n+  for (u32 i = 0; i != num_verts; ++i)\n+  {\n+    *index_ptr++ = index + i;\n+  }\n+  return index_ptr;\n+}\n+}  // Anonymous namespace\n+\n+void IndexGenerator::Init()\n+{\n+  if (g_Config.backend_info.bSupportsPrimitiveRestart)\n+  {\n+    m_primitive_table[OpcodeDecoder::GX_DRAW_QUADS] = AddQuads<true>;\n+    m_primitive_table[OpcodeDecoder::GX_DRAW_QUADS_2] = AddQuads_nonstandard<true>;\n+    m_primitive_table[OpcodeDecoder::GX_DRAW_TRIANGLES] = AddList<true>;\n+    m_primitive_table[OpcodeDecoder::GX_DRAW_TRIANGLE_STRIP] = AddStrip<true>;\n+    m_primitive_table[OpcodeDecoder::GX_DRAW_TRIANGLE_FAN] = AddFan<true>;\n+  }\n+  else\n   {\n-    *Iptr++ = index + i;\n+    m_primitive_table[OpcodeDecoder::GX_DRAW_QUADS] = AddQuads<false>;\n+    m_primitive_table[OpcodeDecoder::GX_DRAW_QUADS_2] = AddQuads_nonstandard<false>;\n+    m_primitive_table[OpcodeDecoder::GX_DRAW_TRIANGLES] = AddList<false>;\n+    m_primitive_table[OpcodeDecoder::GX_DRAW_TRIANGLE_STRIP] = AddStrip<false>;\n+    m_primitive_table[OpcodeDecoder::GX_DRAW_TRIANGLE_FAN] = AddFan<false>;\n   }\n-  return Iptr;\n+  m_primitive_table[OpcodeDecoder::GX_DRAW_LINES] = AddLineList;\n+  m_primitive_table[OpcodeDecoder::GX_DRAW_LINE_STRIP] = AddLineStrip;\n+  m_primitive_table[OpcodeDecoder::GX_DRAW_POINTS] = AddPoints;\n }\n \n-u32 IndexGenerator::GetRemainingIndices()\n+void IndexGenerator::Start(u16* index_ptr)\n {\n-  u32 max_index = 65534;  // -1 is reserved for primitive restart (ogl + dx11)\n-  return max_index - base_index;\n+  m_index_buffer_current = index_ptr;\n+  m_base_index_ptr = index_ptr;\n+  m_base_index = 0;\n+}\n+\n+void IndexGenerator::AddIndices(int primitive, u32 num_vertices)\n+{\n+  m_index_buffer_current =\n+      m_primitive_table[primitive](m_index_buffer_current, num_vertices, m_base_index);\n+  m_base_index += num_vertices;\n+}\n+\n+void IndexGenerator::AddExternalIndices(const u16* indices, u32 num_indices, u32 num_vertices)\n+{\n+  std::memcpy(m_index_buffer_current, indices, sizeof(u16) * num_indices);', 'original_position': 341, 'body': "Yes. I've changed the line because we follow a naming convention for member variables in classes. This does not mean I also need to resolve everything else related to that line within an unrelated PR. The purpose of this change is to eliminate static state in the class, which it does. It does not try to address anything else with the interface.", 'commit_id': '10f76746515a9a7bd8122f40c33b65813aa17b38', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8512#discussion_r354767749', 'id': 354767749, 'updated_at': '2019-12-06T10:37:36Z', 'node_id': 'MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDM1NDc2Nzc0OQ==', 'author_association': 'MEMBER', 'path': 'Source/Core/VideoCommon/IndexGenerator.cpp', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/354767749'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8512'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/8512#discussion_r354767749'}}, 'position': 341, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/354767749', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8512', 'in_reply_to_id': 354721906}], 'state': 'commented', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8512#pullrequestreview-328121587', 'author': 'lioncash'}
2019-12-06T10:30:52.984801	{'type': 'gh_pull_request_review', 'pr_id': 8512, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'action': 'submitted', 'pr_title': 'VideoCommon/IndexGenerator: Eliminate static state', 'comments': [{'created_at': '2019-12-06T10:30:51Z', 'user': {'type': 'User', 'avatar_url': 'https://avatars1.githubusercontent.com/u/7947461?v=4', 'login': 'CookiePLMonster', 'gists_url': 'https://api.github.com/users/CookiePLMonster/gists{/gist_id}', 'html_url': 'https://github.com/CookiePLMonster', 'events_url': 'https://api.github.com/users/CookiePLMonster/events{/privacy}', 'id': 7947461, 'site_admin': False, 'followers_url': 'https://api.github.com/users/CookiePLMonster/followers', 'subscriptions_url': 'https://api.github.com/users/CookiePLMonster/subscriptions', 'node_id': 'MDQ6VXNlcjc5NDc0NjE=', 'organizations_url': 'https://api.github.com/users/CookiePLMonster/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/CookiePLMonster/received_events', 'following_url': 'https://api.github.com/users/CookiePLMonster/following{/other_user}', 'repos_url': 'https://api.github.com/users/CookiePLMonster/repos', 'url': 'https://api.github.com/users/CookiePLMonster', 'starred_url': 'https://api.github.com/users/CookiePLMonster/starred{/owner}{/repo}'}, 'original_commit_id': '10f76746515a9a7bd8122f40c33b65813aa17b38', 'pull_request_review_id': 328118188, 'diff_hunk': '@@ -182,77 +133,122 @@ u16* IndexGenerator::AddFan(u16* Iptr, u32 numVerts, u32 index)\n  * ZWW do this for sun rays\n  */\n template <bool pr>\n-u16* IndexGenerator::AddQuads(u16* Iptr, u32 numVerts, u32 index)\n+u16* AddQuads(u16* index_ptr, u32 num_verts, u32 index)\n {\n   u32 i = 3;\n-  for (; i < numVerts; i += 4)\n+  for (; i < num_verts; i += 4)\n   {\n-    if (pr)\n+    if constexpr (pr)\n     {\n-      *Iptr++ = index + i - 2;\n-      *Iptr++ = index + i - 1;\n-      *Iptr++ = index + i - 3;\n-      *Iptr++ = index + i - 0;\n-      *Iptr++ = s_primitive_restart;\n+      *index_ptr++ = index + i - 2;\n+      *index_ptr++ = index + i - 1;\n+      *index_ptr++ = index + i - 3;\n+      *index_ptr++ = index + i - 0;\n+      *index_ptr++ = s_primitive_restart;\n     }\n     else\n     {\n-      Iptr = WriteTriangle<pr>(Iptr, index + i - 3, index + i - 2, index + i - 1);\n-      Iptr = WriteTriangle<pr>(Iptr, index + i - 3, index + i - 1, index + i - 0);\n+      index_ptr = WriteTriangle<pr>(index_ptr, index + i - 3, index + i - 2, index + i - 1);\n+      index_ptr = WriteTriangle<pr>(index_ptr, index + i - 3, index + i - 1, index + i - 0);\n     }\n   }\n \n   // three vertices remaining, so render a triangle\n-  if (i == numVerts)\n+  if (i == num_verts)\n   {\n-    Iptr =\n-        WriteTriangle<pr>(Iptr, index + numVerts - 3, index + numVerts - 2, index + numVerts - 1);\n+    index_ptr = WriteTriangle<pr>(index_ptr, index + num_verts - 3, index + num_verts - 2,\n+                                  index + num_verts - 1);\n   }\n-  return Iptr;\n+  return index_ptr;\n }\n \n template <bool pr>\n-u16* IndexGenerator::AddQuads_nonstandard(u16* Iptr, u32 numVerts, u32 index)\n+u16* AddQuads_nonstandard(u16* index_ptr, u32 num_verts, u32 index)\n {\n   WARN_LOG(VIDEO, "Non-standard primitive drawing command GL_DRAW_QUADS_2");\n-  return AddQuads<pr>(Iptr, numVerts, index);\n+  return AddQuads<pr>(index_ptr, num_verts, index);\n }\n \n-// Lines\n-u16* IndexGenerator::AddLineList(u16* Iptr, u32 numVerts, u32 index)\n+u16* AddLineList(u16* index_ptr, u32 num_verts, u32 index)\n {\n-  for (u32 i = 1; i < numVerts; i += 2)\n+  for (u32 i = 1; i < num_verts; i += 2)\n   {\n-    *Iptr++ = index + i - 1;\n-    *Iptr++ = index + i;\n+    *index_ptr++ = index + i - 1;\n+    *index_ptr++ = index + i;\n   }\n-  return Iptr;\n+  return index_ptr;\n }\n \n-// shouldn\'t be used as strips as LineLists are much more common\n+// Shouldn\'t be used as strips as LineLists are much more common\n // so converting them to lists\n-u16* IndexGenerator::AddLineStrip(u16* Iptr, u32 numVerts, u32 index)\n+u16* AddLineStrip(u16* index_ptr, u32 num_verts, u32 index)\n {\n-  for (u32 i = 1; i < numVerts; ++i)\n+  for (u32 i = 1; i < num_verts; ++i)\n   {\n-    *Iptr++ = index + i - 1;\n-    *Iptr++ = index + i;\n+    *index_ptr++ = index + i - 1;\n+    *index_ptr++ = index + i;\n   }\n-  return Iptr;\n+  return index_ptr;\n }\n \n-// Points\n-u16* IndexGenerator::AddPoints(u16* Iptr, u32 numVerts, u32 index)\n+u16* AddPoints(u16* index_ptr, u32 num_verts, u32 index)\n {\n-  for (u32 i = 0; i != numVerts; ++i)\n+  for (u32 i = 0; i != num_verts; ++i)\n+  {\n+    *index_ptr++ = index + i;\n+  }\n+  return index_ptr;\n+}\n+}  // Anonymous namespace\n+\n+void IndexGenerator::Init()\n+{\n+  if (g_Config.backend_info.bSupportsPrimitiveRestart)\n+  {\n+    m_primitive_table[OpcodeDecoder::GX_DRAW_QUADS] = AddQuads<true>;\n+    m_primitive_table[OpcodeDecoder::GX_DRAW_QUADS_2] = AddQuads_nonstandard<true>;\n+    m_primitive_table[OpcodeDecoder::GX_DRAW_TRIANGLES] = AddList<true>;\n+    m_primitive_table[OpcodeDecoder::GX_DRAW_TRIANGLE_STRIP] = AddStrip<true>;\n+    m_primitive_table[OpcodeDecoder::GX_DRAW_TRIANGLE_FAN] = AddFan<true>;\n+  }\n+  else\n   {\n-    *Iptr++ = index + i;\n+    m_primitive_table[OpcodeDecoder::GX_DRAW_QUADS] = AddQuads<false>;\n+    m_primitive_table[OpcodeDecoder::GX_DRAW_QUADS_2] = AddQuads_nonstandard<false>;\n+    m_primitive_table[OpcodeDecoder::GX_DRAW_TRIANGLES] = AddList<false>;\n+    m_primitive_table[OpcodeDecoder::GX_DRAW_TRIANGLE_STRIP] = AddStrip<false>;\n+    m_primitive_table[OpcodeDecoder::GX_DRAW_TRIANGLE_FAN] = AddFan<false>;\n   }\n-  return Iptr;\n+  m_primitive_table[OpcodeDecoder::GX_DRAW_LINES] = AddLineList;\n+  m_primitive_table[OpcodeDecoder::GX_DRAW_LINE_STRIP] = AddLineStrip;\n+  m_primitive_table[OpcodeDecoder::GX_DRAW_POINTS] = AddPoints;\n }\n \n-u32 IndexGenerator::GetRemainingIndices()\n+void IndexGenerator::Start(u16* index_ptr)\n {\n-  u32 max_index = 65534;  // -1 is reserved for primitive restart (ogl + dx11)\n-  return max_index - base_index;\n+  m_index_buffer_current = index_ptr;\n+  m_base_index_ptr = index_ptr;\n+  m_base_index = 0;\n+}\n+\n+void IndexGenerator::AddIndices(int primitive, u32 num_vertices)\n+{\n+  m_index_buffer_current =\n+      m_primitive_table[primitive](m_index_buffer_current, num_vertices, m_base_index);\n+  m_base_index += num_vertices;\n+}\n+\n+void IndexGenerator::AddExternalIndices(const u16* indices, u32 num_indices, u32 num_vertices)\n+{\n+  std::memcpy(m_index_buffer_current, indices, sizeof(u16) * num_indices);', 'original_position': 341, 'body': 'I respectfully disagree - you\'ve changed destination from `index_buffer_current` to `m_index_buffer_current` so you "touched" this line in a meaningful way in this PR already.', 'commit_id': '10f76746515a9a7bd8122f40c33b65813aa17b38', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8512#discussion_r354765117', 'id': 354765117, 'updated_at': '2019-12-06T10:30:51Z', 'node_id': 'MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDM1NDc2NTExNw==', 'author_association': 'MEMBER', 'path': 'Source/Core/VideoCommon/IndexGenerator.cpp', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/354765117'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8512'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/8512#discussion_r354765117'}}, 'position': 341, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/354765117', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8512', 'in_reply_to_id': 354721906}], 'state': 'commented', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8512#pullrequestreview-328118188', 'author': 'CookiePLMonster'}
2019-12-06T10:29:00.990447	{'type': 'gh_pull_request_review', 'pr_id': 8512, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'action': 'submitted', 'pr_title': 'VideoCommon/IndexGenerator: Eliminate static state', 'comments': [{'created_at': '2019-12-06T10:28:59Z', 'user': {'type': 'User', 'avatar_url': 'https://avatars1.githubusercontent.com/u/712067?v=4', 'login': 'lioncash', 'gists_url': 'https://api.github.com/users/lioncash/gists{/gist_id}', 'html_url': 'https://github.com/lioncash', 'events_url': 'https://api.github.com/users/lioncash/events{/privacy}', 'id': 712067, 'site_admin': False, 'followers_url': 'https://api.github.com/users/lioncash/followers', 'subscriptions_url': 'https://api.github.com/users/lioncash/subscriptions', 'node_id': 'MDQ6VXNlcjcxMjA2Nw==', 'organizations_url': 'https://api.github.com/users/lioncash/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/lioncash/received_events', 'following_url': 'https://api.github.com/users/lioncash/following{/other_user}', 'repos_url': 'https://api.github.com/users/lioncash/repos', 'url': 'https://api.github.com/users/lioncash', 'starred_url': 'https://api.github.com/users/lioncash/starred{/owner}{/repo}'}, 'original_commit_id': '10f76746515a9a7bd8122f40c33b65813aa17b38', 'pull_request_review_id': 328117227, 'diff_hunk': '@@ -182,77 +133,122 @@ u16* IndexGenerator::AddFan(u16* Iptr, u32 numVerts, u32 index)\n  * ZWW do this for sun rays\n  */\n template <bool pr>\n-u16* IndexGenerator::AddQuads(u16* Iptr, u32 numVerts, u32 index)\n+u16* AddQuads(u16* index_ptr, u32 num_verts, u32 index)\n {\n   u32 i = 3;\n-  for (; i < numVerts; i += 4)\n+  for (; i < num_verts; i += 4)\n   {\n-    if (pr)\n+    if constexpr (pr)\n     {\n-      *Iptr++ = index + i - 2;\n-      *Iptr++ = index + i - 1;\n-      *Iptr++ = index + i - 3;\n-      *Iptr++ = index + i - 0;\n-      *Iptr++ = s_primitive_restart;\n+      *index_ptr++ = index + i - 2;\n+      *index_ptr++ = index + i - 1;\n+      *index_ptr++ = index + i - 3;\n+      *index_ptr++ = index + i - 0;\n+      *index_ptr++ = s_primitive_restart;\n     }\n     else\n     {\n-      Iptr = WriteTriangle<pr>(Iptr, index + i - 3, index + i - 2, index + i - 1);\n-      Iptr = WriteTriangle<pr>(Iptr, index + i - 3, index + i - 1, index + i - 0);\n+      index_ptr = WriteTriangle<pr>(index_ptr, index + i - 3, index + i - 2, index + i - 1);\n+      index_ptr = WriteTriangle<pr>(index_ptr, index + i - 3, index + i - 1, index + i - 0);\n     }\n   }\n \n   // three vertices remaining, so render a triangle\n-  if (i == numVerts)\n+  if (i == num_verts)\n   {\n-    Iptr =\n-        WriteTriangle<pr>(Iptr, index + numVerts - 3, index + numVerts - 2, index + numVerts - 1);\n+    index_ptr = WriteTriangle<pr>(index_ptr, index + num_verts - 3, index + num_verts - 2,\n+                                  index + num_verts - 1);\n   }\n-  return Iptr;\n+  return index_ptr;\n }\n \n template <bool pr>\n-u16* IndexGenerator::AddQuads_nonstandard(u16* Iptr, u32 numVerts, u32 index)\n+u16* AddQuads_nonstandard(u16* index_ptr, u32 num_verts, u32 index)\n {\n   WARN_LOG(VIDEO, "Non-standard primitive drawing command GL_DRAW_QUADS_2");\n-  return AddQuads<pr>(Iptr, numVerts, index);\n+  return AddQuads<pr>(index_ptr, num_verts, index);\n }\n \n-// Lines\n-u16* IndexGenerator::AddLineList(u16* Iptr, u32 numVerts, u32 index)\n+u16* AddLineList(u16* index_ptr, u32 num_verts, u32 index)\n {\n-  for (u32 i = 1; i < numVerts; i += 2)\n+  for (u32 i = 1; i < num_verts; i += 2)\n   {\n-    *Iptr++ = index + i - 1;\n-    *Iptr++ = index + i;\n+    *index_ptr++ = index + i - 1;\n+    *index_ptr++ = index + i;\n   }\n-  return Iptr;\n+  return index_ptr;\n }\n \n-// shouldn\'t be used as strips as LineLists are much more common\n+// Shouldn\'t be used as strips as LineLists are much more common\n // so converting them to lists\n-u16* IndexGenerator::AddLineStrip(u16* Iptr, u32 numVerts, u32 index)\n+u16* AddLineStrip(u16* index_ptr, u32 num_verts, u32 index)\n {\n-  for (u32 i = 1; i < numVerts; ++i)\n+  for (u32 i = 1; i < num_verts; ++i)\n   {\n-    *Iptr++ = index + i - 1;\n-    *Iptr++ = index + i;\n+    *index_ptr++ = index + i - 1;\n+    *index_ptr++ = index + i;\n   }\n-  return Iptr;\n+  return index_ptr;\n }\n \n-// Points\n-u16* IndexGenerator::AddPoints(u16* Iptr, u32 numVerts, u32 index)\n+u16* AddPoints(u16* index_ptr, u32 num_verts, u32 index)\n {\n-  for (u32 i = 0; i != numVerts; ++i)\n+  for (u32 i = 0; i != num_verts; ++i)\n+  {\n+    *index_ptr++ = index + i;\n+  }\n+  return index_ptr;\n+}\n+}  // Anonymous namespace\n+\n+void IndexGenerator::Init()\n+{\n+  if (g_Config.backend_info.bSupportsPrimitiveRestart)\n+  {\n+    m_primitive_table[OpcodeDecoder::GX_DRAW_QUADS] = AddQuads<true>;\n+    m_primitive_table[OpcodeDecoder::GX_DRAW_QUADS_2] = AddQuads_nonstandard<true>;\n+    m_primitive_table[OpcodeDecoder::GX_DRAW_TRIANGLES] = AddList<true>;\n+    m_primitive_table[OpcodeDecoder::GX_DRAW_TRIANGLE_STRIP] = AddStrip<true>;\n+    m_primitive_table[OpcodeDecoder::GX_DRAW_TRIANGLE_FAN] = AddFan<true>;\n+  }\n+  else\n   {\n-    *Iptr++ = index + i;\n+    m_primitive_table[OpcodeDecoder::GX_DRAW_QUADS] = AddQuads<false>;\n+    m_primitive_table[OpcodeDecoder::GX_DRAW_QUADS_2] = AddQuads_nonstandard<false>;\n+    m_primitive_table[OpcodeDecoder::GX_DRAW_TRIANGLES] = AddList<false>;\n+    m_primitive_table[OpcodeDecoder::GX_DRAW_TRIANGLE_STRIP] = AddStrip<false>;\n+    m_primitive_table[OpcodeDecoder::GX_DRAW_TRIANGLE_FAN] = AddFan<false>;\n   }\n-  return Iptr;\n+  m_primitive_table[OpcodeDecoder::GX_DRAW_LINES] = AddLineList;\n+  m_primitive_table[OpcodeDecoder::GX_DRAW_LINE_STRIP] = AddLineStrip;\n+  m_primitive_table[OpcodeDecoder::GX_DRAW_POINTS] = AddPoints;\n }\n \n-u32 IndexGenerator::GetRemainingIndices()\n+void IndexGenerator::Start(u16* index_ptr)\n {\n-  u32 max_index = 65534;  // -1 is reserved for primitive restart (ogl + dx11)\n-  return max_index - base_index;\n+  m_index_buffer_current = index_ptr;\n+  m_base_index_ptr = index_ptr;\n+  m_base_index = 0;\n+}\n+\n+void IndexGenerator::AddIndices(int primitive, u32 num_vertices)\n+{\n+  m_index_buffer_current =\n+      m_primitive_table[primitive](m_index_buffer_current, num_vertices, m_base_index);\n+  m_base_index += num_vertices;\n+}\n+\n+void IndexGenerator::AddExternalIndices(const u16* indices, u32 num_indices, u32 num_vertices)\n+{\n+  std::memcpy(m_index_buffer_current, indices, sizeof(u16) * num_indices);', 'original_position': 341, 'body': 'This is unrelated to the actual changes being made.', 'commit_id': '10f76746515a9a7bd8122f40c33b65813aa17b38', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8512#discussion_r354764238', 'id': 354764238, 'updated_at': '2019-12-06T10:28:59Z', 'node_id': 'MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDM1NDc2NDIzOA==', 'author_association': 'MEMBER', 'path': 'Source/Core/VideoCommon/IndexGenerator.cpp', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/354764238'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8512'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/8512#discussion_r354764238'}}, 'position': 341, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/354764238', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8512', 'in_reply_to_id': 354721906}], 'state': 'commented', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8512#pullrequestreview-328117227', 'author': 'lioncash'}
2019-12-06T08:54:02.975223	{'type': 'gh_pull_request_review', 'pr_id': 8512, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'action': 'submitted', 'pr_title': 'VideoCommon/IndexGenerator: Eliminate static state', 'comments': [{'created_at': '2019-12-06T08:54:00Z', 'user': {'type': 'User', 'avatar_url': 'https://avatars1.githubusercontent.com/u/7947461?v=4', 'login': 'CookiePLMonster', 'gists_url': 'https://api.github.com/users/CookiePLMonster/gists{/gist_id}', 'html_url': 'https://github.com/CookiePLMonster', 'events_url': 'https://api.github.com/users/CookiePLMonster/events{/privacy}', 'id': 7947461, 'site_admin': False, 'followers_url': 'https://api.github.com/users/CookiePLMonster/followers', 'subscriptions_url': 'https://api.github.com/users/CookiePLMonster/subscriptions', 'node_id': 'MDQ6VXNlcjc5NDc0NjE=', 'organizations_url': 'https://api.github.com/users/CookiePLMonster/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/CookiePLMonster/received_events', 'following_url': 'https://api.github.com/users/CookiePLMonster/following{/other_user}', 'repos_url': 'https://api.github.com/users/CookiePLMonster/repos', 'url': 'https://api.github.com/users/CookiePLMonster', 'starred_url': 'https://api.github.com/users/CookiePLMonster/starred{/owner}{/repo}'}, 'original_commit_id': '10f76746515a9a7bd8122f40c33b65813aa17b38', 'pull_request_review_id': 328066251, 'diff_hunk': '@@ -182,77 +133,122 @@ u16* IndexGenerator::AddFan(u16* Iptr, u32 numVerts, u32 index)\n  * ZWW do this for sun rays\n  */\n template <bool pr>\n-u16* IndexGenerator::AddQuads(u16* Iptr, u32 numVerts, u32 index)\n+u16* AddQuads(u16* index_ptr, u32 num_verts, u32 index)\n {\n   u32 i = 3;\n-  for (; i < numVerts; i += 4)\n+  for (; i < num_verts; i += 4)\n   {\n-    if (pr)\n+    if constexpr (pr)\n     {\n-      *Iptr++ = index + i - 2;\n-      *Iptr++ = index + i - 1;\n-      *Iptr++ = index + i - 3;\n-      *Iptr++ = index + i - 0;\n-      *Iptr++ = s_primitive_restart;\n+      *index_ptr++ = index + i - 2;\n+      *index_ptr++ = index + i - 1;\n+      *index_ptr++ = index + i - 3;\n+      *index_ptr++ = index + i - 0;\n+      *index_ptr++ = s_primitive_restart;\n     }\n     else\n     {\n-      Iptr = WriteTriangle<pr>(Iptr, index + i - 3, index + i - 2, index + i - 1);\n-      Iptr = WriteTriangle<pr>(Iptr, index + i - 3, index + i - 1, index + i - 0);\n+      index_ptr = WriteTriangle<pr>(index_ptr, index + i - 3, index + i - 2, index + i - 1);\n+      index_ptr = WriteTriangle<pr>(index_ptr, index + i - 3, index + i - 1, index + i - 0);\n     }\n   }\n \n   // three vertices remaining, so render a triangle\n-  if (i == numVerts)\n+  if (i == num_verts)\n   {\n-    Iptr =\n-        WriteTriangle<pr>(Iptr, index + numVerts - 3, index + numVerts - 2, index + numVerts - 1);\n+    index_ptr = WriteTriangle<pr>(index_ptr, index + num_verts - 3, index + num_verts - 2,\n+                                  index + num_verts - 1);\n   }\n-  return Iptr;\n+  return index_ptr;\n }\n \n template <bool pr>\n-u16* IndexGenerator::AddQuads_nonstandard(u16* Iptr, u32 numVerts, u32 index)\n+u16* AddQuads_nonstandard(u16* index_ptr, u32 num_verts, u32 index)\n {\n   WARN_LOG(VIDEO, "Non-standard primitive drawing command GL_DRAW_QUADS_2");\n-  return AddQuads<pr>(Iptr, numVerts, index);\n+  return AddQuads<pr>(index_ptr, num_verts, index);\n }\n \n-// Lines\n-u16* IndexGenerator::AddLineList(u16* Iptr, u32 numVerts, u32 index)\n+u16* AddLineList(u16* index_ptr, u32 num_verts, u32 index)\n {\n-  for (u32 i = 1; i < numVerts; i += 2)\n+  for (u32 i = 1; i < num_verts; i += 2)\n   {\n-    *Iptr++ = index + i - 1;\n-    *Iptr++ = index + i;\n+    *index_ptr++ = index + i - 1;\n+    *index_ptr++ = index + i;\n   }\n-  return Iptr;\n+  return index_ptr;\n }\n \n-// shouldn\'t be used as strips as LineLists are much more common\n+// Shouldn\'t be used as strips as LineLists are much more common\n // so converting them to lists\n-u16* IndexGenerator::AddLineStrip(u16* Iptr, u32 numVerts, u32 index)\n+u16* AddLineStrip(u16* index_ptr, u32 num_verts, u32 index)\n {\n-  for (u32 i = 1; i < numVerts; ++i)\n+  for (u32 i = 1; i < num_verts; ++i)\n   {\n-    *Iptr++ = index + i - 1;\n-    *Iptr++ = index + i;\n+    *index_ptr++ = index + i - 1;\n+    *index_ptr++ = index + i;\n   }\n-  return Iptr;\n+  return index_ptr;\n }\n \n-// Points\n-u16* IndexGenerator::AddPoints(u16* Iptr, u32 numVerts, u32 index)\n+u16* AddPoints(u16* index_ptr, u32 num_verts, u32 index)\n {\n-  for (u32 i = 0; i != numVerts; ++i)\n+  for (u32 i = 0; i != num_verts; ++i)\n+  {\n+    *index_ptr++ = index + i;\n+  }\n+  return index_ptr;\n+}\n+}  // Anonymous namespace\n+\n+void IndexGenerator::Init()\n+{\n+  if (g_Config.backend_info.bSupportsPrimitiveRestart)\n+  {\n+    m_primitive_table[OpcodeDecoder::GX_DRAW_QUADS] = AddQuads<true>;\n+    m_primitive_table[OpcodeDecoder::GX_DRAW_QUADS_2] = AddQuads_nonstandard<true>;\n+    m_primitive_table[OpcodeDecoder::GX_DRAW_TRIANGLES] = AddList<true>;\n+    m_primitive_table[OpcodeDecoder::GX_DRAW_TRIANGLE_STRIP] = AddStrip<true>;\n+    m_primitive_table[OpcodeDecoder::GX_DRAW_TRIANGLE_FAN] = AddFan<true>;\n+  }\n+  else\n   {\n-    *Iptr++ = index + i;\n+    m_primitive_table[OpcodeDecoder::GX_DRAW_QUADS] = AddQuads<false>;\n+    m_primitive_table[OpcodeDecoder::GX_DRAW_QUADS_2] = AddQuads_nonstandard<false>;\n+    m_primitive_table[OpcodeDecoder::GX_DRAW_TRIANGLES] = AddList<false>;\n+    m_primitive_table[OpcodeDecoder::GX_DRAW_TRIANGLE_STRIP] = AddStrip<false>;\n+    m_primitive_table[OpcodeDecoder::GX_DRAW_TRIANGLE_FAN] = AddFan<false>;\n   }\n-  return Iptr;\n+  m_primitive_table[OpcodeDecoder::GX_DRAW_LINES] = AddLineList;\n+  m_primitive_table[OpcodeDecoder::GX_DRAW_LINE_STRIP] = AddLineStrip;\n+  m_primitive_table[OpcodeDecoder::GX_DRAW_POINTS] = AddPoints;\n }\n \n-u32 IndexGenerator::GetRemainingIndices()\n+void IndexGenerator::Start(u16* index_ptr)\n {\n-  u32 max_index = 65534;  // -1 is reserved for primitive restart (ogl + dx11)\n-  return max_index - base_index;\n+  m_index_buffer_current = index_ptr;\n+  m_base_index_ptr = index_ptr;\n+  m_base_index = 0;\n+}\n+\n+void IndexGenerator::AddIndices(int primitive, u32 num_vertices)\n+{\n+  m_index_buffer_current =\n+      m_primitive_table[primitive](m_index_buffer_current, num_vertices, m_base_index);\n+  m_base_index += num_vertices;\n+}\n+\n+void IndexGenerator::AddExternalIndices(const u16* indices, u32 num_indices, u32 num_vertices)\n+{\n+  std::memcpy(m_index_buffer_current, indices, sizeof(u16) * num_indices);', 'original_position': 341, 'body': "```suggestion\r\n  std::memcpy(m_index_buffer_current, indices, sizeof(indices[0]) * num_indices);\r\n```\r\nIf you ever need u32 indices it'll make migration a bit easier.", 'commit_id': '10f76746515a9a7bd8122f40c33b65813aa17b38', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8512#discussion_r354721906', 'id': 354721906, 'updated_at': '2019-12-06T08:54:00Z', 'node_id': 'MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDM1NDcyMTkwNg==', 'author_association': 'MEMBER', 'path': 'Source/Core/VideoCommon/IndexGenerator.cpp', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/354721906'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8512'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/8512#discussion_r354721906'}}, 'position': 341, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/354721906', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8512'}], 'state': 'commented', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8512#pullrequestreview-328066251', 'author': 'CookiePLMonster'}
2019-12-05T20:09:53.919439	{'type': 'gh_pull_request_review', 'pr_id': 8511, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'action': 'submitted', 'pr_title': 'VideoCommon/OpcodeDecoding: Make use of if constexpr ', 'comments': [], 'state': 'approved', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8511#pullrequestreview-327821651', 'author': 'phire'}
2019-12-05T18:04:06.685684	{'type': 'gh_pull_request_review', 'pr_id': 8512, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'action': 'submitted', 'pr_title': 'VideoCommon/IndexGenerator: Eliminate static state', 'comments': [], 'state': 'approved', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8512#pullrequestreview-327745825', 'author': 'BhaaLseN'}
2019-12-05T17:57:17.247014	{'type': 'gh_pull_request_review', 'pr_id': 8510, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'action': 'edited', 'pr_title': 'VideoCommon/TextureConversionShader: Migrate generation off sprintf', 'comments': [{'created_at': '2019-12-05T17:55:17Z', 'user': {'type': 'User', 'avatar_url': 'https://avatars1.githubusercontent.com/u/826052?v=4', 'login': 'BhaaLseN', 'gists_url': 'https://api.github.com/users/BhaaLseN/gists{/gist_id}', 'html_url': 'https://github.com/BhaaLseN', 'events_url': 'https://api.github.com/users/BhaaLseN/events{/privacy}', 'id': 826052, 'site_admin': False, 'followers_url': 'https://api.github.com/users/BhaaLseN/followers', 'subscriptions_url': 'https://api.github.com/users/BhaaLseN/subscriptions', 'node_id': 'MDQ6VXNlcjgyNjA1Mg==', 'organizations_url': 'https://api.github.com/users/BhaaLseN/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/BhaaLseN/received_events', 'following_url': 'https://api.github.com/users/BhaaLseN/following{/other_user}', 'repos_url': 'https://api.github.com/users/BhaaLseN/repos', 'url': 'https://api.github.com/users/BhaaLseN', 'starred_url': 'https://api.github.com/users/BhaaLseN/starred{/owner}{/repo}'}, 'original_commit_id': '69691d593793c738769fa22643cdca86e9e60ec2', 'pull_request_review_id': 327740679, 'diff_hunk': '@@ -2,1397 +2,1421 @@\n // Licensed under GPLv2+\n // Refer to the license.txt file included.\n \n-#include <array>\n-#include <cmath>\n-#include <cstdio>\n+#include "VideoCommon/TextureConversionShader.h"\n+\n+#include <iterator>\n #include <map>\n #include <sstream>\n \n-#include "Common/CommonFuncs.h"\n+#include <fmt/format.h>\n+\n #include "Common/CommonTypes.h"\n #include "Common/MathUtil.h"\n #include "Common/MsgHandler.h"\n-#include "VideoCommon/RenderBase.h"\n #include "VideoCommon/TextureCacheBase.h"\n-#include "VideoCommon/TextureConversionShader.h"\n #include "VideoCommon/VertexManagerBase.h"\n #include "VideoCommon/VideoCommon.h"\n #include "VideoCommon/VideoConfig.h"\n \n-#define WRITE p += sprintf\n-\n-static char text[16384];\n-static bool IntensityConstantAdded = false;\n-\n namespace TextureConversionShaderTiled\n {\n-u16 GetEncodedSampleCount(EFBCopyFormat format)\n-{\n-  switch (format)\n-  {\n-  case EFBCopyFormat::R4:\n-    return 8;\n-  case EFBCopyFormat::RA4:\n-    return 4;\n-  case EFBCopyFormat::RA8:\n-    return 2;\n-  case EFBCopyFormat::RGB565:\n-    return 2;\n-  case EFBCopyFormat::RGB5A3:\n-    return 2;\n-  case EFBCopyFormat::RGBA8:\n-    return 1;\n-  case EFBCopyFormat::A8:\n-  case EFBCopyFormat::R8_0x1:\n-  case EFBCopyFormat::R8:\n-  case EFBCopyFormat::G8:\n-  case EFBCopyFormat::B8:\n-    return 4;\n-  case EFBCopyFormat::RG8:\n-  case EFBCopyFormat::GB8:\n-    return 2;\n-  case EFBCopyFormat::XFB:\n-    return 2;\n-  default:\n-    PanicAlert("Invalid EFB Copy Format (0x%X)! (GetEncodedSampleCount)", static_cast<int>(format));\n-    return 1;\n-  }\n-}\n-\n-static void WriteHeader(char*& p, APIType ApiType)\n+namespace\n {\n-  if (ApiType == APIType::OpenGL || ApiType == APIType::Vulkan)\n-  {\n-    // left, top, of source rectangle within source texture\n-    // width of the destination rectangle, scale_factor (1 or 2)\n-    WRITE(p, "UBO_BINDING(std140, 1) uniform PSBlock {\\n");\n-    WRITE(p, "  int4 position;\\n");\n-    WRITE(p, "  float y_scale;\\n");\n-    WRITE(p, "  float gamma_rcp;\\n");\n-    WRITE(p, "  float2 clamp_tb;\\n");\n-    WRITE(p, "  float3 filter_coefficients;\\n");\n-    WRITE(p, "};\\n");\n-    if (g_ActiveConfig.backend_info.bSupportsGeometryShaders)\n-    {\n-      WRITE(p, "VARYING_LOCATION(0) in VertexData {\\n");\n-      WRITE(p, "  float3 v_tex0;\\n");\n-      WRITE(p, "};\\n");\n-    }\n-    else\n-    {\n-      WRITE(p, "VARYING_LOCATION(0) in float3 v_tex0;\\n");\n-    }\n-    WRITE(p, "SAMPLER_BINDING(0) uniform sampler2DArray samp0;\\n");\n-    WRITE(p, "FRAGMENT_OUTPUT_LOCATION(0) out float4 ocol0;\\n");\n-  }\n-  else  // D3D\n-  {\n-    WRITE(p, "cbuffer PSBlock : register(b0) {\\n");\n-    WRITE(p, "  int4 position;\\n");\n-    WRITE(p, "  float y_scale;\\n");\n-    WRITE(p, "  float gamma_rcp;\\n");\n-    WRITE(p, "  float2 clamp_tb;\\n");\n-    WRITE(p, "  float3 filter_coefficients;\\n");\n-    WRITE(p, "};\\n");\n-    WRITE(p, "sampler samp0 : register(s0);\\n");\n-    WRITE(p, "Texture2DArray Tex0 : register(t0);\\n");\n-  }\n+// NOTE: In these uniforms, a row refers to a row of blocks, not texels.\n+constexpr char s_decoding_shader_header[] = R"(\n+#if defined(PALETTE_FORMAT_IA8) || defined(PALETTE_FORMAT_RGB565) || defined(PALETTE_FORMAT_RGB5A3)\n+#define HAS_PALETTE 1\n+#endif\n \n-  // D3D does not have roundEven(), only round(), which is specified "to the nearest integer".\n-  // This differs from the roundEven() behavior, but to get consistency across drivers in OpenGL\n-  // we need to use roundEven().\n-  if (ApiType == APIType::D3D)\n-    WRITE(p, "#define roundEven(x) round(x)\\n");\n-\n-  // Alpha channel in the copy is set to 1 the EFB format does not have an alpha channel.\n-  WRITE(p, "float4 RGBA8ToRGB8(float4 src)\\n");\n-  WRITE(p, "{\\n");\n-  WRITE(p, "  return float4(src.xyz, 1.0);\\n");\n-  WRITE(p, "}\\n");\n-\n-  WRITE(p, "float4 RGBA8ToRGBA6(float4 src)\\n");\n-  WRITE(p, "{\\n");\n-  WRITE(p, "  int4 val = int4(roundEven(src * 255.0)) >> 2;\\n");\n-  WRITE(p, "  return float4(val) / 63.0;\\n");\n-  WRITE(p, "}\\n");\n-\n-  WRITE(p, "float4 RGBA8ToRGB565(float4 src)\\n");\n-  WRITE(p, "{\\n");\n-  WRITE(p, "  int4 val = int4(roundEven(src * 255.0));\\n");\n-  WRITE(p, "  val = int4(val.r >> 3, val.g >> 2, val.b >> 3, 1);\\n");\n-  WRITE(p, "  return float4(val) / float4(31.0, 63.0, 31.0, 1.0);\\n");\n-  WRITE(p, "}\\n");\n-}\n+#ifdef API_D3D\n+cbuffer UBO : register(b0) {\n+#else\n+UBO_BINDING(std140, 1) uniform UBO {\n+#endif\n+  uint2 u_dst_size;\n+  uint2 u_src_size;\n+  uint u_src_offset;\n+  uint u_src_row_stride;\n+  uint u_palette_offset;\n+};\n \n-static void WriteSampleFunction(char*& p, const EFBCopyParams& params, APIType ApiType)\n-{\n-  auto WriteSampleOp = [&](int yoffset) {\n-    if (!params.depth)\n-    {\n-      switch (params.efb_format)\n-      {\n-      case PEControl::RGB8_Z24:\n-        WRITE(p, "RGBA8ToRGB8(");\n-        break;\n-      case PEControl::RGBA6_Z24:\n-        WRITE(p, "RGBA8ToRGBA6(");\n-        break;\n-      case PEControl::RGB565_Z16:\n-        WRITE(p, "RGBA8ToRGB565(");\n-        break;\n-      default:\n-        WRITE(p, "(");\n-        break;\n-      }\n-    }\n-    else\n-    {\n-      // Handle D3D depth inversion.\n-      if (!g_ActiveConfig.backend_info.bSupportsReversedDepthRange)\n-        WRITE(p, "1.0 - (");\n-      else\n-        WRITE(p, "(");\n-    }\n+#ifdef API_D3D\n \n-    if (ApiType == APIType::OpenGL || ApiType == APIType::Vulkan)\n-      WRITE(p, "texture(samp0, float3(");\n-    else\n-      WRITE(p, "Tex0.Sample(samp0, float3(");\n+Buffer<uint4> s_input_buffer : register(t0);\n+#ifdef HAS_PALETTE\n+Buffer<uint4> s_palette_buffer : register(t1);\n+#endif\n \n-    WRITE(p, "uv.x + float(xoffset) * pixel_size.x, ");\n+RWTexture2DArray<unorm float4> output_image : register(u0);\n \n-    // Reverse the direction for OpenGL, since positive numbers are distance from the bottom row.\n-    if (yoffset != 0)\n-    {\n-      if (ApiType == APIType::OpenGL)\n-        WRITE(p, "clamp(uv.y - float(%d) * pixel_size.y, clamp_tb.x, clamp_tb.y)", yoffset);\n-      else\n-        WRITE(p, "clamp(uv.y + float(%d) * pixel_size.y, clamp_tb.x, clamp_tb.y)", yoffset);\n-    }\n-    else\n-    {\n-      WRITE(p, "uv.y");\n-    }\n+// Helpers for reading/writing.\n+#define texelFetch(buffer, pos) buffer.Load(pos)\n+#define imageStore(image, coords, value) image[coords] = value\n+#define GROUP_MEMORY_BARRIER_WITH_SYNC GroupMemoryBarrierWithGroupSync();\n+#define GROUP_SHARED groupshared\n \n-    WRITE(p, ", 0.0)))");\n-  };\n+#define DEFINE_MAIN(lx, ly) \\\n+  [numthreads(lx, ly, 1)] \\\n+  void main(uint3 gl_WorkGroupID : SV_GroupId, \\\n+            uint3 gl_LocalInvocationID : SV_GroupThreadID, \\\n+            uint3 gl_GlobalInvocationID : SV_DispatchThreadID)\n \n-  // The copy filter applies to both color and depth copies. This has been verified on hardware.\n-  // The filter is only applied to the RGB channels, the alpha channel is left intact.\n-  WRITE(p, "float4 SampleEFB(float2 uv, float2 pixel_size, int xoffset)\\n");\n-  WRITE(p, "{\\n");\n-  if (params.copy_filter)\n-  {\n-    WRITE(p, "  float4 prev_row = ");\n-    WriteSampleOp(-1);\n-    WRITE(p, ";\\n");\n-    WRITE(p, "  float4 current_row = ");\n-    WriteSampleOp(0);\n-    WRITE(p, ";\\n");\n-    WRITE(p, "  float4 next_row = ");\n-    WriteSampleOp(1);\n-    WRITE(p, ";\\n");\n-    WRITE(p, "  return float4(min(prev_row.rgb * filter_coefficients[0] +\\n"\n-             "                      current_row.rgb * filter_coefficients[1] +\\n"\n-             "                      next_row.rgb * filter_coefficients[2], \\n"\n-             "                    float3(1, 1, 1)), current_row.a);\\n");\n-  }\n-  else\n-  {\n-    WRITE(p, "  float4 current_row = ");\n-    WriteSampleOp(0);\n-    WRITE(p, ";\\n");\n-    WRITE(p, "return float4(min(current_row.rgb * filter_coefficients[1], float3(1, 1, 1)),\\n"\n-             "              current_row.a);\\n");\n-  }\n-  WRITE(p, "}\\n");\n+uint bitfieldExtract(uint val, int off, int size)\n+{\n+  // This built-in function is only support in OpenGL 4.0+ and ES 3.1+\\n"\n+  // Microsoft\'s HLSL compiler automatically optimises this to a bitfield extract instruction.\n+  uint mask = uint((1 << size) - 1);\n+  return uint(val >> off) & mask;\n }\n \n-// block dimensions : widthStride, heightStride\n-// texture dims : width, height, x offset, y offset\n-static void WriteSwizzler(char*& p, const EFBCopyParams& params, EFBCopyFormat format,\n-                          APIType ApiType)\n-{\n-  WriteHeader(p, ApiType);\n-  WriteSampleFunction(p, params, ApiType);\n+#else\n \n-  if (ApiType == APIType::OpenGL || ApiType == APIType::Vulkan)\n-  {\n-    WRITE(p, "void main()\\n");\n-    WRITE(p, "{\\n"\n-             "  int2 sampleUv;\\n"\n-             "  int2 uv1 = int2(gl_FragCoord.xy);\\n");\n-  }\n-  else  // D3D\n-  {\n-    WRITE(p, "void main(\\n");\n-    WRITE(p, "  in float3 v_tex0 : TEXCOORD0,\\n");\n-    WRITE(p, "  in float4 rawpos : SV_Position,\\n");\n-    WRITE(p, "  out float4 ocol0 : SV_Target)\\n");\n-    WRITE(p, "{\\n"\n-             "  int2 sampleUv;\\n"\n-             "  int2 uv1 = int2(rawpos.xy);\\n");\n-  }\n+TEXEL_BUFFER_BINDING(0) uniform usamplerBuffer s_input_buffer;\n+#ifdef HAS_PALETTE\n+TEXEL_BUFFER_BINDING(1) uniform usamplerBuffer s_palette_buffer;\n+#endif\n+IMAGE_BINDING(rgba8, 0) uniform writeonly image2DArray output_image;\n \n-  int blkW = TexDecoder_GetEFBCopyBlockWidthInTexels(format);\n-  int blkH = TexDecoder_GetEFBCopyBlockHeightInTexels(format);\n-  int samples = GetEncodedSampleCount(format);\n+#define GROUP_MEMORY_BARRIER_WITH_SYNC memoryBarrierShared(); barrier();\n+#define GROUP_SHARED shared\n \n-  WRITE(p, "  int x_block_position = (uv1.x >> %d) << %d;\\n", IntLog2(blkH * blkW / samples),\n-        IntLog2(blkW));\n-  WRITE(p, "  int y_block_position = uv1.y << %d;\\n", IntLog2(blkH));\n-  if (samples == 1)\n-  {\n-    // With samples == 1, we write out pairs of blocks; one A8R8, one G8B8.\n-    WRITE(p, "  bool first = (uv1.x & %d) == 0;\\n", blkH * blkW / 2);\n-    samples = 2;\n-  }\n-  WRITE(p, "  int offset_in_block = uv1.x & %d;\\n", (blkH * blkW / samples) - 1);\n-  WRITE(p, "  int y_offset_in_block = offset_in_block >> %d;\\n", IntLog2(blkW / samples));\n-  WRITE(p, "  int x_offset_in_block = (offset_in_block & %d) << %d;\\n", (blkW / samples) - 1,\n-        IntLog2(samples));\n-\n-  WRITE(p, "  sampleUv.x = x_block_position + x_offset_in_block;\\n");\n-  WRITE(p, "  sampleUv.y = y_block_position + y_offset_in_block;\\n");\n-\n-  WRITE(p,\n-        "  float2 uv0 = float2(sampleUv);\\n");  // sampleUv is the sample position in (int)gx_coords\n-  WRITE(p, "  uv0 += float2(0.5, 0.5);\\n");     // move to center of pixel\n-  WRITE(p, "  uv0 *= float(position.w);\\n");  // scale by two if needed (also move to pixel borders\n-                                              // so that linear filtering will average adjacent\n-                                              // pixel)\n-  WRITE(p, "  uv0 += float2(position.xy);\\n");                    // move to copied rect\n-  WRITE(p, "  uv0 /= float2(%d, %d);\\n", EFB_WIDTH, EFB_HEIGHT);  // normalize to [0:1]\n-  WRITE(p, "  uv0 /= float2(1, y_scale);\\n");                     // apply the y scaling\n-  if (ApiType == APIType::OpenGL)                                 // ogl has to flip up and down\n-  {\n-    WRITE(p, "  uv0.y = 1.0-uv0.y;\\n");\n-  }\n+#define DEFINE_MAIN(lx, ly) \\\n+  layout(local_size_x = lx, local_size_y = ly) in; \\\n+  void main()\n \n-  WRITE(p, "  float2 pixel_size = float2(position.w, position.w) / float2(%d, %d);\\n", EFB_WIDTH,\n-        EFB_HEIGHT);\n-}\n+#endif\n \n-static void WriteSampleColor(char*& p, const char* colorComp, const char* dest, int xoffset,\n-                             APIType ApiType, const EFBCopyParams& params)\n+uint Swap16(uint v)\n {\n-  WRITE(p, "  %s = SampleEFB(uv0, pixel_size, %d).%s;\\n", dest, xoffset, colorComp);\n+  // Convert BE to LE.\n+  return ((v >> 8) | (v << 8)) & 0xFFFFu;\n }\n \n-static void WriteColorToIntensity(char*& p, const char* src, const char* dest)\n+uint Convert3To8(uint v)\n {\n-  if (!IntensityConstantAdded)\n-  {\n-    WRITE(p, "  float4 IntensityConst = float4(0.257f,0.504f,0.098f,0.0625f);\\n");\n-    IntensityConstantAdded = true;\n-  }\n-  WRITE(p, "  %s = dot(IntensityConst.rgb, %s.rgb);\\n", dest, src);\n-  // don\'t add IntensityConst.a yet, because doing it later is faster and uses less instructions,\n-  // due to vectorization\n+  // Swizzle bits: 00000123 -> 12312312\n+  return (v << 5) | (v << 2) | (v >> 1);\n }\n-\n-static void WriteToBitDepth(char*& p, u8 depth, const char* src, const char* dest)\n+uint Convert4To8(uint v)\n {\n-  WRITE(p, "  %s = floor(%s * 255.0 / exp2(8.0 - %d.0));\\n", dest, src, depth);\n+  // Swizzle bits: 00001234 -> 12341234\n+  return (v << 4) | v;\n }\n-\n-static void WriteEncoderEnd(char*& p)\n+uint Convert5To8(uint v)\n {\n-  WRITE(p, "}\\n");\n-  IntensityConstantAdded = false;\n+  // Swizzle bits: 00012345 -> 12345123\n+  return (v << 3) | (v >> 2);\n }\n-\n-static void WriteI8Encoder(char*& p, APIType ApiType, const EFBCopyParams& params)\n+uint Convert6To8(uint v)\n {\n-  WriteSwizzler(p, params, EFBCopyFormat::R8, ApiType);\n-  WRITE(p, "  float3 texSample;\\n");\n-\n-  WriteSampleColor(p, "rgb", "texSample", 0, ApiType, params);\n-  WriteColorToIntensity(p, "texSample", "ocol0.b");\n-\n-  WriteSampleColor(p, "rgb", "texSample", 1, ApiType, params);\n-  WriteColorToIntensity(p, "texSample", "ocol0.g");\n-\n-  WriteSampleColor(p, "rgb", "texSample", 2, ApiType, params);\n-  WriteColorToIntensity(p, "texSample", "ocol0.r");\n-\n-  WriteSampleColor(p, "rgb", "texSample", 3, ApiType, params);\n-  WriteColorToIntensity(p, "texSample", "ocol0.a");\n-\n-  WRITE(p, "  ocol0.rgba += IntensityConst.aaaa;\\n");  // see WriteColorToIntensity\n-\n-  WriteEncoderEnd(p);\n+  // Swizzle bits: 00123456 -> 12345612\n+  return (v << 2) | (v >> 4);\n }\n \n-static void WriteI4Encoder(char*& p, APIType ApiType, const EFBCopyParams& params)\n+uint GetTiledTexelOffset(uint2 block_size, uint2 coords)\n {\n-  WriteSwizzler(p, params, EFBCopyFormat::R4, ApiType);\n-  WRITE(p, "  float3 texSample;\\n");\n-  WRITE(p, "  float4 color0;\\n");\n-  WRITE(p, "  float4 color1;\\n");\n-\n-  WriteSampleColor(p, "rgb", "texSample", 0, ApiType, params);\n-  WriteColorToIntensity(p, "texSample", "color0.b");\n-\n-  WriteSampleColor(p, "rgb", "texSample", 1, ApiType, params);\n-  WriteColorToIntensity(p, "texSample", "color1.b");\n-\n-  WriteSampleColor(p, "rgb", "texSample", 2, ApiType, params);\n-  WriteColorToIntensity(p, "texSample", "color0.g");\n-\n-  WriteSampleColor(p, "rgb", "texSample", 3, ApiType, params);\n-  WriteColorToIntensity(p, "texSample", "color1.g");\n-\n-  WriteSampleColor(p, "rgb", "texSample", 4, ApiType, params);\n-  WriteColorToIntensity(p, "texSample", "color0.r");\n-\n-  WriteSampleColor(p, "rgb", "texSample", 5, ApiType, params);\n-  WriteColorToIntensity(p, "texSample", "color1.r");\n-\n-  WriteSampleColor(p, "rgb", "texSample", 6, ApiType, params);\n-  WriteColorToIntensity(p, "texSample", "color0.a");\n-\n-  WriteSampleColor(p, "rgb", "texSample", 7, ApiType, params);\n-  WriteColorToIntensity(p, "texSample", "color1.a");\n-\n-  WRITE(p, "  color0.rgba += IntensityConst.aaaa;\\n");\n-  WRITE(p, "  color1.rgba += IntensityConst.aaaa;\\n");\n-\n-  WriteToBitDepth(p, 4, "color0", "color0");\n-  WriteToBitDepth(p, 4, "color1", "color1");\n-\n-  WRITE(p, "  ocol0 = (color0 * 16.0 + color1) / 255.0;\\n");\n-  WriteEncoderEnd(p);\n+  uint2 block = coords / block_size;\n+  uint2 offset = coords % block_size;\n+  uint buffer_pos = u_src_offset;\n+  buffer_pos += block.y * u_src_row_stride;\n+  buffer_pos += block.x * (block_size.x * block_size.y);\n+  buffer_pos += offset.y * block_size.x;\n+  buffer_pos += offset.x;\n+  return buffer_pos;\n }\n \n-static void WriteIA8Encoder(char*& p, APIType ApiType, const EFBCopyParams& params)\n+uint4 GetPaletteColor(uint index)\n {\n-  WriteSwizzler(p, params, EFBCopyFormat::RA8, ApiType);\n-  WRITE(p, "  float4 texSample;\\n");\n-\n-  WriteSampleColor(p, "rgba", "texSample", 0, ApiType, params);\n-  WRITE(p, "  ocol0.b = texSample.a;\\n");\n-  WriteColorToIntensity(p, "texSample", "ocol0.g");\n+  // Fetch and swap BE to LE.\n+  uint val = Swap16(texelFetch(s_palette_buffer, int(u_palette_offset + index)).x);\n \n-  WriteSampleColor(p, "rgba", "texSample", 1, ApiType, params);\n-  WRITE(p, "  ocol0.r = texSample.a;\\n");\n-  WriteColorToIntensity(p, "texSample", "ocol0.a");\n+  uint4 color;\n+#if defined(PALETTE_FORMAT_IA8)\n+  uint a = bitfieldExtract(val, 8, 8);\n+  uint i = bitfieldExtract(val, 0, 8);\n+  color = uint4(i, i, i, a);\n+#elif defined(PALETTE_FORMAT_RGB565)\n+  color.x = Convert5To8(bitfieldExtract(val, 11, 5));\n+  color.y = Convert6To8(bitfieldExtract(val, 5, 6));\n+  color.z = Convert5To8(bitfieldExtract(val, 0, 5));\n+  color.a = 255u;\n \n-  WRITE(p, "  ocol0.ga += IntensityConst.aa;\\n");\n+#elif defined(PALETTE_FORMAT_RGB5A3)\n+  if ((val & 0x8000u) != 0u)\n+  {\n+    color.x = Convert5To8(bitfieldExtract(val, 10, 5));\n+    color.y = Convert5To8(bitfieldExtract(val, 5, 5));\n+    color.z = Convert5To8(bitfieldExtract(val, 0, 5));\n+    color.a = 255u;\n+  }\n+  else\n+  {\n+    color.a = Convert3To8(bitfieldExtract(val, 12, 3));\n+    color.r = Convert4To8(bitfieldExtract(val, 8, 4));\n+    color.g = Convert4To8(bitfieldExtract(val, 4, 4));\n+    color.b = Convert4To8(bitfieldExtract(val, 0, 4));\n+  }\n+#else\n+  // Not used.\n+  color = uint4(0, 0, 0, 0);\n+#endif\n \n-  WriteEncoderEnd(p);\n+  return color;\n }\n \n-static void WriteIA4Encoder(char*& p, APIType ApiType, const EFBCopyParams& params)\n+float4 GetPaletteColorNormalized(uint index)\n {\n-  WriteSwizzler(p, params, EFBCopyFormat::RA4, ApiType);\n-  WRITE(p, "  float4 texSample;\\n");\n-  WRITE(p, "  float4 color0;\\n");\n-  WRITE(p, "  float4 color1;\\n");\n-\n-  WriteSampleColor(p, "rgba", "texSample", 0, ApiType, params);\n-  WRITE(p, "  color0.b = texSample.a;\\n");\n-  WriteColorToIntensity(p, "texSample", "color1.b");\n-\n-  WriteSampleColor(p, "rgba", "texSample", 1, ApiType, params);\n-  WRITE(p, "  color0.g = texSample.a;\\n");\n-  WriteColorToIntensity(p, "texSample", "color1.g");\n+  uint4 color = GetPaletteColor(index);\n+  return float4(color) / 255.0;\n+}\n \n-  WriteSampleColor(p, "rgba", "texSample", 2, ApiType, params);\n-  WRITE(p, "  color0.r = texSample.a;\\n");\n-  WriteColorToIntensity(p, "texSample", "color1.r");\n+)";\n \n-  WriteSampleColor(p, "rgba", "texSample", 3, ApiType, params);\n-  WRITE(p, "  color0.a = texSample.a;\\n");\n-  WriteColorToIntensity(p, "texSample", "color1.a");\n+const std::map<TextureFormat, DecodingShaderInfo> s_decoding_shader_info{\n+    {TextureFormat::I4,\n+     {TEXEL_BUFFER_FORMAT_R8_UINT, 0, 8, 8, false,\n+      R"(\n+      DEFINE_MAIN(8, 8)\n+      {\n+        uint2 coords = gl_GlobalInvocationID.xy;\n \n-  WRITE(p, "  color1.rgba += IntensityConst.aaaa;\\n");\n+        // Tiled in 8x8 blocks, 4 bits per pixel\n+        // We need to do the tiling manually here because the texel size is smaller than\n+        // the size of the buffer elements.\n+        uint2 block = coords.xy / 8u;\n+        uint2 offset = coords.xy % 8u;\n+        uint buffer_pos = u_src_offset;\n+        buffer_pos += block.y * u_src_row_stride;\n+        buffer_pos += block.x * 32u;\n+        buffer_pos += offset.y * 4u;\n+        buffer_pos += offset.x / 2u;\n \n-  WriteToBitDepth(p, 4, "color0", "color0");\n-  WriteToBitDepth(p, 4, "color1", "color1");\n+        // Select high nibble for odd texels, low for even.\n+        uint val = texelFetch(s_input_buffer, int(buffer_pos)).x;\n+        uint i;\n+        if ((coords.x & 1u) == 0u)\n+          i = Convert4To8((val >> 4));\n+        else\n+          i = Convert4To8((val & 0x0Fu));\n \n-  WRITE(p, "  ocol0 = (color0 * 16.0 + color1) / 255.0;\\n");\n-  WriteEncoderEnd(p);\n-}\n+        uint4 color = uint4(i, i, i, i);\n+        float4 norm_color = float4(color) / 255.0;\n \n-static void WriteRGB565Encoder(char*& p, APIType ApiType, const EFBCopyParams& params)\n-{\n-  WriteSwizzler(p, params, EFBCopyFormat::RGB565, ApiType);\n-  WRITE(p, "  float3 texSample0;\\n");\n-  WRITE(p, "  float3 texSample1;\\n");\n-\n-  WriteSampleColor(p, "rgb", "texSample0", 0, ApiType, params);\n-  WriteSampleColor(p, "rgb", "texSample1", 1, ApiType, params);\n-  WRITE(p, "  float2 texRs = float2(texSample0.r, texSample1.r);\\n");\n-  WRITE(p, "  float2 texGs = float2(texSample0.g, texSample1.g);\\n");\n-  WRITE(p, "  float2 texBs = float2(texSample0.b, texSample1.b);\\n");\n-\n-  WriteToBitDepth(p, 6, "texGs", "float2 gInt");\n-  WRITE(p, "  float2 gUpper = floor(gInt / 8.0);\\n");\n-  WRITE(p, "  float2 gLower = gInt - gUpper * 8.0;\\n");\n-\n-  WriteToBitDepth(p, 5, "texRs", "ocol0.br");\n-  WRITE(p, "  ocol0.br = ocol0.br * 8.0 + gUpper;\\n");\n-  WriteToBitDepth(p, 5, "texBs", "ocol0.ga");\n-  WRITE(p, "  ocol0.ga = ocol0.ga + gLower * 32.0;\\n");\n-\n-  WRITE(p, "  ocol0 = ocol0 / 255.0;\\n");\n-  WriteEncoderEnd(p);\n-}\n+        imageStore(output_image, int3(int2(coords), 0), norm_color);\n+      }\n \n-static void WriteRGB5A3Encoder(char*& p, APIType ApiType, const EFBCopyParams& params)\n-{\n-  WriteSwizzler(p, params, EFBCopyFormat::RGB5A3, ApiType);\n-\n-  WRITE(p, "  float4 texSample;\\n");\n-  WRITE(p, "  float color0;\\n");\n-  WRITE(p, "  float gUpper;\\n");\n-  WRITE(p, "  float gLower;\\n");\n-\n-  WriteSampleColor(p, "rgba", "texSample", 0, ApiType, params);\n+      )"}},\n+    {TextureFormat::IA4,\n+     {TEXEL_BUFFER_FORMAT_R8_UINT, 0, 8, 8, false,\n+      R"(\n+      DEFINE_MAIN(8, 8)\n+      {\n+        uint2 coords = gl_GlobalInvocationID.xy;\n \n-  // 0.8784 = 224 / 255 which is the maximum alpha value that can be represented in 3 bits\n-  WRITE(p, "if(texSample.a > 0.878f) {\\n");\n+        // Tiled in 8x4 blocks, 8 bits per pixel\n+        uint buffer_pos = GetTiledTexelOffset(uint2(8u, 4u), coords);\n+        uint val = texelFetch(s_input_buffer, int(buffer_pos)).x;\n+        uint i = Convert4To8((val & 0x0Fu));\n+        uint a = Convert4To8((val >> 4));\n+        uint4 color = uint4(i, i, i, a);\n+        float4 norm_color = float4(color) / 255.0;\n \n-  WriteToBitDepth(p, 5, "texSample.g", "color0");\n-  WRITE(p, "  gUpper = floor(color0 / 8.0);\\n");\n-  WRITE(p, "  gLower = color0 - gUpper * 8.0;\\n");\n+        imageStore(output_image, int3(int2(coords), 0), norm_color);\n+      }\n+      )"}},\n+    {TextureFormat::I8,\n+     {TEXEL_BUFFER_FORMAT_R8_UINT, 0, 8, 8, false,\n+      R"(\n+      DEFINE_MAIN(8, 8)\n+      {\n+        uint2 coords = gl_GlobalInvocationID.xy;\n \n-  WriteToBitDepth(p, 5, "texSample.r", "ocol0.b");\n-  WRITE(p, "  ocol0.b = ocol0.b * 4.0 + gUpper + 128.0;\\n");\n-  WriteToBitDepth(p, 5, "texSample.b", "ocol0.g");\n-  WRITE(p, "  ocol0.g = ocol0.g + gLower * 32.0;\\n");\n+        // Tiled in 8x4 blocks, 8 bits per pixel\n+        uint buffer_pos = GetTiledTexelOffset(uint2(8u, 4u), coords);\n+        uint i = texelFetch(s_input_buffer, int(buffer_pos)).x;\n+        uint4 color = uint4(i, i, i, i);\n+        float4 norm_color = float4(color) / 255.0;\n \n-  WRITE(p, "} else {\\n");\n+        imageStore(output_image, int3(int2(coords), 0), norm_color);\n+      }\n+      )"}},\n+    {TextureFormat::IA8,\n+     {TEXEL_BUFFER_FORMAT_R16_UINT, 0, 8, 8, false,\n+      R"(\n+      DEFINE_MAIN(8, 8)\n+      {\n+        uint2 coords = gl_GlobalInvocationID.xy;\n \n-  WriteToBitDepth(p, 4, "texSample.r", "ocol0.b");\n-  WriteToBitDepth(p, 4, "texSample.b", "ocol0.g");\n+        // Tiled in 4x4 blocks, 16 bits per pixel\n+        uint buffer_pos = GetTiledTexelOffset(uint2(4u, 4u), coords);\n+        uint val = texelFetch(s_input_buffer, int(buffer_pos)).x;\n+        uint a = (val & 0xFFu);\n+        uint i = (val >> 8);\n+        uint4 color = uint4(i, i, i, a);\n+        float4 norm_color = float4(color) / 255.0;\n+        imageStore(output_image, int3(int2(coords), 0), norm_color);\n+      }\n+      )"}},\n+    {TextureFormat::RGB565,\n+     {TEXEL_BUFFER_FORMAT_R16_UINT, 0, 8, 8, false,\n+      R"(\n+      DEFINE_MAIN(8, 8)\n+      {\n+        uint2 coords = gl_GlobalInvocationID.xy;\n \n-  WriteToBitDepth(p, 3, "texSample.a", "color0");\n-  WRITE(p, "ocol0.b = ocol0.b + color0 * 16.0;\\n");\n-  WriteToBitDepth(p, 4, "texSample.g", "color0");\n-  WRITE(p, "ocol0.g = ocol0.g + color0 * 16.0;\\n");\n+        // Tiled in 4x4 blocks\n+        uint buffer_pos = GetTiledTexelOffset(uint2(4u, 4u), coords);\n+        uint val = Swap16(texelFetch(s_input_buffer, int(buffer_pos)).x);\n \n-  WRITE(p, "}\\n");\n+        uint4 color;\n+        color.x = Convert5To8(bitfieldExtract(val, 11, 5));\n+        color.y = Convert6To8(bitfieldExtract(val, 5, 6));\n+        color.z = Convert5To8(bitfieldExtract(val, 0, 5));\n+        color.a = 255u;\n \n-  WriteSampleColor(p, "rgba", "texSample", 1, ApiType, params);\n+        float4 norm_color = float4(color) / 255.0;\n+        imageStore(output_image, int3(int2(coords), 0), norm_color);\n+      }\n \n-  WRITE(p, "if(texSample.a > 0.878f) {\\n");\n+      )"}},\n+    {TextureFormat::RGB5A3,\n+     {TEXEL_BUFFER_FORMAT_R16_UINT, 0, 8, 8, false,\n+      R"(\n+      DEFINE_MAIN(8, 8)\n+      {\n+        uint2 coords = gl_GlobalInvocationID.xy;\n \n-  WriteToBitDepth(p, 5, "texSample.g", "color0");\n-  WRITE(p, "  gUpper = floor(color0 / 8.0);\\n");\n-  WRITE(p, "  gLower = color0 - gUpper * 8.0;\\n");\n+        // Tiled in 4x4 blocks\n+        uint buffer_pos = GetTiledTexelOffset(uint2(4u, 4u), coords);\n+        uint val = Swap16(texelFetch(s_input_buffer, int(buffer_pos)).x);\n \n-  WriteToBitDepth(p, 5, "texSample.r", "ocol0.r");\n-  WRITE(p, "  ocol0.r = ocol0.r * 4.0 + gUpper + 128.0;\\n");\n-  WriteToBitDepth(p, 5, "texSample.b", "ocol0.a");\n-  WRITE(p, "  ocol0.a = ocol0.a + gLower * 32.0;\\n");\n+        uint4 color;\n+        if ((val & 0x8000u) != 0u)\n+        {\n+          color.x = Convert5To8(bitfieldExtract(val, 10, 5));\n+          color.y = Convert5To8(bitfieldExtract(val, 5, 5));\n+          color.z = Convert5To8(bitfieldExtract(val, 0, 5));\n+          color.a = 255u;\n+        }\n+        else\n+        {\n+          color.a = Convert3To8(bitfieldExtract(val, 12, 3));\n+          color.r = Convert4To8(bitfieldExtract(val, 8, 4));\n+          color.g = Convert4To8(bitfieldExtract(val, 4, 4));\n+          color.b = Convert4To8(bitfieldExtract(val, 0, 4));\n+        }\n \n-  WRITE(p, "} else {\\n");\n+        float4 norm_color = float4(color) / 255.0;\n+        imageStore(output_image, int3(int2(coords), 0), norm_color);\n+      }\n \n-  WriteToBitDepth(p, 4, "texSample.r", "ocol0.r");\n-  WriteToBitDepth(p, 4, "texSample.b", "ocol0.a");\n+      )"}},\n+    {TextureFormat::RGBA8,\n+     {TEXEL_BUFFER_FORMAT_R16_UINT, 0, 8, 8, false,\n+      R"(\n+      DEFINE_MAIN(8, 8)\n+      {\n+        uint2 coords = gl_GlobalInvocationID.xy;\n \n-  WriteToBitDepth(p, 3, "texSample.a", "color0");\n-  WRITE(p, "ocol0.r = ocol0.r + color0 * 16.0;\\n");\n-  WriteToBitDepth(p, 4, "texSample.g", "color0");\n-  WRITE(p, "ocol0.a = ocol0.a + color0 * 16.0;\\n");\n+        // Tiled in 4x4 blocks\n+        // We can\'t use the normal calculation function, as these are packed as the AR channels\n+        // for the entire block, then the GB channels afterwards.\n+        uint2 block = coords.xy / 4u;\n+        uint2 offset = coords.xy % 4u;\n+        uint buffer_pos = u_src_offset;\n \n-  WRITE(p, "}\\n");\n+        // Our buffer has 16-bit elements, so the offsets here are half what they would be in bytes.\n+        buffer_pos += block.y * u_src_row_stride;\n+        buffer_pos += block.x * 32u;\n+        buffer_pos += offset.y * 4u;\n+        buffer_pos += offset.x;\n \n-  WRITE(p, "  ocol0 = ocol0 / 255.0;\\n");\n-  WriteEncoderEnd(p);\n-}\n+        // The two GB channels follow after the block\'s AR channels.\n+        uint val1 = texelFetch(s_input_buffer, int(buffer_pos + 0u)).x;\n+        uint val2 = texelFetch(s_input_buffer, int(buffer_pos + 16u)).x;\n \n-static void WriteRGBA8Encoder(char*& p, APIType ApiType, const EFBCopyParams& params)\n-{\n-  WriteSwizzler(p, params, EFBCopyFormat::RGBA8, ApiType);\n+        uint4 color;\n+        color.a = (val1 & 0xFFu);\n+        color.r = (val1 >> 8);\n+        color.g = (val2 & 0xFFu);\n+        color.b = (val2 >> 8);\n \n-  WRITE(p, "  float4 texSample;\\n");\n-  WRITE(p, "  float4 color0;\\n");\n-  WRITE(p, "  float4 color1;\\n");\n+        float4 norm_color = float4(color) / 255.0;\n+        imageStore(output_image, int3(int2(coords), 0), norm_color);\n+      }\n+      )"}},\n+    {TextureFormat::CMPR,\n+     {TEXEL_BUFFER_FORMAT_R32G32_UINT, 0, 64, 1, true,\n+      R"(\n+      // In the compute version of this decoder, we flatten the blocks to a one-dimension array.\n+      // Each group is subdivided into 16, and the first thread in each group fetches the DXT data.\n+      // All threads then calculate the possible colors for the block and write to the output image.\n \n-  WriteSampleColor(p, "rgba", "texSample", 0, ApiType, params);\n-  WRITE(p, "  color0.b = texSample.a;\\n");\n-  WRITE(p, "  color0.g = texSample.r;\\n");\n-  WRITE(p, "  color1.b = texSample.g;\\n");\n-  WRITE(p, "  color1.g = texSample.b;\\n");\n+      #define GROUP_SIZE 64u\n+      #define BLOCK_SIZE_X 4u\n+      #define BLOCK_SIZE_Y 4u\n+      #define BLOCK_SIZE (BLOCK_SIZE_X * BLOCK_SIZE_Y)\n+      #define BLOCKS_PER_GROUP (GROUP_SIZE / BLOCK_SIZE)\n \n-  WriteSampleColor(p, "rgba", "texSample", 1, ApiType, params);\n-  WRITE(p, "  color0.r = texSample.a;\\n");\n-  WRITE(p, "  color0.a = texSample.r;\\n");\n-  WRITE(p, "  color1.r = texSample.g;\\n");\n-  WRITE(p, "  color1.a = texSample.b;\\n");\n+      uint DXTBlend(uint v1, uint v2)\n+      {\n+        // 3/8 blend, which is close to 1/3\n+        return ((v1 * 3u + v2 * 5u) >> 3);\n+      }\n \n-  WRITE(p, "  ocol0 = first ? color0 : color1;\\n");\n+      GROUP_SHARED uint2 shared_temp[BLOCKS_PER_GROUP];\n \n-  WriteEncoderEnd(p);\n-}\n+      DEFINE_MAIN(GROUP_SIZE, 8)\n+      {\n+        uint local_thread_id = gl_LocalInvocationID.x;\n+        uint block_in_group = local_thread_id / BLOCK_SIZE;\n+        uint thread_in_block = local_thread_id % BLOCK_SIZE;\n+        uint block_index = gl_WorkGroupID.x * BLOCKS_PER_GROUP + block_in_group;\n \n-static void WriteC4Encoder(char*& p, const char* comp, APIType ApiType, const EFBCopyParams& params)\n-{\n-  WriteSwizzler(p, params, EFBCopyFormat::R4, ApiType);\n-  WRITE(p, "  float4 color0;\\n");\n-  WRITE(p, "  float4 color1;\\n");\n-\n-  WriteSampleColor(p, comp, "color0.b", 0, ApiType, params);\n-  WriteSampleColor(p, comp, "color1.b", 1, ApiType, params);\n-  WriteSampleColor(p, comp, "color0.g", 2, ApiType, params);\n-  WriteSampleColor(p, comp, "color1.g", 3, ApiType, params);\n-  WriteSampleColor(p, comp, "color0.r", 4, ApiType, params);\n-  WriteSampleColor(p, comp, "color1.r", 5, ApiType, params);\n-  WriteSampleColor(p, comp, "color0.a", 6, ApiType, params);\n-  WriteSampleColor(p, comp, "color1.a", 7, ApiType, params);\n-\n-  WriteToBitDepth(p, 4, "color0", "color0");\n-  WriteToBitDepth(p, 4, "color1", "color1");\n-\n-  WRITE(p, "  ocol0 = (color0 * 16.0 + color1) / 255.0;\\n");\n-  WriteEncoderEnd(p);\n-}\n+        // Annoyingly, we can\'t precalculate this as a uniform because the DXT block size differs\n+        // from the block size of the overall texture (4 vs 8). We can however use a multiply and\n+        // subtraction to avoid the modulo for calculating the block\'s X coordinate.\n+        uint blocks_wide = u_src_size.x / BLOCK_SIZE_X;\n+        uint2 block_coords;\n+        block_coords.y = block_index / blocks_wide;\n+        block_coords.x = block_index - (block_coords.y * blocks_wide);\n \n-static void WriteC8Encoder(char*& p, const char* comp, APIType ApiType, const EFBCopyParams& params)\n-{\n-  WriteSwizzler(p, params, EFBCopyFormat::R8, ApiType);\n+        // Only the first thread for each block reads from the texel buffer.\n+        if (thread_in_block == 0u)\n+        {\n+          // Calculate tiled block coordinates.\n+          uint2 tile_block_coords = block_coords / 2u;\n+          uint2 subtile_block_coords = block_coords % 2u;\n+          uint buffer_pos = u_src_offset;\n+          buffer_pos += tile_block_coords.y * u_src_row_stride;\n+          buffer_pos += tile_block_coords.x * 4u;\n+          buffer_pos += subtile_block_coords.y * 2u;\n+          buffer_pos += subtile_block_coords.x;\n \n-  WriteSampleColor(p, comp, "ocol0.b", 0, ApiType, params);\n-  WriteSampleColor(p, comp, "ocol0.g", 1, ApiType, params);\n-  WriteSampleColor(p, comp, "ocol0.r", 2, ApiType, params);\n-  WriteSampleColor(p, comp, "ocol0.a", 3, ApiType, params);\n+          // Read the entire DXT block to shared memory.\n+          uint2 raw_data = texelFetch(s_input_buffer, int(buffer_pos)).xy;\n+          shared_temp[block_in_group] = raw_data;\n+        }\n \n-  WriteEncoderEnd(p);\n-}\n+        // Ensure store is completed before the remaining threads in the block continue.\n+        GROUP_MEMORY_BARRIER_WITH_SYNC;\n \n-static void WriteCC4Encoder(char*& p, const char* comp, APIType ApiType,\n-                            const EFBCopyParams& params)\n-{\n-  WriteSwizzler(p, params, EFBCopyFormat::RA4, ApiType);\n-  WRITE(p, "  float2 texSample;\\n");\n-  WRITE(p, "  float4 color0;\\n");\n-  WRITE(p, "  float4 color1;\\n");\n+        // Unpack colors and swap BE to LE.\n+        uint2 raw_data = shared_temp[block_in_group];\n+        uint swapped = ((raw_data.x & 0xFF00FF00u) >> 8) | ((raw_data.x & 0x00FF00FFu) << 8);\n+        uint c1 = swapped & 0xFFFFu;\n+        uint c2 = swapped >> 16;\n \n-  WriteSampleColor(p, comp, "texSample", 0, ApiType, params);\n-  WRITE(p, "  color0.b = texSample.x;\\n");\n-  WRITE(p, "  color1.b = texSample.y;\\n");\n+        // Expand 5/6 bit channels to 8-bits per channel.\n+        uint blue1 = Convert5To8(bitfieldExtract(c1, 0, 5));\n+        uint blue2 = Convert5To8(bitfieldExtract(c2, 0, 5));\n+        uint green1 = Convert6To8(bitfieldExtract(c1, 5, 6));\n+        uint green2 = Convert6To8(bitfieldExtract(c2, 5, 6));\n+        uint red1 = Convert5To8(bitfieldExtract(c1, 11, 5));\n+        uint red2 = Convert5To8(bitfieldExtract(c2, 11, 5));\n \n-  WriteSampleColor(p, comp, "texSample", 1, ApiType, params);\n-  WRITE(p, "  color0.g = texSample.x;\\n");\n-  WRITE(p, "  color1.g = texSample.y;\\n");\n+        // Determine the four colors the block can use.\n+        // It\'s quicker to just precalculate all four colors rather than branching on the index.\n+        // NOTE: These must be masked with 0xFF. This is done at the normalization stage below.\n+        uint4 color0, color1, color2, color3;\n+        color0 = uint4(red1, green1, blue1, 255u);\n+        color1 = uint4(red2, green2, blue2, 255u);\n+        if (c1 > c2)\n+        {\n+          color2 = uint4(DXTBlend(red2, red1), DXTBlend(green2, green1), DXTBlend(blue2, blue1), 255u);\n+          color3 = uint4(DXTBlend(red1, red2), DXTBlend(green1, green2), DXTBlend(blue1, blue2), 255u);\n+        }\n+        else\n+        {\n+          color2 = uint4((red1 + red2) / 2u, (green1 + green2) / 2u, (blue1 + blue2) / 2u, 255u);\n+          color3 = uint4((red1 + red2) / 2u, (green1 + green2) / 2u, (blue1 + blue2) / 2u, 0u);\n+        }\n \n-  WriteSampleColor(p, comp, "texSample", 2, ApiType, params);\n-  WRITE(p, "  color0.r = texSample.x;\\n");\n-  WRITE(p, "  color1.r = texSample.y;\\n");\n+        // Calculate the texel coordinates that we will write to.\n+        // The divides/modulo here should be turned into a shift/binary AND.\n+        uint local_y = thread_in_block / BLOCK_SIZE_X;\n+        uint local_x = thread_in_block % BLOCK_SIZE_X;\n+        uint global_x = block_coords.x * BLOCK_SIZE_X + local_x;\n+        uint global_y = block_coords.y * BLOCK_SIZE_Y + local_y;\n \n-  WriteSampleColor(p, comp, "texSample", 3, ApiType, params);\n-  WRITE(p, "  color0.a = texSample.x;\\n");\n-  WRITE(p, "  color1.a = texSample.y;\\n");\n+        // Use the coordinates within the block to shift the 32-bit value containing\n+        // all 16 indices to a single 2-bit index.\n+        uint index = bitfieldExtract(raw_data.y, int((local_y * 8u) + (6u - local_x * 2u)), 2);\n \n-  WriteToBitDepth(p, 4, "color0", "color0");\n-  WriteToBitDepth(p, 4, "color1", "color1");\n+        // Select the un-normalized color from the precalculated color array.\n+        // Using a switch statement here removes the need for dynamic indexing of an array.\n+        uint4 color;\n+        switch (index)\n+        {\n+        case 0u:  color = color0;   break;\n+        case 1u:  color = color1;   break;\n+        case 2u:  color = color2;   break;\n+        case 3u:  color = color3;   break;\n+        default:  color = color0;   break;\n+        }\n \n-  WRITE(p, "  ocol0 = (color0 * 16.0 + color1) / 255.0;\\n");\n-  WriteEncoderEnd(p);\n-}\n+        // Normalize and write to the output image.\n+        float4 norm_color = float4(color & 0xFFu) / 255.0;\n+        imageStore(output_image, int3(int2(uint2(global_x, global_y)), 0), norm_color);\n+      }\n+      )"}},\n+    {TextureFormat::C4,\n+     {TEXEL_BUFFER_FORMAT_R8_UINT, static_cast<u32>(TexDecoder_GetPaletteSize(TextureFormat::C4)),\n+      8, 8, false,\n+      R"(\n+      DEFINE_MAIN(8, 8)\n+      {\n+        uint2 coords = gl_GlobalInvocationID.xy;\n \n-static void WriteCC8Encoder(char*& p, const char* comp, APIType ApiType,\n-                            const EFBCopyParams& params)\n-{\n-  WriteSwizzler(p, params, EFBCopyFormat::RA8, ApiType);\n+        // Tiled in 8x8 blocks, 4 bits per pixel\n+        // We need to do the tiling manually here because the texel size is smaller than\n+        // the size of the buffer elements.\n+        uint2 block = coords.xy / 8u;\n+        uint2 offset = coords.xy % 8u;\n+        uint buffer_pos = u_src_offset;\n+        buffer_pos += block.y * u_src_row_stride;\n+        buffer_pos += block.x * 32u;\n+        buffer_pos += offset.y * 4u;\n+        buffer_pos += offset.x / 2u;\n \n-  WriteSampleColor(p, comp, "ocol0.bg", 0, ApiType, params);\n-  WriteSampleColor(p, comp, "ocol0.ra", 1, ApiType, params);\n+        // Select high nibble for odd texels, low for even.\n+        uint val = texelFetch(s_input_buffer, int(buffer_pos)).x;\n+        uint index = ((coords.x & 1u) == 0u) ? (val >> 4) : (val & 0x0Fu);\n+        float4 norm_color = GetPaletteColorNormalized(index);\n+        imageStore(output_image, int3(int2(coords), 0), norm_color);\n+      }\n \n-  WriteEncoderEnd(p);\n-}\n+      )"}},\n+    {TextureFormat::C8,\n+     {TEXEL_BUFFER_FORMAT_R8_UINT, static_cast<u32>(TexDecoder_GetPaletteSize(TextureFormat::C8)),\n+      8, 8, false,\n+      R"(\n+      DEFINE_MAIN(8, 8)\n+      {\n+        uint2 coords = gl_GlobalInvocationID.xy;\n \n-static void WriteZ8Encoder(char*& p, const char* multiplier, APIType ApiType,\n-                           const EFBCopyParams& params)\n-{\n-  WriteSwizzler(p, params, EFBCopyFormat::G8, ApiType);\n+        // Tiled in 8x4 blocks, 8 bits per pixel\n+        uint buffer_pos = GetTiledTexelOffset(uint2(8u, 4u), coords);\n+        uint index = texelFetch(s_input_buffer, int(buffer_pos)).x;\n+        float4 norm_color = GetPaletteColorNormalized(index);\n+        imageStore(output_image, int3(int2(coords), 0), norm_color);\n+      }\n+      )"}},\n+    {TextureFormat::C14X2,\n+     {TEXEL_BUFFER_FORMAT_R16_UINT,\n+      static_cast<u32>(TexDecoder_GetPaletteSize(TextureFormat::C14X2)), 8, 8, false,\n+      R"(\n+      DEFINE_MAIN(8, 8)\n+      {\n+        uint2 coords = gl_GlobalInvocationID.xy;\n \n-  WRITE(p, " float depth;\\n");\n+        // Tiled in 4x4 blocks, 16 bits per pixel\n+        uint buffer_pos = GetTiledTexelOffset(uint2(4u, 4u), coords);\n+        uint index = Swap16(texelFetch(s_input_buffer, int(buffer_pos)).x) & 0x3FFFu;\n+        float4 norm_color = GetPaletteColorNormalized(index);\n+        imageStore(output_image, int3(int2(coords), 0), norm_color);\n+      }\n+      )"}},\n \n-  WriteSampleColor(p, "r", "depth", 0, ApiType, params);\n-  WRITE(p, "ocol0.b = frac(depth * %s);\\n", multiplier);\n+    // We do the inverse BT.601 conversion for YCbCr to RGB\n+    // http://www.equasys.de/colorconversion.html#YCbCr-RGBColorFormatConversion\n+    {TextureFormat::XFB,\n+     {TEXEL_BUFFER_FORMAT_RGBA8_UINT, 0, 8, 8, false,\n+      R"(\n+      DEFINE_MAIN(8, 8)\n+      {\n+        uint2 uv = gl_GlobalInvocationID.xy;\n+        int buffer_pos = int(u_src_offset + (uv.y * u_src_row_stride) + (uv.x / 2u));\n+        float4 yuyv = float4(texelFetch(s_input_buffer, buffer_pos));\n \n-  WriteSampleColor(p, "r", "depth", 1, ApiType, params);\n-  WRITE(p, "ocol0.g = frac(depth * %s);\\n", multiplier);\n+        float y = (uv.x & 1u) != 0u ? yuyv.b : yuyv.r;\n \n-  WriteSampleColor(p, "r", "depth", 2, ApiType, params);\n-  WRITE(p, "ocol0.r = frac(depth * %s);\\n", multiplier);\n+        float yComp = 1.164 * (y - 16.0);\n+        float uComp = yuyv.g - 128.0;\n+        float vComp = yuyv.a - 128.0;\n \n-  WriteSampleColor(p, "r", "depth", 3, ApiType, params);\n-  WRITE(p, "ocol0.a = frac(depth * %s);\\n", multiplier);\n+        float4 rgb = float4(yComp + (1.596 * vComp),\n+                        yComp - (0.813 * vComp) - (0.391 * uComp),\n+                        yComp + (2.018 * uComp),\n+                        255.0);\n+        float4 rgba_norm = rgb / 255.0;\n+        imageStore(output_image, int3(int2(uv), 0), rgba_norm);\n+      }\n+      )"}},\n+};\n \n-  WriteEncoderEnd(p);\n+u16 GetEncodedSampleCount(EFBCopyFormat format)\n+{\n+  switch (format)\n+  {\n+  case EFBCopyFormat::R4:\n+    return 8;\n+  case EFBCopyFormat::RA4:\n+    return 4;\n+  case EFBCopyFormat::RA8:\n+    return 2;\n+  case EFBCopyFormat::RGB565:\n+    return 2;\n+  case EFBCopyFormat::RGB5A3:\n+    return 2;\n+  case EFBCopyFormat::RGBA8:\n+    return 1;\n+  case EFBCopyFormat::A8:\n+  case EFBCopyFormat::R8_0x1:\n+  case EFBCopyFormat::R8:\n+  case EFBCopyFormat::G8:\n+  case EFBCopyFormat::B8:\n+    return 4;\n+  case EFBCopyFormat::RG8:\n+  case EFBCopyFormat::GB8:\n+    return 2;\n+  case EFBCopyFormat::XFB:\n+    return 2;\n+  default:\n+    PanicAlert("Invalid EFB Copy Format (0x%X)! (GetEncodedSampleCount)", static_cast<int>(format));\n+    return 1;\n+  }\n }\n \n-static void WriteZ16Encoder(char*& p, APIType ApiType, const EFBCopyParams& params)\n+class EncodingShaderGenerator\n {\n-  WriteSwizzler(p, params, EFBCopyFormat::RA8, ApiType);\n-\n-  WRITE(p, "  float depth;\\n");\n-  WRITE(p, "  float3 expanded;\\n");\n-\n-  // byte order is reversed\n-\n-  WriteSampleColor(p, "r", "depth", 0, ApiType, params);\n+public:\n+  static std::string GenerateShader(const EFBCopyParams& params, APIType api_type)\n+  {\n+    EncodingShaderGenerator generator;\n+    return generator.GenerateEncodingShader(params, api_type);\n+  }\n \n-  WRITE(p, "  depth *= 16777216.0;\\n");\n-  WRITE(p, "  expanded.r = floor(depth / (256.0 * 256.0));\\n");\n-  WRITE(p, "  depth -= expanded.r * 256.0 * 256.0;\\n");\n-  WRITE(p, "  expanded.g = floor(depth / 256.0);\\n");\n+private:\n+  explicit EncodingShaderGenerator() { m_buffer.reserve(16384); }\n \n-  WRITE(p, "  ocol0.b = expanded.g / 255.0;\\n");\n-  WRITE(p, "  ocol0.g = expanded.r / 255.0;\\n");\n+  // Appends an unformatted string to the buffer.\n+  void Append(std::string_view text) { m_buffer += text; }\n \n-  WriteSampleColor(p, "r", "depth", 1, ApiType, params);\n+  // Appends a formatted string to the internal buffer using fmt format strings.\n+  template <typename... Args>\n+  void AppendFmt(std::string_view format, Args&&... args)\n+  {\n+    fmt::format_to(std::back_inserter(m_buffer), format, std::forward<Args>(args)...);\n+  }\n \n-  WRITE(p, "  depth *= 16777216.0;\\n");\n-  WRITE(p, "  expanded.r = floor(depth / (256.0 * 256.0));\\n");\n-  WRITE(p, "  depth -= expanded.r * 256.0 * 256.0;\\n");\n-  WRITE(p, "  expanded.g = floor(depth / 256.0);\\n");\n+  std::string GenerateEncodingShader(const EFBCopyParams& params, APIType api_type)\n+  {\n+    switch (params.copy_format)\n+    {\n+    case EFBCopyFormat::R4:\n+      if (params.yuv)\n+        WriteI4Encoder(api_type, params);\n+      else\n+        WriteC4Encoder("r", api_type, params);\n+      break;\n+    case EFBCopyFormat::RA4:\n+      if (params.yuv)\n+        WriteIA4Encoder(api_type, params);\n+      else\n+        WriteCC4Encoder("ar", api_type, params);\n+      break;\n+    case EFBCopyFormat::RA8:\n+      if (params.yuv)\n+        WriteIA8Encoder(api_type, params);\n+      else\n+        WriteCC8Encoder("ar", api_type, params);\n+      break;\n+    case EFBCopyFormat::RGB565:\n+      WriteRGB565Encoder(api_type, params);\n+      break;\n+    case EFBCopyFormat::RGB5A3:\n+      WriteRGB5A3Encoder(api_type, params);\n+      break;\n+    case EFBCopyFormat::RGBA8:\n+      if (params.depth)\n+        WriteZ24Encoder(api_type, params);\n+      else\n+        WriteRGBA8Encoder(api_type, params);\n+      break;\n+    case EFBCopyFormat::A8:\n+      WriteC8Encoder("a", api_type, params);\n+      break;\n+    case EFBCopyFormat::R8_0x1:\n+    case EFBCopyFormat::R8:\n+      if (params.yuv)\n+        WriteI8Encoder(api_type, params);\n+      else\n+        WriteC8Encoder("r", api_type, params);\n+      break;\n+    case EFBCopyFormat::G8:\n+      if (params.depth)\n+        WriteZ8Encoder("256.0", api_type, params);  // Z8M\n+      else\n+        WriteC8Encoder("g", api_type, params);\n+      break;\n+    case EFBCopyFormat::B8:\n+      if (params.depth)\n+        WriteZ8Encoder("65536.0", api_type, params);  // Z8L\n+      else\n+        WriteC8Encoder("b", api_type, params);\n+      break;\n+    case EFBCopyFormat::RG8:\n+      if (params.depth)\n+        WriteZ16Encoder(api_type, params);  // Z16H\n+      else\n+        WriteCC8Encoder("gr", api_type, params);\n+      break;\n+    case EFBCopyFormat::GB8:\n+      if (params.depth)\n+        WriteZ16LEncoder(api_type, params);  // Z16L\n+      else\n+        WriteCC8Encoder("bg", api_type, params);\n+      break;\n+    case EFBCopyFormat::XFB:\n+      WriteXFBEncoder(api_type, params);\n+      break;\n+    default:\n+      PanicAlert("Invalid EFB Copy Format (0x%X)! (GenerateEncodingShader)",\n+                 static_cast<int>(params.copy_format));\n+      break;\n+    }\n \n-  WRITE(p, "  ocol0.r = expanded.g / 255.0;\\n");\n-  WRITE(p, "  ocol0.a = expanded.r / 255.0;\\n");\n+    return m_buffer;\n+  }\n \n-  WriteEncoderEnd(p);\n-}\n+  void WriteHeader(APIType api_type)\n+  {\n+    if (api_type == APIType::OpenGL || api_type == APIType::Vulkan)\n+    {\n+      // left, top, of source rectangle within source texture\n+      // width of the destination rectangle, scale_factor (1 or 2)\n+      Append("UBO_BINDING(std140, 1) uniform PSBlock {\\n"\n+             "  int4 position;\\n"\n+             "  float y_scale;\\n"\n+             "  float gamma_rcp;\\n"\n+             "  float2 clamp_tb;\\n"\n+             "  float3 filter_coefficients;\\n"\n+             "};\\n");\n+      if (g_ActiveConfig.backend_info.bSupportsGeometryShaders)\n+      {\n+        Append("VARYING_LOCATION(0) in VertexData {\\n"\n+               "  float3 v_tex0;\\n"\n+               "};\\n");\n+      }\n+      else\n+      {\n+        Append("VARYING_LOCATION(0) in float3 v_tex0;\\n");\n+      }\n+      Append("SAMPLER_BINDING(0) uniform sampler2DArray samp0;\\n"\n+             "FRAGMENT_OUTPUT_LOCATION(0) out float4 ocol0;\\n");\n+    }\n+    else  // D3D\n+    {\n+      Append("cbuffer PSBlock : register(b0) {\\n"\n+             "  int4 position;\\n"\n+             "  float y_scale;\\n"\n+             "  float gamma_rcp;\\n"\n+             "  float2 clamp_tb;\\n"\n+             "  float3 filter_coefficients;\\n"\n+             "};\\n"\n+             "sampler samp0 : register(s0);\\n"\n+             "Texture2DArray Tex0 : register(t0);\\n");\n+    }\n \n-static void WriteZ16LEncoder(char*& p, APIType ApiType, const EFBCopyParams& params)\n-{\n-  WriteSwizzler(p, params, EFBCopyFormat::GB8, ApiType);\n+    // D3D does not have roundEven(), only round(), which is specified "to the nearest integer".\n+    // This differs from the roundEven() behavior, but to get consistency across drivers in OpenGL\n+    // we need to use roundEven().\n+    if (api_type == APIType::D3D)\n+      Append("#define roundEven(x) round(x)\\n");\n+\n+    // Alpha channel in the copy is set to 1 the EFB format does not have an alpha channel.\n+    Append("float4 RGBA8ToRGB8(float4 src)\\n"\n+           "{\\n"\n+           "  return float4(src.xyz, 1.0);\\n"\n+           "}\\n"\n+           "float4 RGBA8ToRGBA6(float4 src)\\n"\n+           "{\\n"\n+           "  int4 val = int4(roundEven(src * 255.0)) >> 2;\\n"\n+           "  return float4(val) / 63.0;\\n"\n+           "}\\n"\n+           "float4 RGBA8ToRGB565(float4 src)\\n"\n+           "{\\n"\n+           "  int4 val = int4(roundEven(src * 255.0));\\n"\n+           "  val = int4(val.r >> 3, val.g >> 2, val.b >> 3, 1);\\n"\n+           "  return float4(val) / float4(31.0, 63.0, 31.0, 1.0);\\n"\n+           "}\\n");\n+  }\n \n-  WRITE(p, "  float depth;\\n");\n-  WRITE(p, "  float3 expanded;\\n");\n+  void WriteSampleFunction(const EFBCopyParams& params, APIType api_type)\n+  {\n+    const auto WriteSampleOp = [api_type, &params, this](int y_offset) {\n+      if (!params.depth)\n+      {\n+        switch (params.efb_format)\n+        {\n+        case PEControl::RGB8_Z24:\n+          Append("RGBA8ToRGB8(");\n+          break;\n+        case PEControl::RGBA6_Z24:\n+          Append("RGBA8ToRGBA6(");\n+          break;\n+        case PEControl::RGB565_Z16:\n+          Append("RGBA8ToRGB565(");\n+          break;\n+        default:\n+          Append("(");\n+          break;\n+        }\n+      }\n+      else\n+      {\n+        // Handle D3D depth inversion.\n+        if (!g_ActiveConfig.backend_info.bSupportsReversedDepthRange)\n+          Append("1.0 - (");\n+        else\n+          Append("()");', 'original_position': 1324, 'body': 'This looks weird. Everything else only writes an opening parenthesis, but no closing ones.\r\nThen again, I have no idea about shader code \U0001f937\u200d♂ ', 'commit_id': '69691d593793c738769fa22643cdca86e9e60ec2', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8510#discussion_r354460975', 'id': 354460975, 'updated_at': '2019-12-05T17:57:14Z', 'node_id': 'MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDM1NDQ2MDk3NQ==', 'author_association': 'MEMBER', 'path': 'Source/Core/VideoCommon/TextureConversionShader.cpp', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/354460975'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8510'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/8510#discussion_r354460975'}}, 'position': 1324, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/354460975', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8510'}], 'state': 'commented', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8510#pullrequestreview-327740679', 'author': 'BhaaLseN'}
2019-12-05T17:57:16.842378	{'type': 'gh_pull_request_review', 'pr_id': 8510, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'action': 'submitted', 'pr_title': 'VideoCommon/TextureConversionShader: Migrate generation off sprintf', 'comments': [{'created_at': '2019-12-05T17:55:17Z', 'user': {'type': 'User', 'avatar_url': 'https://avatars1.githubusercontent.com/u/826052?v=4', 'login': 'BhaaLseN', 'gists_url': 'https://api.github.com/users/BhaaLseN/gists{/gist_id}', 'html_url': 'https://github.com/BhaaLseN', 'events_url': 'https://api.github.com/users/BhaaLseN/events{/privacy}', 'id': 826052, 'site_admin': False, 'followers_url': 'https://api.github.com/users/BhaaLseN/followers', 'subscriptions_url': 'https://api.github.com/users/BhaaLseN/subscriptions', 'node_id': 'MDQ6VXNlcjgyNjA1Mg==', 'organizations_url': 'https://api.github.com/users/BhaaLseN/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/BhaaLseN/received_events', 'following_url': 'https://api.github.com/users/BhaaLseN/following{/other_user}', 'repos_url': 'https://api.github.com/users/BhaaLseN/repos', 'url': 'https://api.github.com/users/BhaaLseN', 'starred_url': 'https://api.github.com/users/BhaaLseN/starred{/owner}{/repo}'}, 'original_commit_id': '69691d593793c738769fa22643cdca86e9e60ec2', 'pull_request_review_id': 327740679, 'diff_hunk': '@@ -2,1397 +2,1421 @@\n // Licensed under GPLv2+\n // Refer to the license.txt file included.\n \n-#include <array>\n-#include <cmath>\n-#include <cstdio>\n+#include "VideoCommon/TextureConversionShader.h"\n+\n+#include <iterator>\n #include <map>\n #include <sstream>\n \n-#include "Common/CommonFuncs.h"\n+#include <fmt/format.h>\n+\n #include "Common/CommonTypes.h"\n #include "Common/MathUtil.h"\n #include "Common/MsgHandler.h"\n-#include "VideoCommon/RenderBase.h"\n #include "VideoCommon/TextureCacheBase.h"\n-#include "VideoCommon/TextureConversionShader.h"\n #include "VideoCommon/VertexManagerBase.h"\n #include "VideoCommon/VideoCommon.h"\n #include "VideoCommon/VideoConfig.h"\n \n-#define WRITE p += sprintf\n-\n-static char text[16384];\n-static bool IntensityConstantAdded = false;\n-\n namespace TextureConversionShaderTiled\n {\n-u16 GetEncodedSampleCount(EFBCopyFormat format)\n-{\n-  switch (format)\n-  {\n-  case EFBCopyFormat::R4:\n-    return 8;\n-  case EFBCopyFormat::RA4:\n-    return 4;\n-  case EFBCopyFormat::RA8:\n-    return 2;\n-  case EFBCopyFormat::RGB565:\n-    return 2;\n-  case EFBCopyFormat::RGB5A3:\n-    return 2;\n-  case EFBCopyFormat::RGBA8:\n-    return 1;\n-  case EFBCopyFormat::A8:\n-  case EFBCopyFormat::R8_0x1:\n-  case EFBCopyFormat::R8:\n-  case EFBCopyFormat::G8:\n-  case EFBCopyFormat::B8:\n-    return 4;\n-  case EFBCopyFormat::RG8:\n-  case EFBCopyFormat::GB8:\n-    return 2;\n-  case EFBCopyFormat::XFB:\n-    return 2;\n-  default:\n-    PanicAlert("Invalid EFB Copy Format (0x%X)! (GetEncodedSampleCount)", static_cast<int>(format));\n-    return 1;\n-  }\n-}\n-\n-static void WriteHeader(char*& p, APIType ApiType)\n+namespace\n {\n-  if (ApiType == APIType::OpenGL || ApiType == APIType::Vulkan)\n-  {\n-    // left, top, of source rectangle within source texture\n-    // width of the destination rectangle, scale_factor (1 or 2)\n-    WRITE(p, "UBO_BINDING(std140, 1) uniform PSBlock {\\n");\n-    WRITE(p, "  int4 position;\\n");\n-    WRITE(p, "  float y_scale;\\n");\n-    WRITE(p, "  float gamma_rcp;\\n");\n-    WRITE(p, "  float2 clamp_tb;\\n");\n-    WRITE(p, "  float3 filter_coefficients;\\n");\n-    WRITE(p, "};\\n");\n-    if (g_ActiveConfig.backend_info.bSupportsGeometryShaders)\n-    {\n-      WRITE(p, "VARYING_LOCATION(0) in VertexData {\\n");\n-      WRITE(p, "  float3 v_tex0;\\n");\n-      WRITE(p, "};\\n");\n-    }\n-    else\n-    {\n-      WRITE(p, "VARYING_LOCATION(0) in float3 v_tex0;\\n");\n-    }\n-    WRITE(p, "SAMPLER_BINDING(0) uniform sampler2DArray samp0;\\n");\n-    WRITE(p, "FRAGMENT_OUTPUT_LOCATION(0) out float4 ocol0;\\n");\n-  }\n-  else  // D3D\n-  {\n-    WRITE(p, "cbuffer PSBlock : register(b0) {\\n");\n-    WRITE(p, "  int4 position;\\n");\n-    WRITE(p, "  float y_scale;\\n");\n-    WRITE(p, "  float gamma_rcp;\\n");\n-    WRITE(p, "  float2 clamp_tb;\\n");\n-    WRITE(p, "  float3 filter_coefficients;\\n");\n-    WRITE(p, "};\\n");\n-    WRITE(p, "sampler samp0 : register(s0);\\n");\n-    WRITE(p, "Texture2DArray Tex0 : register(t0);\\n");\n-  }\n+// NOTE: In these uniforms, a row refers to a row of blocks, not texels.\n+constexpr char s_decoding_shader_header[] = R"(\n+#if defined(PALETTE_FORMAT_IA8) || defined(PALETTE_FORMAT_RGB565) || defined(PALETTE_FORMAT_RGB5A3)\n+#define HAS_PALETTE 1\n+#endif\n \n-  // D3D does not have roundEven(), only round(), which is specified "to the nearest integer".\n-  // This differs from the roundEven() behavior, but to get consistency across drivers in OpenGL\n-  // we need to use roundEven().\n-  if (ApiType == APIType::D3D)\n-    WRITE(p, "#define roundEven(x) round(x)\\n");\n-\n-  // Alpha channel in the copy is set to 1 the EFB format does not have an alpha channel.\n-  WRITE(p, "float4 RGBA8ToRGB8(float4 src)\\n");\n-  WRITE(p, "{\\n");\n-  WRITE(p, "  return float4(src.xyz, 1.0);\\n");\n-  WRITE(p, "}\\n");\n-\n-  WRITE(p, "float4 RGBA8ToRGBA6(float4 src)\\n");\n-  WRITE(p, "{\\n");\n-  WRITE(p, "  int4 val = int4(roundEven(src * 255.0)) >> 2;\\n");\n-  WRITE(p, "  return float4(val) / 63.0;\\n");\n-  WRITE(p, "}\\n");\n-\n-  WRITE(p, "float4 RGBA8ToRGB565(float4 src)\\n");\n-  WRITE(p, "{\\n");\n-  WRITE(p, "  int4 val = int4(roundEven(src * 255.0));\\n");\n-  WRITE(p, "  val = int4(val.r >> 3, val.g >> 2, val.b >> 3, 1);\\n");\n-  WRITE(p, "  return float4(val) / float4(31.0, 63.0, 31.0, 1.0);\\n");\n-  WRITE(p, "}\\n");\n-}\n+#ifdef API_D3D\n+cbuffer UBO : register(b0) {\n+#else\n+UBO_BINDING(std140, 1) uniform UBO {\n+#endif\n+  uint2 u_dst_size;\n+  uint2 u_src_size;\n+  uint u_src_offset;\n+  uint u_src_row_stride;\n+  uint u_palette_offset;\n+};\n \n-static void WriteSampleFunction(char*& p, const EFBCopyParams& params, APIType ApiType)\n-{\n-  auto WriteSampleOp = [&](int yoffset) {\n-    if (!params.depth)\n-    {\n-      switch (params.efb_format)\n-      {\n-      case PEControl::RGB8_Z24:\n-        WRITE(p, "RGBA8ToRGB8(");\n-        break;\n-      case PEControl::RGBA6_Z24:\n-        WRITE(p, "RGBA8ToRGBA6(");\n-        break;\n-      case PEControl::RGB565_Z16:\n-        WRITE(p, "RGBA8ToRGB565(");\n-        break;\n-      default:\n-        WRITE(p, "(");\n-        break;\n-      }\n-    }\n-    else\n-    {\n-      // Handle D3D depth inversion.\n-      if (!g_ActiveConfig.backend_info.bSupportsReversedDepthRange)\n-        WRITE(p, "1.0 - (");\n-      else\n-        WRITE(p, "(");\n-    }\n+#ifdef API_D3D\n \n-    if (ApiType == APIType::OpenGL || ApiType == APIType::Vulkan)\n-      WRITE(p, "texture(samp0, float3(");\n-    else\n-      WRITE(p, "Tex0.Sample(samp0, float3(");\n+Buffer<uint4> s_input_buffer : register(t0);\n+#ifdef HAS_PALETTE\n+Buffer<uint4> s_palette_buffer : register(t1);\n+#endif\n \n-    WRITE(p, "uv.x + float(xoffset) * pixel_size.x, ");\n+RWTexture2DArray<unorm float4> output_image : register(u0);\n \n-    // Reverse the direction for OpenGL, since positive numbers are distance from the bottom row.\n-    if (yoffset != 0)\n-    {\n-      if (ApiType == APIType::OpenGL)\n-        WRITE(p, "clamp(uv.y - float(%d) * pixel_size.y, clamp_tb.x, clamp_tb.y)", yoffset);\n-      else\n-        WRITE(p, "clamp(uv.y + float(%d) * pixel_size.y, clamp_tb.x, clamp_tb.y)", yoffset);\n-    }\n-    else\n-    {\n-      WRITE(p, "uv.y");\n-    }\n+// Helpers for reading/writing.\n+#define texelFetch(buffer, pos) buffer.Load(pos)\n+#define imageStore(image, coords, value) image[coords] = value\n+#define GROUP_MEMORY_BARRIER_WITH_SYNC GroupMemoryBarrierWithGroupSync();\n+#define GROUP_SHARED groupshared\n \n-    WRITE(p, ", 0.0)))");\n-  };\n+#define DEFINE_MAIN(lx, ly) \\\n+  [numthreads(lx, ly, 1)] \\\n+  void main(uint3 gl_WorkGroupID : SV_GroupId, \\\n+            uint3 gl_LocalInvocationID : SV_GroupThreadID, \\\n+            uint3 gl_GlobalInvocationID : SV_DispatchThreadID)\n \n-  // The copy filter applies to both color and depth copies. This has been verified on hardware.\n-  // The filter is only applied to the RGB channels, the alpha channel is left intact.\n-  WRITE(p, "float4 SampleEFB(float2 uv, float2 pixel_size, int xoffset)\\n");\n-  WRITE(p, "{\\n");\n-  if (params.copy_filter)\n-  {\n-    WRITE(p, "  float4 prev_row = ");\n-    WriteSampleOp(-1);\n-    WRITE(p, ";\\n");\n-    WRITE(p, "  float4 current_row = ");\n-    WriteSampleOp(0);\n-    WRITE(p, ";\\n");\n-    WRITE(p, "  float4 next_row = ");\n-    WriteSampleOp(1);\n-    WRITE(p, ";\\n");\n-    WRITE(p, "  return float4(min(prev_row.rgb * filter_coefficients[0] +\\n"\n-             "                      current_row.rgb * filter_coefficients[1] +\\n"\n-             "                      next_row.rgb * filter_coefficients[2], \\n"\n-             "                    float3(1, 1, 1)), current_row.a);\\n");\n-  }\n-  else\n-  {\n-    WRITE(p, "  float4 current_row = ");\n-    WriteSampleOp(0);\n-    WRITE(p, ";\\n");\n-    WRITE(p, "return float4(min(current_row.rgb * filter_coefficients[1], float3(1, 1, 1)),\\n"\n-             "              current_row.a);\\n");\n-  }\n-  WRITE(p, "}\\n");\n+uint bitfieldExtract(uint val, int off, int size)\n+{\n+  // This built-in function is only support in OpenGL 4.0+ and ES 3.1+\\n"\n+  // Microsoft\'s HLSL compiler automatically optimises this to a bitfield extract instruction.\n+  uint mask = uint((1 << size) - 1);\n+  return uint(val >> off) & mask;\n }\n \n-// block dimensions : widthStride, heightStride\n-// texture dims : width, height, x offset, y offset\n-static void WriteSwizzler(char*& p, const EFBCopyParams& params, EFBCopyFormat format,\n-                          APIType ApiType)\n-{\n-  WriteHeader(p, ApiType);\n-  WriteSampleFunction(p, params, ApiType);\n+#else\n \n-  if (ApiType == APIType::OpenGL || ApiType == APIType::Vulkan)\n-  {\n-    WRITE(p, "void main()\\n");\n-    WRITE(p, "{\\n"\n-             "  int2 sampleUv;\\n"\n-             "  int2 uv1 = int2(gl_FragCoord.xy);\\n");\n-  }\n-  else  // D3D\n-  {\n-    WRITE(p, "void main(\\n");\n-    WRITE(p, "  in float3 v_tex0 : TEXCOORD0,\\n");\n-    WRITE(p, "  in float4 rawpos : SV_Position,\\n");\n-    WRITE(p, "  out float4 ocol0 : SV_Target)\\n");\n-    WRITE(p, "{\\n"\n-             "  int2 sampleUv;\\n"\n-             "  int2 uv1 = int2(rawpos.xy);\\n");\n-  }\n+TEXEL_BUFFER_BINDING(0) uniform usamplerBuffer s_input_buffer;\n+#ifdef HAS_PALETTE\n+TEXEL_BUFFER_BINDING(1) uniform usamplerBuffer s_palette_buffer;\n+#endif\n+IMAGE_BINDING(rgba8, 0) uniform writeonly image2DArray output_image;\n \n-  int blkW = TexDecoder_GetEFBCopyBlockWidthInTexels(format);\n-  int blkH = TexDecoder_GetEFBCopyBlockHeightInTexels(format);\n-  int samples = GetEncodedSampleCount(format);\n+#define GROUP_MEMORY_BARRIER_WITH_SYNC memoryBarrierShared(); barrier();\n+#define GROUP_SHARED shared\n \n-  WRITE(p, "  int x_block_position = (uv1.x >> %d) << %d;\\n", IntLog2(blkH * blkW / samples),\n-        IntLog2(blkW));\n-  WRITE(p, "  int y_block_position = uv1.y << %d;\\n", IntLog2(blkH));\n-  if (samples == 1)\n-  {\n-    // With samples == 1, we write out pairs of blocks; one A8R8, one G8B8.\n-    WRITE(p, "  bool first = (uv1.x & %d) == 0;\\n", blkH * blkW / 2);\n-    samples = 2;\n-  }\n-  WRITE(p, "  int offset_in_block = uv1.x & %d;\\n", (blkH * blkW / samples) - 1);\n-  WRITE(p, "  int y_offset_in_block = offset_in_block >> %d;\\n", IntLog2(blkW / samples));\n-  WRITE(p, "  int x_offset_in_block = (offset_in_block & %d) << %d;\\n", (blkW / samples) - 1,\n-        IntLog2(samples));\n-\n-  WRITE(p, "  sampleUv.x = x_block_position + x_offset_in_block;\\n");\n-  WRITE(p, "  sampleUv.y = y_block_position + y_offset_in_block;\\n");\n-\n-  WRITE(p,\n-        "  float2 uv0 = float2(sampleUv);\\n");  // sampleUv is the sample position in (int)gx_coords\n-  WRITE(p, "  uv0 += float2(0.5, 0.5);\\n");     // move to center of pixel\n-  WRITE(p, "  uv0 *= float(position.w);\\n");  // scale by two if needed (also move to pixel borders\n-                                              // so that linear filtering will average adjacent\n-                                              // pixel)\n-  WRITE(p, "  uv0 += float2(position.xy);\\n");                    // move to copied rect\n-  WRITE(p, "  uv0 /= float2(%d, %d);\\n", EFB_WIDTH, EFB_HEIGHT);  // normalize to [0:1]\n-  WRITE(p, "  uv0 /= float2(1, y_scale);\\n");                     // apply the y scaling\n-  if (ApiType == APIType::OpenGL)                                 // ogl has to flip up and down\n-  {\n-    WRITE(p, "  uv0.y = 1.0-uv0.y;\\n");\n-  }\n+#define DEFINE_MAIN(lx, ly) \\\n+  layout(local_size_x = lx, local_size_y = ly) in; \\\n+  void main()\n \n-  WRITE(p, "  float2 pixel_size = float2(position.w, position.w) / float2(%d, %d);\\n", EFB_WIDTH,\n-        EFB_HEIGHT);\n-}\n+#endif\n \n-static void WriteSampleColor(char*& p, const char* colorComp, const char* dest, int xoffset,\n-                             APIType ApiType, const EFBCopyParams& params)\n+uint Swap16(uint v)\n {\n-  WRITE(p, "  %s = SampleEFB(uv0, pixel_size, %d).%s;\\n", dest, xoffset, colorComp);\n+  // Convert BE to LE.\n+  return ((v >> 8) | (v << 8)) & 0xFFFFu;\n }\n \n-static void WriteColorToIntensity(char*& p, const char* src, const char* dest)\n+uint Convert3To8(uint v)\n {\n-  if (!IntensityConstantAdded)\n-  {\n-    WRITE(p, "  float4 IntensityConst = float4(0.257f,0.504f,0.098f,0.0625f);\\n");\n-    IntensityConstantAdded = true;\n-  }\n-  WRITE(p, "  %s = dot(IntensityConst.rgb, %s.rgb);\\n", dest, src);\n-  // don\'t add IntensityConst.a yet, because doing it later is faster and uses less instructions,\n-  // due to vectorization\n+  // Swizzle bits: 00000123 -> 12312312\n+  return (v << 5) | (v << 2) | (v >> 1);\n }\n-\n-static void WriteToBitDepth(char*& p, u8 depth, const char* src, const char* dest)\n+uint Convert4To8(uint v)\n {\n-  WRITE(p, "  %s = floor(%s * 255.0 / exp2(8.0 - %d.0));\\n", dest, src, depth);\n+  // Swizzle bits: 00001234 -> 12341234\n+  return (v << 4) | v;\n }\n-\n-static void WriteEncoderEnd(char*& p)\n+uint Convert5To8(uint v)\n {\n-  WRITE(p, "}\\n");\n-  IntensityConstantAdded = false;\n+  // Swizzle bits: 00012345 -> 12345123\n+  return (v << 3) | (v >> 2);\n }\n-\n-static void WriteI8Encoder(char*& p, APIType ApiType, const EFBCopyParams& params)\n+uint Convert6To8(uint v)\n {\n-  WriteSwizzler(p, params, EFBCopyFormat::R8, ApiType);\n-  WRITE(p, "  float3 texSample;\\n");\n-\n-  WriteSampleColor(p, "rgb", "texSample", 0, ApiType, params);\n-  WriteColorToIntensity(p, "texSample", "ocol0.b");\n-\n-  WriteSampleColor(p, "rgb", "texSample", 1, ApiType, params);\n-  WriteColorToIntensity(p, "texSample", "ocol0.g");\n-\n-  WriteSampleColor(p, "rgb", "texSample", 2, ApiType, params);\n-  WriteColorToIntensity(p, "texSample", "ocol0.r");\n-\n-  WriteSampleColor(p, "rgb", "texSample", 3, ApiType, params);\n-  WriteColorToIntensity(p, "texSample", "ocol0.a");\n-\n-  WRITE(p, "  ocol0.rgba += IntensityConst.aaaa;\\n");  // see WriteColorToIntensity\n-\n-  WriteEncoderEnd(p);\n+  // Swizzle bits: 00123456 -> 12345612\n+  return (v << 2) | (v >> 4);\n }\n \n-static void WriteI4Encoder(char*& p, APIType ApiType, const EFBCopyParams& params)\n+uint GetTiledTexelOffset(uint2 block_size, uint2 coords)\n {\n-  WriteSwizzler(p, params, EFBCopyFormat::R4, ApiType);\n-  WRITE(p, "  float3 texSample;\\n");\n-  WRITE(p, "  float4 color0;\\n");\n-  WRITE(p, "  float4 color1;\\n");\n-\n-  WriteSampleColor(p, "rgb", "texSample", 0, ApiType, params);\n-  WriteColorToIntensity(p, "texSample", "color0.b");\n-\n-  WriteSampleColor(p, "rgb", "texSample", 1, ApiType, params);\n-  WriteColorToIntensity(p, "texSample", "color1.b");\n-\n-  WriteSampleColor(p, "rgb", "texSample", 2, ApiType, params);\n-  WriteColorToIntensity(p, "texSample", "color0.g");\n-\n-  WriteSampleColor(p, "rgb", "texSample", 3, ApiType, params);\n-  WriteColorToIntensity(p, "texSample", "color1.g");\n-\n-  WriteSampleColor(p, "rgb", "texSample", 4, ApiType, params);\n-  WriteColorToIntensity(p, "texSample", "color0.r");\n-\n-  WriteSampleColor(p, "rgb", "texSample", 5, ApiType, params);\n-  WriteColorToIntensity(p, "texSample", "color1.r");\n-\n-  WriteSampleColor(p, "rgb", "texSample", 6, ApiType, params);\n-  WriteColorToIntensity(p, "texSample", "color0.a");\n-\n-  WriteSampleColor(p, "rgb", "texSample", 7, ApiType, params);\n-  WriteColorToIntensity(p, "texSample", "color1.a");\n-\n-  WRITE(p, "  color0.rgba += IntensityConst.aaaa;\\n");\n-  WRITE(p, "  color1.rgba += IntensityConst.aaaa;\\n");\n-\n-  WriteToBitDepth(p, 4, "color0", "color0");\n-  WriteToBitDepth(p, 4, "color1", "color1");\n-\n-  WRITE(p, "  ocol0 = (color0 * 16.0 + color1) / 255.0;\\n");\n-  WriteEncoderEnd(p);\n+  uint2 block = coords / block_size;\n+  uint2 offset = coords % block_size;\n+  uint buffer_pos = u_src_offset;\n+  buffer_pos += block.y * u_src_row_stride;\n+  buffer_pos += block.x * (block_size.x * block_size.y);\n+  buffer_pos += offset.y * block_size.x;\n+  buffer_pos += offset.x;\n+  return buffer_pos;\n }\n \n-static void WriteIA8Encoder(char*& p, APIType ApiType, const EFBCopyParams& params)\n+uint4 GetPaletteColor(uint index)\n {\n-  WriteSwizzler(p, params, EFBCopyFormat::RA8, ApiType);\n-  WRITE(p, "  float4 texSample;\\n");\n-\n-  WriteSampleColor(p, "rgba", "texSample", 0, ApiType, params);\n-  WRITE(p, "  ocol0.b = texSample.a;\\n");\n-  WriteColorToIntensity(p, "texSample", "ocol0.g");\n+  // Fetch and swap BE to LE.\n+  uint val = Swap16(texelFetch(s_palette_buffer, int(u_palette_offset + index)).x);\n \n-  WriteSampleColor(p, "rgba", "texSample", 1, ApiType, params);\n-  WRITE(p, "  ocol0.r = texSample.a;\\n");\n-  WriteColorToIntensity(p, "texSample", "ocol0.a");\n+  uint4 color;\n+#if defined(PALETTE_FORMAT_IA8)\n+  uint a = bitfieldExtract(val, 8, 8);\n+  uint i = bitfieldExtract(val, 0, 8);\n+  color = uint4(i, i, i, a);\n+#elif defined(PALETTE_FORMAT_RGB565)\n+  color.x = Convert5To8(bitfieldExtract(val, 11, 5));\n+  color.y = Convert6To8(bitfieldExtract(val, 5, 6));\n+  color.z = Convert5To8(bitfieldExtract(val, 0, 5));\n+  color.a = 255u;\n \n-  WRITE(p, "  ocol0.ga += IntensityConst.aa;\\n");\n+#elif defined(PALETTE_FORMAT_RGB5A3)\n+  if ((val & 0x8000u) != 0u)\n+  {\n+    color.x = Convert5To8(bitfieldExtract(val, 10, 5));\n+    color.y = Convert5To8(bitfieldExtract(val, 5, 5));\n+    color.z = Convert5To8(bitfieldExtract(val, 0, 5));\n+    color.a = 255u;\n+  }\n+  else\n+  {\n+    color.a = Convert3To8(bitfieldExtract(val, 12, 3));\n+    color.r = Convert4To8(bitfieldExtract(val, 8, 4));\n+    color.g = Convert4To8(bitfieldExtract(val, 4, 4));\n+    color.b = Convert4To8(bitfieldExtract(val, 0, 4));\n+  }\n+#else\n+  // Not used.\n+  color = uint4(0, 0, 0, 0);\n+#endif\n \n-  WriteEncoderEnd(p);\n+  return color;\n }\n \n-static void WriteIA4Encoder(char*& p, APIType ApiType, const EFBCopyParams& params)\n+float4 GetPaletteColorNormalized(uint index)\n {\n-  WriteSwizzler(p, params, EFBCopyFormat::RA4, ApiType);\n-  WRITE(p, "  float4 texSample;\\n");\n-  WRITE(p, "  float4 color0;\\n");\n-  WRITE(p, "  float4 color1;\\n");\n-\n-  WriteSampleColor(p, "rgba", "texSample", 0, ApiType, params);\n-  WRITE(p, "  color0.b = texSample.a;\\n");\n-  WriteColorToIntensity(p, "texSample", "color1.b");\n-\n-  WriteSampleColor(p, "rgba", "texSample", 1, ApiType, params);\n-  WRITE(p, "  color0.g = texSample.a;\\n");\n-  WriteColorToIntensity(p, "texSample", "color1.g");\n+  uint4 color = GetPaletteColor(index);\n+  return float4(color) / 255.0;\n+}\n \n-  WriteSampleColor(p, "rgba", "texSample", 2, ApiType, params);\n-  WRITE(p, "  color0.r = texSample.a;\\n");\n-  WriteColorToIntensity(p, "texSample", "color1.r");\n+)";\n \n-  WriteSampleColor(p, "rgba", "texSample", 3, ApiType, params);\n-  WRITE(p, "  color0.a = texSample.a;\\n");\n-  WriteColorToIntensity(p, "texSample", "color1.a");\n+const std::map<TextureFormat, DecodingShaderInfo> s_decoding_shader_info{\n+    {TextureFormat::I4,\n+     {TEXEL_BUFFER_FORMAT_R8_UINT, 0, 8, 8, false,\n+      R"(\n+      DEFINE_MAIN(8, 8)\n+      {\n+        uint2 coords = gl_GlobalInvocationID.xy;\n \n-  WRITE(p, "  color1.rgba += IntensityConst.aaaa;\\n");\n+        // Tiled in 8x8 blocks, 4 bits per pixel\n+        // We need to do the tiling manually here because the texel size is smaller than\n+        // the size of the buffer elements.\n+        uint2 block = coords.xy / 8u;\n+        uint2 offset = coords.xy % 8u;\n+        uint buffer_pos = u_src_offset;\n+        buffer_pos += block.y * u_src_row_stride;\n+        buffer_pos += block.x * 32u;\n+        buffer_pos += offset.y * 4u;\n+        buffer_pos += offset.x / 2u;\n \n-  WriteToBitDepth(p, 4, "color0", "color0");\n-  WriteToBitDepth(p, 4, "color1", "color1");\n+        // Select high nibble for odd texels, low for even.\n+        uint val = texelFetch(s_input_buffer, int(buffer_pos)).x;\n+        uint i;\n+        if ((coords.x & 1u) == 0u)\n+          i = Convert4To8((val >> 4));\n+        else\n+          i = Convert4To8((val & 0x0Fu));\n \n-  WRITE(p, "  ocol0 = (color0 * 16.0 + color1) / 255.0;\\n");\n-  WriteEncoderEnd(p);\n-}\n+        uint4 color = uint4(i, i, i, i);\n+        float4 norm_color = float4(color) / 255.0;\n \n-static void WriteRGB565Encoder(char*& p, APIType ApiType, const EFBCopyParams& params)\n-{\n-  WriteSwizzler(p, params, EFBCopyFormat::RGB565, ApiType);\n-  WRITE(p, "  float3 texSample0;\\n");\n-  WRITE(p, "  float3 texSample1;\\n");\n-\n-  WriteSampleColor(p, "rgb", "texSample0", 0, ApiType, params);\n-  WriteSampleColor(p, "rgb", "texSample1", 1, ApiType, params);\n-  WRITE(p, "  float2 texRs = float2(texSample0.r, texSample1.r);\\n");\n-  WRITE(p, "  float2 texGs = float2(texSample0.g, texSample1.g);\\n");\n-  WRITE(p, "  float2 texBs = float2(texSample0.b, texSample1.b);\\n");\n-\n-  WriteToBitDepth(p, 6, "texGs", "float2 gInt");\n-  WRITE(p, "  float2 gUpper = floor(gInt / 8.0);\\n");\n-  WRITE(p, "  float2 gLower = gInt - gUpper * 8.0;\\n");\n-\n-  WriteToBitDepth(p, 5, "texRs", "ocol0.br");\n-  WRITE(p, "  ocol0.br = ocol0.br * 8.0 + gUpper;\\n");\n-  WriteToBitDepth(p, 5, "texBs", "ocol0.ga");\n-  WRITE(p, "  ocol0.ga = ocol0.ga + gLower * 32.0;\\n");\n-\n-  WRITE(p, "  ocol0 = ocol0 / 255.0;\\n");\n-  WriteEncoderEnd(p);\n-}\n+        imageStore(output_image, int3(int2(coords), 0), norm_color);\n+      }\n \n-static void WriteRGB5A3Encoder(char*& p, APIType ApiType, const EFBCopyParams& params)\n-{\n-  WriteSwizzler(p, params, EFBCopyFormat::RGB5A3, ApiType);\n-\n-  WRITE(p, "  float4 texSample;\\n");\n-  WRITE(p, "  float color0;\\n");\n-  WRITE(p, "  float gUpper;\\n");\n-  WRITE(p, "  float gLower;\\n");\n-\n-  WriteSampleColor(p, "rgba", "texSample", 0, ApiType, params);\n+      )"}},\n+    {TextureFormat::IA4,\n+     {TEXEL_BUFFER_FORMAT_R8_UINT, 0, 8, 8, false,\n+      R"(\n+      DEFINE_MAIN(8, 8)\n+      {\n+        uint2 coords = gl_GlobalInvocationID.xy;\n \n-  // 0.8784 = 224 / 255 which is the maximum alpha value that can be represented in 3 bits\n-  WRITE(p, "if(texSample.a > 0.878f) {\\n");\n+        // Tiled in 8x4 blocks, 8 bits per pixel\n+        uint buffer_pos = GetTiledTexelOffset(uint2(8u, 4u), coords);\n+        uint val = texelFetch(s_input_buffer, int(buffer_pos)).x;\n+        uint i = Convert4To8((val & 0x0Fu));\n+        uint a = Convert4To8((val >> 4));\n+        uint4 color = uint4(i, i, i, a);\n+        float4 norm_color = float4(color) / 255.0;\n \n-  WriteToBitDepth(p, 5, "texSample.g", "color0");\n-  WRITE(p, "  gUpper = floor(color0 / 8.0);\\n");\n-  WRITE(p, "  gLower = color0 - gUpper * 8.0;\\n");\n+        imageStore(output_image, int3(int2(coords), 0), norm_color);\n+      }\n+      )"}},\n+    {TextureFormat::I8,\n+     {TEXEL_BUFFER_FORMAT_R8_UINT, 0, 8, 8, false,\n+      R"(\n+      DEFINE_MAIN(8, 8)\n+      {\n+        uint2 coords = gl_GlobalInvocationID.xy;\n \n-  WriteToBitDepth(p, 5, "texSample.r", "ocol0.b");\n-  WRITE(p, "  ocol0.b = ocol0.b * 4.0 + gUpper + 128.0;\\n");\n-  WriteToBitDepth(p, 5, "texSample.b", "ocol0.g");\n-  WRITE(p, "  ocol0.g = ocol0.g + gLower * 32.0;\\n");\n+        // Tiled in 8x4 blocks, 8 bits per pixel\n+        uint buffer_pos = GetTiledTexelOffset(uint2(8u, 4u), coords);\n+        uint i = texelFetch(s_input_buffer, int(buffer_pos)).x;\n+        uint4 color = uint4(i, i, i, i);\n+        float4 norm_color = float4(color) / 255.0;\n \n-  WRITE(p, "} else {\\n");\n+        imageStore(output_image, int3(int2(coords), 0), norm_color);\n+      }\n+      )"}},\n+    {TextureFormat::IA8,\n+     {TEXEL_BUFFER_FORMAT_R16_UINT, 0, 8, 8, false,\n+      R"(\n+      DEFINE_MAIN(8, 8)\n+      {\n+        uint2 coords = gl_GlobalInvocationID.xy;\n \n-  WriteToBitDepth(p, 4, "texSample.r", "ocol0.b");\n-  WriteToBitDepth(p, 4, "texSample.b", "ocol0.g");\n+        // Tiled in 4x4 blocks, 16 bits per pixel\n+        uint buffer_pos = GetTiledTexelOffset(uint2(4u, 4u), coords);\n+        uint val = texelFetch(s_input_buffer, int(buffer_pos)).x;\n+        uint a = (val & 0xFFu);\n+        uint i = (val >> 8);\n+        uint4 color = uint4(i, i, i, a);\n+        float4 norm_color = float4(color) / 255.0;\n+        imageStore(output_image, int3(int2(coords), 0), norm_color);\n+      }\n+      )"}},\n+    {TextureFormat::RGB565,\n+     {TEXEL_BUFFER_FORMAT_R16_UINT, 0, 8, 8, false,\n+      R"(\n+      DEFINE_MAIN(8, 8)\n+      {\n+        uint2 coords = gl_GlobalInvocationID.xy;\n \n-  WriteToBitDepth(p, 3, "texSample.a", "color0");\n-  WRITE(p, "ocol0.b = ocol0.b + color0 * 16.0;\\n");\n-  WriteToBitDepth(p, 4, "texSample.g", "color0");\n-  WRITE(p, "ocol0.g = ocol0.g + color0 * 16.0;\\n");\n+        // Tiled in 4x4 blocks\n+        uint buffer_pos = GetTiledTexelOffset(uint2(4u, 4u), coords);\n+        uint val = Swap16(texelFetch(s_input_buffer, int(buffer_pos)).x);\n \n-  WRITE(p, "}\\n");\n+        uint4 color;\n+        color.x = Convert5To8(bitfieldExtract(val, 11, 5));\n+        color.y = Convert6To8(bitfieldExtract(val, 5, 6));\n+        color.z = Convert5To8(bitfieldExtract(val, 0, 5));\n+        color.a = 255u;\n \n-  WriteSampleColor(p, "rgba", "texSample", 1, ApiType, params);\n+        float4 norm_color = float4(color) / 255.0;\n+        imageStore(output_image, int3(int2(coords), 0), norm_color);\n+      }\n \n-  WRITE(p, "if(texSample.a > 0.878f) {\\n");\n+      )"}},\n+    {TextureFormat::RGB5A3,\n+     {TEXEL_BUFFER_FORMAT_R16_UINT, 0, 8, 8, false,\n+      R"(\n+      DEFINE_MAIN(8, 8)\n+      {\n+        uint2 coords = gl_GlobalInvocationID.xy;\n \n-  WriteToBitDepth(p, 5, "texSample.g", "color0");\n-  WRITE(p, "  gUpper = floor(color0 / 8.0);\\n");\n-  WRITE(p, "  gLower = color0 - gUpper * 8.0;\\n");\n+        // Tiled in 4x4 blocks\n+        uint buffer_pos = GetTiledTexelOffset(uint2(4u, 4u), coords);\n+        uint val = Swap16(texelFetch(s_input_buffer, int(buffer_pos)).x);\n \n-  WriteToBitDepth(p, 5, "texSample.r", "ocol0.r");\n-  WRITE(p, "  ocol0.r = ocol0.r * 4.0 + gUpper + 128.0;\\n");\n-  WriteToBitDepth(p, 5, "texSample.b", "ocol0.a");\n-  WRITE(p, "  ocol0.a = ocol0.a + gLower * 32.0;\\n");\n+        uint4 color;\n+        if ((val & 0x8000u) != 0u)\n+        {\n+          color.x = Convert5To8(bitfieldExtract(val, 10, 5));\n+          color.y = Convert5To8(bitfieldExtract(val, 5, 5));\n+          color.z = Convert5To8(bitfieldExtract(val, 0, 5));\n+          color.a = 255u;\n+        }\n+        else\n+        {\n+          color.a = Convert3To8(bitfieldExtract(val, 12, 3));\n+          color.r = Convert4To8(bitfieldExtract(val, 8, 4));\n+          color.g = Convert4To8(bitfieldExtract(val, 4, 4));\n+          color.b = Convert4To8(bitfieldExtract(val, 0, 4));\n+        }\n \n-  WRITE(p, "} else {\\n");\n+        float4 norm_color = float4(color) / 255.0;\n+        imageStore(output_image, int3(int2(coords), 0), norm_color);\n+      }\n \n-  WriteToBitDepth(p, 4, "texSample.r", "ocol0.r");\n-  WriteToBitDepth(p, 4, "texSample.b", "ocol0.a");\n+      )"}},\n+    {TextureFormat::RGBA8,\n+     {TEXEL_BUFFER_FORMAT_R16_UINT, 0, 8, 8, false,\n+      R"(\n+      DEFINE_MAIN(8, 8)\n+      {\n+        uint2 coords = gl_GlobalInvocationID.xy;\n \n-  WriteToBitDepth(p, 3, "texSample.a", "color0");\n-  WRITE(p, "ocol0.r = ocol0.r + color0 * 16.0;\\n");\n-  WriteToBitDepth(p, 4, "texSample.g", "color0");\n-  WRITE(p, "ocol0.a = ocol0.a + color0 * 16.0;\\n");\n+        // Tiled in 4x4 blocks\n+        // We can\'t use the normal calculation function, as these are packed as the AR channels\n+        // for the entire block, then the GB channels afterwards.\n+        uint2 block = coords.xy / 4u;\n+        uint2 offset = coords.xy % 4u;\n+        uint buffer_pos = u_src_offset;\n \n-  WRITE(p, "}\\n");\n+        // Our buffer has 16-bit elements, so the offsets here are half what they would be in bytes.\n+        buffer_pos += block.y * u_src_row_stride;\n+        buffer_pos += block.x * 32u;\n+        buffer_pos += offset.y * 4u;\n+        buffer_pos += offset.x;\n \n-  WRITE(p, "  ocol0 = ocol0 / 255.0;\\n");\n-  WriteEncoderEnd(p);\n-}\n+        // The two GB channels follow after the block\'s AR channels.\n+        uint val1 = texelFetch(s_input_buffer, int(buffer_pos + 0u)).x;\n+        uint val2 = texelFetch(s_input_buffer, int(buffer_pos + 16u)).x;\n \n-static void WriteRGBA8Encoder(char*& p, APIType ApiType, const EFBCopyParams& params)\n-{\n-  WriteSwizzler(p, params, EFBCopyFormat::RGBA8, ApiType);\n+        uint4 color;\n+        color.a = (val1 & 0xFFu);\n+        color.r = (val1 >> 8);\n+        color.g = (val2 & 0xFFu);\n+        color.b = (val2 >> 8);\n \n-  WRITE(p, "  float4 texSample;\\n");\n-  WRITE(p, "  float4 color0;\\n");\n-  WRITE(p, "  float4 color1;\\n");\n+        float4 norm_color = float4(color) / 255.0;\n+        imageStore(output_image, int3(int2(coords), 0), norm_color);\n+      }\n+      )"}},\n+    {TextureFormat::CMPR,\n+     {TEXEL_BUFFER_FORMAT_R32G32_UINT, 0, 64, 1, true,\n+      R"(\n+      // In the compute version of this decoder, we flatten the blocks to a one-dimension array.\n+      // Each group is subdivided into 16, and the first thread in each group fetches the DXT data.\n+      // All threads then calculate the possible colors for the block and write to the output image.\n \n-  WriteSampleColor(p, "rgba", "texSample", 0, ApiType, params);\n-  WRITE(p, "  color0.b = texSample.a;\\n");\n-  WRITE(p, "  color0.g = texSample.r;\\n");\n-  WRITE(p, "  color1.b = texSample.g;\\n");\n-  WRITE(p, "  color1.g = texSample.b;\\n");\n+      #define GROUP_SIZE 64u\n+      #define BLOCK_SIZE_X 4u\n+      #define BLOCK_SIZE_Y 4u\n+      #define BLOCK_SIZE (BLOCK_SIZE_X * BLOCK_SIZE_Y)\n+      #define BLOCKS_PER_GROUP (GROUP_SIZE / BLOCK_SIZE)\n \n-  WriteSampleColor(p, "rgba", "texSample", 1, ApiType, params);\n-  WRITE(p, "  color0.r = texSample.a;\\n");\n-  WRITE(p, "  color0.a = texSample.r;\\n");\n-  WRITE(p, "  color1.r = texSample.g;\\n");\n-  WRITE(p, "  color1.a = texSample.b;\\n");\n+      uint DXTBlend(uint v1, uint v2)\n+      {\n+        // 3/8 blend, which is close to 1/3\n+        return ((v1 * 3u + v2 * 5u) >> 3);\n+      }\n \n-  WRITE(p, "  ocol0 = first ? color0 : color1;\\n");\n+      GROUP_SHARED uint2 shared_temp[BLOCKS_PER_GROUP];\n \n-  WriteEncoderEnd(p);\n-}\n+      DEFINE_MAIN(GROUP_SIZE, 8)\n+      {\n+        uint local_thread_id = gl_LocalInvocationID.x;\n+        uint block_in_group = local_thread_id / BLOCK_SIZE;\n+        uint thread_in_block = local_thread_id % BLOCK_SIZE;\n+        uint block_index = gl_WorkGroupID.x * BLOCKS_PER_GROUP + block_in_group;\n \n-static void WriteC4Encoder(char*& p, const char* comp, APIType ApiType, const EFBCopyParams& params)\n-{\n-  WriteSwizzler(p, params, EFBCopyFormat::R4, ApiType);\n-  WRITE(p, "  float4 color0;\\n");\n-  WRITE(p, "  float4 color1;\\n");\n-\n-  WriteSampleColor(p, comp, "color0.b", 0, ApiType, params);\n-  WriteSampleColor(p, comp, "color1.b", 1, ApiType, params);\n-  WriteSampleColor(p, comp, "color0.g", 2, ApiType, params);\n-  WriteSampleColor(p, comp, "color1.g", 3, ApiType, params);\n-  WriteSampleColor(p, comp, "color0.r", 4, ApiType, params);\n-  WriteSampleColor(p, comp, "color1.r", 5, ApiType, params);\n-  WriteSampleColor(p, comp, "color0.a", 6, ApiType, params);\n-  WriteSampleColor(p, comp, "color1.a", 7, ApiType, params);\n-\n-  WriteToBitDepth(p, 4, "color0", "color0");\n-  WriteToBitDepth(p, 4, "color1", "color1");\n-\n-  WRITE(p, "  ocol0 = (color0 * 16.0 + color1) / 255.0;\\n");\n-  WriteEncoderEnd(p);\n-}\n+        // Annoyingly, we can\'t precalculate this as a uniform because the DXT block size differs\n+        // from the block size of the overall texture (4 vs 8). We can however use a multiply and\n+        // subtraction to avoid the modulo for calculating the block\'s X coordinate.\n+        uint blocks_wide = u_src_size.x / BLOCK_SIZE_X;\n+        uint2 block_coords;\n+        block_coords.y = block_index / blocks_wide;\n+        block_coords.x = block_index - (block_coords.y * blocks_wide);\n \n-static void WriteC8Encoder(char*& p, const char* comp, APIType ApiType, const EFBCopyParams& params)\n-{\n-  WriteSwizzler(p, params, EFBCopyFormat::R8, ApiType);\n+        // Only the first thread for each block reads from the texel buffer.\n+        if (thread_in_block == 0u)\n+        {\n+          // Calculate tiled block coordinates.\n+          uint2 tile_block_coords = block_coords / 2u;\n+          uint2 subtile_block_coords = block_coords % 2u;\n+          uint buffer_pos = u_src_offset;\n+          buffer_pos += tile_block_coords.y * u_src_row_stride;\n+          buffer_pos += tile_block_coords.x * 4u;\n+          buffer_pos += subtile_block_coords.y * 2u;\n+          buffer_pos += subtile_block_coords.x;\n \n-  WriteSampleColor(p, comp, "ocol0.b", 0, ApiType, params);\n-  WriteSampleColor(p, comp, "ocol0.g", 1, ApiType, params);\n-  WriteSampleColor(p, comp, "ocol0.r", 2, ApiType, params);\n-  WriteSampleColor(p, comp, "ocol0.a", 3, ApiType, params);\n+          // Read the entire DXT block to shared memory.\n+          uint2 raw_data = texelFetch(s_input_buffer, int(buffer_pos)).xy;\n+          shared_temp[block_in_group] = raw_data;\n+        }\n \n-  WriteEncoderEnd(p);\n-}\n+        // Ensure store is completed before the remaining threads in the block continue.\n+        GROUP_MEMORY_BARRIER_WITH_SYNC;\n \n-static void WriteCC4Encoder(char*& p, const char* comp, APIType ApiType,\n-                            const EFBCopyParams& params)\n-{\n-  WriteSwizzler(p, params, EFBCopyFormat::RA4, ApiType);\n-  WRITE(p, "  float2 texSample;\\n");\n-  WRITE(p, "  float4 color0;\\n");\n-  WRITE(p, "  float4 color1;\\n");\n+        // Unpack colors and swap BE to LE.\n+        uint2 raw_data = shared_temp[block_in_group];\n+        uint swapped = ((raw_data.x & 0xFF00FF00u) >> 8) | ((raw_data.x & 0x00FF00FFu) << 8);\n+        uint c1 = swapped & 0xFFFFu;\n+        uint c2 = swapped >> 16;\n \n-  WriteSampleColor(p, comp, "texSample", 0, ApiType, params);\n-  WRITE(p, "  color0.b = texSample.x;\\n");\n-  WRITE(p, "  color1.b = texSample.y;\\n");\n+        // Expand 5/6 bit channels to 8-bits per channel.\n+        uint blue1 = Convert5To8(bitfieldExtract(c1, 0, 5));\n+        uint blue2 = Convert5To8(bitfieldExtract(c2, 0, 5));\n+        uint green1 = Convert6To8(bitfieldExtract(c1, 5, 6));\n+        uint green2 = Convert6To8(bitfieldExtract(c2, 5, 6));\n+        uint red1 = Convert5To8(bitfieldExtract(c1, 11, 5));\n+        uint red2 = Convert5To8(bitfieldExtract(c2, 11, 5));\n \n-  WriteSampleColor(p, comp, "texSample", 1, ApiType, params);\n-  WRITE(p, "  color0.g = texSample.x;\\n");\n-  WRITE(p, "  color1.g = texSample.y;\\n");\n+        // Determine the four colors the block can use.\n+        // It\'s quicker to just precalculate all four colors rather than branching on the index.\n+        // NOTE: These must be masked with 0xFF. This is done at the normalization stage below.\n+        uint4 color0, color1, color2, color3;\n+        color0 = uint4(red1, green1, blue1, 255u);\n+        color1 = uint4(red2, green2, blue2, 255u);\n+        if (c1 > c2)\n+        {\n+          color2 = uint4(DXTBlend(red2, red1), DXTBlend(green2, green1), DXTBlend(blue2, blue1), 255u);\n+          color3 = uint4(DXTBlend(red1, red2), DXTBlend(green1, green2), DXTBlend(blue1, blue2), 255u);\n+        }\n+        else\n+        {\n+          color2 = uint4((red1 + red2) / 2u, (green1 + green2) / 2u, (blue1 + blue2) / 2u, 255u);\n+          color3 = uint4((red1 + red2) / 2u, (green1 + green2) / 2u, (blue1 + blue2) / 2u, 0u);\n+        }\n \n-  WriteSampleColor(p, comp, "texSample", 2, ApiType, params);\n-  WRITE(p, "  color0.r = texSample.x;\\n");\n-  WRITE(p, "  color1.r = texSample.y;\\n");\n+        // Calculate the texel coordinates that we will write to.\n+        // The divides/modulo here should be turned into a shift/binary AND.\n+        uint local_y = thread_in_block / BLOCK_SIZE_X;\n+        uint local_x = thread_in_block % BLOCK_SIZE_X;\n+        uint global_x = block_coords.x * BLOCK_SIZE_X + local_x;\n+        uint global_y = block_coords.y * BLOCK_SIZE_Y + local_y;\n \n-  WriteSampleColor(p, comp, "texSample", 3, ApiType, params);\n-  WRITE(p, "  color0.a = texSample.x;\\n");\n-  WRITE(p, "  color1.a = texSample.y;\\n");\n+        // Use the coordinates within the block to shift the 32-bit value containing\n+        // all 16 indices to a single 2-bit index.\n+        uint index = bitfieldExtract(raw_data.y, int((local_y * 8u) + (6u - local_x * 2u)), 2);\n \n-  WriteToBitDepth(p, 4, "color0", "color0");\n-  WriteToBitDepth(p, 4, "color1", "color1");\n+        // Select the un-normalized color from the precalculated color array.\n+        // Using a switch statement here removes the need for dynamic indexing of an array.\n+        uint4 color;\n+        switch (index)\n+        {\n+        case 0u:  color = color0;   break;\n+        case 1u:  color = color1;   break;\n+        case 2u:  color = color2;   break;\n+        case 3u:  color = color3;   break;\n+        default:  color = color0;   break;\n+        }\n \n-  WRITE(p, "  ocol0 = (color0 * 16.0 + color1) / 255.0;\\n");\n-  WriteEncoderEnd(p);\n-}\n+        // Normalize and write to the output image.\n+        float4 norm_color = float4(color & 0xFFu) / 255.0;\n+        imageStore(output_image, int3(int2(uint2(global_x, global_y)), 0), norm_color);\n+      }\n+      )"}},\n+    {TextureFormat::C4,\n+     {TEXEL_BUFFER_FORMAT_R8_UINT, static_cast<u32>(TexDecoder_GetPaletteSize(TextureFormat::C4)),\n+      8, 8, false,\n+      R"(\n+      DEFINE_MAIN(8, 8)\n+      {\n+        uint2 coords = gl_GlobalInvocationID.xy;\n \n-static void WriteCC8Encoder(char*& p, const char* comp, APIType ApiType,\n-                            const EFBCopyParams& params)\n-{\n-  WriteSwizzler(p, params, EFBCopyFormat::RA8, ApiType);\n+        // Tiled in 8x8 blocks, 4 bits per pixel\n+        // We need to do the tiling manually here because the texel size is smaller than\n+        // the size of the buffer elements.\n+        uint2 block = coords.xy / 8u;\n+        uint2 offset = coords.xy % 8u;\n+        uint buffer_pos = u_src_offset;\n+        buffer_pos += block.y * u_src_row_stride;\n+        buffer_pos += block.x * 32u;\n+        buffer_pos += offset.y * 4u;\n+        buffer_pos += offset.x / 2u;\n \n-  WriteSampleColor(p, comp, "ocol0.bg", 0, ApiType, params);\n-  WriteSampleColor(p, comp, "ocol0.ra", 1, ApiType, params);\n+        // Select high nibble for odd texels, low for even.\n+        uint val = texelFetch(s_input_buffer, int(buffer_pos)).x;\n+        uint index = ((coords.x & 1u) == 0u) ? (val >> 4) : (val & 0x0Fu);\n+        float4 norm_color = GetPaletteColorNormalized(index);\n+        imageStore(output_image, int3(int2(coords), 0), norm_color);\n+      }\n \n-  WriteEncoderEnd(p);\n-}\n+      )"}},\n+    {TextureFormat::C8,\n+     {TEXEL_BUFFER_FORMAT_R8_UINT, static_cast<u32>(TexDecoder_GetPaletteSize(TextureFormat::C8)),\n+      8, 8, false,\n+      R"(\n+      DEFINE_MAIN(8, 8)\n+      {\n+        uint2 coords = gl_GlobalInvocationID.xy;\n \n-static void WriteZ8Encoder(char*& p, const char* multiplier, APIType ApiType,\n-                           const EFBCopyParams& params)\n-{\n-  WriteSwizzler(p, params, EFBCopyFormat::G8, ApiType);\n+        // Tiled in 8x4 blocks, 8 bits per pixel\n+        uint buffer_pos = GetTiledTexelOffset(uint2(8u, 4u), coords);\n+        uint index = texelFetch(s_input_buffer, int(buffer_pos)).x;\n+        float4 norm_color = GetPaletteColorNormalized(index);\n+        imageStore(output_image, int3(int2(coords), 0), norm_color);\n+      }\n+      )"}},\n+    {TextureFormat::C14X2,\n+     {TEXEL_BUFFER_FORMAT_R16_UINT,\n+      static_cast<u32>(TexDecoder_GetPaletteSize(TextureFormat::C14X2)), 8, 8, false,\n+      R"(\n+      DEFINE_MAIN(8, 8)\n+      {\n+        uint2 coords = gl_GlobalInvocationID.xy;\n \n-  WRITE(p, " float depth;\\n");\n+        // Tiled in 4x4 blocks, 16 bits per pixel\n+        uint buffer_pos = GetTiledTexelOffset(uint2(4u, 4u), coords);\n+        uint index = Swap16(texelFetch(s_input_buffer, int(buffer_pos)).x) & 0x3FFFu;\n+        float4 norm_color = GetPaletteColorNormalized(index);\n+        imageStore(output_image, int3(int2(coords), 0), norm_color);\n+      }\n+      )"}},\n \n-  WriteSampleColor(p, "r", "depth", 0, ApiType, params);\n-  WRITE(p, "ocol0.b = frac(depth * %s);\\n", multiplier);\n+    // We do the inverse BT.601 conversion for YCbCr to RGB\n+    // http://www.equasys.de/colorconversion.html#YCbCr-RGBColorFormatConversion\n+    {TextureFormat::XFB,\n+     {TEXEL_BUFFER_FORMAT_RGBA8_UINT, 0, 8, 8, false,\n+      R"(\n+      DEFINE_MAIN(8, 8)\n+      {\n+        uint2 uv = gl_GlobalInvocationID.xy;\n+        int buffer_pos = int(u_src_offset + (uv.y * u_src_row_stride) + (uv.x / 2u));\n+        float4 yuyv = float4(texelFetch(s_input_buffer, buffer_pos));\n \n-  WriteSampleColor(p, "r", "depth", 1, ApiType, params);\n-  WRITE(p, "ocol0.g = frac(depth * %s);\\n", multiplier);\n+        float y = (uv.x & 1u) != 0u ? yuyv.b : yuyv.r;\n \n-  WriteSampleColor(p, "r", "depth", 2, ApiType, params);\n-  WRITE(p, "ocol0.r = frac(depth * %s);\\n", multiplier);\n+        float yComp = 1.164 * (y - 16.0);\n+        float uComp = yuyv.g - 128.0;\n+        float vComp = yuyv.a - 128.0;\n \n-  WriteSampleColor(p, "r", "depth", 3, ApiType, params);\n-  WRITE(p, "ocol0.a = frac(depth * %s);\\n", multiplier);\n+        float4 rgb = float4(yComp + (1.596 * vComp),\n+                        yComp - (0.813 * vComp) - (0.391 * uComp),\n+                        yComp + (2.018 * uComp),\n+                        255.0);\n+        float4 rgba_norm = rgb / 255.0;\n+        imageStore(output_image, int3(int2(uv), 0), rgba_norm);\n+      }\n+      )"}},\n+};\n \n-  WriteEncoderEnd(p);\n+u16 GetEncodedSampleCount(EFBCopyFormat format)\n+{\n+  switch (format)\n+  {\n+  case EFBCopyFormat::R4:\n+    return 8;\n+  case EFBCopyFormat::RA4:\n+    return 4;\n+  case EFBCopyFormat::RA8:\n+    return 2;\n+  case EFBCopyFormat::RGB565:\n+    return 2;\n+  case EFBCopyFormat::RGB5A3:\n+    return 2;\n+  case EFBCopyFormat::RGBA8:\n+    return 1;\n+  case EFBCopyFormat::A8:\n+  case EFBCopyFormat::R8_0x1:\n+  case EFBCopyFormat::R8:\n+  case EFBCopyFormat::G8:\n+  case EFBCopyFormat::B8:\n+    return 4;\n+  case EFBCopyFormat::RG8:\n+  case EFBCopyFormat::GB8:\n+    return 2;\n+  case EFBCopyFormat::XFB:\n+    return 2;\n+  default:\n+    PanicAlert("Invalid EFB Copy Format (0x%X)! (GetEncodedSampleCount)", static_cast<int>(format));\n+    return 1;\n+  }\n }\n \n-static void WriteZ16Encoder(char*& p, APIType ApiType, const EFBCopyParams& params)\n+class EncodingShaderGenerator\n {\n-  WriteSwizzler(p, params, EFBCopyFormat::RA8, ApiType);\n-\n-  WRITE(p, "  float depth;\\n");\n-  WRITE(p, "  float3 expanded;\\n");\n-\n-  // byte order is reversed\n-\n-  WriteSampleColor(p, "r", "depth", 0, ApiType, params);\n+public:\n+  static std::string GenerateShader(const EFBCopyParams& params, APIType api_type)\n+  {\n+    EncodingShaderGenerator generator;\n+    return generator.GenerateEncodingShader(params, api_type);\n+  }\n \n-  WRITE(p, "  depth *= 16777216.0;\\n");\n-  WRITE(p, "  expanded.r = floor(depth / (256.0 * 256.0));\\n");\n-  WRITE(p, "  depth -= expanded.r * 256.0 * 256.0;\\n");\n-  WRITE(p, "  expanded.g = floor(depth / 256.0);\\n");\n+private:\n+  explicit EncodingShaderGenerator() { m_buffer.reserve(16384); }\n \n-  WRITE(p, "  ocol0.b = expanded.g / 255.0;\\n");\n-  WRITE(p, "  ocol0.g = expanded.r / 255.0;\\n");\n+  // Appends an unformatted string to the buffer.\n+  void Append(std::string_view text) { m_buffer += text; }\n \n-  WriteSampleColor(p, "r", "depth", 1, ApiType, params);\n+  // Appends a formatted string to the internal buffer using fmt format strings.\n+  template <typename... Args>\n+  void AppendFmt(std::string_view format, Args&&... args)\n+  {\n+    fmt::format_to(std::back_inserter(m_buffer), format, std::forward<Args>(args)...);\n+  }\n \n-  WRITE(p, "  depth *= 16777216.0;\\n");\n-  WRITE(p, "  expanded.r = floor(depth / (256.0 * 256.0));\\n");\n-  WRITE(p, "  depth -= expanded.r * 256.0 * 256.0;\\n");\n-  WRITE(p, "  expanded.g = floor(depth / 256.0);\\n");\n+  std::string GenerateEncodingShader(const EFBCopyParams& params, APIType api_type)\n+  {\n+    switch (params.copy_format)\n+    {\n+    case EFBCopyFormat::R4:\n+      if (params.yuv)\n+        WriteI4Encoder(api_type, params);\n+      else\n+        WriteC4Encoder("r", api_type, params);\n+      break;\n+    case EFBCopyFormat::RA4:\n+      if (params.yuv)\n+        WriteIA4Encoder(api_type, params);\n+      else\n+        WriteCC4Encoder("ar", api_type, params);\n+      break;\n+    case EFBCopyFormat::RA8:\n+      if (params.yuv)\n+        WriteIA8Encoder(api_type, params);\n+      else\n+        WriteCC8Encoder("ar", api_type, params);\n+      break;\n+    case EFBCopyFormat::RGB565:\n+      WriteRGB565Encoder(api_type, params);\n+      break;\n+    case EFBCopyFormat::RGB5A3:\n+      WriteRGB5A3Encoder(api_type, params);\n+      break;\n+    case EFBCopyFormat::RGBA8:\n+      if (params.depth)\n+        WriteZ24Encoder(api_type, params);\n+      else\n+        WriteRGBA8Encoder(api_type, params);\n+      break;\n+    case EFBCopyFormat::A8:\n+      WriteC8Encoder("a", api_type, params);\n+      break;\n+    case EFBCopyFormat::R8_0x1:\n+    case EFBCopyFormat::R8:\n+      if (params.yuv)\n+        WriteI8Encoder(api_type, params);\n+      else\n+        WriteC8Encoder("r", api_type, params);\n+      break;\n+    case EFBCopyFormat::G8:\n+      if (params.depth)\n+        WriteZ8Encoder("256.0", api_type, params);  // Z8M\n+      else\n+        WriteC8Encoder("g", api_type, params);\n+      break;\n+    case EFBCopyFormat::B8:\n+      if (params.depth)\n+        WriteZ8Encoder("65536.0", api_type, params);  // Z8L\n+      else\n+        WriteC8Encoder("b", api_type, params);\n+      break;\n+    case EFBCopyFormat::RG8:\n+      if (params.depth)\n+        WriteZ16Encoder(api_type, params);  // Z16H\n+      else\n+        WriteCC8Encoder("gr", api_type, params);\n+      break;\n+    case EFBCopyFormat::GB8:\n+      if (params.depth)\n+        WriteZ16LEncoder(api_type, params);  // Z16L\n+      else\n+        WriteCC8Encoder("bg", api_type, params);\n+      break;\n+    case EFBCopyFormat::XFB:\n+      WriteXFBEncoder(api_type, params);\n+      break;\n+    default:\n+      PanicAlert("Invalid EFB Copy Format (0x%X)! (GenerateEncodingShader)",\n+                 static_cast<int>(params.copy_format));\n+      break;\n+    }\n \n-  WRITE(p, "  ocol0.r = expanded.g / 255.0;\\n");\n-  WRITE(p, "  ocol0.a = expanded.r / 255.0;\\n");\n+    return m_buffer;\n+  }\n \n-  WriteEncoderEnd(p);\n-}\n+  void WriteHeader(APIType api_type)\n+  {\n+    if (api_type == APIType::OpenGL || api_type == APIType::Vulkan)\n+    {\n+      // left, top, of source rectangle within source texture\n+      // width of the destination rectangle, scale_factor (1 or 2)\n+      Append("UBO_BINDING(std140, 1) uniform PSBlock {\\n"\n+             "  int4 position;\\n"\n+             "  float y_scale;\\n"\n+             "  float gamma_rcp;\\n"\n+             "  float2 clamp_tb;\\n"\n+             "  float3 filter_coefficients;\\n"\n+             "};\\n");\n+      if (g_ActiveConfig.backend_info.bSupportsGeometryShaders)\n+      {\n+        Append("VARYING_LOCATION(0) in VertexData {\\n"\n+               "  float3 v_tex0;\\n"\n+               "};\\n");\n+      }\n+      else\n+      {\n+        Append("VARYING_LOCATION(0) in float3 v_tex0;\\n");\n+      }\n+      Append("SAMPLER_BINDING(0) uniform sampler2DArray samp0;\\n"\n+             "FRAGMENT_OUTPUT_LOCATION(0) out float4 ocol0;\\n");\n+    }\n+    else  // D3D\n+    {\n+      Append("cbuffer PSBlock : register(b0) {\\n"\n+             "  int4 position;\\n"\n+             "  float y_scale;\\n"\n+             "  float gamma_rcp;\\n"\n+             "  float2 clamp_tb;\\n"\n+             "  float3 filter_coefficients;\\n"\n+             "};\\n"\n+             "sampler samp0 : register(s0);\\n"\n+             "Texture2DArray Tex0 : register(t0);\\n");\n+    }\n \n-static void WriteZ16LEncoder(char*& p, APIType ApiType, const EFBCopyParams& params)\n-{\n-  WriteSwizzler(p, params, EFBCopyFormat::GB8, ApiType);\n+    // D3D does not have roundEven(), only round(), which is specified "to the nearest integer".\n+    // This differs from the roundEven() behavior, but to get consistency across drivers in OpenGL\n+    // we need to use roundEven().\n+    if (api_type == APIType::D3D)\n+      Append("#define roundEven(x) round(x)\\n");\n+\n+    // Alpha channel in the copy is set to 1 the EFB format does not have an alpha channel.\n+    Append("float4 RGBA8ToRGB8(float4 src)\\n"\n+           "{\\n"\n+           "  return float4(src.xyz, 1.0);\\n"\n+           "}\\n"\n+           "float4 RGBA8ToRGBA6(float4 src)\\n"\n+           "{\\n"\n+           "  int4 val = int4(roundEven(src * 255.0)) >> 2;\\n"\n+           "  return float4(val) / 63.0;\\n"\n+           "}\\n"\n+           "float4 RGBA8ToRGB565(float4 src)\\n"\n+           "{\\n"\n+           "  int4 val = int4(roundEven(src * 255.0));\\n"\n+           "  val = int4(val.r >> 3, val.g >> 2, val.b >> 3, 1);\\n"\n+           "  return float4(val) / float4(31.0, 63.0, 31.0, 1.0);\\n"\n+           "}\\n");\n+  }\n \n-  WRITE(p, "  float depth;\\n");\n-  WRITE(p, "  float3 expanded;\\n");\n+  void WriteSampleFunction(const EFBCopyParams& params, APIType api_type)\n+  {\n+    const auto WriteSampleOp = [api_type, &params, this](int y_offset) {\n+      if (!params.depth)\n+      {\n+        switch (params.efb_format)\n+        {\n+        case PEControl::RGB8_Z24:\n+          Append("RGBA8ToRGB8(");\n+          break;\n+        case PEControl::RGBA6_Z24:\n+          Append("RGBA8ToRGBA6(");\n+          break;\n+        case PEControl::RGB565_Z16:\n+          Append("RGBA8ToRGB565(");\n+          break;\n+        default:\n+          Append("(");\n+          break;\n+        }\n+      }\n+      else\n+      {\n+        // Handle D3D depth inversion.\n+        if (!g_ActiveConfig.backend_info.bSupportsReversedDepthRange)\n+          Append("1.0 - (");\n+        else\n+          Append("()");', 'original_position': 1324, 'body': 'This looks weird. Everything else only writes an opening parenthesis, but no closing ones.\r\nThen again, I have no idea about shader code \U0001f937\u200d♂ ', 'commit_id': '69691d593793c738769fa22643cdca86e9e60ec2', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8510#discussion_r354460975', 'id': 354460975, 'updated_at': '2019-12-05T17:57:14Z', 'node_id': 'MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDM1NDQ2MDk3NQ==', 'author_association': 'MEMBER', 'path': 'Source/Core/VideoCommon/TextureConversionShader.cpp', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/354460975'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8510'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/8510#discussion_r354460975'}}, 'position': 1324, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/354460975', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8510'}], 'state': 'commented', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8510#pullrequestreview-327740679', 'author': 'BhaaLseN'}
2019-12-05T17:11:53.203555	{'type': 'gh_pull_request_review', 'pr_id': 8513, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'action': 'submitted', 'pr_title': 'VideoCommon/BoundingBox: Make interface for querying bounding box data', 'comments': [], 'state': 'approved', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8513#pullrequestreview-327714159', 'author': 'degasus'}
2019-12-05T12:45:23.728659	{'type': 'gh_pull_request_review', 'pr_id': 8509, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'action': 'submitted', 'pr_title': 'VideoCommon/FramebufferShaderGen: Minor clean up', 'comments': [{'created_at': '2019-12-05T12:45:21Z', 'user': {'type': 'User', 'avatar_url': 'https://avatars1.githubusercontent.com/u/712067?v=4', 'login': 'lioncash', 'gists_url': 'https://api.github.com/users/lioncash/gists{/gist_id}', 'html_url': 'https://github.com/lioncash', 'events_url': 'https://api.github.com/users/lioncash/events{/privacy}', 'id': 712067, 'site_admin': False, 'followers_url': 'https://api.github.com/users/lioncash/followers', 'subscriptions_url': 'https://api.github.com/users/lioncash/subscriptions', 'node_id': 'MDQ6VXNlcjcxMjA2Nw==', 'organizations_url': 'https://api.github.com/users/lioncash/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/lioncash/received_events', 'following_url': 'https://api.github.com/users/lioncash/following{/other_user}', 'repos_url': 'https://api.github.com/users/lioncash/repos', 'url': 'https://api.github.com/users/lioncash', 'starred_url': 'https://api.github.com/users/lioncash/starred{/owner}{/repo}'}, 'original_commit_id': 'f29730944fbcda8207504b8ee8a22907e754b5ef', 'pull_request_review_id': 327522580, 'diff_hunk': '@@ -225,50 +238,52 @@ std::string GenerateScreenQuadVertexShader()\n \n std::string GeneratePassthroughGeometryShader(u32 num_tex, u32 num_colors)\n {\n-  std::stringstream ss;\n+  std::ostringstream ss;\n   if (GetAPIType() == APIType::D3D)\n   {\n-    ss << "struct VS_OUTPUT\\n";\n-    ss << "{\\n";\n+    ss << "struct VS_OUTPUT\\n"\n+          "{\\n";\n     for (u32 i = 0; i < num_tex; i++)\n       ss << "  float3 tex" << i << " : TEXCOORD" << i << ";\\n";\n     for (u32 i = 0; i < num_colors; i++)\n       ss << "  float4 color" << i << " : COLOR" << i << ";\\n";\n-    ss << "  float4 position : SV_Position;\\n";\n-    ss << "};\\n";\n-    ss << "struct GS_OUTPUT\\n";\n-    ss << "{";\n+    ss << "  float4 position : SV_Position;\\n"\n+          "};\\n";\n+\n+    ss << "struct GS_OUTPUT\\n"', 'original_position': 173, 'body': "There is no difference here. The use of `<<` itself isn't an issue, especially given it's going to be moved over to fmt in a follow-up change, and I'd still prefer to keep the struct declarations separate from one another in that context as well.", 'commit_id': 'f29730944fbcda8207504b8ee8a22907e754b5ef', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8509#discussion_r354291470', 'id': 354291470, 'updated_at': '2019-12-05T12:45:21Z', 'node_id': 'MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDM1NDI5MTQ3MA==', 'author_association': 'MEMBER', 'path': 'Source/Core/VideoCommon/FramebufferShaderGen.cpp', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/354291470'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8509'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/8509#discussion_r354291470'}}, 'position': 173, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/354291470', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8509', 'in_reply_to_id': 354168043}], 'state': 'commented', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8509#pullrequestreview-327522580', 'author': 'lioncash'}
2019-12-05T11:17:43.530104	{'type': 'gh_pull_request_review', 'pr_id': 8509, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'action': 'submitted', 'pr_title': 'VideoCommon/FramebufferShaderGen: Minor clean up', 'comments': [{'created_at': '2019-12-05T11:17:41Z', 'user': {'type': 'User', 'avatar_url': 'https://avatars1.githubusercontent.com/u/7947461?v=4', 'login': 'CookiePLMonster', 'gists_url': 'https://api.github.com/users/CookiePLMonster/gists{/gist_id}', 'html_url': 'https://github.com/CookiePLMonster', 'events_url': 'https://api.github.com/users/CookiePLMonster/events{/privacy}', 'id': 7947461, 'site_admin': False, 'followers_url': 'https://api.github.com/users/CookiePLMonster/followers', 'subscriptions_url': 'https://api.github.com/users/CookiePLMonster/subscriptions', 'node_id': 'MDQ6VXNlcjc5NDc0NjE=', 'organizations_url': 'https://api.github.com/users/CookiePLMonster/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/CookiePLMonster/received_events', 'following_url': 'https://api.github.com/users/CookiePLMonster/following{/other_user}', 'repos_url': 'https://api.github.com/users/CookiePLMonster/repos', 'url': 'https://api.github.com/users/CookiePLMonster', 'starred_url': 'https://api.github.com/users/CookiePLMonster/starred{/owner}{/repo}'}, 'original_commit_id': 'f29730944fbcda8207504b8ee8a22907e754b5ef', 'pull_request_review_id': 327475730, 'diff_hunk': '@@ -225,50 +238,52 @@ std::string GenerateScreenQuadVertexShader()\n \n std::string GeneratePassthroughGeometryShader(u32 num_tex, u32 num_colors)\n {\n-  std::stringstream ss;\n+  std::ostringstream ss;\n   if (GetAPIType() == APIType::D3D)\n   {\n-    ss << "struct VS_OUTPUT\\n";\n-    ss << "{\\n";\n+    ss << "struct VS_OUTPUT\\n"\n+          "{\\n";\n     for (u32 i = 0; i < num_tex; i++)\n       ss << "  float3 tex" << i << " : TEXCOORD" << i << ";\\n";\n     for (u32 i = 0; i < num_colors; i++)\n       ss << "  float4 color" << i << " : COLOR" << i << ";\\n";\n-    ss << "  float4 position : SV_Position;\\n";\n-    ss << "};\\n";\n-    ss << "struct GS_OUTPUT\\n";\n-    ss << "{";\n+    ss << "  float4 position : SV_Position;\\n"\n+          "};\\n";\n+\n+    ss << "struct GS_OUTPUT\\n"', 'original_position': 173, 'body': 'Sure, but keeping a blank line between those would still keep the separation clear, still without the need to have a separate `<<`. IMO', 'commit_id': 'f29730944fbcda8207504b8ee8a22907e754b5ef', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8509#discussion_r354250042', 'id': 354250042, 'updated_at': '2019-12-05T11:17:42Z', 'node_id': 'MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDM1NDI1MDA0Mg==', 'author_association': 'MEMBER', 'path': 'Source/Core/VideoCommon/FramebufferShaderGen.cpp', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/354250042'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8509'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/8509#discussion_r354250042'}}, 'position': 173, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/354250042', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8509', 'in_reply_to_id': 354168043}], 'state': 'commented', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8509#pullrequestreview-327475730', 'author': 'CookiePLMonster'}
2019-12-05T09:54:47.600261	{'type': 'gh_pull_request_review', 'pr_id': 8509, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'action': 'edited', 'pr_title': 'VideoCommon/FramebufferShaderGen: Minor clean up', 'comments': [{'created_at': '2019-12-05T09:54:40Z', 'user': {'type': 'User', 'avatar_url': 'https://avatars1.githubusercontent.com/u/712067?v=4', 'login': 'lioncash', 'gists_url': 'https://api.github.com/users/lioncash/gists{/gist_id}', 'html_url': 'https://github.com/lioncash', 'events_url': 'https://api.github.com/users/lioncash/events{/privacy}', 'id': 712067, 'site_admin': False, 'followers_url': 'https://api.github.com/users/lioncash/followers', 'subscriptions_url': 'https://api.github.com/users/lioncash/subscriptions', 'node_id': 'MDQ6VXNlcjcxMjA2Nw==', 'organizations_url': 'https://api.github.com/users/lioncash/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/lioncash/received_events', 'following_url': 'https://api.github.com/users/lioncash/following{/other_user}', 'repos_url': 'https://api.github.com/users/lioncash/repos', 'url': 'https://api.github.com/users/lioncash', 'starred_url': 'https://api.github.com/users/lioncash/starred{/owner}{/repo}'}, 'original_commit_id': 'f29730944fbcda8207504b8ee8a22907e754b5ef', 'pull_request_review_id': 327313468, 'diff_hunk': '@@ -225,50 +238,52 @@ std::string GenerateScreenQuadVertexShader()\n \n std::string GeneratePassthroughGeometryShader(u32 num_tex, u32 num_colors)\n {\n-  std::stringstream ss;\n+  std::ostringstream ss;\n   if (GetAPIType() == APIType::D3D)\n   {\n-    ss << "struct VS_OUTPUT\\n";\n-    ss << "{\\n";\n+    ss << "struct VS_OUTPUT\\n"\n+          "{\\n";\n     for (u32 i = 0; i < num_tex; i++)\n       ss << "  float3 tex" << i << " : TEXCOORD" << i << ";\\n";\n     for (u32 i = 0; i < num_colors; i++)\n       ss << "  float4 color" << i << " : COLOR" << i << ";\\n";\n-    ss << "  float4 position : SV_Position;\\n";\n-    ss << "};\\n";\n-    ss << "struct GS_OUTPUT\\n";\n-    ss << "{";\n+    ss << "  float4 position : SV_Position;\\n"\n+          "};\\n";\n+\n+    ss << "struct GS_OUTPUT\\n"', 'original_position': 173, 'body': "Because the string above it is related to a completely different struct declaration. For visual clarity I've kept them apart from one another.", 'commit_id': 'f29730944fbcda8207504b8ee8a22907e754b5ef', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8509#discussion_r354205673', 'id': 354205673, 'updated_at': '2019-12-05T09:54:45Z', 'node_id': 'MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDM1NDIwNTY3Mw==', 'author_association': 'MEMBER', 'path': 'Source/Core/VideoCommon/FramebufferShaderGen.cpp', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/354205673'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8509'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/8509#discussion_r354205673'}}, 'position': 173, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/354205673', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8509', 'in_reply_to_id': 354168043}], 'state': 'commented', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8509#pullrequestreview-327313468', 'author': 'lioncash'}
2019-12-05T09:54:46.939168	{'type': 'gh_pull_request_review', 'pr_id': 8509, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'action': 'submitted', 'pr_title': 'VideoCommon/FramebufferShaderGen: Minor clean up', 'comments': [{'created_at': '2019-12-05T09:54:40Z', 'user': {'type': 'User', 'avatar_url': 'https://avatars1.githubusercontent.com/u/712067?v=4', 'login': 'lioncash', 'gists_url': 'https://api.github.com/users/lioncash/gists{/gist_id}', 'html_url': 'https://github.com/lioncash', 'events_url': 'https://api.github.com/users/lioncash/events{/privacy}', 'id': 712067, 'site_admin': False, 'followers_url': 'https://api.github.com/users/lioncash/followers', 'subscriptions_url': 'https://api.github.com/users/lioncash/subscriptions', 'node_id': 'MDQ6VXNlcjcxMjA2Nw==', 'organizations_url': 'https://api.github.com/users/lioncash/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/lioncash/received_events', 'following_url': 'https://api.github.com/users/lioncash/following{/other_user}', 'repos_url': 'https://api.github.com/users/lioncash/repos', 'url': 'https://api.github.com/users/lioncash', 'starred_url': 'https://api.github.com/users/lioncash/starred{/owner}{/repo}'}, 'original_commit_id': 'f29730944fbcda8207504b8ee8a22907e754b5ef', 'pull_request_review_id': 327313468, 'diff_hunk': '@@ -225,50 +238,52 @@ std::string GenerateScreenQuadVertexShader()\n \n std::string GeneratePassthroughGeometryShader(u32 num_tex, u32 num_colors)\n {\n-  std::stringstream ss;\n+  std::ostringstream ss;\n   if (GetAPIType() == APIType::D3D)\n   {\n-    ss << "struct VS_OUTPUT\\n";\n-    ss << "{\\n";\n+    ss << "struct VS_OUTPUT\\n"\n+          "{\\n";\n     for (u32 i = 0; i < num_tex; i++)\n       ss << "  float3 tex" << i << " : TEXCOORD" << i << ";\\n";\n     for (u32 i = 0; i < num_colors; i++)\n       ss << "  float4 color" << i << " : COLOR" << i << ";\\n";\n-    ss << "  float4 position : SV_Position;\\n";\n-    ss << "};\\n";\n-    ss << "struct GS_OUTPUT\\n";\n-    ss << "{";\n+    ss << "  float4 position : SV_Position;\\n"\n+          "};\\n";\n+\n+    ss << "struct GS_OUTPUT\\n"', 'original_position': 173, 'body': "Because the string above it is related to a completely different struct declaration. For visual clarity I've kept them apart from one another.", 'commit_id': 'f29730944fbcda8207504b8ee8a22907e754b5ef', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8509#discussion_r354205673', 'id': 354205673, 'updated_at': '2019-12-05T09:54:45Z', 'node_id': 'MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDM1NDIwNTY3Mw==', 'author_association': 'MEMBER', 'path': 'Source/Core/VideoCommon/FramebufferShaderGen.cpp', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/354205673'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8509'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/8509#discussion_r354205673'}}, 'position': 173, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/354205673', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8509', 'in_reply_to_id': 354168043}], 'state': 'commented', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8509#pullrequestreview-327313468', 'author': 'lioncash'}
2019-12-05T08:37:07.151267	{'type': 'gh_pull_request_review', 'pr_id': 8509, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'action': 'submitted', 'pr_title': 'VideoCommon/FramebufferShaderGen: Minor clean up', 'comments': [{'created_at': '2019-12-05T08:37:05Z', 'user': {'type': 'User', 'avatar_url': 'https://avatars1.githubusercontent.com/u/7947461?v=4', 'login': 'CookiePLMonster', 'gists_url': 'https://api.github.com/users/CookiePLMonster/gists{/gist_id}', 'html_url': 'https://github.com/CookiePLMonster', 'events_url': 'https://api.github.com/users/CookiePLMonster/events{/privacy}', 'id': 7947461, 'site_admin': False, 'followers_url': 'https://api.github.com/users/CookiePLMonster/followers', 'subscriptions_url': 'https://api.github.com/users/CookiePLMonster/subscriptions', 'node_id': 'MDQ6VXNlcjc5NDc0NjE=', 'organizations_url': 'https://api.github.com/users/CookiePLMonster/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/CookiePLMonster/received_events', 'following_url': 'https://api.github.com/users/CookiePLMonster/following{/other_user}', 'repos_url': 'https://api.github.com/users/CookiePLMonster/repos', 'url': 'https://api.github.com/users/CookiePLMonster', 'starred_url': 'https://api.github.com/users/CookiePLMonster/starred{/owner}{/repo}'}, 'original_commit_id': 'f29730944fbcda8207504b8ee8a22907e754b5ef', 'pull_request_review_id': 327378855, 'diff_hunk': '@@ -225,50 +238,52 @@ std::string GenerateScreenQuadVertexShader()\n \n std::string GeneratePassthroughGeometryShader(u32 num_tex, u32 num_colors)\n {\n-  std::stringstream ss;\n+  std::ostringstream ss;\n   if (GetAPIType() == APIType::D3D)\n   {\n-    ss << "struct VS_OUTPUT\\n";\n-    ss << "{\\n";\n+    ss << "struct VS_OUTPUT\\n"\n+          "{\\n";\n     for (u32 i = 0; i < num_tex; i++)\n       ss << "  float3 tex" << i << " : TEXCOORD" << i << ";\\n";\n     for (u32 i = 0; i < num_colors; i++)\n       ss << "  float4 color" << i << " : COLOR" << i << ";\\n";\n-    ss << "  float4 position : SV_Position;\\n";\n-    ss << "};\\n";\n-    ss << "struct GS_OUTPUT\\n";\n-    ss << "{";\n+    ss << "  float4 position : SV_Position;\\n"\n+          "};\\n";\n+\n+    ss << "struct GS_OUTPUT\\n"', 'original_position': 173, 'body': 'Why is this using `ss << ` instead of making it one long string like you do above?', 'commit_id': 'f29730944fbcda8207504b8ee8a22907e754b5ef', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8509#discussion_r354168043', 'id': 354168043, 'updated_at': '2019-12-05T08:37:05Z', 'node_id': 'MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDM1NDE2ODA0Mw==', 'author_association': 'MEMBER', 'path': 'Source/Core/VideoCommon/FramebufferShaderGen.cpp', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/354168043'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8509'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/8509#discussion_r354168043'}}, 'position': 173, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/354168043', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8509'}], 'state': 'commented', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8509#pullrequestreview-327378855', 'author': 'CookiePLMonster'}
2019-12-05T05:19:57.563797	{'type': 'gh_pull_request_review', 'pr_id': 8509, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'action': 'submitted', 'pr_title': 'VideoCommon/FramebufferShaderGen: Minor clean up', 'comments': [{'created_at': '2019-12-05T05:17:26Z', 'user': {'type': 'User', 'avatar_url': 'https://avatars1.githubusercontent.com/u/4831577?v=4', 'login': 'Warepire', 'gists_url': 'https://api.github.com/users/Warepire/gists{/gist_id}', 'html_url': 'https://github.com/Warepire', 'events_url': 'https://api.github.com/users/Warepire/events{/privacy}', 'id': 4831577, 'site_admin': False, 'followers_url': 'https://api.github.com/users/Warepire/followers', 'subscriptions_url': 'https://api.github.com/users/Warepire/subscriptions', 'node_id': 'MDQ6VXNlcjQ4MzE1Nzc=', 'organizations_url': 'https://api.github.com/users/Warepire/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/Warepire/received_events', 'following_url': 'https://api.github.com/users/Warepire/following{/other_user}', 'repos_url': 'https://api.github.com/users/Warepire/repos', 'url': 'https://api.github.com/users/Warepire', 'starred_url': 'https://api.github.com/users/Warepire/starred{/owner}{/repo}'}, 'original_commit_id': 'c46b53d88e5d06140521559906254619bc2cfe67', 'pull_request_review_id': 327312739, 'diff_hunk': '@@ -51,17 +60,17 @@ static void EmitSamplerDeclarations(std::stringstream& ss, u32 start = 0, u32 en\n   }\n }\n \n-static void EmitSampleTexture(std::stringstream& ss, u32 n, const char* coords)\n+void EmitSampleTexture(std::stringstream& ss, u32 n, const char* coords)', 'original_position': 45, 'body': "This function appears to use `coords` in the same way as `EmitTextureLoad` which was upgraded to `std::string_view`, but this one wasn't. Is there a specific reason for that?", 'commit_id': 'f29730944fbcda8207504b8ee8a22907e754b5ef', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8509#discussion_r354114374', 'id': 354114374, 'updated_at': '2019-12-05T05:19:55Z', 'node_id': 'MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDM1NDExNDM3NA==', 'author_association': 'NONE', 'path': 'Source/Core/VideoCommon/FramebufferShaderGen.cpp', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/354114374'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8509'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/8509#discussion_r354114374'}}, 'position': None, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/354114374', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8509'}], 'state': 'commented', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8509#pullrequestreview-327312739', 'author': 'Warepire'}
2019-12-05T05:19:57.223173	{'type': 'gh_pull_request_review', 'pr_id': 8509, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'action': 'edited', 'pr_title': 'VideoCommon/FramebufferShaderGen: Minor clean up', 'comments': [{'created_at': '2019-12-05T05:17:26Z', 'user': {'type': 'User', 'avatar_url': 'https://avatars1.githubusercontent.com/u/4831577?v=4', 'login': 'Warepire', 'gists_url': 'https://api.github.com/users/Warepire/gists{/gist_id}', 'html_url': 'https://github.com/Warepire', 'events_url': 'https://api.github.com/users/Warepire/events{/privacy}', 'id': 4831577, 'site_admin': False, 'followers_url': 'https://api.github.com/users/Warepire/followers', 'subscriptions_url': 'https://api.github.com/users/Warepire/subscriptions', 'node_id': 'MDQ6VXNlcjQ4MzE1Nzc=', 'organizations_url': 'https://api.github.com/users/Warepire/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/Warepire/received_events', 'following_url': 'https://api.github.com/users/Warepire/following{/other_user}', 'repos_url': 'https://api.github.com/users/Warepire/repos', 'url': 'https://api.github.com/users/Warepire', 'starred_url': 'https://api.github.com/users/Warepire/starred{/owner}{/repo}'}, 'original_commit_id': 'c46b53d88e5d06140521559906254619bc2cfe67', 'pull_request_review_id': 327312739, 'diff_hunk': '@@ -51,17 +60,17 @@ static void EmitSamplerDeclarations(std::stringstream& ss, u32 start = 0, u32 en\n   }\n }\n \n-static void EmitSampleTexture(std::stringstream& ss, u32 n, const char* coords)\n+void EmitSampleTexture(std::stringstream& ss, u32 n, const char* coords)', 'original_position': 45, 'body': "This function appears to use `coords` in the same way as `EmitTextureLoad` which was upgraded to `std::string_view`, but this one wasn't. Is there a specific reason for that?", 'commit_id': 'f29730944fbcda8207504b8ee8a22907e754b5ef', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8509#discussion_r354114374', 'id': 354114374, 'updated_at': '2019-12-05T05:19:55Z', 'node_id': 'MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDM1NDExNDM3NA==', 'author_association': 'NONE', 'path': 'Source/Core/VideoCommon/FramebufferShaderGen.cpp', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/354114374'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8509'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/8509#discussion_r354114374'}}, 'position': None, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/354114374', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8509'}], 'state': 'commented', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8509#pullrequestreview-327312739', 'author': 'Warepire'}
2019-12-04T21:33:55.045241	{'type': 'gh_pull_request_review', 'pr_id': 8451, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'action': 'submitted', 'pr_title': 'Add motion input support to nunchuk', 'comments': [{'created_at': '2019-12-04T21:27:51Z', 'user': {'type': 'User', 'avatar_url': 'https://avatars1.githubusercontent.com/u/1768214?v=4', 'login': 'jordan-woyak', 'gists_url': 'https://api.github.com/users/jordan-woyak/gists{/gist_id}', 'html_url': 'https://github.com/jordan-woyak', 'events_url': 'https://api.github.com/users/jordan-woyak/events{/privacy}', 'id': 1768214, 'site_admin': False, 'followers_url': 'https://api.github.com/users/jordan-woyak/followers', 'subscriptions_url': 'https://api.github.com/users/jordan-woyak/subscriptions', 'node_id': 'MDQ6VXNlcjE3NjgyMTQ=', 'organizations_url': 'https://api.github.com/users/jordan-woyak/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/jordan-woyak/received_events', 'following_url': 'https://api.github.com/users/jordan-woyak/following{/other_user}', 'repos_url': 'https://api.github.com/users/jordan-woyak/repos', 'url': 'https://api.github.com/users/jordan-woyak', 'starred_url': 'https://api.github.com/users/jordan-woyak/starred{/owner}{/repo}'}, 'original_commit_id': 'cd90e2d55af7b67a3c29309ab2197c24b723b199', 'pull_request_review_id': 327165342, 'diff_hunk': '@@ -0,0 +1,80 @@\n+// Copyright 2017 Dolphin Emulator Project', 'original_position': 1, 'body': '2019', 'commit_id': 'cd90e2d55af7b67a3c29309ab2197c24b723b199', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8451#discussion_r353991927', 'id': 353991927, 'updated_at': '2019-12-04T21:33:53Z', 'node_id': 'MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDM1Mzk5MTkyNw==', 'author_association': 'MEMBER', 'path': 'Source/Core/DolphinQt/Config/Mapping/WiimoteEmuExtensionMotionInput.cpp', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/353991927'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8451'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/8451#discussion_r353991927'}}, 'position': 1, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/353991927', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8451'}, {'created_at': '2019-12-04T21:28:02Z', 'user': {'type': 'User', 'avatar_url': 'https://avatars1.githubusercontent.com/u/1768214?v=4', 'login': 'jordan-woyak', 'gists_url': 'https://api.github.com/users/jordan-woyak/gists{/gist_id}', 'html_url': 'https://github.com/jordan-woyak', 'events_url': 'https://api.github.com/users/jordan-woyak/events{/privacy}', 'id': 1768214, 'site_admin': False, 'followers_url': 'https://api.github.com/users/jordan-woyak/followers', 'subscriptions_url': 'https://api.github.com/users/jordan-woyak/subscriptions', 'node_id': 'MDQ6VXNlcjE3NjgyMTQ=', 'organizations_url': 'https://api.github.com/users/jordan-woyak/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/jordan-woyak/received_events', 'following_url': 'https://api.github.com/users/jordan-woyak/following{/other_user}', 'repos_url': 'https://api.github.com/users/jordan-woyak/repos', 'url': 'https://api.github.com/users/jordan-woyak', 'starred_url': 'https://api.github.com/users/jordan-woyak/starred{/owner}{/repo}'}, 'original_commit_id': 'cd90e2d55af7b67a3c29309ab2197c24b723b199', 'pull_request_review_id': 327165342, 'diff_hunk': '@@ -0,0 +1,32 @@\n+// Copyright 2017 Dolphin Emulator Project', 'original_position': 1, 'body': '2019', 'commit_id': 'cd90e2d55af7b67a3c29309ab2197c24b723b199', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8451#discussion_r353992013', 'id': 353992013, 'updated_at': '2019-12-04T21:33:53Z', 'node_id': 'MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDM1Mzk5MjAxMw==', 'author_association': 'MEMBER', 'path': 'Source/Core/DolphinQt/Config/Mapping/WiimoteEmuExtensionMotionInput.h', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/353992013'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8451'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/8451#discussion_r353992013'}}, 'position': 1, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/353992013', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8451'}, {'created_at': '2019-12-04T21:30:04Z', 'user': {'type': 'User', 'avatar_url': 'https://avatars1.githubusercontent.com/u/1768214?v=4', 'login': 'jordan-woyak', 'gists_url': 'https://api.github.com/users/jordan-woyak/gists{/gist_id}', 'html_url': 'https://github.com/jordan-woyak', 'events_url': 'https://api.github.com/users/jordan-woyak/events{/privacy}', 'id': 1768214, 'site_admin': False, 'followers_url': 'https://api.github.com/users/jordan-woyak/followers', 'subscriptions_url': 'https://api.github.com/users/jordan-woyak/subscriptions', 'node_id': 'MDQ6VXNlcjE3NjgyMTQ=', 'organizations_url': 'https://api.github.com/users/jordan-woyak/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/jordan-woyak/received_events', 'following_url': 'https://api.github.com/users/jordan-woyak/following{/other_user}', 'repos_url': 'https://api.github.com/users/jordan-woyak/repos', 'url': 'https://api.github.com/users/jordan-woyak', 'starred_url': 'https://api.github.com/users/jordan-woyak/starred{/owner}{/repo}'}, 'original_commit_id': 'cd90e2d55af7b67a3c29309ab2197c24b723b199', 'pull_request_review_id': 327165342, 'diff_hunk': '@@ -0,0 +1,32 @@\n+// Copyright 2017 Dolphin Emulator Project', 'original_position': 1, 'body': '2019', 'commit_id': 'cd90e2d55af7b67a3c29309ab2197c24b723b199', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8451#discussion_r353993004', 'id': 353993004, 'updated_at': '2019-12-04T21:33:53Z', 'node_id': 'MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDM1Mzk5MzAwNA==', 'author_association': 'MEMBER', 'path': 'Source/Core/DolphinQt/Config/Mapping/WiimoteEmuExtensionMotionSimulation.h', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/353993004'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8451'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/8451#discussion_r353993004'}}, 'position': 1, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/353993004', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8451'}], 'state': 'changes_requested', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8451#pullrequestreview-327165342', 'author': 'jordan-woyak'}
2019-12-04T21:33:54.701476	{'type': 'gh_pull_request_review', 'pr_id': 8451, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'action': 'edited', 'pr_title': 'Add motion input support to nunchuk', 'comments': [{'created_at': '2019-12-04T21:27:51Z', 'user': {'type': 'User', 'avatar_url': 'https://avatars1.githubusercontent.com/u/1768214?v=4', 'login': 'jordan-woyak', 'gists_url': 'https://api.github.com/users/jordan-woyak/gists{/gist_id}', 'html_url': 'https://github.com/jordan-woyak', 'events_url': 'https://api.github.com/users/jordan-woyak/events{/privacy}', 'id': 1768214, 'site_admin': False, 'followers_url': 'https://api.github.com/users/jordan-woyak/followers', 'subscriptions_url': 'https://api.github.com/users/jordan-woyak/subscriptions', 'node_id': 'MDQ6VXNlcjE3NjgyMTQ=', 'organizations_url': 'https://api.github.com/users/jordan-woyak/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/jordan-woyak/received_events', 'following_url': 'https://api.github.com/users/jordan-woyak/following{/other_user}', 'repos_url': 'https://api.github.com/users/jordan-woyak/repos', 'url': 'https://api.github.com/users/jordan-woyak', 'starred_url': 'https://api.github.com/users/jordan-woyak/starred{/owner}{/repo}'}, 'original_commit_id': 'cd90e2d55af7b67a3c29309ab2197c24b723b199', 'pull_request_review_id': 327165342, 'diff_hunk': '@@ -0,0 +1,80 @@\n+// Copyright 2017 Dolphin Emulator Project', 'original_position': 1, 'body': '2019', 'commit_id': 'cd90e2d55af7b67a3c29309ab2197c24b723b199', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8451#discussion_r353991927', 'id': 353991927, 'updated_at': '2019-12-04T21:33:53Z', 'node_id': 'MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDM1Mzk5MTkyNw==', 'author_association': 'MEMBER', 'path': 'Source/Core/DolphinQt/Config/Mapping/WiimoteEmuExtensionMotionInput.cpp', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/353991927'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8451'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/8451#discussion_r353991927'}}, 'position': 1, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/353991927', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8451'}, {'created_at': '2019-12-04T21:28:02Z', 'user': {'type': 'User', 'avatar_url': 'https://avatars1.githubusercontent.com/u/1768214?v=4', 'login': 'jordan-woyak', 'gists_url': 'https://api.github.com/users/jordan-woyak/gists{/gist_id}', 'html_url': 'https://github.com/jordan-woyak', 'events_url': 'https://api.github.com/users/jordan-woyak/events{/privacy}', 'id': 1768214, 'site_admin': False, 'followers_url': 'https://api.github.com/users/jordan-woyak/followers', 'subscriptions_url': 'https://api.github.com/users/jordan-woyak/subscriptions', 'node_id': 'MDQ6VXNlcjE3NjgyMTQ=', 'organizations_url': 'https://api.github.com/users/jordan-woyak/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/jordan-woyak/received_events', 'following_url': 'https://api.github.com/users/jordan-woyak/following{/other_user}', 'repos_url': 'https://api.github.com/users/jordan-woyak/repos', 'url': 'https://api.github.com/users/jordan-woyak', 'starred_url': 'https://api.github.com/users/jordan-woyak/starred{/owner}{/repo}'}, 'original_commit_id': 'cd90e2d55af7b67a3c29309ab2197c24b723b199', 'pull_request_review_id': 327165342, 'diff_hunk': '@@ -0,0 +1,32 @@\n+// Copyright 2017 Dolphin Emulator Project', 'original_position': 1, 'body': '2019', 'commit_id': 'cd90e2d55af7b67a3c29309ab2197c24b723b199', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8451#discussion_r353992013', 'id': 353992013, 'updated_at': '2019-12-04T21:33:53Z', 'node_id': 'MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDM1Mzk5MjAxMw==', 'author_association': 'MEMBER', 'path': 'Source/Core/DolphinQt/Config/Mapping/WiimoteEmuExtensionMotionInput.h', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/353992013'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8451'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/8451#discussion_r353992013'}}, 'position': 1, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/353992013', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8451'}, {'created_at': '2019-12-04T21:30:04Z', 'user': {'type': 'User', 'avatar_url': 'https://avatars1.githubusercontent.com/u/1768214?v=4', 'login': 'jordan-woyak', 'gists_url': 'https://api.github.com/users/jordan-woyak/gists{/gist_id}', 'html_url': 'https://github.com/jordan-woyak', 'events_url': 'https://api.github.com/users/jordan-woyak/events{/privacy}', 'id': 1768214, 'site_admin': False, 'followers_url': 'https://api.github.com/users/jordan-woyak/followers', 'subscriptions_url': 'https://api.github.com/users/jordan-woyak/subscriptions', 'node_id': 'MDQ6VXNlcjE3NjgyMTQ=', 'organizations_url': 'https://api.github.com/users/jordan-woyak/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/jordan-woyak/received_events', 'following_url': 'https://api.github.com/users/jordan-woyak/following{/other_user}', 'repos_url': 'https://api.github.com/users/jordan-woyak/repos', 'url': 'https://api.github.com/users/jordan-woyak', 'starred_url': 'https://api.github.com/users/jordan-woyak/starred{/owner}{/repo}'}, 'original_commit_id': 'cd90e2d55af7b67a3c29309ab2197c24b723b199', 'pull_request_review_id': 327165342, 'diff_hunk': '@@ -0,0 +1,32 @@\n+// Copyright 2017 Dolphin Emulator Project', 'original_position': 1, 'body': '2019', 'commit_id': 'cd90e2d55af7b67a3c29309ab2197c24b723b199', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8451#discussion_r353993004', 'id': 353993004, 'updated_at': '2019-12-04T21:33:53Z', 'node_id': 'MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDM1Mzk5MzAwNA==', 'author_association': 'MEMBER', 'path': 'Source/Core/DolphinQt/Config/Mapping/WiimoteEmuExtensionMotionSimulation.h', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/353993004'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8451'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/8451#discussion_r353993004'}}, 'position': 1, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/353993004', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8451'}], 'state': 'changes_requested', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8451#pullrequestreview-327165342', 'author': 'jordan-woyak'}
2019-12-04T05:50:58.295640	{'type': 'gh_pull_request_review', 'pr_id': 8508, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'action': 'submitted', 'pr_title': 'VideoCommon/TextureConverterShaderGen: Convert over to fmt', 'comments': [], 'state': 'approved', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8508#pullrequestreview-326614791', 'author': 'phire'}
2019-12-03T20:39:11.411032	{'type': 'gh_pull_request_review', 'pr_id': 8505, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'action': 'submitted', 'pr_title': 'Re-enable signed/unsigned mismatch warnings', 'comments': [{'created_at': '2019-12-03T20:39:09Z', 'user': {'type': 'User', 'avatar_url': 'https://avatars1.githubusercontent.com/u/7947461?v=4', 'login': 'CookiePLMonster', 'gists_url': 'https://api.github.com/users/CookiePLMonster/gists{/gist_id}', 'html_url': 'https://github.com/CookiePLMonster', 'events_url': 'https://api.github.com/users/CookiePLMonster/events{/privacy}', 'id': 7947461, 'site_admin': False, 'followers_url': 'https://api.github.com/users/CookiePLMonster/followers', 'subscriptions_url': 'https://api.github.com/users/CookiePLMonster/subscriptions', 'node_id': 'MDQ6VXNlcjc5NDc0NjE=', 'organizations_url': 'https://api.github.com/users/CookiePLMonster/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/CookiePLMonster/received_events', 'following_url': 'https://api.github.com/users/CookiePLMonster/following{/other_user}', 'repos_url': 'https://api.github.com/users/CookiePLMonster/repos', 'url': 'https://api.github.com/users/CookiePLMonster', 'starred_url': 'https://api.github.com/users/CookiePLMonster/starred{/owner}{/repo}'}, 'original_commit_id': 'd3c054122ee778ae0d62900a3175469ab8f11a6c', 'pull_request_review_id': 326433033, 'diff_hunk': '@@ -82,7 +84,7 @@ void DSPEmitter::andcf(const UDSPInstruction opc)\n     OR(16, sr_reg, Imm16(SR_LOGIC_ZERO));\n     FixupBranch exit = J();\n     SetJumpTarget(notLogicZero);\n-    AND(16, sr_reg, Imm16(~SR_LOGIC_ZERO));\n+    AND(16, sr_reg, Imm16(~SR_LOGIC_ZERO & 0xFFFF));', 'original_position': 14, 'body': 'Given how even Microsoft headers generate C4365, I would just ignore that fact.', 'commit_id': 'd3c054122ee778ae0d62900a3175469ab8f11a6c', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8505#discussion_r353409569', 'id': 353409569, 'updated_at': '2019-12-03T20:39:10Z', 'node_id': 'MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDM1MzQwOTU2OQ==', 'author_association': 'MEMBER', 'path': 'Source/Core/Core/DSP/Jit/x64/DSPJitArithmetic.cpp', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/353409569'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8505'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/8505#discussion_r353409569'}}, 'position': 14, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/353409569', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8505', 'in_reply_to_id': 352880868}], 'state': 'commented', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8505#pullrequestreview-326433033', 'author': 'CookiePLMonster'}
2019-12-03T20:37:32.656412	{'type': 'gh_pull_request_review', 'pr_id': 8505, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'action': 'submitted', 'pr_title': 'Re-enable signed/unsigned mismatch warnings', 'comments': [{'created_at': '2019-12-03T20:37:30Z', 'user': {'type': 'User', 'avatar_url': 'https://avatars1.githubusercontent.com/u/7947461?v=4', 'login': 'CookiePLMonster', 'gists_url': 'https://api.github.com/users/CookiePLMonster/gists{/gist_id}', 'html_url': 'https://github.com/CookiePLMonster', 'events_url': 'https://api.github.com/users/CookiePLMonster/events{/privacy}', 'id': 7947461, 'site_admin': False, 'followers_url': 'https://api.github.com/users/CookiePLMonster/followers', 'subscriptions_url': 'https://api.github.com/users/CookiePLMonster/subscriptions', 'node_id': 'MDQ6VXNlcjc5NDc0NjE=', 'organizations_url': 'https://api.github.com/users/CookiePLMonster/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/CookiePLMonster/received_events', 'following_url': 'https://api.github.com/users/CookiePLMonster/following{/other_user}', 'repos_url': 'https://api.github.com/users/CookiePLMonster/repos', 'url': 'https://api.github.com/users/CookiePLMonster', 'starred_url': 'https://api.github.com/users/CookiePLMonster/starred{/owner}{/repo}'}, 'original_commit_id': 'd3c054122ee778ae0d62900a3175469ab8f11a6c', 'pull_request_review_id': 326432179, 'diff_hunk': '@@ -82,7 +84,7 @@ void DSPEmitter::andcf(const UDSPInstruction opc)\n     OR(16, sr_reg, Imm16(SR_LOGIC_ZERO));\n     FixupBranch exit = J();\n     SetJumpTarget(notLogicZero);\n-    AND(16, sr_reg, Imm16(~SR_LOGIC_ZERO));\n+    AND(16, sr_reg, Imm16(~SR_LOGIC_ZERO & 0xFFFF));', 'original_position': 14, 'body': 'Type casting like you suggested generates warning `C4310 - cast truncates constant value`. Maybe the way I have it is preferable after all.', 'commit_id': 'd3c054122ee778ae0d62900a3175469ab8f11a6c', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8505#discussion_r353408921', 'id': 353408921, 'updated_at': '2019-12-03T20:37:31Z', 'node_id': 'MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDM1MzQwODkyMQ==', 'author_association': 'MEMBER', 'path': 'Source/Core/Core/DSP/Jit/x64/DSPJitArithmetic.cpp', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/353408921'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8505'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/8505#discussion_r353408921'}}, 'position': 14, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/353408921', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8505', 'in_reply_to_id': 352880868}], 'state': 'commented', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8505#pullrequestreview-326432179', 'author': 'CookiePLMonster'}
2019-12-03T20:07:16.062963	{'type': 'gh_pull_request_review', 'pr_id': 8505, 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'action': 'submitted', 'pr_title': 'Re-enable signed/unsigned mismatch warnings', 'comments': [{'created_at': '2019-12-03T20:07:14Z', 'user': {'type': 'User', 'avatar_url': 'https://avatars1.githubusercontent.com/u/7947461?v=4', 'login': 'CookiePLMonster', 'gists_url': 'https://api.github.com/users/CookiePLMonster/gists{/gist_id}', 'html_url': 'https://github.com/CookiePLMonster', 'events_url': 'https://api.github.com/users/CookiePLMonster/events{/privacy}', 'id': 7947461, 'site_admin': False, 'followers_url': 'https://api.github.com/users/CookiePLMonster/followers', 'subscriptions_url': 'https://api.github.com/users/CookiePLMonster/subscriptions', 'node_id': 'MDQ6VXNlcjc5NDc0NjE=', 'organizations_url': 'https://api.github.com/users/CookiePLMonster/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/CookiePLMonster/received_events', 'following_url': 'https://api.github.com/users/CookiePLMonster/following{/other_user}', 'repos_url': 'https://api.github.com/users/CookiePLMonster/repos', 'url': 'https://api.github.com/users/CookiePLMonster', 'starred_url': 'https://api.github.com/users/CookiePLMonster/starred{/owner}{/repo}'}, 'original_commit_id': 'd3c054122ee778ae0d62900a3175469ab8f11a6c', 'pull_request_review_id': 326415665, 'diff_hunk': '@@ -342,11 +342,11 @@ union UGQR\n   explicit UGQR(u32 hex_) : Hex{hex_} {}\n };\n \n-#define XER_CA_SHIFT 29\n-#define XER_OV_SHIFT 30\n-#define XER_SO_SHIFT 31\n-#define XER_OV_MASK 1\n-#define XER_SO_MASK 2\n+#define XER_CA_SHIFT 29u\n+#define XER_OV_SHIFT 30u\n+#define XER_SO_SHIFT 31u\n+#define XER_OV_MASK 1u\n+#define XER_SO_MASK 2u', 'original_position': 13, 'body': 'I guess? Worth a try.', 'commit_id': 'd3c054122ee778ae0d62900a3175469ab8f11a6c', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8505#discussion_r353396134', 'id': 353396134, 'updated_at': '2019-12-03T20:07:14Z', 'node_id': 'MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDM1MzM5NjEzNA==', 'author_association': 'MEMBER', 'path': 'Source/Core/Core/PowerPC/Gekko.h', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/353396134'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8505'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/8505#discussion_r353396134'}}, 'position': 13, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/353396134', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8505', 'in_reply_to_id': 353306008}], 'state': 'commented', 'url': 'https://github.com/dolphin-emu/dolphin/pull/8505#pullrequestreview-326415665', 'author': 'CookiePLMonster'}

Recent 'gh_push' events

2019-12-06T16:00:45.129528	{'type': 'gh_push', 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'base_ref_name': None, 'deleted': False, 'after_sha': '5a5c46a8b15990e1e38636d017c28572e4370745', 'before_sha': '15fc71cfcf5f94221443aaff99ae559fa3cb4633', 'created': False, 'commits': [{'message': 'Common/Network: Make StringToMacAddress use a string_view\n\nThis function only ever reads the contents of the string in a non-owning\nmanner, so we can change the parameter over to being a string view.', 'hash': 'f06461d208333e6367d5670f7718e8fa7b7e849e', 'distinct': True, 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/f06461d208333e6367d5670f7718e8fa7b7e849e', 'added': [], 'author': {'name': 'Lioncash', 'email': 'mathew1800@gmail.com', 'username': 'lioncash'}, 'modified': ['Source/Core/Common/Network.cpp', 'Source/Core/Common/Network.h']}, {'message': 'Common/Network: Remove unused header inclusions\n\nRemoves unused header dependencies.', 'hash': 'cbfacc41bab03f0171981a64fe90949bc2456d3e', 'distinct': True, 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/cbfacc41bab03f0171981a64fe90949bc2456d3e', 'added': [], 'author': {'name': 'Lioncash', 'email': 'mathew1800@gmail.com', 'username': 'lioncash'}, 'modified': ['Source/Core/Common/Network.cpp']}, {'message': "Common/Network: Use std::nullopt in StringToMacAddress\n\nPrevents unnecessary zeroing out of std::optional's internal buffer in\nsome implementations.", 'hash': '81edcca8db0bbbe9904956d7038bd1a2abdd9a87', 'distinct': True, 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/81edcca8db0bbbe9904956d7038bd1a2abdd9a87', 'added': [], 'author': {'name': 'Lioncash', 'email': 'mathew1800@gmail.com', 'username': 'lioncash'}, 'modified': ['Source/Core/Common/Network.cpp']}, {'message': 'Merge pull request #8514 from lioncash/sview\n\nCommon/Network: Make StringToMacAddress use a string_view', 'hash': '5a5c46a8b15990e1e38636d017c28572e4370745', 'distinct': True, 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/5a5c46a8b15990e1e38636d017c28572e4370745', 'added': [], 'author': {'name': 'JosJuice', 'email': 'josjuice@gmail.com', 'username': 'JosJuice'}, 'modified': ['Source/Core/Common/Network.cpp', 'Source/Core/Common/Network.h']}], 'forced': False, 'ref_name': 'master', 'ref_type': 'heads', 'pusher': 'JosJuice'}
2019-12-04T21:30:37.644190	{'type': 'gh_push', 'source': 'ghhookparser', 'repo': 'dolphin-emu/www', 'base_ref_name': None, 'deleted': False, 'after_sha': '4589c8a34dc360c28fb5904c71bf2617a96982b6', 'before_sha': '0000000000000000000000000000000000000000', 'created': True, 'commits': [{'message': 'build(deps): bump django from 2.2.6 to 2.2.8\n\nBumps [django](https://github.com/django/django) from 2.2.6 to 2.2.8.\n- [Release notes](https://github.com/django/django/releases)\n- [Commits](https://github.com/django/django/compare/2.2.6...2.2.8)\n\nSigned-off-by: dependabot[bot] <support@github.com>', 'hash': '4589c8a34dc360c28fb5904c71bf2617a96982b6', 'distinct': True, 'removed': [], 'url': 'https://github.com/dolphin-emu/www/commit/4589c8a34dc360c28fb5904c71bf2617a96982b6', 'added': [], 'author': {'name': 'dependabot[bot]', 'email': '49699333+dependabot[bot]@users.noreply.github.com', 'username': 'dependabot[bot]'}, 'modified': ['requirements.txt']}], 'forced': False, 'ref_name': 'dependabot/pip/django-2.2.8', 'ref_type': 'heads', 'pusher': 'dependabot[bot]'}
2019-12-03T03:03:54.480389	{'type': 'gh_push', 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'base_ref_name': None, 'deleted': False, 'after_sha': '15fc71cfcf5f94221443aaff99ae559fa3cb4633', 'before_sha': '0f6304ad34bf7c7e826860280e92ac3dd616773f', 'created': False, 'commits': [{'message': 'Update VS projects/solutions to VS2019', 'hash': 'dd23a1ee79697805a9a70fa1faca56135337fbf0', 'distinct': True, 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/dd23a1ee79697805a9a70fa1faca56135337fbf0', 'added': [], 'author': {'name': 'Stenzek', 'email': 'stenzek@gmail.com', 'username': 'stenzek'}, 'modified': ['Externals/Bochs_disasm/Bochs_disasm.vcxproj', 'Externals/FreeSurround/FreeSurround.vcxproj', 'Externals/LZO/LZO.vcxproj', 'Externals/SFML/build/vc2010/SFML_Network.vcxproj', 'Externals/cpp-optparse/cpp-optparse.vcxproj', 'Externals/cubeb/msvc/cubeb.vcxproj', 'Externals/curl/curl.vcxproj', 'Externals/discord-rpc/src/discord-rpc.vcxproj', 'Externals/ed25519/ed25519.vcxproj', 'Externals/enet/enet.vcxproj', 'Externals/glslang/glslang.vcxproj', 'Externals/imgui/imgui.vcxproj', 'Externals/libpng/png/png.vcxproj', 'Externals/libusb/libusb_static_2013.vcxproj', 'Externals/mbedtls/mbedTLS.vcxproj', 'Externals/miniupnpc/miniupnpc.vcxproj', 'Externals/minizip/minizip.vcxproj', 'Externals/picojson/picojson.vcxproj', 'Externals/pugixml/pugixml.vcxproj', 'Externals/soundtouch/SoundTouch.vcxproj', 'Externals/xxhash/xxhash.vcxproj', 'Externals/zlib/zlib.vcxproj', 'Languages/Languages.vcxproj', 'Source/Core/AudioCommon/AudioCommon.vcxproj', 'Source/Core/Common/Common.vcxproj', 'Source/Core/Common/SCMRevGen.vcxproj', 'Source/Core/Core/Core.vcxproj', 'Source/Core/Core/Core.vcxproj.filters', 'Source/Core/DiscIO/DiscIO.vcxproj', 'Source/Core/DolphinQt/DolphinQt.vcxproj', 'Source/Core/InputCommon/InputCommon.vcxproj', 'Source/Core/UICommon/UICommon.vcxproj', 'Source/Core/UpdaterCommon/UpdaterCommon.vcxproj', 'Source/Core/VideoBackends/D3D/D3D.vcxproj', 'Source/Core/VideoBackends/D3D12/D3D12.vcxproj', 'Source/Core/VideoBackends/D3DCommon/D3DCommon.vcxproj', 'Source/Core/VideoBackends/Null/Null.vcxproj', 'Source/Core/VideoBackends/OGL/OGL.vcxproj', 'Source/Core/VideoBackends/Software/Software.vcxproj', 'Source/Core/VideoBackends/Vulkan/Vulkan.vcxproj', 'Source/Core/VideoCommon/VideoCommon.vcxproj', 'Source/Core/WinUpdater/WinUpdater.vcxproj', 'Source/DSPTool/DSPTool.vcxproj', 'Source/DSPTool/DSPTool.vcxproj.filters', 'Source/PCH/pch.vcxproj', 'Source/UnitTests/UnitTests.vcxproj']}, {'message': 'Update Readme.md to specify VS2019 as a requirement', 'hash': 'ffd38ab6e9c67e62c842c6712b3b15b4345bfe19', 'distinct': True, 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/ffd38ab6e9c67e62c842c6712b3b15b4345bfe19', 'added': [], 'author': {'name': 'Stenzek', 'email': 'stenzek@gmail.com', 'username': 'stenzek'}, 'modified': ['Readme.md']}, {'message': "Disable warning C5054 on DolphinQt\n\nThey're all in the Qt headers, and quite noisy.", 'hash': '33c0abd1ab1444a70af649d80174ab8436b08300', 'distinct': True, 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/33c0abd1ab1444a70af649d80174ab8436b08300', 'added': [], 'author': {'name': 'Stenzek', 'email': 'stenzek@gmail.com', 'username': 'stenzek'}, 'modified': ['Source/Core/DolphinQt/DolphinQt.vcxproj']}, {'message': 'Merge pull request #8498 from stenzek/update-vs2019\n\nUpdate VS projects/solutions to VS2019', 'hash': '15fc71cfcf5f94221443aaff99ae559fa3cb4633', 'distinct': True, 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/15fc71cfcf5f94221443aaff99ae559fa3cb4633', 'added': [], 'author': {'name': 'Connor McLaughlin', 'email': 'stenzek@gmail.com', 'username': 'stenzek'}, 'modified': ['Externals/Bochs_disasm/Bochs_disasm.vcxproj', 'Externals/FreeSurround/FreeSurround.vcxproj', 'Externals/LZO/LZO.vcxproj', 'Externals/SFML/build/vc2010/SFML_Network.vcxproj', 'Externals/cpp-optparse/cpp-optparse.vcxproj', 'Externals/cubeb/msvc/cubeb.vcxproj', 'Externals/curl/curl.vcxproj', 'Externals/discord-rpc/src/discord-rpc.vcxproj', 'Externals/ed25519/ed25519.vcxproj', 'Externals/enet/enet.vcxproj', 'Externals/glslang/glslang.vcxproj', 'Externals/imgui/imgui.vcxproj', 'Externals/libpng/png/png.vcxproj', 'Externals/libusb/libusb_static_2013.vcxproj', 'Externals/mbedtls/mbedTLS.vcxproj', 'Externals/miniupnpc/miniupnpc.vcxproj', 'Externals/minizip/minizip.vcxproj', 'Externals/picojson/picojson.vcxproj', 'Externals/pugixml/pugixml.vcxproj', 'Externals/soundtouch/SoundTouch.vcxproj', 'Externals/xxhash/xxhash.vcxproj', 'Externals/zlib/zlib.vcxproj', 'Languages/Languages.vcxproj', 'Readme.md', 'Source/Core/AudioCommon/AudioCommon.vcxproj', 'Source/Core/Common/Common.vcxproj', 'Source/Core/Common/SCMRevGen.vcxproj', 'Source/Core/Core/Core.vcxproj', 'Source/Core/Core/Core.vcxproj.filters', 'Source/Core/DiscIO/DiscIO.vcxproj', 'Source/Core/DolphinQt/DolphinQt.vcxproj', 'Source/Core/InputCommon/InputCommon.vcxproj', 'Source/Core/UICommon/UICommon.vcxproj', 'Source/Core/UpdaterCommon/UpdaterCommon.vcxproj', 'Source/Core/VideoBackends/D3D/D3D.vcxproj', 'Source/Core/VideoBackends/D3D12/D3D12.vcxproj', 'Source/Core/VideoBackends/D3DCommon/D3DCommon.vcxproj', 'Source/Core/VideoBackends/Null/Null.vcxproj', 'Source/Core/VideoBackends/OGL/OGL.vcxproj', 'Source/Core/VideoBackends/Software/Software.vcxproj', 'Source/Core/VideoBackends/Vulkan/Vulkan.vcxproj', 'Source/Core/VideoCommon/VideoCommon.vcxproj', 'Source/Core/WinUpdater/WinUpdater.vcxproj', 'Source/DSPTool/DSPTool.vcxproj', 'Source/DSPTool/DSPTool.vcxproj.filters', 'Source/PCH/pch.vcxproj', 'Source/UnitTests/UnitTests.vcxproj']}], 'forced': False, 'ref_name': 'master', 'ref_type': 'heads', 'pusher': 'stenzek'}
2019-11-30T12:14:30.537321	{'type': 'gh_push', 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'base_ref_name': None, 'deleted': False, 'after_sha': '0f6304ad34bf7c7e826860280e92ac3dd616773f', 'before_sha': 'ba8b5bea11596c6ed2cb710dd35796ae750f6bd7', 'created': False, 'commits': [{'message': 'Core: Only reset wiimotes in Wii mode\n\nThis was causing the FifoCI runners to crash, as the Wiimotes were not\ninitialized in the first place.', 'hash': '52e2e321932e514d3cae07834bd25ce651f35974', 'distinct': True, 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/52e2e321932e514d3cae07834bd25ce651f35974', 'added': [], 'author': {'name': 'Stenzek', 'email': 'stenzek@gmail.com', 'username': 'stenzek'}, 'modified': ['Source/Core/Core/Core.cpp']}, {'message': 'Merge pull request #8504 from stenzek/fifoci-wiimote-crash\n\nCore: Only reset wiimotes in Wii mode', 'hash': '0f6304ad34bf7c7e826860280e92ac3dd616773f', 'distinct': True, 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/0f6304ad34bf7c7e826860280e92ac3dd616773f', 'added': [], 'author': {'name': 'Connor McLaughlin', 'email': 'stenzek@gmail.com', 'username': 'stenzek'}, 'modified': ['Source/Core/Core/Core.cpp']}], 'forced': False, 'ref_name': 'master', 'ref_type': 'heads', 'pusher': 'stenzek'}
2019-11-30T04:14:52.315811	{'type': 'gh_push', 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'base_ref_name': None, 'deleted': False, 'after_sha': 'ba8b5bea11596c6ed2cb710dd35796ae750f6bd7', 'before_sha': '4a0611df5472ea58af2f7960c8fc91db56c68d5f', 'created': False, 'commits': [{'message': 'Always run as X11 app even under Wayland', 'hash': '75a06664c90eed3d0cb3724c74254d5bdfb2e81a', 'distinct': True, 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/75a06664c90eed3d0cb3724c74254d5bdfb2e81a', 'added': [], 'author': {'name': 'KAMiKAZOW', 'email': 'kamikazow@web.de', 'username': 'KAMiKAZOW'}, 'modified': ['Data/dolphin-emu.desktop']}, {'message': 'Merge pull request #8357 from KAMiKAZOW/patch-1\n\nAlways run as X11 app even under Wayland', 'hash': 'ba8b5bea11596c6ed2cb710dd35796ae750f6bd7', 'distinct': True, 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/ba8b5bea11596c6ed2cb710dd35796ae750f6bd7', 'added': [], 'author': {'name': 'Connor McLaughlin', 'email': 'stenzek@gmail.com', 'username': 'stenzek'}, 'modified': ['Data/dolphin-emu.desktop']}], 'forced': False, 'ref_name': 'master', 'ref_type': 'heads', 'pusher': 'stenzek'}
2019-11-28T23:03:25.188635	{'type': 'gh_push', 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'base_ref_name': None, 'deleted': False, 'after_sha': '4a0611df5472ea58af2f7960c8fc91db56c68d5f', 'before_sha': 'b5656df7e8c397474a00e7f64822e56bcdf826b6', 'created': False, 'commits': [{'message': 'VideoCommon: Make use of fmt outside of shader generators\n\nMigrates most of VideoCommon over to using fmt, with the exception being\nthe shader generator code. The shader generators are quite large and\nhave more corner cases to deal with in terms of conversion (shaders have\nbraces in them, so we need to make sure to escape them).\n\nBecause of the large amount of code that would need to be converted, the\nconversion of VideoCommon will be in two parts:\n\n- This change (which converts over the general case string formatting),\n- A follow up change that will specifically deal with converting over\n  the shader generators.', 'hash': '6fbbc2683eeedf3767ea3d741c62555a30d3ff45', 'distinct': True, 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/6fbbc2683eeedf3767ea3d741c62555a30d3ff45', 'added': [], 'author': {'name': 'Lioncash', 'email': 'mathew1800@gmail.com', 'username': 'lioncash'}, 'modified': ['Source/Core/VideoCommon/BPStructs.cpp', 'Source/Core/VideoCommon/CMakeLists.txt', 'Source/Core/VideoCommon/FrameDump.cpp', 'Source/Core/VideoCommon/HiresTextures.cpp', 'Source/Core/VideoCommon/NetPlayGolfUI.cpp', 'Source/Core/VideoCommon/OnScreenDisplay.cpp', 'Source/Core/VideoCommon/PostProcessing.cpp', 'Source/Core/VideoCommon/RenderBase.cpp', 'Source/Core/VideoCommon/ShaderGenCommon.cpp', 'Source/Core/VideoCommon/TextureCacheBase.cpp', 'Source/Core/VideoCommon/UberShaderCommon.h', 'Source/Core/VideoCommon/VertexLoaderBase.cpp']}, {'message': 'Merge pull request #8487 from lioncash/video-fmt\n\nVideoCommon: Make use of fmt outside of shader generators', 'hash': '4a0611df5472ea58af2f7960c8fc91db56c68d5f', 'distinct': True, 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/4a0611df5472ea58af2f7960c8fc91db56c68d5f', 'added': [], 'author': {'name': 'Anthony', 'email': 'Helios747@users.noreply.github.com', 'username': 'Helios747'}, 'modified': ['Source/Core/VideoCommon/BPStructs.cpp', 'Source/Core/VideoCommon/CMakeLists.txt', 'Source/Core/VideoCommon/FrameDump.cpp', 'Source/Core/VideoCommon/HiresTextures.cpp', 'Source/Core/VideoCommon/NetPlayGolfUI.cpp', 'Source/Core/VideoCommon/OnScreenDisplay.cpp', 'Source/Core/VideoCommon/PostProcessing.cpp', 'Source/Core/VideoCommon/RenderBase.cpp', 'Source/Core/VideoCommon/ShaderGenCommon.cpp', 'Source/Core/VideoCommon/TextureCacheBase.cpp', 'Source/Core/VideoCommon/UberShaderCommon.h', 'Source/Core/VideoCommon/VertexLoaderBase.cpp']}], 'forced': False, 'ref_name': 'master', 'ref_type': 'heads', 'pusher': 'Helios747'}
2019-11-28T23:01:51.921856	{'type': 'gh_push', 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'base_ref_name': None, 'deleted': False, 'after_sha': 'b5656df7e8c397474a00e7f64822e56bcdf826b6', 'before_sha': 'd9847fc249a3ba4da8d5eef3fce80fddaf9368b1', 'created': False, 'commits': [{'message': 'Common: Unify logging namespace with Common\n\nPreviously the logging was a in a little bit of a disarray. Some things\nwere in namespaces, and other things were not.\n\nGiven this code will feature a bit of restructuring during the\ntransition over to fmt, this is a good time to unify it under a single\nnamespace and also remove functions and types from the global namespace.\n\nNow, all functions and types are under the Common::Log namespace. The\nonly outliers being, of course, the preprocessor macros.', 'hash': 'c792961000a6bc8fa33dabdf42d07a25e44e8662', 'distinct': True, 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/c792961000a6bc8fa33dabdf42d07a25e44e8662', 'added': [], 'author': {'name': 'Lioncash', 'email': 'mathew1800@gmail.com', 'username': 'lioncash'}, 'modified': ['Source/Core/AudioCommon/CubebUtils.cpp', 'Source/Core/Common/Assert.h', 'Source/Core/Common/Logging/ConsoleListener.h', 'Source/Core/Common/Logging/ConsoleListenerDroid.cpp', 'Source/Core/Common/Logging/ConsoleListenerNix.cpp', 'Source/Core/Common/Logging/ConsoleListenerWin.cpp', 'Source/Core/Common/Logging/Log.h', 'Source/Core/Common/Logging/LogManager.cpp', 'Source/Core/Common/Logging/LogManager.h', 'Source/Core/Core/ActionReplay.cpp', 'Source/Core/Core/Debugger/Debugger_SymbolMap.cpp', 'Source/Core/Core/Debugger/Debugger_SymbolMap.h', 'Source/Core/Core/HW/DVD/FileMonitor.cpp', 'Source/Core/Core/HW/SI/SI_DeviceGBA.cpp', 'Source/Core/Core/IOS/DI/DI.cpp', 'Source/Core/Core/IOS/Device.cpp', 'Source/Core/Core/IOS/Device.h', 'Source/Core/Core/IOS/ES/ES.cpp', 'Source/Core/Core/IOS/FS/FileSystemProxy.cpp', 'Source/Core/Core/IOS/Network/IP/Top.cpp', 'Source/Core/Core/IOS/Network/KD/NetKDRequest.cpp', 'Source/Core/Core/IOS/Network/KD/NetKDTime.cpp', 'Source/Core/Core/IOS/Network/SSL.cpp', 'Source/Core/Core/IOS/Network/Socket.cpp', 'Source/Core/Core/IOS/Network/WD/Command.cpp', 'Source/Core/Core/IOS/STM/STM.cpp', 'Source/Core/Core/IOS/USB/Bluetooth/BTEmu.cpp', 'Source/Core/Core/IOS/USB/Bluetooth/WiimoteDevice.cpp', 'Source/Core/Core/IOS/USB/OH0/OH0.cpp', 'Source/Core/Core/IOS/USB/USB_HID/HIDv4.cpp', 'Source/Core/Core/IOS/USB/USB_HID/HIDv5.cpp', 'Source/Core/Core/IOS/USB/USB_VEN/VEN.cpp', 'Source/Core/Core/IOS/WFS/WFSI.cpp', 'Source/Core/Core/IOS/WFS/WFSSRV.cpp', 'Source/Core/DolphinQt/Config/LogConfigWidget.cpp', 'Source/Core/DolphinQt/Config/LogWidget.cpp', 'Source/Core/DolphinQt/Config/LogWidget.h', 'Source/Core/UICommon/UICommon.cpp', 'Source/Core/VideoBackends/OGL/Render.cpp', 'Source/Core/VideoBackends/Vulkan/VulkanContext.cpp', 'Source/Core/VideoBackends/Vulkan/VulkanLoader.cpp', 'Source/Core/VideoBackends/Vulkan/main.cpp']}, {'message': 'Merge pull request #8502 from lioncash/log\n\nCommon: Unify logging namespace with Common', 'hash': 'b5656df7e8c397474a00e7f64822e56bcdf826b6', 'distinct': True, 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/b5656df7e8c397474a00e7f64822e56bcdf826b6', 'added': [], 'author': {'name': 'Anthony', 'email': 'Helios747@users.noreply.github.com', 'username': 'Helios747'}, 'modified': ['Source/Core/AudioCommon/CubebUtils.cpp', 'Source/Core/Common/Assert.h', 'Source/Core/Common/Logging/ConsoleListener.h', 'Source/Core/Common/Logging/ConsoleListenerDroid.cpp', 'Source/Core/Common/Logging/ConsoleListenerNix.cpp', 'Source/Core/Common/Logging/ConsoleListenerWin.cpp', 'Source/Core/Common/Logging/Log.h', 'Source/Core/Common/Logging/LogManager.cpp', 'Source/Core/Common/Logging/LogManager.h', 'Source/Core/Core/ActionReplay.cpp', 'Source/Core/Core/Debugger/Debugger_SymbolMap.cpp', 'Source/Core/Core/Debugger/Debugger_SymbolMap.h', 'Source/Core/Core/HW/DVD/FileMonitor.cpp', 'Source/Core/Core/HW/SI/SI_DeviceGBA.cpp', 'Source/Core/Core/IOS/DI/DI.cpp', 'Source/Core/Core/IOS/Device.cpp', 'Source/Core/Core/IOS/Device.h', 'Source/Core/Core/IOS/ES/ES.cpp', 'Source/Core/Core/IOS/FS/FileSystemProxy.cpp', 'Source/Core/Core/IOS/Network/IP/Top.cpp', 'Source/Core/Core/IOS/Network/KD/NetKDRequest.cpp', 'Source/Core/Core/IOS/Network/KD/NetKDTime.cpp', 'Source/Core/Core/IOS/Network/SSL.cpp', 'Source/Core/Core/IOS/Network/Socket.cpp', 'Source/Core/Core/IOS/Network/WD/Command.cpp', 'Source/Core/Core/IOS/STM/STM.cpp', 'Source/Core/Core/IOS/USB/Bluetooth/BTEmu.cpp', 'Source/Core/Core/IOS/USB/Bluetooth/WiimoteDevice.cpp', 'Source/Core/Core/IOS/USB/OH0/OH0.cpp', 'Source/Core/Core/IOS/USB/USB_HID/HIDv4.cpp', 'Source/Core/Core/IOS/USB/USB_HID/HIDv5.cpp', 'Source/Core/Core/IOS/USB/USB_VEN/VEN.cpp', 'Source/Core/Core/IOS/WFS/WFSI.cpp', 'Source/Core/Core/IOS/WFS/WFSSRV.cpp', 'Source/Core/DolphinQt/Config/LogConfigWidget.cpp', 'Source/Core/DolphinQt/Config/LogWidget.cpp', 'Source/Core/DolphinQt/Config/LogWidget.h', 'Source/Core/UICommon/UICommon.cpp', 'Source/Core/VideoBackends/OGL/Render.cpp', 'Source/Core/VideoBackends/Vulkan/VulkanContext.cpp', 'Source/Core/VideoBackends/Vulkan/VulkanLoader.cpp', 'Source/Core/VideoBackends/Vulkan/main.cpp']}], 'forced': False, 'ref_name': 'master', 'ref_type': 'heads', 'pusher': 'Helios747'}
2019-11-28T22:58:59.364677	{'type': 'gh_push', 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'base_ref_name': None, 'deleted': False, 'after_sha': 'd9847fc249a3ba4da8d5eef3fce80fddaf9368b1', 'before_sha': 'b793ee6521b7451fc1e9185e46d66c8af9496de5', 'created': False, 'commits': [{'message': 'InputCommon: Decouple ButtonManager and Touchscreen from Android\nChanges were also made for codestyle compliance.', 'hash': 'ef32a10d6916785ae514982a9d2962145367bc99', 'distinct': True, 'removed': ['Source/Android/jni/ButtonManager.cpp', 'Source/Android/jni/ButtonManager.h'], 'url': 'https://github.com/dolphin-emu/dolphin/commit/ef32a10d6916785ae514982a9d2962145367bc99', 'added': ['Source/Core/InputCommon/ControllerInterface/Touch/ButtonManager.cpp', 'Source/Core/InputCommon/ControllerInterface/Touch/ButtonManager.h', 'Source/Core/InputCommon/ControllerInterface/Touch/Touchscreen.cpp', 'Source/Core/InputCommon/ControllerInterface/Touch/Touchscreen.h'], 'author': {'name': 'OatmealDome', 'email': 'julian@oatmealdome.me', 'username': 'OatmealDome'}, 'modified': ['Source/Android/jni/CMakeLists.txt', 'Source/Android/jni/MainAndroid.cpp', 'Source/Core/InputCommon/CMakeLists.txt', 'Source/Core/InputCommon/ControllerInterface/Android/Android.cpp', 'Source/Core/InputCommon/ControllerInterface/Android/Android.h']}, {'message': 'Merge pull request #8497 from OatmealDome/touchscreen-decoupling\n\nInputCommon: Decouple ButtonManager and Touchscreen from Android', 'hash': 'd9847fc249a3ba4da8d5eef3fce80fddaf9368b1', 'distinct': True, 'removed': ['Source/Android/jni/ButtonManager.cpp', 'Source/Android/jni/ButtonManager.h'], 'url': 'https://github.com/dolphin-emu/dolphin/commit/d9847fc249a3ba4da8d5eef3fce80fddaf9368b1', 'added': ['Source/Core/InputCommon/ControllerInterface/Touch/ButtonManager.cpp', 'Source/Core/InputCommon/ControllerInterface/Touch/ButtonManager.h', 'Source/Core/InputCommon/ControllerInterface/Touch/Touchscreen.cpp', 'Source/Core/InputCommon/ControllerInterface/Touch/Touchscreen.h'], 'author': {'name': 'Anthony', 'email': 'Helios747@users.noreply.github.com', 'username': 'Helios747'}, 'modified': ['Source/Android/jni/CMakeLists.txt', 'Source/Android/jni/MainAndroid.cpp', 'Source/Core/InputCommon/CMakeLists.txt', 'Source/Core/InputCommon/ControllerInterface/Android/Android.cpp', 'Source/Core/InputCommon/ControllerInterface/Android/Android.h']}], 'forced': False, 'ref_name': 'master', 'ref_type': 'heads', 'pusher': 'Helios747'}
2019-11-28T12:45:31.149617	{'type': 'gh_push', 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'base_ref_name': None, 'deleted': False, 'after_sha': 'b793ee6521b7451fc1e9185e46d66c8af9496de5', 'before_sha': 'c2c8a14966dcea8d86a5ea5bb2eeb0f694002425', 'created': False, 'commits': [{'message': 'Translation resources sync with Transifex', 'hash': 'b793ee6521b7451fc1e9185e46d66c8af9496de5', 'distinct': True, 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/b793ee6521b7451fc1e9185e46d66c8af9496de5', 'added': [], 'author': {'name': 'JosJuice', 'email': 'josjuice@gmail.com', 'username': 'JosJuice'}, 'modified': ['Languages/po/ar.po', 'Languages/po/ca.po', 'Languages/po/cs.po', 'Languages/po/da.po', 'Languages/po/de.po', 'Languages/po/dolphin-emu.pot', 'Languages/po/el.po', 'Languages/po/en.po', 'Languages/po/es.po', 'Languages/po/fa.po', 'Languages/po/fr.po', 'Languages/po/hr.po', 'Languages/po/hu.po', 'Languages/po/it.po', 'Languages/po/ja.po', 'Languages/po/ko.po', 'Languages/po/ms.po', 'Languages/po/nb.po', 'Languages/po/nl.po', 'Languages/po/pl.po', 'Languages/po/pt.po', 'Languages/po/pt_BR.po', 'Languages/po/ro.po', 'Languages/po/ru.po', 'Languages/po/sr.po', 'Languages/po/sv.po', 'Languages/po/tr.po', 'Languages/po/zh_CN.po', 'Languages/po/zh_TW.po']}], 'forced': False, 'ref_name': 'master', 'ref_type': 'heads', 'pusher': 'JosJuice'}
2019-11-28T00:04:43.324187	{'type': 'gh_push', 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'base_ref_name': None, 'deleted': False, 'after_sha': 'c2c8a14966dcea8d86a5ea5bb2eeb0f694002425', 'before_sha': '9822a2d582136acc1ae10fcc33472d0128b2168d', 'created': False, 'commits': [{'message': 'Disable full MMU by default and add it to global config GUI\n\nRequested by JMC.', 'hash': '9e0b09ddf4400e6bfb08963a2e5ac1c697eb94f0', 'distinct': True, 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/9e0b09ddf4400e6bfb08963a2e5ac1c697eb94f0', 'added': [], 'author': {'name': 'JosJuice', 'email': 'josjuice@gmail.com', 'username': 'JosJuice'}, 'modified': ['Source/Core/Core/ConfigManager.cpp', 'Source/Core/DolphinQt/Settings/AdvancedPane.cpp', 'Source/Core/DolphinQt/Settings/AdvancedPane.h']}, {'message': 'Merge pull request #8348 from JosJuice/mmu-setting\n\nDisable full MMU by default and add it to global config GUI', 'hash': 'c2c8a14966dcea8d86a5ea5bb2eeb0f694002425', 'distinct': True, 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/c2c8a14966dcea8d86a5ea5bb2eeb0f694002425', 'added': [], 'author': {'name': 'Anthony', 'email': 'Helios747@users.noreply.github.com', 'username': 'Helios747'}, 'modified': ['Source/Core/Core/ConfigManager.cpp', 'Source/Core/DolphinQt/Settings/AdvancedPane.cpp', 'Source/Core/DolphinQt/Settings/AdvancedPane.h']}], 'forced': False, 'ref_name': 'master', 'ref_type': 'heads', 'pusher': 'Helios747'}
2019-11-28T00:03:47.080370	{'type': 'gh_push', 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'base_ref_name': None, 'deleted': False, 'after_sha': '9822a2d582136acc1ae10fcc33472d0128b2168d', 'before_sha': '66ca83e6af394b9c9a53f4e292b3cd3c06e97f03', 'created': False, 'commits': [{'message': 'D3DCommon: Migrate few remaining raw pointers to WRL::ComPtr', 'hash': '8445644e0561469f9216b388ffcc6a8839215095', 'distinct': True, 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/8445644e0561469f9216b388ffcc6a8839215095', 'added': [], 'author': {'name': 'Silent', 'email': 'zdanio95@gmail.com', 'username': 'CookiePLMonster'}, 'modified': ['Source/Core/VideoBackends/D3DCommon/Common.cpp', 'Source/Core/VideoBackends/D3DCommon/Common.h']}, {'message': 'D3DCommon: Remove unused GetDebugObjectName and tidy up SetDebugObjectName', 'hash': 'a68789a70c181a3ce424c6b9504678c7bf3624f6', 'distinct': True, 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/a68789a70c181a3ce424c6b9504678c7bf3624f6', 'added': [], 'author': {'name': 'Silent', 'email': 'zdanio95@gmail.com', 'username': 'CookiePLMonster'}, 'modified': ['Source/Core/VideoBackends/D3DCommon/Common.cpp', 'Source/Core/VideoBackends/D3DCommon/Common.h']}, {'message': 'Merge pull request #8465 from CookiePLMonster/d3d-common-cleanup\n\nD3DCommon: Cleanups and resource leak fix', 'hash': '9822a2d582136acc1ae10fcc33472d0128b2168d', 'distinct': True, 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/9822a2d582136acc1ae10fcc33472d0128b2168d', 'added': [], 'author': {'name': 'Anthony', 'email': 'Helios747@users.noreply.github.com', 'username': 'Helios747'}, 'modified': ['Source/Core/VideoBackends/D3DCommon/Common.cpp', 'Source/Core/VideoBackends/D3DCommon/Common.h']}], 'forced': False, 'ref_name': 'master', 'ref_type': 'heads', 'pusher': 'Helios747'}
2019-11-27T23:57:56.822585	{'type': 'gh_push', 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'base_ref_name': None, 'deleted': False, 'after_sha': '66ca83e6af394b9c9a53f4e292b3cd3c06e97f03', 'before_sha': '41563aed21a26c7147f99a993d5de95e0a96c6e7', 'created': False, 'commits': [{'message': 'Fixed 11874 (leading 0s ignored by debugger)', 'hash': '5b6e7aabcff8e96872bfbb9206cd251697fbddb1', 'distinct': True, 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/5b6e7aabcff8e96872bfbb9206cd251697fbddb1', 'added': [], 'author': {'name': 'Matthew Foulds', 'email': 'nokturnusmf@gmail.com', 'username': 'nokturnusmf'}, 'modified': ['Source/Core/DolphinQt/Debugger/MemoryViewWidget.cpp', 'Source/Core/DolphinQt/Debugger/MemoryWidget.cpp']}, {'message': 'Merge pull request #8479 from nokturnusmf/master\n\nFixed #11874 (leading 0s ignored by debugger)', 'hash': '66ca83e6af394b9c9a53f4e292b3cd3c06e97f03', 'distinct': True, 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/66ca83e6af394b9c9a53f4e292b3cd3c06e97f03', 'added': [], 'author': {'name': 'Anthony', 'email': 'Helios747@users.noreply.github.com', 'username': 'Helios747'}, 'modified': ['Source/Core/DolphinQt/Debugger/MemoryViewWidget.cpp', 'Source/Core/DolphinQt/Debugger/MemoryWidget.cpp']}], 'forced': False, 'ref_name': 'master', 'ref_type': 'heads', 'pusher': 'Helios747'}
2019-11-27T23:53:10.199138	{'type': 'gh_push', 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'base_ref_name': None, 'deleted': False, 'after_sha': '41563aed21a26c7147f99a993d5de95e0a96c6e7', 'before_sha': '155016531fb970f45d46a97b4397d9990e2b494e', 'created': False, 'commits': [{'message': 'Android: Fix crash on enabling GC adapter\n\nWe must set Java_GCAdapter.manager before the GC adapter thread (C++)\nstarts. We used to set it at emulation start, which was fine until\n9f3f45a made the GC adapter thread start much earlier.', 'hash': '6e0130351ed38c9cd4e7034812f59714cdd1fd71', 'distinct': True, 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/6e0130351ed38c9cd4e7034812f59714cdd1fd71', 'added': [], 'author': {'name': 'JosJuice', 'email': 'josjuice@gmail.com', 'username': 'JosJuice'}, 'modified': ['Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/DolphinApplication.java', 'Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/activities/EmulationActivity.java']}, {'message': 'Merge pull request #8491 from JosJuice/android-gc-adapter-crash\n\nAndroid: Fix crash on enabling GC adapter', 'hash': '41563aed21a26c7147f99a993d5de95e0a96c6e7', 'distinct': True, 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/41563aed21a26c7147f99a993d5de95e0a96c6e7', 'added': [], 'author': {'name': 'Anthony', 'email': 'Helios747@users.noreply.github.com', 'username': 'Helios747'}, 'modified': ['Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/DolphinApplication.java', 'Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/activities/EmulationActivity.java']}], 'forced': False, 'ref_name': 'master', 'ref_type': 'heads', 'pusher': 'Helios747'}
2019-11-27T23:40:45.959577	{'type': 'gh_push', 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'base_ref_name': None, 'deleted': False, 'after_sha': '155016531fb970f45d46a97b4397d9990e2b494e', 'before_sha': '34a1df1c68ba76cdc5aea2dfabb68e1850dd9662', 'created': False, 'commits': [{'message': 'Android: Native motion controls', 'hash': 'b143df91be5c7f18a61666baa4a5b673d2cfd2cd', 'distinct': True, 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/b143df91be5c7f18a61666baa4a5b673d2cfd2cd', 'added': ['Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/MotionListener.java'], 'author': {'name': 'JosJuice', 'email': 'josjuice@gmail.com', 'username': 'JosJuice'}, 'modified': ['Source/Android/app/src/main/AndroidManifest.xml', 'Source/Android/app/src/main/assets/WiimoteNew.ini', 'Source/Android/app/src/main/assets/WiimoteProfile.ini', 'Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/NativeLibrary.java', 'Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/activities/EmulationActivity.java', 'Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/DirectoryInitialization.java', 'Source/Android/jni/ButtonManager.cpp', 'Source/Android/jni/ButtonManager.h', 'Source/Core/InputCommon/ControllerInterface/Android/Android.cpp']}, {'message': "Android: Fix the whammy bar for emulated guitar controllers\n\nNot that this has much relation to the rest of the PR, but it's an\neasy fix that we might as well throw in while we're already\noverwriting everyone's WiimoteNew.ini.", 'hash': '033eeda43bd910d6402b54d8cd967bd266bb4542', 'distinct': True, 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/033eeda43bd910d6402b54d8cd967bd266bb4542', 'added': [], 'author': {'name': 'JosJuice', 'email': 'josjuice@gmail.com', 'username': 'JosJuice'}, 'modified': ['Source/Android/app/src/main/assets/WiimoteNew.ini', 'Source/Android/app/src/main/assets/WiimoteProfile.ini']}, {'message': 'Android: Make "Horizontal Wii Remote" flip the motion controls\n\nBefore, it only flipped the d-pad (and arranged the overlay buttons\ndifferently).', 'hash': '455790138243a0bb53b298cba7626bd1e1d529df', 'distinct': True, 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/455790138243a0bb53b298cba7626bd1e1d529df', 'added': [], 'author': {'name': 'JosJuice', 'email': 'josjuice@gmail.com', 'username': 'JosJuice'}, 'modified': ['Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/activities/EmulationActivity.java', 'Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/overlay/InputOverlay.java']}, {'message': 'Android: Adjust accel/gyro data for screen orientation', 'hash': 'a548489aaf6a0e30a478b473334b7cfa2e22b2f4', 'distinct': True, 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/a548489aaf6a0e30a478b473334b7cfa2e22b2f4', 'added': [], 'author': {'name': 'JosJuice', 'email': 'josjuice@gmail.com', 'username': 'JosJuice'}, 'modified': ['Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/MotionListener.java']}, {'message': "Android: Overhaul the orientation lock setting\n\nWhen using motion controls, it's useful to be able to lock the screen\nto a certain orientation so that Android won't interpret game motions\nas an intent to change the screen orientation. To this end, I've\nchanged the existing orientation lock setting in the following ways:\n\n- A portrait lock mode has been added in addition to the existing\n  landscape lock mode and unlocked mode.\n- The landscape lock mode now locks to regular landscape rather than\n  letting you change between the two possible landscape orientations.\n- The setting is now accessed during emulation rather than outside.", 'hash': '4d838212e2622f623a7f864163396a6a9634e47f', 'distinct': True, 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/4d838212e2622f623a7f864163396a6a9634e47f', 'added': [], 'author': {'name': 'JosJuice', 'email': 'josjuice@gmail.com', 'username': 'JosJuice'}, 'modified': ['Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/activities/EmulationActivity.java', 'Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragmentPresenter.java', 'Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/utils/SettingsFile.java', 'Source/Android/app/src/main/res/menu/menu_emulation.xml', 'Source/Android/app/src/main/res/menu/menu_emulation_wii.xml', 'Source/Android/app/src/main/res/values/arrays.xml', 'Source/Android/app/src/main/res/values/strings.xml']}, {'message': 'Android: Let WiimoteEmu know whether we have accelerometer/gyroscope', 'hash': 'c8b8a60033bb35917c10eeb5c4043ee428ae61a6', 'distinct': True, 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/c8b8a60033bb35917c10eeb5c4043ee428ae61a6', 'added': [], 'author': {'name': 'JosJuice', 'email': 'josjuice@gmail.com', 'username': 'JosJuice'}, 'modified': ['Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/NativeLibrary.java', 'Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/MotionListener.java', 'Source/Android/jni/MainAndroid.cpp', 'Source/Core/InputCommon/ControllerInterface/Android/Android.cpp', 'Source/Core/InputCommon/ControllerInterface/Android/Android.h']}, {'message': 'Android: Add an option for disabling native motion controls', 'hash': '2d4a3f4597f14b2563fac7acf080b91fa4bac5e8', 'distinct': True, 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/2d4a3f4597f14b2563fac7acf080b91fa4bac5e8', 'added': [], 'author': {'name': 'JosJuice', 'email': 'josjuice@gmail.com', 'username': 'JosJuice'}, 'modified': ['Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/activities/EmulationActivity.java', 'Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/MotionListener.java', 'Source/Android/app/src/main/res/menu/menu_emulation_wii.xml', 'Source/Android/app/src/main/res/values/arrays.xml', 'Source/Android/app/src/main/res/values/strings.xml']}, {'message': 'Merge pull request #8439 from JosJuice/android-native-motion-controls\n\nAndroid: Native motion controls', 'hash': '155016531fb970f45d46a97b4397d9990e2b494e', 'distinct': True, 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/155016531fb970f45d46a97b4397d9990e2b494e', 'added': ['Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/MotionListener.java'], 'author': {'name': 'Anthony', 'email': 'Helios747@users.noreply.github.com', 'username': 'Helios747'}, 'modified': ['Source/Android/app/src/main/AndroidManifest.xml', 'Source/Android/app/src/main/assets/WiimoteNew.ini', 'Source/Android/app/src/main/assets/WiimoteProfile.ini', 'Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/NativeLibrary.java', 'Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/activities/EmulationActivity.java', 'Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragmentPresenter.java', 'Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/utils/SettingsFile.java', 'Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/overlay/InputOverlay.java', 'Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/DirectoryInitialization.java', 'Source/Android/app/src/main/res/menu/menu_emulation.xml', 'Source/Android/app/src/main/res/menu/menu_emulation_wii.xml', 'Source/Android/app/src/main/res/values/arrays.xml', 'Source/Android/app/src/main/res/values/strings.xml', 'Source/Android/jni/ButtonManager.cpp', 'Source/Android/jni/ButtonManager.h', 'Source/Android/jni/MainAndroid.cpp', 'Source/Core/InputCommon/ControllerInterface/Android/Android.cpp', 'Source/Core/InputCommon/ControllerInterface/Android/Android.h']}], 'forced': False, 'ref_name': 'master', 'ref_type': 'heads', 'pusher': 'Helios747'}
2019-11-27T23:36:56.892433	{'type': 'gh_push', 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'base_ref_name': None, 'deleted': False, 'after_sha': '34a1df1c68ba76cdc5aea2dfabb68e1850dd9662', 'before_sha': '8d814baf79cb657894efdcdab74c6367c7ad2a31', 'created': False, 'commits': [{'message': 'Android: Add audio volume setting', 'hash': 'cf8208ace91a3cf389c214cf3d03c377133d968a', 'distinct': True, 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/cf8208ace91a3cf389c214cf3d03c377133d968a', 'added': [], 'author': {'name': 'JosJuice', 'email': 'josjuice@gmail.com', 'username': 'JosJuice'}, 'modified': ['Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/Settings.java', 'Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragmentPresenter.java', 'Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/utils/SettingsFile.java', 'Source/Android/app/src/main/res/values/strings.xml', 'Source/Core/AudioCommon/OpenSLESStream.cpp', 'Source/Core/AudioCommon/OpenSLESStream.h']}, {'message': 'Merge pull request #8493 from JosJuice/android-audio-volume\n\nAndroid: Add audio volume setting', 'hash': '34a1df1c68ba76cdc5aea2dfabb68e1850dd9662', 'distinct': True, 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/34a1df1c68ba76cdc5aea2dfabb68e1850dd9662', 'added': [], 'author': {'name': 'Anthony', 'email': 'Helios747@users.noreply.github.com', 'username': 'Helios747'}, 'modified': ['Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/Settings.java', 'Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragmentPresenter.java', 'Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/utils/SettingsFile.java', 'Source/Android/app/src/main/res/values/strings.xml', 'Source/Core/AudioCommon/OpenSLESStream.cpp', 'Source/Core/AudioCommon/OpenSLESStream.h']}], 'forced': False, 'ref_name': 'master', 'ref_type': 'heads', 'pusher': 'Helios747'}
2019-11-27T23:35:31.435315	{'type': 'gh_push', 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'base_ref_name': None, 'deleted': False, 'after_sha': '8d814baf79cb657894efdcdab74c6367c7ad2a31', 'before_sha': 'e33acc07f9b98b863f70483bac491f2d85601b4a', 'created': False, 'commits': [{'message': 'Android: Fix displaying checkbox settings with no description\n\nhttps://bugs.dolphin-emu.org/issues/11904', 'hash': '83397939180d4a4cb30c74274d6453f9affb394f', 'distinct': True, 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/83397939180d4a4cb30c74274d6453f9affb394f', 'added': [], 'author': {'name': 'JosJuice', 'email': 'josjuice@gmail.com', 'username': 'JosJuice'}, 'modified': ['Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/viewholder/CheckBoxSettingViewHolder.java']}, {'message': 'Merge pull request #8494 from JosJuice/android-checkbox-no-description\n\nAndroid: Fix displaying checkbox settings with no description', 'hash': '8d814baf79cb657894efdcdab74c6367c7ad2a31', 'distinct': True, 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/8d814baf79cb657894efdcdab74c6367c7ad2a31', 'added': [], 'author': {'name': 'Anthony', 'email': 'Helios747@users.noreply.github.com', 'username': 'Helios747'}, 'modified': ['Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/viewholder/CheckBoxSettingViewHolder.java']}], 'forced': False, 'ref_name': 'master', 'ref_type': 'heads', 'pusher': 'Helios747'}
2019-11-27T23:34:36.519280	{'type': 'gh_push', 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'base_ref_name': None, 'deleted': False, 'after_sha': 'e33acc07f9b98b863f70483bac491f2d85601b4a', 'before_sha': '44f85bbc5e5f6aef30fa6eaf1b88415061282980', 'created': False, 'commits': [{'message': 'DSPLLE: Put DSP thread in idle state if it\'s paused to prevent a deadlock\n\nDSP thread is considered "idle" when it signals s_ppc_event and waits for s_dsp_event,\nwithout putting it in this state when m_dsp_thread_mutex is locked it was possible to\ncreate a deadlock between a DSP thread, emulation thread and Qt thread by accessing\nConfig menu immediately after booting up the game', 'hash': 'e30ff7c327ff64d3a226476a0fd7165abc6e7937', 'distinct': True, 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/e30ff7c327ff64d3a226476a0fd7165abc6e7937', 'added': [], 'author': {'name': 'Silent', 'email': 'zdanio95@gmail.com', 'username': 'CookiePLMonster'}, 'modified': ['Source/Core/Core/HW/DSPLLE/DSPLLE.cpp']}, {'message': 'Signal DSP thread after unlocking DSP mutex', 'hash': '5be9505ab387315585e407af9fb9a589ece6d688', 'distinct': True, 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/5be9505ab387315585e407af9fb9a589ece6d688', 'added': [], 'author': {'name': 'Silent', 'email': 'zdanio95@gmail.com', 'username': 'CookiePLMonster'}, 'modified': ['Source/Core/Core/HW/DSPLLE/DSPLLE.cpp']}, {'message': "Merge pull request #8332 from CookiePLMonster/dsp-lle-deadlock\n\nDSPLLE: Put DSP thread in idle state when it's paused", 'hash': 'e33acc07f9b98b863f70483bac491f2d85601b4a', 'distinct': True, 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/e33acc07f9b98b863f70483bac491f2d85601b4a', 'added': [], 'author': {'name': 'Anthony', 'email': 'Helios747@users.noreply.github.com', 'username': 'Helios747'}, 'modified': ['Source/Core/Core/HW/DSPLLE/DSPLLE.cpp']}], 'forced': False, 'ref_name': 'master', 'ref_type': 'heads', 'pusher': 'Helios747'}
2019-11-27T23:33:45.842180	{'type': 'gh_push', 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'base_ref_name': None, 'deleted': False, 'after_sha': '44f85bbc5e5f6aef30fa6eaf1b88415061282980', 'before_sha': 'f20c1c2f8ddd6c32e751dd39a6182572712c4af0', 'created': False, 'commits': [{'message': "VolumeWii: Check SupportsReadWiiDecrypted before m_encrypted\n\nFixes using DirectoryBlob on extracted games that were unencrypted\nprior to being extracted.\n\n(One day I'll make DirectoryBlob actually support raw reads and then\nthe order of these two won't matter...)", 'hash': '23fc5f9e35790b8863714e31595fac5051c3cfb5', 'distinct': True, 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/23fc5f9e35790b8863714e31595fac5051c3cfb5', 'added': [], 'author': {'name': 'JosJuice', 'email': 'josjuice@gmail.com', 'username': 'JosJuice'}, 'modified': ['Source/Core/DiscIO/VolumeWii.cpp']}, {'message': 'Merge pull request #8496 from JosJuice/volumewii-check-decrypted-order\n\nVolumeWii: Check SupportsReadWiiDecrypted before m_encrypted', 'hash': '44f85bbc5e5f6aef30fa6eaf1b88415061282980', 'distinct': True, 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/44f85bbc5e5f6aef30fa6eaf1b88415061282980', 'added': [], 'author': {'name': 'Anthony', 'email': 'Helios747@users.noreply.github.com', 'username': 'Helios747'}, 'modified': ['Source/Core/DiscIO/VolumeWii.cpp']}], 'forced': False, 'ref_name': 'master', 'ref_type': 'heads', 'pusher': 'Helios747'}
2019-11-27T23:31:08.521068	{'type': 'gh_push', 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'base_ref_name': None, 'deleted': False, 'after_sha': 'f20c1c2f8ddd6c32e751dd39a6182572712c4af0', 'before_sha': '66220d3ae5928c61ebe9430dfbdc8e921942ed6b', 'created': False, 'commits': [{'message': 'VolumeVerifier: Detect broken Super Paper Mario\n\nhttps://bugs.dolphin-emu.org/issues/11900', 'hash': '59633f5309b8386ebf321104dc16bd46b372bf1c', 'distinct': True, 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/59633f5309b8386ebf321104dc16bd46b372bf1c', 'added': [], 'author': {'name': 'JosJuice', 'email': 'josjuice@gmail.com', 'username': 'JosJuice'}, 'modified': ['Source/Core/DiscIO/VolumeVerifier.cpp', 'Source/Core/DiscIO/VolumeVerifier.h']}, {'message': 'Merge pull request #8499 from JosJuice/volumeverifier-super-paper-mario\n\nVolumeVerifier: Detect broken Super Paper Mario', 'hash': 'f20c1c2f8ddd6c32e751dd39a6182572712c4af0', 'distinct': True, 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/f20c1c2f8ddd6c32e751dd39a6182572712c4af0', 'added': [], 'author': {'name': 'Anthony', 'email': 'Helios747@users.noreply.github.com', 'username': 'Helios747'}, 'modified': ['Source/Core/DiscIO/VolumeVerifier.cpp', 'Source/Core/DiscIO/VolumeVerifier.h']}], 'forced': False, 'ref_name': 'master', 'ref_type': 'heads', 'pusher': 'Helios747'}
2019-11-27T23:29:11.765007	{'type': 'gh_push', 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'base_ref_name': None, 'deleted': False, 'after_sha': '66220d3ae5928c61ebe9430dfbdc8e921942ed6b', 'before_sha': '70ee5234ba4782ae9e16a81266f97024a96245cf', 'created': False, 'commits': [{'message': 'DolphinQt: Remove "Experimental" from "Export Wii Save"\n\nIt\'s pretty well tested at this point.', 'hash': '9938585702f49a2a21e4733abea9930ea337408f', 'distinct': True, 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/9938585702f49a2a21e4733abea9930ea337408f', 'added': [], 'author': {'name': 'JosJuice', 'email': 'josjuice@gmail.com', 'username': 'JosJuice'}, 'modified': ['Source/Core/DolphinQt/GameList/GameList.cpp']}, {'message': 'Merge pull request #8500 from JosJuice/export-wii-save-experimental\n\nDolphinQt: Remove "Experimental" from "Export Wii Save"', 'hash': '66220d3ae5928c61ebe9430dfbdc8e921942ed6b', 'distinct': True, 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/66220d3ae5928c61ebe9430dfbdc8e921942ed6b', 'added': [], 'author': {'name': 'Anthony', 'email': 'Helios747@users.noreply.github.com', 'username': 'Helios747'}, 'modified': ['Source/Core/DolphinQt/GameList/GameList.cpp']}], 'forced': False, 'ref_name': 'master', 'ref_type': 'heads', 'pusher': 'Helios747'}
2019-11-25T10:31:41.648614	{'type': 'gh_push', 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'base_ref_name': None, 'deleted': False, 'after_sha': '70ee5234ba4782ae9e16a81266f97024a96245cf', 'before_sha': 'ac77df9e90da825a8e05985c69623ffef2bae890', 'created': False, 'commits': [{'message': 'Revert "Android: Remove dead code and related lib <circleimageview>"\n\nThis reverts commit 593b69728d7e7813a3e3bbd1bfea2f2f56f3a38e.', 'hash': '870912722ed515e4ead17aee3aa7635abfb4f192', 'distinct': True, 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/870912722ed515e4ead17aee3aa7635abfb4f192', 'added': ['Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/GameDetailsDialog.java', 'Source/Android/app/src/main/res/layout/dialog_game_details.xml'], 'author': {'name': 'JosJuice', 'email': 'josjuice@gmail.com', 'username': 'JosJuice'}, 'modified': ['Source/Android/app/build.gradle']}, {'message': "Android: Bring back the game details dialog\n\nIt was made inaccessible in e19922c (I'm not sure why)\nand then removed by 593b697.", 'hash': '00c4dad7849e7b88c006475c961ce125a29ccb8a', 'distinct': True, 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/00c4dad7849e7b88c006475c961ce125a29ccb8a', 'added': [], 'author': {'name': 'JosJuice', 'email': 'josjuice@gmail.com', 'username': 'JosJuice'}, 'modified': ['Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/adapters/GameAdapter.java', 'Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/adapters/GameRowPresenter.java', 'Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/GameDetailsDialog.java', 'Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/GameSettingsDialog.java', 'Source/Android/app/src/main/res/values/arrays.xml']}, {'message': 'Rename GameSettingsDialog to GamePropertiesDialog\n\nSince it no longer only contains settings.', 'hash': '5ed0cf8e0e9882896ee30b6deb24e971fda44d13', 'distinct': True, 'removed': ['Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/GameSettingsDialog.java'], 'url': 'https://github.com/dolphin-emu/dolphin/commit/5ed0cf8e0e9882896ee30b6deb24e971fda44d13', 'added': ['Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/GamePropertiesDialog.java'], 'author': {'name': 'JosJuice', 'email': 'josjuice@gmail.com', 'username': 'JosJuice'}, 'modified': ['Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/adapters/GameAdapter.java', 'Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/adapters/GameRowPresenter.java', 'Source/Android/app/src/main/res/values/strings.xml']}, {'message': 'Bring back game banner loading code deleted in 3f21975', 'hash': 'c2952c466f7945428d12e249a9675995de810537', 'distinct': True, 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/c2952c466f7945428d12e249a9675995de810537', 'added': ['Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/GameBannerRequestHandler.java'], 'author': {'name': 'JosJuice', 'email': 'josjuice@gmail.com', 'username': 'JosJuice'}, 'modified': ['Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/adapters/GameAdapter.java', 'Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/adapters/GameRowPresenter.java', 'Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/PicassoUtils.java']}, {'message': 'GameDetailsDialog: Actually load the banner', 'hash': 'fcb96a179ddcc2f49b3e8c3ed23bb2a6f61655fe', 'distinct': True, 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/fcb96a179ddcc2f49b3e8c3ed23bb2a6f61655fe', 'added': [], 'author': {'name': 'JosJuice', 'email': 'josjuice@gmail.com', 'username': 'JosJuice'}, 'modified': ['Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/GameDetailsDialog.java']}, {'message': "GameDetailsDialog: Don't use CircleImageView for banners\n\nBecause trying to fit a 3:1 banner into a circle looks very awkward.\n\nAlso move the banner below the title/description now that it\ntakes up more space horizontally.", 'hash': '100f032e2f7f7e0f6b2854b41b29d4d7f0c55b66', 'distinct': True, 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/100f032e2f7f7e0f6b2854b41b29d4d7f0c55b66', 'added': [], 'author': {'name': 'JosJuice', 'email': 'josjuice@gmail.com', 'username': 'JosJuice'}, 'modified': ['Source/Android/app/build.gradle', 'Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/GameDetailsDialog.java', 'Source/Android/app/src/main/res/layout/dialog_game_details.xml']}, {'message': "GameDetailsDialog: Hide description if empty\n\nIn particular, Wii games don't have descriptions.", 'hash': '100e7e2b3d40a2329c8cd9cc1394d12fe955b2ba', 'distinct': True, 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/100e7e2b3d40a2329c8cd9cc1394d12fe955b2ba', 'added': [], 'author': {'name': 'JosJuice', 'email': 'josjuice@gmail.com', 'username': 'JosJuice'}, 'modified': ['Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/GameDetailsDialog.java']}, {'message': "GameDetailsDialog: Remove the screenshot ImageView\n\nIt takes up a lot of space on the screen, and the functionality for\nsaving these screenshots isn't in Dolphin anymore as far as I can tell.", 'hash': '84e616337d7bee085546f7b7f1d037eea6d5312e', 'distinct': True, 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/84e616337d7bee085546f7b7f1d037eea6d5312e', 'added': [], 'author': {'name': 'JosJuice', 'email': 'josjuice@gmail.com', 'username': 'JosJuice'}, 'modified': ['Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/GameDetailsDialog.java', 'Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/model/GameFile.java', 'Source/Android/app/src/main/res/layout/dialog_game_details.xml']}, {'message': 'GameDetailsDialog: Show game ID and revision', 'hash': 'ec91674d07ac1006ce128d27ec033ca64ca11908', 'distinct': True, 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/ec91674d07ac1006ce128d27ec033ca64ca11908', 'added': [], 'author': {'name': 'JosJuice', 'email': 'josjuice@gmail.com', 'username': 'JosJuice'}, 'modified': ['Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/GameDetailsDialog.java', 'Source/Android/app/src/main/res/layout/dialog_game_details.xml']}, {'message': 'GameDetailsDialog: Fix banner placeholder', 'hash': '4f1511043cbeab6a13910458a58f70701557ec3c', 'distinct': True, 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/4f1511043cbeab6a13910458a58f70701557ec3c', 'added': [], 'author': {'name': 'JosJuice', 'email': 'josjuice@gmail.com', 'username': 'JosJuice'}, 'modified': ['Source/Android/app/src/main/res/layout/dialog_game_details.xml']}, {'message': 'GameDetailsDialog: Convert layout to ConstraintLayout\n\nThis also removes the FAB from GameDetailsDialog. It was\npreviously outside of the visible area and thus unusable.', 'hash': '2e13353201b0039c536f763f109c4232faf400ec', 'distinct': True, 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/2e13353201b0039c536f763f109c4232faf400ec', 'added': [], 'author': {'name': 'JosJuice', 'email': 'josjuice@gmail.com', 'username': 'JosJuice'}, 'modified': ['Source/Android/app/build.gradle', 'Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/GameDetailsDialog.java', 'Source/Android/app/src/main/res/layout/dialog_game_details.xml']}, {'message': 'GameDetailsDialog: Use labels instead of icons', 'hash': '8e2b12e1ea5c06d5204376830cb30de91be643f1', 'distinct': True, 'removed': ['Source/Android/app/src/main/res/drawable-hdpi/ic_company.png', 'Source/Android/app/src/main/res/drawable-hdpi/ic_country.png', 'Source/Android/app/src/main/res/drawable-xhdpi/ic_company.png', 'Source/Android/app/src/main/res/drawable-xhdpi/ic_country.png', 'Source/Android/app/src/main/res/drawable-xxhdpi/ic_company.png', 'Source/Android/app/src/main/res/drawable-xxhdpi/ic_country.png', 'Source/Android/app/src/main/res/drawable-xxxhdpi/ic_company.png', 'Source/Android/app/src/main/res/drawable-xxxhdpi/ic_country.png'], 'url': 'https://github.com/dolphin-emu/dolphin/commit/8e2b12e1ea5c06d5204376830cb30de91be643f1', 'added': [], 'author': {'name': 'JosJuice', 'email': 'josjuice@gmail.com', 'username': 'JosJuice'}, 'modified': ['Source/Android/app/src/main/res/layout/dialog_game_details.xml', 'Source/Android/app/src/main/res/values/strings.xml']}, {'message': 'Address review comments on old code', 'hash': '9639dde1149e2d47ec4d7c5f36c2c25e13ae6901', 'distinct': True, 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/9639dde1149e2d47ec4d7c5f36c2c25e13ae6901', 'added': [], 'author': {'name': 'JosJuice', 'email': 'josjuice@gmail.com', 'username': 'JosJuice'}, 'modified': ['Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/GameBannerRequestHandler.java']}, {'message': 'Merge pull request #8188 from JosJuice/android-game-details\n\nAndroid: Bring back and update the game details dialog', 'hash': '70ee5234ba4782ae9e16a81266f97024a96245cf', 'distinct': True, 'removed': ['Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/GameSettingsDialog.java', 'Source/Android/app/src/main/res/drawable-hdpi/ic_company.png', 'Source/Android/app/src/main/res/drawable-hdpi/ic_country.png', 'Source/Android/app/src/main/res/drawable-xhdpi/ic_company.png', 'Source/Android/app/src/main/res/drawable-xhdpi/ic_country.png', 'Source/Android/app/src/main/res/drawable-xxhdpi/ic_company.png', 'Source/Android/app/src/main/res/drawable-xxhdpi/ic_country.png', 'Source/Android/app/src/main/res/drawable-xxxhdpi/ic_company.png', 'Source/Android/app/src/main/res/drawable-xxxhdpi/ic_country.png'], 'url': 'https://github.com/dolphin-emu/dolphin/commit/70ee5234ba4782ae9e16a81266f97024a96245cf', 'added': ['Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/GameDetailsDialog.java', 'Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/GamePropertiesDialog.java', 'Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/GameBannerRequestHandler.java', 'Source/Android/app/src/main/res/layout/dialog_game_details.xml'], 'author': {'name': 'JosJuice', 'email': 'josjuice@gmail.com', 'username': 'JosJuice'}, 'modified': ['Source/Android/app/build.gradle', 'Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/adapters/GameAdapter.java', 'Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/adapters/GameRowPresenter.java', 'Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/model/GameFile.java', 'Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/PicassoUtils.java', 'Source/Android/app/src/main/res/values/arrays.xml', 'Source/Android/app/src/main/res/values/strings.xml']}], 'forced': False, 'ref_name': 'master', 'ref_type': 'heads', 'pusher': 'JosJuice'}
2019-11-24T21:38:48.981257	{'type': 'gh_push', 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'base_ref_name': None, 'deleted': False, 'after_sha': 'ac77df9e90da825a8e05985c69623ffef2bae890', 'before_sha': '45ba745bc8c2f7a858b9f0379777481432792e15', 'created': False, 'commits': [{'message': 'figure out new segment on the fly right in FrameDump::Start()', 'hash': '15e6e7ddd2443550e46ca15ac9e5f59ad493fef2', 'distinct': True, 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/15e6e7ddd2443550e46ca15ac9e5f59ad493fef2', 'added': [], 'author': {'name': 'feos', 'email': 'feos-theos@yandex.ru', 'username': 'vadosnaprimer'}, 'modified': ['Source/Core/VideoCommon/FrameDump.cpp']}, {'message': 'fix missing frame when you start another dump without closing dolphin', 'hash': 'cb6a632c60e0a147635f574bcaa0d15a74b9df71', 'distinct': True, 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/cb6a632c60e0a147635f574bcaa0d15a74b9df71', 'added': [], 'author': {'name': 'feos', 'email': 'feos-theos@yandex.ru', 'username': 'vadosnaprimer'}, 'modified': ['Source/Core/VideoCommon/FrameDump.cpp']}, {'message': 'Merge pull request #8490 from vadosnaprimer/dumping\n\n2 minor dumping fixes', 'hash': 'ac77df9e90da825a8e05985c69623ffef2bae890', 'distinct': True, 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/ac77df9e90da825a8e05985c69623ffef2bae890', 'added': [], 'author': {'name': 'Scott Mansell', 'email': 'phiren@gmail.com', 'username': 'phire'}, 'modified': ['Source/Core/VideoCommon/FrameDump.cpp']}], 'forced': False, 'ref_name': 'master', 'ref_type': 'heads', 'pusher': 'phire'}
2019-11-24T19:12:06.893038	{'type': 'gh_push', 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'base_ref_name': None, 'deleted': False, 'after_sha': '45ba745bc8c2f7a858b9f0379777481432792e15', 'before_sha': '17a0336b5379554456ab55b30e2ded950cec2ca1', 'created': False, 'commits': [{'message': 'Core/CPU: Do not yield to UI from CPU methods\n\nCore::RunAsCPUThread may be called from Qt signals, and if code yields to UI there\nthen it results in infinite recursion', 'hash': '2bc9e09456ed544efba044a4734a8ef2d960aa08', 'distinct': True, 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/2bc9e09456ed544efba044a4734a8ef2d960aa08', 'added': [], 'author': {'name': 'Silent', 'email': 'zdanio95@gmail.com', 'username': 'CookiePLMonster'}, 'modified': ['Source/Core/Core/HW/CPU.cpp']}, {'message': 'Core/CPU: Make use of type deduction for scoped locks', 'hash': '23f335ba91fbb7fbb0ced3486c6eaf120fa653bf', 'distinct': True, 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/23f335ba91fbb7fbb0ced3486c6eaf120fa653bf', 'added': [], 'author': {'name': 'Silent', 'email': 'zdanio95@gmail.com', 'username': 'CookiePLMonster'}, 'modified': ['Source/Core/Core/HW/CPU.cpp']}, {'message': 'Merge pull request #8320 from CookiePLMonster/cpu-lock-yield-fix\n\nDo not yield to UI from PauseAndLock', 'hash': '45ba745bc8c2f7a858b9f0379777481432792e15', 'distinct': True, 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/45ba745bc8c2f7a858b9f0379777481432792e15', 'added': [], 'author': {'name': 'JosJuice', 'email': 'josjuice@gmail.com', 'username': 'JosJuice'}, 'modified': ['Source/Core/Core/HW/CPU.cpp']}], 'forced': False, 'ref_name': 'master', 'ref_type': 'heads', 'pusher': 'JosJuice'}
2019-11-24T11:09:02.565303	{'type': 'gh_push', 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'base_ref_name': None, 'deleted': False, 'after_sha': '17a0336b5379554456ab55b30e2ded950cec2ca1', 'before_sha': 'ec895f544cf23616483cea9fdb26a84d6264f844', 'created': False, 'commits': [{'message': 'UICommon: Make use of fmt where applicable\n\nContinues the migration to using fmt.\n\nNotably, this allows safely converting a map within USBUtils over to\ncontaining string view instances, rather than std::string instances, as\nfmt safely handles the formatting of string views.', 'hash': 'b28db1d4e69c0a1011375f308198fde8e2f67d13', 'distinct': True, 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/b28db1d4e69c0a1011375f308198fde8e2f67d13', 'added': [], 'author': {'name': 'Lioncash', 'email': 'mathew1800@gmail.com', 'username': 'lioncash'}, 'modified': ['Source/Core/UICommon/CMakeLists.txt', 'Source/Core/UICommon/Disassembler.cpp', 'Source/Core/UICommon/Disassembler.h', 'Source/Core/UICommon/DiscordPresence.cpp', 'Source/Core/UICommon/GameFile.cpp', 'Source/Core/UICommon/USBUtils.cpp', 'Source/Core/UICommon/X11Utils.cpp']}, {'message': 'Merge pull request #8489 from lioncash/ui-fmt\n\nUICommon: Make use of fmt where applicable', 'hash': '17a0336b5379554456ab55b30e2ded950cec2ca1', 'distinct': True, 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/17a0336b5379554456ab55b30e2ded950cec2ca1', 'added': [], 'author': {'name': 'Léo Lam', 'email': 'leo@leolam.fr', 'username': 'leoetlino'}, 'modified': ['Source/Core/UICommon/CMakeLists.txt', 'Source/Core/UICommon/Disassembler.cpp', 'Source/Core/UICommon/Disassembler.h', 'Source/Core/UICommon/DiscordPresence.cpp', 'Source/Core/UICommon/GameFile.cpp', 'Source/Core/UICommon/USBUtils.cpp', 'Source/Core/UICommon/X11Utils.cpp']}], 'forced': False, 'ref_name': 'master', 'ref_type': 'heads', 'pusher': 'leoetlino'}
2019-11-23T23:46:21.962055	{'type': 'gh_push', 'source': 'ghhookparser', 'repo': 'dolphin-emu/dolphin', 'base_ref_name': None, 'deleted': False, 'after_sha': 'ec895f544cf23616483cea9fdb26a84d6264f844', 'before_sha': '3a2d3aa9d20289ef4b8e8c64768faeaf7463cd0b', 'created': False, 'commits': [{'message': 'InputCommon/DualShockUDPClient: Add missing header guard\n\nPrevents potential inclusion issues from occurring.', 'hash': '544d6cbe52015a73f036bc2f40789dfaf3ab137e', 'distinct': True, 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/544d6cbe52015a73f036bc2f40789dfaf3ab137e', 'added': [], 'author': {'name': 'Lioncash', 'email': 'mathew1800@gmail.com', 'username': 'lioncash'}, 'modified': ['Source/Core/InputCommon/ControllerInterface/DualShockUDPClient/DualShockUDPClient.h', 'Source/Core/InputCommon/ControllerInterface/DualShockUDPClient/DualShockUDPProto.h']}, {'message': "InputCommon/DualShockUDPClient: In-class initialize members where applicable\n\nDeduplicates members within the constructor's initializer list.", 'hash': '4488719a761243bf6de95b6608d6ef6a780b7bd0', 'distinct': True, 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/4488719a761243bf6de95b6608d6ef6a780b7bd0', 'added': [], 'author': {'name': 'Lioncash', 'email': 'mathew1800@gmail.com', 'username': 'lioncash'}, 'modified': ['Source/Core/InputCommon/ControllerInterface/DualShockUDPClient/DualShockUDPClient.cpp']}, {'message': 'InputCommon/DualShockUDPClient: Relocate settings to top of source file\n\nThis is a small namespace, so we can move it to the top of the file to\nget it out of the way of everything else.', 'hash': '67097b45742b08faf9b3440f70e2871b5aecd95e', 'distinct': True, 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/67097b45742b08faf9b3440f70e2871b5aecd95e', 'added': [], 'author': {'name': 'Lioncash', 'email': 'mathew1800@gmail.com', 'username': 'lioncash'}, 'modified': ['Source/Core/InputCommon/ControllerInterface/DualShockUDPClient/DualShockUDPClient.cpp']}, {'message': 'InputCommon/DualShockUDPClient: Make use of std::array where applicable\n\nProvides the same semantics of a C array, but is much nicer to work\nwith.\n\nNotably, it makes all cases of performing comparisons with said arrays\nsignificantly less reading-involved.', 'hash': '278d03f737fe3bf1e4ca2b9b1ea33bbd7e94aa8f', 'distinct': True, 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/278d03f737fe3bf1e4ca2b9b1ea33bbd7e94aa8f', 'added': [], 'author': {'name': 'Lioncash', 'email': 'mathew1800@gmail.com', 'username': 'lioncash'}, 'modified': ['Source/Core/InputCommon/ControllerInterface/DualShockUDPClient/DualShockUDPClient.cpp', 'Source/Core/InputCommon/ControllerInterface/DualShockUDPClient/DualShockUDPProto.h']}, {'message': 'InputCommon/DualShockUDPClient: Use deduction guides for lock_guard\n\nWith C++17, we can use template deduction guides provided by the\nstandard library. This allows the omission of the mutex type itself.', 'hash': 'db9e59276556d1797d4a9b939434e4dbd8f86e40', 'distinct': True, 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/db9e59276556d1797d4a9b939434e4dbd8f86e40', 'added': [], 'author': {'name': 'Lioncash', 'email': 'mathew1800@gmail.com', 'username': 'lioncash'}, 'modified': ['Source/Core/InputCommon/ControllerInterface/DualShockUDPClient/DualShockUDPClient.cpp']}, {'message': 'InputCommon/DualShockUDPClient: Use an alias for the clock type\n\nMakes code slightly less verbose without exposing the whole chrono\nheader to the current source file.', 'hash': '334e2768f58f7076dc9517f7200de90fbe47b5b4', 'distinct': True, 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/334e2768f58f7076dc9517f7200de90fbe47b5b4', 'added': [], 'author': {'name': 'Lioncash', 'email': 'mathew1800@gmail.com', 'username': 'lioncash'}, 'modified': ['Source/Core/InputCommon/ControllerInterface/DualShockUDPClient/DualShockUDPClient.cpp']}, {'message': 'Merge pull request #8486 from lioncash/dualshock\n\nInputCommon/DualShockUDPClient: Minor cleanup', 'hash': 'ec895f544cf23616483cea9fdb26a84d6264f844', 'distinct': True, 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/ec895f544cf23616483cea9fdb26a84d6264f844', 'added': [], 'author': {'name': 'Léo Lam', 'email': 'leo@leolam.fr', 'username': 'leoetlino'}, 'modified': ['Source/Core/InputCommon/ControllerInterface/DualShockUDPClient/DualShockUDPClient.cpp', 'Source/Core/InputCommon/ControllerInterface/DualShockUDPClient/DualShockUDPClient.h', 'Source/Core/InputCommon/ControllerInterface/DualShockUDPClient/DualShockUDPProto.h']}], 'forced': False, 'ref_name': 'master', 'ref_type': 'heads', 'pusher': 'leoetlino'}

Recent 'internal_log' events

2019-12-07T15:09:09.381660	{'type': 'internal_log', 'lineno': 147, 'level': 'INFO', 'source': 'logging', 'msg': 'New GH %s: %s', 'args': "('dolphin-emu/core-developers', 'degasus,leoetlino,Armada651,lioncash,phire,spycrab,linkmauve,Helios747,hrydgard,Tilka,JosJuice,delroth,skidau,Parlane,stenzek')", 'pathname': '/home/central/sadm/central/github.py'}
2019-12-07T15:09:08.913270	{'type': 'internal_log', 'lineno': 657, 'level': 'INFO', 'source': 'logging', 'msg': 'Starting new HTTPS connection (1): api.github.com', 'args': '()', 'pathname': '/home/central/venv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py'}
2019-12-07T15:09:08.688941	{'type': 'internal_log', 'lineno': 657, 'level': 'INFO', 'source': 'logging', 'msg': 'Starting new HTTPS connection (1): api.github.com', 'args': '()', 'pathname': '/home/central/venv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py'}
2019-12-07T15:09:08.688353	{'type': 'internal_log', 'lineno': 132, 'level': 'INFO', 'source': 'logging', 'msg': 'Refreshing list of trusted users (from %s/%s)', 'args': "('dolphin-emu', 'core-developers')", 'pathname': '/home/central/sadm/central/github.py'}
2019-12-07T15:06:45.377032	{'type': 'internal_log', 'lineno': 147, 'level': 'INFO', 'source': 'logging', 'msg': 'New GH %s: %s', 'args': "('dolphin-emu/trusted-developers', 'rohit-n,NanoByte011,RachelBryk,Tilka,Stevoisiak,riking,CrystalGamma,marcan,stenzek,mrgreywater,AdmiralCurtiss,aldelaro5,iwubcode,jezze,EmptyChaos,Tinob,sigmabeta,delroth,cylgom,Buddybenj,neobrain,Sintendo,aroulin,hthh,Alcaro,hackbar,booto,Ziek,mathieui,yourWaifu,galop1n,CookiePLMonster,endrift,spycrab,LAGonauta,jordan-woyak,hrydgard,zackhow,kamiyo,Hydr8gon,rlnilsen,leoetlino,JMC47,Pokechu22,Ebola16,OrN,glennricster,Linktothepast,Aestek,Helios747,LPFaint99,gwicks,adamdmoss,skidau,degasus,hdcmeta,phire,shonumi,bentley,comex,FioraAeterna,Orphis,MayImilae,mahdihijazi,Parlane,mmastrac,Armada651,Zopieux,randomstuff,Ryanel,vladfi1,MerryMage,meffij,Phatcat,mimimi085181,spxtr,archshift,lioncash,sepalani,RisingFog,Starsam80,Techjar,magumagu,BhaaLseN,unknownbrackets,ColinDTaylor,kayru,clinchergt,magcius,JosJuice,jloehr,ligfx,moncefmechri,rukai,linkmauve')", 'pathname': '/home/central/sadm/central/github.py'}
2019-12-07T15:06:45.041803	{'type': 'internal_log', 'lineno': 657, 'level': 'INFO', 'source': 'logging', 'msg': 'Starting new HTTPS connection (1): api.github.com', 'args': '()', 'pathname': '/home/central/venv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py'}
2019-12-07T15:06:44.734783	{'type': 'internal_log', 'lineno': 657, 'level': 'INFO', 'source': 'logging', 'msg': 'Starting new HTTPS connection (1): api.github.com', 'args': '()', 'pathname': '/home/central/venv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py'}
2019-12-07T15:06:44.395036	{'type': 'internal_log', 'lineno': 657, 'level': 'INFO', 'source': 'logging', 'msg': 'Starting new HTTPS connection (1): api.github.com', 'args': '()', 'pathname': '/home/central/venv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py'}
2019-12-07T15:06:44.099240	{'type': 'internal_log', 'lineno': 657, 'level': 'INFO', 'source': 'logging', 'msg': 'Starting new HTTPS connection (1): api.github.com', 'args': '()', 'pathname': '/home/central/venv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py'}
2019-12-07T15:06:43.869013	{'type': 'internal_log', 'lineno': 657, 'level': 'INFO', 'source': 'logging', 'msg': 'Starting new HTTPS connection (1): api.github.com', 'args': '()', 'pathname': '/home/central/venv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py'}
2019-12-07T15:06:43.868405	{'type': 'internal_log', 'lineno': 132, 'level': 'INFO', 'source': 'logging', 'msg': 'Refreshing list of trusted users (from %s/%s)', 'args': "('dolphin-emu', 'trusted-developers')", 'pathname': '/home/central/sadm/central/github.py'}
2019-12-07T15:02:41.943438	{'type': 'internal_log', 'lineno': 657, 'level': 'INFO', 'source': 'logging', 'msg': 'Starting new HTTPS connection (1): api.github.com', 'args': '()', 'pathname': '/home/central/venv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py'}
2019-12-07T15:02:41.942798	{'type': 'internal_log', 'lineno': 196, 'level': 'INFO', 'source': 'logging', 'msg': "Watched repo 'dolphin-emu/netplay-index' has our hook installed", 'args': '()', 'pathname': '/home/central/sadm/central/github.py'}
2019-12-07T15:02:41.382109	{'type': 'internal_log', 'lineno': 657, 'level': 'INFO', 'source': 'logging', 'msg': 'Starting new HTTPS connection (1): api.github.com', 'args': '()', 'pathname': '/home/central/venv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py'}
2019-12-07T15:02:41.025117	{'type': 'internal_log', 'lineno': 657, 'level': 'INFO', 'source': 'logging', 'msg': 'Starting new HTTPS connection (1): api.github.com', 'args': '()', 'pathname': '/home/central/venv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py'}
2019-12-07T15:02:41.024482	{'type': 'internal_log', 'lineno': 196, 'level': 'INFO', 'source': 'logging', 'msg': "Watched repo 'dolphin-emu/gcdsp-ida' has our hook installed", 'args': '()', 'pathname': '/home/central/sadm/central/github.py'}
2019-12-07T15:02:40.756571	{'type': 'internal_log', 'lineno': 657, 'level': 'INFO', 'source': 'logging', 'msg': 'Starting new HTTPS connection (1): api.github.com', 'args': '()', 'pathname': '/home/central/venv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py'}
2019-12-07T15:02:40.423443	{'type': 'internal_log', 'lineno': 657, 'level': 'INFO', 'source': 'logging', 'msg': 'Starting new HTTPS connection (1): api.github.com', 'args': '()', 'pathname': '/home/central/venv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py'}
2019-12-07T15:02:40.422757	{'type': 'internal_log', 'lineno': 196, 'level': 'INFO', 'source': 'logging', 'msg': "Watched repo 'dolphin-emu/hwtests' has our hook installed", 'args': '()', 'pathname': '/home/central/sadm/central/github.py'}
2019-12-07T15:02:39.947167	{'type': 'internal_log', 'lineno': 657, 'level': 'INFO', 'source': 'logging', 'msg': 'Starting new HTTPS connection (1): api.github.com', 'args': '()', 'pathname': '/home/central/venv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py'}
2019-12-07T15:02:39.587942	{'type': 'internal_log', 'lineno': 657, 'level': 'INFO', 'source': 'logging', 'msg': 'Starting new HTTPS connection (1): api.github.com', 'args': '()', 'pathname': '/home/central/venv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py'}
2019-12-07T15:02:39.586734	{'type': 'internal_log', 'lineno': 196, 'level': 'INFO', 'source': 'logging', 'msg': "Watched repo 'dolphin-emu/www' has our hook installed", 'args': '()', 'pathname': '/home/central/sadm/central/github.py'}
2019-12-07T15:02:39.323500	{'type': 'internal_log', 'lineno': 657, 'level': 'INFO', 'source': 'logging', 'msg': 'Starting new HTTPS connection (1): api.github.com', 'args': '()', 'pathname': '/home/central/venv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py'}
2019-12-07T15:02:39.012814	{'type': 'internal_log', 'lineno': 657, 'level': 'INFO', 'source': 'logging', 'msg': 'Starting new HTTPS connection (1): api.github.com', 'args': '()', 'pathname': '/home/central/venv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py'}
2019-12-07T15:02:39.011989	{'type': 'internal_log', 'lineno': 196, 'level': 'INFO', 'source': 'logging', 'msg': "Watched repo 'dolphin-emu/sadm' has our hook installed", 'args': '()', 'pathname': '/home/central/sadm/central/github.py'}

Recent 'irc_message' events

2019-12-07T10:07:06.784125	{'type': 'irc_message', 'modes': {'v'}, 'direct': False, 'source': 'ircclient', 'where': '#dolphin-dev', 'what': 'yeah', 'who': 'JMC47'}
2019-12-07T09:55:49.135290	{'type': 'irc_message', 'modes': set(), 'direct': False, 'source': 'ircclient', 'where': '#dolphin-dev', 'what': 'oh wow it shared it here automatically', 'who': 'IRC-Source_69'}
2019-12-07T09:42:09.435209	{'type': 'irc_message', 'modes': {'v'}, 'direct': False, 'source': 'ircclient', 'where': '#dolphin-dev', 'what': 'yeah, we fixed one bug apparently and made another', 'who': 'JMC47'}
2019-12-07T09:37:23.570546	{'type': 'irc_message', 'modes': set(), 'direct': False, 'source': 'ircclient', 'where': '#dolphin-dev', 'what': 'I think I found it, nvm', 'who': 'IRC-Source_69'}
2019-12-07T09:35:12.014311	{'type': 'irc_message', 'modes': set(), 'direct': False, 'source': 'ircclient', 'where': '#dolphin-dev', 'what': 'Where is the tracker?  On Github?', 'who': 'IRC-Source_69'}
2019-12-07T09:35:00.457098	{'type': 'irc_message', 'modes': set(), 'direct': False, 'source': 'ircclient', 'where': '#dolphin-dev', 'what': "I'm sorry, I am unfamilar with the development side of Dolphin.", 'who': 'IRC-Source_69'}
2019-12-07T09:33:05.773072	{'type': 'irc_message', 'modes': set(), 'direct': False, 'source': 'ircclient', 'where': '#dolphin-dev', 'what': 'the PR changed some lock usages and i guess nobody tested the debugger', 'who': 'Techjar'}
2019-12-07T09:32:05.163033	{'type': 'irc_message', 'modes': set(), 'direct': False, 'source': 'ircclient', 'where': '#dolphin-dev', 'what': 'yeah, probably a deadlock', 'who': 'Techjar'}
2019-12-07T09:31:49.668583	{'type': 'irc_message', 'modes': set(), 'direct': False, 'source': 'ircclient', 'where': '#dolphin-dev', 'what': 'hence the freeze', 'who': 'IRC-Source_69'}
2019-12-07T09:31:43.391342	{'type': 'irc_message', 'modes': set(), 'direct': False, 'source': 'ircclient', 'where': '#dolphin-dev', 'what': 'The commit in question changed the behavior of DSP emulation when pausing emulation, so I assume making memory breakpoints pauses it briefly.', 'who': 'IRC-Source_69'}
2019-12-07T09:30:59.156655	{'type': 'irc_message', 'modes': set(), 'direct': False, 'source': 'ircclient', 'where': '#dolphin-dev', 'what': 'yeah the debugger needs some love', 'who': 'Techjar'}
2019-12-07T09:30:44.143107	{'type': 'irc_message', 'modes': set(), 'direct': False, 'source': 'ircclient', 'where': '#dolphin-dev', 'what': 'ah', 'who': 'Techjar'}
2019-12-07T09:30:28.386663	{'type': 'irc_message', 'modes': set(), 'direct': False, 'source': 'ircclient', 'where': '#dolphin-dev', 'what': 'I will go ahead and report it there as well.', 'who': 'IRC-Source_69'}
2019-12-07T09:30:19.891525	{'type': 'irc_message', 'modes': set(), 'direct': False, 'source': 'ircclient', 'where': '#dolphin-dev', 'what': 'Versions past 5.0-11297 will freeze when trying to make memory breakpoints if the DSP Emulation Engine is not set to DSP HLE.', 'who': 'IRC-Source_69'}
2019-12-07T09:29:50.889196	{'type': 'irc_message', 'modes': set(), 'direct': False, 'source': 'ircclient', 'where': '#dolphin-dev', 'what': 'and other discussions', 'who': 'Techjar'}
2019-12-07T09:29:44.095859	{'type': 'irc_message', 'modes': set(), 'direct': False, 'source': 'ircclient', 'where': '#dolphin-dev', 'what': 'forum is more for technical support', 'who': 'Techjar'}
2019-12-07T09:29:19.092178	{'type': 'irc_message', 'modes': set(), 'direct': False, 'source': 'ircclient', 'where': '#dolphin-dev', 'what': "if it's a legitimate bug report then it should probably be on the tracker, not the forum", 'who': 'Techjar'}
2019-12-07T09:26:44.919633	{'type': 'irc_message', 'modes': set(), 'direct': False, 'source': 'ircclient', 'where': '#dolphin-dev', 'what': "Hi I posted about a bug I found in versions past 5.0-11297 in the Development Discussion board.  I guess I'm impatient because I was wondering if any moderators were around and about to approve it.", 'who': 'IRC-Source_69'}
2019-12-07T08:20:56.245402	{'type': 'irc_message', 'modes': {'o'}, 'direct': False, 'source': 'ircclient', 'where': '#dolphin-dev', 'what': '<--', 'who': 'delroth'}
2019-12-07T07:57:00.633675	{'type': 'irc_message', 'modes': set(), 'direct': False, 'source': 'ircclient', 'where': '#dolphin-dev', 'what': 'so who knows AX HLE well enough to debug it?', 'who': 'Techjar'}
2019-12-07T04:04:19.518005	{'type': 'irc_message', 'modes': {'v'}, 'direct': False, 'source': 'ircclient', 'where': '#dolphin-dev', 'what': 'the misssing audio stuff', 'who': 'JMC47'}
2019-12-07T04:04:16.644912	{'type': 'irc_message', 'modes': {'v'}, 'direct': False, 'source': 'ircclient', 'where': '#dolphin-dev', 'what': 'we were', 'who': 'JMC47'}
2019-12-07T03:32:50.705914	{'type': 'irc_message', 'modes': set(), 'direct': False, 'source': 'ircclient', 'where': '#dolphin-dev', 'what': "Techjar let me know that you guys were able to repro that bug so I'm glad we have that at least partially locked down. ", 'who': 'Narry'}
2019-12-07T01:35:24.064745	{'type': 'irc_message', 'modes': set(), 'direct': False, 'source': 'ircclient', 'where': '#dolphin-dev', 'what': 'Oh, the message is in QtMsgAlertHandler is "Question", "Invalid read from 0x41800000, PC = 0x800e4250"; this is that same issue I ran into before (months ago) that I still don\'t know the cause of, though this time it deadlocked instead of giving the error message or more infrequently crashing the game :|', 'who': 'pokechu22'}
2019-12-07T01:32:19.588777	{'type': 'irc_message', 'modes': set(), 'direct': False, 'source': 'ircclient', 'where': '#dolphin-dev', 'what': "https://gist.github.com/Pokechu22/a29d4c7f57dfef3fdbec125c0f2a8b44 -- happened while messing about with the connected remotes (with modified code, but I don't think I changed anything that'd affect deadlocks with configuration saving; I know this was mentioned in the progress report)", 'who': 'pokechu22'}

Recent 'issue' events

2019-12-07T10:40:28.295015	{'type': 'issue', 'new': False, 'title': '5.0-11297 and newer freeze upon creating memory breakpoint when using DSP LLE on thread', 'source': 'redmine', 'update': 1, 'issue': 11920, 'author': 'JosJuice'}
2019-12-07T09:54:29.155094	{'type': 'issue', 'new': True, 'title': '5.0-11297 and beyond have debugger bug', 'source': 'redmine', 'update': 0, 'issue': 11920, 'author': 'Minty_Meeo'}
2019-12-07T06:44:47.589188	{'type': 'issue', 'new': False, 'title': "Dolphin hangs with a clean configuration on macOS 10.4.6 when attempting to close Dolphin or open the 'Controllers' config UI", 'source': 'redmine', 'update': 2, 'issue': 11919, 'author': 'friendsxix'}
2019-12-07T05:26:41.064863	{'type': 'issue', 'new': False, 'title': "Dolphin hangs with a clean configuration on macOS 10.4.6 when attempting to close Dolphin or open the 'Controllers' config UI", 'source': 'redmine', 'update': 1, 'issue': 11919, 'author': 'friendsxix'}
2019-12-07T05:24:39.083555	{'type': 'issue', 'new': True, 'title': "Dolphin hangs with a clean configuration on macOS 10.4.6 when attempting to close Dolphin or open the 'Controllers' config UI", 'source': 'redmine', 'update': 0, 'issue': 11919, 'author': 'friendsxix'}
2019-12-06T12:55:20.048088	{'type': 'issue', 'new': False, 'title': 'Configurable Paths', 'source': 'redmine', 'update': 1, 'issue': 7756, 'author': 'toadandthemole'}
2019-12-06T08:56:55.202441	{'type': 'issue', 'new': False, 'title': '[Linux] evdev devices with the same name do not have consistent ordering', 'source': 'redmine', 'update': 4, 'issue': 11917, 'author': 'batzkass'}
2019-12-06T01:10:25.834980	{'type': 'issue', 'new': False, 'title': 'EA Sports Active 2 Video Rendering and sprite problems', 'source': 'redmine', 'update': 5, 'issue': 11918, 'author': 'kage52124'}
2019-12-06T01:09:01.478016	{'type': 'issue', 'new': False, 'title': 'EA Sports Active 2 Video Rendering and sprite problems', 'source': 'redmine', 'update': 4, 'issue': 11918, 'author': 'kage52124'}
2019-12-06T00:57:16.091307	{'type': 'issue', 'new': False, 'title': 'EA Sports Active 2 Video Rendering and sprite problems', 'source': 'redmine', 'update': 3, 'issue': 11918, 'author': 'JMC4789'}
2019-12-06T00:55:59.066641	{'type': 'issue', 'new': False, 'title': 'EA Sports Active 2 Video Rendering and sprite problems', 'source': 'redmine', 'update': 2, 'issue': 11918, 'author': 'kage52124'}
2019-12-06T00:54:19.119267	{'type': 'issue', 'new': False, 'title': 'EA Sports Active 2 Video Rendering and sprite problems', 'source': 'redmine', 'update': 1, 'issue': 11918, 'author': 'JMC4789'}
2019-12-06T00:52:07.103181	{'type': 'issue', 'new': True, 'title': 'EA Sports Active 2 Video Rendering and sprite problems', 'source': 'redmine', 'update': 0, 'issue': 11918, 'author': 'kage52124'}
2019-12-05T02:12:13.883497	{'type': 'issue', 'new': False, 'title': '[Linux] evdev devices with the same name do not have consistent ordering', 'source': 'redmine', 'update': 3, 'issue': 11917, 'author': 'Billiard26'}
2019-12-05T02:11:59.334572	{'type': 'issue', 'new': False, 'title': '[Linux] evdev devices with the same name do not have consistent ordering', 'source': 'redmine', 'update': 2, 'issue': 11917, 'author': 'Billiard26'}
2019-12-05T00:06:06.440930	{'type': 'issue', 'new': False, 'title': '[Linux] Random uvdev gamepad order sequence ?', 'source': 'redmine', 'update': 1, 'issue': 11917, 'author': 'batzkass'}
2019-12-04T14:41:18.826490	{'type': 'issue', 'new': False, 'title': 'Game terminates when focusing render window', 'source': 'redmine', 'update': 1, 'issue': 11913, 'author': 'Silent'}
2019-12-04T14:35:04.156212	{'type': 'issue', 'new': True, 'title': '[Linux] Random uvdev gamepad order sequence ?', 'source': 'redmine', 'update': 0, 'issue': 11917, 'author': 'batzkass'}
2019-12-01T23:42:37.894820	{'type': 'issue', 'new': False, 'title': '(GJBE5G) Bomberman Jetters does not boot as of 4.0-9154 (PR #3601) (Timing)', 'source': 'redmine', 'update': 7, 'issue': 10490, 'author': 'ehw'}
2019-12-01T20:40:14.742765	{'type': 'issue', 'new': False, 'title': 'Using save states breaks memory card saving in Pokemon Colosseum', 'source': 'redmine', 'update': 11, 'issue': 10598, 'author': 'Techjar'}
2019-12-01T12:01:42.276075	{'type': 'issue', 'new': True, 'title': 'NBA 2K13 - flickering crowd', 'source': 'redmine', 'update': 0, 'issue': 11916, 'author': 'markwest76'}
2019-12-01T05:16:37.280323	{'type': 'issue', 'new': False, 'title': 'Using save states breaks memory card saving in Pokemon Colosseum', 'source': 'redmine', 'update': 10, 'issue': 10598, 'author': 'JMC4789'}
2019-12-01T01:54:25.662283	{'type': 'issue', 'new': False, 'title': 'Using save states breaks memory card saving in Pokemon Colosseum', 'source': 'redmine', 'update': 9, 'issue': 10598, 'author': 'Rena'}
2019-12-01T01:47:56.120569	{'type': 'issue', 'new': False, 'title': 'Using save states breaks memory card saving in Pokemon Colosseum', 'source': 'redmine', 'update': 8, 'issue': 10598, 'author': 'Rena'}
2019-12-01T00:33:30.959815	{'type': 'issue', 'new': False, 'title': 'Controller profiles don\'t save deadzones nor "shaking" options', 'source': 'redmine', 'update': 3, 'issue': 11914, 'author': 'Billiard26'}

Recent 'pull_request_fifoci_status' events

2019-12-06T21:41:27.517679	{'type': 'pull_request_fifoci_status', 'hash': '8fa12028d58be5f2e3e86fe5abc4401b512e995e', 'pr': 8268, 'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'service': 'pr-fifoci-ogl-lin-mesa'}
2019-12-06T21:39:30.614590	{'type': 'pull_request_fifoci_status', 'hash': '8fa12028d58be5f2e3e86fe5abc4401b512e995e', 'pr': 8268, 'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'service': 'pr-fifoci-sw-lin-mesa'}
2019-12-06T15:10:18.454148	{'type': 'pull_request_fifoci_status', 'hash': '81edcca8db0bbbe9904956d7038bd1a2abdd9a87', 'pr': 8514, 'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'service': 'pr-fifoci-ogl-lin-mesa'}
2019-12-06T15:06:36.249418	{'type': 'pull_request_fifoci_status', 'hash': '81edcca8db0bbbe9904956d7038bd1a2abdd9a87', 'pr': 8514, 'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'service': 'pr-fifoci-sw-lin-mesa'}
2019-12-06T15:04:33.341117	{'type': 'pull_request_fifoci_status', 'hash': 'cbfacc41bab03f0171981a64fe90949bc2456d3e', 'pr': 8514, 'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'service': 'pr-fifoci-ogl-lin-mesa'}
2019-12-06T15:02:37.382618	{'type': 'pull_request_fifoci_status', 'hash': 'cbfacc41bab03f0171981a64fe90949bc2456d3e', 'pr': 8514, 'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'service': 'pr-fifoci-sw-lin-mesa'}
2019-12-05T19:08:52.354913	{'type': 'pull_request_fifoci_status', 'hash': 'b3b208e05ac15f0668a7bed8c2f9ee3fc1874fd2', 'pr': 8510, 'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'service': 'pr-fifoci-sw-lin-mesa'}
2019-12-05T19:05:31.371277	{'type': 'pull_request_fifoci_status', 'hash': 'b3b208e05ac15f0668a7bed8c2f9ee3fc1874fd2', 'pr': 8510, 'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'service': 'pr-fifoci-ogl-lin-mesa'}
2019-12-05T17:12:12.999247	{'type': 'pull_request_fifoci_status', 'hash': '2c9ec6cb8abba5a4dfd7a3792b0d866ed4898118', 'pr': 8513, 'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'service': 'pr-fifoci-ogl-lin-mesa'}
2019-12-05T17:10:14.147226	{'type': 'pull_request_fifoci_status', 'hash': '2c9ec6cb8abba5a4dfd7a3792b0d866ed4898118', 'pr': 8513, 'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'service': 'pr-fifoci-sw-lin-mesa'}
2019-12-05T16:04:21.677904	{'type': 'pull_request_fifoci_status', 'hash': '10f76746515a9a7bd8122f40c33b65813aa17b38', 'pr': 8512, 'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'service': 'pr-fifoci-ogl-lin-mesa'}
2019-12-05T16:00:25.582767	{'type': 'pull_request_fifoci_status', 'hash': '10f76746515a9a7bd8122f40c33b65813aa17b38', 'pr': 8512, 'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'service': 'pr-fifoci-sw-lin-mesa'}
2019-12-05T15:58:36.477965	{'type': 'pull_request_fifoci_status', 'hash': 'b74b53a2f9cb420f1be34dba7c967be3cba42837', 'pr': 8512, 'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'service': 'pr-fifoci-ogl-lin-mesa'}
2019-12-05T15:56:28.183273	{'type': 'pull_request_fifoci_status', 'hash': 'b74b53a2f9cb420f1be34dba7c967be3cba42837', 'pr': 8512, 'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'service': 'pr-fifoci-sw-lin-mesa'}
2019-12-05T14:29:09.099404	{'type': 'pull_request_fifoci_status', 'hash': '1f46a6a64bfaade4550276879b475511fd11f136', 'pr': 8511, 'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'service': 'pr-fifoci-ogl-lin-mesa'}
2019-12-05T14:25:16.538886	{'type': 'pull_request_fifoci_status', 'hash': '1f46a6a64bfaade4550276879b475511fd11f136', 'pr': 8511, 'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'service': 'pr-fifoci-sw-lin-mesa'}
2019-12-05T14:23:21.326200	{'type': 'pull_request_fifoci_status', 'hash': 'f08d39e31185752b25eb09d8212998ce1452d5f9', 'pr': 8511, 'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'service': 'pr-fifoci-ogl-lin-mesa'}
2019-12-05T14:21:12.481672	{'type': 'pull_request_fifoci_status', 'hash': 'f08d39e31185752b25eb09d8212998ce1452d5f9', 'pr': 8511, 'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'service': 'pr-fifoci-sw-lin-mesa'}
2019-12-05T08:14:01.942359	{'type': 'pull_request_fifoci_status', 'hash': '69691d593793c738769fa22643cdca86e9e60ec2', 'pr': 8510, 'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'service': 'pr-fifoci-sw-lin-mesa'}
2019-12-05T08:10:24.590894	{'type': 'pull_request_fifoci_status', 'hash': 'ba8497529a2a75bd6a4c8fb97009036b1dbc5bf8', 'pr': 8510, 'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'service': 'pr-fifoci-sw-lin-mesa'}
2019-12-05T08:07:42.126868	{'type': 'pull_request_fifoci_status', 'hash': '69691d593793c738769fa22643cdca86e9e60ec2', 'pr': 8510, 'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'service': 'pr-fifoci-ogl-lin-mesa'}
2019-12-05T08:05:38.702224	{'type': 'pull_request_fifoci_status', 'hash': 'ba8497529a2a75bd6a4c8fb97009036b1dbc5bf8', 'pr': 8510, 'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'service': 'pr-fifoci-ogl-lin-mesa'}
2019-12-05T05:29:00.895696	{'type': 'pull_request_fifoci_status', 'hash': 'f29730944fbcda8207504b8ee8a22907e754b5ef', 'pr': 8509, 'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'service': 'pr-fifoci-ogl-lin-mesa'}
2019-12-05T05:25:18.429494	{'type': 'pull_request_fifoci_status', 'hash': 'f29730944fbcda8207504b8ee8a22907e754b5ef', 'pr': 8509, 'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'service': 'pr-fifoci-sw-lin-mesa'}
2019-12-05T05:23:14.296613	{'type': 'pull_request_fifoci_status', 'hash': 'c46b53d88e5d06140521559906254619bc2cfe67', 'pr': 8509, 'source': 'buildbot', 'repo': 'dolphin-emu/dolphin', 'service': 'pr-fifoci-ogl-lin-mesa'}

Recent 'raw_bb_hook' events

2019-12-06T21:41:27.464482	{'type': 'raw_bb_hook', 'raw': {'properties': {'builddir': ['/home/buildslave/slave/pr-fifoci-ogl-lin-mesa', 'Worker'], 'slavename': ['hive', 'Worker (deprecated)'], 'headrev': ['8fa12028d58be5f2e3e86fe5abc4401b512e995e', 'Trigger'], 'shortrev': ['8fa120', 'Trigger'], 'pr_id': [8268, 'Trigger'], 'buildername': ['pr-fifoci-ogl-lin-mesa', 'Builder'], 'repo': ['dolphin-emu/dolphin', 'Trigger'], 'got_revision': ['8fa12028d58be5f2e3e86fe5abc4401b512e995e', 'GitNoBranch'], 'revision': ['8fa12028d58be5f2e3e86fe5abc4401b512e995e', 'Build'], 'repository': ['', 'Build'], 'workername': ['hive', 'Worker'], 'branch': ['refs/pull/8268/head', 'Build'], 'scheduler': ['pr-fifoci-lin', 'Scheduler'], 'project': ['', 'Build'], 'buildnumber': [5727, 'Build'], 'codebase': ['', 'Build'], 'warnings-count': [6, 'WarningCountingShellCommand'], 'branchname': ['pr-8268', 'Trigger']}, 'buildrequestid': 123933, 'builderid': 30, 'results': 0, 'builder': {'name': 'pr-fifoci-ogl-lin-mesa', 'builderid': 30, 'tags': [], 'description': None, 'masterids': [1]}, 'buildrequest': {'submitted_at': 1575667911, 'buildrequestid': 123933, 'claimed_at': 1575667913, 'results': -1, 'buildsetid': 36324, 'claimed_by_masterid': 1, 'priority': 0, 'complete': False, 'complete_at': None, 'waited_for': False, 'claimed': True, 'builderid': 30}, 'number': 5727, 'complete_at': 1575668487, 'complete': True, 'state_string': 'build successful', 'buildid': 86749, 'masterid': 1, 'started_at': 1575667913, 'url': 'https://buildbot.dolphin-emu.org/#builders/30/builds/5727', 'workerid': 6, 'buildset': {'parent_relationship': 'Triggered from', 'bsid': 36324, 'reason': "The Triggerable scheduler named 'pr-fifoci-lin' triggered this build", 'complete': False, 'submitted_at': 1575667911, 'parent_buildid': 86748, 'results': -1, 'complete_at': None, 'sourcestamps': [{'branch': 'refs/pull/8268/head', 'created_at': 1575667912, 'ssid': 9807, 'project': '', 'repository': '', 'codebase': '', 'patch': None, 'revision': '8fa12028d58be5f2e3e86fe5abc4401b512e995e'}], 'external_idstring': None}}, 'source': 'webserver'}
2019-12-06T21:39:30.561668	{'type': 'raw_bb_hook', 'raw': {'properties': {'builddir': ['/home/buildslave/slave/pr-fifoci-sw-lin-mesa', 'Worker'], 'slavename': ['hive', 'Worker (deprecated)'], 'headrev': ['8fa12028d58be5f2e3e86fe5abc4401b512e995e', 'Trigger'], 'shortrev': ['8fa120', 'Trigger'], 'pr_id': [8268, 'Trigger'], 'buildername': ['pr-fifoci-sw-lin-mesa', 'Builder'], 'repo': ['dolphin-emu/dolphin', 'Trigger'], 'got_revision': ['8fa12028d58be5f2e3e86fe5abc4401b512e995e', 'GitNoBranch'], 'revision': ['8fa12028d58be5f2e3e86fe5abc4401b512e995e', 'Build'], 'repository': ['', 'Build'], 'workername': ['hive', 'Worker'], 'branch': ['refs/pull/8268/head', 'Build'], 'scheduler': ['pr-fifoci-lin', 'Scheduler'], 'project': ['', 'Build'], 'buildnumber': [5727, 'Build'], 'codebase': ['', 'Build'], 'warnings-count': [6, 'WarningCountingShellCommand'], 'branchname': ['pr-8268', 'Trigger']}, 'buildrequestid': 123931, 'builderid': 17, 'results': 0, 'builder': {'name': 'pr-fifoci-sw-lin-mesa', 'builderid': 17, 'tags': [], 'description': None, 'masterids': [1]}, 'buildrequest': {'submitted_at': 1575667911, 'buildrequestid': 123931, 'claimed_at': 1575667914, 'results': -1, 'buildsetid': 36324, 'claimed_by_masterid': 1, 'priority': 0, 'complete': False, 'complete_at': None, 'waited_for': False, 'claimed': True, 'builderid': 17}, 'number': 5727, 'complete_at': 1575668371, 'complete': True, 'state_string': 'build successful', 'buildid': 86751, 'masterid': 1, 'started_at': 1575667914, 'url': 'https://buildbot.dolphin-emu.org/#builders/17/builds/5727', 'workerid': 6, 'buildset': {'parent_relationship': 'Triggered from', 'bsid': 36324, 'reason': "The Triggerable scheduler named 'pr-fifoci-lin' triggered this build", 'complete': False, 'submitted_at': 1575667911, 'parent_buildid': 86748, 'results': -1, 'complete_at': None, 'sourcestamps': [{'branch': 'refs/pull/8268/head', 'created_at': 1575667912, 'ssid': 9807, 'project': '', 'repository': '', 'codebase': '', 'patch': None, 'revision': '8fa12028d58be5f2e3e86fe5abc4401b512e995e'}], 'external_idstring': None}}, 'source': 'webserver'}
2019-12-06T21:39:17.977071	{'type': 'raw_bb_hook', 'raw': {'properties': {'baserev': ['5a5c46a8b15990e1e38636d017c28572e4370745', 'try build'], 'builddir': ['C:\\buildbot\\pr-win-dbg-x64', 'Worker'], 'slavename': ['windows', 'Worker (deprecated)'], 'headrev': ['8fa12028d58be5f2e3e86fe5abc4401b512e995e', 'try build'], 'shortrev': ['8fa120', 'try build'], 'pr_id': [8268, 'try build'], 'buildername': ['pr-win-dbg-x64', 'Builder'], 'repo': ['dolphin-emu/dolphin', 'try build'], 'got_revision': ['8fa12028d58be5f2e3e86fe5abc4401b512e995e', 'GitNoBranch'], 'revision': [None, 'Build'], 'repository': ['', 'Build'], 'workername': ['windows', 'Worker'], 'branch': ['refs/pull/8268/head', 'Build'], 'scheduler': ['pr', 'Scheduler'], 'project': ['', 'Build'], 'buildnumber': [6064, 'Build'], 'build_url': ['https://dl.dolphin-emu.org/prs/pr-8268-dolphin-latest-dbg-x64.7z', 'SetProperty'], 'codebase': ['', 'Build'], 'warnings-count': [0, 'WarningCountingShellCommand'], 'branchname': ['pr-8268', 'try build']}, 'buildrequestid': 123922, 'builderid': 7, 'results': 0, 'builder': {'name': 'pr-win-dbg-x64', 'builderid': 7, 'tags': [], 'description': None, 'masterids': [1]}, 'buildrequest': {'submitted_at': 1575667833, 'buildrequestid': 123922, 'claimed_at': 1575668148, 'results': -1, 'buildsetid': 36323, 'claimed_by_masterid': 1, 'priority': 0, 'complete': False, 'complete_at': None, 'waited_for': False, 'claimed': True, 'builderid': 7}, 'number': 6064, 'complete_at': 1575668358, 'complete': True, 'state_string': 'build successful', 'buildid': 86753, 'masterid': 1, 'started_at': 1575668149, 'url': 'https://buildbot.dolphin-emu.org/#builders/7/builds/6064', 'workerid': 4, 'buildset': {'parent_relationship': None, 'bsid': 36323, 'reason': "'try' job by user Central (on behalf of: Pokechu22)", 'complete': False, 'submitted_at': 1575667833, 'parent_buildid': None, 'results': -1, 'complete_at': None, 'sourcestamps': [{'branch': 'refs/pull/8268/head', 'created_at': 1572209916, 'ssid': 9376, 'project': '', 'repository': '', 'codebase': '', 'patch': None, 'revision': None}], 'external_idstring': '8268-8fa120'}}, 'source': 'webserver'}
2019-12-06T21:35:49.007272	{'type': 'raw_bb_hook', 'raw': {'properties': {'baserev': ['5a5c46a8b15990e1e38636d017c28572e4370745', 'try build'], 'pr_id': [8268, 'try build'], 'slavename': ['windows', 'Worker (deprecated)'], 'headrev': ['8fa12028d58be5f2e3e86fe5abc4401b512e995e', 'try build'], 'shortrev': ['8fa120', 'try build'], 'branch': ['refs/pull/8268/head', 'Build'], 'buildername': ['pr-win-dbg-x64', 'Builder'], 'repo': ['dolphin-emu/dolphin', 'try build'], 'revision': [None, 'Build'], 'workername': ['windows', 'Worker'], 'repository': ['', 'Build'], 'scheduler': ['pr', 'Scheduler'], 'project': ['', 'Build'], 'buildnumber': [6064, 'Build'], 'codebase': ['', 'Build'], 'branchname': ['pr-8268', 'try build']}, 'buildrequestid': 123922, 'builderid': 7, 'results': None, 'builder': {'name': 'pr-win-dbg-x64', 'builderid': 7, 'tags': [], 'description': None, 'masterids': [1]}, 'buildrequest': {'submitted_at': 1575667833, 'buildrequestid': 123922, 'claimed_at': 1575668148, 'results': -1, 'buildsetid': 36323, 'claimed_by_masterid': 1, 'priority': 0, 'complete': False, 'complete_at': None, 'waited_for': False, 'claimed': True, 'builderid': 7}, 'number': 6064, 'complete_at': None, 'complete': False, 'state_string': 'starting', 'buildid': 86753, 'masterid': 1, 'started_at': 1575668149, 'url': 'https://buildbot.dolphin-emu.org/#builders/7/builds/6064', 'workerid': 4, 'buildset': {'parent_relationship': None, 'bsid': 36323, 'reason': "'try' job by user Central (on behalf of: Pokechu22)", 'complete': False, 'submitted_at': 1575667833, 'parent_buildid': None, 'results': -1, 'complete_at': None, 'sourcestamps': [{'branch': 'refs/pull/8268/head', 'created_at': 1572209916, 'ssid': 9376, 'project': '', 'repository': '', 'codebase': '', 'patch': None, 'revision': None}], 'external_idstring': '8268-8fa120'}}, 'source': 'webserver'}
2019-12-06T21:35:48.870485	{'type': 'raw_bb_hook', 'raw': {'properties': {'baserev': ['5a5c46a8b15990e1e38636d017c28572e4370745', 'try build'], 'builddir': ['C:\\buildbot\\pr-win-x64', 'Worker'], 'slavename': ['windows', 'Worker (deprecated)'], 'headrev': ['8fa12028d58be5f2e3e86fe5abc4401b512e995e', 'try build'], 'shortrev': ['8fa120', 'try build'], 'pr_id': [8268, 'try build'], 'buildername': ['pr-win-x64', 'Builder'], 'repo': ['dolphin-emu/dolphin', 'try build'], 'got_revision': ['8fa12028d58be5f2e3e86fe5abc4401b512e995e', 'GitNoBranch'], 'revision': [None, 'Build'], 'repository': ['', 'Build'], 'workername': ['windows', 'Worker'], 'branch': ['refs/pull/8268/head', 'Build'], 'scheduler': ['pr', 'Scheduler'], 'project': ['', 'Build'], 'buildnumber': [6084, 'Build'], 'build_url': ['https://dl.dolphin-emu.org/prs/pr-8268-dolphin-latest-x64.7z', 'SetProperty'], 'codebase': ['', 'Build'], 'warnings-count': [0, 'WarningCountingShellCommand'], 'branchname': ['pr-8268', 'try build']}, 'buildrequestid': 123924, 'builderid': 20, 'results': 0, 'builder': {'name': 'pr-win-x64', 'builderid': 20, 'tags': [], 'description': None, 'masterids': [1]}, 'buildrequest': {'submitted_at': 1575667833, 'buildrequestid': 123924, 'claimed_at': 1575667834, 'results': -1, 'buildsetid': 36323, 'claimed_by_masterid': 1, 'priority': 0, 'complete': False, 'complete_at': None, 'waited_for': False, 'claimed': True, 'builderid': 20}, 'number': 6084, 'complete_at': 1575668149, 'complete': True, 'state_string': 'build successful', 'buildid': 86746, 'masterid': 1, 'started_at': 1575667834, 'url': 'https://buildbot.dolphin-emu.org/#builders/20/builds/6084', 'workerid': 4, 'buildset': {'parent_relationship': None, 'bsid': 36323, 'reason': "'try' job by user Central (on behalf of: Pokechu22)", 'complete': False, 'submitted_at': 1575667833, 'parent_buildid': None, 'results': -1, 'complete_at': None, 'sourcestamps': [{'branch': 'refs/pull/8268/head', 'created_at': 1572209916, 'ssid': 9376, 'project': '', 'repository': '', 'codebase': '', 'patch': None, 'revision': None}], 'external_idstring': '8268-8fa120'}}, 'source': 'webserver'}
2019-12-06T21:35:16.443004	{'type': 'raw_bb_hook', 'raw': {'properties': {'baserev': ['5a5c46a8b15990e1e38636d017c28572e4370745', 'try build'], 'builddir': ['/Users/osxguest/buildslave/pr-osx-x64', 'Worker'], 'slavename': ['osx', 'Worker (deprecated)'], 'headrev': ['8fa12028d58be5f2e3e86fe5abc4401b512e995e', 'try build'], 'shortrev': ['8fa120', 'try build'], 'pr_id': [8268, 'try build'], 'buildername': ['pr-osx-x64', 'Builder'], 'repo': ['dolphin-emu/dolphin', 'try build'], 'got_revision': ['8fa12028d58be5f2e3e86fe5abc4401b512e995e', 'GitNoBranch'], 'revision': [None, 'Build'], 'repository': ['', 'Build'], 'workername': ['osx', 'Worker'], 'branch': ['refs/pull/8268/head', 'Build'], 'scheduler': ['pr', 'Scheduler'], 'project': ['', 'Build'], 'buildnumber': [5978, 'Build'], 'codebase': ['', 'Build'], 'warnings-count': [26, 'WarningCountingShellCommand'], 'branchname': ['pr-8268', 'try build']}, 'buildrequestid': 123927, 'builderid': 33, 'results': 0, 'builder': {'name': 'pr-osx-x64', 'builderid': 33, 'tags': [], 'description': None, 'masterids': [1]}, 'buildrequest': {'submitted_at': 1575667833, 'buildrequestid': 123927, 'claimed_at': 1575667834, 'results': -1, 'buildsetid': 36323, 'claimed_by_masterid': 1, 'priority': 0, 'complete': False, 'complete_at': None, 'waited_for': False, 'claimed': True, 'builderid': 33}, 'number': 5978, 'complete_at': 1575668116, 'complete': True, 'state_string': 'build successful', 'buildid': 86743, 'masterid': 1, 'started_at': 1575667834, 'url': 'https://buildbot.dolphin-emu.org/#builders/33/builds/5978', 'workerid': 1, 'buildset': {'parent_relationship': None, 'bsid': 36323, 'reason': "'try' job by user Central (on behalf of: Pokechu22)", 'complete': False, 'submitted_at': 1575667833, 'parent_buildid': None, 'results': -1, 'complete_at': None, 'sourcestamps': [{'branch': 'refs/pull/8268/head', 'created_at': 1572209916, 'ssid': 9376, 'project': '', 'repository': '', 'codebase': '', 'patch': None, 'revision': None}], 'external_idstring': '8268-8fa120'}}, 'source': 'webserver'}
2019-12-06T21:34:58.777246	{'type': 'raw_bb_hook', 'raw': {'properties': {'baserev': ['5a5c46a8b15990e1e38636d017c28572e4370745', 'try build'], 'builddir': ['/home/buildslave/worker/pr-android', 'Worker'], 'slavename': ['ubuntu', 'Worker (deprecated)'], 'headrev': ['8fa12028d58be5f2e3e86fe5abc4401b512e995e', 'try build'], 'shortrev': ['8fa120', 'try build'], 'pr_id': [8268, 'try build'], 'buildername': ['pr-android', 'Builder'], 'repo': ['dolphin-emu/dolphin', 'try build'], 'got_revision': ['8fa12028d58be5f2e3e86fe5abc4401b512e995e', 'GitNoBranch'], 'revision': [None, 'Build'], 'repository': ['', 'Build'], 'workername': ['ubuntu', 'Worker'], 'branch': ['refs/pull/8268/head', 'Build'], 'scheduler': ['pr', 'Scheduler'], 'project': ['', 'Build'], 'buildnumber': [6029, 'Build'], 'codebase': ['', 'Build'], 'branchname': ['pr-8268', 'try build']}, 'buildrequestid': 123923, 'builderid': 8, 'results': 0, 'builder': {'name': 'pr-android', 'builderid': 8, 'tags': [], 'description': None, 'masterids': [1]}, 'buildrequest': {'submitted_at': 1575667833, 'buildrequestid': 123923, 'claimed_at': 1575667914, 'results': -1, 'buildsetid': 36323, 'claimed_by_masterid': 1, 'priority': 0, 'complete': False, 'complete_at': None, 'waited_for': False, 'claimed': True, 'builderid': 8}, 'number': 6029, 'complete_at': 1575668099, 'complete': True, 'state_string': 'build successful', 'buildid': 86750, 'masterid': 1, 'started_at': 1575667914, 'url': 'https://buildbot.dolphin-emu.org/#builders/8/builds/6029', 'workerid': 9, 'buildset': {'parent_relationship': None, 'bsid': 36323, 'reason': "'try' job by user Central (on behalf of: Pokechu22)", 'complete': False, 'submitted_at': 1575667833, 'parent_buildid': None, 'results': -1, 'complete_at': None, 'sourcestamps': [{'branch': 'refs/pull/8268/head', 'created_at': 1572209916, 'ssid': 9376, 'project': '', 'repository': '', 'codebase': '', 'patch': None, 'revision': None}], 'external_idstring': '8268-8fa120'}}, 'source': 'webserver'}
2019-12-06T21:34:11.805965	{'type': 'raw_bb_hook', 'raw': {'properties': {'baserev': ['5a5c46a8b15990e1e38636d017c28572e4370745', 'try build'], 'builddir': ['/home/delroth/buildslave/pr-deb-dbg-x64', 'Worker'], 'slavename': ['debian', 'Worker (deprecated)'], 'headrev': ['8fa12028d58be5f2e3e86fe5abc4401b512e995e', 'try build'], 'shortrev': ['8fa120', 'try build'], 'pr_id': [8268, 'try build'], 'buildername': ['pr-deb-dbg-x64', 'Builder'], 'repo': ['dolphin-emu/dolphin', 'try build'], 'got_revision': ['8fa12028d58be5f2e3e86fe5abc4401b512e995e', 'GitNoBranch'], 'revision': [None, 'Build'], 'repository': ['', 'Build'], 'workername': ['debian', 'Worker'], 'branch': ['refs/pull/8268/head', 'Build'], 'scheduler': ['pr', 'Scheduler'], 'project': ['', 'Build'], 'buildnumber': [5475, 'Build'], 'codebase': ['', 'Build'], 'warnings-count': [6, 'WarningCountingShellCommand'], 'branchname': ['pr-8268', 'try build']}, 'buildrequestid': 123925, 'builderid': 21, 'results': 0, 'builder': {'name': 'pr-deb-dbg-x64', 'builderid': 21, 'tags': [], 'description': None, 'masterids': [1]}, 'buildrequest': {'submitted_at': 1575667833, 'buildrequestid': 123925, 'claimed_at': 1575667942, 'results': -1, 'buildsetid': 36323, 'claimed_by_masterid': 1, 'priority': 0, 'complete': False, 'complete_at': None, 'waited_for': False, 'claimed': True, 'builderid': 21}, 'number': 5475, 'complete_at': 1575668052, 'complete': True, 'state_string': 'build successful', 'buildid': 86752, 'masterid': 1, 'started_at': 1575667942, 'url': 'https://buildbot.dolphin-emu.org/#builders/21/builds/5475', 'workerid': 12, 'buildset': {'parent_relationship': None, 'bsid': 36323, 'reason': "'try' job by user Central (on behalf of: Pokechu22)", 'complete': False, 'submitted_at': 1575667833, 'parent_buildid': None, 'results': -1, 'complete_at': None, 'sourcestamps': [{'branch': 'refs/pull/8268/head', 'created_at': 1572209916, 'ssid': 9376, 'project': '', 'repository': '', 'codebase': '', 'patch': None, 'revision': None}], 'external_idstring': '8268-8fa120'}}, 'source': 'webserver'}
2019-12-06T21:32:22.362084	{'type': 'raw_bb_hook', 'raw': {'properties': {'baserev': ['5a5c46a8b15990e1e38636d017c28572e4370745', 'try build'], 'pr_id': [8268, 'try build'], 'slavename': ['debian', 'Worker (deprecated)'], 'headrev': ['8fa12028d58be5f2e3e86fe5abc4401b512e995e', 'try build'], 'shortrev': ['8fa120', 'try build'], 'branch': ['refs/pull/8268/head', 'Build'], 'buildername': ['pr-deb-dbg-x64', 'Builder'], 'repo': ['dolphin-emu/dolphin', 'try build'], 'revision': [None, 'Build'], 'workername': ['debian', 'Worker'], 'repository': ['', 'Build'], 'scheduler': ['pr', 'Scheduler'], 'project': ['', 'Build'], 'buildnumber': [5475, 'Build'], 'codebase': ['', 'Build'], 'branchname': ['pr-8268', 'try build']}, 'buildrequestid': 123925, 'builderid': 21, 'results': None, 'builder': {'name': 'pr-deb-dbg-x64', 'builderid': 21, 'tags': [], 'description': None, 'masterids': [1]}, 'buildrequest': {'submitted_at': 1575667833, 'buildrequestid': 123925, 'claimed_at': 1575667942, 'results': -1, 'buildsetid': 36323, 'claimed_by_masterid': 1, 'priority': 0, 'complete': False, 'complete_at': None, 'waited_for': False, 'claimed': True, 'builderid': 21}, 'number': 5475, 'complete_at': None, 'complete': False, 'state_string': 'starting', 'buildid': 86752, 'masterid': 1, 'started_at': 1575667942, 'url': 'https://buildbot.dolphin-emu.org/#builders/21/builds/5475', 'workerid': 12, 'buildset': {'parent_relationship': None, 'bsid': 36323, 'reason': "'try' job by user Central (on behalf of: Pokechu22)", 'complete': False, 'submitted_at': 1575667833, 'parent_buildid': None, 'results': -1, 'complete_at': None, 'sourcestamps': [{'branch': 'refs/pull/8268/head', 'created_at': 1572209916, 'ssid': 9376, 'project': '', 'repository': '', 'codebase': '', 'patch': None, 'revision': None}], 'external_idstring': '8268-8fa120'}}, 'source': 'webserver'}
2019-12-06T21:32:22.214387	{'type': 'raw_bb_hook', 'raw': {'properties': {'baserev': ['5a5c46a8b15990e1e38636d017c28572e4370745', 'try build'], 'builddir': ['/home/delroth/buildslave/pr-deb-x64', 'Worker'], 'slavename': ['debian', 'Worker (deprecated)'], 'headrev': ['8fa12028d58be5f2e3e86fe5abc4401b512e995e', 'try build'], 'shortrev': ['8fa120', 'try build'], 'pr_id': [8268, 'try build'], 'buildername': ['pr-deb-x64', 'Builder'], 'repo': ['dolphin-emu/dolphin', 'try build'], 'got_revision': ['8fa12028d58be5f2e3e86fe5abc4401b512e995e', 'GitNoBranch'], 'revision': [None, 'Build'], 'repository': ['', 'Build'], 'workername': ['debian', 'Worker'], 'branch': ['refs/pull/8268/head', 'Build'], 'scheduler': ['pr', 'Scheduler'], 'project': ['', 'Build'], 'buildnumber': [5493, 'Build'], 'codebase': ['', 'Build'], 'warnings-count': [6, 'WarningCountingShellCommand'], 'branchname': ['pr-8268', 'try build']}, 'buildrequestid': 123921, 'builderid': 6, 'results': 0, 'builder': {'name': 'pr-deb-x64', 'builderid': 6, 'tags': [], 'description': None, 'masterids': [1]}, 'buildrequest': {'submitted_at': 1575667833, 'buildrequestid': 123921, 'claimed_at': 1575667834, 'results': -1, 'buildsetid': 36323, 'claimed_by_masterid': 1, 'priority': 0, 'complete': False, 'complete_at': None, 'waited_for': False, 'claimed': True, 'builderid': 6}, 'number': 5493, 'complete_at': 1575667942, 'complete': True, 'state_string': 'build successful', 'buildid': 86745, 'masterid': 1, 'started_at': 1575667834, 'url': 'https://buildbot.dolphin-emu.org/#builders/6/builds/5493', 'workerid': 12, 'buildset': {'parent_relationship': None, 'bsid': 36323, 'reason': "'try' job by user Central (on behalf of: Pokechu22)", 'complete': False, 'submitted_at': 1575667833, 'parent_buildid': None, 'results': -1, 'complete_at': None, 'sourcestamps': [{'branch': 'refs/pull/8268/head', 'created_at': 1572209916, 'ssid': 9376, 'project': '', 'repository': '', 'codebase': '', 'patch': None, 'revision': None}], 'external_idstring': '8268-8fa120'}}, 'source': 'webserver'}
2019-12-06T21:31:54.352612	{'type': 'raw_bb_hook', 'raw': {'properties': {'pr_id': [8268, 'Trigger'], 'slavename': ['hive', 'Worker (deprecated)'], 'headrev': ['8fa12028d58be5f2e3e86fe5abc4401b512e995e', 'Trigger'], 'shortrev': ['8fa120', 'Trigger'], 'branch': ['refs/pull/8268/head', 'Build'], 'buildername': ['pr-fifoci-sw-lin-mesa', 'Builder'], 'repo': ['dolphin-emu/dolphin', 'Trigger'], 'revision': ['8fa12028d58be5f2e3e86fe5abc4401b512e995e', 'Build'], 'workername': ['hive', 'Worker'], 'repository': ['', 'Build'], 'scheduler': ['pr-fifoci-lin', 'Scheduler'], 'project': ['', 'Build'], 'buildnumber': [5727, 'Build'], 'codebase': ['', 'Build'], 'branchname': ['pr-8268', 'Trigger']}, 'buildrequestid': 123931, 'builderid': 17, 'results': None, 'builder': {'name': 'pr-fifoci-sw-lin-mesa', 'builderid': 17, 'tags': [], 'description': None, 'masterids': [1]}, 'buildrequest': {'submitted_at': 1575667911, 'buildrequestid': 123931, 'claimed_at': 1575667914, 'results': -1, 'buildsetid': 36324, 'claimed_by_masterid': 1, 'priority': 0, 'complete': False, 'complete_at': None, 'waited_for': False, 'claimed': True, 'builderid': 17}, 'number': 5727, 'complete_at': None, 'complete': False, 'state_string': 'starting', 'buildid': 86751, 'masterid': 1, 'started_at': 1575667914, 'url': 'https://buildbot.dolphin-emu.org/#builders/17/builds/5727', 'workerid': 6, 'buildset': {'parent_relationship': 'Triggered from', 'bsid': 36324, 'reason': "The Triggerable scheduler named 'pr-fifoci-lin' triggered this build", 'complete': False, 'submitted_at': 1575667911, 'parent_buildid': 86748, 'results': -1, 'complete_at': None, 'sourcestamps': [{'branch': 'refs/pull/8268/head', 'created_at': 1575667912, 'ssid': 9807, 'project': '', 'repository': '', 'codebase': '', 'patch': None, 'revision': '8fa12028d58be5f2e3e86fe5abc4401b512e995e'}], 'external_idstring': None}}, 'source': 'webserver'}
2019-12-06T21:31:54.254984	{'type': 'raw_bb_hook', 'raw': {'properties': {'baserev': ['5a5c46a8b15990e1e38636d017c28572e4370745', 'try build'], 'pr_id': [8268, 'try build'], 'slavename': ['ubuntu', 'Worker (deprecated)'], 'headrev': ['8fa12028d58be5f2e3e86fe5abc4401b512e995e', 'try build'], 'shortrev': ['8fa120', 'try build'], 'branch': ['refs/pull/8268/head', 'Build'], 'buildername': ['pr-android', 'Builder'], 'repo': ['dolphin-emu/dolphin', 'try build'], 'revision': [None, 'Build'], 'workername': ['ubuntu', 'Worker'], 'repository': ['', 'Build'], 'scheduler': ['pr', 'Scheduler'], 'project': ['', 'Build'], 'buildnumber': [6029, 'Build'], 'codebase': ['', 'Build'], 'branchname': ['pr-8268', 'try build']}, 'buildrequestid': 123923, 'builderid': 8, 'results': None, 'builder': {'name': 'pr-android', 'builderid': 8, 'tags': [], 'description': None, 'masterids': [1]}, 'buildrequest': {'submitted_at': 1575667833, 'buildrequestid': 123923, 'claimed_at': 1575667914, 'results': -1, 'buildsetid': 36323, 'claimed_by_masterid': 1, 'priority': 0, 'complete': False, 'complete_at': None, 'waited_for': False, 'claimed': True, 'builderid': 8}, 'number': 6029, 'complete_at': None, 'complete': False, 'state_string': 'starting', 'buildid': 86750, 'masterid': 1, 'started_at': 1575667914, 'url': 'https://buildbot.dolphin-emu.org/#builders/8/builds/6029', 'workerid': 9, 'buildset': {'parent_relationship': None, 'bsid': 36323, 'reason': "'try' job by user Central (on behalf of: Pokechu22)", 'complete': False, 'submitted_at': 1575667833, 'parent_buildid': None, 'results': -1, 'complete_at': None, 'sourcestamps': [{'branch': 'refs/pull/8268/head', 'created_at': 1572209916, 'ssid': 9376, 'project': '', 'repository': '', 'codebase': '', 'patch': None, 'revision': None}], 'external_idstring': '8268-8fa120'}}, 'source': 'webserver'}
2019-12-06T21:31:53.524528	{'type': 'raw_bb_hook', 'raw': {'properties': {'pr_id': [8268, 'Trigger'], 'slavename': ['hive', 'Worker (deprecated)'], 'headrev': ['8fa12028d58be5f2e3e86fe5abc4401b512e995e', 'Trigger'], 'shortrev': ['8fa120', 'Trigger'], 'branch': ['refs/pull/8268/head', 'Build'], 'buildername': ['pr-fifoci-ogl-lin-mesa', 'Builder'], 'repo': ['dolphin-emu/dolphin', 'Trigger'], 'revision': ['8fa12028d58be5f2e3e86fe5abc4401b512e995e', 'Build'], 'workername': ['hive', 'Worker'], 'repository': ['', 'Build'], 'scheduler': ['pr-fifoci-lin', 'Scheduler'], 'project': ['', 'Build'], 'buildnumber': [5727, 'Build'], 'codebase': ['', 'Build'], 'branchname': ['pr-8268', 'Trigger']}, 'buildrequestid': 123933, 'builderid': 30, 'results': None, 'builder': {'name': 'pr-fifoci-ogl-lin-mesa', 'builderid': 30, 'tags': [], 'description': None, 'masterids': [1]}, 'buildrequest': {'submitted_at': 1575667911, 'buildrequestid': 123933, 'claimed_at': 1575667913, 'results': -1, 'buildsetid': 36324, 'claimed_by_masterid': 1, 'priority': 0, 'complete': False, 'complete_at': None, 'waited_for': False, 'claimed': True, 'builderid': 30}, 'number': 5727, 'complete_at': None, 'complete': False, 'state_string': 'starting', 'buildid': 86749, 'masterid': 1, 'started_at': 1575667913, 'url': 'https://buildbot.dolphin-emu.org/#builders/30/builds/5727', 'workerid': 6, 'buildset': {'parent_relationship': 'Triggered from', 'bsid': 36324, 'reason': "The Triggerable scheduler named 'pr-fifoci-lin' triggered this build", 'complete': False, 'submitted_at': 1575667911, 'parent_buildid': 86748, 'results': -1, 'complete_at': None, 'sourcestamps': [{'branch': 'refs/pull/8268/head', 'created_at': 1575667912, 'ssid': 9807, 'project': '', 'repository': '', 'codebase': '', 'patch': None, 'revision': '8fa12028d58be5f2e3e86fe5abc4401b512e995e'}], 'external_idstring': None}}, 'source': 'webserver'}
2019-12-06T21:31:53.049159	{'type': 'raw_bb_hook', 'raw': {'properties': {'baserev': ['5a5c46a8b15990e1e38636d017c28572e4370745', 'try build'], 'builddir': ['/home/buildslave/worker/pr-ubu-x64', 'Worker'], 'slavename': ['ubuntu', 'Worker (deprecated)'], 'headrev': ['8fa12028d58be5f2e3e86fe5abc4401b512e995e', 'try build'], 'shortrev': ['8fa120', 'try build'], 'pr_id': [8268, 'try build'], 'buildername': ['pr-ubu-x64', 'Builder'], 'repo': ['dolphin-emu/dolphin', 'try build'], 'got_revision': ['8fa12028d58be5f2e3e86fe5abc4401b512e995e', 'GitNoBranch'], 'revision': [None, 'Build'], 'repository': ['', 'Build'], 'workername': ['ubuntu', 'Worker'], 'branch': ['refs/pull/8268/head', 'Build'], 'scheduler': ['pr', 'Scheduler'], 'project': ['', 'Build'], 'buildnumber': [6018, 'Build'], 'codebase': ['', 'Build'], 'warnings-count': [5, 'WarningCountingShellCommand'], 'branchname': ['pr-8268', 'try build']}, 'buildrequestid': 123920, 'builderid': 2, 'results': 0, 'builder': {'name': 'pr-ubu-x64', 'builderid': 2, 'tags': [], 'description': None, 'masterids': [1]}, 'buildrequest': {'submitted_at': 1575667833, 'buildrequestid': 123920, 'claimed_at': 1575667839, 'results': -1, 'buildsetid': 36323, 'claimed_by_masterid': 1, 'priority': 0, 'complete': False, 'complete_at': None, 'waited_for': False, 'claimed': True, 'builderid': 2}, 'number': 6018, 'complete_at': 1575667913, 'complete': True, 'state_string': 'build successful', 'buildid': 86748, 'masterid': 1, 'started_at': 1575667840, 'url': 'https://buildbot.dolphin-emu.org/#builders/2/builds/6018', 'workerid': 9, 'buildset': {'parent_relationship': None, 'bsid': 36323, 'reason': "'try' job by user Central (on behalf of: Pokechu22)", 'complete': False, 'submitted_at': 1575667833, 'parent_buildid': None, 'results': -1, 'complete_at': None, 'sourcestamps': [{'branch': 'refs/pull/8268/head', 'created_at': 1572209916, 'ssid': 9376, 'project': '', 'repository': '', 'codebase': '', 'patch': None, 'revision': None}], 'external_idstring': '8268-8fa120'}}, 'source': 'webserver'}
2019-12-06T21:31:50.025863	{'type': 'raw_bb_hook', 'raw': {'properties': {'baserev': ['5a5c46a8b15990e1e38636d017c28572e4370745', 'try build'], 'builddir': ['/usr/home/buildbot/freebsd/pr-freebsd-x64', 'Worker'], 'slavename': ['freebsd', 'Worker (deprecated)'], 'headrev': ['8fa12028d58be5f2e3e86fe5abc4401b512e995e', 'try build'], 'shortrev': ['8fa120', 'try build'], 'pr_id': [8268, 'try build'], 'buildername': ['pr-freebsd-x64', 'Builder'], 'repo': ['dolphin-emu/dolphin', 'try build'], 'got_revision': ['8fa12028d58be5f2e3e86fe5abc4401b512e995e', 'GitNoBranch'], 'revision': [None, 'Build'], 'repository': ['', 'Build'], 'workername': ['freebsd', 'Worker'], 'branch': ['refs/pull/8268/head', 'Build'], 'scheduler': ['pr', 'Scheduler'], 'project': ['', 'Build'], 'buildnumber': [6061, 'Build'], 'codebase': ['', 'Build'], 'warnings-count': [27, 'WarningCountingShellCommand'], 'branchname': ['pr-8268', 'try build']}, 'buildrequestid': 123928, 'builderid': 34, 'results': 0, 'builder': {'name': 'pr-freebsd-x64', 'builderid': 34, 'tags': [], 'description': None, 'masterids': [1]}, 'buildrequest': {'submitted_at': 1575667833, 'buildrequestid': 123928, 'claimed_at': 1575667834, 'results': -1, 'buildsetid': 36323, 'claimed_by_masterid': 1, 'priority': 0, 'complete': False, 'complete_at': None, 'waited_for': False, 'claimed': True, 'builderid': 34}, 'number': 6061, 'complete_at': 1575667910, 'complete': True, 'state_string': 'build successful', 'buildid': 86747, 'masterid': 1, 'started_at': 1575667834, 'url': 'https://buildbot.dolphin-emu.org/#builders/34/builds/6061', 'workerid': 8, 'buildset': {'parent_relationship': None, 'bsid': 36323, 'reason': "'try' job by user Central (on behalf of: Pokechu22)", 'complete': False, 'submitted_at': 1575667833, 'parent_buildid': None, 'results': -1, 'complete_at': None, 'sourcestamps': [{'branch': 'refs/pull/8268/head', 'created_at': 1572209916, 'ssid': 9376, 'project': '', 'repository': '', 'codebase': '', 'patch': None, 'revision': None}], 'external_idstring': '8268-8fa120'}}, 'source': 'webserver'}
2019-12-06T21:30:39.669675	{'type': 'raw_bb_hook', 'raw': {'properties': {'baserev': ['5a5c46a8b15990e1e38636d017c28572e4370745', 'try build'], 'pr_id': [8268, 'try build'], 'slavename': ['ubuntu', 'Worker (deprecated)'], 'headrev': ['8fa12028d58be5f2e3e86fe5abc4401b512e995e', 'try build'], 'shortrev': ['8fa120', 'try build'], 'branch': ['refs/pull/8268/head', 'Build'], 'buildername': ['pr-ubu-x64', 'Builder'], 'repo': ['dolphin-emu/dolphin', 'try build'], 'revision': [None, 'Build'], 'workername': ['ubuntu', 'Worker'], 'repository': ['', 'Build'], 'scheduler': ['pr', 'Scheduler'], 'project': ['', 'Build'], 'buildnumber': [6018, 'Build'], 'codebase': ['', 'Build'], 'branchname': ['pr-8268', 'try build']}, 'buildrequestid': 123920, 'builderid': 2, 'results': None, 'builder': {'name': 'pr-ubu-x64', 'builderid': 2, 'tags': [], 'description': None, 'masterids': [1]}, 'buildrequest': {'submitted_at': 1575667833, 'buildrequestid': 123920, 'claimed_at': 1575667839, 'results': -1, 'buildsetid': 36323, 'claimed_by_masterid': 1, 'priority': 0, 'complete': False, 'complete_at': None, 'waited_for': False, 'claimed': True, 'builderid': 2}, 'number': 6018, 'complete_at': None, 'complete': False, 'state_string': 'starting', 'buildid': 86748, 'masterid': 1, 'started_at': 1575667840, 'url': 'https://buildbot.dolphin-emu.org/#builders/2/builds/6018', 'workerid': 9, 'buildset': {'parent_relationship': None, 'bsid': 36323, 'reason': "'try' job by user Central (on behalf of: Pokechu22)", 'complete': False, 'submitted_at': 1575667833, 'parent_buildid': None, 'results': -1, 'complete_at': None, 'sourcestamps': [{'branch': 'refs/pull/8268/head', 'created_at': 1572209916, 'ssid': 9376, 'project': '', 'repository': '', 'codebase': '', 'patch': None, 'revision': None}], 'external_idstring': '8268-8fa120'}}, 'source': 'webserver'}
2019-12-06T21:30:39.566104	{'type': 'raw_bb_hook', 'raw': {'properties': {'baserev': ['5a5c46a8b15990e1e38636d017c28572e4370745', 'try build'], 'builddir': ['/home/buildslave/worker/lint', 'Worker'], 'slavename': ['ubuntu', 'Worker (deprecated)'], 'headrev': ['8fa12028d58be5f2e3e86fe5abc4401b512e995e', 'try build'], 'shortrev': ['8fa120', 'try build'], 'pr_id': [8268, 'try build'], 'buildername': ['lint', 'Builder'], 'repo': ['dolphin-emu/dolphin', 'try build'], 'got_revision': ['8fa12028d58be5f2e3e86fe5abc4401b512e995e', 'GitNoBranch'], 'revision': [None, 'Build'], 'repository': ['', 'Build'], 'workername': ['ubuntu', 'Worker'], 'branch': ['refs/pull/8268/head', 'Build'], 'scheduler': ['pr', 'Scheduler'], 'project': ['', 'Build'], 'buildnumber': [6013, 'Build'], 'codebase': ['', 'Build'], 'branchname': ['pr-8268', 'try build']}, 'buildrequestid': 123926, 'builderid': 22, 'results': 0, 'builder': {'name': 'lint', 'builderid': 22, 'tags': [], 'description': None, 'masterids': [1]}, 'buildrequest': {'submitted_at': 1575667833, 'buildrequestid': 123926, 'claimed_at': 1575667834, 'results': -1, 'buildsetid': 36323, 'claimed_by_masterid': 1, 'priority': 0, 'complete': False, 'complete_at': None, 'waited_for': False, 'claimed': True, 'builderid': 22}, 'number': 6013, 'complete_at': 1575667840, 'complete': True, 'state_string': 'build successful', 'buildid': 86744, 'masterid': 1, 'started_at': 1575667834, 'url': 'https://buildbot.dolphin-emu.org/#builders/22/builds/6013', 'workerid': 9, 'buildset': {'parent_relationship': None, 'bsid': 36323, 'reason': "'try' job by user Central (on behalf of: Pokechu22)", 'complete': False, 'submitted_at': 1575667833, 'parent_buildid': None, 'results': -1, 'complete_at': None, 'sourcestamps': [{'branch': 'refs/pull/8268/head', 'created_at': 1572209916, 'ssid': 9376, 'project': '', 'repository': '', 'codebase': '', 'patch': None, 'revision': None}], 'external_idstring': '8268-8fa120'}}, 'source': 'webserver'}
2019-12-06T21:30:34.584211	{'type': 'raw_bb_hook', 'raw': {'properties': {'baserev': ['5a5c46a8b15990e1e38636d017c28572e4370745', 'try build'], 'pr_id': [8268, 'try build'], 'slavename': ['freebsd', 'Worker (deprecated)'], 'headrev': ['8fa12028d58be5f2e3e86fe5abc4401b512e995e', 'try build'], 'shortrev': ['8fa120', 'try build'], 'branch': ['refs/pull/8268/head', 'Build'], 'buildername': ['pr-freebsd-x64', 'Builder'], 'repo': ['dolphin-emu/dolphin', 'try build'], 'revision': [None, 'Build'], 'workername': ['freebsd', 'Worker'], 'repository': ['', 'Build'], 'scheduler': ['pr', 'Scheduler'], 'project': ['', 'Build'], 'buildnumber': [6061, 'Build'], 'codebase': ['', 'Build'], 'branchname': ['pr-8268', 'try build']}, 'buildrequestid': 123928, 'builderid': 34, 'results': None, 'builder': {'name': 'pr-freebsd-x64', 'builderid': 34, 'tags': [], 'description': None, 'masterids': [1]}, 'buildrequest': {'submitted_at': 1575667833, 'buildrequestid': 123928, 'claimed_at': 1575667834, 'results': -1, 'buildsetid': 36323, 'claimed_by_masterid': 1, 'priority': 0, 'complete': False, 'complete_at': None, 'waited_for': False, 'claimed': True, 'builderid': 34}, 'number': 6061, 'complete_at': None, 'complete': False, 'state_string': 'starting', 'buildid': 86747, 'masterid': 1, 'started_at': 1575667834, 'url': 'https://buildbot.dolphin-emu.org/#builders/34/builds/6061', 'workerid': 8, 'buildset': {'parent_relationship': None, 'bsid': 36323, 'reason': "'try' job by user Central (on behalf of: Pokechu22)", 'complete': False, 'submitted_at': 1575667833, 'parent_buildid': None, 'results': -1, 'complete_at': None, 'sourcestamps': [{'branch': 'refs/pull/8268/head', 'created_at': 1572209916, 'ssid': 9376, 'project': '', 'repository': '', 'codebase': '', 'patch': None, 'revision': None}], 'external_idstring': '8268-8fa120'}}, 'source': 'webserver'}
2019-12-06T21:30:34.492146	{'type': 'raw_bb_hook', 'raw': {'properties': {'baserev': ['5a5c46a8b15990e1e38636d017c28572e4370745', 'try build'], 'pr_id': [8268, 'try build'], 'slavename': ['windows', 'Worker (deprecated)'], 'headrev': ['8fa12028d58be5f2e3e86fe5abc4401b512e995e', 'try build'], 'shortrev': ['8fa120', 'try build'], 'branch': ['refs/pull/8268/head', 'Build'], 'buildername': ['pr-win-x64', 'Builder'], 'repo': ['dolphin-emu/dolphin', 'try build'], 'revision': [None, 'Build'], 'workername': ['windows', 'Worker'], 'repository': ['', 'Build'], 'scheduler': ['pr', 'Scheduler'], 'project': ['', 'Build'], 'buildnumber': [6084, 'Build'], 'codebase': ['', 'Build'], 'branchname': ['pr-8268', 'try build']}, 'buildrequestid': 123924, 'builderid': 20, 'results': None, 'builder': {'name': 'pr-win-x64', 'builderid': 20, 'tags': [], 'description': None, 'masterids': [1]}, 'buildrequest': {'submitted_at': 1575667833, 'buildrequestid': 123924, 'claimed_at': 1575667834, 'results': -1, 'buildsetid': 36323, 'claimed_by_masterid': 1, 'priority': 0, 'complete': False, 'complete_at': None, 'waited_for': False, 'claimed': True, 'builderid': 20}, 'number': 6084, 'complete_at': None, 'complete': False, 'state_string': 'starting', 'buildid': 86746, 'masterid': 1, 'started_at': 1575667834, 'url': 'https://buildbot.dolphin-emu.org/#builders/20/builds/6084', 'workerid': 4, 'buildset': {'parent_relationship': None, 'bsid': 36323, 'reason': "'try' job by user Central (on behalf of: Pokechu22)", 'complete': False, 'submitted_at': 1575667833, 'parent_buildid': None, 'results': -1, 'complete_at': None, 'sourcestamps': [{'branch': 'refs/pull/8268/head', 'created_at': 1572209916, 'ssid': 9376, 'project': '', 'repository': '', 'codebase': '', 'patch': None, 'revision': None}], 'external_idstring': '8268-8fa120'}}, 'source': 'webserver'}
2019-12-06T21:30:34.443258	{'type': 'raw_bb_hook', 'raw': {'properties': {'baserev': ['5a5c46a8b15990e1e38636d017c28572e4370745', 'try build'], 'pr_id': [8268, 'try build'], 'slavename': ['debian', 'Worker (deprecated)'], 'headrev': ['8fa12028d58be5f2e3e86fe5abc4401b512e995e', 'try build'], 'shortrev': ['8fa120', 'try build'], 'branch': ['refs/pull/8268/head', 'Build'], 'buildername': ['pr-deb-x64', 'Builder'], 'repo': ['dolphin-emu/dolphin', 'try build'], 'revision': [None, 'Build'], 'workername': ['debian', 'Worker'], 'repository': ['', 'Build'], 'scheduler': ['pr', 'Scheduler'], 'project': ['', 'Build'], 'buildnumber': [5493, 'Build'], 'codebase': ['', 'Build'], 'branchname': ['pr-8268', 'try build']}, 'buildrequestid': 123921, 'builderid': 6, 'results': None, 'builder': {'name': 'pr-deb-x64', 'builderid': 6, 'tags': [], 'description': None, 'masterids': [1]}, 'buildrequest': {'submitted_at': 1575667833, 'buildrequestid': 123921, 'claimed_at': 1575667834, 'results': -1, 'buildsetid': 36323, 'claimed_by_masterid': 1, 'priority': 0, 'complete': False, 'complete_at': None, 'waited_for': False, 'claimed': True, 'builderid': 6}, 'number': 5493, 'complete_at': None, 'complete': False, 'state_string': 'starting', 'buildid': 86745, 'masterid': 1, 'started_at': 1575667834, 'url': 'https://buildbot.dolphin-emu.org/#builders/6/builds/5493', 'workerid': 12, 'buildset': {'parent_relationship': None, 'bsid': 36323, 'reason': "'try' job by user Central (on behalf of: Pokechu22)", 'complete': False, 'submitted_at': 1575667833, 'parent_buildid': None, 'results': -1, 'complete_at': None, 'sourcestamps': [{'branch': 'refs/pull/8268/head', 'created_at': 1572209916, 'ssid': 9376, 'project': '', 'repository': '', 'codebase': '', 'patch': None, 'revision': None}], 'external_idstring': '8268-8fa120'}}, 'source': 'webserver'}
2019-12-06T21:30:34.422661	{'type': 'raw_bb_hook', 'raw': {'properties': {'baserev': ['5a5c46a8b15990e1e38636d017c28572e4370745', 'try build'], 'pr_id': [8268, 'try build'], 'slavename': ['ubuntu', 'Worker (deprecated)'], 'headrev': ['8fa12028d58be5f2e3e86fe5abc4401b512e995e', 'try build'], 'shortrev': ['8fa120', 'try build'], 'branch': ['refs/pull/8268/head', 'Build'], 'buildername': ['lint', 'Builder'], 'repo': ['dolphin-emu/dolphin', 'try build'], 'revision': [None, 'Build'], 'workername': ['ubuntu', 'Worker'], 'repository': ['', 'Build'], 'scheduler': ['pr', 'Scheduler'], 'project': ['', 'Build'], 'buildnumber': [6013, 'Build'], 'codebase': ['', 'Build'], 'branchname': ['pr-8268', 'try build']}, 'buildrequestid': 123926, 'builderid': 22, 'results': None, 'builder': {'name': 'lint', 'builderid': 22, 'tags': [], 'description': None, 'masterids': [1]}, 'buildrequest': {'submitted_at': 1575667833, 'buildrequestid': 123926, 'claimed_at': 1575667834, 'results': -1, 'buildsetid': 36323, 'claimed_by_masterid': 1, 'priority': 0, 'complete': False, 'complete_at': None, 'waited_for': False, 'claimed': True, 'builderid': 22}, 'number': 6013, 'complete_at': None, 'complete': False, 'state_string': 'starting', 'buildid': 86744, 'masterid': 1, 'started_at': 1575667834, 'url': 'https://buildbot.dolphin-emu.org/#builders/22/builds/6013', 'workerid': 9, 'buildset': {'parent_relationship': None, 'bsid': 36323, 'reason': "'try' job by user Central (on behalf of: Pokechu22)", 'complete': False, 'submitted_at': 1575667833, 'parent_buildid': None, 'results': -1, 'complete_at': None, 'sourcestamps': [{'branch': 'refs/pull/8268/head', 'created_at': 1572209916, 'ssid': 9376, 'project': '', 'repository': '', 'codebase': '', 'patch': None, 'revision': None}], 'external_idstring': '8268-8fa120'}}, 'source': 'webserver'}
2019-12-06T21:30:34.394126	{'type': 'raw_bb_hook', 'raw': {'properties': {'baserev': ['5a5c46a8b15990e1e38636d017c28572e4370745', 'try build'], 'pr_id': [8268, 'try build'], 'slavename': ['osx', 'Worker (deprecated)'], 'headrev': ['8fa12028d58be5f2e3e86fe5abc4401b512e995e', 'try build'], 'shortrev': ['8fa120', 'try build'], 'branch': ['refs/pull/8268/head', 'Build'], 'buildername': ['pr-osx-x64', 'Builder'], 'repo': ['dolphin-emu/dolphin', 'try build'], 'revision': [None, 'Build'], 'workername': ['osx', 'Worker'], 'repository': ['', 'Build'], 'scheduler': ['pr', 'Scheduler'], 'project': ['', 'Build'], 'buildnumber': [5978, 'Build'], 'codebase': ['', 'Build'], 'branchname': ['pr-8268', 'try build']}, 'buildrequestid': 123927, 'builderid': 33, 'results': None, 'builder': {'name': 'pr-osx-x64', 'builderid': 33, 'tags': [], 'description': None, 'masterids': [1]}, 'buildrequest': {'submitted_at': 1575667833, 'buildrequestid': 123927, 'claimed_at': 1575667834, 'results': -1, 'buildsetid': 36323, 'claimed_by_masterid': 1, 'priority': 0, 'complete': False, 'complete_at': None, 'waited_for': False, 'claimed': True, 'builderid': 33}, 'number': 5978, 'complete_at': None, 'complete': False, 'state_string': 'starting', 'buildid': 86743, 'masterid': 1, 'started_at': 1575667834, 'url': 'https://buildbot.dolphin-emu.org/#builders/33/builds/5978', 'workerid': 1, 'buildset': {'parent_relationship': None, 'bsid': 36323, 'reason': "'try' job by user Central (on behalf of: Pokechu22)", 'complete': False, 'submitted_at': 1575667833, 'parent_buildid': None, 'results': -1, 'complete_at': None, 'sourcestamps': [{'branch': 'refs/pull/8268/head', 'created_at': 1572209916, 'ssid': 9376, 'project': '', 'repository': '', 'codebase': '', 'patch': None, 'revision': None}], 'external_idstring': '8268-8fa120'}}, 'source': 'webserver'}
2019-12-06T16:08:34.086240	{'type': 'raw_bb_hook', 'raw': {'properties': {'builddir': ['/home/buildslave/slave/fifoci-ogl-lin-mesa', 'Worker'], 'slavename': ['hive', 'Worker (deprecated)'], 'shortrev': ['5.0-11337', 'Trigger'], 'description': ['Merge pull request #8514 from lioncash/sview\n\nCommon/Network: Make StringToMacAddress use a string_view ', 'Change'], 'branch': [None, 'Build'], 'buildername': ['fifoci-ogl-lin-mesa', 'Builder'], 'got_revision': ['5a5c46a8b15990e1e38636d017c28572e4370745', 'GitNoBranch'], 'revision': ['5a5c46a8b15990e1e38636d017c28572e4370745', 'Build'], 'workername': ['hive', 'Worker'], 'repository': ['', 'Build'], 'scheduler': ['fifoci-lin', 'Scheduler'], 'project': ['', 'Build'], 'author': ['JosJuice', 'Change'], 'buildnumber': [2132, 'Build'], 'codebase': ['', 'Build'], 'warnings-count': [3, 'WarningCountingShellCommand'], 'branchname': ['master', 'Change']}, 'buildrequestid': 123915, 'builderid': 36, 'results': 0, 'builder': {'name': 'fifoci-ogl-lin-mesa', 'builderid': 36, 'tags': [], 'description': None, 'masterids': [1]}, 'buildrequest': {'submitted_at': 1575648089, 'buildrequestid': 123915, 'claimed_at': 1575648089, 'results': -1, 'buildsetid': 36318, 'claimed_by_masterid': 1, 'priority': 0, 'complete': False, 'complete_at': None, 'waited_for': False, 'claimed': True, 'builderid': 36}, 'number': 2132, 'complete_at': 1575648514, 'complete': True, 'state_string': 'build successful', 'buildid': 86739, 'masterid': 1, 'started_at': 1575648090, 'url': 'https://buildbot.dolphin-emu.org/#builders/36/builds/2132', 'workerid': 6, 'buildset': {'parent_relationship': 'Triggered from', 'bsid': 36318, 'reason': "The Triggerable scheduler named 'fifoci-lin' triggered this build", 'complete': False, 'submitted_at': 1575648089, 'parent_buildid': 86734, 'results': -1, 'complete_at': None, 'sourcestamps': [{'branch': None, 'created_at': 1575648071, 'ssid': 9806, 'project': '', 'repository': '', 'codebase': '', 'patch': None, 'revision': '5a5c46a8b15990e1e38636d017c28572e4370745'}], 'external_idstring': None}}, 'source': 'webserver'}
2019-12-06T16:06:44.970400	{'type': 'raw_bb_hook', 'raw': {'properties': {'builddir': ['/home/buildslave/slave/fifoci-sw-lin-mesa', 'Worker'], 'slavename': ['hive', 'Worker (deprecated)'], 'shortrev': ['5.0-11337', 'Trigger'], 'description': ['Merge pull request #8514 from lioncash/sview\n\nCommon/Network: Make StringToMacAddress use a string_view ', 'Change'], 'branch': [None, 'Build'], 'buildername': ['fifoci-sw-lin-mesa', 'Builder'], 'got_revision': ['5a5c46a8b15990e1e38636d017c28572e4370745', 'GitNoBranch'], 'revision': ['5a5c46a8b15990e1e38636d017c28572e4370745', 'Build'], 'workername': ['hive', 'Worker'], 'repository': ['', 'Build'], 'scheduler': ['fifoci-lin', 'Scheduler'], 'project': ['', 'Build'], 'author': ['JosJuice', 'Change'], 'buildnumber': [2125, 'Build'], 'codebase': ['', 'Build'], 'warnings-count': [3, 'WarningCountingShellCommand'], 'branchname': ['master', 'Change']}, 'buildrequestid': 123911, 'builderid': 16, 'results': 0, 'builder': {'name': 'fifoci-sw-lin-mesa', 'builderid': 16, 'tags': [], 'description': None, 'masterids': [1]}, 'buildrequest': {'submitted_at': 1575648089, 'buildrequestid': 123911, 'claimed_at': 1575648089, 'results': -1, 'buildsetid': 36318, 'claimed_by_masterid': 1, 'priority': 0, 'complete': False, 'complete_at': None, 'waited_for': False, 'claimed': True, 'builderid': 16}, 'number': 2125, 'complete_at': 1575648405, 'complete': True, 'state_string': 'build successful', 'buildid': 86740, 'masterid': 1, 'started_at': 1575648090, 'url': 'https://buildbot.dolphin-emu.org/#builders/16/builds/2125', 'workerid': 6, 'buildset': {'parent_relationship': 'Triggered from', 'bsid': 36318, 'reason': "The Triggerable scheduler named 'fifoci-lin' triggered this build", 'complete': False, 'submitted_at': 1575648089, 'parent_buildid': 86734, 'results': -1, 'complete_at': None, 'sourcestamps': [{'branch': None, 'created_at': 1575648071, 'ssid': 9806, 'project': '', 'repository': '', 'codebase': '', 'patch': None, 'revision': '5a5c46a8b15990e1e38636d017c28572e4370745'}], 'external_idstring': None}}, 'source': 'webserver'}
2019-12-06T16:05:19.688353	{'type': 'raw_bb_hook', 'raw': {'properties': {'builddir': ['C:\\buildbot\\debug-win-x64', 'Worker'], 'slavename': ['windows', 'Worker (deprecated)'], 'description': ['Merge pull request #8514 from lioncash/sview\n\nCommon/Network: Make StringToMacAddress use a string_view ', 'Change'], 'shortrev': ['5.0-11337', 'Change'], 'branch': [None, 'Build'], 'buildername': ['debug-win-x64', 'Builder'], 'got_revision': ['5a5c46a8b15990e1e38636d017c28572e4370745', 'GitNoBranch'], 'revision': ['5a5c46a8b15990e1e38636d017c28572e4370745', 'Build'], 'workername': ['windows', 'Worker'], 'repository': ['', 'Build'], 'scheduler': ['win64-debug', 'Scheduler'], 'project': ['', 'Build'], 'author': ['JosJuice', 'Change'], 'buildnumber': [2073, 'Build'], 'build_url': ['https://dl.dolphin-emu.org/builds/dolphin-master-5.0-11337-dbg-x64.7z', 'SetProperty'], 'codebase': ['', 'Build'], 'warnings-count': [0, 'WarningCountingShellCommand'], 'branchname': ['master', 'Change']}, 'buildrequestid': 123918, 'builderid': 25, 'results': 0, 'builder': {'name': 'debug-win-x64', 'builderid': 25, 'tags': [], 'description': None, 'masterids': [1]}, 'buildrequest': {'submitted_at': 1575648216, 'buildrequestid': 123918, 'claimed_at': 1575648216, 'results': -1, 'buildsetid': 36321, 'claimed_by_masterid': 1, 'priority': 0, 'complete': False, 'complete_at': None, 'waited_for': False, 'claimed': True, 'builderid': 25}, 'number': 2073, 'complete_at': 1575648320, 'complete': True, 'state_string': 'build successful', 'buildid': 86742, 'masterid': 1, 'started_at': 1575648217, 'url': 'https://buildbot.dolphin-emu.org/#builders/25/builds/2073', 'workerid': 4, 'buildset': {'parent_relationship': None, 'bsid': 36321, 'reason': 'downstream', 'complete': False, 'submitted_at': 1575648216, 'parent_buildid': None, 'results': -1, 'complete_at': None, 'sourcestamps': [{'branch': None, 'created_at': 1575648071, 'ssid': 9806, 'project': '', 'repository': '', 'codebase': '', 'patch': None, 'revision': '5a5c46a8b15990e1e38636d017c28572e4370745'}], 'external_idstring': None}}, 'source': 'webserver'}

Recent 'raw_gh_hook' events

2019-12-07T10:54:53.201079	{'gh_type': 'issue_comment', 'type': 'raw_gh_hook', 'raw': {'action': 'created', 'repository': {'fork': False, 'has_wiki': True, 'mirror_url': None, 'open_issues_count': 171, 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'forks': 1330, 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'html_url': 'https://github.com/dolphin-emu/dolphin', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'open_issues': 171, 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'language': 'C++', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'default_branch': 'master', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'watchers_count': 5799, 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'name': 'dolphin', 'size': 386668, 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'has_pages': False, 'has_issues': False, 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'disabled': False, 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'stargazers_count': 5799, 'created_at': '2013-07-22T09:07:57Z', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'archived': False, 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'full_name': 'dolphin-emu/dolphin', 'updated_at': '2019-12-06T19:51:14Z', 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'private': False, 'forks_count': 1330, 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'has_projects': False, 'owner': {'type': 'Organization', 'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'html_url': 'https://github.com/dolphin-emu', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'id': 5050316, 'site_admin': False, 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'url': 'https://api.github.com/users/dolphin-emu', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}'}, 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'has_downloads': True, 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'watchers': 5799, 'license': {'name': 'GNU General Public License v2.0', 'node_id': 'MDc6TGljZW5zZTg=', 'spdx_id': 'GPL-2.0', 'key': 'gpl-2.0', 'url': 'https://api.github.com/licenses/gpl-2.0'}, 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'homepage': 'https://dolphin-emu.org/', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'id': 11577304, 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'pushed_at': '2019-12-06T21:30:29Z', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}'}, 'comment': {'id': 562839772, 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8451', 'created_at': '2019-12-07T10:54:52Z', 'node_id': 'MDEyOklzc3VlQ29tbWVudDU2MjgzOTc3Mg==', 'author_association': 'CONTRIBUTOR', 'body': 'I think this PR is ready to merge now.', 'updated_at': '2019-12-07T10:54:52Z', 'user': {'type': 'User', 'avatar_url': 'https://avatars1.githubusercontent.com/u/47765059?v=4', 'login': 'rlnilsen', 'gists_url': 'https://api.github.com/users/rlnilsen/gists{/gist_id}', 'html_url': 'https://github.com/rlnilsen', 'events_url': 'https://api.github.com/users/rlnilsen/events{/privacy}', 'id': 47765059, 'site_admin': False, 'followers_url': 'https://api.github.com/users/rlnilsen/followers', 'subscriptions_url': 'https://api.github.com/users/rlnilsen/subscriptions', 'node_id': 'MDQ6VXNlcjQ3NzY1MDU5', 'organizations_url': 'https://api.github.com/users/rlnilsen/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/rlnilsen/received_events', 'following_url': 'https://api.github.com/users/rlnilsen/following{/other_user}', 'repos_url': 'https://api.github.com/users/rlnilsen/repos', 'url': 'https://api.github.com/users/rlnilsen', 'starred_url': 'https://api.github.com/users/rlnilsen/starred{/owner}{/repo}'}, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/562839772', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8451#issuecomment-562839772'}, 'organization': {'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'description': '', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events', 'id': 5050316, 'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'url': 'https://api.github.com/orgs/dolphin-emu'}, 'issue': {'created_at': '2019-11-04T03:53:51Z', 'assignees': [], 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8451/labels{/name}', 'milestone': None, 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'number': 8451, 'updated_at': '2019-12-07T10:54:52Z', 'node_id': 'MDExOlB1bGxSZXF1ZXN0MzM2MTE0MDIz', 'author_association': 'CONTRIBUTOR', 'labels': [], 'state': 'open', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8451', 'user': {'type': 'User', 'avatar_url': 'https://avatars1.githubusercontent.com/u/47765059?v=4', 'login': 'rlnilsen', 'gists_url': 'https://api.github.com/users/rlnilsen/gists{/gist_id}', 'html_url': 'https://github.com/rlnilsen', 'events_url': 'https://api.github.com/users/rlnilsen/events{/privacy}', 'id': 47765059, 'site_admin': False, 'followers_url': 'https://api.github.com/users/rlnilsen/followers', 'subscriptions_url': 'https://api.github.com/users/rlnilsen/subscriptions', 'node_id': 'MDQ6VXNlcjQ3NzY1MDU5', 'organizations_url': 'https://api.github.com/users/rlnilsen/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/rlnilsen/received_events', 'following_url': 'https://api.github.com/users/rlnilsen/following{/other_user}', 'repos_url': 'https://api.github.com/users/rlnilsen/repos', 'url': 'https://api.github.com/users/rlnilsen', 'starred_url': 'https://api.github.com/users/rlnilsen/starred{/owner}{/repo}'}, 'locked': False, 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8451', 'body': "After discussions we ended up with the following UI layout. When (and only when) Nunchuk is selected as extension, two extra tabs appear: 'Extension Motion Simulation' and 'Extension Motion Input'.\r\n\r\n![2019-11-06 18_43_04-vs2017 (1) - Remote Viewer](https://user-images.githubusercontent.com/47765059/68323410-aa10b380-00c5-11ea-8e6a-a979458a6d73.png)\r\n![2019-11-06 18_43_27-vs2017 (1) - Remote Viewer](https://user-images.githubusercontent.com/47765059/68323417-ac730d80-00c5-11ea-8693-be56f26c9bfe.png)\r\n![2019-11-06 18_55_52-vs2017 (1) - Remote Viewer](https://user-images.githubusercontent.com/47765059/68324178-25bf3000-00c7-11ea-9757-612f3344ffa3.png)\r\n\r\n#### To preserve the context of the discussion that took place, the original version of this post is preserved below\r\n\r\nThe UI layout was slightly adjusted to allow fitting five control groups on a 1024 pixel wide screen.\r\nAdded the same warning text and `Alternate Input Sources` button as on the `Motion Input` tab.\r\n\r\n![2019-11-04 18_48_38-vs2017 (1) - Remote Viewer](https://user-images.githubusercontent.com/47765059/68145593-72bfcc80-ff36-11e9-843a-e3bbb43a1f97.png)\r\n", 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8451/events', 'id': 516948473, 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8451/comments', 'title': 'Add motion input support to nunchuk', 'comments': 32, 'closed_at': None, 'pull_request': {'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/8451.patch', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/8451.diff', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8451', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8451'}, 'assignee': None}, 'sender': {'type': 'User', 'avatar_url': 'https://avatars1.githubusercontent.com/u/47765059?v=4', 'login': 'rlnilsen', 'gists_url': 'https://api.github.com/users/rlnilsen/gists{/gist_id}', 'html_url': 'https://github.com/rlnilsen', 'events_url': 'https://api.github.com/users/rlnilsen/events{/privacy}', 'id': 47765059, 'site_admin': False, 'followers_url': 'https://api.github.com/users/rlnilsen/followers', 'subscriptions_url': 'https://api.github.com/users/rlnilsen/subscriptions', 'node_id': 'MDQ6VXNlcjQ3NzY1MDU5', 'organizations_url': 'https://api.github.com/users/rlnilsen/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/rlnilsen/received_events', 'following_url': 'https://api.github.com/users/rlnilsen/following{/other_user}', 'repos_url': 'https://api.github.com/users/rlnilsen/repos', 'url': 'https://api.github.com/users/rlnilsen', 'starred_url': 'https://api.github.com/users/rlnilsen/starred{/owner}{/repo}'}}, 'source': 'webserver'}
2019-12-06T21:30:28.925817	{'gh_type': 'pull_request', 'type': 'raw_gh_hook', 'raw': {'action': 'synchronize', 'number': 8268, 'before': 'a02c18481cea21712dfa59515cac95e5ec3d6c01', 'organization': {'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'description': '', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events', 'id': 5050316, 'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'url': 'https://api.github.com/orgs/dolphin-emu'}, 'sender': {'type': 'User', 'avatar_url': 'https://avatars2.githubusercontent.com/u/8334194?v=4', 'login': 'Pokechu22', 'gists_url': 'https://api.github.com/users/Pokechu22/gists{/gist_id}', 'html_url': 'https://github.com/Pokechu22', 'events_url': 'https://api.github.com/users/Pokechu22/events{/privacy}', 'id': 8334194, 'site_admin': False, 'followers_url': 'https://api.github.com/users/Pokechu22/followers', 'subscriptions_url': 'https://api.github.com/users/Pokechu22/subscriptions', 'node_id': 'MDQ6VXNlcjgzMzQxOTQ=', 'organizations_url': 'https://api.github.com/users/Pokechu22/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/Pokechu22/received_events', 'following_url': 'https://api.github.com/users/Pokechu22/following{/other_user}', 'repos_url': 'https://api.github.com/users/Pokechu22/repos', 'url': 'https://api.github.com/users/Pokechu22', 'starred_url': 'https://api.github.com/users/Pokechu22/starred{/owner}{/repo}'}, 'repository': {'fork': False, 'has_wiki': True, 'mirror_url': None, 'open_issues_count': 171, 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'forks': 1329, 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'html_url': 'https://github.com/dolphin-emu/dolphin', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'open_issues': 171, 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'language': 'C++', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'default_branch': 'master', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'watchers_count': 5799, 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'name': 'dolphin', 'size': 386668, 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'has_pages': False, 'has_issues': False, 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'disabled': False, 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'stargazers_count': 5799, 'created_at': '2013-07-22T09:07:57Z', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'archived': False, 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'full_name': 'dolphin-emu/dolphin', 'updated_at': '2019-12-06T19:51:14Z', 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'private': False, 'forks_count': 1329, 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'has_projects': False, 'owner': {'type': 'Organization', 'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'html_url': 'https://github.com/dolphin-emu', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'id': 5050316, 'site_admin': False, 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'url': 'https://api.github.com/users/dolphin-emu', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}'}, 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'has_downloads': True, 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'watchers': 5799, 'license': {'name': 'GNU General Public License v2.0', 'node_id': 'MDc6TGljZW5zZTg=', 'spdx_id': 'GPL-2.0', 'key': 'gpl-2.0', 'url': 'https://api.github.com/licenses/gpl-2.0'}, 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'homepage': 'https://dolphin-emu.org/', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'id': 11577304, 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'pushed_at': '2019-12-06T17:14:44Z', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}'}, 'after': '8fa12028d58be5f2e3e86fe5abc4401b512e995e', 'pull_request': {'deletions': 122, 'assignees': [], 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/8268.patch', 'additions': 915, 'review_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments{/number}', 'mergeable': None, 'number': 8268, 'author_association': 'CONTRIBUTOR', 'mergeable_state': 'draft', 'head': {'label': 'Pokechu22:balance-board', 'user': {'type': 'User', 'avatar_url': 'https://avatars2.githubusercontent.com/u/8334194?v=4', 'login': 'Pokechu22', 'gists_url': 'https://api.github.com/users/Pokechu22/gists{/gist_id}', 'html_url': 'https://github.com/Pokechu22', 'events_url': 'https://api.github.com/users/Pokechu22/events{/privacy}', 'id': 8334194, 'site_admin': False, 'followers_url': 'https://api.github.com/users/Pokechu22/followers', 'subscriptions_url': 'https://api.github.com/users/Pokechu22/subscriptions', 'node_id': 'MDQ6VXNlcjgzMzQxOTQ=', 'organizations_url': 'https://api.github.com/users/Pokechu22/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/Pokechu22/received_events', 'following_url': 'https://api.github.com/users/Pokechu22/following{/other_user}', 'repos_url': 'https://api.github.com/users/Pokechu22/repos', 'url': 'https://api.github.com/users/Pokechu22', 'starred_url': 'https://api.github.com/users/Pokechu22/starred{/owner}{/repo}'}, 'sha': '8fa12028d58be5f2e3e86fe5abc4401b512e995e', 'ref': 'balance-board', 'repo': {'fork': True, 'has_wiki': True, 'mirror_url': None, 'open_issues_count': 0, 'stargazers_url': 'https://api.github.com/repos/Pokechu22/dolphin/stargazers', 'forks': 0, 'deployments_url': 'https://api.github.com/repos/Pokechu22/dolphin/deployments', 'issue_events_url': 'https://api.github.com/repos/Pokechu22/dolphin/issues/events{/number}', 'html_url': 'https://github.com/Pokechu22/dolphin', 'pulls_url': 'https://api.github.com/repos/Pokechu22/dolphin/pulls{/number}', 'statuses_url': 'https://api.github.com/repos/Pokechu22/dolphin/statuses/{sha}', 'open_issues': 0, 'git_commits_url': 'https://api.github.com/repos/Pokechu22/dolphin/git/commits{/sha}', 'language': 'C++', 'blobs_url': 'https://api.github.com/repos/Pokechu22/dolphin/git/blobs{/sha}', 'events_url': 'https://api.github.com/repos/Pokechu22/dolphin/events', 'commits_url': 'https://api.github.com/repos/Pokechu22/dolphin/commits{/sha}', 'compare_url': 'https://api.github.com/repos/Pokechu22/dolphin/compare/{base}...{head}', 'default_branch': 'master', 'svn_url': 'https://github.com/Pokechu22/dolphin', 'downloads_url': 'https://api.github.com/repos/Pokechu22/dolphin/downloads', 'archive_url': 'https://api.github.com/repos/Pokechu22/dolphin/{archive_format}{/ref}', 'subscribers_url': 'https://api.github.com/repos/Pokechu22/dolphin/subscribers', 'labels_url': 'https://api.github.com/repos/Pokechu22/dolphin/labels{/name}', 'watchers_count': 0, 'contributors_url': 'https://api.github.com/repos/Pokechu22/dolphin/contributors', 'git_tags_url': 'https://api.github.com/repos/Pokechu22/dolphin/git/tags{/sha}', 'name': 'dolphin', 'size': 349499, 'languages_url': 'https://api.github.com/repos/Pokechu22/dolphin/languages', 'comments_url': 'https://api.github.com/repos/Pokechu22/dolphin/comments{/number}', 'teams_url': 'https://api.github.com/repos/Pokechu22/dolphin/teams', 'has_pages': False, 'has_issues': False, 'notifications_url': 'https://api.github.com/repos/Pokechu22/dolphin/notifications{?since,all,participating}', 'disabled': False, 'issue_comment_url': 'https://api.github.com/repos/Pokechu22/dolphin/issues/comments{/number}', 'stargazers_count': 0, 'created_at': '2019-04-23T02:57:42Z', 'hooks_url': 'https://api.github.com/repos/Pokechu22/dolphin/hooks', 'archived': False, 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'milestones_url': 'https://api.github.com/repos/Pokechu22/dolphin/milestones{/number}', 'subscription_url': 'https://api.github.com/repos/Pokechu22/dolphin/subscription', 'full_name': 'Pokechu22/dolphin', 'updated_at': '2019-07-26T04:09:42Z', 'node_id': 'MDEwOlJlcG9zaXRvcnkxODI5MTU0NzA=', 'issues_url': 'https://api.github.com/repos/Pokechu22/dolphin/issues{/number}', 'private': False, 'forks_count': 0, 'assignees_url': 'https://api.github.com/repos/Pokechu22/dolphin/assignees{/user}', 'ssh_url': 'git@github.com:Pokechu22/dolphin.git', 'collaborators_url': 'https://api.github.com/repos/Pokechu22/dolphin/collaborators{/collaborator}', 'has_projects': True, 'owner': {'type': 'User', 'avatar_url': 'https://avatars2.githubusercontent.com/u/8334194?v=4', 'login': 'Pokechu22', 'gists_url': 'https://api.github.com/users/Pokechu22/gists{/gist_id}', 'html_url': 'https://github.com/Pokechu22', 'events_url': 'https://api.github.com/users/Pokechu22/events{/privacy}', 'id': 8334194, 'site_admin': False, 'followers_url': 'https://api.github.com/users/Pokechu22/followers', 'subscriptions_url': 'https://api.github.com/users/Pokechu22/subscriptions', 'node_id': 'MDQ6VXNlcjgzMzQxOTQ=', 'organizations_url': 'https://api.github.com/users/Pokechu22/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/Pokechu22/received_events', 'following_url': 'https://api.github.com/users/Pokechu22/following{/other_user}', 'repos_url': 'https://api.github.com/users/Pokechu22/repos', 'url': 'https://api.github.com/users/Pokechu22', 'starred_url': 'https://api.github.com/users/Pokechu22/starred{/owner}{/repo}'}, 'git_url': 'git://github.com/Pokechu22/dolphin.git', 'git_refs_url': 'https://api.github.com/repos/Pokechu22/dolphin/git/refs{/sha}', 'has_downloads': True, 'trees_url': 'https://api.github.com/repos/Pokechu22/dolphin/git/trees{/sha}', 'watchers': 0, 'license': {'name': 'GNU General Public License v2.0', 'node_id': 'MDc6TGljZW5zZTg=', 'spdx_id': 'GPL-2.0', 'key': 'gpl-2.0', 'url': 'https://api.github.com/licenses/gpl-2.0'}, 'forks_url': 'https://api.github.com/repos/Pokechu22/dolphin/forks', 'homepage': 'https://dolphin-emu.org/', 'contents_url': 'https://api.github.com/repos/Pokechu22/dolphin/contents/{+path}', 'id': 182915470, 'tags_url': 'https://api.github.com/repos/Pokechu22/dolphin/tags', 'releases_url': 'https://api.github.com/repos/Pokechu22/dolphin/releases{/id}', 'merges_url': 'https://api.github.com/repos/Pokechu22/dolphin/merges', 'clone_url': 'https://github.com/Pokechu22/dolphin.git', 'branches_url': 'https://api.github.com/repos/Pokechu22/dolphin/branches{/branch}', 'url': 'https://api.github.com/repos/Pokechu22/dolphin', 'pushed_at': '2019-12-06T21:30:24Z', 'keys_url': 'https://api.github.com/repos/Pokechu22/dolphin/keys{/key_id}'}}, 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8268/commits', 'labels': [], 'user': {'type': 'User', 'avatar_url': 'https://avatars2.githubusercontent.com/u/8334194?v=4', 'login': 'Pokechu22', 'gists_url': 'https://api.github.com/users/Pokechu22/gists{/gist_id}', 'html_url': 'https://github.com/Pokechu22', 'events_url': 'https://api.github.com/users/Pokechu22/events{/privacy}', 'id': 8334194, 'site_admin': False, 'followers_url': 'https://api.github.com/users/Pokechu22/followers', 'subscriptions_url': 'https://api.github.com/users/Pokechu22/subscriptions', 'node_id': 'MDQ6VXNlcjgzMzQxOTQ=', 'organizations_url': 'https://api.github.com/users/Pokechu22/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/Pokechu22/received_events', 'following_url': 'https://api.github.com/users/Pokechu22/following{/other_user}', 'repos_url': 'https://api.github.com/users/Pokechu22/repos', 'url': 'https://api.github.com/users/Pokechu22', 'starred_url': 'https://api.github.com/users/Pokechu22/starred{/owner}{/repo}'}, 'body': "This PR adds support for balance board emulation.\r\n\r\nThis isn't completely finished, and the UI for it isn't too great.  In particular, there isn't any way to specify the current weight on the main UI, only to adjust the weight in terms of percentages, though it does exist on the TAS UI.  The UI also doesn't support all possible inputs, only cases where actual balance is used; this means that e.g. walking doesn't work too well (or the step game).  The balance board is treated as a regular extension and can be set on any remote, and also needs to be manually set for the actual balance board.  Also, games that don't support the balance board will continuously disconnect it, and dolphin will then repeatedly attempt to reconnect it.  But it is perfectly usable.\r\n\r\n~~One thing I haven't tested is whether this works with movies; the [documentation](http://tasvideos.org/EmulatorResources/DTM.html) ([rev 31](http://tasvideos.org/wiki.exe?page=EmulatorResources/DTM&rev=31) specifically) mentions that a single byte is used to indicate the connected controllers, and adding a 5th pseudo-wiimote probably causes issues there.  I currently have a commit that adds an excessive number of bounds-checks for movies, which ideally should be replaced with proper support.~~", 'review_comments': 29, 'rebaseable': None, 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8268', 'merged_by': None, 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8268/comments', 'commits': 17, 'maintainer_can_modify': True, 'comments': 3, 'created_at': '2019-07-28T02:29:48Z', 'changed_files': 32, 'review_comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8268/comments', 'draft': True, 'milestone': None, 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8268', 'updated_at': '2019-12-06T21:30:27Z', 'node_id': 'MDExOlB1bGxSZXF1ZXN0MzAxNzk5MzU1', '_links': {'review_comment': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments{/number}'}, 'commits': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8268/commits'}, 'comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8268/comments'}, 'statuses': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/8fa12028d58be5f2e3e86fe5abc4401b512e995e'}, 'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8268'}, 'issue': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8268'}, 'review_comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8268/comments'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/8268'}}, 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/8268.diff', 'merged': False, 'state': 'open', 'requested_teams': [], 'locked': False, 'merge_commit_sha': '7feb8fae683e421977cd708216b0d471c1add0d8', 'merged_at': None, 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/8fa12028d58be5f2e3e86fe5abc4401b512e995e', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8268', 'id': 301799355, 'title': '[WIP] Balance Board emulation', 'base': {'label': 'dolphin-emu:master', 'user': {'type': 'Organization', 'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'html_url': 'https://github.com/dolphin-emu', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'id': 5050316, 'site_admin': False, 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'url': 'https://api.github.com/users/dolphin-emu', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}'}, 'sha': '5a5c46a8b15990e1e38636d017c28572e4370745', 'ref': 'master', 'repo': {'fork': False, 'has_wiki': True, 'mirror_url': None, 'open_issues_count': 171, 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'forks': 1329, 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'html_url': 'https://github.com/dolphin-emu/dolphin', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'open_issues': 171, 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'language': 'C++', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'default_branch': 'master', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'watchers_count': 5799, 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'name': 'dolphin', 'size': 386668, 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'has_pages': False, 'has_issues': False, 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'disabled': False, 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'stargazers_count': 5799, 'created_at': '2013-07-22T09:07:57Z', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'archived': False, 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'full_name': 'dolphin-emu/dolphin', 'updated_at': '2019-12-06T19:51:14Z', 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'private': False, 'forks_count': 1329, 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'has_projects': False, 'owner': {'type': 'Organization', 'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'html_url': 'https://github.com/dolphin-emu', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'id': 5050316, 'site_admin': False, 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'url': 'https://api.github.com/users/dolphin-emu', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}'}, 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'has_downloads': True, 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'watchers': 5799, 'license': {'name': 'GNU General Public License v2.0', 'node_id': 'MDc6TGljZW5zZTg=', 'spdx_id': 'GPL-2.0', 'key': 'gpl-2.0', 'url': 'https://api.github.com/licenses/gpl-2.0'}, 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'homepage': 'https://dolphin-emu.org/', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'id': 11577304, 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'pushed_at': '2019-12-06T17:14:44Z', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}'}}, 'closed_at': None, 'requested_reviewers': [], 'assignee': None}}, 'source': 'webserver'}
2019-12-06T17:47:30.555971	{'gh_type': 'issue_comment', 'type': 'raw_gh_hook', 'raw': {'action': 'created', 'repository': {'fork': False, 'has_wiki': True, 'mirror_url': None, 'open_issues_count': 171, 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'forks': 1329, 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'html_url': 'https://github.com/dolphin-emu/dolphin', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'open_issues': 171, 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'language': 'C++', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'default_branch': 'master', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'watchers_count': 5798, 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'name': 'dolphin', 'size': 386668, 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'has_pages': False, 'has_issues': False, 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'disabled': False, 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'stargazers_count': 5798, 'created_at': '2013-07-22T09:07:57Z', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'archived': False, 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'full_name': 'dolphin-emu/dolphin', 'updated_at': '2019-12-06T16:00:46Z', 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'private': False, 'forks_count': 1329, 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'has_projects': False, 'owner': {'type': 'Organization', 'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'html_url': 'https://github.com/dolphin-emu', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'id': 5050316, 'site_admin': False, 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'url': 'https://api.github.com/users/dolphin-emu', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}'}, 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'has_downloads': True, 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'watchers': 5798, 'license': {'name': 'GNU General Public License v2.0', 'node_id': 'MDc6TGljZW5zZTg=', 'spdx_id': 'GPL-2.0', 'key': 'gpl-2.0', 'url': 'https://api.github.com/licenses/gpl-2.0'}, 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'homepage': 'https://dolphin-emu.org/', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'id': 11577304, 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'pushed_at': '2019-12-06T17:14:44Z', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}'}, 'comment': {'id': 562671499, 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8492', 'created_at': '2019-12-06T17:47:29Z', 'node_id': 'MDEyOklzc3VlQ29tbWVudDU2MjY3MTQ5OQ==', 'author_association': 'NONE', 'body': '@OatmealDome thnx', 'updated_at': '2019-12-06T17:47:29Z', 'user': {'type': 'User', 'avatar_url': 'https://avatars2.githubusercontent.com/u/58544833?v=4', 'login': 'SGamer33', 'gists_url': 'https://api.github.com/users/SGamer33/gists{/gist_id}', 'html_url': 'https://github.com/SGamer33', 'events_url': 'https://api.github.com/users/SGamer33/events{/privacy}', 'id': 58544833, 'site_admin': False, 'followers_url': 'https://api.github.com/users/SGamer33/followers', 'subscriptions_url': 'https://api.github.com/users/SGamer33/subscriptions', 'node_id': 'MDQ6VXNlcjU4NTQ0ODMz', 'organizations_url': 'https://api.github.com/users/SGamer33/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/SGamer33/received_events', 'following_url': 'https://api.github.com/users/SGamer33/following{/other_user}', 'repos_url': 'https://api.github.com/users/SGamer33/repos', 'url': 'https://api.github.com/users/SGamer33', 'starred_url': 'https://api.github.com/users/SGamer33/starred{/owner}{/repo}'}, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/562671499', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8492#issuecomment-562671499'}, 'organization': {'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'description': '', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events', 'id': 5050316, 'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'url': 'https://api.github.com/orgs/dolphin-emu'}, 'issue': {'created_at': '2019-11-24T21:15:23Z', 'assignees': [], 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8492/labels{/name}', 'milestone': None, 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'number': 8492, 'updated_at': '2019-12-06T17:47:29Z', 'node_id': 'MDExOlB1bGxSZXF1ZXN0MzQ0OTQ5Mzk4', 'author_association': 'CONTRIBUTOR', 'labels': [], 'state': 'open', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8492', 'user': {'type': 'User', 'avatar_url': 'https://avatars0.githubusercontent.com/u/11504941?v=4', 'login': 'OatmealDome', 'gists_url': 'https://api.github.com/users/OatmealDome/gists{/gist_id}', 'html_url': 'https://github.com/OatmealDome', 'events_url': 'https://api.github.com/users/OatmealDome/events{/privacy}', 'id': 11504941, 'site_admin': False, 'followers_url': 'https://api.github.com/users/OatmealDome/followers', 'subscriptions_url': 'https://api.github.com/users/OatmealDome/subscriptions', 'node_id': 'MDQ6VXNlcjExNTA0OTQx', 'organizations_url': 'https://api.github.com/users/OatmealDome/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/OatmealDome/received_events', 'following_url': 'https://api.github.com/users/OatmealDome/following{/other_user}', 'repos_url': 'https://api.github.com/users/OatmealDome/repos', 'url': 'https://api.github.com/users/OatmealDome', 'starred_url': 'https://api.github.com/users/OatmealDome/starred{/owner}{/repo}'}, 'locked': False, 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8492', 'body': 'This PR adds experimental support for iOS devices with a working JIT. It is by no means complete, and is only intended to initiate a discussion as to whether iOS is a platform that Dolphin should support.\r\n\r\n# READ THIS FIRST\r\n\r\nYou probably shouldn\'t ask for technical support in the comments here.\r\n\r\n**Please remember that this isn\'t ready for general use yet. I cannot stress this enough. If you only know enough to press the run button in Xcode, you should probably wait for some sort of release. If you still really want to try it out, be sure you read the PR fully to understand the current issues and limitations.**\r\n\r\nIf you need support, or are a developer who would like to contribute, contact me on [Twitter](https://twitter.com/OatmealDome) or [ask in #dolphin-ios on my Discord server](https://discord.gg/rdx6Bt8) (I may take a while to respond since I\'m currently busy with other responsibilities - I\'ll ping you when I get a chance).\r\n\r\n# PR details\r\n\r\nFirst off, [here\'s a quick demo video](https://youtu.be/CI4SGePajYo) and some screenshots.\r\n\r\n<img src="https://cdn.oatmealdome.me/screenshots/dolphin-ios/xenoblade.png" width="50%" height="50%">\r\n\r\n<img src="https://cdn.oatmealdome.me/screenshots/dolphin-ios/animal_crossing.png" width="50%" height="50%">\r\n\r\n<img src="https://cdn.oatmealdome.me/screenshots/dolphin-ios/melee.png" width="50%" height="50%">\r\n\r\n<img src="https://cdn.oatmealdome.me/screenshots/dolphin-ios/mkw.png" width="50%" height="50%">\r\n\r\nLet\'s get into the details.\r\n\r\n## Application\r\n\r\nA new Xcode project has been placed in `Source/iOS/DolphiniOS`. The build system for iOS takes inspiration from the Android version of Dolphin.\r\n\r\nXcode has been configured to run some shell scripts on every build. The first one runs `cmake` using an iOS toolchain to create static libraries, which are then linked into the application.  The second shell script copies image assets from the Android port.\r\n\r\nThe ``Sys`` folder is embedded into the bundle.\r\n\r\nA "jni" equivalent can be found in `Source/iOS/Interface`. Its only purpose is to hold the `MainiOS` source file.\r\n\r\n### User interface\r\n\r\nThe UI is written in Objective-C and Swift. It is extremely barebones at the moment - while there is a working touchscreen controller, pretty much everything else needs work.\r\n\r\nThe code is 50/50 Objective-C and Swift, but I believe it would be best to write future UI code in Swift and transition what we can away from Objective-C. (Given the necessity of using C++ to access Dolphin code, some Objective-C++ will likely need to stay if this port is given a green light.) \r\n\r\nAll Dolphin user files are stored in the app container\'s Documents directory. [This folder is then exposed to `Files.app`, allowing users to modify files as they wish](https://cdn.oatmealdome.me/screenshots/dolphin-ios/oMRQ0DA.png).\r\n\r\nA `Software` folder is automatically created in the Documents directory. The UI will automatically scan this folder for software and show found files in a list on startup.\r\n\r\n### Target devices\r\n\r\n* **The device must be jailbroken.**\r\n* Devices with A9, A10, and A11 processors were tested. These were an iPhone 6s, a 6th gen iPad, and an iPhone X.\r\n* A8, A12, and A13 devices were unable to be tested because @Simonx22 and I don\'t own any.\r\n* [A7 and A8 processors have GPUs that don\'t support arrays of textures](https://developer.apple.com/metal/Metal-Feature-Set-Tables.pdf), so the Vulkan backend is not supported.\r\n* A6 processors and below are 32-bit.\r\n\r\nThe minimum supported devices should be ones with an A9 processor.\r\n\r\n### Building\r\n\r\nYou need the following:\r\n\r\n* Mac\r\n* Xcode 11 (older Xcode versions may work, not tested)\r\n* `cmake`\r\n* Jailbroken iOS / iPadOS device running iOS 12 and above\r\n\r\nThen, you can build:\r\n\r\n1. Install AppSync Unified on your device from `cydia.angelxwind.net`.\r\n2. Clone the repo.\r\n3. Open `Source/iOS/DolphiniOS/DolphiniOS.xcodeproj`.\r\n4. Initiate a build in Xcode.\r\n\r\n## Problems\r\n\r\n### Limitations\r\n\r\n* BoundingBox is not supported, since [MoltenVK sets ``fragmentStoresAndAtomics``  to `true` only on macOS](https://github.com/KhronosGroup/MoltenVK/blob/789ef74d11d9ea9ce912f6df3d018e1d194a1fdb/MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm#L1038). However, forcing this feature to be enabled shows that it works fine on iOS (albeit with minor glitches). I\'m not sure what I should be looking for on the Metal feature set table to see if iOS GPU drivers really support this feature.\r\n* Metal does not support geometry shaders or setting line width.\r\n* OpenGLES, like OpenGL on macOS, has been abandoned for a very long time. `EXT_buffer_storage` support is nowhere to be found. As expected, the OpenGL backend is unusable.\r\n\r\n### Known issues\r\n\r\n* `Core::IsCPUThread()` does not work for some reason. The call in `JitArm64::HandleFault()` needs to be commented out when testing for now.\r\n* Controller INIs from the Android version needs to be copied manually. ``GCPadNew.ini`` and `WiimoteNew.ini` go in ``Config`` and  ``WiimoteProfile.ini`` in ``Config/Profiles/Wiimote``.\r\n* To stop emulation, you have to quit the application.\r\n* You have to manually switch the controller type (GameCube controller or Wiimote with Nunchuk) in the source code.\r\n* There is no D-Pad on any controller type.\r\n* There is no build system that generates a ``deb`` for Cydia.\r\n* There are likely code style compliance issues. Swift code is entirely unchecked by lint.\r\n* Many other things.\r\n\r\n### Regarding the jailbroken device requirement\r\n\r\nThe iOS kernel places an artificial restriction on the amount of address space that each process can access, depending on how much RAM the device has. This is the core issue that plagued Dolphin support for a very, *very* long time. Fastmem requires a large amount of virtual memory to play with, which unfortunately is greater than the limit of every publicly released iOS device.\r\n\r\nThankfully, Apple created an entitlement called `dynamic-codesigning` that allows the process to create executable memory. It was added for applications that need JIT, like Safari. An additional perk of `dynamic-codesigning` is that [it also allows the process to access a large amount of address space](https://github.com/apple/darwin-xnu/blob/master/tests/jumbo_va_spaces_28530648.c). However, it cannot be set on third-party apps as it is an Apple-internal entitlement. This is why a jailbroken device is needed.\r\n\r\nThere is a way, however, to run Dolphin under a jailed device. (In fact, I am doing the majority of my testing on a jailed device.) It requires modifying the iOS bootloader and setting the boot argument `arm64_maxoffset`. Because this method is quite complicated, I don\'t think this is a viable option for end-users. It is significantly easier to just require a jailbroken device than to support users who try this method.\r\n\r\n### The future\r\n\r\nAs we all know, Dolphin support for macOS doesn\'t get much love because of a lack of maintainers. While I don\'t plan to abandon this project, I think it would be best to see if any others are willing to contribute. I am just one person, after all.\r\n\r\n## Changes to Dolphin\r\n\r\nThis is a non-exhaustive list.\r\n\r\n* The define ``IPHONEOS`` has been introduced. ``IOS`` is not used to avoid confusion and conflicts with the Wii\'s IOS.\r\n* The iOS cmake toolchain from [here](https://github.com/leetal/ios-cmake) has been added. `CMakeLists` use ``IOS`` because it is set from the toolchain.\r\n* Mach\'s vm functions are used wherever possible ([one](https://github.com/OatmealDome/dolphin/commit/fbffaa4b429af4fc725c7093837aa142f21cc006#diff-1f416de641b3f6132c533a0feb099829), [two](https://github.com/OatmealDome/dolphin/commit/d3e100a0a854becaaf053cb5aeae2de77a961eed)).\r\n* (This only applies to jailed devices.) When attached to a debugger, iOS allows memory to be marked as executable. However, memory cannot be writable and executable at the same time, so code has been introduced into the ARM64 JIT to support W^X exclusivity.\r\n* A new "EAGL" GLInterface was introduced. Also, because iOS doesn\'t create a default framebuffer, [the OpenGL backend calls the EAGL GLInterface to create one](https://github.com/OatmealDome/dolphin/commit/8b9064ececa69ee47e468d242dd7ac270b209f40).\r\n* The iOS MoltenVK dylib has been added to Externals.\r\n* The CoreAudio backend has been restored, because [Cubeb support for iOS is old and broken](https://github.com/kinetiknz/cubeb/issues/394).\r\n* Since `ButtonManager` and `Touchscreen` are useful on iOS too, they have been moved into a new "Touch" folder in InputCommon.\r\n* The required clang-format version has been updated to 9.0. Some Objective-C code was not being formatted correctly on 7.0 for whatever reason.\r\n\r\n## Credits\r\n\r\nThis PR is the culmination of many attempts by several people, including myself. It could not be done without them and support from others.\r\n\r\nPrevious PRs:\r\n\r\n* #3881\r\n* #3885\r\n* #3941\r\n\r\nThanks to:\r\n\r\n* @Simonx22 for testing\r\n* leetal\'s [iOS toolchain for cmake](https://github.com/leetal/ios-cmake)\r\n* ppsspp for mach vm functions and W^X exclusivity example code \r\n* Apple for releasing their ARM XNU sources', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8492/events', 'id': 527757689, 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8492/comments', 'title': '[RFC / WIP] iOS support with working JIT', 'comments': 35, 'closed_at': None, 'pull_request': {'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/8492.patch', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/8492.diff', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8492', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8492'}, 'assignee': None}, 'sender': {'type': 'User', 'avatar_url': 'https://avatars2.githubusercontent.com/u/58544833?v=4', 'login': 'SGamer33', 'gists_url': 'https://api.github.com/users/SGamer33/gists{/gist_id}', 'html_url': 'https://github.com/SGamer33', 'events_url': 'https://api.github.com/users/SGamer33/events{/privacy}', 'id': 58544833, 'site_admin': False, 'followers_url': 'https://api.github.com/users/SGamer33/followers', 'subscriptions_url': 'https://api.github.com/users/SGamer33/subscriptions', 'node_id': 'MDQ6VXNlcjU4NTQ0ODMz', 'organizations_url': 'https://api.github.com/users/SGamer33/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/SGamer33/received_events', 'following_url': 'https://api.github.com/users/SGamer33/following{/other_user}', 'repos_url': 'https://api.github.com/users/SGamer33/repos', 'url': 'https://api.github.com/users/SGamer33', 'starred_url': 'https://api.github.com/users/SGamer33/starred{/owner}{/repo}'}}, 'source': 'webserver'}
2019-12-06T17:14:44.911607	{'gh_type': 'pull_request', 'type': 'raw_gh_hook', 'raw': {'action': 'opened', 'number': 8515, 'organization': {'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'description': '', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events', 'id': 5050316, 'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'url': 'https://api.github.com/orgs/dolphin-emu'}, 'sender': {'type': 'User', 'avatar_url': 'https://avatars0.githubusercontent.com/u/26326692?v=4', 'login': 'Simonx22', 'gists_url': 'https://api.github.com/users/Simonx22/gists{/gist_id}', 'html_url': 'https://github.com/Simonx22', 'events_url': 'https://api.github.com/users/Simonx22/events{/privacy}', 'id': 26326692, 'site_admin': False, 'followers_url': 'https://api.github.com/users/Simonx22/followers', 'subscriptions_url': 'https://api.github.com/users/Simonx22/subscriptions', 'node_id': 'MDQ6VXNlcjI2MzI2Njky', 'organizations_url': 'https://api.github.com/users/Simonx22/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/Simonx22/received_events', 'following_url': 'https://api.github.com/users/Simonx22/following{/other_user}', 'repos_url': 'https://api.github.com/users/Simonx22/repos', 'url': 'https://api.github.com/users/Simonx22', 'starred_url': 'https://api.github.com/users/Simonx22/starred{/owner}{/repo}'}, 'repository': {'fork': False, 'has_wiki': True, 'mirror_url': None, 'open_issues_count': 171, 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'forks': 1329, 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'html_url': 'https://github.com/dolphin-emu/dolphin', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'open_issues': 171, 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'language': 'C++', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'default_branch': 'master', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'watchers_count': 5798, 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'name': 'dolphin', 'size': 386668, 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'has_pages': False, 'has_issues': False, 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'disabled': False, 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'stargazers_count': 5798, 'created_at': '2013-07-22T09:07:57Z', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'archived': False, 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'full_name': 'dolphin-emu/dolphin', 'updated_at': '2019-12-06T16:00:46Z', 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'private': False, 'forks_count': 1329, 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'has_projects': False, 'owner': {'type': 'Organization', 'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'html_url': 'https://github.com/dolphin-emu', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'id': 5050316, 'site_admin': False, 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'url': 'https://api.github.com/users/dolphin-emu', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}'}, 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'has_downloads': True, 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'watchers': 5798, 'license': {'name': 'GNU General Public License v2.0', 'node_id': 'MDc6TGljZW5zZTg=', 'spdx_id': 'GPL-2.0', 'key': 'gpl-2.0', 'url': 'https://api.github.com/licenses/gpl-2.0'}, 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'homepage': 'https://dolphin-emu.org/', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'id': 11577304, 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'pushed_at': '2019-12-06T16:00:43Z', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}'}, 'pull_request': {'deletions': 1, 'assignees': [], 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/8515.patch', 'additions': 1, 'review_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments{/number}', 'mergeable': None, 'number': 8515, 'author_association': 'CONTRIBUTOR', 'mergeable_state': 'unknown', 'head': {'label': 'Simonx22:gradle-353', 'user': {'type': 'User', 'avatar_url': 'https://avatars0.githubusercontent.com/u/26326692?v=4', 'login': 'Simonx22', 'gists_url': 'https://api.github.com/users/Simonx22/gists{/gist_id}', 'html_url': 'https://github.com/Simonx22', 'events_url': 'https://api.github.com/users/Simonx22/events{/privacy}', 'id': 26326692, 'site_admin': False, 'followers_url': 'https://api.github.com/users/Simonx22/followers', 'subscriptions_url': 'https://api.github.com/users/Simonx22/subscriptions', 'node_id': 'MDQ6VXNlcjI2MzI2Njky', 'organizations_url': 'https://api.github.com/users/Simonx22/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/Simonx22/received_events', 'following_url': 'https://api.github.com/users/Simonx22/following{/other_user}', 'repos_url': 'https://api.github.com/users/Simonx22/repos', 'url': 'https://api.github.com/users/Simonx22', 'starred_url': 'https://api.github.com/users/Simonx22/starred{/owner}{/repo}'}, 'sha': '345152b1486f037d65069de4654a08312d014323', 'ref': 'gradle-353', 'repo': {'fork': True, 'has_wiki': True, 'mirror_url': None, 'open_issues_count': 0, 'stargazers_url': 'https://api.github.com/repos/Simonx22/dolphin/stargazers', 'forks': 0, 'deployments_url': 'https://api.github.com/repos/Simonx22/dolphin/deployments', 'issue_events_url': 'https://api.github.com/repos/Simonx22/dolphin/issues/events{/number}', 'html_url': 'https://github.com/Simonx22/dolphin', 'pulls_url': 'https://api.github.com/repos/Simonx22/dolphin/pulls{/number}', 'statuses_url': 'https://api.github.com/repos/Simonx22/dolphin/statuses/{sha}', 'open_issues': 0, 'git_commits_url': 'https://api.github.com/repos/Simonx22/dolphin/git/commits{/sha}', 'language': 'C++', 'blobs_url': 'https://api.github.com/repos/Simonx22/dolphin/git/blobs{/sha}', 'events_url': 'https://api.github.com/repos/Simonx22/dolphin/events', 'commits_url': 'https://api.github.com/repos/Simonx22/dolphin/commits{/sha}', 'compare_url': 'https://api.github.com/repos/Simonx22/dolphin/compare/{base}...{head}', 'default_branch': 'master', 'svn_url': 'https://github.com/Simonx22/dolphin', 'downloads_url': 'https://api.github.com/repos/Simonx22/dolphin/downloads', 'archive_url': 'https://api.github.com/repos/Simonx22/dolphin/{archive_format}{/ref}', 'subscribers_url': 'https://api.github.com/repos/Simonx22/dolphin/subscribers', 'labels_url': 'https://api.github.com/repos/Simonx22/dolphin/labels{/name}', 'watchers_count': 0, 'contributors_url': 'https://api.github.com/repos/Simonx22/dolphin/contributors', 'git_tags_url': 'https://api.github.com/repos/Simonx22/dolphin/git/tags{/sha}', 'name': 'dolphin', 'size': 349436, 'languages_url': 'https://api.github.com/repos/Simonx22/dolphin/languages', 'comments_url': 'https://api.github.com/repos/Simonx22/dolphin/comments{/number}', 'teams_url': 'https://api.github.com/repos/Simonx22/dolphin/teams', 'has_pages': False, 'has_issues': False, 'notifications_url': 'https://api.github.com/repos/Simonx22/dolphin/notifications{?since,all,participating}', 'disabled': False, 'issue_comment_url': 'https://api.github.com/repos/Simonx22/dolphin/issues/comments{/number}', 'stargazers_count': 0, 'created_at': '2019-11-08T07:26:30Z', 'hooks_url': 'https://api.github.com/repos/Simonx22/dolphin/hooks', 'archived': False, 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'milestones_url': 'https://api.github.com/repos/Simonx22/dolphin/milestones{/number}', 'subscription_url': 'https://api.github.com/repos/Simonx22/dolphin/subscription', 'full_name': 'Simonx22/dolphin', 'updated_at': '2019-12-06T16:09:25Z', 'node_id': 'MDEwOlJlcG9zaXRvcnkyMjA0MTA2MTE=', 'issues_url': 'https://api.github.com/repos/Simonx22/dolphin/issues{/number}', 'private': False, 'forks_count': 0, 'assignees_url': 'https://api.github.com/repos/Simonx22/dolphin/assignees{/user}', 'ssh_url': 'git@github.com:Simonx22/dolphin.git', 'collaborators_url': 'https://api.github.com/repos/Simonx22/dolphin/collaborators{/collaborator}', 'has_projects': True, 'owner': {'type': 'User', 'avatar_url': 'https://avatars0.githubusercontent.com/u/26326692?v=4', 'login': 'Simonx22', 'gists_url': 'https://api.github.com/users/Simonx22/gists{/gist_id}', 'html_url': 'https://github.com/Simonx22', 'events_url': 'https://api.github.com/users/Simonx22/events{/privacy}', 'id': 26326692, 'site_admin': False, 'followers_url': 'https://api.github.com/users/Simonx22/followers', 'subscriptions_url': 'https://api.github.com/users/Simonx22/subscriptions', 'node_id': 'MDQ6VXNlcjI2MzI2Njky', 'organizations_url': 'https://api.github.com/users/Simonx22/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/Simonx22/received_events', 'following_url': 'https://api.github.com/users/Simonx22/following{/other_user}', 'repos_url': 'https://api.github.com/users/Simonx22/repos', 'url': 'https://api.github.com/users/Simonx22', 'starred_url': 'https://api.github.com/users/Simonx22/starred{/owner}{/repo}'}, 'git_url': 'git://github.com/Simonx22/dolphin.git', 'git_refs_url': 'https://api.github.com/repos/Simonx22/dolphin/git/refs{/sha}', 'has_downloads': True, 'trees_url': 'https://api.github.com/repos/Simonx22/dolphin/git/trees{/sha}', 'watchers': 0, 'license': {'name': 'GNU General Public License v2.0', 'node_id': 'MDc6TGljZW5zZTg=', 'spdx_id': 'GPL-2.0', 'key': 'gpl-2.0', 'url': 'https://api.github.com/licenses/gpl-2.0'}, 'forks_url': 'https://api.github.com/repos/Simonx22/dolphin/forks', 'homepage': 'https://dolphin-emu.org/', 'contents_url': 'https://api.github.com/repos/Simonx22/dolphin/contents/{+path}', 'id': 220410611, 'tags_url': 'https://api.github.com/repos/Simonx22/dolphin/tags', 'releases_url': 'https://api.github.com/repos/Simonx22/dolphin/releases{/id}', 'merges_url': 'https://api.github.com/repos/Simonx22/dolphin/merges', 'clone_url': 'https://github.com/Simonx22/dolphin.git', 'branches_url': 'https://api.github.com/repos/Simonx22/dolphin/branches{/branch}', 'url': 'https://api.github.com/repos/Simonx22/dolphin', 'pushed_at': '2019-12-06T17:14:11Z', 'keys_url': 'https://api.github.com/repos/Simonx22/dolphin/keys{/key_id}'}}, 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8515/commits', 'labels': [], 'user': {'type': 'User', 'avatar_url': 'https://avatars0.githubusercontent.com/u/26326692?v=4', 'login': 'Simonx22', 'gists_url': 'https://api.github.com/users/Simonx22/gists{/gist_id}', 'html_url': 'https://github.com/Simonx22', 'events_url': 'https://api.github.com/users/Simonx22/events{/privacy}', 'id': 26326692, 'site_admin': False, 'followers_url': 'https://api.github.com/users/Simonx22/followers', 'subscriptions_url': 'https://api.github.com/users/Simonx22/subscriptions', 'node_id': 'MDQ6VXNlcjI2MzI2Njky', 'organizations_url': 'https://api.github.com/users/Simonx22/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/Simonx22/received_events', 'following_url': 'https://api.github.com/users/Simonx22/following{/other_user}', 'repos_url': 'https://api.github.com/users/Simonx22/repos', 'url': 'https://api.github.com/users/Simonx22', 'starred_url': 'https://api.github.com/users/Simonx22/starred{/owner}{/repo}'}, 'body': 'Android Studio recommends updating to Gradle 3.5.3', 'review_comments': 0, 'rebaseable': None, 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8515', 'merged_by': None, 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8515/comments', 'commits': 1, 'maintainer_can_modify': True, 'comments': 0, 'created_at': '2019-12-06T17:14:43Z', 'changed_files': 1, 'review_comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8515/comments', 'draft': False, 'milestone': None, 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8515', 'updated_at': '2019-12-06T17:14:43Z', 'node_id': 'MDExOlB1bGxSZXF1ZXN0MzUwMTEyMjIy', '_links': {'review_comment': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments{/number}'}, 'commits': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8515/commits'}, 'comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8515/comments'}, 'statuses': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/345152b1486f037d65069de4654a08312d014323'}, 'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8515'}, 'issue': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8515'}, 'review_comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8515/comments'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/8515'}}, 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/8515.diff', 'merged': False, 'state': 'open', 'requested_teams': [], 'locked': False, 'merge_commit_sha': None, 'merged_at': None, 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/345152b1486f037d65069de4654a08312d014323', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8515', 'id': 350112222, 'title': 'Android: update to Gradle 3.5.3', 'base': {'label': 'dolphin-emu:master', 'user': {'type': 'Organization', 'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'html_url': 'https://github.com/dolphin-emu', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'id': 5050316, 'site_admin': False, 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'url': 'https://api.github.com/users/dolphin-emu', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}'}, 'sha': '5a5c46a8b15990e1e38636d017c28572e4370745', 'ref': 'master', 'repo': {'fork': False, 'has_wiki': True, 'mirror_url': None, 'open_issues_count': 171, 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'forks': 1329, 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'html_url': 'https://github.com/dolphin-emu/dolphin', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'open_issues': 171, 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'language': 'C++', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'default_branch': 'master', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'watchers_count': 5798, 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'name': 'dolphin', 'size': 386668, 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'has_pages': False, 'has_issues': False, 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'disabled': False, 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'stargazers_count': 5798, 'created_at': '2013-07-22T09:07:57Z', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'archived': False, 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'full_name': 'dolphin-emu/dolphin', 'updated_at': '2019-12-06T16:00:46Z', 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'private': False, 'forks_count': 1329, 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'has_projects': False, 'owner': {'type': 'Organization', 'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'html_url': 'https://github.com/dolphin-emu', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'id': 5050316, 'site_admin': False, 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'url': 'https://api.github.com/users/dolphin-emu', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}'}, 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'has_downloads': True, 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'watchers': 5798, 'license': {'name': 'GNU General Public License v2.0', 'node_id': 'MDc6TGljZW5zZTg=', 'spdx_id': 'GPL-2.0', 'key': 'gpl-2.0', 'url': 'https://api.github.com/licenses/gpl-2.0'}, 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'homepage': 'https://dolphin-emu.org/', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'id': 11577304, 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'pushed_at': '2019-12-06T16:00:43Z', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}'}}, 'closed_at': None, 'requested_reviewers': [], 'assignee': None}}, 'source': 'webserver'}
2019-12-06T16:00:45.129561	{'gh_type': 'push', 'type': 'raw_gh_hook', 'raw': {'commits': [{'id': 'f06461d208333e6367d5670f7718e8fa7b7e849e', 'message': 'Common/Network: Make StringToMacAddress use a string_view\n\nThis function only ever reads the contents of the string in a non-owning\nmanner, so we can change the parameter over to being a string view.', 'committer': {'name': 'Lioncash', 'email': 'mathew1800@gmail.com', 'username': 'lioncash'}, 'distinct': True, 'timestamp': '2019-12-06T09:45:25-05:00', 'added': [], 'tree_id': 'f8af9f9fb5e9452a308a10d6ba5d95dc3f5c3b3e', 'modified': ['Source/Core/Common/Network.cpp', 'Source/Core/Common/Network.h'], 'url': 'https://github.com/dolphin-emu/dolphin/commit/f06461d208333e6367d5670f7718e8fa7b7e849e', 'author': {'name': 'Lioncash', 'email': 'mathew1800@gmail.com', 'username': 'lioncash'}, 'removed': []}, {'id': 'cbfacc41bab03f0171981a64fe90949bc2456d3e', 'message': 'Common/Network: Remove unused header inclusions\n\nRemoves unused header dependencies.', 'committer': {'name': 'Lioncash', 'email': 'mathew1800@gmail.com', 'username': 'lioncash'}, 'distinct': True, 'timestamp': '2019-12-06T09:51:28-05:00', 'added': [], 'tree_id': '39d316d73d0332bd3f92b750433b84d0a09d82a7', 'modified': ['Source/Core/Common/Network.cpp'], 'url': 'https://github.com/dolphin-emu/dolphin/commit/cbfacc41bab03f0171981a64fe90949bc2456d3e', 'author': {'name': 'Lioncash', 'email': 'mathew1800@gmail.com', 'username': 'lioncash'}, 'removed': []}, {'id': '81edcca8db0bbbe9904956d7038bd1a2abdd9a87', 'message': "Common/Network: Use std::nullopt in StringToMacAddress\n\nPrevents unnecessary zeroing out of std::optional's internal buffer in\nsome implementations.", 'committer': {'name': 'Lioncash', 'email': 'mathew1800@gmail.com', 'username': 'lioncash'}, 'distinct': True, 'timestamp': '2019-12-06T09:59:11-05:00', 'added': [], 'tree_id': '2354ff91dc919bf3110bf2351981666223bf1d1c', 'modified': ['Source/Core/Common/Network.cpp'], 'url': 'https://github.com/dolphin-emu/dolphin/commit/81edcca8db0bbbe9904956d7038bd1a2abdd9a87', 'author': {'name': 'Lioncash', 'email': 'mathew1800@gmail.com', 'username': 'lioncash'}, 'removed': []}, {'id': '5a5c46a8b15990e1e38636d017c28572e4370745', 'message': 'Merge pull request #8514 from lioncash/sview\n\nCommon/Network: Make StringToMacAddress use a string_view', 'committer': {'name': 'GitHub', 'email': 'noreply@github.com', 'username': 'web-flow'}, 'distinct': True, 'timestamp': '2019-12-06T17:00:42+01:00', 'added': [], 'tree_id': '2354ff91dc919bf3110bf2351981666223bf1d1c', 'modified': ['Source/Core/Common/Network.cpp', 'Source/Core/Common/Network.h'], 'url': 'https://github.com/dolphin-emu/dolphin/commit/5a5c46a8b15990e1e38636d017c28572e4370745', 'author': {'name': 'JosJuice', 'email': 'josjuice@gmail.com', 'username': 'JosJuice'}, 'removed': []}], 'organization': {'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'description': '', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events', 'id': 5050316, 'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'url': 'https://api.github.com/orgs/dolphin-emu'}, 'head_commit': {'id': '5a5c46a8b15990e1e38636d017c28572e4370745', 'message': 'Merge pull request #8514 from lioncash/sview\n\nCommon/Network: Make StringToMacAddress use a string_view', 'committer': {'name': 'GitHub', 'email': 'noreply@github.com', 'username': 'web-flow'}, 'distinct': True, 'timestamp': '2019-12-06T17:00:42+01:00', 'added': [], 'tree_id': '2354ff91dc919bf3110bf2351981666223bf1d1c', 'modified': ['Source/Core/Common/Network.cpp', 'Source/Core/Common/Network.h'], 'url': 'https://github.com/dolphin-emu/dolphin/commit/5a5c46a8b15990e1e38636d017c28572e4370745', 'author': {'name': 'JosJuice', 'email': 'josjuice@gmail.com', 'username': 'JosJuice'}, 'removed': []}, 'ref': 'refs/heads/master', 'deleted': False, 'repository': {'fork': False, 'has_wiki': True, 'mirror_url': None, 'open_issues_count': 170, 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'forks': 1329, 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'html_url': 'https://github.com/dolphin-emu/dolphin', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'open_issues': 170, 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'language': 'C++', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'default_branch': 'master', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'organization': 'dolphin-emu', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'watchers_count': 5798, 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'name': 'dolphin', 'size': 386665, 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'has_pages': False, 'has_issues': False, 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'disabled': False, 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'stargazers_count': 5798, 'created_at': 1374484077, 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'archived': False, 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'full_name': 'dolphin-emu/dolphin', 'updated_at': '2019-12-06T13:34:23Z', 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'private': False, 'forks_count': 1329, 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'has_projects': False, 'owner': {'type': 'Organization', 'id': 5050316, 'login': 'dolphin-emu', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'gravatar_id': '', 'email': None, 'html_url': 'https://github.com/dolphin-emu', 'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'name': 'dolphin-emu', 'site_admin': False, 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'url': 'https://api.github.com/users/dolphin-emu', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}'}, 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'has_downloads': True, 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'master_branch': 'master', 'watchers': 5798, 'license': {'name': 'GNU General Public License v2.0', 'node_id': 'MDc6TGljZW5zZTg=', 'spdx_id': 'GPL-2.0', 'key': 'gpl-2.0', 'url': 'https://api.github.com/licenses/gpl-2.0'}, 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'homepage': 'https://dolphin-emu.org/', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'id': 11577304, 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'stargazers': 5798, 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'url': 'https://github.com/dolphin-emu/dolphin', 'pushed_at': 1575648043, 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}'}, 'before': '15fc71cfcf5f94221443aaff99ae559fa3cb4633', 'created': False, 'forced': False, 'sender': {'type': 'User', 'avatar_url': 'https://avatars2.githubusercontent.com/u/6716818?v=4', 'login': 'JosJuice', 'gists_url': 'https://api.github.com/users/JosJuice/gists{/gist_id}', 'html_url': 'https://github.com/JosJuice', 'events_url': 'https://api.github.com/users/JosJuice/events{/privacy}', 'id': 6716818, 'site_admin': False, 'followers_url': 'https://api.github.com/users/JosJuice/followers', 'subscriptions_url': 'https://api.github.com/users/JosJuice/subscriptions', 'node_id': 'MDQ6VXNlcjY3MTY4MTg=', 'organizations_url': 'https://api.github.com/users/JosJuice/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/JosJuice/received_events', 'following_url': 'https://api.github.com/users/JosJuice/following{/other_user}', 'repos_url': 'https://api.github.com/users/JosJuice/repos', 'url': 'https://api.github.com/users/JosJuice', 'starred_url': 'https://api.github.com/users/JosJuice/starred{/owner}{/repo}'}, 'compare': 'https://github.com/dolphin-emu/dolphin/compare/15fc71cfcf5f...5a5c46a8b159', 'base_ref': None, 'after': '5a5c46a8b15990e1e38636d017c28572e4370745', 'pusher': {'name': 'JosJuice', 'email': 'josjuice@gmail.com'}}, 'source': 'webserver'}
2019-12-06T16:00:44.322273	{'gh_type': 'pull_request', 'type': 'raw_gh_hook', 'raw': {'action': 'closed', 'number': 8514, 'organization': {'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'description': '', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events', 'id': 5050316, 'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'url': 'https://api.github.com/orgs/dolphin-emu'}, 'sender': {'type': 'User', 'avatar_url': 'https://avatars2.githubusercontent.com/u/6716818?v=4', 'login': 'JosJuice', 'gists_url': 'https://api.github.com/users/JosJuice/gists{/gist_id}', 'html_url': 'https://github.com/JosJuice', 'events_url': 'https://api.github.com/users/JosJuice/events{/privacy}', 'id': 6716818, 'site_admin': False, 'followers_url': 'https://api.github.com/users/JosJuice/followers', 'subscriptions_url': 'https://api.github.com/users/JosJuice/subscriptions', 'node_id': 'MDQ6VXNlcjY3MTY4MTg=', 'organizations_url': 'https://api.github.com/users/JosJuice/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/JosJuice/received_events', 'following_url': 'https://api.github.com/users/JosJuice/following{/other_user}', 'repos_url': 'https://api.github.com/users/JosJuice/repos', 'url': 'https://api.github.com/users/JosJuice', 'starred_url': 'https://api.github.com/users/JosJuice/starred{/owner}{/repo}'}, 'repository': {'fork': False, 'has_wiki': True, 'mirror_url': None, 'open_issues_count': 170, 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'forks': 1329, 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'html_url': 'https://github.com/dolphin-emu/dolphin', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'open_issues': 170, 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'language': 'C++', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'default_branch': 'master', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'watchers_count': 5798, 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'name': 'dolphin', 'size': 386665, 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'has_pages': False, 'has_issues': False, 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'disabled': False, 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'stargazers_count': 5798, 'created_at': '2013-07-22T09:07:57Z', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'archived': False, 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'full_name': 'dolphin-emu/dolphin', 'updated_at': '2019-12-06T13:34:23Z', 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'private': False, 'forks_count': 1329, 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'has_projects': False, 'owner': {'type': 'Organization', 'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'html_url': 'https://github.com/dolphin-emu', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'id': 5050316, 'site_admin': False, 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'url': 'https://api.github.com/users/dolphin-emu', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}'}, 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'has_downloads': True, 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'watchers': 5798, 'license': {'name': 'GNU General Public License v2.0', 'node_id': 'MDc6TGljZW5zZTg=', 'spdx_id': 'GPL-2.0', 'key': 'gpl-2.0', 'url': 'https://api.github.com/licenses/gpl-2.0'}, 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'homepage': 'https://dolphin-emu.org/', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'id': 11577304, 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'pushed_at': '2019-12-06T16:00:42Z', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}'}, 'pull_request': {'deletions': 6, 'assignees': [], 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/8514.patch', 'additions': 5, 'review_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments{/number}', 'mergeable': None, 'number': 8514, 'author_association': 'MEMBER', 'mergeable_state': 'unknown', 'head': {'label': 'lioncash:sview', 'user': {'type': 'User', 'avatar_url': 'https://avatars1.githubusercontent.com/u/712067?v=4', 'login': 'lioncash', 'gists_url': 'https://api.github.com/users/lioncash/gists{/gist_id}', 'html_url': 'https://github.com/lioncash', 'events_url': 'https://api.github.com/users/lioncash/events{/privacy}', 'id': 712067, 'site_admin': False, 'followers_url': 'https://api.github.com/users/lioncash/followers', 'subscriptions_url': 'https://api.github.com/users/lioncash/subscriptions', 'node_id': 'MDQ6VXNlcjcxMjA2Nw==', 'organizations_url': 'https://api.github.com/users/lioncash/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/lioncash/received_events', 'following_url': 'https://api.github.com/users/lioncash/following{/other_user}', 'repos_url': 'https://api.github.com/users/lioncash/repos', 'url': 'https://api.github.com/users/lioncash', 'starred_url': 'https://api.github.com/users/lioncash/starred{/owner}{/repo}'}, 'sha': '81edcca8db0bbbe9904956d7038bd1a2abdd9a87', 'ref': 'sview', 'repo': {'fork': True, 'has_wiki': False, 'mirror_url': None, 'open_issues_count': 0, 'stargazers_url': 'https://api.github.com/repos/lioncash/dolphin/stargazers', 'forks': 1, 'deployments_url': 'https://api.github.com/repos/lioncash/dolphin/deployments', 'issue_events_url': 'https://api.github.com/repos/lioncash/dolphin/issues/events{/number}', 'html_url': 'https://github.com/lioncash/dolphin', 'pulls_url': 'https://api.github.com/repos/lioncash/dolphin/pulls{/number}', 'statuses_url': 'https://api.github.com/repos/lioncash/dolphin/statuses/{sha}', 'open_issues': 0, 'git_commits_url': 'https://api.github.com/repos/lioncash/dolphin/git/commits{/sha}', 'language': 'C++', 'blobs_url': 'https://api.github.com/repos/lioncash/dolphin/git/blobs{/sha}', 'events_url': 'https://api.github.com/repos/lioncash/dolphin/events', 'commits_url': 'https://api.github.com/repos/lioncash/dolphin/commits{/sha}', 'compare_url': 'https://api.github.com/repos/lioncash/dolphin/compare/{base}...{head}', 'default_branch': 'master', 'svn_url': 'https://github.com/lioncash/dolphin', 'downloads_url': 'https://api.github.com/repos/lioncash/dolphin/downloads', 'archive_url': 'https://api.github.com/repos/lioncash/dolphin/{archive_format}{/ref}', 'subscribers_url': 'https://api.github.com/repos/lioncash/dolphin/subscribers', 'labels_url': 'https://api.github.com/repos/lioncash/dolphin/labels{/name}', 'watchers_count': 5, 'contributors_url': 'https://api.github.com/repos/lioncash/dolphin/contributors', 'git_tags_url': 'https://api.github.com/repos/lioncash/dolphin/git/tags{/sha}', 'name': 'dolphin', 'size': 344264, 'languages_url': 'https://api.github.com/repos/lioncash/dolphin/languages', 'comments_url': 'https://api.github.com/repos/lioncash/dolphin/comments{/number}', 'teams_url': 'https://api.github.com/repos/lioncash/dolphin/teams', 'has_pages': False, 'has_issues': False, 'notifications_url': 'https://api.github.com/repos/lioncash/dolphin/notifications{?since,all,participating}', 'disabled': False, 'issue_comment_url': 'https://api.github.com/repos/lioncash/dolphin/issues/comments{/number}', 'stargazers_count': 5, 'created_at': '2014-01-27T23:00:05Z', 'hooks_url': 'https://api.github.com/repos/lioncash/dolphin/hooks', 'archived': False, 'description': 'Dolphin is a GameCube/Wii emulator, allowing you to play games for these two platforms on PC, with improvements.', 'milestones_url': 'https://api.github.com/repos/lioncash/dolphin/milestones{/number}', 'subscription_url': 'https://api.github.com/repos/lioncash/dolphin/subscription', 'full_name': 'lioncash/dolphin', 'updated_at': '2019-03-05T01:18:22Z', 'node_id': 'MDEwOlJlcG9zaXRvcnkxNjI5NTk4Mw==', 'issues_url': 'https://api.github.com/repos/lioncash/dolphin/issues{/number}', 'private': False, 'forks_count': 1, 'assignees_url': 'https://api.github.com/repos/lioncash/dolphin/assignees{/user}', 'ssh_url': 'git@github.com:lioncash/dolphin.git', 'collaborators_url': 'https://api.github.com/repos/lioncash/dolphin/collaborators{/collaborator}', 'has_projects': True, 'owner': {'type': 'User', 'avatar_url': 'https://avatars1.githubusercontent.com/u/712067?v=4', 'login': 'lioncash', 'gists_url': 'https://api.github.com/users/lioncash/gists{/gist_id}', 'html_url': 'https://github.com/lioncash', 'events_url': 'https://api.github.com/users/lioncash/events{/privacy}', 'id': 712067, 'site_admin': False, 'followers_url': 'https://api.github.com/users/lioncash/followers', 'subscriptions_url': 'https://api.github.com/users/lioncash/subscriptions', 'node_id': 'MDQ6VXNlcjcxMjA2Nw==', 'organizations_url': 'https://api.github.com/users/lioncash/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/lioncash/received_events', 'following_url': 'https://api.github.com/users/lioncash/following{/other_user}', 'repos_url': 'https://api.github.com/users/lioncash/repos', 'url': 'https://api.github.com/users/lioncash', 'starred_url': 'https://api.github.com/users/lioncash/starred{/owner}{/repo}'}, 'git_url': 'git://github.com/lioncash/dolphin.git', 'git_refs_url': 'https://api.github.com/repos/lioncash/dolphin/git/refs{/sha}', 'has_downloads': True, 'trees_url': 'https://api.github.com/repos/lioncash/dolphin/git/trees{/sha}', 'watchers': 5, 'license': {'name': 'GNU General Public License v2.0', 'node_id': 'MDc6TGljZW5zZTg=', 'spdx_id': 'GPL-2.0', 'key': 'gpl-2.0', 'url': 'https://api.github.com/licenses/gpl-2.0'}, 'forks_url': 'https://api.github.com/repos/lioncash/dolphin/forks', 'homepage': None, 'contents_url': 'https://api.github.com/repos/lioncash/dolphin/contents/{+path}', 'id': 16295983, 'tags_url': 'https://api.github.com/repos/lioncash/dolphin/tags', 'releases_url': 'https://api.github.com/repos/lioncash/dolphin/releases{/id}', 'merges_url': 'https://api.github.com/repos/lioncash/dolphin/merges', 'clone_url': 'https://github.com/lioncash/dolphin.git', 'branches_url': 'https://api.github.com/repos/lioncash/dolphin/branches{/branch}', 'url': 'https://api.github.com/repos/lioncash/dolphin', 'pushed_at': '2019-12-06T14:59:49Z', 'keys_url': 'https://api.github.com/repos/lioncash/dolphin/keys{/key_id}'}}, 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8514/commits', 'labels': [], 'user': {'type': 'User', 'avatar_url': 'https://avatars1.githubusercontent.com/u/712067?v=4', 'login': 'lioncash', 'gists_url': 'https://api.github.com/users/lioncash/gists{/gist_id}', 'html_url': 'https://github.com/lioncash', 'events_url': 'https://api.github.com/users/lioncash/events{/privacy}', 'id': 712067, 'site_admin': False, 'followers_url': 'https://api.github.com/users/lioncash/followers', 'subscriptions_url': 'https://api.github.com/users/lioncash/subscriptions', 'node_id': 'MDQ6VXNlcjcxMjA2Nw==', 'organizations_url': 'https://api.github.com/users/lioncash/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/lioncash/received_events', 'following_url': 'https://api.github.com/users/lioncash/following{/other_user}', 'repos_url': 'https://api.github.com/users/lioncash/repos', 'url': 'https://api.github.com/users/lioncash', 'starred_url': 'https://api.github.com/users/lioncash/starred{/owner}{/repo}'}, 'body': 'This function only ever reads the contents of the string in a non-owning manner, so we can change the parameter over to being a string view.', 'review_comments': 1, 'rebaseable': None, 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8514', 'merged_by': {'type': 'User', 'avatar_url': 'https://avatars2.githubusercontent.com/u/6716818?v=4', 'login': 'JosJuice', 'gists_url': 'https://api.github.com/users/JosJuice/gists{/gist_id}', 'html_url': 'https://github.com/JosJuice', 'events_url': 'https://api.github.com/users/JosJuice/events{/privacy}', 'id': 6716818, 'site_admin': False, 'followers_url': 'https://api.github.com/users/JosJuice/followers', 'subscriptions_url': 'https://api.github.com/users/JosJuice/subscriptions', 'node_id': 'MDQ6VXNlcjY3MTY4MTg=', 'organizations_url': 'https://api.github.com/users/JosJuice/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/JosJuice/received_events', 'following_url': 'https://api.github.com/users/JosJuice/following{/other_user}', 'repos_url': 'https://api.github.com/users/JosJuice/repos', 'url': 'https://api.github.com/users/JosJuice', 'starred_url': 'https://api.github.com/users/JosJuice/starred{/owner}{/repo}'}, 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8514/comments', 'commits': 3, 'maintainer_can_modify': False, 'comments': 0, 'created_at': '2019-12-06T14:54:39Z', 'changed_files': 2, 'review_comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8514/comments', 'draft': False, 'milestone': None, 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8514', 'updated_at': '2019-12-06T16:00:43Z', 'node_id': 'MDExOlB1bGxSZXF1ZXN0MzUwMDIxMTQy', '_links': {'review_comment': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments{/number}'}, 'commits': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8514/commits'}, 'comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8514/comments'}, 'statuses': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/81edcca8db0bbbe9904956d7038bd1a2abdd9a87'}, 'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8514'}, 'issue': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8514'}, 'review_comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8514/comments'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/8514'}}, 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/8514.diff', 'merged': True, 'state': 'closed', 'requested_teams': [], 'locked': False, 'merge_commit_sha': '5a5c46a8b15990e1e38636d017c28572e4370745', 'merged_at': '2019-12-06T16:00:42Z', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/81edcca8db0bbbe9904956d7038bd1a2abdd9a87', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8514', 'id': 350021142, 'title': 'Common/Network: Make StringToMacAddress use a string_view ', 'base': {'label': 'dolphin-emu:master', 'user': {'type': 'Organization', 'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'html_url': 'https://github.com/dolphin-emu', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'id': 5050316, 'site_admin': False, 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'url': 'https://api.github.com/users/dolphin-emu', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}'}, 'sha': '15fc71cfcf5f94221443aaff99ae559fa3cb4633', 'ref': 'master', 'repo': {'fork': False, 'has_wiki': True, 'mirror_url': None, 'open_issues_count': 170, 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'forks': 1329, 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'html_url': 'https://github.com/dolphin-emu/dolphin', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'open_issues': 170, 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'language': 'C++', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'default_branch': 'master', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'watchers_count': 5798, 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'name': 'dolphin', 'size': 386665, 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'has_pages': False, 'has_issues': False, 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'disabled': False, 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'stargazers_count': 5798, 'created_at': '2013-07-22T09:07:57Z', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'archived': False, 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'full_name': 'dolphin-emu/dolphin', 'updated_at': '2019-12-06T13:34:23Z', 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'private': False, 'forks_count': 1329, 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'has_projects': False, 'owner': {'type': 'Organization', 'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'html_url': 'https://github.com/dolphin-emu', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'id': 5050316, 'site_admin': False, 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'url': 'https://api.github.com/users/dolphin-emu', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}'}, 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'has_downloads': True, 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'watchers': 5798, 'license': {'name': 'GNU General Public License v2.0', 'node_id': 'MDc6TGljZW5zZTg=', 'spdx_id': 'GPL-2.0', 'key': 'gpl-2.0', 'url': 'https://api.github.com/licenses/gpl-2.0'}, 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'homepage': 'https://dolphin-emu.org/', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'id': 11577304, 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'pushed_at': '2019-12-06T16:00:42Z', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}'}}, 'closed_at': '2019-12-06T16:00:42Z', 'requested_reviewers': [], 'assignee': None}}, 'source': 'webserver'}
2019-12-06T15:02:42.159796	{'gh_type': 'pull_request_review', 'type': 'raw_gh_hook', 'raw': {'action': 'submitted', 'repository': {'fork': False, 'has_wiki': True, 'mirror_url': None, 'open_issues_count': 171, 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'forks': 1329, 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'html_url': 'https://github.com/dolphin-emu/dolphin', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'open_issues': 171, 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'language': 'C++', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'default_branch': 'master', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'watchers_count': 5798, 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'name': 'dolphin', 'size': 386665, 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'has_pages': False, 'has_issues': False, 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'disabled': False, 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'stargazers_count': 5798, 'created_at': '2013-07-22T09:07:57Z', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'archived': False, 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'full_name': 'dolphin-emu/dolphin', 'updated_at': '2019-12-06T13:34:23Z', 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'private': False, 'forks_count': 1329, 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'has_projects': False, 'owner': {'type': 'Organization', 'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'html_url': 'https://github.com/dolphin-emu', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'id': 5050316, 'site_admin': False, 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'url': 'https://api.github.com/users/dolphin-emu', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}'}, 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'has_downloads': True, 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'watchers': 5798, 'license': {'name': 'GNU General Public License v2.0', 'node_id': 'MDc6TGljZW5zZTg=', 'spdx_id': 'GPL-2.0', 'key': 'gpl-2.0', 'url': 'https://api.github.com/licenses/gpl-2.0'}, 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'homepage': 'https://dolphin-emu.org/', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'id': 11577304, 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'pushed_at': '2019-12-06T14:59:51Z', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}'}, 'sender': {'type': 'User', 'avatar_url': 'https://avatars1.githubusercontent.com/u/7947461?v=4', 'login': 'CookiePLMonster', 'gists_url': 'https://api.github.com/users/CookiePLMonster/gists{/gist_id}', 'html_url': 'https://github.com/CookiePLMonster', 'events_url': 'https://api.github.com/users/CookiePLMonster/events{/privacy}', 'id': 7947461, 'site_admin': False, 'followers_url': 'https://api.github.com/users/CookiePLMonster/followers', 'subscriptions_url': 'https://api.github.com/users/CookiePLMonster/subscriptions', 'node_id': 'MDQ6VXNlcjc5NDc0NjE=', 'organizations_url': 'https://api.github.com/users/CookiePLMonster/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/CookiePLMonster/received_events', 'following_url': 'https://api.github.com/users/CookiePLMonster/following{/other_user}', 'repos_url': 'https://api.github.com/users/CookiePLMonster/repos', 'url': 'https://api.github.com/users/CookiePLMonster', 'starred_url': 'https://api.github.com/users/CookiePLMonster/starred{/owner}{/repo}'}, 'organization': {'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'description': '', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events', 'id': 5050316, 'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'url': 'https://api.github.com/orgs/dolphin-emu'}, 'review': {'id': 328258121, 'state': 'approved', 'submitted_at': '2019-12-06T15:02:40Z', 'user': {'type': 'User', 'avatar_url': 'https://avatars1.githubusercontent.com/u/7947461?v=4', 'login': 'CookiePLMonster', 'gists_url': 'https://api.github.com/users/CookiePLMonster/gists{/gist_id}', 'html_url': 'https://github.com/CookiePLMonster', 'events_url': 'https://api.github.com/users/CookiePLMonster/events{/privacy}', 'id': 7947461, 'site_admin': False, 'followers_url': 'https://api.github.com/users/CookiePLMonster/followers', 'subscriptions_url': 'https://api.github.com/users/CookiePLMonster/subscriptions', 'node_id': 'MDQ6VXNlcjc5NDc0NjE=', 'organizations_url': 'https://api.github.com/users/CookiePLMonster/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/CookiePLMonster/received_events', 'following_url': 'https://api.github.com/users/CookiePLMonster/following{/other_user}', 'repos_url': 'https://api.github.com/users/CookiePLMonster/repos', 'url': 'https://api.github.com/users/CookiePLMonster', 'starred_url': 'https://api.github.com/users/CookiePLMonster/starred{/owner}{/repo}'}, 'author_association': 'CONTRIBUTOR', 'commit_id': '81edcca8db0bbbe9904956d7038bd1a2abdd9a87', '_links': {'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8514'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/8514#pullrequestreview-328258121'}}, 'node_id': 'MDE3OlB1bGxSZXF1ZXN0UmV2aWV3MzI4MjU4MTIx', 'body': '', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8514', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8514#pullrequestreview-328258121'}, 'pull_request': {'created_at': '2019-12-06T14:54:39Z', 'assignees': [], 'review_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments{/number}', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/8514.patch', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8514', 'milestone': None, 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/81edcca8db0bbbe9904956d7038bd1a2abdd9a87', 'number': 8514, 'updated_at': '2019-12-06T15:02:40Z', 'node_id': 'MDExOlB1bGxSZXF1ZXN0MzUwMDIxMTQy', 'author_association': 'MEMBER', 'head': {'label': 'lioncash:sview', 'user': {'type': 'User', 'avatar_url': 'https://avatars1.githubusercontent.com/u/712067?v=4', 'login': 'lioncash', 'gists_url': 'https://api.github.com/users/lioncash/gists{/gist_id}', 'html_url': 'https://github.com/lioncash', 'events_url': 'https://api.github.com/users/lioncash/events{/privacy}', 'id': 712067, 'site_admin': False, 'followers_url': 'https://api.github.com/users/lioncash/followers', 'subscriptions_url': 'https://api.github.com/users/lioncash/subscriptions', 'node_id': 'MDQ6VXNlcjcxMjA2Nw==', 'organizations_url': 'https://api.github.com/users/lioncash/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/lioncash/received_events', 'following_url': 'https://api.github.com/users/lioncash/following{/other_user}', 'repos_url': 'https://api.github.com/users/lioncash/repos', 'url': 'https://api.github.com/users/lioncash', 'starred_url': 'https://api.github.com/users/lioncash/starred{/owner}{/repo}'}, 'sha': '81edcca8db0bbbe9904956d7038bd1a2abdd9a87', 'ref': 'sview', 'repo': {'fork': True, 'has_wiki': False, 'mirror_url': None, 'open_issues_count': 0, 'stargazers_url': 'https://api.github.com/repos/lioncash/dolphin/stargazers', 'forks': 1, 'deployments_url': 'https://api.github.com/repos/lioncash/dolphin/deployments', 'issue_events_url': 'https://api.github.com/repos/lioncash/dolphin/issues/events{/number}', 'html_url': 'https://github.com/lioncash/dolphin', 'pulls_url': 'https://api.github.com/repos/lioncash/dolphin/pulls{/number}', 'statuses_url': 'https://api.github.com/repos/lioncash/dolphin/statuses/{sha}', 'open_issues': 0, 'git_commits_url': 'https://api.github.com/repos/lioncash/dolphin/git/commits{/sha}', 'language': 'C++', 'blobs_url': 'https://api.github.com/repos/lioncash/dolphin/git/blobs{/sha}', 'events_url': 'https://api.github.com/repos/lioncash/dolphin/events', 'commits_url': 'https://api.github.com/repos/lioncash/dolphin/commits{/sha}', 'compare_url': 'https://api.github.com/repos/lioncash/dolphin/compare/{base}...{head}', 'default_branch': 'master', 'svn_url': 'https://github.com/lioncash/dolphin', 'downloads_url': 'https://api.github.com/repos/lioncash/dolphin/downloads', 'archive_url': 'https://api.github.com/repos/lioncash/dolphin/{archive_format}{/ref}', 'subscribers_url': 'https://api.github.com/repos/lioncash/dolphin/subscribers', 'labels_url': 'https://api.github.com/repos/lioncash/dolphin/labels{/name}', 'watchers_count': 5, 'contributors_url': 'https://api.github.com/repos/lioncash/dolphin/contributors', 'git_tags_url': 'https://api.github.com/repos/lioncash/dolphin/git/tags{/sha}', 'name': 'dolphin', 'size': 344262, 'languages_url': 'https://api.github.com/repos/lioncash/dolphin/languages', 'comments_url': 'https://api.github.com/repos/lioncash/dolphin/comments{/number}', 'teams_url': 'https://api.github.com/repos/lioncash/dolphin/teams', 'has_pages': False, 'has_issues': False, 'notifications_url': 'https://api.github.com/repos/lioncash/dolphin/notifications{?since,all,participating}', 'disabled': False, 'issue_comment_url': 'https://api.github.com/repos/lioncash/dolphin/issues/comments{/number}', 'stargazers_count': 5, 'created_at': '2014-01-27T23:00:05Z', 'hooks_url': 'https://api.github.com/repos/lioncash/dolphin/hooks', 'archived': False, 'description': 'Dolphin is a GameCube/Wii emulator, allowing you to play games for these two platforms on PC, with improvements.', 'milestones_url': 'https://api.github.com/repos/lioncash/dolphin/milestones{/number}', 'subscription_url': 'https://api.github.com/repos/lioncash/dolphin/subscription', 'full_name': 'lioncash/dolphin', 'updated_at': '2019-03-05T01:18:22Z', 'node_id': 'MDEwOlJlcG9zaXRvcnkxNjI5NTk4Mw==', 'issues_url': 'https://api.github.com/repos/lioncash/dolphin/issues{/number}', 'private': False, 'forks_count': 1, 'assignees_url': 'https://api.github.com/repos/lioncash/dolphin/assignees{/user}', 'ssh_url': 'git@github.com:lioncash/dolphin.git', 'collaborators_url': 'https://api.github.com/repos/lioncash/dolphin/collaborators{/collaborator}', 'has_projects': True, 'owner': {'type': 'User', 'avatar_url': 'https://avatars1.githubusercontent.com/u/712067?v=4', 'login': 'lioncash', 'gists_url': 'https://api.github.com/users/lioncash/gists{/gist_id}', 'html_url': 'https://github.com/lioncash', 'events_url': 'https://api.github.com/users/lioncash/events{/privacy}', 'id': 712067, 'site_admin': False, 'followers_url': 'https://api.github.com/users/lioncash/followers', 'subscriptions_url': 'https://api.github.com/users/lioncash/subscriptions', 'node_id': 'MDQ6VXNlcjcxMjA2Nw==', 'organizations_url': 'https://api.github.com/users/lioncash/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/lioncash/received_events', 'following_url': 'https://api.github.com/users/lioncash/following{/other_user}', 'repos_url': 'https://api.github.com/users/lioncash/repos', 'url': 'https://api.github.com/users/lioncash', 'starred_url': 'https://api.github.com/users/lioncash/starred{/owner}{/repo}'}, 'git_url': 'git://github.com/lioncash/dolphin.git', 'git_refs_url': 'https://api.github.com/repos/lioncash/dolphin/git/refs{/sha}', 'has_downloads': True, 'trees_url': 'https://api.github.com/repos/lioncash/dolphin/git/trees{/sha}', 'watchers': 5, 'license': {'name': 'GNU General Public License v2.0', 'node_id': 'MDc6TGljZW5zZTg=', 'spdx_id': 'GPL-2.0', 'key': 'gpl-2.0', 'url': 'https://api.github.com/licenses/gpl-2.0'}, 'forks_url': 'https://api.github.com/repos/lioncash/dolphin/forks', 'homepage': None, 'contents_url': 'https://api.github.com/repos/lioncash/dolphin/contents/{+path}', 'id': 16295983, 'tags_url': 'https://api.github.com/repos/lioncash/dolphin/tags', 'releases_url': 'https://api.github.com/repos/lioncash/dolphin/releases{/id}', 'merges_url': 'https://api.github.com/repos/lioncash/dolphin/merges', 'clone_url': 'https://github.com/lioncash/dolphin.git', 'branches_url': 'https://api.github.com/repos/lioncash/dolphin/branches{/branch}', 'url': 'https://api.github.com/repos/lioncash/dolphin', 'pushed_at': '2019-12-06T14:59:49Z', 'keys_url': 'https://api.github.com/repos/lioncash/dolphin/keys{/key_id}'}}, '_links': {'review_comment': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments{/number}'}, 'commits': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8514/commits'}, 'comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8514/comments'}, 'statuses': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/81edcca8db0bbbe9904956d7038bd1a2abdd9a87'}, 'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8514'}, 'issue': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8514'}, 'review_comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8514/comments'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/8514'}}, 'requested_teams': [], 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/8514.diff', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8514/commits', 'labels': [], 'state': 'open', 'user': {'type': 'User', 'avatar_url': 'https://avatars1.githubusercontent.com/u/712067?v=4', 'login': 'lioncash', 'gists_url': 'https://api.github.com/users/lioncash/gists{/gist_id}', 'html_url': 'https://github.com/lioncash', 'events_url': 'https://api.github.com/users/lioncash/events{/privacy}', 'id': 712067, 'site_admin': False, 'followers_url': 'https://api.github.com/users/lioncash/followers', 'subscriptions_url': 'https://api.github.com/users/lioncash/subscriptions', 'node_id': 'MDQ6VXNlcjcxMjA2Nw==', 'organizations_url': 'https://api.github.com/users/lioncash/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/lioncash/received_events', 'following_url': 'https://api.github.com/users/lioncash/following{/other_user}', 'repos_url': 'https://api.github.com/users/lioncash/repos', 'url': 'https://api.github.com/users/lioncash', 'starred_url': 'https://api.github.com/users/lioncash/starred{/owner}{/repo}'}, 'locked': False, 'merge_commit_sha': '1d6812ca590abd3a0df4c7e9fbaeb9882c0b2c0b', 'merged_at': None, 'body': 'This function only ever reads the contents of the string in a non-owning manner, so we can change the parameter over to being a string view.', 'assignee': None, 'id': 350021142, 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8514', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8514/comments', 'title': 'Common/Network: Make StringToMacAddress use a string_view ', 'base': {'label': 'dolphin-emu:master', 'user': {'type': 'Organization', 'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'html_url': 'https://github.com/dolphin-emu', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'id': 5050316, 'site_admin': False, 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'url': 'https://api.github.com/users/dolphin-emu', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}'}, 'sha': '15fc71cfcf5f94221443aaff99ae559fa3cb4633', 'ref': 'master', 'repo': {'fork': False, 'has_wiki': True, 'mirror_url': None, 'open_issues_count': 171, 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'forks': 1329, 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'html_url': 'https://github.com/dolphin-emu/dolphin', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'open_issues': 171, 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'language': 'C++', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'default_branch': 'master', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'watchers_count': 5798, 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'name': 'dolphin', 'size': 386665, 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'has_pages': False, 'has_issues': False, 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'disabled': False, 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'stargazers_count': 5798, 'created_at': '2013-07-22T09:07:57Z', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'archived': False, 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'full_name': 'dolphin-emu/dolphin', 'updated_at': '2019-12-06T13:34:23Z', 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'private': False, 'forks_count': 1329, 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'has_projects': False, 'owner': {'type': 'Organization', 'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'html_url': 'https://github.com/dolphin-emu', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'id': 5050316, 'site_admin': False, 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'url': 'https://api.github.com/users/dolphin-emu', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}'}, 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'has_downloads': True, 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'watchers': 5798, 'license': {'name': 'GNU General Public License v2.0', 'node_id': 'MDc6TGljZW5zZTg=', 'spdx_id': 'GPL-2.0', 'key': 'gpl-2.0', 'url': 'https://api.github.com/licenses/gpl-2.0'}, 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'homepage': 'https://dolphin-emu.org/', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'id': 11577304, 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'pushed_at': '2019-12-06T14:59:51Z', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}'}}, 'closed_at': None, 'requested_reviewers': [], 'review_comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8514/comments', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8514'}}, 'source': 'webserver'}
2019-12-06T14:59:51.426432	{'gh_type': 'pull_request', 'type': 'raw_gh_hook', 'raw': {'action': 'synchronize', 'number': 8514, 'before': 'cbfacc41bab03f0171981a64fe90949bc2456d3e', 'organization': {'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'description': '', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events', 'id': 5050316, 'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'url': 'https://api.github.com/orgs/dolphin-emu'}, 'sender': {'type': 'User', 'avatar_url': 'https://avatars1.githubusercontent.com/u/712067?v=4', 'login': 'lioncash', 'gists_url': 'https://api.github.com/users/lioncash/gists{/gist_id}', 'html_url': 'https://github.com/lioncash', 'events_url': 'https://api.github.com/users/lioncash/events{/privacy}', 'id': 712067, 'site_admin': False, 'followers_url': 'https://api.github.com/users/lioncash/followers', 'subscriptions_url': 'https://api.github.com/users/lioncash/subscriptions', 'node_id': 'MDQ6VXNlcjcxMjA2Nw==', 'organizations_url': 'https://api.github.com/users/lioncash/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/lioncash/received_events', 'following_url': 'https://api.github.com/users/lioncash/following{/other_user}', 'repos_url': 'https://api.github.com/users/lioncash/repos', 'url': 'https://api.github.com/users/lioncash', 'starred_url': 'https://api.github.com/users/lioncash/starred{/owner}{/repo}'}, 'repository': {'fork': False, 'has_wiki': True, 'mirror_url': None, 'open_issues_count': 171, 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'forks': 1329, 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'html_url': 'https://github.com/dolphin-emu/dolphin', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'open_issues': 171, 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'language': 'C++', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'default_branch': 'master', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'watchers_count': 5798, 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'name': 'dolphin', 'size': 386665, 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'has_pages': False, 'has_issues': False, 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'disabled': False, 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'stargazers_count': 5798, 'created_at': '2013-07-22T09:07:57Z', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'archived': False, 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'full_name': 'dolphin-emu/dolphin', 'updated_at': '2019-12-06T13:34:23Z', 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'private': False, 'forks_count': 1329, 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'has_projects': False, 'owner': {'type': 'Organization', 'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'html_url': 'https://github.com/dolphin-emu', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'id': 5050316, 'site_admin': False, 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'url': 'https://api.github.com/users/dolphin-emu', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}'}, 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'has_downloads': True, 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'watchers': 5798, 'license': {'name': 'GNU General Public License v2.0', 'node_id': 'MDc6TGljZW5zZTg=', 'spdx_id': 'GPL-2.0', 'key': 'gpl-2.0', 'url': 'https://api.github.com/licenses/gpl-2.0'}, 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'homepage': 'https://dolphin-emu.org/', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'id': 11577304, 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'pushed_at': '2019-12-06T14:54:40Z', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}'}, 'after': '81edcca8db0bbbe9904956d7038bd1a2abdd9a87', 'pull_request': {'deletions': 6, 'assignees': [], 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/8514.patch', 'additions': 5, 'review_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments{/number}', 'mergeable': None, 'number': 8514, 'author_association': 'MEMBER', 'mergeable_state': 'unknown', 'head': {'label': 'lioncash:sview', 'user': {'type': 'User', 'avatar_url': 'https://avatars1.githubusercontent.com/u/712067?v=4', 'login': 'lioncash', 'gists_url': 'https://api.github.com/users/lioncash/gists{/gist_id}', 'html_url': 'https://github.com/lioncash', 'events_url': 'https://api.github.com/users/lioncash/events{/privacy}', 'id': 712067, 'site_admin': False, 'followers_url': 'https://api.github.com/users/lioncash/followers', 'subscriptions_url': 'https://api.github.com/users/lioncash/subscriptions', 'node_id': 'MDQ6VXNlcjcxMjA2Nw==', 'organizations_url': 'https://api.github.com/users/lioncash/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/lioncash/received_events', 'following_url': 'https://api.github.com/users/lioncash/following{/other_user}', 'repos_url': 'https://api.github.com/users/lioncash/repos', 'url': 'https://api.github.com/users/lioncash', 'starred_url': 'https://api.github.com/users/lioncash/starred{/owner}{/repo}'}, 'sha': '81edcca8db0bbbe9904956d7038bd1a2abdd9a87', 'ref': 'sview', 'repo': {'fork': True, 'has_wiki': False, 'mirror_url': None, 'open_issues_count': 0, 'stargazers_url': 'https://api.github.com/repos/lioncash/dolphin/stargazers', 'forks': 1, 'deployments_url': 'https://api.github.com/repos/lioncash/dolphin/deployments', 'issue_events_url': 'https://api.github.com/repos/lioncash/dolphin/issues/events{/number}', 'html_url': 'https://github.com/lioncash/dolphin', 'pulls_url': 'https://api.github.com/repos/lioncash/dolphin/pulls{/number}', 'statuses_url': 'https://api.github.com/repos/lioncash/dolphin/statuses/{sha}', 'open_issues': 0, 'git_commits_url': 'https://api.github.com/repos/lioncash/dolphin/git/commits{/sha}', 'language': 'C++', 'blobs_url': 'https://api.github.com/repos/lioncash/dolphin/git/blobs{/sha}', 'events_url': 'https://api.github.com/repos/lioncash/dolphin/events', 'commits_url': 'https://api.github.com/repos/lioncash/dolphin/commits{/sha}', 'compare_url': 'https://api.github.com/repos/lioncash/dolphin/compare/{base}...{head}', 'default_branch': 'master', 'svn_url': 'https://github.com/lioncash/dolphin', 'downloads_url': 'https://api.github.com/repos/lioncash/dolphin/downloads', 'archive_url': 'https://api.github.com/repos/lioncash/dolphin/{archive_format}{/ref}', 'subscribers_url': 'https://api.github.com/repos/lioncash/dolphin/subscribers', 'labels_url': 'https://api.github.com/repos/lioncash/dolphin/labels{/name}', 'watchers_count': 5, 'contributors_url': 'https://api.github.com/repos/lioncash/dolphin/contributors', 'git_tags_url': 'https://api.github.com/repos/lioncash/dolphin/git/tags{/sha}', 'name': 'dolphin', 'size': 344262, 'languages_url': 'https://api.github.com/repos/lioncash/dolphin/languages', 'comments_url': 'https://api.github.com/repos/lioncash/dolphin/comments{/number}', 'teams_url': 'https://api.github.com/repos/lioncash/dolphin/teams', 'has_pages': False, 'has_issues': False, 'notifications_url': 'https://api.github.com/repos/lioncash/dolphin/notifications{?since,all,participating}', 'disabled': False, 'issue_comment_url': 'https://api.github.com/repos/lioncash/dolphin/issues/comments{/number}', 'stargazers_count': 5, 'created_at': '2014-01-27T23:00:05Z', 'hooks_url': 'https://api.github.com/repos/lioncash/dolphin/hooks', 'archived': False, 'description': 'Dolphin is a GameCube/Wii emulator, allowing you to play games for these two platforms on PC, with improvements.', 'milestones_url': 'https://api.github.com/repos/lioncash/dolphin/milestones{/number}', 'subscription_url': 'https://api.github.com/repos/lioncash/dolphin/subscription', 'full_name': 'lioncash/dolphin', 'updated_at': '2019-03-05T01:18:22Z', 'node_id': 'MDEwOlJlcG9zaXRvcnkxNjI5NTk4Mw==', 'issues_url': 'https://api.github.com/repos/lioncash/dolphin/issues{/number}', 'private': False, 'forks_count': 1, 'assignees_url': 'https://api.github.com/repos/lioncash/dolphin/assignees{/user}', 'ssh_url': 'git@github.com:lioncash/dolphin.git', 'collaborators_url': 'https://api.github.com/repos/lioncash/dolphin/collaborators{/collaborator}', 'has_projects': True, 'owner': {'type': 'User', 'avatar_url': 'https://avatars1.githubusercontent.com/u/712067?v=4', 'login': 'lioncash', 'gists_url': 'https://api.github.com/users/lioncash/gists{/gist_id}', 'html_url': 'https://github.com/lioncash', 'events_url': 'https://api.github.com/users/lioncash/events{/privacy}', 'id': 712067, 'site_admin': False, 'followers_url': 'https://api.github.com/users/lioncash/followers', 'subscriptions_url': 'https://api.github.com/users/lioncash/subscriptions', 'node_id': 'MDQ6VXNlcjcxMjA2Nw==', 'organizations_url': 'https://api.github.com/users/lioncash/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/lioncash/received_events', 'following_url': 'https://api.github.com/users/lioncash/following{/other_user}', 'repos_url': 'https://api.github.com/users/lioncash/repos', 'url': 'https://api.github.com/users/lioncash', 'starred_url': 'https://api.github.com/users/lioncash/starred{/owner}{/repo}'}, 'git_url': 'git://github.com/lioncash/dolphin.git', 'git_refs_url': 'https://api.github.com/repos/lioncash/dolphin/git/refs{/sha}', 'has_downloads': True, 'trees_url': 'https://api.github.com/repos/lioncash/dolphin/git/trees{/sha}', 'watchers': 5, 'license': {'name': 'GNU General Public License v2.0', 'node_id': 'MDc6TGljZW5zZTg=', 'spdx_id': 'GPL-2.0', 'key': 'gpl-2.0', 'url': 'https://api.github.com/licenses/gpl-2.0'}, 'forks_url': 'https://api.github.com/repos/lioncash/dolphin/forks', 'homepage': None, 'contents_url': 'https://api.github.com/repos/lioncash/dolphin/contents/{+path}', 'id': 16295983, 'tags_url': 'https://api.github.com/repos/lioncash/dolphin/tags', 'releases_url': 'https://api.github.com/repos/lioncash/dolphin/releases{/id}', 'merges_url': 'https://api.github.com/repos/lioncash/dolphin/merges', 'clone_url': 'https://github.com/lioncash/dolphin.git', 'branches_url': 'https://api.github.com/repos/lioncash/dolphin/branches{/branch}', 'url': 'https://api.github.com/repos/lioncash/dolphin', 'pushed_at': '2019-12-06T14:59:49Z', 'keys_url': 'https://api.github.com/repos/lioncash/dolphin/keys{/key_id}'}}, 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8514/commits', 'labels': [], 'user': {'type': 'User', 'avatar_url': 'https://avatars1.githubusercontent.com/u/712067?v=4', 'login': 'lioncash', 'gists_url': 'https://api.github.com/users/lioncash/gists{/gist_id}', 'html_url': 'https://github.com/lioncash', 'events_url': 'https://api.github.com/users/lioncash/events{/privacy}', 'id': 712067, 'site_admin': False, 'followers_url': 'https://api.github.com/users/lioncash/followers', 'subscriptions_url': 'https://api.github.com/users/lioncash/subscriptions', 'node_id': 'MDQ6VXNlcjcxMjA2Nw==', 'organizations_url': 'https://api.github.com/users/lioncash/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/lioncash/received_events', 'following_url': 'https://api.github.com/users/lioncash/following{/other_user}', 'repos_url': 'https://api.github.com/users/lioncash/repos', 'url': 'https://api.github.com/users/lioncash', 'starred_url': 'https://api.github.com/users/lioncash/starred{/owner}{/repo}'}, 'body': 'This function only ever reads the contents of the string in a non-owning manner, so we can change the parameter over to being a string view.', 'review_comments': 1, 'rebaseable': None, 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8514', 'merged_by': None, 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8514/comments', 'commits': 3, 'maintainer_can_modify': True, 'comments': 0, 'created_at': '2019-12-06T14:54:39Z', 'changed_files': 2, 'review_comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8514/comments', 'draft': False, 'milestone': None, 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8514', 'updated_at': '2019-12-06T14:59:50Z', 'node_id': 'MDExOlB1bGxSZXF1ZXN0MzUwMDIxMTQy', '_links': {'review_comment': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments{/number}'}, 'commits': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8514/commits'}, 'comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8514/comments'}, 'statuses': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/81edcca8db0bbbe9904956d7038bd1a2abdd9a87'}, 'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8514'}, 'issue': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8514'}, 'review_comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8514/comments'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/8514'}}, 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/8514.diff', 'merged': False, 'state': 'open', 'requested_teams': [], 'locked': False, 'merge_commit_sha': '5495b8ad972d688a555d0e130b5ee68b6c8c31d3', 'merged_at': None, 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/81edcca8db0bbbe9904956d7038bd1a2abdd9a87', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8514', 'id': 350021142, 'title': 'Common/Network: Make StringToMacAddress use a string_view ', 'base': {'label': 'dolphin-emu:master', 'user': {'type': 'Organization', 'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'html_url': 'https://github.com/dolphin-emu', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'id': 5050316, 'site_admin': False, 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'url': 'https://api.github.com/users/dolphin-emu', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}'}, 'sha': '15fc71cfcf5f94221443aaff99ae559fa3cb4633', 'ref': 'master', 'repo': {'fork': False, 'has_wiki': True, 'mirror_url': None, 'open_issues_count': 171, 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'forks': 1329, 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'html_url': 'https://github.com/dolphin-emu/dolphin', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'open_issues': 171, 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'language': 'C++', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'default_branch': 'master', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'watchers_count': 5798, 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'name': 'dolphin', 'size': 386665, 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'has_pages': False, 'has_issues': False, 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'disabled': False, 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'stargazers_count': 5798, 'created_at': '2013-07-22T09:07:57Z', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'archived': False, 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'full_name': 'dolphin-emu/dolphin', 'updated_at': '2019-12-06T13:34:23Z', 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'private': False, 'forks_count': 1329, 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'has_projects': False, 'owner': {'type': 'Organization', 'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'html_url': 'https://github.com/dolphin-emu', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'id': 5050316, 'site_admin': False, 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'url': 'https://api.github.com/users/dolphin-emu', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}'}, 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'has_downloads': True, 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'watchers': 5798, 'license': {'name': 'GNU General Public License v2.0', 'node_id': 'MDc6TGljZW5zZTg=', 'spdx_id': 'GPL-2.0', 'key': 'gpl-2.0', 'url': 'https://api.github.com/licenses/gpl-2.0'}, 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'homepage': 'https://dolphin-emu.org/', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'id': 11577304, 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'pushed_at': '2019-12-06T14:54:40Z', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}'}}, 'closed_at': None, 'requested_reviewers': [], 'assignee': None}}, 'source': 'webserver'}
2019-12-06T14:57:08.211727	{'gh_type': 'pull_request_review_comment', 'type': 'raw_gh_hook', 'raw': {'action': 'created', 'repository': {'fork': False, 'has_wiki': True, 'mirror_url': None, 'open_issues_count': 171, 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'forks': 1329, 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'html_url': 'https://github.com/dolphin-emu/dolphin', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'open_issues': 171, 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'language': 'C++', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'default_branch': 'master', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'watchers_count': 5798, 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'name': 'dolphin', 'size': 386665, 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'has_pages': False, 'has_issues': False, 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'disabled': False, 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'stargazers_count': 5798, 'created_at': '2013-07-22T09:07:57Z', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'archived': False, 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'full_name': 'dolphin-emu/dolphin', 'updated_at': '2019-12-06T13:34:23Z', 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'private': False, 'forks_count': 1329, 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'has_projects': False, 'owner': {'type': 'Organization', 'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'html_url': 'https://github.com/dolphin-emu', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'id': 5050316, 'site_admin': False, 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'url': 'https://api.github.com/users/dolphin-emu', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}'}, 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'has_downloads': True, 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'watchers': 5798, 'license': {'name': 'GNU General Public License v2.0', 'node_id': 'MDc6TGljZW5zZTg=', 'spdx_id': 'GPL-2.0', 'key': 'gpl-2.0', 'url': 'https://api.github.com/licenses/gpl-2.0'}, 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'homepage': 'https://dolphin-emu.org/', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'id': 11577304, 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'pushed_at': '2019-12-06T14:54:40Z', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}'}, 'comment': {'created_at': '2019-12-06T14:57:06Z', 'user': {'type': 'User', 'avatar_url': 'https://avatars1.githubusercontent.com/u/7947461?v=4', 'login': 'CookiePLMonster', 'gists_url': 'https://api.github.com/users/CookiePLMonster/gists{/gist_id}', 'html_url': 'https://github.com/CookiePLMonster', 'events_url': 'https://api.github.com/users/CookiePLMonster/events{/privacy}', 'id': 7947461, 'site_admin': False, 'followers_url': 'https://api.github.com/users/CookiePLMonster/followers', 'subscriptions_url': 'https://api.github.com/users/CookiePLMonster/subscriptions', 'node_id': 'MDQ6VXNlcjc5NDc0NjE=', 'organizations_url': 'https://api.github.com/users/CookiePLMonster/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/CookiePLMonster/received_events', 'following_url': 'https://api.github.com/users/CookiePLMonster/following{/other_user}', 'repos_url': 'https://api.github.com/users/CookiePLMonster/repos', 'url': 'https://api.github.com/users/CookiePLMonster', 'starred_url': 'https://api.github.com/users/CookiePLMonster/starred{/owner}{/repo}'}, 'original_commit_id': 'cbfacc41bab03f0171981a64fe90949bc2456d3e', 'pull_request_review_id': 328254597, 'diff_hunk': '@@ -43,7 +41,7 @@ std::string MacAddressToString(const MACAddress& mac)\n                      mac[4], mac[5]);\n }\n \n-std::optional<MACAddress> StringToMacAddress(const std::string& mac_string)\n+std::optional<MACAddress> StringToMacAddress(std::string_view mac_string)\n {\n   if (mac_string.empty())\n     return {};', 'original_position': 17, 'body': 'You yourself recommended `std::nullopt` a while back, would be a good fit there. Since this PR only touches a single function, I see no reason not to go for it together with `string_view` change.', 'commit_id': 'cbfacc41bab03f0171981a64fe90949bc2456d3e', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8514#discussion_r354871955', 'id': 354871955, 'updated_at': '2019-12-06T14:57:06Z', 'node_id': 'MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDM1NDg3MTk1NQ==', 'author_association': 'CONTRIBUTOR', 'path': 'Source/Core/Common/Network.cpp', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/354871955'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8514'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/8514#discussion_r354871955'}}, 'position': 17, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/354871955', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8514'}, 'sender': {'type': 'User', 'avatar_url': 'https://avatars1.githubusercontent.com/u/7947461?v=4', 'login': 'CookiePLMonster', 'gists_url': 'https://api.github.com/users/CookiePLMonster/gists{/gist_id}', 'html_url': 'https://github.com/CookiePLMonster', 'events_url': 'https://api.github.com/users/CookiePLMonster/events{/privacy}', 'id': 7947461, 'site_admin': False, 'followers_url': 'https://api.github.com/users/CookiePLMonster/followers', 'subscriptions_url': 'https://api.github.com/users/CookiePLMonster/subscriptions', 'node_id': 'MDQ6VXNlcjc5NDc0NjE=', 'organizations_url': 'https://api.github.com/users/CookiePLMonster/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/CookiePLMonster/received_events', 'following_url': 'https://api.github.com/users/CookiePLMonster/following{/other_user}', 'repos_url': 'https://api.github.com/users/CookiePLMonster/repos', 'url': 'https://api.github.com/users/CookiePLMonster', 'starred_url': 'https://api.github.com/users/CookiePLMonster/starred{/owner}{/repo}'}, 'organization': {'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'description': '', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events', 'id': 5050316, 'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'url': 'https://api.github.com/orgs/dolphin-emu'}, 'pull_request': {'created_at': '2019-12-06T14:54:39Z', 'assignees': [], 'review_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments{/number}', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/8514.patch', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8514', 'milestone': None, 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/cbfacc41bab03f0171981a64fe90949bc2456d3e', 'number': 8514, 'updated_at': '2019-12-06T14:57:06Z', 'node_id': 'MDExOlB1bGxSZXF1ZXN0MzUwMDIxMTQy', 'author_association': 'MEMBER', 'head': {'label': 'lioncash:sview', 'user': {'type': 'User', 'avatar_url': 'https://avatars1.githubusercontent.com/u/712067?v=4', 'login': 'lioncash', 'gists_url': 'https://api.github.com/users/lioncash/gists{/gist_id}', 'html_url': 'https://github.com/lioncash', 'events_url': 'https://api.github.com/users/lioncash/events{/privacy}', 'id': 712067, 'site_admin': False, 'followers_url': 'https://api.github.com/users/lioncash/followers', 'subscriptions_url': 'https://api.github.com/users/lioncash/subscriptions', 'node_id': 'MDQ6VXNlcjcxMjA2Nw==', 'organizations_url': 'https://api.github.com/users/lioncash/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/lioncash/received_events', 'following_url': 'https://api.github.com/users/lioncash/following{/other_user}', 'repos_url': 'https://api.github.com/users/lioncash/repos', 'url': 'https://api.github.com/users/lioncash', 'starred_url': 'https://api.github.com/users/lioncash/starred{/owner}{/repo}'}, 'sha': 'cbfacc41bab03f0171981a64fe90949bc2456d3e', 'ref': 'sview', 'repo': {'fork': True, 'has_wiki': False, 'mirror_url': None, 'open_issues_count': 0, 'stargazers_url': 'https://api.github.com/repos/lioncash/dolphin/stargazers', 'forks': 1, 'deployments_url': 'https://api.github.com/repos/lioncash/dolphin/deployments', 'issue_events_url': 'https://api.github.com/repos/lioncash/dolphin/issues/events{/number}', 'html_url': 'https://github.com/lioncash/dolphin', 'pulls_url': 'https://api.github.com/repos/lioncash/dolphin/pulls{/number}', 'statuses_url': 'https://api.github.com/repos/lioncash/dolphin/statuses/{sha}', 'open_issues': 0, 'git_commits_url': 'https://api.github.com/repos/lioncash/dolphin/git/commits{/sha}', 'language': 'C++', 'blobs_url': 'https://api.github.com/repos/lioncash/dolphin/git/blobs{/sha}', 'events_url': 'https://api.github.com/repos/lioncash/dolphin/events', 'commits_url': 'https://api.github.com/repos/lioncash/dolphin/commits{/sha}', 'compare_url': 'https://api.github.com/repos/lioncash/dolphin/compare/{base}...{head}', 'default_branch': 'master', 'svn_url': 'https://github.com/lioncash/dolphin', 'downloads_url': 'https://api.github.com/repos/lioncash/dolphin/downloads', 'archive_url': 'https://api.github.com/repos/lioncash/dolphin/{archive_format}{/ref}', 'subscribers_url': 'https://api.github.com/repos/lioncash/dolphin/subscribers', 'labels_url': 'https://api.github.com/repos/lioncash/dolphin/labels{/name}', 'watchers_count': 5, 'contributors_url': 'https://api.github.com/repos/lioncash/dolphin/contributors', 'git_tags_url': 'https://api.github.com/repos/lioncash/dolphin/git/tags{/sha}', 'name': 'dolphin', 'size': 344262, 'languages_url': 'https://api.github.com/repos/lioncash/dolphin/languages', 'comments_url': 'https://api.github.com/repos/lioncash/dolphin/comments{/number}', 'teams_url': 'https://api.github.com/repos/lioncash/dolphin/teams', 'has_pages': False, 'has_issues': False, 'notifications_url': 'https://api.github.com/repos/lioncash/dolphin/notifications{?since,all,participating}', 'disabled': False, 'issue_comment_url': 'https://api.github.com/repos/lioncash/dolphin/issues/comments{/number}', 'stargazers_count': 5, 'created_at': '2014-01-27T23:00:05Z', 'hooks_url': 'https://api.github.com/repos/lioncash/dolphin/hooks', 'archived': False, 'description': 'Dolphin is a GameCube/Wii emulator, allowing you to play games for these two platforms on PC, with improvements.', 'milestones_url': 'https://api.github.com/repos/lioncash/dolphin/milestones{/number}', 'subscription_url': 'https://api.github.com/repos/lioncash/dolphin/subscription', 'full_name': 'lioncash/dolphin', 'updated_at': '2019-03-05T01:18:22Z', 'node_id': 'MDEwOlJlcG9zaXRvcnkxNjI5NTk4Mw==', 'issues_url': 'https://api.github.com/repos/lioncash/dolphin/issues{/number}', 'private': False, 'forks_count': 1, 'assignees_url': 'https://api.github.com/repos/lioncash/dolphin/assignees{/user}', 'ssh_url': 'git@github.com:lioncash/dolphin.git', 'collaborators_url': 'https://api.github.com/repos/lioncash/dolphin/collaborators{/collaborator}', 'has_projects': True, 'owner': {'type': 'User', 'avatar_url': 'https://avatars1.githubusercontent.com/u/712067?v=4', 'login': 'lioncash', 'gists_url': 'https://api.github.com/users/lioncash/gists{/gist_id}', 'html_url': 'https://github.com/lioncash', 'events_url': 'https://api.github.com/users/lioncash/events{/privacy}', 'id': 712067, 'site_admin': False, 'followers_url': 'https://api.github.com/users/lioncash/followers', 'subscriptions_url': 'https://api.github.com/users/lioncash/subscriptions', 'node_id': 'MDQ6VXNlcjcxMjA2Nw==', 'organizations_url': 'https://api.github.com/users/lioncash/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/lioncash/received_events', 'following_url': 'https://api.github.com/users/lioncash/following{/other_user}', 'repos_url': 'https://api.github.com/users/lioncash/repos', 'url': 'https://api.github.com/users/lioncash', 'starred_url': 'https://api.github.com/users/lioncash/starred{/owner}{/repo}'}, 'git_url': 'git://github.com/lioncash/dolphin.git', 'git_refs_url': 'https://api.github.com/repos/lioncash/dolphin/git/refs{/sha}', 'has_downloads': True, 'trees_url': 'https://api.github.com/repos/lioncash/dolphin/git/trees{/sha}', 'watchers': 5, 'license': {'name': 'GNU General Public License v2.0', 'node_id': 'MDc6TGljZW5zZTg=', 'spdx_id': 'GPL-2.0', 'key': 'gpl-2.0', 'url': 'https://api.github.com/licenses/gpl-2.0'}, 'forks_url': 'https://api.github.com/repos/lioncash/dolphin/forks', 'homepage': None, 'contents_url': 'https://api.github.com/repos/lioncash/dolphin/contents/{+path}', 'id': 16295983, 'tags_url': 'https://api.github.com/repos/lioncash/dolphin/tags', 'releases_url': 'https://api.github.com/repos/lioncash/dolphin/releases{/id}', 'merges_url': 'https://api.github.com/repos/lioncash/dolphin/merges', 'clone_url': 'https://github.com/lioncash/dolphin.git', 'branches_url': 'https://api.github.com/repos/lioncash/dolphin/branches{/branch}', 'url': 'https://api.github.com/repos/lioncash/dolphin', 'pushed_at': '2019-12-06T14:52:04Z', 'keys_url': 'https://api.github.com/repos/lioncash/dolphin/keys{/key_id}'}}, '_links': {'review_comment': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments{/number}'}, 'commits': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8514/commits'}, 'comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8514/comments'}, 'statuses': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/cbfacc41bab03f0171981a64fe90949bc2456d3e'}, 'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8514'}, 'issue': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8514'}, 'review_comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8514/comments'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/8514'}}, 'requested_teams': [], 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/8514.diff', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8514/commits', 'labels': [], 'state': 'open', 'user': {'type': 'User', 'avatar_url': 'https://avatars1.githubusercontent.com/u/712067?v=4', 'login': 'lioncash', 'gists_url': 'https://api.github.com/users/lioncash/gists{/gist_id}', 'html_url': 'https://github.com/lioncash', 'events_url': 'https://api.github.com/users/lioncash/events{/privacy}', 'id': 712067, 'site_admin': False, 'followers_url': 'https://api.github.com/users/lioncash/followers', 'subscriptions_url': 'https://api.github.com/users/lioncash/subscriptions', 'node_id': 'MDQ6VXNlcjcxMjA2Nw==', 'organizations_url': 'https://api.github.com/users/lioncash/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/lioncash/received_events', 'following_url': 'https://api.github.com/users/lioncash/following{/other_user}', 'repos_url': 'https://api.github.com/users/lioncash/repos', 'url': 'https://api.github.com/users/lioncash', 'starred_url': 'https://api.github.com/users/lioncash/starred{/owner}{/repo}'}, 'locked': False, 'merge_commit_sha': '5495b8ad972d688a555d0e130b5ee68b6c8c31d3', 'merged_at': None, 'body': 'This function only ever reads the contents of the string in a non-owning manner, so we can change the parameter over to being a string view.', 'assignee': None, 'id': 350021142, 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8514', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8514/comments', 'title': 'Common/Network: Make StringToMacAddress use a string_view ', 'base': {'label': 'dolphin-emu:master', 'user': {'type': 'Organization', 'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'html_url': 'https://github.com/dolphin-emu', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'id': 5050316, 'site_admin': False, 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'url': 'https://api.github.com/users/dolphin-emu', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}'}, 'sha': '15fc71cfcf5f94221443aaff99ae559fa3cb4633', 'ref': 'master', 'repo': {'fork': False, 'has_wiki': True, 'mirror_url': None, 'open_issues_count': 171, 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'forks': 1329, 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'html_url': 'https://github.com/dolphin-emu/dolphin', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'open_issues': 171, 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'language': 'C++', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'default_branch': 'master', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'watchers_count': 5798, 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'name': 'dolphin', 'size': 386665, 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'has_pages': False, 'has_issues': False, 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'disabled': False, 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'stargazers_count': 5798, 'created_at': '2013-07-22T09:07:57Z', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'archived': False, 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'full_name': 'dolphin-emu/dolphin', 'updated_at': '2019-12-06T13:34:23Z', 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'private': False, 'forks_count': 1329, 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'has_projects': False, 'owner': {'type': 'Organization', 'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'html_url': 'https://github.com/dolphin-emu', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'id': 5050316, 'site_admin': False, 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'url': 'https://api.github.com/users/dolphin-emu', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}'}, 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'has_downloads': True, 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'watchers': 5798, 'license': {'name': 'GNU General Public License v2.0', 'node_id': 'MDc6TGljZW5zZTg=', 'spdx_id': 'GPL-2.0', 'key': 'gpl-2.0', 'url': 'https://api.github.com/licenses/gpl-2.0'}, 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'homepage': 'https://dolphin-emu.org/', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'id': 11577304, 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'pushed_at': '2019-12-06T14:54:40Z', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}'}}, 'closed_at': None, 'requested_reviewers': [], 'review_comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8514/comments', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8514'}}, 'source': 'webserver'}
2019-12-06T14:57:08.209860	{'gh_type': 'pull_request_review', 'type': 'raw_gh_hook', 'raw': {'action': 'submitted', 'repository': {'fork': False, 'has_wiki': True, 'mirror_url': None, 'open_issues_count': 171, 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'forks': 1329, 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'html_url': 'https://github.com/dolphin-emu/dolphin', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'open_issues': 171, 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'language': 'C++', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'default_branch': 'master', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'watchers_count': 5798, 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'name': 'dolphin', 'size': 386665, 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'has_pages': False, 'has_issues': False, 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'disabled': False, 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'stargazers_count': 5798, 'created_at': '2013-07-22T09:07:57Z', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'archived': False, 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'full_name': 'dolphin-emu/dolphin', 'updated_at': '2019-12-06T13:34:23Z', 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'private': False, 'forks_count': 1329, 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'has_projects': False, 'owner': {'type': 'Organization', 'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'html_url': 'https://github.com/dolphin-emu', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'id': 5050316, 'site_admin': False, 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'url': 'https://api.github.com/users/dolphin-emu', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}'}, 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'has_downloads': True, 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'watchers': 5798, 'license': {'name': 'GNU General Public License v2.0', 'node_id': 'MDc6TGljZW5zZTg=', 'spdx_id': 'GPL-2.0', 'key': 'gpl-2.0', 'url': 'https://api.github.com/licenses/gpl-2.0'}, 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'homepage': 'https://dolphin-emu.org/', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'id': 11577304, 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'pushed_at': '2019-12-06T14:54:40Z', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}'}, 'sender': {'type': 'User', 'avatar_url': 'https://avatars1.githubusercontent.com/u/7947461?v=4', 'login': 'CookiePLMonster', 'gists_url': 'https://api.github.com/users/CookiePLMonster/gists{/gist_id}', 'html_url': 'https://github.com/CookiePLMonster', 'events_url': 'https://api.github.com/users/CookiePLMonster/events{/privacy}', 'id': 7947461, 'site_admin': False, 'followers_url': 'https://api.github.com/users/CookiePLMonster/followers', 'subscriptions_url': 'https://api.github.com/users/CookiePLMonster/subscriptions', 'node_id': 'MDQ6VXNlcjc5NDc0NjE=', 'organizations_url': 'https://api.github.com/users/CookiePLMonster/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/CookiePLMonster/received_events', 'following_url': 'https://api.github.com/users/CookiePLMonster/following{/other_user}', 'repos_url': 'https://api.github.com/users/CookiePLMonster/repos', 'url': 'https://api.github.com/users/CookiePLMonster', 'starred_url': 'https://api.github.com/users/CookiePLMonster/starred{/owner}{/repo}'}, 'organization': {'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'description': '', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events', 'id': 5050316, 'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'url': 'https://api.github.com/orgs/dolphin-emu'}, 'review': {'id': 328254597, 'state': 'commented', 'submitted_at': '2019-12-06T14:57:06Z', 'user': {'type': 'User', 'avatar_url': 'https://avatars1.githubusercontent.com/u/7947461?v=4', 'login': 'CookiePLMonster', 'gists_url': 'https://api.github.com/users/CookiePLMonster/gists{/gist_id}', 'html_url': 'https://github.com/CookiePLMonster', 'events_url': 'https://api.github.com/users/CookiePLMonster/events{/privacy}', 'id': 7947461, 'site_admin': False, 'followers_url': 'https://api.github.com/users/CookiePLMonster/followers', 'subscriptions_url': 'https://api.github.com/users/CookiePLMonster/subscriptions', 'node_id': 'MDQ6VXNlcjc5NDc0NjE=', 'organizations_url': 'https://api.github.com/users/CookiePLMonster/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/CookiePLMonster/received_events', 'following_url': 'https://api.github.com/users/CookiePLMonster/following{/other_user}', 'repos_url': 'https://api.github.com/users/CookiePLMonster/repos', 'url': 'https://api.github.com/users/CookiePLMonster', 'starred_url': 'https://api.github.com/users/CookiePLMonster/starred{/owner}{/repo}'}, 'author_association': 'CONTRIBUTOR', 'commit_id': 'cbfacc41bab03f0171981a64fe90949bc2456d3e', '_links': {'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8514'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/8514#pullrequestreview-328254597'}}, 'node_id': 'MDE3OlB1bGxSZXF1ZXN0UmV2aWV3MzI4MjU0NTk3', 'body': None, 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8514', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8514#pullrequestreview-328254597'}, 'pull_request': {'created_at': '2019-12-06T14:54:39Z', 'assignees': [], 'review_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments{/number}', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/8514.patch', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8514', 'milestone': None, 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/cbfacc41bab03f0171981a64fe90949bc2456d3e', 'number': 8514, 'updated_at': '2019-12-06T14:57:06Z', 'node_id': 'MDExOlB1bGxSZXF1ZXN0MzUwMDIxMTQy', 'author_association': 'MEMBER', 'head': {'label': 'lioncash:sview', 'user': {'type': 'User', 'avatar_url': 'https://avatars1.githubusercontent.com/u/712067?v=4', 'login': 'lioncash', 'gists_url': 'https://api.github.com/users/lioncash/gists{/gist_id}', 'html_url': 'https://github.com/lioncash', 'events_url': 'https://api.github.com/users/lioncash/events{/privacy}', 'id': 712067, 'site_admin': False, 'followers_url': 'https://api.github.com/users/lioncash/followers', 'subscriptions_url': 'https://api.github.com/users/lioncash/subscriptions', 'node_id': 'MDQ6VXNlcjcxMjA2Nw==', 'organizations_url': 'https://api.github.com/users/lioncash/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/lioncash/received_events', 'following_url': 'https://api.github.com/users/lioncash/following{/other_user}', 'repos_url': 'https://api.github.com/users/lioncash/repos', 'url': 'https://api.github.com/users/lioncash', 'starred_url': 'https://api.github.com/users/lioncash/starred{/owner}{/repo}'}, 'sha': 'cbfacc41bab03f0171981a64fe90949bc2456d3e', 'ref': 'sview', 'repo': {'fork': True, 'has_wiki': False, 'mirror_url': None, 'open_issues_count': 0, 'stargazers_url': 'https://api.github.com/repos/lioncash/dolphin/stargazers', 'forks': 1, 'deployments_url': 'https://api.github.com/repos/lioncash/dolphin/deployments', 'issue_events_url': 'https://api.github.com/repos/lioncash/dolphin/issues/events{/number}', 'html_url': 'https://github.com/lioncash/dolphin', 'pulls_url': 'https://api.github.com/repos/lioncash/dolphin/pulls{/number}', 'statuses_url': 'https://api.github.com/repos/lioncash/dolphin/statuses/{sha}', 'open_issues': 0, 'git_commits_url': 'https://api.github.com/repos/lioncash/dolphin/git/commits{/sha}', 'language': 'C++', 'blobs_url': 'https://api.github.com/repos/lioncash/dolphin/git/blobs{/sha}', 'events_url': 'https://api.github.com/repos/lioncash/dolphin/events', 'commits_url': 'https://api.github.com/repos/lioncash/dolphin/commits{/sha}', 'compare_url': 'https://api.github.com/repos/lioncash/dolphin/compare/{base}...{head}', 'default_branch': 'master', 'svn_url': 'https://github.com/lioncash/dolphin', 'downloads_url': 'https://api.github.com/repos/lioncash/dolphin/downloads', 'archive_url': 'https://api.github.com/repos/lioncash/dolphin/{archive_format}{/ref}', 'subscribers_url': 'https://api.github.com/repos/lioncash/dolphin/subscribers', 'labels_url': 'https://api.github.com/repos/lioncash/dolphin/labels{/name}', 'watchers_count': 5, 'contributors_url': 'https://api.github.com/repos/lioncash/dolphin/contributors', 'git_tags_url': 'https://api.github.com/repos/lioncash/dolphin/git/tags{/sha}', 'name': 'dolphin', 'size': 344262, 'languages_url': 'https://api.github.com/repos/lioncash/dolphin/languages', 'comments_url': 'https://api.github.com/repos/lioncash/dolphin/comments{/number}', 'teams_url': 'https://api.github.com/repos/lioncash/dolphin/teams', 'has_pages': False, 'has_issues': False, 'notifications_url': 'https://api.github.com/repos/lioncash/dolphin/notifications{?since,all,participating}', 'disabled': False, 'issue_comment_url': 'https://api.github.com/repos/lioncash/dolphin/issues/comments{/number}', 'stargazers_count': 5, 'created_at': '2014-01-27T23:00:05Z', 'hooks_url': 'https://api.github.com/repos/lioncash/dolphin/hooks', 'archived': False, 'description': 'Dolphin is a GameCube/Wii emulator, allowing you to play games for these two platforms on PC, with improvements.', 'milestones_url': 'https://api.github.com/repos/lioncash/dolphin/milestones{/number}', 'subscription_url': 'https://api.github.com/repos/lioncash/dolphin/subscription', 'full_name': 'lioncash/dolphin', 'updated_at': '2019-03-05T01:18:22Z', 'node_id': 'MDEwOlJlcG9zaXRvcnkxNjI5NTk4Mw==', 'issues_url': 'https://api.github.com/repos/lioncash/dolphin/issues{/number}', 'private': False, 'forks_count': 1, 'assignees_url': 'https://api.github.com/repos/lioncash/dolphin/assignees{/user}', 'ssh_url': 'git@github.com:lioncash/dolphin.git', 'collaborators_url': 'https://api.github.com/repos/lioncash/dolphin/collaborators{/collaborator}', 'has_projects': True, 'owner': {'type': 'User', 'avatar_url': 'https://avatars1.githubusercontent.com/u/712067?v=4', 'login': 'lioncash', 'gists_url': 'https://api.github.com/users/lioncash/gists{/gist_id}', 'html_url': 'https://github.com/lioncash', 'events_url': 'https://api.github.com/users/lioncash/events{/privacy}', 'id': 712067, 'site_admin': False, 'followers_url': 'https://api.github.com/users/lioncash/followers', 'subscriptions_url': 'https://api.github.com/users/lioncash/subscriptions', 'node_id': 'MDQ6VXNlcjcxMjA2Nw==', 'organizations_url': 'https://api.github.com/users/lioncash/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/lioncash/received_events', 'following_url': 'https://api.github.com/users/lioncash/following{/other_user}', 'repos_url': 'https://api.github.com/users/lioncash/repos', 'url': 'https://api.github.com/users/lioncash', 'starred_url': 'https://api.github.com/users/lioncash/starred{/owner}{/repo}'}, 'git_url': 'git://github.com/lioncash/dolphin.git', 'git_refs_url': 'https://api.github.com/repos/lioncash/dolphin/git/refs{/sha}', 'has_downloads': True, 'trees_url': 'https://api.github.com/repos/lioncash/dolphin/git/trees{/sha}', 'watchers': 5, 'license': {'name': 'GNU General Public License v2.0', 'node_id': 'MDc6TGljZW5zZTg=', 'spdx_id': 'GPL-2.0', 'key': 'gpl-2.0', 'url': 'https://api.github.com/licenses/gpl-2.0'}, 'forks_url': 'https://api.github.com/repos/lioncash/dolphin/forks', 'homepage': None, 'contents_url': 'https://api.github.com/repos/lioncash/dolphin/contents/{+path}', 'id': 16295983, 'tags_url': 'https://api.github.com/repos/lioncash/dolphin/tags', 'releases_url': 'https://api.github.com/repos/lioncash/dolphin/releases{/id}', 'merges_url': 'https://api.github.com/repos/lioncash/dolphin/merges', 'clone_url': 'https://github.com/lioncash/dolphin.git', 'branches_url': 'https://api.github.com/repos/lioncash/dolphin/branches{/branch}', 'url': 'https://api.github.com/repos/lioncash/dolphin', 'pushed_at': '2019-12-06T14:52:04Z', 'keys_url': 'https://api.github.com/repos/lioncash/dolphin/keys{/key_id}'}}, '_links': {'review_comment': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments{/number}'}, 'commits': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8514/commits'}, 'comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8514/comments'}, 'statuses': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/cbfacc41bab03f0171981a64fe90949bc2456d3e'}, 'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8514'}, 'issue': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8514'}, 'review_comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8514/comments'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/8514'}}, 'requested_teams': [], 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/8514.diff', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8514/commits', 'labels': [], 'state': 'open', 'user': {'type': 'User', 'avatar_url': 'https://avatars1.githubusercontent.com/u/712067?v=4', 'login': 'lioncash', 'gists_url': 'https://api.github.com/users/lioncash/gists{/gist_id}', 'html_url': 'https://github.com/lioncash', 'events_url': 'https://api.github.com/users/lioncash/events{/privacy}', 'id': 712067, 'site_admin': False, 'followers_url': 'https://api.github.com/users/lioncash/followers', 'subscriptions_url': 'https://api.github.com/users/lioncash/subscriptions', 'node_id': 'MDQ6VXNlcjcxMjA2Nw==', 'organizations_url': 'https://api.github.com/users/lioncash/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/lioncash/received_events', 'following_url': 'https://api.github.com/users/lioncash/following{/other_user}', 'repos_url': 'https://api.github.com/users/lioncash/repos', 'url': 'https://api.github.com/users/lioncash', 'starred_url': 'https://api.github.com/users/lioncash/starred{/owner}{/repo}'}, 'locked': False, 'merge_commit_sha': '5495b8ad972d688a555d0e130b5ee68b6c8c31d3', 'merged_at': None, 'body': 'This function only ever reads the contents of the string in a non-owning manner, so we can change the parameter over to being a string view.', 'assignee': None, 'id': 350021142, 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8514', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8514/comments', 'title': 'Common/Network: Make StringToMacAddress use a string_view ', 'base': {'label': 'dolphin-emu:master', 'user': {'type': 'Organization', 'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'html_url': 'https://github.com/dolphin-emu', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'id': 5050316, 'site_admin': False, 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'url': 'https://api.github.com/users/dolphin-emu', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}'}, 'sha': '15fc71cfcf5f94221443aaff99ae559fa3cb4633', 'ref': 'master', 'repo': {'fork': False, 'has_wiki': True, 'mirror_url': None, 'open_issues_count': 171, 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'forks': 1329, 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'html_url': 'https://github.com/dolphin-emu/dolphin', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'open_issues': 171, 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'language': 'C++', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'default_branch': 'master', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'watchers_count': 5798, 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'name': 'dolphin', 'size': 386665, 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'has_pages': False, 'has_issues': False, 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'disabled': False, 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'stargazers_count': 5798, 'created_at': '2013-07-22T09:07:57Z', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'archived': False, 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'full_name': 'dolphin-emu/dolphin', 'updated_at': '2019-12-06T13:34:23Z', 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'private': False, 'forks_count': 1329, 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'has_projects': False, 'owner': {'type': 'Organization', 'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'html_url': 'https://github.com/dolphin-emu', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'id': 5050316, 'site_admin': False, 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'url': 'https://api.github.com/users/dolphin-emu', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}'}, 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'has_downloads': True, 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'watchers': 5798, 'license': {'name': 'GNU General Public License v2.0', 'node_id': 'MDc6TGljZW5zZTg=', 'spdx_id': 'GPL-2.0', 'key': 'gpl-2.0', 'url': 'https://api.github.com/licenses/gpl-2.0'}, 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'homepage': 'https://dolphin-emu.org/', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'id': 11577304, 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'pushed_at': '2019-12-06T14:54:40Z', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}'}}, 'closed_at': None, 'requested_reviewers': [], 'review_comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8514/comments', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8514'}}, 'source': 'webserver'}
2019-12-06T14:54:40.593346	{'gh_type': 'pull_request', 'type': 'raw_gh_hook', 'raw': {'action': 'opened', 'number': 8514, 'organization': {'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'description': '', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events', 'id': 5050316, 'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'url': 'https://api.github.com/orgs/dolphin-emu'}, 'sender': {'type': 'User', 'avatar_url': 'https://avatars1.githubusercontent.com/u/712067?v=4', 'login': 'lioncash', 'gists_url': 'https://api.github.com/users/lioncash/gists{/gist_id}', 'html_url': 'https://github.com/lioncash', 'events_url': 'https://api.github.com/users/lioncash/events{/privacy}', 'id': 712067, 'site_admin': False, 'followers_url': 'https://api.github.com/users/lioncash/followers', 'subscriptions_url': 'https://api.github.com/users/lioncash/subscriptions', 'node_id': 'MDQ6VXNlcjcxMjA2Nw==', 'organizations_url': 'https://api.github.com/users/lioncash/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/lioncash/received_events', 'following_url': 'https://api.github.com/users/lioncash/following{/other_user}', 'repos_url': 'https://api.github.com/users/lioncash/repos', 'url': 'https://api.github.com/users/lioncash', 'starred_url': 'https://api.github.com/users/lioncash/starred{/owner}{/repo}'}, 'repository': {'fork': False, 'has_wiki': True, 'mirror_url': None, 'open_issues_count': 171, 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'forks': 1329, 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'html_url': 'https://github.com/dolphin-emu/dolphin', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'open_issues': 171, 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'language': 'C++', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'default_branch': 'master', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'watchers_count': 5798, 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'name': 'dolphin', 'size': 386665, 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'has_pages': False, 'has_issues': False, 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'disabled': False, 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'stargazers_count': 5798, 'created_at': '2013-07-22T09:07:57Z', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'archived': False, 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'full_name': 'dolphin-emu/dolphin', 'updated_at': '2019-12-06T13:34:23Z', 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'private': False, 'forks_count': 1329, 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'has_projects': False, 'owner': {'type': 'Organization', 'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'html_url': 'https://github.com/dolphin-emu', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'id': 5050316, 'site_admin': False, 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'url': 'https://api.github.com/users/dolphin-emu', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}'}, 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'has_downloads': True, 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'watchers': 5798, 'license': {'name': 'GNU General Public License v2.0', 'node_id': 'MDc6TGljZW5zZTg=', 'spdx_id': 'GPL-2.0', 'key': 'gpl-2.0', 'url': 'https://api.github.com/licenses/gpl-2.0'}, 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'homepage': 'https://dolphin-emu.org/', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'id': 11577304, 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'pushed_at': '2019-12-05T19:02:51Z', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}'}, 'pull_request': {'deletions': 4, 'assignees': [], 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/8514.patch', 'additions': 3, 'review_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments{/number}', 'mergeable': None, 'number': 8514, 'author_association': 'MEMBER', 'mergeable_state': 'unknown', 'head': {'label': 'lioncash:sview', 'user': {'type': 'User', 'avatar_url': 'https://avatars1.githubusercontent.com/u/712067?v=4', 'login': 'lioncash', 'gists_url': 'https://api.github.com/users/lioncash/gists{/gist_id}', 'html_url': 'https://github.com/lioncash', 'events_url': 'https://api.github.com/users/lioncash/events{/privacy}', 'id': 712067, 'site_admin': False, 'followers_url': 'https://api.github.com/users/lioncash/followers', 'subscriptions_url': 'https://api.github.com/users/lioncash/subscriptions', 'node_id': 'MDQ6VXNlcjcxMjA2Nw==', 'organizations_url': 'https://api.github.com/users/lioncash/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/lioncash/received_events', 'following_url': 'https://api.github.com/users/lioncash/following{/other_user}', 'repos_url': 'https://api.github.com/users/lioncash/repos', 'url': 'https://api.github.com/users/lioncash', 'starred_url': 'https://api.github.com/users/lioncash/starred{/owner}{/repo}'}, 'sha': 'cbfacc41bab03f0171981a64fe90949bc2456d3e', 'ref': 'sview', 'repo': {'fork': True, 'has_wiki': False, 'mirror_url': None, 'open_issues_count': 0, 'stargazers_url': 'https://api.github.com/repos/lioncash/dolphin/stargazers', 'forks': 1, 'deployments_url': 'https://api.github.com/repos/lioncash/dolphin/deployments', 'issue_events_url': 'https://api.github.com/repos/lioncash/dolphin/issues/events{/number}', 'html_url': 'https://github.com/lioncash/dolphin', 'pulls_url': 'https://api.github.com/repos/lioncash/dolphin/pulls{/number}', 'statuses_url': 'https://api.github.com/repos/lioncash/dolphin/statuses/{sha}', 'open_issues': 0, 'git_commits_url': 'https://api.github.com/repos/lioncash/dolphin/git/commits{/sha}', 'language': 'C++', 'blobs_url': 'https://api.github.com/repos/lioncash/dolphin/git/blobs{/sha}', 'events_url': 'https://api.github.com/repos/lioncash/dolphin/events', 'commits_url': 'https://api.github.com/repos/lioncash/dolphin/commits{/sha}', 'compare_url': 'https://api.github.com/repos/lioncash/dolphin/compare/{base}...{head}', 'default_branch': 'master', 'svn_url': 'https://github.com/lioncash/dolphin', 'downloads_url': 'https://api.github.com/repos/lioncash/dolphin/downloads', 'archive_url': 'https://api.github.com/repos/lioncash/dolphin/{archive_format}{/ref}', 'subscribers_url': 'https://api.github.com/repos/lioncash/dolphin/subscribers', 'labels_url': 'https://api.github.com/repos/lioncash/dolphin/labels{/name}', 'watchers_count': 5, 'contributors_url': 'https://api.github.com/repos/lioncash/dolphin/contributors', 'git_tags_url': 'https://api.github.com/repos/lioncash/dolphin/git/tags{/sha}', 'name': 'dolphin', 'size': 344262, 'languages_url': 'https://api.github.com/repos/lioncash/dolphin/languages', 'comments_url': 'https://api.github.com/repos/lioncash/dolphin/comments{/number}', 'teams_url': 'https://api.github.com/repos/lioncash/dolphin/teams', 'has_pages': False, 'has_issues': False, 'notifications_url': 'https://api.github.com/repos/lioncash/dolphin/notifications{?since,all,participating}', 'disabled': False, 'issue_comment_url': 'https://api.github.com/repos/lioncash/dolphin/issues/comments{/number}', 'stargazers_count': 5, 'created_at': '2014-01-27T23:00:05Z', 'hooks_url': 'https://api.github.com/repos/lioncash/dolphin/hooks', 'archived': False, 'description': 'Dolphin is a GameCube/Wii emulator, allowing you to play games for these two platforms on PC, with improvements.', 'milestones_url': 'https://api.github.com/repos/lioncash/dolphin/milestones{/number}', 'subscription_url': 'https://api.github.com/repos/lioncash/dolphin/subscription', 'full_name': 'lioncash/dolphin', 'updated_at': '2019-03-05T01:18:22Z', 'node_id': 'MDEwOlJlcG9zaXRvcnkxNjI5NTk4Mw==', 'issues_url': 'https://api.github.com/repos/lioncash/dolphin/issues{/number}', 'private': False, 'forks_count': 1, 'assignees_url': 'https://api.github.com/repos/lioncash/dolphin/assignees{/user}', 'ssh_url': 'git@github.com:lioncash/dolphin.git', 'collaborators_url': 'https://api.github.com/repos/lioncash/dolphin/collaborators{/collaborator}', 'has_projects': True, 'owner': {'type': 'User', 'avatar_url': 'https://avatars1.githubusercontent.com/u/712067?v=4', 'login': 'lioncash', 'gists_url': 'https://api.github.com/users/lioncash/gists{/gist_id}', 'html_url': 'https://github.com/lioncash', 'events_url': 'https://api.github.com/users/lioncash/events{/privacy}', 'id': 712067, 'site_admin': False, 'followers_url': 'https://api.github.com/users/lioncash/followers', 'subscriptions_url': 'https://api.github.com/users/lioncash/subscriptions', 'node_id': 'MDQ6VXNlcjcxMjA2Nw==', 'organizations_url': 'https://api.github.com/users/lioncash/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/lioncash/received_events', 'following_url': 'https://api.github.com/users/lioncash/following{/other_user}', 'repos_url': 'https://api.github.com/users/lioncash/repos', 'url': 'https://api.github.com/users/lioncash', 'starred_url': 'https://api.github.com/users/lioncash/starred{/owner}{/repo}'}, 'git_url': 'git://github.com/lioncash/dolphin.git', 'git_refs_url': 'https://api.github.com/repos/lioncash/dolphin/git/refs{/sha}', 'has_downloads': True, 'trees_url': 'https://api.github.com/repos/lioncash/dolphin/git/trees{/sha}', 'watchers': 5, 'license': {'name': 'GNU General Public License v2.0', 'node_id': 'MDc6TGljZW5zZTg=', 'spdx_id': 'GPL-2.0', 'key': 'gpl-2.0', 'url': 'https://api.github.com/licenses/gpl-2.0'}, 'forks_url': 'https://api.github.com/repos/lioncash/dolphin/forks', 'homepage': None, 'contents_url': 'https://api.github.com/repos/lioncash/dolphin/contents/{+path}', 'id': 16295983, 'tags_url': 'https://api.github.com/repos/lioncash/dolphin/tags', 'releases_url': 'https://api.github.com/repos/lioncash/dolphin/releases{/id}', 'merges_url': 'https://api.github.com/repos/lioncash/dolphin/merges', 'clone_url': 'https://github.com/lioncash/dolphin.git', 'branches_url': 'https://api.github.com/repos/lioncash/dolphin/branches{/branch}', 'url': 'https://api.github.com/repos/lioncash/dolphin', 'pushed_at': '2019-12-06T14:52:04Z', 'keys_url': 'https://api.github.com/repos/lioncash/dolphin/keys{/key_id}'}}, 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8514/commits', 'labels': [], 'user': {'type': 'User', 'avatar_url': 'https://avatars1.githubusercontent.com/u/712067?v=4', 'login': 'lioncash', 'gists_url': 'https://api.github.com/users/lioncash/gists{/gist_id}', 'html_url': 'https://github.com/lioncash', 'events_url': 'https://api.github.com/users/lioncash/events{/privacy}', 'id': 712067, 'site_admin': False, 'followers_url': 'https://api.github.com/users/lioncash/followers', 'subscriptions_url': 'https://api.github.com/users/lioncash/subscriptions', 'node_id': 'MDQ6VXNlcjcxMjA2Nw==', 'organizations_url': 'https://api.github.com/users/lioncash/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/lioncash/received_events', 'following_url': 'https://api.github.com/users/lioncash/following{/other_user}', 'repos_url': 'https://api.github.com/users/lioncash/repos', 'url': 'https://api.github.com/users/lioncash', 'starred_url': 'https://api.github.com/users/lioncash/starred{/owner}{/repo}'}, 'body': 'This function only ever reads the contents of the string in a non-owning manner, so we can change the parameter over to being a string view.', 'review_comments': 0, 'rebaseable': None, 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8514', 'merged_by': None, 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8514/comments', 'commits': 2, 'maintainer_can_modify': True, 'comments': 0, 'created_at': '2019-12-06T14:54:39Z', 'changed_files': 2, 'review_comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8514/comments', 'draft': False, 'milestone': None, 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8514', 'updated_at': '2019-12-06T14:54:39Z', 'node_id': 'MDExOlB1bGxSZXF1ZXN0MzUwMDIxMTQy', '_links': {'review_comment': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments{/number}'}, 'commits': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8514/commits'}, 'comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8514/comments'}, 'statuses': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/cbfacc41bab03f0171981a64fe90949bc2456d3e'}, 'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8514'}, 'issue': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8514'}, 'review_comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8514/comments'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/8514'}}, 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/8514.diff', 'merged': False, 'state': 'open', 'requested_teams': [], 'locked': False, 'merge_commit_sha': None, 'merged_at': None, 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/cbfacc41bab03f0171981a64fe90949bc2456d3e', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8514', 'id': 350021142, 'title': 'Common/Network: Make StringToMacAddress use a string_view ', 'base': {'label': 'dolphin-emu:master', 'user': {'type': 'Organization', 'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'html_url': 'https://github.com/dolphin-emu', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'id': 5050316, 'site_admin': False, 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'url': 'https://api.github.com/users/dolphin-emu', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}'}, 'sha': '15fc71cfcf5f94221443aaff99ae559fa3cb4633', 'ref': 'master', 'repo': {'fork': False, 'has_wiki': True, 'mirror_url': None, 'open_issues_count': 171, 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'forks': 1329, 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'html_url': 'https://github.com/dolphin-emu/dolphin', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'open_issues': 171, 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'language': 'C++', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'default_branch': 'master', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'watchers_count': 5798, 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'name': 'dolphin', 'size': 386665, 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'has_pages': False, 'has_issues': False, 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'disabled': False, 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'stargazers_count': 5798, 'created_at': '2013-07-22T09:07:57Z', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'archived': False, 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'full_name': 'dolphin-emu/dolphin', 'updated_at': '2019-12-06T13:34:23Z', 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'private': False, 'forks_count': 1329, 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'has_projects': False, 'owner': {'type': 'Organization', 'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'html_url': 'https://github.com/dolphin-emu', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'id': 5050316, 'site_admin': False, 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'url': 'https://api.github.com/users/dolphin-emu', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}'}, 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'has_downloads': True, 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'watchers': 5798, 'license': {'name': 'GNU General Public License v2.0', 'node_id': 'MDc6TGljZW5zZTg=', 'spdx_id': 'GPL-2.0', 'key': 'gpl-2.0', 'url': 'https://api.github.com/licenses/gpl-2.0'}, 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'homepage': 'https://dolphin-emu.org/', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'id': 11577304, 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'pushed_at': '2019-12-05T19:02:51Z', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}'}}, 'closed_at': None, 'requested_reviewers': [], 'assignee': None}}, 'source': 'webserver'}
2019-12-06T12:25:20.387945	{'gh_type': 'issue_comment', 'type': 'raw_gh_hook', 'raw': {'action': 'deleted', 'repository': {'fork': False, 'has_wiki': True, 'mirror_url': None, 'open_issues_count': 170, 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'forks': 1329, 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'html_url': 'https://github.com/dolphin-emu/dolphin', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'open_issues': 170, 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'language': 'C++', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'default_branch': 'master', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'watchers_count': 5797, 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'name': 'dolphin', 'size': 386665, 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'has_pages': False, 'has_issues': False, 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'disabled': False, 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'stargazers_count': 5797, 'created_at': '2013-07-22T09:07:57Z', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'archived': False, 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'full_name': 'dolphin-emu/dolphin', 'updated_at': '2019-12-06T08:15:33Z', 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'private': False, 'forks_count': 1329, 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'has_projects': False, 'owner': {'type': 'Organization', 'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'html_url': 'https://github.com/dolphin-emu', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'id': 5050316, 'site_admin': False, 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'url': 'https://api.github.com/users/dolphin-emu', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}'}, 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'has_downloads': True, 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'watchers': 5797, 'license': {'name': 'GNU General Public License v2.0', 'node_id': 'MDc6TGljZW5zZTg=', 'spdx_id': 'GPL-2.0', 'key': 'gpl-2.0', 'url': 'https://api.github.com/licenses/gpl-2.0'}, 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'homepage': 'https://dolphin-emu.org/', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'id': 11577304, 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'pushed_at': '2019-12-05T19:02:51Z', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}'}, 'comment': {'id': 562412571, 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8492', 'created_at': '2019-12-06T03:03:52Z', 'node_id': 'MDEyOklzc3VlQ29tbWVudDU2MjQxMjU3MQ==', 'author_association': 'NONE', 'body': 'First of all thanks OatmealDome for making this pull request, super interested in ios support for Dolphin. I just had a quick question, I am getting an error when I try running an iso. I get the same error after building on two Macs and running on two different devices. (iPhone X 12.4 and iPad Air 2 13.1.2) I keep getting a "CPU thread (14): EXC_BAD_ACCESS (code=1, address=0x56c00500a)" error after i try and open an iso. I\'m also getting a "Thread 1: signal SIGABRT" error on line 16 in the main. ', 'updated_at': '2019-12-06T03:03:52Z', 'user': {'type': 'User', 'avatar_url': 'https://avatars1.githubusercontent.com/u/52388606?v=4', 'login': 'JohnG210', 'gists_url': 'https://api.github.com/users/JohnG210/gists{/gist_id}', 'html_url': 'https://github.com/JohnG210', 'events_url': 'https://api.github.com/users/JohnG210/events{/privacy}', 'id': 52388606, 'site_admin': False, 'followers_url': 'https://api.github.com/users/JohnG210/followers', 'subscriptions_url': 'https://api.github.com/users/JohnG210/subscriptions', 'node_id': 'MDQ6VXNlcjUyMzg4NjA2', 'organizations_url': 'https://api.github.com/users/JohnG210/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/JohnG210/received_events', 'following_url': 'https://api.github.com/users/JohnG210/following{/other_user}', 'repos_url': 'https://api.github.com/users/JohnG210/repos', 'url': 'https://api.github.com/users/JohnG210', 'starred_url': 'https://api.github.com/users/JohnG210/starred{/owner}{/repo}'}, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/562412571', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8492#issuecomment-562412571'}, 'organization': {'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'description': '', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events', 'id': 5050316, 'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'url': 'https://api.github.com/orgs/dolphin-emu'}, 'issue': {'created_at': '2019-11-24T21:15:23Z', 'assignees': [], 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8492/labels{/name}', 'milestone': None, 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'number': 8492, 'updated_at': '2019-12-06T06:19:56Z', 'node_id': 'MDExOlB1bGxSZXF1ZXN0MzQ0OTQ5Mzk4', 'author_association': 'CONTRIBUTOR', 'labels': [], 'state': 'open', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8492', 'user': {'type': 'User', 'avatar_url': 'https://avatars0.githubusercontent.com/u/11504941?v=4', 'login': 'OatmealDome', 'gists_url': 'https://api.github.com/users/OatmealDome/gists{/gist_id}', 'html_url': 'https://github.com/OatmealDome', 'events_url': 'https://api.github.com/users/OatmealDome/events{/privacy}', 'id': 11504941, 'site_admin': False, 'followers_url': 'https://api.github.com/users/OatmealDome/followers', 'subscriptions_url': 'https://api.github.com/users/OatmealDome/subscriptions', 'node_id': 'MDQ6VXNlcjExNTA0OTQx', 'organizations_url': 'https://api.github.com/users/OatmealDome/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/OatmealDome/received_events', 'following_url': 'https://api.github.com/users/OatmealDome/following{/other_user}', 'repos_url': 'https://api.github.com/users/OatmealDome/repos', 'url': 'https://api.github.com/users/OatmealDome', 'starred_url': 'https://api.github.com/users/OatmealDome/starred{/owner}{/repo}'}, 'locked': False, 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8492', 'body': 'This PR adds experimental support for iOS devices with a working JIT. It is by no means complete, and is only intended to initiate a discussion as to whether iOS is a platform that Dolphin should support.\r\n\r\n# READ THIS FIRST\r\n\r\nYou probably shouldn\'t ask for technical support in the comments here.\r\n\r\n**Please remember that this isn\'t ready for general use yet. I cannot stress this enough. If you only know enough to press the run button in Xcode, you should probably wait for some sort of release. If you still really want to try it out, be sure you read the PR fully to understand the current issues and limitations.**\r\n\r\nIf you need support, or are a developer who would like to contribute, contact me on [Twitter](https://twitter.com/OatmealDome) or [ask in #dolphin-ios on my Discord server](https://discord.gg/rdx6Bt8) (I may take a while to respond since I\'m currently busy with other responsibilities - I\'ll ping you when I get a chance).\r\n\r\n# PR details\r\n\r\nFirst off, [here\'s a quick demo video](https://youtu.be/CI4SGePajYo) and some screenshots.\r\n\r\n<img src="https://cdn.oatmealdome.me/screenshots/dolphin-ios/xenoblade.png" width="50%" height="50%">\r\n\r\n<img src="https://cdn.oatmealdome.me/screenshots/dolphin-ios/animal_crossing.png" width="50%" height="50%">\r\n\r\n<img src="https://cdn.oatmealdome.me/screenshots/dolphin-ios/melee.png" width="50%" height="50%">\r\n\r\n<img src="https://cdn.oatmealdome.me/screenshots/dolphin-ios/mkw.png" width="50%" height="50%">\r\n\r\nLet\'s get into the details.\r\n\r\n## Application\r\n\r\nA new Xcode project has been placed in `Source/iOS/DolphiniOS`. The build system for iOS takes inspiration from the Android version of Dolphin.\r\n\r\nXcode has been configured to run some shell scripts on every build. The first one runs `cmake` using an iOS toolchain to create static libraries, which are then linked into the application.  The second shell script copies image assets from the Android port.\r\n\r\nThe ``Sys`` folder is embedded into the bundle.\r\n\r\nA "jni" equivalent can be found in `Source/iOS/Interface`. Its only purpose is to hold the `MainiOS` source file.\r\n\r\n### User interface\r\n\r\nThe UI is written in Objective-C and Swift. It is extremely barebones at the moment - while there is a working touchscreen controller, pretty much everything else needs work.\r\n\r\nThe code is 50/50 Objective-C and Swift, but I believe it would be best to write future UI code in Swift and transition what we can away from Objective-C. (Given the necessity of using C++ to access Dolphin code, some Objective-C++ will likely need to stay if this port is given a green light.) \r\n\r\nAll Dolphin user files are stored in the app container\'s Documents directory. [This folder is then exposed to `Files.app`, allowing users to modify files as they wish](https://cdn.oatmealdome.me/screenshots/dolphin-ios/oMRQ0DA.png).\r\n\r\nA `Software` folder is automatically created in the Documents directory. The UI will automatically scan this folder for software and show found files in a list on startup.\r\n\r\n### Target devices\r\n\r\n* **The device must be jailbroken.**\r\n* Devices with A9, A10, and A11 processors were tested. These were an iPhone 6s, a 6th gen iPad, and an iPhone X.\r\n* A8, A12, and A13 devices were unable to be tested because @Simonx22 and I don\'t own any.\r\n* [A7 and A8 processors have GPUs that don\'t support arrays of textures](https://developer.apple.com/metal/Metal-Feature-Set-Tables.pdf), so the Vulkan backend is not supported.\r\n* A6 processors and below are 32-bit.\r\n\r\nThe minimum supported devices should be ones with an A9 processor.\r\n\r\n### Building\r\n\r\nYou need the following:\r\n\r\n* Mac\r\n* Xcode 11 (older Xcode versions may work, not tested)\r\n* `cmake`\r\n* Jailbroken iOS / iPadOS device running iOS 12 and above\r\n\r\nThen, you can build:\r\n\r\n1. Install AppSync Unified on your device from `cydia.angelxwind.net`.\r\n2. Clone the repo.\r\n3. Open `Source/iOS/DolphiniOS/DolphiniOS.xcodeproj`.\r\n4. Initiate a build in Xcode.\r\n\r\n## Problems\r\n\r\n### Limitations\r\n\r\n* BoundingBox is not supported, since [MoltenVK sets ``fragmentStoresAndAtomics``  to `true` only on macOS](https://github.com/KhronosGroup/MoltenVK/blob/789ef74d11d9ea9ce912f6df3d018e1d194a1fdb/MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm#L1038). However, forcing this feature to be enabled shows that it works fine on iOS (albeit with minor glitches). I\'m not sure what I should be looking for on the Metal feature set table to see if iOS GPU drivers really support this feature.\r\n* Metal does not support geometry shaders or setting line width.\r\n* OpenGLES, like OpenGL on macOS, has been abandoned for a very long time. `EXT_buffer_storage` support is nowhere to be found. As expected, the OpenGL backend is unusable.\r\n\r\n### Known issues\r\n\r\n* `Core::IsCPUThread()` does not work for some reason. The call in `JitArm64::HandleFault()` needs to be commented out when testing for now.\r\n* Controller INIs from the Android version needs to be copied manually. ``GCPadNew.ini`` and `WiimoteNew.ini` go in ``Config`` and  ``WiimoteProfile.ini`` in ``Config/Profiles/Wiimote``.\r\n* To stop emulation, you have to quit the application.\r\n* You have to manually switch the controller type (GameCube controller or Wiimote with Nunchuk) in the source code.\r\n* There is no D-Pad on any controller type.\r\n* There is no build system that generates a ``deb`` for Cydia.\r\n* There are likely code style compliance issues. Swift code is entirely unchecked by lint.\r\n* Many other things.\r\n\r\n### Regarding the jailbroken device requirement\r\n\r\nThe iOS kernel places an artificial restriction on the amount of address space that each process can access, depending on how much RAM the device has. This is the core issue that plagued Dolphin support for a very, *very* long time. Fastmem requires a large amount of virtual memory to play with, which unfortunately is greater than the limit of every publicly released iOS device.\r\n\r\nThankfully, Apple created an entitlement called `dynamic-codesigning` that allows the process to create executable memory. It was added for applications that need JIT, like Safari. An additional perk of `dynamic-codesigning` is that [it also allows the process to access a large amount of address space](https://github.com/apple/darwin-xnu/blob/master/tests/jumbo_va_spaces_28530648.c). However, it cannot be set on third-party apps as it is an Apple-internal entitlement. This is why a jailbroken device is needed.\r\n\r\nThere is a way, however, to run Dolphin under a jailed device. (In fact, I am doing the majority of my testing on a jailed device.) It requires modifying the iOS bootloader and setting the boot argument `arm64_maxoffset`. Because this method is quite complicated, I don\'t think this is a viable option for end-users. It is significantly easier to just require a jailbroken device than to support users who try this method.\r\n\r\n### The future\r\n\r\nAs we all know, Dolphin support for macOS doesn\'t get much love because of a lack of maintainers. While I don\'t plan to abandon this project, I think it would be best to see if any others are willing to contribute. I am just one person, after all.\r\n\r\n## Changes to Dolphin\r\n\r\nThis is a non-exhaustive list.\r\n\r\n* The define ``IPHONEOS`` has been introduced. ``IOS`` is not used to avoid confusion and conflicts with the Wii\'s IOS.\r\n* The iOS cmake toolchain from [here](https://github.com/leetal/ios-cmake) has been added. `CMakeLists` use ``IOS`` because it is set from the toolchain.\r\n* Mach\'s vm functions are used wherever possible ([one](https://github.com/OatmealDome/dolphin/commit/fbffaa4b429af4fc725c7093837aa142f21cc006#diff-1f416de641b3f6132c533a0feb099829), [two](https://github.com/OatmealDome/dolphin/commit/d3e100a0a854becaaf053cb5aeae2de77a961eed)).\r\n* (This only applies to jailed devices.) When attached to a debugger, iOS allows memory to be marked as executable. However, memory cannot be writable and executable at the same time, so code has been introduced into the ARM64 JIT to support W^X exclusivity.\r\n* A new "EAGL" GLInterface was introduced. Also, because iOS doesn\'t create a default framebuffer, [the OpenGL backend calls the EAGL GLInterface to create one](https://github.com/OatmealDome/dolphin/commit/8b9064ececa69ee47e468d242dd7ac270b209f40).\r\n* The iOS MoltenVK dylib has been added to Externals.\r\n* The CoreAudio backend has been restored, because [Cubeb support for iOS is old and broken](https://github.com/kinetiknz/cubeb/issues/394).\r\n* Since `ButtonManager` and `Touchscreen` are useful on iOS too, they have been moved into a new "Touch" folder in InputCommon.\r\n* The required clang-format version has been updated to 9.0. Some Objective-C code was not being formatted correctly on 7.0 for whatever reason.\r\n\r\n## Credits\r\n\r\nThis PR is the culmination of many attempts by several people, including myself. It could not be done without them and support from others.\r\n\r\nPrevious PRs:\r\n\r\n* #3881\r\n* #3885\r\n* #3941\r\n\r\nThanks to:\r\n\r\n* @Simonx22 for testing\r\n* leetal\'s [iOS toolchain for cmake](https://github.com/leetal/ios-cmake)\r\n* ppsspp for mach vm functions and W^X exclusivity example code \r\n* Apple for releasing their ARM XNU sources', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8492/events', 'id': 527757689, 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8492/comments', 'title': '[RFC / WIP] iOS support with working JIT', 'comments': 36, 'closed_at': None, 'pull_request': {'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/8492.patch', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/8492.diff', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8492', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8492'}, 'assignee': None}, 'sender': {'type': 'User', 'avatar_url': 'https://avatars1.githubusercontent.com/u/52388606?v=4', 'login': 'JohnG210', 'gists_url': 'https://api.github.com/users/JohnG210/gists{/gist_id}', 'html_url': 'https://github.com/JohnG210', 'events_url': 'https://api.github.com/users/JohnG210/events{/privacy}', 'id': 52388606, 'site_admin': False, 'followers_url': 'https://api.github.com/users/JohnG210/followers', 'subscriptions_url': 'https://api.github.com/users/JohnG210/subscriptions', 'node_id': 'MDQ6VXNlcjUyMzg4NjA2', 'organizations_url': 'https://api.github.com/users/JohnG210/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/JohnG210/received_events', 'following_url': 'https://api.github.com/users/JohnG210/following{/other_user}', 'repos_url': 'https://api.github.com/users/JohnG210/repos', 'url': 'https://api.github.com/users/JohnG210', 'starred_url': 'https://api.github.com/users/JohnG210/starred{/owner}{/repo}'}}, 'source': 'webserver'}
2019-12-06T10:38:57.946806	{'gh_type': 'pull_request_review_comment', 'type': 'raw_gh_hook', 'raw': {'action': 'created', 'repository': {'fork': False, 'has_wiki': True, 'mirror_url': None, 'open_issues_count': 170, 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'forks': 1329, 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'html_url': 'https://github.com/dolphin-emu/dolphin', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'open_issues': 170, 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'language': 'C++', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'default_branch': 'master', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'watchers_count': 5797, 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'name': 'dolphin', 'size': 386665, 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'has_pages': False, 'has_issues': False, 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'disabled': False, 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'stargazers_count': 5797, 'created_at': '2013-07-22T09:07:57Z', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'archived': False, 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'full_name': 'dolphin-emu/dolphin', 'updated_at': '2019-12-06T08:15:33Z', 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'private': False, 'forks_count': 1329, 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'has_projects': False, 'owner': {'type': 'Organization', 'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'html_url': 'https://github.com/dolphin-emu', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'id': 5050316, 'site_admin': False, 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'url': 'https://api.github.com/users/dolphin-emu', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}'}, 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'has_downloads': True, 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'watchers': 5797, 'license': {'name': 'GNU General Public License v2.0', 'node_id': 'MDc6TGljZW5zZTg=', 'spdx_id': 'GPL-2.0', 'key': 'gpl-2.0', 'url': 'https://api.github.com/licenses/gpl-2.0'}, 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'homepage': 'https://dolphin-emu.org/', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'id': 11577304, 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'pushed_at': '2019-12-05T19:02:51Z', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}'}, 'comment': {'created_at': '2019-12-06T10:38:56Z', 'user': {'type': 'User', 'avatar_url': 'https://avatars1.githubusercontent.com/u/712067?v=4', 'login': 'lioncash', 'gists_url': 'https://api.github.com/users/lioncash/gists{/gist_id}', 'html_url': 'https://github.com/lioncash', 'events_url': 'https://api.github.com/users/lioncash/events{/privacy}', 'id': 712067, 'site_admin': False, 'followers_url': 'https://api.github.com/users/lioncash/followers', 'subscriptions_url': 'https://api.github.com/users/lioncash/subscriptions', 'node_id': 'MDQ6VXNlcjcxMjA2Nw==', 'organizations_url': 'https://api.github.com/users/lioncash/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/lioncash/received_events', 'following_url': 'https://api.github.com/users/lioncash/following{/other_user}', 'repos_url': 'https://api.github.com/users/lioncash/repos', 'url': 'https://api.github.com/users/lioncash', 'starred_url': 'https://api.github.com/users/lioncash/starred{/owner}{/repo}'}, 'original_commit_id': '10f76746515a9a7bd8122f40c33b65813aa17b38', 'pull_request_review_id': 328122194, 'diff_hunk': '@@ -182,77 +133,122 @@ u16* IndexGenerator::AddFan(u16* Iptr, u32 numVerts, u32 index)\n  * ZWW do this for sun rays\n  */\n template <bool pr>\n-u16* IndexGenerator::AddQuads(u16* Iptr, u32 numVerts, u32 index)\n+u16* AddQuads(u16* index_ptr, u32 num_verts, u32 index)\n {\n   u32 i = 3;\n-  for (; i < numVerts; i += 4)\n+  for (; i < num_verts; i += 4)\n   {\n-    if (pr)\n+    if constexpr (pr)\n     {\n-      *Iptr++ = index + i - 2;\n-      *Iptr++ = index + i - 1;\n-      *Iptr++ = index + i - 3;\n-      *Iptr++ = index + i - 0;\n-      *Iptr++ = s_primitive_restart;\n+      *index_ptr++ = index + i - 2;\n+      *index_ptr++ = index + i - 1;\n+      *index_ptr++ = index + i - 3;\n+      *index_ptr++ = index + i - 0;\n+      *index_ptr++ = s_primitive_restart;\n     }\n     else\n     {\n-      Iptr = WriteTriangle<pr>(Iptr, index + i - 3, index + i - 2, index + i - 1);\n-      Iptr = WriteTriangle<pr>(Iptr, index + i - 3, index + i - 1, index + i - 0);\n+      index_ptr = WriteTriangle<pr>(index_ptr, index + i - 3, index + i - 2, index + i - 1);\n+      index_ptr = WriteTriangle<pr>(index_ptr, index + i - 3, index + i - 1, index + i - 0);\n     }\n   }\n \n   // three vertices remaining, so render a triangle\n-  if (i == numVerts)\n+  if (i == num_verts)\n   {\n-    Iptr =\n-        WriteTriangle<pr>(Iptr, index + numVerts - 3, index + numVerts - 2, index + numVerts - 1);\n+    index_ptr = WriteTriangle<pr>(index_ptr, index + num_verts - 3, index + num_verts - 2,\n+                                  index + num_verts - 1);\n   }\n-  return Iptr;\n+  return index_ptr;\n }\n \n template <bool pr>\n-u16* IndexGenerator::AddQuads_nonstandard(u16* Iptr, u32 numVerts, u32 index)\n+u16* AddQuads_nonstandard(u16* index_ptr, u32 num_verts, u32 index)\n {\n   WARN_LOG(VIDEO, "Non-standard primitive drawing command GL_DRAW_QUADS_2");\n-  return AddQuads<pr>(Iptr, numVerts, index);\n+  return AddQuads<pr>(index_ptr, num_verts, index);\n }\n \n-// Lines\n-u16* IndexGenerator::AddLineList(u16* Iptr, u32 numVerts, u32 index)\n+u16* AddLineList(u16* index_ptr, u32 num_verts, u32 index)\n {\n-  for (u32 i = 1; i < numVerts; i += 2)\n+  for (u32 i = 1; i < num_verts; i += 2)\n   {\n-    *Iptr++ = index + i - 1;\n-    *Iptr++ = index + i;\n+    *index_ptr++ = index + i - 1;\n+    *index_ptr++ = index + i;\n   }\n-  return Iptr;\n+  return index_ptr;\n }\n \n-// shouldn\'t be used as strips as LineLists are much more common\n+// Shouldn\'t be used as strips as LineLists are much more common\n // so converting them to lists\n-u16* IndexGenerator::AddLineStrip(u16* Iptr, u32 numVerts, u32 index)\n+u16* AddLineStrip(u16* index_ptr, u32 num_verts, u32 index)\n {\n-  for (u32 i = 1; i < numVerts; ++i)\n+  for (u32 i = 1; i < num_verts; ++i)\n   {\n-    *Iptr++ = index + i - 1;\n-    *Iptr++ = index + i;\n+    *index_ptr++ = index + i - 1;\n+    *index_ptr++ = index + i;\n   }\n-  return Iptr;\n+  return index_ptr;\n }\n \n-// Points\n-u16* IndexGenerator::AddPoints(u16* Iptr, u32 numVerts, u32 index)\n+u16* AddPoints(u16* index_ptr, u32 num_verts, u32 index)\n {\n-  for (u32 i = 0; i != numVerts; ++i)\n+  for (u32 i = 0; i != num_verts; ++i)\n+  {\n+    *index_ptr++ = index + i;\n+  }\n+  return index_ptr;\n+}\n+}  // Anonymous namespace\n+\n+void IndexGenerator::Init()\n+{\n+  if (g_Config.backend_info.bSupportsPrimitiveRestart)\n+  {\n+    m_primitive_table[OpcodeDecoder::GX_DRAW_QUADS] = AddQuads<true>;\n+    m_primitive_table[OpcodeDecoder::GX_DRAW_QUADS_2] = AddQuads_nonstandard<true>;\n+    m_primitive_table[OpcodeDecoder::GX_DRAW_TRIANGLES] = AddList<true>;\n+    m_primitive_table[OpcodeDecoder::GX_DRAW_TRIANGLE_STRIP] = AddStrip<true>;\n+    m_primitive_table[OpcodeDecoder::GX_DRAW_TRIANGLE_FAN] = AddFan<true>;\n+  }\n+  else\n   {\n-    *Iptr++ = index + i;\n+    m_primitive_table[OpcodeDecoder::GX_DRAW_QUADS] = AddQuads<false>;\n+    m_primitive_table[OpcodeDecoder::GX_DRAW_QUADS_2] = AddQuads_nonstandard<false>;\n+    m_primitive_table[OpcodeDecoder::GX_DRAW_TRIANGLES] = AddList<false>;\n+    m_primitive_table[OpcodeDecoder::GX_DRAW_TRIANGLE_STRIP] = AddStrip<false>;\n+    m_primitive_table[OpcodeDecoder::GX_DRAW_TRIANGLE_FAN] = AddFan<false>;\n   }\n-  return Iptr;\n+  m_primitive_table[OpcodeDecoder::GX_DRAW_LINES] = AddLineList;\n+  m_primitive_table[OpcodeDecoder::GX_DRAW_LINE_STRIP] = AddLineStrip;\n+  m_primitive_table[OpcodeDecoder::GX_DRAW_POINTS] = AddPoints;\n }\n \n-u32 IndexGenerator::GetRemainingIndices()\n+void IndexGenerator::Start(u16* index_ptr)\n {\n-  u32 max_index = 65534;  // -1 is reserved for primitive restart (ogl + dx11)\n-  return max_index - base_index;\n+  m_index_buffer_current = index_ptr;\n+  m_base_index_ptr = index_ptr;\n+  m_base_index = 0;\n+}\n+\n+void IndexGenerator::AddIndices(int primitive, u32 num_vertices)\n+{\n+  m_index_buffer_current =\n+      m_primitive_table[primitive](m_index_buffer_current, num_vertices, m_base_index);\n+  m_base_index += num_vertices;\n+}\n+\n+void IndexGenerator::AddExternalIndices(const u16* indices, u32 num_indices, u32 num_vertices)\n+{\n+  std::memcpy(m_index_buffer_current, indices, sizeof(u16) * num_indices);', 'original_position': 341, 'body': "Yes. I've changed the line because we follow a naming convention for member variables in classes. This does not mean I also need to resolve everything else related to that line within an unrelated PR. The purpose of this change is to eliminate static state in the class, which it does. It does not try to address anything else with the interface.", 'commit_id': '10f76746515a9a7bd8122f40c33b65813aa17b38', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8512#discussion_r354768238', 'id': 354768238, 'updated_at': '2019-12-06T10:38:56Z', 'node_id': 'MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDM1NDc2ODIzOA==', 'author_association': 'MEMBER', 'path': 'Source/Core/VideoCommon/IndexGenerator.cpp', '_links': {'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/354768238'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8512'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/8512#discussion_r354768238'}}, 'position': 341, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/354768238', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8512', 'in_reply_to_id': 354721906}, 'sender': {'type': 'User', 'avatar_url': 'https://avatars1.githubusercontent.com/u/712067?v=4', 'login': 'lioncash', 'gists_url': 'https://api.github.com/users/lioncash/gists{/gist_id}', 'html_url': 'https://github.com/lioncash', 'events_url': 'https://api.github.com/users/lioncash/events{/privacy}', 'id': 712067, 'site_admin': False, 'followers_url': 'https://api.github.com/users/lioncash/followers', 'subscriptions_url': 'https://api.github.com/users/lioncash/subscriptions', 'node_id': 'MDQ6VXNlcjcxMjA2Nw==', 'organizations_url': 'https://api.github.com/users/lioncash/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/lioncash/received_events', 'following_url': 'https://api.github.com/users/lioncash/following{/other_user}', 'repos_url': 'https://api.github.com/users/lioncash/repos', 'url': 'https://api.github.com/users/lioncash', 'starred_url': 'https://api.github.com/users/lioncash/starred{/owner}{/repo}'}, 'organization': {'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'description': '', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events', 'id': 5050316, 'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'url': 'https://api.github.com/orgs/dolphin-emu'}, 'pull_request': {'created_at': '2019-12-05T15:47:39Z', 'assignees': [], 'review_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments{/number}', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/8512.patch', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8512', 'milestone': None, 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/10f76746515a9a7bd8122f40c33b65813aa17b38', 'number': 8512, 'updated_at': '2019-12-06T10:38:56Z', 'node_id': 'MDExOlB1bGxSZXF1ZXN0MzQ5NTA5NDA4', 'author_association': 'MEMBER', 'head': {'label': 'lioncash:index', 'user': {'type': 'User', 'avatar_url': 'https://avatars1.githubusercontent.com/u/712067?v=4', 'login': 'lioncash', 'gists_url': 'https://api.github.com/users/lioncash/gists{/gist_id}', 'html_url': 'https://github.com/lioncash', 'events_url': 'https://api.github.com/users/lioncash/events{/privacy}', 'id': 712067, 'site_admin': False, 'followers_url': 'https://api.github.com/users/lioncash/followers', 'subscriptions_url': 'https://api.github.com/users/lioncash/subscriptions', 'node_id': 'MDQ6VXNlcjcxMjA2Nw==', 'organizations_url': 'https://api.github.com/users/lioncash/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/lioncash/received_events', 'following_url': 'https://api.github.com/users/lioncash/following{/other_user}', 'repos_url': 'https://api.github.com/users/lioncash/repos', 'url': 'https://api.github.com/users/lioncash', 'starred_url': 'https://api.github.com/users/lioncash/starred{/owner}{/repo}'}, 'sha': '10f76746515a9a7bd8122f40c33b65813aa17b38', 'ref': 'index', 'repo': {'fork': True, 'has_wiki': False, 'mirror_url': None, 'open_issues_count': 0, 'stargazers_url': 'https://api.github.com/repos/lioncash/dolphin/stargazers', 'forks': 1, 'deployments_url': 'https://api.github.com/repos/lioncash/dolphin/deployments', 'issue_events_url': 'https://api.github.com/repos/lioncash/dolphin/issues/events{/number}', 'html_url': 'https://github.com/lioncash/dolphin', 'pulls_url': 'https://api.github.com/repos/lioncash/dolphin/pulls{/number}', 'statuses_url': 'https://api.github.com/repos/lioncash/dolphin/statuses/{sha}', 'open_issues': 0, 'git_commits_url': 'https://api.github.com/repos/lioncash/dolphin/git/commits{/sha}', 'language': 'C++', 'blobs_url': 'https://api.github.com/repos/lioncash/dolphin/git/blobs{/sha}', 'events_url': 'https://api.github.com/repos/lioncash/dolphin/events', 'commits_url': 'https://api.github.com/repos/lioncash/dolphin/commits{/sha}', 'compare_url': 'https://api.github.com/repos/lioncash/dolphin/compare/{base}...{head}', 'default_branch': 'master', 'svn_url': 'https://github.com/lioncash/dolphin', 'downloads_url': 'https://api.github.com/repos/lioncash/dolphin/downloads', 'archive_url': 'https://api.github.com/repos/lioncash/dolphin/{archive_format}{/ref}', 'subscribers_url': 'https://api.github.com/repos/lioncash/dolphin/subscribers', 'labels_url': 'https://api.github.com/repos/lioncash/dolphin/labels{/name}', 'watchers_count': 5, 'contributors_url': 'https://api.github.com/repos/lioncash/dolphin/contributors', 'git_tags_url': 'https://api.github.com/repos/lioncash/dolphin/git/tags{/sha}', 'name': 'dolphin', 'size': 344262, 'languages_url': 'https://api.github.com/repos/lioncash/dolphin/languages', 'comments_url': 'https://api.github.com/repos/lioncash/dolphin/comments{/number}', 'teams_url': 'https://api.github.com/repos/lioncash/dolphin/teams', 'has_pages': False, 'has_issues': False, 'notifications_url': 'https://api.github.com/repos/lioncash/dolphin/notifications{?since,all,participating}', 'disabled': False, 'issue_comment_url': 'https://api.github.com/repos/lioncash/dolphin/issues/comments{/number}', 'stargazers_count': 5, 'created_at': '2014-01-27T23:00:05Z', 'hooks_url': 'https://api.github.com/repos/lioncash/dolphin/hooks', 'archived': False, 'description': 'Dolphin is a GameCube/Wii emulator, allowing you to play games for these two platforms on PC, with improvements.', 'milestones_url': 'https://api.github.com/repos/lioncash/dolphin/milestones{/number}', 'subscription_url': 'https://api.github.com/repos/lioncash/dolphin/subscription', 'full_name': 'lioncash/dolphin', 'updated_at': '2019-03-05T01:18:22Z', 'node_id': 'MDEwOlJlcG9zaXRvcnkxNjI5NTk4Mw==', 'issues_url': 'https://api.github.com/repos/lioncash/dolphin/issues{/number}', 'private': False, 'forks_count': 1, 'assignees_url': 'https://api.github.com/repos/lioncash/dolphin/assignees{/user}', 'ssh_url': 'git@github.com:lioncash/dolphin.git', 'collaborators_url': 'https://api.github.com/repos/lioncash/dolphin/collaborators{/collaborator}', 'has_projects': True, 'owner': {'type': 'User', 'avatar_url': 'https://avatars1.githubusercontent.com/u/712067?v=4', 'login': 'lioncash', 'gists_url': 'https://api.github.com/users/lioncash/gists{/gist_id}', 'html_url': 'https://github.com/lioncash', 'events_url': 'https://api.github.com/users/lioncash/events{/privacy}', 'id': 712067, 'site_admin': False, 'followers_url': 'https://api.github.com/users/lioncash/followers', 'subscriptions_url': 'https://api.github.com/users/lioncash/subscriptions', 'node_id': 'MDQ6VXNlcjcxMjA2Nw==', 'organizations_url': 'https://api.github.com/users/lioncash/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/lioncash/received_events', 'following_url': 'https://api.github.com/users/lioncash/following{/other_user}', 'repos_url': 'https://api.github.com/users/lioncash/repos', 'url': 'https://api.github.com/users/lioncash', 'starred_url': 'https://api.github.com/users/lioncash/starred{/owner}{/repo}'}, 'git_url': 'git://github.com/lioncash/dolphin.git', 'git_refs_url': 'https://api.github.com/repos/lioncash/dolphin/git/refs{/sha}', 'has_downloads': True, 'trees_url': 'https://api.github.com/repos/lioncash/dolphin/git/trees{/sha}', 'watchers': 5, 'license': {'name': 'GNU General Public License v2.0', 'node_id': 'MDc6TGljZW5zZTg=', 'spdx_id': 'GPL-2.0', 'key': 'gpl-2.0', 'url': 'https://api.github.com/licenses/gpl-2.0'}, 'forks_url': 'https://api.github.com/repos/lioncash/dolphin/forks', 'homepage': None, 'contents_url': 'https://api.github.com/repos/lioncash/dolphin/contents/{+path}', 'id': 16295983, 'tags_url': 'https://api.github.com/repos/lioncash/dolphin/tags', 'releases_url': 'https://api.github.com/repos/lioncash/dolphin/releases{/id}', 'merges_url': 'https://api.github.com/repos/lioncash/dolphin/merges', 'clone_url': 'https://github.com/lioncash/dolphin.git', 'branches_url': 'https://api.github.com/repos/lioncash/dolphin/branches{/branch}', 'url': 'https://api.github.com/repos/lioncash/dolphin', 'pushed_at': '2019-12-05T19:02:49Z', 'keys_url': 'https://api.github.com/repos/lioncash/dolphin/keys{/key_id}'}}, '_links': {'review_comment': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments{/number}'}, 'commits': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8512/commits'}, 'comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8512/comments'}, 'statuses': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/10f76746515a9a7bd8122f40c33b65813aa17b38'}, 'self': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8512'}, 'issue': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8512'}, 'review_comments': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8512/comments'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/8512'}}, 'requested_teams': [], 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/8512.diff', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8512/commits', 'labels': [], 'state': 'open', 'user': {'type': 'User', 'avatar_url': 'https://avatars1.githubusercontent.com/u/712067?v=4', 'login': 'lioncash', 'gists_url': 'https://api.github.com/users/lioncash/gists{/gist_id}', 'html_url': 'https://github.com/lioncash', 'events_url': 'https://api.github.com/users/lioncash/events{/privacy}', 'id': 712067, 'site_admin': False, 'followers_url': 'https://api.github.com/users/lioncash/followers', 'subscriptions_url': 'https://api.github.com/users/lioncash/subscriptions', 'node_id': 'MDQ6VXNlcjcxMjA2Nw==', 'organizations_url': 'https://api.github.com/users/lioncash/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/lioncash/received_events', 'following_url': 'https://api.github.com/users/lioncash/following{/other_user}', 'repos_url': 'https://api.github.com/users/lioncash/repos', 'url': 'https://api.github.com/users/lioncash', 'starred_url': 'https://api.github.com/users/lioncash/starred{/owner}{/repo}'}, 'locked': False, 'merge_commit_sha': 'b5c73b827b2835cb40bc7635e9536dccb057a8c9', 'merged_at': None, 'body': "Gets rid of the global state within the index generator and makes it a proper class. This can just be a member that sits within the vertex manager base class. By deglobalizing the state of the index generator we also get rid of the wonky dual-initializing that was going on within the OpenGL backend. (e.g. Initialize would be called once during initialization for general backend initialization, and then the OpenGL backend would call it again after checking whether or not primitive restart is supported).\r\n\r\nSince the renderer is always initialized before the vertex manager, we now only call `IndexGenerator`'s `Init()` once throughout the execution lifecycle.", 'assignee': None, 'id': 349509408, 'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8512', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/8512/comments', 'title': 'VideoCommon/IndexGenerator: Eliminate static state', 'base': {'label': 'dolphin-emu:master', 'user': {'type': 'Organization', 'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'html_url': 'https://github.com/dolphin-emu', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'id': 5050316, 'site_admin': False, 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'url': 'https://api.github.com/users/dolphin-emu', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}'}, 'sha': '15fc71cfcf5f94221443aaff99ae559fa3cb4633', 'ref': 'master', 'repo': {'fork': False, 'has_wiki': True, 'mirror_url': None, 'open_issues_count': 170, 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'forks': 1329, 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'html_url': 'https://github.com/dolphin-emu/dolphin', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'open_issues': 170, 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'language': 'C++', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'default_branch': 'master', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'watchers_count': 5797, 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'name': 'dolphin', 'size': 386665, 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'has_pages': False, 'has_issues': False, 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'disabled': False, 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'stargazers_count': 5797, 'created_at': '2013-07-22T09:07:57Z', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'archived': False, 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'full_name': 'dolphin-emu/dolphin', 'updated_at': '2019-12-06T08:15:33Z', 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'private': False, 'forks_count': 1329, 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'has_projects': False, 'owner': {'type': 'Organization', 'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'html_url': 'https://github.com/dolphin-emu', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'id': 5050316, 'site_admin': False, 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'url': 'https://api.github.com/users/dolphin-emu', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}'}, 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'has_downloads': True, 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'watchers': 5797, 'license': {'name': 'GNU General Public License v2.0', 'node_id': 'MDc6TGljZW5zZTg=', 'spdx_id': 'GPL-2.0', 'key': 'gpl-2.0', 'url': 'https://api.github.com/licenses/gpl-2.0'}, 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'homepage': 'https://dolphin-emu.org/', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'id': 11577304, 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'pushed_at': '2019-12-05T19:02:51Z', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}'}}, 'closed_at': None, 'requested_reviewers': [], 'review_comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8512/comments', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8512'}}, 'source': 'webserver'}
2019-12-06T10:38:57.945734	{'gh_type': 'pull_request_review', 'type': 'raw_gh_hook', 'raw': {'action': 'submitted', 'repository': {'fork': False, 'has_wiki': True, 'mirror_url': None, 'open_issues_count': 170, 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'forks': 1329, 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'html_url': 'https://github.com/dolphin-emu/dolphin', 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'open_issues': 170, 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'language': 'C++', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'default_branch': 'master', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'watchers_count': 5797, 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'name': 'dolphin', 'size': 386665, 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'has_pages': False, 'has_issues': False, 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'disabled': False, 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'stargazers_count': 5797, 'created_at': '2013-07-22T09:07:57Z', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'archived': False, 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'full_name': 'dolphin-emu/dolphin', 'updated_at': '2019-12-06T08:15:33Z', 'node_id': 'MDEwOlJlcG9zaXRvcnkxMTU3NzMwNA==', 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'private': False, 'forks_count': 1329, 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'has_projects': False, 'owner': {'type': 'Organization', 'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'html_url': 'https://github.com/dolphin-emu', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}', 'id': 5050316, 'site_admin': False, 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'url': 'https://api.github.com/users/dolphin-emu', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}'}, 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'has_downloads': True, 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'watchers': 5797, 'license': {'name': 'GNU General Public License v2.0', 'node_id': 'MDc6TGljZW5zZTg=', 'spdx_id': 'GPL-2.0', 'key': 'gpl-2.0', 'url': 'https://api.github.com/licenses/gpl-2.0'}, 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'homepage': 'https://dolphin-emu.org/', 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'id': 11577304, 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'pushed_at': '2019-12-05T19:02:51Z', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}'}, 'sender': {'type': 'User', 'avatar_url': 'https://avatars1.githubusercontent.com/u/712067?v=4', 'login': 'lioncash', 'gists_url': 'https://api.github.com/users/lioncash/gists{/gist_id}', 'html_url': 'https://github.com/lioncash', 'events_url': 'https://api.github.com/users/lioncash/events{/privacy}', 'id': 712067, 'site_admin': False, 'followers_url': 'https://api.github.com/users/lioncash/followers', 'subscriptions_url': 'https://api.github.com/users/lioncash/subscriptions', 'node_id': 'MDQ6VXNlcjcxMjA2Nw==', 'organizations_url': 'https://api.github.com/users/lioncash/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/lioncash/received_events', 'following_url': 'https://api.github.com/users/lioncash/following{/other_user}', 'repos_url': 'https://api.github.com/users/lioncash/repos', 'url': 'https://api.github.com/users/lioncash', 'starred_url': 'https://api.github.com/users/lioncash/starred{/owner}{/repo}'}, 'organization': {'avatar_url': 'https://avatars2.githubusercontent.com/u/5050316?v=4', 'login': 'dolphin-emu', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'description': '', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events', 'id': 5050316, 'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'node_id': 'MDEyOk9yZ2FuaXphdGlvbjUwNTAzMTY=', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'url': 'https://api.github.com/orgs/dolphin-emu'}, 'review': {'id': 328122194, 'state': 'commented', 'submitted_at': '2019-12-06T10:38:56Z', 'user': {'type': 'User', 'avatar_url': 'https://avatars1.githubusercontent.com/u/712067?v=4', 'login': 'lioncash', 'gists_url': 'https://api.github.com/users/lioncash/gists{/gist_id}', 'html_url': 'https://github.com/lioncash', 'events_url': 'https://api.github.com/users/lioncash/events{/privacy}', 'id': 712067, 'site_admin': False, 'followers_url': 'https://api.github.com/users/lioncash/followers', 'subscriptions_url': 'https://api.github.com/users/lioncash/subscriptions', 'node_id': 'MDQ6VXNlcjcxMjA2Nw==', 'organizations_url': 'https://api.github.com/users/lioncash/orgs', 'gravatar_id': '', 'received_events_url': 'https://api.github.com/users/lioncash/received_events', 'following_url': 'https://api.github.com/users/lioncash/following{/other_user}', 'repos_url': 'https://api.github.com/users/lioncash/repos', 'url': 'https://api.github.com/users/lioncash', 'starred_url': 'https://api.github.com/users/lioncash/starred{/owner}{/repo}'}, 'author_association': 'MEMBER', 'commit_id': '10f76746515a9a7bd8122f40c33b65813aa17b38', '_links': {'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8512'}, 'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/8512#pullrequestreview-328122194'}}, 'node_id': 'MDE3OlB1bGxSZXF1ZXN0UmV2aWV3MzI4MTIyMTk0', 'body': None, 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/8512', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8512#pullrequestreview-328122194'}, 'pull_request': {'created_at': '2019-12-05T15:47:39Z', 'assignees': [], 'review_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments{/number}', 'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/8512.patch', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/8512', 'milestone': None, 'statuses_url': 'https://api.github.com/repo