Files
rea/website/locales/messages.pot
morluto b27e1a74c9 docs(i18n): complete Malayalam locale registration and links
Resolve eight nested README links from their owning directory. Preserve the
shared README/website inventory contract by registering Malayalam with an
explicitly untranslated catalog and the existing visible, noindex English
fallback. Regenerate the shared website navigation and catalog references.
Existing parsed translations remain unchanged.

Validation: docs check, full website check (401 HTML pages, 27790 local
references, 19 tests), all 19 generated Malayalam fallback pages, and two
source reviews. No Malayalam website translation or browser layout claim.

Fixes #4821
2026-10-17 23:39:40 +08:00

12931 lines
405 KiB
Gettext
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#
msgid ""
msgstr ""
"Project-Id-Version: REA website\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: website/public/blog/index.html:107
msgctxt "page:blog/index.html"
msgid "Skip to content"
msgstr ""
#: website/public/blog/index.html:117
#: website/public/blog/reverse-engineering-models/index.html:117
#: website/public/blog/touhou-reconstruction/index.html:117
#: website/public/contributors/index.html:118
#: website/public/examples/dino-lab/index.html:118 website/public/faq/index.html:117
#: website/public/first-investigation/index.html:117
#: website/public/get-started/index.html:117
#: website/public/guides/browser/index.html:117 website/public/guides/index.html:117
#: website/public/guides/javascript/index.html:117
#: website/public/guides/native/index.html:117 website/public/index.html:119
#: website/public/showcase/aegis/index.html:118
#: website/public/showcase/ctf/index.html:117
#: website/public/showcase/dx-ball/index.html:117 website/public/showcase/index.html:117
#: website/public/showcase/notion/index.html:117
#: website/public/showcase/th04/index.html:117
msgctxt "shared"
msgid "Get started"
msgstr ""
#: website/public/blog/index.html:118
#: website/public/blog/reverse-engineering-models/index.html:118
#: website/public/blog/touhou-reconstruction/index.html:118
#: website/public/contributors/index.html:119
#: website/public/examples/dino-lab/index.html:119 website/public/faq/index.html:118
#: website/public/first-investigation/index.html:118
#: website/public/get-started/index.html:118
#: website/public/guides/browser/index.html:118 website/public/guides/index.html:118
#: website/public/guides/javascript/index.html:118
#: website/public/guides/native/index.html:118 website/public/index.html:120
#: website/public/showcase/aegis/index.html:119
#: website/public/showcase/ctf/index.html:118
#: website/public/showcase/dx-ball/index.html:118 website/public/showcase/index.html:118
#: website/public/showcase/notion/index.html:118
#: website/public/showcase/th04/index.html:118
msgctxt "shared"
msgid "Showcases"
msgstr ""
#: website/public/blog/index.html:119
#: website/public/blog/reverse-engineering-models/index.html:119
#: website/public/blog/touhou-reconstruction/index.html:119
#: website/public/contributors/index.html:120
#: website/public/examples/dino-lab/index.html:120 website/public/faq/index.html:119
#: website/public/first-investigation/index.html:119
#: website/public/get-started/index.html:119
#: website/public/guides/browser/index.html:119 website/public/guides/index.html:119
#: website/public/guides/javascript/index.html:119
#: website/public/guides/native/index.html:119 website/public/index.html:121
#: website/public/showcase/aegis/index.html:120
#: website/public/showcase/ctf/index.html:119
#: website/public/showcase/dx-ball/index.html:119 website/public/showcase/index.html:119
#: website/public/showcase/notion/index.html:119
#: website/public/showcase/th04/index.html:119
msgctxt "shared"
msgid "Blog"
msgstr ""
#: website/public/blog/index.html:120
#: website/public/blog/reverse-engineering-models/index.html:120
#: website/public/blog/touhou-reconstruction/index.html:120
#: website/public/contributors/index.html:121
#: website/public/examples/dino-lab/index.html:121 website/public/faq/index.html:120
#: website/public/first-investigation/index.html:120
#: website/public/get-started/index.html:120
#: website/public/guides/browser/index.html:120 website/public/guides/index.html:120
#: website/public/guides/javascript/index.html:120
#: website/public/guides/native/index.html:120 website/public/index.html:122
#: website/public/showcase/aegis/index.html:121
#: website/public/showcase/ctf/index.html:120
#: website/public/showcase/dx-ball/index.html:120 website/public/showcase/index.html:120
#: website/public/showcase/notion/index.html:120
#: website/public/showcase/th04/index.html:120
msgctxt "shared"
msgid "Guides"
msgstr ""
#: website/public/blog/index.html:122 website/public/blog/index.html:241
#: website/public/blog/reverse-engineering-models/index.html:122
#: website/public/blog/reverse-engineering-models/index.html:880
#: website/public/blog/touhou-reconstruction/index.html:122
#: website/public/blog/touhou-reconstruction/index.html:1077
#: website/public/contributors/index.html:123
#: website/public/contributors/index.html:1128
#: website/public/examples/dino-lab/index.html:123
#: website/public/examples/dino-lab/index.html:472 website/public/faq/index.html:122
#: website/public/faq/index.html:570 website/public/first-investigation/index.html:122
#: website/public/first-investigation/index.html:531
#: website/public/get-started/index.html:122 website/public/get-started/index.html:1814
#: website/public/guides/browser/index.html:122
#: website/public/guides/browser/index.html:504 website/public/guides/index.html:122
#: website/public/guides/index.html:279 website/public/guides/javascript/index.html:122
#: website/public/guides/javascript/index.html:500
#: website/public/guides/native/index.html:122
#: website/public/guides/native/index.html:506 website/public/index.html:124
#: website/public/index.html:1219 website/public/showcase/aegis/index.html:123
#: website/public/showcase/aegis/index.html:805
#: website/public/showcase/ctf/index.html:122 website/public/showcase/ctf/index.html:774
#: website/public/showcase/dx-ball/index.html:122
#: website/public/showcase/dx-ball/index.html:782 website/public/showcase/index.html:122
#: website/public/showcase/index.html:314 website/public/showcase/notion/index.html:122
#: website/public/showcase/notion/index.html:628
#: website/public/showcase/th04/index.html:122
#: website/public/showcase/th04/index.html:797
msgctxt "shared"
msgid "Contributors"
msgstr ""
#. {ph0}: <a href="../">
#. {ph1}: </a>
#: website/public/blog/index.html:199
#, python-brace-format
msgctxt "page:blog/index.html"
msgid "{ph0}Home{ph1} / Blog"
msgstr ""
#: website/public/blog/index.html:200
msgctxt "page:blog/index.html"
msgid "Blog."
msgstr ""
#: website/public/blog/index.html:201
msgctxt "page:blog/index.html"
msgid "Thoughts on reverse engineering."
msgstr ""
#. {ph0}: <br />
#: website/public/blog/index.html:205
#, python-brace-format
msgctxt "page:blog/index.html"
msgid "Model specialization{ph0}Essay"
msgstr ""
#: website/public/blog/index.html:207
msgctxt "page:blog/index.html"
msgid "Does reverse engineering need a bigger model?"
msgstr ""
#: website/public/blog/index.html:208
msgctxt "page:blog/index.html"
msgid ""
"What Touhou reconstruction suggests about general models, specialist models and "
"learning from compiler feedback."
msgstr ""
#: website/public/blog/index.html:212 website/public/blog/index.html:227
msgctxt "page:blog/index.html"
msgid "Read the article"
msgstr ""
#: website/public/blog/index.html:215
msgctxt "page:blog/index.html"
msgid "By N0zoM1z0 · 13 October 2026"
msgstr ""
#. {ph0}: <br />
#: website/public/blog/index.html:219
#, python-brace-format
msgctxt "page:blog/index.html"
msgid "Game reconstruction{ph0}Essay"
msgstr ""
#: website/public/blog/index.html:221
msgctxt "page:blog/index.html"
msgid "The industrial revolution in reverse engineering"
msgstr ""
#: website/public/blog/index.html:222
msgctxt "page:blog/index.html"
msgid ""
"What manual RE and reconstructing TH08, TH095 and TH04 taught me about agents, "
"verification and knowledge that compounds across projects."
msgstr ""
#: website/public/blog/index.html:230
msgctxt "page:blog/index.html"
msgid "By N0zoM1z0 · 10 October 2026"
msgstr ""
#: website/public/blog/index.html:242
#: website/public/blog/reverse-engineering-models/index.html:881
#: website/public/blog/touhou-reconstruction/index.html:1078
#: website/public/contributors/index.html:1129
#: website/public/examples/dino-lab/index.html:473 website/public/faq/index.html:571
#: website/public/first-investigation/index.html:532
#: website/public/get-started/index.html:1815
#: website/public/guides/browser/index.html:505 website/public/guides/index.html:280
#: website/public/guides/javascript/index.html:501
#: website/public/guides/native/index.html:507 website/public/index.html:1220
#: website/public/showcase/aegis/index.html:806
#: website/public/showcase/ctf/index.html:775
#: website/public/showcase/dx-ball/index.html:783 website/public/showcase/index.html:315
#: website/public/showcase/notion/index.html:629
#: website/public/showcase/th04/index.html:798
msgctxt "shared"
msgid "Source"
msgstr ""
#: website/public/blog/index.html:243
#: website/public/blog/reverse-engineering-models/index.html:882
#: website/public/blog/touhou-reconstruction/index.html:1079
#: website/public/contributors/index.html:1130
#: website/public/examples/dino-lab/index.html:474 website/public/faq/index.html:572
#: website/public/first-investigation/index.html:533
#: website/public/get-started/index.html:1816
#: website/public/guides/browser/index.html:506 website/public/guides/index.html:281
#: website/public/guides/javascript/index.html:502
#: website/public/guides/native/index.html:508 website/public/index.html:1221
#: website/public/showcase/aegis/index.html:807
#: website/public/showcase/ctf/index.html:776
#: website/public/showcase/dx-ball/index.html:784 website/public/showcase/index.html:316
#: website/public/showcase/notion/index.html:630
#: website/public/showcase/th04/index.html:799
msgctxt "shared"
msgid "MIT license"
msgstr ""
#: website/public/blog/index.html:244
#: website/public/blog/reverse-engineering-models/index.html:883
#: website/public/blog/touhou-reconstruction/index.html:1080
#: website/public/contributors/index.html:1131
#: website/public/examples/dino-lab/index.html:475 website/public/faq/index.html:573
#: website/public/first-investigation/index.html:534
#: website/public/get-started/index.html:1817
#: website/public/guides/browser/index.html:507 website/public/guides/index.html:282
#: website/public/guides/javascript/index.html:503
#: website/public/guides/native/index.html:509 website/public/index.html:1222
#: website/public/showcase/aegis/index.html:808
#: website/public/showcase/ctf/index.html:777
#: website/public/showcase/dx-ball/index.html:785 website/public/showcase/index.html:317
#: website/public/showcase/notion/index.html:631
#: website/public/showcase/th04/index.html:800
msgctxt "shared"
msgid "Join the community"
msgstr ""
#: website/public/blog/index.html:245
#: website/public/blog/reverse-engineering-models/index.html:884
#: website/public/blog/touhou-reconstruction/index.html:1081
#: website/public/contributors/index.html:1132
#: website/public/examples/dino-lab/index.html:476 website/public/faq/index.html:574
#: website/public/first-investigation/index.html:535
#: website/public/get-started/index.html:1818
#: website/public/guides/browser/index.html:508 website/public/guides/index.html:283
#: website/public/guides/javascript/index.html:504
#: website/public/guides/native/index.html:510 website/public/index.html:1223
#: website/public/showcase/aegis/index.html:809
#: website/public/showcase/ctf/index.html:778
#: website/public/showcase/dx-ball/index.html:786 website/public/showcase/index.html:318
#: website/public/showcase/notion/index.html:632
#: website/public/showcase/th04/index.html:801
msgctxt "shared"
msgid "Follow us on X"
msgstr ""
#. {ph0}: <span aria-hidden="true">
#. {ph1}: </span>
#: website/public/blog/index.html:250
#: website/public/blog/reverse-engineering-models/index.html:889
#: website/public/blog/touhou-reconstruction/index.html:1086
#: website/public/contributors/index.html:1137
#: website/public/examples/dino-lab/index.html:481 website/public/faq/index.html:579
#: website/public/first-investigation/index.html:540
#: website/public/get-started/index.html:1823
#: website/public/guides/browser/index.html:513 website/public/guides/index.html:288
#: website/public/guides/javascript/index.html:509
#: website/public/guides/native/index.html:515 website/public/index.html:1228
#: website/public/showcase/aegis/index.html:814
#: website/public/showcase/ctf/index.html:783
#: website/public/showcase/dx-ball/index.html:791 website/public/showcase/index.html:323
#: website/public/showcase/notion/index.html:637
#: website/public/showcase/th04/index.html:806
#, python-brace-format
msgctxt "shared"
msgid "{ph0}↑{ph1} Top"
msgstr ""
#: website/public/blog/index.html:6
msgctxt "page:blog/index.html"
msgid "REA Blog — Thoughts on Reverse Engineering"
msgstr ""
#: website/public/blog/index.html:7
msgctxt "page:blog/index.html"
msgid ""
"Thoughts on reverse engineering, drawing on practical experience with REA and AI "
"agents."
msgstr ""
#: website/public/blog/index.html:79 website/public/blog/index.html:92
#: website/public/blog/reverse-engineering-models/index.html:79
#: website/public/blog/reverse-engineering-models/index.html:92
#: website/public/blog/touhou-reconstruction/index.html:79
#: website/public/blog/touhou-reconstruction/index.html:92
#: website/public/contributors/index.html:79 website/public/contributors/index.html:92
#: website/public/examples/dino-lab/index.html:79
#: website/public/examples/dino-lab/index.html:92 website/public/faq/index.html:79
#: website/public/faq/index.html:92 website/public/first-investigation/index.html:79
#: website/public/first-investigation/index.html:92
#: website/public/get-started/index.html:79 website/public/get-started/index.html:92
#: website/public/guides/browser/index.html:79
#: website/public/guides/browser/index.html:92 website/public/guides/index.html:79
#: website/public/guides/index.html:92 website/public/guides/javascript/index.html:79
#: website/public/guides/javascript/index.html:92
#: website/public/guides/native/index.html:79 website/public/guides/native/index.html:92
#: website/public/index.html:79 website/public/index.html:92
#: website/public/showcase/aegis/index.html:79
#: website/public/showcase/aegis/index.html:92 website/public/showcase/ctf/index.html:79
#: website/public/showcase/ctf/index.html:92
#: website/public/showcase/dx-ball/index.html:79
#: website/public/showcase/dx-ball/index.html:92 website/public/showcase/index.html:79
#: website/public/showcase/index.html:92 website/public/showcase/notion/index.html:79
#: website/public/showcase/notion/index.html:92
#: website/public/showcase/th04/index.html:79 website/public/showcase/th04/index.html:92
msgctxt "shared"
msgid "REA — Find out how software works. Reverse engineering with your coding agent."
msgstr ""
#: website/public/blog/index.html:112
#: website/public/blog/reverse-engineering-models/index.html:112
#: website/public/blog/touhou-reconstruction/index.html:112
#: website/public/contributors/index.html:113
#: website/public/examples/dino-lab/index.html:113 website/public/faq/index.html:112
#: website/public/first-investigation/index.html:112
#: website/public/get-started/index.html:112
#: website/public/guides/browser/index.html:112 website/public/guides/index.html:112
#: website/public/guides/javascript/index.html:112
#: website/public/guides/native/index.html:112 website/public/index.html:114
#: website/public/showcase/aegis/index.html:113
#: website/public/showcase/ctf/index.html:112
#: website/public/showcase/dx-ball/index.html:112 website/public/showcase/index.html:112
#: website/public/showcase/notion/index.html:112
#: website/public/showcase/th04/index.html:112
msgctxt "shared"
msgid "REA home"
msgstr ""
#: website/public/blog/index.html:116
#: website/public/blog/reverse-engineering-models/index.html:116
#: website/public/blog/touhou-reconstruction/index.html:116
#: website/public/contributors/index.html:117
#: website/public/examples/dino-lab/index.html:117 website/public/faq/index.html:116
#: website/public/first-investigation/index.html:116
#: website/public/get-started/index.html:116
#: website/public/guides/browser/index.html:116 website/public/guides/index.html:116
#: website/public/guides/javascript/index.html:116
#: website/public/guides/native/index.html:116 website/public/index.html:118
#: website/public/showcase/aegis/index.html:117
#: website/public/showcase/ctf/index.html:116
#: website/public/showcase/dx-ball/index.html:116 website/public/showcase/index.html:116
#: website/public/showcase/notion/index.html:116
#: website/public/showcase/th04/index.html:116
msgctxt "shared"
msgid "Main navigation"
msgstr ""
#: website/public/blog/index.html:135
#: website/public/blog/reverse-engineering-models/index.html:135
#: website/public/blog/touhou-reconstruction/index.html:135
#: website/public/contributors/index.html:136
#: website/public/examples/dino-lab/index.html:136 website/public/faq/index.html:135
#: website/public/first-investigation/index.html:135
#: website/public/get-started/index.html:135
#: website/public/guides/browser/index.html:135 website/public/guides/index.html:135
#: website/public/guides/javascript/index.html:135
#: website/public/guides/native/index.html:135 website/public/index.html:137
#: website/public/showcase/aegis/index.html:136
#: website/public/showcase/ctf/index.html:135
#: website/public/showcase/dx-ball/index.html:135 website/public/showcase/index.html:135
#: website/public/showcase/notion/index.html:135
#: website/public/showcase/th04/index.html:135
msgctxt "shared"
msgid "REA on GitHub"
msgstr ""
#: website/public/blog/index.html:155
#: website/public/blog/reverse-engineering-models/index.html:155
#: website/public/blog/touhou-reconstruction/index.html:155
#: website/public/contributors/index.html:156
#: website/public/examples/dino-lab/index.html:156 website/public/faq/index.html:155
#: website/public/first-investigation/index.html:155
#: website/public/get-started/index.html:155
#: website/public/guides/browser/index.html:155 website/public/guides/index.html:155
#: website/public/guides/javascript/index.html:155
#: website/public/guides/native/index.html:155 website/public/index.html:157
#: website/public/showcase/aegis/index.html:156
#: website/public/showcase/ctf/index.html:155
#: website/public/showcase/dx-ball/index.html:155 website/public/showcase/index.html:155
#: website/public/showcase/notion/index.html:155
#: website/public/showcase/th04/index.html:155
msgctxt "shared"
msgid "Join REA on Discord"
msgstr ""
#: website/public/blog/index.html:174
#: website/public/blog/reverse-engineering-models/index.html:174
#: website/public/blog/touhou-reconstruction/index.html:174
#: website/public/contributors/index.html:175
#: website/public/examples/dino-lab/index.html:175 website/public/faq/index.html:174
#: website/public/first-investigation/index.html:174
#: website/public/get-started/index.html:174
#: website/public/guides/browser/index.html:174 website/public/guides/index.html:174
#: website/public/guides/javascript/index.html:174
#: website/public/guides/native/index.html:174 website/public/index.html:176
#: website/public/showcase/aegis/index.html:175
#: website/public/showcase/ctf/index.html:174
#: website/public/showcase/dx-ball/index.html:174 website/public/showcase/index.html:174
#: website/public/showcase/notion/index.html:174
#: website/public/showcase/th04/index.html:174
msgctxt "shared"
msgid "Follow REA on X"
msgstr ""
#: website/public/blog/index.html:250
msgctxt "page:blog/index.html"
msgid "Back to top"
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:107
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "Skip to content"
msgstr ""
#. {ph0}: <a href="../../">
#. {ph1}: </a>
#. {ph2}: <a href="../">
#. {ph3}: </a>
#: website/public/blog/reverse-engineering-models/index.html:199
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "{ph0}Home{ph1} / {ph2}Blog{ph3} / Models and RE"
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:202
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "Essay"
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:203
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "Does reverse engineering need a bigger model?"
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:204
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "By N0zoM1z0 · 13 October 2026"
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:206
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "Takeaway"
msgstr ""
#. {ph0}: <strong >
#. {ph1}: </strong >
#: website/public/blog/reverse-engineering-models/index.html:208
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"{ph0}Model capability changes the hypotheses an agent can find.{ph1} Later sessions "
"have solved problems that earlier work left unresolved."
msgstr ""
#. {ph0}: <strong >
#. {ph1}: </strong >
#: website/public/blog/reverse-engineering-models/index.html:216
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"{ph0}A familiar compiler gives specialization something concrete to learn.{ph1} Some "
"exact matches depend on narrow, reusable source patterns."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#: website/public/blog/reverse-engineering-models/index.html:223
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"{ph0}Give repository knowledge a fair comparison.{ph1} A smaller model with good "
"retrieval may already know enough to make progress."
msgstr ""
#. {ph0}: <strong >
#. {ph1}: </strong >
#: website/public/blog/reverse-engineering-models/index.html:228
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"{ph0}Train the next useful experiment, and test its oracle.{ph1} The value of feedback"
" depends on what the checker actually verifies."
msgstr ""
#. {ph0}: <strong >
#. {ph1}: </strong >
#: website/public/blog/reverse-engineering-models/index.html:235
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"{ph0}Measure accepted reconstruction against time and cost.{ph1} That is the result I "
"want from the whole agent."
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:246
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "In this article"
msgstr ""
#. {ph0}: <a href="#model-capability">
#. {ph1}: </a>
#: website/public/blog/reverse-engineering-models/index.html:248
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "{ph0}What better models changed{ph1}"
msgstr ""
#. {ph0}: <a href="#specialization">
#. {ph1}: </a>
#: website/public/blog/reverse-engineering-models/index.html:249
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "{ph0}Why specialize?{ph1}"
msgstr ""
#. {ph0}: <a href="#repository-knowledge">
#. {ph1}: </a>
#: website/public/blog/reverse-engineering-models/index.html:250
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "{ph0}Where experience lives{ph1}"
msgstr ""
#. {ph0}: <a href="#learning-search">
#. {ph1}: </a>
#: website/public/blog/reverse-engineering-models/index.html:251
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "{ph0}Learning the next experiment{ph1}"
msgstr ""
#. {ph0}: <a href="#re-and-rl">
#. {ph1}: </a>
#: website/public/blog/reverse-engineering-models/index.html:252
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "{ph0}RE and reinforcement learning{ph1}"
msgstr ""
#. {ph0}: <a href="#oracle">
#. {ph1}: </a>
#: website/public/blog/reverse-engineering-models/index.html:253
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "{ph0}When the oracle is wrong{ph1}"
msgstr ""
#. {ph0}: <a href="#comparison">
#. {ph1}: </a>
#: website/public/blog/reverse-engineering-models/index.html:254
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "{ph0}A comparison worth running{ph1}"
msgstr ""
#. {ph0}: <a href="#future-agent">
#. {ph1}: </a>
#: website/public/blog/reverse-engineering-models/index.html:255
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "{ph0}What kind of agent?{ph1}"
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:263
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "What better models changed"
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:264
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"Since August 2026, I have been exploring how much reverse engineering an agent can "
"carry out with access to a program and a way to check its work. Most of my experience "
"comes from reconstructing games, especially Touhou. As I have changed models, the "
"repositories have kept a record of what each session managed to recover."
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:272
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"Much of that work aims at exact reconstruction: we compile the maintained source under"
" a pinned historical toolchain and check whether it reproduces the target function. "
"When a later model succeeds where earlier work stalled, the source changes show what "
"made that progress possible."
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:279
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "The temporary values had to stay alive together"
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:280
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"Much of a TH09 attack function's logic had already been reconstructed, but the "
"compiler still stored temporary results differently from the original. The remaining "
"problem was how long those results needed to stay alive and when their storage could "
"be reused."
msgstr ""
#. {ph0}: <a
#. href="https://github.com/N0zoM1z0/th09/commit/de63c0f9121963f3a6b1ab5471c4878625fd3425"
#. >
#. {ph1}: </a >
#. {ph2}: <a
#. href="https://github.com/N0zoM1z0/th09/commit/52929ed7c299f1a5f29cc13964e22510145fd616"
#. >
#. {ph3}: </a >
#: website/public/blog/reverse-engineering-models/index.html:287
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"A {ph0}GPT-6-Sol checkpoint{ph1} recorded this mismatch after testing several ordinary"
" source arrangements. When {ph2}GPT-6.1-Sol returned to the problem{ph3}, it found a "
"useful hypothesis about how long those temporary values needed to stay alive."
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:301
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"The function produced temporary results and copied them into animation positions. In "
"C++, a temporary result stays alive until the expression using it finishes. Grouping "
"the real operations into one expression kept those results alive together, so the "
"compiler could no longer reuse the same storage for all of them."
msgstr ""
#. {ph0}: <strong >
#. {ph1}: </strong >
#: website/public/blog/reverse-engineering-models/index.html:308
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"One result still shared storage with a value used later for collision checks. Giving "
"that value its own lifetime resolved the remaining overlap. After several targeted "
"experiments, {ph0}a clean rebuild confirmed that the full function matched{ph1}."
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:317
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"What interests me is how the discovery and the tests worked together. The lifetime "
"hypothesis gave the agent a new direction; compiler feedback helped it refine that "
"hypothesis into a source arrangement that matched."
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:323
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "A different control-flow graph"
msgstr ""
#. {ph0}: <a
#. href="https://github.com/N0zoM1z0/th09/commit/f8d12d72aaf02212ee1b585a8f3f86d7ed000269"
#. >
#. {ph1}: </a >
#: website/public/blog/reverse-engineering-models/index.html:324
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"A second TH09 function shows why that new direction can matter. Here, the obstacle was"
" how several branches shared their final work. {ph0}GPT-6.1-Sol's earlier work{ph1} "
"got parts of the function to match, but the branches still joined up differently from "
"the original."
msgstr ""
#. {ph0}: <a
#. href="https://github.com/N0zoM1z0/th09/commit/da33a646221198ceb7f3df2b96e2ca0e9b2f705f"
#. >
#. {ph1}: </a >
#. {ph2}: <a
#. href="https://github.com/N0zoM1z0/th09/commit/5f825b28a862f8e1a6d4aea2f78a42f04c09a1c0"
#. >
#. {ph3}: </a >
#: website/public/blog/reverse-engineering-models/index.html:335
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"{ph0}GPT-6-Astra changed the surrounding control-flow graph{ph1}. The main paths now "
"led to a shared final update and return. In that source structure, the compiler "
"combined the branches in the same way as the original. The complete function matched, "
"and a {ph2}separate rebuild check confirmed it{ph3}."
msgstr ""
#. {ph0}: <strong >
#. {ph1}: </strong >
#: website/public/blog/reverse-engineering-models/index.html:347
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"{ph0}Changing the representation opened a more productive search space.{ph1} Both "
"cases give me a reason to take general model capability seriously: an agent can keep "
"trying local variations for a long time before finding a better way to express the "
"surrounding work."
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:356
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"At the same time, the later sessions started with earlier source and recorded "
"failures. That accumulated work was part of their advantage. The history lets us "
"inspect the discoveries and their checks; a controlled comparison would help separate "
"the effect of the model from the experience it inherited."
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:363
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"This is where the question becomes interesting to me. Some of the progress came from "
"finding a new representation, while much of the remaining work involved testing source"
" forms against a familiar compiler. How much needs broad reasoning ability, and how "
"much could a model learn through repeated experience with that compiler and code?"
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:373
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "Why might a specialist do well?"
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:374
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"Touhou gives us a concrete reason to expect that experience to help. Much of the game "
"code comes from the same author, ZUN, so recurring habits are a reasonable starting "
"assumption. The repositories back that up with useful examples: related loops and "
"helper arrangements have supplied hypotheses across games."
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:381
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"Those source patterns become more specific when we include the compiler. Under a "
"particular version and set of options, small changes in source can produce repeatable "
"differences in machine code. Some of those differences are surprisingly obscure."
msgstr ""
#. {ph0}: <strong >
#. {ph1}: </strong >
#. {ph2}: <a
#. href="https://github.com/N0zoM1z0/th095/commit/26bb64bdb093a13f73abd0ee8ae7ce199ee4658f"
#. >
#. {ph3}: <code>Supervisor::LoadDat</code>
#. {ph4}: </a >
#: website/public/blog/reverse-engineering-models/index.html:387
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"In TH095, for example, {ph0}even the name used for a local variable could change where"
" VC7.1 stored it{ph1}. Moving the declaration alone did not solve the layout, but an "
"earlier background function had revealed a naming pattern that affected the compiler's"
" choice. That gave us a more promising hypothesis for {ph2}the reconstruction of "
"{ph3}{ph4}."
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:401
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"Reusing that pattern for the file-size variable produced the required layout without "
"adding storage. The full function then matched."
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:406
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"This is the sort of narrow detail a general model may not know when it arrives. A "
"specialist trained on this compiler could encounter many such cases and learn which "
"source variations are worth testing first."
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:412
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"The opportunity is especially clear in final matching problems where we already "
"understand the behavior. We are then asking which ordinary source form this compiler "
"turns into the observed instructions. Specialization could help the model propose "
"those forms more efficiently, while the target still determines which hypotheses "
"survive."
msgstr ""
#. {ph0}: <a
#. href="https://github.com/N0zoM1z0/th04/commit/6dce0a79d5b931f0e2a08475b90e0c33d2321b98"
#. >
#. {ph1}: </a >
#: website/public/blog/reverse-engineering-models/index.html:420
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"The useful patterns would have to retain their context, though. TH08 uses an earlier "
"Visual C++ version than TH095 and TH09. TH04 uses a different DOS-era compiler, and "
"its {ph0}player reconstruction{ph1} needed different hypotheses about source patterns "
"and how the compiled code was combined into an executable. Shared authorship gives us "
"a prior, but each target tells us whether it applies. Distinguishing those contexts is"
" part of what a specialist would need to learn."
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:436
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "Where should that experience live?"
msgstr ""
#. {ph0}: <a href="../touhou-reconstruction/">
#. {ph1}: </a>
#: website/public/blog/reverse-engineering-models/index.html:437
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"Before deciding to teach those patterns through model training, I would look at the "
"knowledge we already keep in the repository. In the {ph0}previous essay{ph1}, I wrote "
"about it becoming the project's working memory. That memory includes compiler lessons,"
" along with the source and failed experiments that made them useful."
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:446
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"By retrieving that record, an agent can start with a known result and inspect how we "
"reached it. It can also avoid alternatives that have already failed in the same "
"context. The starting point improves without changing the model's weights."
msgstr ""
#. {ph0}: <a
#. href="https://github.com/N0zoM1z0/th09/commit/1eb843383941d00065622a9e353146c4bb96979e"
#. >
#. {ph1}: </a >
#: website/public/blog/reverse-engineering-models/index.html:452
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"When reconstructing TH09's enemy-spawn function, a {ph0}GPT-6-Luna-max session{ph1} "
"drew a hypothesis from TH08's corresponding source family. That earlier source "
"suggested how to structure the loop and handle failures within it. TH09's own evidence"
" supplied the game-specific details, and clean rebuilds confirmed the complete match."
msgstr ""
#. {ph0}: <strong >
#. {ph1}: </strong >
#: website/public/blog/reverse-engineering-models/index.html:463
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"{ph0}\"The model did not know that compiler quirk\" and \"the model could not use it\""
" are different problems.{ph1} Retrieval may solve the first, but turning that fact "
"into a useful candidate still takes work. And if the candidate fails, the model must "
"decide what the result means for its next attempt. Knowing the relevant pattern is "
"only the beginning of that process."
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:473
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"For that reason, I would include a smaller general model with good retrieval in any "
"comparison. Giving it the same library of experience would help us identify what "
"training adds: better candidate generation, better decisions after feedback, or both."
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:481
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "Learning the next useful experiment"
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:482
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"Those decisions after feedback are what I would most like to study. In agentic "
"reconstruction, the model proposes an explanation and tests it against the program. "
"Even when the candidate fails, the result can narrow the remaining possibilities and "
"suggest a more useful next experiment."
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:489
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"Consider the temporary-results example again. Its final source shows the arrangement "
"that worked, but the route to that source contains more information. Each of the "
"following experiments helped identify what still needed to change."
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:502
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "Experiment"
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:503
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "What its result taught us"
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:508
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "Try a different way to copy the results"
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:509
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "The copy code changes, but the function still differs."
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:514
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "Use the returned values directly"
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:515
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "Copying follows the original pattern, but temporary storage still differs."
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:521
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "Keep the temporary results alive together"
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:522
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"They get separate storage, but one still overlaps a value used later for collision "
"checks."
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:528
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "Keep the collision-check value separate"
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:529
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "A clean rebuild confirms the complete match."
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:534
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"Selected experiments from the attack-function reconstruction above, grouped by what "
"they taught us."
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:538
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"A training record that keeps this sequence can teach more than the final source alone."
" It connects each proposed change to an observed result and the next decision. Keeping"
" ineffective variations matters too: they tell a later agent which hypotheses have "
"already been tested in that context."
msgstr ""
#. {ph0}: <strong >
#. {ph1}: </strong >
#: website/public/blog/reverse-engineering-models/index.html:545
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"{ph0}I would want the model to learn how to use feedback.{ph1} A neutral result is a "
"reason to reconsider the variation; a changed mismatch may point to another cause. "
"When local edits stop being informative, the agent should be able to revisit the "
"source representation or inspect the evidence again."
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:554
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"Learning to make those choices requires autonomy. Sometimes the useful next step is "
"inspecting another caller rather than compiling another edit. A rigid sequence of "
"required rewrites would remove that choice, along with part of the behavior we want "
"the model to learn."
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:563
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "Why RE is interesting for reinforcement learning"
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:564
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"Bounded reconstruction gives us a practical environment for studying these choices. "
"Once the target and compiler are pinned, many source experiments produce quick, "
"repeatable feedback. The agent can compile a candidate, inspect the mismatch and use "
"that observation to choose its next step."
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:571
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"Reinforcement learning could train that decision-making process through the feedback "
"it receives. A candidate accepted by a defined check gives us a concrete outcome, "
"while the sequence of attempts lets us observe how much work it took to reach it."
msgstr ""
#. {ph0}: <a href="https://aclanthology.org/2024.emnlp-main.203/" >
#. {ph1}: </a >
#. {ph2}: <a href="https://arxiv.org/html/2606.16162v1">
#. {ph3}: </a>
#: website/public/blog/reverse-engineering-models/index.html:577
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"There is already research supporting this direction. {ph0}LLM4Decompile{ph1} studies "
"models specialized for decompilation. {ph2}AutoDecompiler{ph3} trains multi-turn "
"refinement using compiler and execution feedback. Their studies focus on functional "
"recovery. For this work, I would use them as a starting point for the related task of "
"finding source that matches a historical compiler's output."
msgstr ""
#. {ph0}: <a
#. href="https://github.com/N0zoM1z0/th08/commit/af9cb1d3e839b15a78b47ac1701506083cc82847"
#. >
#. {ph1}: </a >
#: website/public/blog/reverse-engineering-models/index.html:589
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"To reach such a well-defined task, though, we may first need to establish what a "
"function owns or devise a new runtime measurement. In TH08, for example, a "
"{ph0}collision difference led back to how the original program handled floating-point "
"calculations{ph1}. Before the agent could test a useful correction, it had to work out"
" what to measure."
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:600
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"This suggests another role for a broadly capable model: helping make the problem "
"checkable in the first place. Once that check exists, we can investigate how far a "
"learned search policy can get with it."
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:608
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "When the oracle is wrong"
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:609
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"Once we train against that check, its coverage becomes part of what the model learns. "
"I call the reference or checker an oracle. Even if it gives a repeatable answer, we "
"still need to understand what that answer covers."
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:615
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"TH08 showed how much can hide outside that coverage. Some reconstructed functions "
"passed their exact comparisons with wrong floating constants. The comparator adjusted "
"relocated addresses before checking instructions, but it checked the values behind "
"those addresses only when they had been explicitly recorded for verification. Other "
"literal references could pass without their values being examined."
msgstr ""
#. {ph0}: <a
#. href="https://github.com/N0zoM1z0/th08/commit/a393f400786e4cc6cbb1000af0dad3276da12c78"
#. >
#. {ph1}: </a >
#. {ph2}: <code>1.0f</code>
#. {ph3}: <code>32.0f</code>
#: website/public/blog/reverse-engineering-models/index.html:624
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"To close that gap, a {ph0}wider audit{ph1} found incorrect constants in functions that"
" had already been accepted. In one calculation, the reconstructed source added {ph2} "
"where the original added {ph3}."
msgstr ""
#. {ph0}: <strong >
#. {ph1}: </strong >
#: website/public/blog/reverse-engineering-models/index.html:634
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"{ph0}A learner rewarded by the old check could learn to produce the wrong "
"reconstruction.{ph1} We had not trained an RL model against this oracle; the observed "
"failure was in the check itself. But using that check as a reward would have made the "
"same blind spot part of the learning environment."
msgstr ""
#. {ph0}: <a href="https://arxiv.org/html/2609.05370v1" >
#. {ph1}: </a >
#: website/public/blog/reverse-engineering-models/index.html:644
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"A functional test can have a similar blind spot. {ph0}Differential-fuzzing research on"
" LLM decompilers{ph1} has found behavior differences beyond the supplied tests. "
"Passing those tests therefore needs to be read in terms of the cases they exercise, "
"just as an instruction match needs to be read in terms of the bytes and data it "
"checks."
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:654
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"Before using either kind of check as a reward, I would test it with deliberate "
"failures. I would also keep final acceptance outside the candidate's editable source, "
"so the model has to satisfy the check through its reconstruction. Otherwise, something"
" like a byte array copied from the target could satisfy a naive score without "
"recovering useful source."
msgstr ""
#. {ph0}: <strong >
#. {ph1}: </strong >
#: website/public/blog/reverse-engineering-models/index.html:662
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"{ph0}Improving the learner and improving its oracle belong to the same research "
"problem.{ph1} As the learner gets better at optimizing the feedback we give it, "
"understanding that feedback becomes more important too."
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:672
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "A comparison worth running"
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:673
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"With those checks in place, I would start the comparison on a fixed VC7.1 task family."
" First, I would establish baselines for a strong general model and a smaller one. "
"Adding repository knowledge to the smaller model would show what retrieval changes. "
"From there, supervised specialization and an RL-trained version would let us examine "
"what training adds."
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:681
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"To make those comparisons informative, each model would receive the same target "
"evidence and tools. For the training-specific comparisons, I would keep the base model"
" and available knowledge fixed as well. Repeated trials would help distinguish a "
"reliable search strategy from a lucky candidate."
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:688
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"I would then separate two starting conditions: reconstructing a function from its "
"instructions, and closing the last few differences in maintained source. A specialist "
"might be excellent at the second task while a general model does much of the work "
"needed to reach it. Measuring them separately would reveal that division of work."
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:696
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"Both tasks need genuinely held-out examples. Because related Touhou games share engine"
" code, holding out a game's name would still allow nearly identical functions to "
"appear in training. I would instead hold out source families and keep their accepted "
"answers out of both training and retrieval."
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:703
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"On those examples, the outcome would be complete, independently validated matches. "
"Giving each model the same candidate or compile budget would help compare search "
"quality. Measuring elapsed time and total cost, including compilation, would tell us "
"whether that quality produces an efficient workflow. Training costs would need their "
"own accounting too."
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:711
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"Both views matter because a cheaper proposal can become an expensive workflow if it "
"causes more uninformative compiles. Conversely, a slower model may pay for itself by "
"finding a useful experiment sooner. The comparison should capture those costs."
msgstr ""
#. {ph0}: <a
#. href="https://github.com/N0zoM1z0/th09/commit/ab72fd77728293fc0beacfc656ca701b0e266016"
#. >
#. {ph1}: </a >
#: website/public/blog/reverse-engineering-models/index.html:717
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"Counting accepted results also keeps intermediate progress in perspective. One TH09 "
"{ph0}replay-save candidate{ph1} looked promising because the compiled function had the"
" expected size, but a full comparison still found substantial differences. Changes in "
"how the compiler arranges instructions can also make a candidate look closer without "
"resolving the underlying problem. Such diagnostics can guide the next experiment, but "
"I would validate any reward for \"getting closer\" against the full acceptance check."
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:732
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"I would be interested in the pattern across these results. If a specialist does well "
"within a familiar compiler family, does that advantage survive a toolchain change? And"
" once both models have good retrieval, how much does training still add? The answers "
"would help us decide where each kind of model is most useful."
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:741
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "What kind of agent does this suggest?"
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:742
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"If the models turn out to help at different stages, a useful arrangement might be a "
"broad agent with access to a specialist. Once a task becomes a familiar compiler "
"search, it could ask the specialist for candidates. If the results stop making sense, "
"the broader agent could return to the target evidence or investigate the measurement "
"itself."
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:750
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"In that arrangement, specialization becomes a tool the agent can choose as the "
"investigation develops. The agent keeps the freedom to change direction that made the "
"earlier breakthroughs possible."
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:755
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"This follows naturally from the industrial shift I described in the previous essay. "
"Being able to run many more experiments changes how we organize the work. It also "
"gives us a reason to ask which decisions need broad judgment and which improve through"
" repeated experience with a particular craft."
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:762
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"For now, the strongest general model has earned its place in my workflow by opening "
"problems I had left unresolved. Those successes are what make me want to examine the "
"work more closely: how much depended on the model's breadth, and how much could be "
"handled by a model trained in this particular kind of reconstruction?"
msgstr ""
#. {ph0}: <strong >
#. {ph1}: </strong >
#: website/public/blog/reverse-engineering-models/index.html:770
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"{ph0}The repositories give us a way to test the question.{ph1} I would like to use "
"that record to build the comparison and see what we learn."
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:780
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "Evidence and model attribution"
msgstr ""
#. {ph0}: <a href="https://github.com/morluto/rea/blob/main/website/evidence/reverse-
#. engineering-models.md" >
#. {ph1}: </a >
#: website/public/blog/reverse-engineering-models/index.html:781
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"{ph0}Detailed evidence notes{ph1} include the recorded comparisons and experiment "
"context."
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:788
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"The examples describe historical function-level comparisons recorded in the linked "
"commits. Whole-game runtime checks are separate milestones. Source and matching "
"records were reviewed on 13 October 2026."
msgstr ""
#. {ph0}: <code>gpt-dots</code>
#. {ph1}: <code>gpt-web</code>
#: website/public/blog/reverse-engineering-models/index.html:794
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"The TH09 label {ph0} identifies GPT-6-Astra. {ph1} changed with the model used at the "
"time, so that label alone does not identify an individual run. Explicit model names in"
" the other cited commits establish their recorded attribution; the histories do not "
"contain uniform per-run cost or effort measurements."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#. {ph2}: <a
#. href="https://github.com/N0zoM1z0/th09/commit/de63c0f9121963f3a6b1ab5471c4878625fd3425"
#. >
#. {ph3}: </a >
#. {ph4}: <a
#. href="https://github.com/N0zoM1z0/th09/commit/52929ed7c299f1a5f29cc13964e22510145fd616"
#. >
#. {ph5}: </a >
#: website/public/blog/reverse-engineering-models/index.html:803
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"{ph0}TH09 temporary lifetimes:{ph1} the {ph2}earlier context review{ph3} and "
"{ph4}complete cold reconstruction{ph5}."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#. {ph2}: <a
#. href="https://github.com/N0zoM1z0/th09/commit/f8d12d72aaf02212ee1b585a8f3f86d7ed000269"
#. >
#. {ph3}: </a >
#. {ph4}: <a
#. href="https://github.com/N0zoM1z0/th09/commit/da33a646221198ceb7f3df2b96e2ca0e9b2f705f"
#. >
#. {ph5}: </a >
#. {ph6}: <a
#. href="https://github.com/N0zoM1z0/th09/commit/5f825b28a862f8e1a6d4aea2f78a42f04c09a1c0"
#. >
#. {ph7}: </a >
#: website/public/blog/reverse-engineering-models/index.html:815
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"{ph0}TH09 Front callback:{ph1} {ph2}non-exact diagnostic regions{ph3}, {ph4}Astra's "
"new graph{ph5} and its {ph6}accepted recompile replay{ph7}."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#. {ph2}: <a
#. href="https://github.com/N0zoM1z0/th095/commit/26bb64bdb093a13f73abd0ee8ae7ce199ee4658f"
#. >
#. {ph3}: </a >
#. {ph4}: <a
#. href="https://github.com/N0zoM1z0/th04/commit/6dce0a79d5b931f0e2a08475b90e0c33d2321b98"
#. >
#. {ph5}: </a >
#. {ph6}: <a
#. href="https://github.com/N0zoM1z0/th09/commit/1eb843383941d00065622a9e353146c4bb96979e"
#. >
#. {ph7}: </a >
#: website/public/blog/reverse-engineering-models/index.html:831
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"{ph0}Compiler knowledge:{ph1} {ph2}TH095 identifier-bucket reuse{ph3}, {ph4}TH04 "
"player source and linker order{ph5} and {ph6}Luna's TH09 enemy-spawn closure{ph7}."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#. {ph2}: <a
#. href="https://github.com/N0zoM1z0/th08/commit/a393f400786e4cc6cbb1000af0dad3276da12c78"
#. >
#. {ph3}: </a >
#. {ph4}: <a
#. href="https://github.com/N0zoM1z0/th08/commit/af9cb1d3e839b15a78b47ac1701506083cc82847"
#. >
#. {ph5}: </a >
#. {ph6}: <a
#. href="https://github.com/N0zoM1z0/th09/commit/ab72fd77728293fc0beacfc656ca701b0e266016"
#. >
#. {ph7}: </a >
#: website/public/blog/reverse-engineering-models/index.html:847
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"{ph0}Checks and diagnostics:{ph1} {ph2}TH08 floating-literal audit{ph3}, {ph4}TH08 "
"numerical investigation{ph5} and {ph6}TH09 replay-save reconstruction{ph7}."
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:864
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"The proposed specialist and RL comparisons are future experiments. The project "
"histories motivate them; no trained specialist was evaluated for this essay."
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:6
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "Does reverse engineering need a bigger model? | REA"
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:7
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"What Touhou reconstruction taught me about general models, specialist models and "
"learning to propose better hypotheses from compiler feedback."
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:245
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "On this page"
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:258
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "Models and reverse engineering essay"
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:496
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "Selected reconstruction experiments"
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:889
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "Back to top"
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:107
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "Skip to content"
msgstr ""
#. {ph0}: <a href="../../">
#. {ph1}: </a>
#. {ph2}: <a href="../">
#. {ph3}: </a>
#: website/public/blog/touhou-reconstruction/index.html:199
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "{ph0}Home{ph1} / {ph2}Blog{ph3} / Touhou reconstruction"
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:203
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "Essay · Touhou reconstruction"
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:204
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "The industrial revolution in reverse engineering."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:205
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "By N0zoM1z0 · 10 October 2026"
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:207
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "Takeaway"
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#: website/public/blog/touhou-reconstruction/index.html:209
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"{ph0}Give agents autonomy over the investigation.{ph1} Set a clear goal and acceptance"
" criteria, then let the agent decide what to try next."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#: website/public/blog/touhou-reconstruction/index.html:214
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"{ph0}Use the repository and Git as working memory.{ph1} Keep the reasoning with the "
"code. Git checkpoints let the next session continue after the conversation ends."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#: website/public/blog/touhou-reconstruction/index.html:219
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"{ph0}Let evidence decide what you claim.{ph1} A confident explanation still needs "
"testing. “Unknown” is a valid answer when the evidence is incomplete."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#: website/public/blog/touhou-reconstruction/index.html:224
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"{ph0}Test the oracle too.{ph1} Try cases it should reject. If it misses a bug, revisit"
" the earlier results that depended on it."
msgstr ""
#. {ph0}: <strong >
#. {ph1}: </strong >
#: website/public/blog/touhou-reconstruction/index.html:229
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"{ph0}We are in the early days of RE's industrial revolution.{ph1} The methods are "
"still taking shape. There is plenty left to explore."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:241
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "How experience compounds"
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#: website/public/blog/touhou-reconstruction/index.html:242
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "{ph0}Human direction{ph1} · Goal and acceptance criteria"
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:330
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "Autonomy"
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:331
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "Agent"
msgstr ""
#. {ph0}: <br />
#: website/public/blog/touhou-reconstruction/index.html:332
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "Choose an experiment.{ph0}Propose a hypothesis."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:335
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "Verification"
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:336
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "Oracle"
msgstr ""
#. {ph0}: <br />
#: website/public/blog/touhou-reconstruction/index.html:337
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "Test against a{ph0}concrete reference."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:340
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "Repository"
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:341
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "Working memory"
msgstr ""
#. {ph0}: <br />
#: website/public/blog/touhou-reconstruction/index.html:342
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "Code, evidence,{ph0}checks and lessons."
msgstr ""
#. {ph0}: <br />
#. {ph1}: <strong>
#. {ph2}: </strong>
#: website/public/blog/touhou-reconstruction/index.html:344
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "Mismatch{ph0}{ph1}Revise the hypothesis{ph2}"
msgstr ""
#. {ph0}: <br />
#. {ph1}: <strong>
#. {ph2}: </strong>
#: website/public/blog/touhou-reconstruction/index.html:347
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "A better{ph0}{ph1}starting point{ph2}"
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:350
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "Reuse"
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#: website/public/blog/touhou-reconstruction/index.html:351
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "{ph0}Pass{ph1} · Keep the result and its evidence"
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:363
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"Each project leaves the next with a better starting point. That includes fixing the "
"checks when we discover a gap."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:370
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "In this article"
msgstr ""
#. {ph0}: <a href="#august">
#. {ph1}: </a>
#: website/public/blog/touhou-reconstruction/index.html:372
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "{ph0}August 2026{ph1}"
msgstr ""
#. {ph0}: <a href="#th08">
#. {ph1}: </a>
#: website/public/blog/touhou-reconstruction/index.html:373
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "{ph0}TH08: the continuation{ph1}"
msgstr ""
#. {ph0}: <a href="#different-approaches">
#. {ph1}: </a>
#: website/public/blog/touhou-reconstruction/index.html:374
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "{ph0}Two approaches{ph1}"
msgstr ""
#. {ph0}: <a href="#th095">
#. {ph1}: </a>
#: website/public/blog/touhou-reconstruction/index.html:375
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "{ph0}TH095: compounding{ph1}"
msgstr ""
#. {ph0}: <a href="#th04">
#. {ph1}: </a>
#: website/public/blog/touhou-reconstruction/index.html:376
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "{ph0}TH04: across architectures{ph1}"
msgstr ""
#. {ph0}: <a href="#semantic-reconstruction">
#. {ph1}: </a>
#: website/public/blog/touhou-reconstruction/index.html:377
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "{ph0}From exact to readable{ph1}"
msgstr ""
#. {ph0}: <a href="#industrial-shift">
#. {ph1}: </a>
#: website/public/blog/touhou-reconstruction/index.html:380
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "{ph0}The industrial shift{ph1}"
msgstr ""
#. {ph0}: <a href="#possibilities">
#. {ph1}: </a>
#: website/public/blog/touhou-reconstruction/index.html:381
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "{ph0}What becomes possible{ph1}"
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:386
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "What changed in August 2026"
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:387
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"Before this work, I had done a lot of manual reverse engineering. I would inspect a "
"function until I had an explanation, then test that explanation against the program. "
"Getting further meant spending more of my own time on the next function. It also meant"
" keeping an increasingly large picture in my head."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:394
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"Most of my RE work is on games. I reconstruct them so their behavior can be understood"
" and eventually carried into a port or a mod. That is the experience behind this "
"article. The method can be useful elsewhere, but each field needs to establish what it"
" can check against a reliable reference."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:401
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"In August 2026, I started exploring agent-driven RE seriously. I wanted to see how far"
" an agent could get with access to the program and ordinary development tools. Touhou "
"reconstruction gave me a substantial project in which to find out."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:407
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"The early progress was startling. An investigation could keep moving without me "
"choosing every individual step. A failed comparison might send the agent to another "
"caller. It could write a small diagnostic and use the result to decide what to try "
"next. Giving it that freedom made a difference: I could spend more attention on the "
"project's direction and on whether its checks were trustworthy."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:416
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"The pace got my attention first. Then I began wondering what would survive beyond the "
"current project. Would the next game benefit from everything we had just learned?"
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:423
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "TH08: building on human work"
msgstr ""
#. {ph0}: <a href="https://github.com/N0zoM1z0/th08">
#. {ph1}: </a>
#. {ph2}: <a href="https://github.com/GensokyoClub/th08" >
#. {ph3}: </a >
#: website/public/blog/touhou-reconstruction/index.html:424
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"{ph0}TH08{ph1}, Imperishable Night, began as a continuation of {ph2}GensokyoClub's "
"reconstruction{ph3}. Their public source gave me a substantial foundation. It came "
"with knowledge of the build and a history of contributions that I preserved in the "
"continuation."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:433
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"The imported history ends at the public 10 August checkpoint. My independent "
"continuation began on 13 August. By 19 August, the ledger recorded source for all "
"1,107 identified game functions."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:438
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"A playable Linux reconstruction port was committed on 24 August, roughly eleven days "
"after the continuation began. A Web edition followed. The native Linux 64-bit release "
"arrived on 30 August."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:443
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"What struck me was that the work had reached a program people could run. Getting there"
" required following problems beyond an individual function. Even when two functions "
"looked correct in isolation, they could accidentally use separate copies of state that"
" should have been shared."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#: website/public/blog/touhou-reconstruction/index.html:450
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"This made reference checks central to the work. I call them {ph0}oracles{ph1}. A code "
"comparison can tell us whether a reconstructed function reproduces the original "
"instructions. A runtime check can tell us whether an exercised route reaches the "
"expected state. The agent proposes an explanation and tests it; a mismatch gives it "
"something specific to investigate."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:458
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "An exact match with the wrong constant"
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:459
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"An oracle is software someone wrote. TH08 gave me a clear reminder of how much can "
"depend on that software."
msgstr ""
#. {ph0}: <code>0.0</code>
#. {ph1}: <code>128.0</code>
#: website/public/blog/touhou-reconstruction/index.html:463
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"In September, a bug reported by a downstream Switch port led back to item auto-"
"collection. The reconstructed source checked player power against {ph0}. The original "
"used {ph1}, the maximum-power threshold."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:469
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"Normal power is non-negative, so the reconstructed power check was effectively always "
"satisfied. Above the collection line, the game could attract items without requiring "
"maximum power. The other exceptions in the condition were correct. This one constant "
"changed the behavior."
msgstr ""
#. {ph0}: <strong >
#. {ph1}: </strong >
#: website/public/blog/touhou-reconstruction/index.html:476
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "{ph0}Yet the function had already passed the exact comparison.{ph1}"
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:482
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"A rebuild can put a constant at a different address. The comparison tool accounted for"
" that by adjusting addresses in the compiled instructions before comparing them with "
"the original. But it never checked the floating-point value stored at the referenced "
"address."
msgstr ""
#. {ph0}: <code>128.0</code>
#. {ph1}: <code>0.0</code>
#: website/public/blog/touhou-reconstruction/index.html:489
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"That left a hole in the check. It could point the reconstructed instruction at the "
"original's {ph0} while the source still said {ph1}. The instruction bytes matched. The"
" source meant something different."
msgstr ""
#. {ph0}: <a href="https://github.com/N0zoM1z0/th08/pull/11" >
#. {ph1}: </a >
#. {ph2}: <a href="https://github.com/N0zoM1z0/th08/pull/13">
#. {ph3}: </a>
#: website/public/blog/touhou-reconstruction/index.html:495
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"The {ph0}2 September fix{ph1} corrected the source and made the comparison check the "
"referenced constant's actual bytes. A {ph2}wider audit{ph3} then examined 1,548 "
"floating-literal references. It found another twelve incorrect references across five "
"accepted functions."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:506
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"The comparison now checks every such floating literal. Its tests include deliberately "
"wrong values to make sure they are rejected. We also had to revisit results that had "
"passed the weaker check."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#: website/public/blog/touhou-reconstruction/index.html:511
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"{ph0}The oracle needed reconstructing too.{ph1} Repairing it was part of repairing the"
" game."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:515
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"That matters when the team is mostly one person working with agents. I cannot "
"personally inspect every line they produce, so much of my confidence rests on their "
"checks. A shared oracle's blind spot can affect many investigations before I notice "
"it. I have to understand what the checker actually verifies and test it against cases "
"that ought to fail."
msgstr ""
#. {ph0}: <strong >
#. {ph1}: </strong >
#: website/public/blog/touhou-reconstruction/index.html:523
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"As the work continued, those checks became part of the repository. So did the reasons "
"for source changes and notes that let a later session pick up where an earlier one "
"stopped. {ph0}The repository was becoming the project's working memory.{ph1}"
msgstr ""
#. {ph0}: <strong >
#. {ph1}: </strong >
#: website/public/blog/touhou-reconstruction/index.html:532
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"{ph0}A successful batch gave us both recovered code and a better environment for the "
"next batch.{ph1}"
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:540
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "Two different ideas of reconstruction"
msgstr ""
#. {ph0}: <a
#. href="https://web.archive.org/web/20260909051514/https://github.com/GensokyoClub/th08#important-
#. notice" >
#. {ph1}: </a >
#: website/public/blog/touhou-reconstruction/index.html:541
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"GensokyoClub's {ph0}public README{ph1} makes its disagreement with this kind of work "
"explicit. The notice announces that further development will happen privately until "
"completion. One passage reads:"
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:552
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"The rise of grifters (AI decompilations and ports) in this space taking from our work "
"paints a bad image for future decompilation efforts…"
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:558
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"The notice also describes the psychological toll on the maintainers. Their "
"contribution policy excludes pull requests produced primarily with AI. They have put "
"their free time into difficult work, and that work helped make my continuation "
"possible. I respect the effort behind it. The disagreement I want to discuss is about "
"how reconstruction should proceed and how a contribution should be judged."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:567
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"In the manual workflow I knew, developing an understanding of a function and "
"reconstructing it usually fell to the same person. A project relied heavily on that "
"person's expertise. Trust in the contributor mattered because so much of the reasoning"
" happened while they worked."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:574
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"Existing projects already preserve knowledge in their source and build tools. What "
"changed for me was that an agent could use that knowledge to pursue the next "
"investigation on its own."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:579
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"In my continuation, I decide the objective and the standard for accepting a result. "
"The agent has broad freedom to investigate. Its proposed reconstruction then has to "
"survive the relevant checks. I want another person to be able to examine why we chose "
"an implementation, even if an agent did most of the work."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:586
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"This can be a difficult transition. Years of careful work may become the foundation "
"for a continuation that moves much faster. That raises real questions about credit. It"
" also changes what maintainers need to know before accepting a contribution."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:592
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"The industrial analogy helps me think about this. In a craft, much of the process "
"depends on the skill of the person carrying it out. Machinery changes where that skill"
" is needed. Someone still has to design the process and recognize when its output is "
"wrong. Different communities can choose how much of that change they want to take on."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:600
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"My choice is to continue openly, with the inherited work credited and its history "
"preserved. I want the new work to be reviewable. That gives us a way to ask how far "
"this approach can go and to learn from what goes wrong along the way."
msgstr ""
#. {ph0}: <a
#. href="https://github.com/GensokyoClub/th08/blob/e874b98e210b3be1ed21c5e03d54b883eac5069c/README.md#important-
#. notice" >
#. {ph1}: </a >
#. {ph2}: <a
#. href="https://github.com/GensokyoClub/th08/blob/f345c7dee07b849f2ff93a0029ab5ede126bf12c/CODE_OF_CONDUCT.md"
#. >
#. {ph3}: </a >
#. {ph4}: <a
#. href="https://github.com/N0zoM1z0/th08/blob/d2a00f4acb4a13916e07a00bd13f714961714628/README.md#credits-
#. and-provenance" >
#. {ph5}: </a >
#: website/public/blog/touhou-reconstruction/index.html:606
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"Source: GensokyoClub's {ph0}README notice{ph1}, checked on 10 October 2026, and its "
"{ph2}contribution policy{ph3}. The quotation is a shortened excerpt. TH08's "
"{ph4}credits and provenance{ph5} record the continuation boundary."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:624
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "TH095: experience starts compounding"
msgstr ""
#. {ph0}: <a href="https://github.com/N0zoM1z0/th095">
#. {ph1}: </a>
#: website/public/blog/touhou-reconstruction/index.html:625
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"{ph0}TH095{ph1}, Shoot the Bullet, made the value of that experience much easier to "
"see. Its repository began on 29 August with zero confirmed game functions in the "
"ledger. We still had to learn the game. But we already knew much more about how to "
"begin a reconstruction and how to keep it moving."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:633
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"By 7 September, all 697 identified game functions had source. By 8 September, 696 had "
"been accepted as exact comparisons. The whole program linked on 9 September. The "
"Windows i386 reconstruction was marked playable on 10 September, about twelve days "
"after initialization."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:640
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"I found this more exciting than the first project's speed. A fresh target could "
"benefit from work done on another game. The experience was already present in the "
"tools and in the way the project was organized."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:646
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"For example, TH08 had taught us to pay attention to the assembled program early. If "
"several recovered functions depend on the same state, their isolated comparisons leave"
" an important question open. We need to see them working together. That lesson helped "
"shape how we approached TH095's whole-program build."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:653
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"A lesson that stays in my head is useful while I am there. Once it becomes a check "
"that another session can run, it can keep helping after I have moved on. The next "
"agent can use the result without repeating the investigation that led to it."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:659
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"The floating-literal bug belongs in that memory too. It explains why checking a "
"reference also requires checking the data behind it. Keeping that correction with the "
"code helps later projects avoid inheriting the old check's blind spot."
msgstr ""
#. {ph0}: <strong >
#. {ph1}: </strong >
#: website/public/blog/touhou-reconstruction/index.html:665
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"{ph0}The method becomes part of the starting material for the next game.{ph1} We can "
"spend more of the next project's effort on what is actually new about its target."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:673
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"The same benefit is available to people joining later. They can inspect a decision and"
" rerun its check before continuing the work. They do not have to reconstruct the "
"entire project's history to find out why the source looks the way it does."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:681
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "TH04: the workflow survives a different architecture"
msgstr ""
#. {ph0}: <a href="https://github.com/N0zoM1z0/th04">
#. {ph1}: </a>
#. {ph2}: <a href="https://github.com/nmlgc/ReC98">
#. {ph3}: </a>
#: website/public/blog/touhou-reconstruction/index.html:682
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"{ph0}TH04{ph1}, Lotus Land Story, took this work into the PC-98 DOS era. The target "
"was now a 16-bit environment with four cooperating programs. Understanding its "
"hardware behavior required different evidence from the Windows games. Existing "
"{ph2}ReC98 work{ph3} gave us valuable knowledge and source material here too."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:691
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"The DOS reconstruction is now working. In my manual testing, I played complete Normal "
"routes through their endings and checked saves. The current work is a native 64-bit "
"port. Establishing a working DOS version first gives that port a reference."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:697
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"The architecture changed what we needed to investigate. It also changed the compiler "
"and runtime against which we checked our work. But the agent could still follow a "
"question through to a result and let that result guide the next experiment."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:703
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"Consider the transition from gameplay to an ending. We need to know what state carries"
" across that boundary and which program is responsible for it. That is something we "
"can investigate against the DOS product. Once the evidence and checks are available, "
"an agent can work through the question much as it did on a Windows title."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:711
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"This is why TH04 matters to the argument. A substantial platform change did not force "
"us to start over with a new way of working. The architecture defined the problem; the "
"workflow still gave us a way to solve it."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:717
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"For the 64-bit port, we can now examine the new implementation against behavior "
"already recovered on DOS. The knowledge from reconstruction gives the port something "
"to build on."
msgstr ""
#. {ph0}: <a
#. href="https://github.com/N0zoM1z0/th04/blob/bb9faca54e2eb3c0d6c757c75d59ac29d2cd5e93/docs/RE_HANDOFF.md"
#. >
#. {ph1}: </a >
#. {ph2}: <a href="https://github.com/N0zoM1z0/th04/tree/port/modern-64" >
#. {ph3}: </a >
#: website/public/blog/touhou-reconstruction/index.html:722
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"Project state as of 10 October 2026: {ph0}DOS reconstruction and manual testing{ph1} ·"
" {ph2}64-bit port{ph3}. The port remains in development."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:735
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "From exact code to readable code"
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:736
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "Once a reconstruction works, I want someone else to be able to understand it."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:740
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"To me, assembly and raw offsets can feel like old friends. I realise this is a "
"slightly unusual definition of “readable.” Most people would prefer to follow the "
"game's logic without keeping the executable's memory layout in their head."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#: website/public/blog/touhou-reconstruction/index.html:746
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"That is where {ph0}semantic reconstruction{ph1} comes in. A recovered field may still "
"be known mainly by its offset. We follow how the game uses it until we can explain its"
" role. Then we can give it a meaningful name and a type that fits the evidence. We "
"keep the reasoning with the source so the next person can see where that "
"interpretation came from."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:754
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"This becomes especially important for a port. An absolute address tells me where "
"something lived in the old executable. It gives a 64-bit implementation little help in"
" deciding which object should own that state. To move the behavior safely, we need to "
"recover the relationship behind the old memory access."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:761
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "The order I now use is:"
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#: website/public/blog/touhou-reconstruction/index.html:763
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"{ph0}Recover an exact baseline.{ph1} Compile the reconstructed pieces with the "
"historical compiler. Compare the relevant code and data with the original executable. "
"Record unresolved differences so the next phase has a clear starting point."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#: website/public/blog/touhou-reconstruction/index.html:770
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"{ph0}Build and play it on the original platform.{ph1} Link those pieces into the real "
"program using the original architecture and compiler. Exercise important gameplay "
"paths. This is where we can find problems with shared state or initialization that an "
"isolated function comparison missed."
msgstr ""
#. {ph0}: <strong >
#. {ph1}: </strong >
#: website/public/blog/touhou-reconstruction/index.html:777
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"{ph0}Reconstruct the semantics against both references.{ph1} Take one coherent part of"
" the game at a time and establish what its recovered source means. Improve its "
"representation while preserving the exact comparisons and the playable historical "
"build."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#: website/public/blog/touhou-reconstruction/index.html:786
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"{ph0}Make the modern port.{ph1} Move the established behavior into the new "
"environment, such as a native 64-bit build. The reconstructed original-platform game "
"remains a reference for comparing how the port behaves."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#: website/public/blog/touhou-reconstruction/index.html:793
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"The playable build from the second stage becomes a {ph0}second oracle{ph1} during the "
"third. The first oracle checks whether our changed source still reproduces the "
"relevant original code and data. The second checks that the reconstructed program "
"still builds and behaves correctly along the paths we exercise."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:801
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"They catch different mistakes. A type change can alter the generated instructions. An "
"ownership change can leave two parts of the game using different copies of state. "
"Keeping both checks available gives the agent a concrete failure to investigate before"
" carrying a refactor further."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:808
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"A name needs evidence of its own. An exact comparison cannot tell us whether a field "
"really means “invulnerability time.” We have to establish that from how the game "
"writes and uses it. If the meaning remains uncertain, a neutral name is more helpful "
"to the next reader than a confident guess."
msgstr ""
#. {ph0}: <a href="https://github.com/N0zoM1z0/touhou-reconstruction-
#. factory/blob/717e1b8560783ed17a39fdf159d30aa16bb307a7/docs/semantic-
#. reconstruction.md" >
#. {ph1}: </a >
#: website/public/blog/touhou-reconstruction/index.html:815
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"We learned this order through the projects. TH08 already had playable ports before "
"some of its later historical-platform audits. That made certain defects harder to see."
" The {ph0}Factory's current workflow{ph1} puts the original-platform build first, so "
"semantic work can use it as a reference before porting begins."
msgstr ""
#. {ph0}: <strong >
#. {ph1}: </strong >
#: website/public/blog/touhou-reconstruction/index.html:826
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"{ph0}Exact reconstruction gives us a reference. Semantic reconstruction makes the "
"recovered knowledge usable.{ph1} A port can then build on both."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:835
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "What makes this an industrial shift"
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:836
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"These projects changed where I spent my attention. Once agents could carry much of an "
"investigation forward, improving their working environment became one of the most "
"useful things I could do. A better tool could help with every later function that "
"needed it."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:843
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"Autonomy matters here. The useful next step often becomes clear only after a failed "
"experiment. An agent needs enough freedom to follow that result somewhere unexpected. "
"If it has to wait for me to prescribe each step, much of the work remains tied to my "
"attention."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:850
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"I expect the agent to make wrong hypotheses. What matters is whether we can test them "
"and learn from the result. A failed check should help it understand the mistake well "
"enough to try again. I still have to decide whether the accumulated evidence supports "
"a project milestone."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:857
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"REA gives the agent access to analysis tools. A question about a function's caller can"
" lead straight into inspecting that caller. The reconstruction project supplies the "
"compiler and its own reference checks. The agent can use those to test the source it "
"proposes and see where its explanation holds up."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:864
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"The TH08 bug shows why those checks deserve engineering attention of their own. When "
"the same comparison is used across hundreds of functions, a gap in it can spread much "
"further than a mistake in one implementation. Testing the checker improves the "
"feedback available to all that later work."
msgstr ""
#. {ph0}: <a href="https://collection.sciencemuseumgroup.org.uk/objects/co51439/watts-
#. steam-engine-indicator" >
#. {ph1}: </a >
#: website/public/blog/touhou-reconstruction/index.html:871
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"The industrial analogy has a useful historical example here. Boulton and Watt "
"introduced a {ph0}steam-engine indicator in 1796{ph1} to help adjust engine valves. A "
"recording version traced pressure through the piston stroke. It made the engine's "
"internal behavior available for inspection. Our comparison tools serve a similar "
"purpose: they let us examine what the machinery is doing while we improve it."
msgstr ""
#. {ph0}: <strong >
#. {ph1}: </strong >
#: website/public/blog/touhou-reconstruction/index.html:884
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"{ph0}We are in the early stages of this industrial shift.{ph1} Much of the "
"infrastructure is still immature. Agents can move faster than our checks were designed"
" to support, so the process has to develop alongside them. When we find a defect in a "
"shared tool, we have to repair it and revisit the results it affected. The next "
"project can then inherit a stronger tool."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:894
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"There is also a practical limit to any one conversation. It will end before a large "
"reconstruction is finished. The repository has to make it possible for another session"
" to continue without losing the reason for the last decision."
msgstr ""
#. {ph0}: <a href="https://github.com/N0zoM1z0/touhou-reconstruction-factory" >
#. {ph1}: </a >
#: website/public/blog/touhou-reconstruction/index.html:900
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"The {ph0}Touhou Reconstruction Factory{ph1} grew out of that need. It gives projects a"
" shared way to carry their checks and lessons forward. Work on one game can improve "
"the starting conditions for another."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:910
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"That is what makes the industrial analogy meaningful to me. Experience starts becoming"
" part of tools that others can use. Improving those tools changes how much the next "
"person—or the next agent—can get done."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:918
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "The projects we can now consider"
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:919
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"The pace matters because it changes the decision to begin. A game could be fascinating"
" to reverse engineer and still demand more of my own attention than I could "
"realistically give it. Many projects would stay ideas."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:925
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"Now I can see a way to keep such a project moving through repeated investigations. "
"Getting a working reconstruction makes a port more practical. Recovering readable "
"semantics makes it easier for someone else to explore a mod. The effort put into "
"understanding the game can keep paying off after the first version runs."
msgstr ""
#. {ph0}: <strong >
#. {ph1}: </strong >
#: website/public/blog/touhou-reconstruction/index.html:932
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"I now look at an unfamiliar program and ask: {ph0}what access, feedback and "
"accumulated knowledge would let an agent work on this reliably?{ph1}"
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:939
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"That question makes me consider projects I would previously have left alone. Each one "
"can improve the way we approach the next. I want to keep exploring how far that can "
"take us."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:947
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "Project milestones and sources"
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:948
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"The dates describe recorded project checkpoints, checked against public GitHub history"
" on 10 October 2026. Elapsed time is calendar time between commits. Source presence, "
"exact comparisons, a build and a runtime result each name a different milestone."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#. {ph2}: <a
#. href="https://github.com/N0zoM1z0/th08/commit/001bf3e9c91cc35b79c7a0e36b3565b86f494362"
#. >
#. {ph3}: </a >
#. {ph4}: <a
#. href="https://github.com/N0zoM1z0/th08/blob/15caba73df6735fc44eac4783bc61b8d098ea830/docs/PROGRESS.md"
#. >
#. {ph5}: </a >
#. {ph6}: <a
#. href="https://github.com/N0zoM1z0/th08/commit/da07b21c8cb63230142b0a66228d6aac66555f3f"
#. >
#. {ph7}: </a >
#. {ph8}: <a
#. href="https://github.com/N0zoM1z0/th08/commit/529eb1a3afa05ae36467731eaccb12e3e50e132f"
#. >
#. {ph9}: </a >
#. {ph10}: <a href="https://github.com/N0zoM1z0/th08/releases/tag/v0.2.0-linux-64bit" >
#. {ph11}: </a >
#: website/public/blog/touhou-reconstruction/index.html:956
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"{ph0}TH08:{ph1} {ph2}13 August continuation{ph3}, {ph4}19 August source ledger{ph5}, "
"{ph6}24 August Linux port{ph7}, {ph8}26 August Web edition{ph9}, and {ph10}30 August "
"64-bit Linux release{ph11}."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#. {ph2}: <a
#. href="https://github.com/N0zoM1z0/th095/blob/8c31e6f892d945423b7f7b439747a2bd915f82d8/docs/PROGRESS.md"
#. >
#. {ph3}: </a >
#. {ph4}: <a
#. href="https://github.com/N0zoM1z0/th095/blob/0fa857fb2b2ec6237732e4d6be8d0a28069c9330/docs/PROGRESS.md"
#. >
#. {ph5}: </a >
#. {ph6}: <a
#. href="https://github.com/N0zoM1z0/th095/blob/74baddfccb712d1311a4d6e7487a63cd1100452e/docs/PROGRESS.md"
#. >
#. {ph7}: </a >
#. {ph8}: <a
#. href="https://github.com/N0zoM1z0/th095/commit/33d46a0ee48f37060d973125a1a7632a40f8d998"
#. >
#. {ph9}: </a >
#. {ph10}: <a
#. href="https://github.com/N0zoM1z0/th095/blob/3442dcf29d9e0b5bef384a49bd0c9ad32a711826/docs/WHOLE_BUILD_TODO.md"
#. >
#. {ph11}: </a >
#: website/public/blog/touhou-reconstruction/index.html:979
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"{ph0}TH095:{ph1} {ph2}29 August initial ledger{ph3}, {ph4}7 September source "
"ledger{ph5}, {ph6}8 September comparisons{ph7}, {ph8}9 September linkage{ph9}, and "
"{ph10}10 September playable-build record{ph11}."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#. {ph2}: <a
#. href="https://github.com/N0zoM1z0/th04/blob/bb9faca54e2eb3c0d6c757c75d59ac29d2cd5e93/docs/RE_HANDOFF.md"
#. >
#. {ph3}: </a >
#: website/public/blog/touhou-reconstruction/index.html:1002
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"{ph0}TH04:{ph1} {ph2}10 October handoff{ph3} records the working DOS reconstruction, "
"the maintainer's complete Normal-route testing and the current 64-bit phase."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#. {ph2}: <a href="https://github.com/N0zoM1z0/th08/issues/10" >
#. {ph3}: </a >
#. {ph4}: <a
#. href="https://github.com/N0zoM1z0/th08/commit/7148a76ba224742677895c7160807a68897957d5"
#. >
#. {ph5}: </a >
#. {ph6}: <a
#. href="https://github.com/N0zoM1z0/th08/commit/a393f400786e4cc6cbb1000af0dad3276da12c78"
#. >
#. {ph7}: </a >
#: website/public/blog/touhou-reconstruction/index.html:1011
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"{ph0}TH08 oracle correction:{ph1} {ph2}the reported auto-collection bug{ph3}, {ph4}the"
" source and comparison fix{ph5}, and {ph6}the full floating-literal audit{ph7}."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#. {ph2}: <a
#. href="https://github.com/N0zoM1z0/th08/blob/d2a00f4acb4a13916e07a00bd13f714961714628/docs/SEMANTIC_PLAYBOOK.md"
#. >
#. {ph3}: </a >
#. {ph4}: <a href="https://github.com/N0zoM1z0/touhou-reconstruction-
#. factory/blob/717e1b8560783ed17a39fdf159d30aa16bb307a7/docs/semantic-
#. reconstruction.md" >
#. {ph5}: </a >
#: website/public/blog/touhou-reconstruction/index.html:1025
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"{ph0}Semantic reconstruction:{ph1} {ph2}TH08's readability playbook{ph3} and {ph4}the "
"Factory's phase order and two validation paths{ph5}."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#. {ph2}: <a href="https://collection.sciencemuseumgroup.org.uk/objects/co51439/watts-
#. steam-engine-indicator" >
#. {ph3}: </a >
#: website/public/blog/touhou-reconstruction/index.html:1037
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"{ph0}Industrial history:{ph1} {ph2}the Science Museum Group's steam-engine indicator "
"record{ph3} describes the 1796 introduction and the pressure-recording mechanism."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#. {ph2}: <a href="https://github.com/N0zoM1z0/touhou-reconstruction-
#. factory/blob/038b6bed51d273c8b3680553b6f43e1b97d19bd1/docs/agent-autonomy.md" >
#. {ph3}: </a >
#. {ph4}: <a href="https://github.com/N0zoM1z0/touhou-reconstruction-
#. factory/blob/038b6bed51d273c8b3680553b6f43e1b97d19bd1/docs/knowledge-base.md" >
#. {ph5}: </a >
#: website/public/blog/touhou-reconstruction/index.html:1046
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"{ph0}Method:{ph1} the Factory's {ph2}agent autonomy{ph3} and {ph4}cross-game "
"knowledge{ph5} documents retain the working principles and lessons."
msgstr ""
#. {ph0}: <a class="text-link" href="../">
#. {ph1}: </a>
#. {ph2}: <a class="text-link" href="../../showcase/th04/" >
#. {ph3}: </a >
#: website/public/blog/touhou-reconstruction/index.html:1061
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "{ph0}More articles{ph1} · {ph2}Explore a TH04 investigation{ph3}"
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:6
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "Reverse Engineering’s Industrial Revolution — REA"
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:7
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"N0zoM1z0 reflects on manual reverse engineering, Touhou reconstruction with AI agents,"
" and how knowledge compounds across TH08, TH095 and PC-98 TH04."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:355
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "Experience carried between projects"
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:369
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "On this page"
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:384
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "Touhou reconstruction essay"
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:1086
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "Back to top"
msgstr ""
#: website/public/contributors/index.html:108
msgctxt "page:contributors/index.html"
msgid "Skip to content"
msgstr ""
#. {ph0}: <a href="../">
#. {ph1}: </a>
#: website/public/contributors/index.html:200
#, python-brace-format
msgctxt "page:contributors/index.html"
msgid "{ph0}Home{ph1} / Contributors"
msgstr ""
#: website/public/contributors/index.html:201
msgctxt "page:contributors/index.html"
msgid "Built together."
msgstr ""
#: website/public/contributors/index.html:202
msgctxt "page:contributors/index.html"
msgid "Thank you to everyone who helps make REA better."
msgstr ""
#: website/public/contributors/index.html:203
msgctxt "page:contributors/index.html"
msgid ""
"Code, documentation, tests, translations and ideas — there are many ways to "
"contribute."
msgstr ""
#: website/public/contributors/index.html:208
msgctxt "page:contributors/index.html"
msgid "How to contribute"
msgstr ""
#: website/public/contributors/index.html:213
msgctxt "page:contributors/index.html"
msgid "Join the conversation →"
msgstr ""
#: website/public/contributors/index.html:223
msgctxt "page:contributors/index.html"
msgid "Contributors"
msgstr ""
#: website/public/contributors/index.html:225
msgctxt "page:contributors/index.html"
msgid "Find a contributor"
msgstr ""
#. {ph0}: <a href="https://github.com/morluto/rea/graphs/contributors">
#. {ph1}: </a>
#. {ph2}: <time datetime="2026-10-15" translate="no">2026-10-15</time>
#: website/public/contributors/index.html:1112
#, python-brace-format
msgctxt "page:contributors/index.html"
msgid "From {ph0}GitHub’s contributor list{ph1} · Updated {ph2}."
msgstr ""
#: website/public/contributors/index.html:1117
msgctxt "page:contributors/index.html"
msgid "No matching contributors. Try another username."
msgstr ""
#: website/public/contributors/index.html:6
msgctxt "page:contributors/index.html"
msgid "Contributors · REA"
msgstr ""
#: website/public/contributors/index.html:7
msgctxt "page:contributors/index.html"
msgid "Meet the people who contribute code, documentation, tests and ideas to REA."
msgstr ""
#: website/public/contributors/index.html:226
msgctxt "page:contributors/index.html"
msgid "GitHub username"
msgstr ""
#: website/public/contributors/index.html:1137
msgctxt "page:contributors/index.html"
msgid "Back to top"
msgstr ""
#: website/public/examples/dino-lab/index.html:108
msgctxt "page:examples/dino-lab/index.html"
msgid "Skip to content"
msgstr ""
#. {ph0}: <a href="../../">
#. {ph1}: </a>
#. {ph2}: <span>
#. {ph3}: </span>
#: website/public/examples/dino-lab/index.html:200
#, python-brace-format
msgctxt "page:examples/dino-lab/index.html"
msgid "{ph0}Home{ph1}{ph2}/{ph3}Dinosaur speed lab"
msgstr ""
#: website/public/examples/dino-lab/index.html:203
msgctxt "page:examples/dino-lab/index.html"
msgid "Inspect → rebuild → change"
msgstr ""
#: website/public/examples/dino-lab/index.html:204
msgctxt "page:examples/dino-lab/index.html"
msgid "Rebuild the dinosaur’s speed rule."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#. {ph2}: <mark class="prose-highlight">
#. {ph3}: </mark>
#: website/public/examples/dino-lab/index.html:205
#, python-brace-format
msgctxt "page:examples/dino-lab/index.html"
msgid ""
"To recreate the game’s acceleration, first find the rule that controls its speed. "
"{ph0}REA returned the running script;{ph1} we used its rule to build this mini-game "
"with {ph2}adjustable speed.{ph3}"
msgstr ""
#: website/public/examples/dino-lab/index.html:214
#: website/public/examples/dino-lab/index.html:213
msgctxt "page:examples/dino-lab/index.html"
msgid "On this page"
msgstr ""
#. {ph0}: <a href="#play">
#. {ph1}: </a>
#: website/public/examples/dino-lab/index.html:216
#, python-brace-format
msgctxt "page:examples/dino-lab/index.html"
msgid "{ph0}Play and change the speed{ph1}"
msgstr ""
#. {ph0}: <a href="#rule">
#. {ph1}: </a>
#: website/public/examples/dino-lab/index.html:217
#, python-brace-format
msgctxt "page:examples/dino-lab/index.html"
msgid "{ph0}Read the recovered rule{ph1}"
msgstr ""
#. {ph0}: <a href="#check">
#. {ph1}: </a>
#: website/public/examples/dino-lab/index.html:218
#, python-brace-format
msgctxt "page:examples/dino-lab/index.html"
msgid "{ph0}Check the reconstruction{ph1}"
msgstr ""
#. {ph0}: <a href="#inspect">
#. {ph1}: </a>
#: website/public/examples/dino-lab/index.html:219
#, python-brace-format
msgctxt "page:examples/dino-lab/index.html"
msgid "{ph0}Try the analysis{ph1}"
msgstr ""
#: website/public/examples/dino-lab/index.html:224
msgctxt "page:examples/dino-lab/index.html"
msgid "Play and change the speed"
msgstr ""
#: website/public/examples/dino-lab/index.html:225
msgctxt "page:examples/dino-lab/index.html"
msgid ""
"Press Play, then jump over the cactus. Move the speed slider to try a slower or faster"
" game; it switches to a fixed speed. Select the recovered rule to start at 6 and "
"gradually accelerate again."
msgstr ""
#: website/public/examples/dino-lab/index.html:231
msgctxt "page:examples/dino-lab/index.html"
msgid "Play the reconstruction"
msgstr ""
#: website/public/examples/dino-lab/index.html:263
msgctxt "page:examples/dino-lab/index.html"
msgid "Play"
msgstr ""
#: website/public/examples/dino-lab/index.html:266
msgctxt "page:examples/dino-lab/index.html"
msgid "Jump ↑"
msgstr ""
#: website/public/examples/dino-lab/index.html:267
msgctxt "page:examples/dino-lab/index.html"
msgid "Restart"
msgstr ""
#: website/public/examples/dino-lab/index.html:270
msgctxt "page:examples/dino-lab/index.html"
msgid "Speed"
msgstr ""
#: website/public/examples/dino-lab/index.html:280
msgctxt "page:examples/dino-lab/index.html"
msgid "Use the recovered acceleration rule"
msgstr ""
#: website/public/examples/dino-lab/index.html:284
msgctxt "page:examples/dino-lab/index.html"
msgid "Original rule: start at 6, then increase toward 13."
msgstr ""
#: website/public/examples/dino-lab/index.html:287
msgctxt "page:examples/dino-lab/index.html"
msgid "Move the slider to set your own speed. Space or Jump clears a cactus."
msgstr ""
#: website/public/examples/dino-lab/index.html:292
msgctxt "page:examples/dino-lab/index.html"
msgid ""
"Enable JavaScript to play the reconstruction. The code and explanation above remain "
"readable."
msgstr ""
#: website/public/examples/dino-lab/index.html:300
msgctxt "page:examples/dino-lab/index.html"
msgid "Read the script REA returned"
msgstr ""
#. {ph0}: <a href="https://wayou.github.io/t-rex-runner/" >
#. {ph1}: </a >
#. {ph2}: <code>index.js</code>
#: website/public/examples/dino-lab/index.html:301
#, python-brace-format
msgctxt "page:examples/dino-lab/index.html"
msgid ""
"We inspected {ph0}wayou’s Chromium-derived browser edition{ph1} with REA. It returned "
"the loaded {ph2}, including this branch in the game’s update function:"
msgstr ""
#: website/public/examples/dino-lab/index.html:311
msgctxt "page:examples/dino-lab/index.html"
msgid "REA · selected script source"
msgstr ""
#. {ph0}: <code>SPEED: 6</code>
#. {ph1}: <code>ACCELERATION: 0.001</code>
#. {ph2}: <code>MAX_SPEED: 13</code>
#: website/public/examples/dino-lab/index.html:317
#, python-brace-format
msgctxt "page:examples/dino-lab/index.html"
msgid ""
"The settings are {ph0}, {ph1} and {ph2}. The game runs this branch on an update "
"without a collision."
msgstr ""
#: website/public/examples/dino-lab/index.html:322
msgctxt "page:examples/dino-lab/index.html"
msgid "Use the same rule in the new game"
msgstr ""
#. {ph0}: <span translate="no">dino-speed.js</span>
#: website/public/examples/dino-lab/index.html:325
#, python-brace-format
msgctxt "page:examples/dino-lab/index.html"
msgid "Reconstruction · {ph0}"
msgstr ""
#: website/public/examples/dino-lab/index.html:328
#: website/public/examples/dino-lab/index.html:427
msgctxt "page:examples/dino-lab/index.html"
msgid "Copy"
msgstr ""
#: website/public/examples/dino-lab/index.html:341
msgctxt "page:examples/dino-lab/index.html"
msgid ""
"The mini-game uses this function for automatic acceleration. Moving the slider "
"supplies a fixed speed instead. Drawing, jump physics and rectangle collision checks "
"are new code for this teaching game; its simulation advances at 60 updates per second."
msgstr ""
#. {ph0}: <a href="../../assets/dino-speed.js" download >
#. {ph1}: </a >
#. {ph2}: <a href="../../assets/dino-demo.js">
#. {ph3}: </a>
#: website/public/examples/dino-lab/index.html:347
#, python-brace-format
msgctxt "page:examples/dino-lab/index.html"
msgid "{ph0}Download the speed rule{ph1} · {ph2}Read the game code{ph3}"
msgstr ""
#: website/public/examples/dino-lab/index.html:355
msgctxt "page:examples/dino-lab/index.html"
msgid "Check the reconstruction"
msgstr ""
#: website/public/examples/dino-lab/index.html:356
msgctxt "page:examples/dino-lab/index.html"
msgid ""
"We called the original game’s update function with obstacles and automatic scheduling "
"disabled. Compare those recorded speeds with a replay of the recovered rule."
msgstr ""
#: website/public/examples/dino-lab/index.html:365
msgctxt "page:examples/dino-lab/index.html"
msgid "Updates"
msgstr ""
#: website/public/examples/dino-lab/index.html:366
msgctxt "page:examples/dino-lab/index.html"
msgid "Original game"
msgstr ""
#: website/public/examples/dino-lab/index.html:367
msgctxt "page:examples/dino-lab/index.html"
msgid "Reconstructed rule"
msgstr ""
#: website/public/examples/dino-lab/index.html:394
msgctxt "page:examples/dino-lab/index.html"
msgid "Run the speed check"
msgstr ""
#: website/public/examples/dino-lab/index.html:397
msgctxt "page:examples/dino-lab/index.html"
msgid ""
"Values rounded to three decimals. The branch checks before adding, so the final "
"increment can take speed just above 13."
msgstr ""
#: website/public/examples/dino-lab/index.html:403
msgctxt "page:examples/dino-lab/index.html"
msgid "Try the analysis yourself"
msgstr ""
#. {ph0}: <a href="../../get-started/">
#. {ph1}: </a>
#: website/public/examples/dino-lab/index.html:405
#, python-brace-format
msgctxt "page:examples/dino-lab/index.html"
msgid "{ph0}Set up REA{ph1} with your coding agent."
msgstr ""
#. {ph0}: <a href="../../guides/browser/#prepare" >
#. {ph1}: </a >
#. {ph2}: <code>https://wayou.github.io/t-rex-runner/</code>
#: website/public/examples/dino-lab/index.html:409
#, python-brace-format
msgctxt "page:examples/dino-lab/index.html"
msgid "Follow the {ph0}browser connection steps{ph1}, using {ph2} as the page URL."
msgstr ""
#: website/public/examples/dino-lab/index.html:416
msgctxt "page:examples/dino-lab/index.html"
msgid ""
"Give your agent the page URL and local debugging endpoint, then copy this prompt."
msgstr ""
#. {ph0}: <span class="terminal-dots" aria-hidden="true" >
#. {ph1}: <i>
#. {ph2}: </i>
#. {ph3}: <i>
#. {ph4}: </i>
#. {ph5}: <i>
#. {ph6}: </i>
#. {ph7}: </span >
#: website/public/examples/dino-lab/index.html:423
#, python-brace-format
msgctxt "page:examples/dino-lab/index.html"
msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent"
msgstr ""
#. {ph0}: <span class="prompt-symbol" aria-hidden="true">
#. {ph1}: </span >
#. {ph2}: <span id="lab-analysis-prompt" >
#. {ph3}: </span >
#. {ph4}: <span class="terminal-cursor" aria-hidden="true">
#. {ph5}: </span>
#: website/public/examples/dino-lab/index.html:436
#, python-brace-format
msgctxt "page:examples/dino-lab/index.html"
msgid ""
"{ph0}›{ph1}{ph2}Use REA to inspect this dinosaur game. Why does it get faster? Show "
"the speed rule, then build a small version with an adjustable speed.{ph3}{ph4}{ph5}"
msgstr ""
#. {ph0}: <strong >
#. {ph1}: </strong >
#: website/public/examples/dino-lab/index.html:445
#, python-brace-format
msgctxt "page:examples/dino-lab/index.html"
msgid ""
"Ask a follow-up: {ph0}“Where is jump height calculated? Add a jump-height control to "
"the new version.”{ph1}"
msgstr ""
#. {ph0}: <a href="https://github.com/wayou/t-rex-
#. runner/blob/5455bfa408ec6b707c7300ff194b7390733a766d/index.js#L565-L571" >
#. {ph1}: </a >
#. {ph2}: <a href="../../assets/licenses/dinosaur.txt" >
#. {ph3}: </a >
#: website/public/examples/dino-lab/index.html:452
#, python-brace-format
msgctxt "page:examples/dino-lab/index.html"
msgid ""
"Source: {ph0}inspected speed code{ph1}, Chromium Authors. {ph2}Copyright and BSD "
"license{ph3}. REA 4.1.0 inspected the running HTTP edition in Chrome 150."
msgstr ""
#: website/public/examples/dino-lab/index.html:6
msgctxt "page:examples/dino-lab/index.html"
msgid "Chrome Dinosaur Game: Rebuild Its Speed Rule — REA"
msgstr ""
#: website/public/examples/dino-lab/index.html:7
msgctxt "page:examples/dino-lab/index.html"
msgid ""
"Read the dinosaur game’s speed rule with REA, rebuild it, then change the speed and "
"play."
msgstr ""
#: website/public/examples/dino-lab/index.html:222
msgctxt "page:examples/dino-lab/index.html"
msgid "Dinosaur speed reconstruction"
msgstr ""
#: website/public/examples/dino-lab/index.html:253
msgctxt "page:examples/dino-lab/index.html"
msgid ""
"Dinosaur mini-game. Use the Jump button or press Space while the game is focused."
msgstr ""
#: website/public/examples/dino-lab/index.html:328
msgctxt "page:examples/dino-lab/index.html"
msgid "Copy reconstructed speed rule"
msgstr ""
#: website/public/examples/dino-lab/index.html:427
msgctxt "page:examples/dino-lab/index.html"
msgid "Copy dinosaur analysis prompt"
msgstr ""
#: website/public/examples/dino-lab/index.html:481
msgctxt "page:examples/dino-lab/index.html"
msgid "Back to top"
msgstr ""
#: website/public/faq/index.html:107
msgctxt "page:faq/index.html"
msgid "Skip to content"
msgstr ""
#. {ph0}: <a href="../">
#. {ph1}: </a>
#: website/public/faq/index.html:199
#, python-brace-format
msgctxt "page:faq/index.html"
msgid "{ph0}Home{ph1} / FAQ"
msgstr ""
#: website/public/faq/index.html:200
msgctxt "page:faq/index.html"
msgid "REA FAQ."
msgstr ""
#: website/public/faq/index.html:201
msgctxt "page:faq/index.html"
msgid "Setup, updates, analysis and troubleshooting."
msgstr ""
#: website/public/faq/index.html:205
msgctxt "page:faq/index.html"
msgid "Topics"
msgstr ""
#. {ph0}: <a href="#setup">
#. {ph1}: </a>
#: website/public/faq/index.html:207
#, python-brace-format
msgctxt "page:faq/index.html"
msgid "{ph0}Setup and updates{ph1}"
msgstr ""
#. {ph0}: <a href="#analysis">
#. {ph1}: </a>
#: website/public/faq/index.html:208
#, python-brace-format
msgctxt "page:faq/index.html"
msgid "{ph0}Analysis{ph1}"
msgstr ""
#. {ph0}: <a href="#troubleshooting">
#. {ph1}: </a>
#: website/public/faq/index.html:209
#, python-brace-format
msgctxt "page:faq/index.html"
msgid "{ph0}Troubleshooting{ph1}"
msgstr ""
#. {ph0}: <a href="#sharing">
#. {ph1}: </a>
#: website/public/faq/index.html:210
#, python-brace-format
msgctxt "page:faq/index.html"
msgid "{ph0}Data and sharing{ph1}"
msgstr ""
#: website/public/faq/index.html:219
msgctxt "page:faq/index.html"
msgid "Setup and updates"
msgstr ""
#: website/public/faq/index.html:222
msgctxt "page:faq/index.html"
msgid "How do I install REA?"
msgstr ""
#. {ph0}: <span translate="no">Node.js</span>
#: website/public/faq/index.html:223
#, python-brace-format
msgctxt "page:faq/index.html"
msgid ""
"With {ph0} and npm available, run setup, choose your coding agent and review the "
"proposed changes."
msgstr ""
#: website/public/faq/index.html:230
msgctxt "page:faq/index.html"
msgid "Terminal · agent setup"
msgstr ""
#: website/public/faq/index.html:231 website/public/faq/index.html:272
#: website/public/faq/index.html:290 website/public/faq/index.html:374
#: website/public/faq/index.html:421 website/public/faq/index.html:461
#: website/public/faq/index.html:481
msgctxt "page:faq/index.html"
msgid "Copy"
msgstr ""
#. {ph0}: <a href="../get-started/">
#. {ph1}: </a>
#: website/public/faq/index.html:242
#, python-brace-format
msgctxt "page:faq/index.html"
msgid ""
"Setup registers REA's MCP connection and installs the matching investigation skill. "
"Restart your agent when it finishes, then give it a target path and a question. "
"{ph0}Follow the setup guide{ph1} for prerequisites and your first analysis."
msgstr ""
#: website/public/faq/index.html:251
msgctxt "page:faq/index.html"
msgid "Which coding agents can use REA?"
msgstr ""
#: website/public/faq/index.html:252
msgctxt "page:faq/index.html"
msgid ""
"Any agent that supports local MCP servers. Setup includes Claude Code, Claude Desktop,"
" Codex, Cursor, Gemini CLI, Windsurf, Devin, OpenCode, Antigravity, GitHub Copilot "
"CLI, Command Code, Grok Build, OMP, and VS Code. Grok Bot's connector is added from "
"its chat."
msgstr ""
#. {ph0}: <a href="../get-started/#agent">
#. {ph1}: </a>
#: website/public/faq/index.html:259
#, python-brace-format
msgctxt "page:faq/index.html"
msgid "{ph0}Connect your coding agent{ph1}."
msgstr ""
#: website/public/faq/index.html:264
msgctxt "page:faq/index.html"
msgid "How do I update REA?"
msgstr ""
#: website/public/faq/index.html:265
msgctxt "page:faq/index.html"
msgid "REA releases frequently, including bug fixes. If you installed the CLI with npm:"
msgstr ""
#: website/public/faq/index.html:271
msgctxt "page:faq/index.html"
msgid "Terminal · installed CLI"
msgstr ""
#. {ph0}: <code>npx</code>
#: website/public/faq/index.html:283
#, python-brace-format
msgctxt "page:faq/index.html"
msgid ""
"Follow the setup refresh command printed by the update. If you set up your agent "
"through {ph0}, run:"
msgstr ""
#: website/public/faq/index.html:289
msgctxt "page:faq/index.html"
msgid "Terminal · refresh agent setup"
msgstr ""
#. {ph0}: <code>npx -y rea-agents@latest</code>
#: website/public/faq/index.html:301
#, python-brace-format
msgctxt "page:faq/index.html"
msgid ""
"Review the changes and restart your agent. Its REA connection pins a package version, "
"so refreshing setup makes it use the new release. For one-off CLI commands, use {ph0} "
"followed by the command."
msgstr ""
#: website/public/faq/index.html:309
msgctxt "page:faq/index.html"
msgid "Is installing the skill from skills.sh enough?"
msgstr ""
#. {ph0}: <a href="#install">
#. {ph1}: </a>
#: website/public/faq/index.html:312
#, python-brace-format
msgctxt "page:faq/index.html"
msgid ""
"The skill gives your agent investigation instructions. Run {ph0}REA setup{ph1} to "
"connect the MCP server and install the matching skill, then restart your agent so it "
"can call the tools."
msgstr ""
#: website/public/faq/index.html:323
msgctxt "page:faq/index.html"
msgid "Analysis"
msgstr ""
#: website/public/faq/index.html:326
msgctxt "page:faq/index.html"
msgid "What can I analyze with REA?"
msgstr ""
#: website/public/faq/index.html:327
msgctxt "page:faq/index.html"
msgid "Start with the kind of software you have:"
msgstr ""
#. {ph0}: <a href="../guides/native/" >
#. {ph1}: </a >
#: website/public/faq/index.html:329
#, python-brace-format
msgctxt "page:faq/index.html"
msgid ""
"{ph0}Native executables and libraries{ph1}: functions, assembly, pseudocode and "
"references."
msgstr ""
#. {ph0}: <a href="../guides/javascript/" >
#. {ph1}: </a >
#: website/public/faq/index.html:334
#, python-brace-format
msgctxt "page:faq/index.html"
msgid ""
"{ph0}JavaScript and Electron apps{ph1}: modules, imports, IPC and source locations."
msgstr ""
#. {ph0}: <a href="../guides/browser/">
#. {ph1}: </a>
#: website/public/faq/index.html:339
#, python-brace-format
msgctxt "page:faq/index.html"
msgid "{ph0}Browser pages{ph1}: scripts, requests and runtime observations."
msgstr ""
#. {ph0}: <a href="../showcase/">
#. {ph1}: </a>
#: website/public/faq/index.html:344
#, python-brace-format
msgctxt "page:faq/index.html"
msgid ""
"REA also has workflows for managed assemblies, Android APKs, firmware and packaged "
"resources. {ph0}See the case studies{ph1} for worked investigations."
msgstr ""
#: website/public/faq/index.html:352
msgctxt "page:faq/index.html"
msgid "Do I need Hopper, Ghidra or IDA?"
msgstr ""
#: website/public/faq/index.html:353
msgctxt "page:faq/index.html"
msgid ""
"Deep native analysis uses one of them. Static JavaScript and .NET inspection work with"
" the supplied files and do not need a native analysis engine."
msgstr ""
#. {ph0}: <a href="../get-started/#native">
#. {ph1}: </a>
#: website/public/faq/index.html:358
#, python-brace-format
msgctxt "page:faq/index.html"
msgid ""
"Connect your existing Ghidra or IDA installation, or let setup detect Hopper and "
"propose an installation. Your host and target determine which provider can be used. "
"{ph0}Set up native analysis{ph1}."
msgstr ""
#: website/public/faq/index.html:366
msgctxt "page:faq/index.html"
msgid "Can I use REA without a coding agent?"
msgstr ""
#: website/public/faq/index.html:367
msgctxt "page:faq/index.html"
msgid ""
"Yes. The CLI uses the same analysis workflows. For a local JavaScript or Electron app:"
msgstr ""
#: website/public/faq/index.html:373
msgctxt "page:faq/index.html"
msgid "Terminal · static application analysis"
msgstr ""
#. {ph0}: <a href="../get-started/#terminal">
#. {ph1}: </a>
#: website/public/faq/index.html:386
#, python-brace-format
msgctxt "page:faq/index.html"
msgid ""
"Replace the path with an extracted application folder or ASAR file. {ph0}Use the "
"CLI{ph1} for installation options."
msgstr ""
#: website/public/faq/index.html:393
msgctxt "page:faq/index.html"
msgid "What code does REA return?"
msgstr ""
#: website/public/faq/index.html:394
msgctxt "page:faq/index.html"
msgid ""
"Native analysis returns assembly and pseudocode, with calls, references and relevant "
"constants. JavaScript analysis returns modules, their relationships and source "
"locations."
msgstr ""
#. {ph0}: <a href="../showcase/dx-ball/#sound-pan" >
#. {ph1}: </a >
#. {ph2}: <a href="../showcase/ctf/">
#. {ph3}: </a>
#: website/public/faq/index.html:399
#, python-brace-format
msgctxt "page:faq/index.html"
msgid ""
"Your agent uses these findings to explain the behavior or write and test an "
"implementation. The {ph0}DX-Ball calculation{ph1} and {ph2}CTF flag checker{ph3} show "
"how that process works."
msgstr ""
#: website/public/faq/index.html:410
msgctxt "page:faq/index.html"
msgid "What should I ask my agent?"
msgstr ""
#: website/public/faq/index.html:411
msgctxt "page:faq/index.html"
msgid ""
"Give it a local target and one behavior to investigate. For a JavaScript or Electron "
"app:"
msgstr ""
#. {ph0}: <span class="terminal-dots" aria-hidden="true" >
#. {ph1}: <i>
#. {ph2}: </i>
#. {ph3}: <i>
#. {ph4}: </i>
#. {ph5}: <i>
#. {ph6}: </i>
#. {ph7}: </span >
#: website/public/faq/index.html:417
#, python-brace-format
msgctxt "page:faq/index.html"
msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent"
msgstr ""
#. {ph0}: <span class="prompt-symbol" aria-hidden="true">
#. {ph1}: </span >
#. {ph2}: <span id="faq-analysis-prompt" >
#. {ph3}: <span translate="no">/absolute/path/to/app</span>
#. {ph4}: </span >
#. {ph5}: <span class="terminal-cursor" aria-hidden="true">
#. {ph6}: </span>
#: website/public/faq/index.html:430
#, python-brace-format
msgctxt "page:faq/index.html"
msgid ""
"{ph0}›{ph1}{ph2}Use REA to analyze {ph3} and explain how it exports data. Show the "
"relevant code and source locations.{ph4}{ph5}{ph6}"
msgstr ""
#. {ph0}: <a href="../guides/">
#. {ph1}: </a>
#: website/public/faq/index.html:440
#, python-brace-format
msgctxt "page:faq/index.html"
msgid ""
"Replace the path with your target. The {ph0}guides{ph1} provide prompts for native, "
"Electron and browser examples."
msgstr ""
#: website/public/faq/index.html:450
msgctxt "page:faq/index.html"
msgid "Troubleshooting"
msgstr ""
#: website/public/faq/index.html:453
msgctxt "page:faq/index.html"
msgid "Why can't my agent see the REA tools?"
msgstr ""
#. {ph0}: <code>doctor</code>
#: website/public/faq/index.html:454
#, python-brace-format
msgctxt "page:faq/index.html"
msgid ""
"Restart or reconnect your agent after setup. Check its REA registration with {ph0}; "
"for Codex:"
msgstr ""
#: website/public/faq/index.html:460
msgctxt "page:faq/index.html"
msgid "Terminal · check one client"
msgstr ""
#. {ph0}: <code>codex</code>
#. {ph1}: <code>claude_code</code>
#. {ph2}: <code>cursor</code>
#: website/public/faq/index.html:472
#, python-brace-format
msgctxt "page:faq/index.html"
msgid ""
"Replace {ph0} with your client ID, such as {ph1} or {ph2}. If the report shows a "
"missing or stale registration, run setup for that client:"
msgstr ""
#: website/public/faq/index.html:480
msgctxt "page:faq/index.html"
msgid "Terminal · repair one client's setup"
msgstr ""
#. {ph0}: <a href="../get-started/#help">
#. {ph1}: </a>
#: website/public/faq/index.html:492
#, python-brace-format
msgctxt "page:faq/index.html"
msgid ""
"Review its plan and restart the client. If registration is healthy but tools remain "
"absent, check the client's MCP connection error. {ph0}More setup diagnostics{ph1}."
msgstr ""
#: website/public/faq/index.html:500
msgctxt "page:faq/index.html"
msgid "Do I need to start Hopper first?"
msgstr ""
#. {ph0}: <a href="../get-started/#native">
#. {ph1}: </a >
#: website/public/faq/index.html:501
#, python-brace-format
msgctxt "page:faq/index.html"
msgid ""
"REA starts Hopper when an operation needs it. On macOS, complete the first-run choice "
"of demo mode or license activation before unattended analysis. {ph0}See native "
"provider setup{ph1}."
msgstr ""
#: website/public/faq/index.html:510
msgctxt "page:faq/index.html"
msgid "What should I do if I hit a bug?"
msgstr ""
#. {ph0}: <a href="#update">
#. {ph1}: </a>
#: website/public/faq/index.html:511
#, python-brace-format
msgctxt "page:faq/index.html"
msgid ""
"{ph0}Update REA{ph1}, restart your agent and retry the same task. A recent release may"
" already fix the problem."
msgstr ""
#. {ph0}: <a href="https://github.com/morluto/rea/issues/new/choose" >
#. {ph1}: </a >
#: website/public/faq/index.html:515
#, python-brace-format
msgctxt "page:faq/index.html"
msgid ""
"If it persists, {ph0}open an issue{ph1} with your REA version, operating system, "
"target type, steps to reproduce and error output. Include the provider name when the "
"problem involves native analysis."
msgstr ""
#: website/public/faq/index.html:529
msgctxt "page:faq/index.html"
msgid "Data and sharing"
msgstr ""
#: website/public/faq/index.html:532
msgctxt "page:faq/index.html"
msgid "Does REA upload my app?"
msgstr ""
#: website/public/faq/index.html:533
msgctxt "page:faq/index.html"
msgid ""
"REA analyzes targets on your machine. Your agent receives the results, and its model "
"provider's data policy applies to those results."
msgstr ""
#: website/public/faq/index.html:540
msgctxt "page:faq/index.html"
msgid "How can I share an example or contribute?"
msgstr ""
#. {ph0}: <a href="https://github.com/morluto/rea/issues/new/choose" >
#. {ph1}: </a >
#. {ph2}: <a href="https://github.com/morluto/rea/pulls">
#. {ph3}: </a >
#: website/public/faq/index.html:541
#, python-brace-format
msgctxt "page:faq/index.html"
msgid ""
"Have a useful REA example? We'd love to see it. Share the target, your question, the "
"findings and how you checked them in an {ph0}issue{ph1} or {ph2}pull request{ph3}. "
"Short code excerpts and figures help others follow the investigation."
msgstr ""
#. {ph0}: <a href="https://discord.gg/GkcryMnJDM">
#. {ph1}: </a>
#: website/public/faq/index.html:553
#, python-brace-format
msgctxt "page:faq/index.html"
msgid ""
"Bug reports, feature requests, documentation and code improvements are welcome too. "
"You can also discuss an example in the {ph0}community{ph1}."
msgstr ""
#: website/public/faq/index.html:6
msgctxt "page:faq/index.html"
msgid "REA FAQ: Setup, Updates and Troubleshooting"
msgstr ""
#: website/public/faq/index.html:7
msgctxt "page:faq/index.html"
msgid ""
"Answers to common REA questions: installation, updates, analysis tools, coding agents,"
" troubleshooting and sharing examples."
msgstr ""
#: website/public/faq/index.html:204
msgctxt "page:faq/index.html"
msgid "On this page"
msgstr ""
#: website/public/faq/index.html:213
msgctxt "page:faq/index.html"
msgid "Frequently asked questions about REA"
msgstr ""
#: website/public/faq/index.html:231
msgctxt "page:faq/index.html"
msgid "Copy REA setup command"
msgstr ""
#: website/public/faq/index.html:272
msgctxt "page:faq/index.html"
msgid "Copy REA update command"
msgstr ""
#: website/public/faq/index.html:290
msgctxt "page:faq/index.html"
msgid "Copy agent setup refresh command"
msgstr ""
#: website/public/faq/index.html:374
msgctxt "page:faq/index.html"
msgid "Copy REA CLI analysis command"
msgstr ""
#: website/public/faq/index.html:421
msgctxt "page:faq/index.html"
msgid "Copy example analysis prompt"
msgstr ""
#: website/public/faq/index.html:461
msgctxt "page:faq/index.html"
msgid "Copy client diagnosis command"
msgstr ""
#: website/public/faq/index.html:481
msgctxt "page:faq/index.html"
msgid "Copy scoped setup command"
msgstr ""
#: website/public/faq/index.html:579
msgctxt "page:faq/index.html"
msgid "Back to top"
msgstr ""
#: website/public/first-investigation/index.html:107
msgctxt "page:first-investigation/index.html"
msgid "Skip to content"
msgstr ""
#. {ph0}: <a href="../">
#. {ph1}: </a>
#: website/public/first-investigation/index.html:199
#, python-brace-format
msgctxt "page:first-investigation/index.html"
msgid "{ph0}Home{ph1} / Your first investigation"
msgstr ""
#. {ph0}: <br />
#: website/public/first-investigation/index.html:202
#, python-brace-format
msgctxt "page:first-investigation/index.html"
msgid "Find out where{ph0}exported notes go."
msgstr ""
#: website/public/first-investigation/index.html:203
msgctxt "page:first-investigation/index.html"
msgid ""
"Use REA to inspect a small app, follow its Export notes button and check one detail "
"yourself."
msgstr ""
#. {ph0}: <span translate="no">Node.js</span>
#: website/public/first-investigation/index.html:207
#, python-brace-format
msgctxt "page:first-investigation/index.html"
msgid "A supplied example · {ph0} and npm · Your coding agent"
msgstr ""
#: website/public/first-investigation/index.html:214
msgctxt "page:first-investigation/index.html"
msgid "In this exercise"
msgstr ""
#. {ph0}: <a href="#setup">
#. {ph1}: </a>
#: website/public/first-investigation/index.html:216
#, python-brace-format
msgctxt "page:first-investigation/index.html"
msgid "{ph0}1. Set up{ph1}"
msgstr ""
#. {ph0}: <a href="#ask">
#. {ph1}: </a>
#: website/public/first-investigation/index.html:217
#, python-brace-format
msgctxt "page:first-investigation/index.html"
msgid "{ph0}2. Ask about export{ph1}"
msgstr ""
#. {ph0}: <a href="#answer">
#. {ph1}: </a>
#: website/public/first-investigation/index.html:218
#, python-brace-format
msgctxt "page:first-investigation/index.html"
msgid "{ph0}3. Follow the answer{ph1}"
msgstr ""
#. {ph0}: <a href="#check">
#. {ph1}: </a>
#: website/public/first-investigation/index.html:219
#, python-brace-format
msgctxt "page:first-investigation/index.html"
msgid "{ph0}4. Check a prediction{ph1}"
msgstr ""
#. {ph0}: <a href="#next">
#. {ph1}: </a>
#: website/public/first-investigation/index.html:220
#, python-brace-format
msgctxt "page:first-investigation/index.html"
msgid "{ph0}5. Ask another question{ph1}"
msgstr ""
#: website/public/first-investigation/index.html:225
msgctxt "page:first-investigation/index.html"
msgid "1. Connect your agent to REA"
msgstr ""
#. {ph0}: <span translate="no">Node.js</span>
#. {ph1}: <a href="../get-started/">
#. {ph2}: </a >
#: website/public/first-investigation/index.html:226
#, python-brace-format
msgctxt "page:first-investigation/index.html"
msgid ""
"Use a coding agent such as Claude Code, Codex or Cursor. You’ll need {ph0} and npm; "
"the {ph1}setup guide lists supported versions{ph2}."
msgstr ""
#. {ph0}: <span class="terminal-dots" aria-hidden="true" >
#. {ph1}: <i>
#. {ph2}: </i>
#. {ph3}: <i>
#. {ph4}: </i>
#. {ph5}: <i>
#. {ph6}: </i>
#. {ph7}: </span >
#: website/public/first-investigation/index.html:234
#: website/public/first-investigation/index.html:284
#: website/public/first-investigation/index.html:406
#, python-brace-format
msgctxt "page:first-investigation/index.html"
msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent"
msgstr ""
#: website/public/first-investigation/index.html:239
#: website/public/first-investigation/index.html:261
#: website/public/first-investigation/index.html:289
#: website/public/first-investigation/index.html:411
#: website/public/first-investigation/index.html:452
#: website/public/first-investigation/index.html:469
msgctxt "page:first-investigation/index.html"
msgid "Copy"
msgstr ""
#. {ph0}: <span class="prompt-symbol" aria-hidden="true">
#. {ph1}: </span >
#. {ph2}: <span id="first-install-prompt" >
#. {ph3}: <span translate="no">npx rea-agents@latest setup</span>
#. {ph4}: </span >
#. {ph5}: <span class="terminal-cursor" aria-hidden="true">
#. {ph6}: </span>
#: website/public/first-investigation/index.html:248
#, python-brace-format
msgctxt "page:first-investigation/index.html"
msgid ""
"{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using {ph3}. Show me "
"the setup plan for approval, then verify the installation.{ph4}{ph5}{ph6}"
msgstr ""
#: website/public/first-investigation/index.html:258
msgctxt "page:first-investigation/index.html"
msgid "Or run this command in your terminal:"
msgstr ""
#: website/public/first-investigation/index.html:270
msgctxt "page:first-investigation/index.html"
msgid ""
"Review the plan, approve the setup, then restart your agent. Already connected? "
"Continue below."
msgstr ""
#: website/public/first-investigation/index.html:276
msgctxt "page:first-investigation/index.html"
msgid "2. Ask where the CSV is written"
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#: website/public/first-investigation/index.html:277
#, python-brace-format
msgctxt "page:first-investigation/index.html"
msgid ""
"The example is a six-file Electron app with an {ph0}Export notes{ph1} button. Your "
"agent can inspect its code without installing or launching Electron."
msgstr ""
#. {ph0}: <span class="prompt-symbol" aria-hidden="true">
#. {ph1}: </span >
#. {ph2}: <span id="first-analysis-prompt" >
#. {ph3}: <span translate="no" >https://rea.tools/examples/notes-example.zip</span >
#. {ph4}: <span translate="no">notes.csv</span>
#. {ph5}: </span >
#. {ph6}: <span class="terminal-cursor" aria-hidden="true">
#. {ph7}: </span>
#: website/public/first-investigation/index.html:298
#, python-brace-format
msgctxt "page:first-investigation/index.html"
msgid ""
"{ph0}›{ph1}{ph2}Download {ph3} into a new example folder and unpack it. Use REA to "
"find what happens when I click Export notes. Show where {ph4} is written, which fields"
" it contains, and the relevant files and lines.{ph5}{ph6}{ph7}"
msgstr ""
#: website/public/first-investigation/index.html:312
msgctxt "page:first-investigation/index.html"
msgid ""
"Your agent downloads the files and gives the unpacked folder to REA for inspection."
msgstr ""
#. {ph0}: <a class="button" href="../examples/notes-example.zip" download="notes-
#. example.zip" >
#. {ph1}: </a >
#: website/public/first-investigation/index.html:316
#, python-brace-format
msgctxt "page:first-investigation/index.html"
msgid "{ph0}Download example ZIP{ph1}"
msgstr ""
#. {ph0}: <code>notes-example</code>
#: website/public/first-investigation/index.html:324
#, python-brace-format
msgctxt "page:first-investigation/index.html"
msgid ""
"If your agent can’t download files, unzip this archive yourself. Give it the path to "
"the {ph0} folder and the same export question."
msgstr ""
#: website/public/first-investigation/index.html:331
msgctxt "page:first-investigation/index.html"
msgid "3. Follow the answer back to the code"
msgstr ""
#: website/public/first-investigation/index.html:332
msgctxt "page:first-investigation/index.html"
msgid "Look for a short explanation with file and line references:"
msgstr ""
#. {ph0}: <code>notes:export</code>
#. {ph1}: <code>notes.csv</code>
#. {ph2}: <code>id</code>
#. {ph3}: <code>title</code>
#: website/public/first-investigation/index.html:334
#, python-brace-format
msgctxt "page:first-investigation/index.html"
msgid ""
"The button sends a {ph0} message. The main process formats the notes as CSV and writes"
" {ph1} in the user’s Downloads folder. The columns are {ph2} and {ph3}."
msgstr ""
#: website/public/first-investigation/index.html:342
msgctxt "page:first-investigation/index.html"
msgid "From the button to the file writer"
msgstr ""
#. {ph0}: <span class="flow-label" >
#. {ph1}: <span translate="no">renderer.js</span>
#. {ph2}: </span >
#. {ph3}: <span class="flow-node">
#. {ph4}: </span >
#. {ph5}: <span class="flow-note" >
#. {ph6}: <code>notes.exportCsv()</code>
#. {ph7}: </span >
#: website/public/first-investigation/index.html:344
#, python-brace-format
msgctxt "page:first-investigation/index.html"
msgid "{ph0}Page · {ph1}{ph2}{ph3}Export notes{ph4}{ph5}Calls {ph6}.{ph7}"
msgstr ""
#. {ph0}: <span class="flow-label" >
#. {ph1}: <span translate="no">preload.js</span>
#. {ph2}: </span >
#. {ph3}: <span class="flow-node">
#. {ph4}: <code>notes:export</code>
#. {ph5}: </span >
#. {ph6}: <span class="flow-note" >
#. {ph7}: </span >
#: website/public/first-investigation/index.html:352
#, python-brace-format
msgctxt "page:first-investigation/index.html"
msgid ""
"{ph0}Bridge · {ph1}{ph2}{ph3}{ph4}{ph5}{ph6}Sends a named message to the main "
"process.{ph7}"
msgstr ""
#. {ph0}: <span class="flow-label" >
#. {ph1}: <span translate="no">main.js</span>
#. {ph2}: </span >
#. {ph3}: <span class="flow-node" >
#. {ph4}: <span translate="no">notes.csv</span>
#. {ph5}: </span >
#. {ph6}: <span class="flow-note" >
#. {ph7}: <code>csv.js</code>
#. {ph8}: </span >
#: website/public/first-investigation/index.html:360
#, python-brace-format
msgctxt "page:first-investigation/index.html"
msgid ""
"{ph0}Handler · {ph1}{ph2}{ph3}Write {ph4}{ph5}{ph6}Calls the formatter in {ph7} and "
"writes the file.{ph8}"
msgstr ""
#: website/public/first-investigation/index.html:371
msgctxt "page:first-investigation/index.html"
msgid ""
"REA’s static analysis pairs the message with its handler. The destination is read from"
" code."
msgstr ""
#. {ph0}: <span translate="no">main.js</span>
#: website/public/first-investigation/index.html:378
#, python-brace-format
msgctxt "page:first-investigation/index.html"
msgid "{ph0} · lines 8–12"
msgstr ""
#: website/public/first-investigation/index.html:379
msgctxt "page:first-investigation/index.html"
msgid "Source"
msgstr ""
#: website/public/first-investigation/index.html:387
msgctxt "page:first-investigation/index.html"
msgid ""
"The file path, formatter and write call are together in this handler. Ask your agent "
"to show these lines if its answer leaves them out."
msgstr ""
#. {ph0}: <a href="../guides/javascript/#follow" >
#. {ph1}: </a >
#: website/public/first-investigation/index.html:392
#, python-brace-format
msgctxt "page:first-investigation/index.html"
msgid "{ph0}See the full code trace and recorded REA result{ph1}."
msgstr ""
#: website/public/first-investigation/index.html:399
msgctxt "page:first-investigation/index.html"
msgid "4. Check a prediction"
msgstr ""
#: website/public/first-investigation/index.html:400
msgctxt "page:first-investigation/index.html"
msgid ""
"A comma separates CSV columns. What happens when a note title itself contains a comma "
"or quotation marks?"
msgstr ""
#. {ph0}: <span class="prompt-symbol" aria-hidden="true">
#. {ph1}: </span >
#. {ph2}: <span id="first-check-prompt" >
#. {ph3}: <span translate="no">Hello, "REA"</span>
#. {ph4}: <span translate="no">toCsv</span>
#. {ph5}: <span translate="no">Node.js</span>
#. {ph6}: </span >
#. {ph7}: <span class="terminal-cursor" aria-hidden="true">
#. {ph8}: </span>
#: website/public/first-investigation/index.html:420
#, python-brace-format
msgctxt "page:first-investigation/index.html"
msgid ""
"{ph0}›{ph1}{ph2}Predict the CSV for a note with id 1 and title {ph3}. Then run the "
"example’s {ph4} formatter with {ph5} to check it. Show the prediction and actual "
"output.{ph6}{ph7}{ph8}"
msgstr ""
#: website/public/first-investigation/index.html:433
msgctxt "page:first-investigation/index.html"
msgid "Expected formatter output"
msgstr ""
#. {ph0}: <span translate="no">Node.js</span>
#: website/public/first-investigation/index.html:438
#, python-brace-format
msgctxt "page:first-investigation/index.html"
msgid ""
"The title stays in one quoted field; each quotation mark is doubled. This checks the "
"formatter directly with {ph0}."
msgstr ""
#: website/public/first-investigation/index.html:444
msgctxt "page:first-investigation/index.html"
msgid "Run the check yourself"
msgstr ""
#. {ph0}: <code>notes-example</code>
#: website/public/first-investigation/index.html:445
#, python-brace-format
msgctxt "page:first-investigation/index.html"
msgid "Open a terminal in the unpacked {ph0} folder:"
msgstr ""
#: website/public/first-investigation/index.html:486
msgctxt "page:first-investigation/index.html"
msgid "5. Ask another question"
msgstr ""
#: website/public/first-investigation/index.html:487
msgctxt "page:first-investigation/index.html"
msgid "Try a follow-up in the same conversation:"
msgstr ""
#: website/public/first-investigation/index.html:489
msgctxt "page:first-investigation/index.html"
msgid "What happens if the file can’t be written? Follow the error back to the page."
msgstr ""
#: website/public/first-investigation/index.html:494
msgctxt "page:first-investigation/index.html"
msgid ""
"Or give your agent an app of your own and ask about one button, file or behavior."
msgstr ""
#. {ph0}: <a href="../showcase/notion/">
#. {ph1}: </a >
#. {ph2}: <span >
#. {ph3}: </span >
#: website/public/first-investigation/index.html:499
#, python-brace-format
msgctxt "page:first-investigation/index.html"
msgid ""
"{ph0}How Notion copies text and HTML{ph1}{ph2}Follow a clipboard feature in a packaged"
" Electron app.{ph3}"
msgstr ""
#. {ph0}: <a href="../showcase/dx-ball/" >
#. {ph1}: </a >
#. {ph2}: <span >
#. {ph3}: </span >
#: website/public/first-investigation/index.html:505
#, python-brace-format
msgctxt "page:first-investigation/index.html"
msgid ""
"{ph0}How DX-Ball calculates sound panning{ph1}{ph2}Read the original instructions and "
"the reconstruction’s checks.{ph3}"
msgstr ""
#. {ph0}: <a href="../faq/#troubleshooting" >
#. {ph1}: </a >
#. {ph2}: <span >
#. {ph3}: </span >
#: website/public/first-investigation/index.html:513
#, python-brace-format
msgctxt "page:first-investigation/index.html"
msgid ""
"{ph0}Troubleshoot setup or analysis{ph1}{ph2}Update REA and check the connection if "
"you get stuck.{ph3}"
msgstr ""
#: website/public/first-investigation/index.html:6
msgctxt "page:first-investigation/index.html"
msgid "Your First Reverse Engineering Investigation — REA"
msgstr ""
#: website/public/first-investigation/index.html:7
msgctxt "page:first-investigation/index.html"
msgid ""
"Try REA on a small Notes app. Set up your agent, ask where exported notes go, and "
"check the CSV formatter with a sample title."
msgstr ""
#: website/public/first-investigation/index.html:213
msgctxt "page:first-investigation/index.html"
msgid "On this page"
msgstr ""
#: website/public/first-investigation/index.html:223
msgctxt "page:first-investigation/index.html"
msgid "Your first REA investigation"
msgstr ""
#: website/public/first-investigation/index.html:239
msgctxt "page:first-investigation/index.html"
msgid "Copy REA installation prompt"
msgstr ""
#: website/public/first-investigation/index.html:261
msgctxt "page:first-investigation/index.html"
msgid "Copy setup command"
msgstr ""
#: website/public/first-investigation/index.html:289
msgctxt "page:first-investigation/index.html"
msgid "Copy Notes investigation prompt"
msgstr ""
#: website/public/first-investigation/index.html:411
msgctxt "page:first-investigation/index.html"
msgid "Copy CSV check prompt"
msgstr ""
#: website/public/first-investigation/index.html:452
#: website/public/first-investigation/index.html:469
msgctxt "page:first-investigation/index.html"
msgid "Copy formatter check command"
msgstr ""
#: website/public/first-investigation/index.html:540
msgctxt "page:first-investigation/index.html"
msgid "Back to top"
msgstr ""
#: website/public/get-started/index.html:107
msgctxt "page:get-started/index.html"
msgid "Skip to content"
msgstr ""
#. {ph0}: <a href="../">
#. {ph1}: </a>
#: website/public/get-started/index.html:199
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "{ph0}Home{ph1} / Get started"
msgstr ""
#: website/public/get-started/index.html:200
msgctxt "page:get-started/index.html"
msgid "Set up REA."
msgstr ""
#: website/public/get-started/index.html:201
msgctxt "page:get-started/index.html"
msgid ""
"Set up your computer and coding agent, connect REA, then investigate a small app."
msgstr ""
#. {ph0}: <a href="#agent">
#. {ph1}: </a>
#: website/public/get-started/index.html:205
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
"New to this? Follow the four steps below. Already have an agent? Go straight to "
"{ph0}Connect REA{ph1}."
msgstr ""
#: website/public/get-started/index.html:212 website/public/get-started/index.html:211
msgctxt "page:get-started/index.html"
msgid "On this page"
msgstr ""
#. {ph0}: <a href="#computer">
#. {ph1}: </a>
#: website/public/get-started/index.html:214
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "{ph0}1. Prepare your computer{ph1}"
msgstr ""
#. {ph0}: <a href="#choose-agent">
#. {ph1}: </a>
#: website/public/get-started/index.html:215
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "{ph0}2. Choose an agent{ph1}"
msgstr ""
#. {ph0}: <a href="#agent">
#. {ph1}: </a>
#: website/public/get-started/index.html:216
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "{ph0}3. Connect REA{ph1}"
msgstr ""
#. {ph0}: <a href="#first-task">
#. {ph1}: </a>
#: website/public/get-started/index.html:217
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "{ph0}4. Try an investigation{ph1}"
msgstr ""
#. {ph0}: <a href="#native">
#. {ph1}: </a>
#: website/public/get-started/index.html:218
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "{ph0}Other targets and providers{ph1}"
msgstr ""
#. {ph0}: <a href="#terminal">
#. {ph1}: </a>
#: website/public/get-started/index.html:219
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "{ph0}Use the CLI{ph1}"
msgstr ""
#. {ph0}: <a href="#help">
#. {ph1}: </a>
#: website/public/get-started/index.html:220
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "{ph0}Getting help{ph1}"
msgstr ""
#: website/public/get-started/index.html:225
msgctxt "page:get-started/index.html"
msgid "1. Prepare your computer"
msgstr ""
#: website/public/get-started/index.html:226
msgctxt "page:get-started/index.html"
msgid ""
"Use the computer where your target files are stored. A local coding agent can read "
"those files and run tools for you."
msgstr ""
#: website/public/get-started/index.html:231
msgctxt "page:get-started/index.html"
msgid "How do I open a terminal?"
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#. {ph2}: <em>
#. {ph3}: </em>
#: website/public/get-started/index.html:233
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
"{ph0}Windows:{ph1} open the Start menu, type {ph2}PowerShell{ph3} and press Enter."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#. {ph2}: <kbd>⌘</kbd>
#. {ph3}: <kbd>Space</kbd>
#. {ph4}: <em>
#. {ph5}: </em>
#: website/public/get-started/index.html:237
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "{ph0}macOS:{ph1} press {ph2} {ph3}, type {ph4}Terminal{ph5} and press Enter."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#. {ph2}: <kbd>Ctrl</kbd>
#. {ph3}: <kbd>Alt</kbd>
#. {ph4}: <kbd>T</kbd>
#: website/public/get-started/index.html:241
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "{ph0}Linux:{ph1} press {ph2} {ph3} {ph4} on most desktops."
msgstr ""
#. {ph0}: <kbd>Ctrl</kbd>
#. {ph1}: <kbd>V</kbd>
#. {ph2}: <kbd>⌘</kbd>
#. {ph3}: <kbd>V</kbd>
#. {ph4}: <kbd>Ctrl</kbd>
#. {ph5}: <kbd>Shift</kbd>
#. {ph6}: <kbd>V</kbd>
#: website/public/get-started/index.html:246
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
"Paste a command with {ph0} {ph1} (macOS: {ph2} {ph3}; Linux terminals: {ph4} {ph5} "
"{ph6}), then press Enter."
msgstr ""
#: website/public/get-started/index.html:251
msgctxt "page:get-started/index.html"
msgid ""
"Commands go in the terminal. Prompts labeled “Your coding agent” go in the agent's "
"chat."
msgstr ""
#. {ph0}: <span translate="no">Node.js</span>
#. {ph1}: <span translate="no">Node.js</span>
#: website/public/get-started/index.html:256
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "You'll need {ph0} 22 (22.19+), 24 (24.11+) or 26+. npm comes with {ph1}."
msgstr ""
#. {ph0}: <span translate="no">Node.js</span>
#: website/public/get-started/index.html:262
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "Don't have {ph0}, or not sure?"
msgstr ""
#: website/public/get-started/index.html:265
msgctxt "page:get-started/index.html"
msgid "Open a terminal and check:"
msgstr ""
#: website/public/get-started/index.html:268
msgctxt "page:get-started/index.html"
msgid "Terminal"
msgstr ""
#: website/public/get-started/index.html:269 website/public/get-started/index.html:292
#: website/public/get-started/index.html:322 website/public/get-started/index.html:347
#: website/public/get-started/index.html:370 website/public/get-started/index.html:385
#: website/public/get-started/index.html:419 website/public/get-started/index.html:450
#: website/public/get-started/index.html:464 website/public/get-started/index.html:482
#: website/public/get-started/index.html:534 website/public/get-started/index.html:548
#: website/public/get-started/index.html:580 website/public/get-started/index.html:609
#: website/public/get-started/index.html:744 website/public/get-started/index.html:774
#: website/public/get-started/index.html:799 website/public/get-started/index.html:814
#: website/public/get-started/index.html:862 website/public/get-started/index.html:895
#: website/public/get-started/index.html:1047 website/public/get-started/index.html:1109
#: website/public/get-started/index.html:1132 website/public/get-started/index.html:1156
#: website/public/get-started/index.html:1204 website/public/get-started/index.html:1279
#: website/public/get-started/index.html:1305 website/public/get-started/index.html:1322
#: website/public/get-started/index.html:1565 website/public/get-started/index.html:1624
#: website/public/get-started/index.html:1643 website/public/get-started/index.html:1665
#: website/public/get-started/index.html:1708 website/public/get-started/index.html:1738
#: website/public/get-started/index.html:1759
msgctxt "page:get-started/index.html"
msgid "Copy"
msgstr ""
#. {ph0}: <code>node -v</code>
#. {ph1}: <span translate="no">Node.js</span>
#: website/public/get-started/index.html:281
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
"If {ph0} prints v22.19+, v24.11+ or v26+, you're ready. If it prints an older version "
"or \"not recognized\" / \"command not found\", install {ph1} 24 LTS:"
msgstr ""
#. {ph0}: <code>node -v</code>
#: website/public/get-started/index.html:303
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
"Type Y if asked to accept the terms. Close PowerShell, open it again, then run {ph0}."
msgstr ""
#. {ph0}: <a href="https://nodejs.org/en/download" >
#. {ph1}: </a >
#: website/public/get-started/index.html:307
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "{ph0}Download the Node.js installer{ph1} if winget is unavailable."
msgstr ""
#. {ph0}: <em>
#. {ph1}: </em>
#. {ph2}: <code>npx</code>
#. {ph3}: <code>npx.cmd</code>
#. {ph4}: <code>npm.cmd</code>
#: website/public/get-started/index.html:313
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
"If PowerShell later says {ph0}\"running scripts is disabled on this system\"{ph1} when"
" you run {ph2}, use {ph3} instead. For npm, use {ph4}:"
msgstr ""
#. {ph0}: <a href="https://nodejs.org/en/download" >
#. {ph1}: </a >
#: website/public/get-started/index.html:336
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
"For a first installation, download the {ph0}Node.js 24 LTS macOS installer "
"(.pkg){ph1}, open it and follow the installer. Then reopen Terminal."
msgstr ""
#: website/public/get-started/index.html:343
msgctxt "page:get-started/index.html"
msgid "Already use Homebrew?"
msgstr ""
#. {ph0}: <code>sudo apt install curl unzip</code>
#: website/public/get-started/index.html:362
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
"Install curl and unzip first if they are missing. On Debian or Ubuntu, run {ph0}; on "
"other distributions, use your package manager."
msgstr ""
#: website/public/get-started/index.html:381
msgctxt "page:get-started/index.html"
msgid "Close the terminal, open it again, then:"
msgstr ""
#. {ph0}: <code>nodejs</code>
#. {ph1}: <code>node -v</code>
#: website/public/get-started/index.html:398
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
"Your distribution's own {ph0} package is often older than 22.19, so check {ph1} if you"
" use it instead."
msgstr ""
#. {ph0}: <a href="https://nodejs.org/en/download">
#. {ph1}: </a>
#: website/public/get-started/index.html:404
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "Prefer a regular installer? Download the LTS version from {ph0}nodejs.org{ph1}."
msgstr ""
#: website/public/get-started/index.html:411
msgctxt "page:get-started/index.html"
msgid "Make a working folder for your agent"
msgstr ""
#: website/public/get-started/index.html:412
msgctxt "page:get-started/index.html"
msgid "In your terminal, make a folder for the exercise, then move into it:"
msgstr ""
#: website/public/get-started/index.html:431
msgctxt "page:get-started/index.html"
msgid ""
"Keep this terminal open for the next step. If you already have a working folder, open "
"it instead."
msgstr ""
#: website/public/get-started/index.html:438
msgctxt "page:get-started/index.html"
msgid "2. Choose a coding agent"
msgstr ""
#: website/public/get-started/index.html:439
msgctxt "page:get-started/index.html"
msgid ""
"Your agent is the AI you talk to. REA supplies the inspection tools it uses. Pick one "
"client below; open its instructions if you haven't used it before."
msgstr ""
#: website/public/get-started/index.html:445
msgctxt "page:get-started/index.html"
msgid "Codex · use your ChatGPT account"
msgstr ""
#: website/public/get-started/index.html:446
msgctxt "page:get-started/index.html"
msgid "Install Codex using the command for your operating system:"
msgstr ""
#: website/public/get-started/index.html:475
msgctxt "page:get-started/index.html"
msgid ""
"After installation, reopen your terminal and return to the working folder. Then start "
"Codex:"
msgstr ""
#: website/public/get-started/index.html:493
msgctxt "page:get-started/index.html"
msgid ""
"Choose “Sign in with ChatGPT”, complete the browser sign-in, then return to the "
"terminal. When the message box appears, continue to step 3."
msgstr ""
#. {ph0}: <a href="https://learn.chatgpt.com/docs/codex/cli" >
#. {ph1}: </a >
#: website/public/get-started/index.html:498
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "{ph0}Codex installation and sign-in{ph1}"
msgstr ""
#: website/public/get-started/index.html:505
msgctxt "page:get-started/index.html"
msgid "Cursor, Windsurf or VS Code · use an editor"
msgstr ""
#: website/public/get-started/index.html:507
msgctxt "page:get-started/index.html"
msgid "Install the editor for your operating system and sign in."
msgstr ""
#: website/public/get-started/index.html:510
msgctxt "page:get-started/index.html"
msgid "Open the rea-work folder you made in step 1."
msgstr ""
#: website/public/get-started/index.html:511
msgctxt "page:get-started/index.html"
msgid ""
"Open its AI chat and choose Agent mode. In Windsurf or Devin Desktop, open the agent "
"chat; in VS Code, set up GitHub Copilot first."
msgstr ""
#. {ph0}: <a href="https://cursor.com/docs">
#. {ph1}: </a>
#. {ph2}: <a href="https://docs.windsurf.com/windsurf/getting-started" >
#. {ph3}: </a >
#. {ph4}: <a href="https://code.visualstudio.com/docs/setup/copilot" >
#. {ph5}: </a >
#: website/public/get-started/index.html:517
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
"{ph0}Cursor setup{ph1} · {ph2}Windsurf / Devin Desktop setup{ph3} · {ph4}VS Code and "
"Copilot setup{ph5}"
msgstr ""
#: website/public/get-started/index.html:529
msgctxt "page:get-started/index.html"
msgid "Claude Code · use your Claude account"
msgstr ""
#: website/public/get-started/index.html:530
msgctxt "page:get-started/index.html"
msgid "Install using the command for your operating system:"
msgstr ""
#. {ph0}: <code>claude</code>
#: website/public/get-started/index.html:559
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
"Reopen your terminal, return to your working folder and run {ph0}. Follow the sign-in "
"prompts. Access uses an eligible Claude subscription or a configured API account."
msgstr ""
#. {ph0}: <a href="https://code.claude.com/docs/en/setup" >
#. {ph1}: </a >
#: website/public/get-started/index.html:564
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "{ph0}Claude Code installation and account options{ph1}"
msgstr ""
#: website/public/get-started/index.html:571
msgctxt "page:get-started/index.html"
msgid "Claude Desktop · use a desktop chat"
msgstr ""
#: website/public/get-started/index.html:572
msgctxt "page:get-started/index.html"
msgid ""
"Install Claude Desktop on Windows or macOS and sign in. Quit it completely, then run "
"this command in a terminal you opened outside Claude:"
msgstr ""
#. {ph0}: <a href="#check-connection">
#. {ph1}: </a>
#: website/public/get-started/index.html:591
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
"Review and approve the plan, reopen Claude, then {ph0}check the connection in step "
"3{ph1}."
msgstr ""
#. {ph0}: <a href="https://claude.ai/download">
#. {ph1}: </a>
#. {ph2}: <a href="https://github.com/morluto/rea/blob/main/docs/client-
#. configuration.md#claude-desktop" >
#. {ph3}: </a >
#: website/public/get-started/index.html:595
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "{ph0}Download Claude Desktop{ph1} · {ph2}Claude Desktop connection details{ph3}"
msgstr ""
#: website/public/get-started/index.html:605
msgctxt "page:get-started/index.html"
msgid "OpenCode · choose an AI model"
msgstr ""
#. {ph0}: <code>opencode</code>
#. {ph1}: <code>/connect</code>
#: website/public/get-started/index.html:620
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
"Run {ph0} in your working folder. Use {ph1} in its chat to connect your model account,"
" then select a model."
msgstr ""
#. {ph0}: <a href="https://opencode.ai/docs/" >
#. {ph1}: </a >
#: website/public/get-started/index.html:625
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "{ph0}OpenCode installation and model setup{ph1}"
msgstr ""
#: website/public/get-started/index.html:632
msgctxt "page:get-started/index.html"
msgid "All supported clients and setup IDs"
msgstr ""
#. {ph0}: <code>--client</code>
#: website/public/get-started/index.html:633
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
"The npm 6.4.0 release supports the clients below. Use the ID with {ph0} when choosing "
"a client explicitly."
msgstr ""
#: website/public/get-started/index.html:641
msgctxt "page:get-started/index.html"
msgid "Client"
msgstr ""
#: website/public/get-started/index.html:642
msgctxt "page:get-started/index.html"
msgid "Setup ID"
msgstr ""
#. {ph0}: <code>qoder</code>
#. {ph1}: <code>droid</code>
#. {ph2}: <code>trae</code>
#. {ph3}: <code>zcode</code>
#. {ph4}: <code>dsh</code>
#: website/public/get-started/index.html:717
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
"Qoder ({ph0}), Factory Droid ({ph1}), Trae ({ph2}), ZCode ({ph3}) and DeepSeek Harness"
" ({ph4}) are available on repository main; use a source build or a release containing "
"those integrations."
msgstr ""
#. {ph0}: <a href="https://github.com/morluto/rea/blob/main/docs/client-
#. configuration.md" >
#. {ph1}: </a >
#. {ph2}: <a
#. href="https://github.com/morluto/rea/blob/main/docs/installation.md#released-package-
#. and-main" >
#. {ph3}: </a >
#: website/public/get-started/index.html:724
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
"{ph0}Client configuration and troubleshooting{ph1} · {ph2}Release availability{ph3}"
msgstr ""
#: website/public/get-started/index.html:736
msgctxt "page:get-started/index.html"
msgid "Grok Bot · connect on its hosted computer"
msgstr ""
#. {ph0}: <code>rea</code>
#: website/public/get-started/index.html:737
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
"In Grok Bot's chat, ask it to add a custom MCP server named {ph0} using this command "
"on the Bot's computer:"
msgstr ""
#. {ph0}: <a href="https://github.com/morluto/rea/blob/main/docs/client-
#. configuration.md#other-client-settings" >
#. {ph1}: </a >
#: website/public/get-started/index.html:755
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "{ph0}Grok Bot connector instructions{ph1}"
msgstr ""
#: website/public/get-started/index.html:765
msgctxt "page:get-started/index.html"
msgid "3. Connect REA"
msgstr ""
#: website/public/get-started/index.html:766
msgctxt "page:get-started/index.html"
msgid "Copy this into your coding agent:"
msgstr ""
#. {ph0}: <span class="terminal-dots" aria-hidden="true" >
#. {ph1}: <i>
#. {ph2}: </i>
#. {ph3}: <i>
#. {ph4}: </i>
#. {ph5}: <i>
#. {ph6}: </i>
#. {ph7}: </span >
#: website/public/get-started/index.html:769
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent"
msgstr ""
#. {ph0}: <span class="prompt-symbol" aria-hidden="true">
#. {ph1}: </span >
#. {ph2}: <span id="agent-install-prompt" >
#. {ph3}: <span translate="no">npx rea-agents@latest setup</span>
#. {ph4}: </span >
#. {ph5}: <span class="terminal-cursor" aria-hidden="true">
#. {ph6}: </span>
#: website/public/get-started/index.html:783
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
"{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using {ph3}. Show me "
"the setup plan for approval, then verify the installation.{ph4}{ph5}{ph6}"
msgstr ""
#: website/public/get-started/index.html:795
msgctxt "page:get-started/index.html"
msgid "Or run setup yourself"
msgstr ""
#: website/public/get-started/index.html:810
msgctxt "page:get-started/index.html"
msgid "For one specific client, add its setup ID:"
msgstr ""
#. {ph0}: <code>y</code>
#: website/public/get-started/index.html:825
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
"If npm asks to download the package, type {ph0} and press Enter. In REA's client list,"
" use the arrow keys to move, Space to select your client and Enter to continue."
msgstr ""
#: website/public/get-started/index.html:831
msgctxt "page:get-started/index.html"
msgid ""
"Choose your client and review the setup plan. REA adds its MCP connection and the "
"matching investigation skill, keeping a backup of existing configuration. It asks "
"before applying the changes."
msgstr ""
#: website/public/get-started/index.html:836
msgctxt "page:get-started/index.html"
msgid ""
"MCP is the connection that lets your agent call REA. The skill gives it a workflow for"
" investigating software."
msgstr ""
#: website/public/get-started/index.html:840
msgctxt "page:get-started/index.html"
msgid ""
"For the first exercise, you can skip the optional Hopper installation. Restart your "
"client when setup finishes."
msgstr ""
#: website/public/get-started/index.html:845
msgctxt "page:get-started/index.html"
msgid "How do I restart my client?"
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#. {ph2}: <kbd>⌘</kbd>
#. {ph3}: <kbd>Q</kbd>
#: website/public/get-started/index.html:846
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
"{ph0}Desktop apps{ph1} (Claude Desktop, Cursor, Windsurf, VS Code): quit the app "
"completely, then open it again. Closing the window isn't enough. On macOS press {ph2} "
"{ph3}; on Windows, also quit from the tray icon if there is one."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#: website/public/get-started/index.html:853
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
"{ph0}Terminal agents{ph1} (Claude Code, Codex, Gemini CLI): exit the session and start"
" it again."
msgstr ""
#. {ph0}: <code>codex</code>
#. {ph1}: <code>"healthy": true</code>
#: website/public/get-started/index.html:873
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
"Replace {ph0} with your client's setup ID. A successful check reports {ph1}. Then ask "
"your agent:"
msgstr ""
#: website/public/get-started/index.html:879
msgctxt "page:get-started/index.html"
msgid "Check that REA is connected and show me which REA tools you can use."
msgstr ""
#: website/public/get-started/index.html:886
msgctxt "page:get-started/index.html"
msgid "4. Try your first investigation"
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#: website/public/get-started/index.html:887
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
"The example is a six-file Electron app with an {ph0}Export notes{ph1} button. Your "
"agent can inspect its code without installing or launching Electron."
msgstr ""
#: website/public/get-started/index.html:894
msgctxt "page:get-started/index.html"
msgid "Your coding agent"
msgstr ""
#. {ph0}: <span class="prompt-symbol" aria-hidden="true">
#. {ph1}: </span >
#. {ph2}: <span id="setup-first-prompt" >
#. {ph3}: <span translate="no" >https://rea.tools/examples/notes-example.zip</span >
#. {ph4}: <span translate="no">notes.csv</span>
#. {ph5}: </span >
#. {ph6}: <span class="terminal-cursor" aria-hidden="true">
#. {ph7}: </span>
#: website/public/get-started/index.html:904
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
"{ph0}›{ph1}{ph2}Download {ph3} into a new example folder and unpack it. Use REA to "
"find what happens when I click Export notes. Show where {ph4} is written, which fields"
" it contains, and the relevant files and lines.{ph5}{ph6}{ph7}"
msgstr ""
#: website/public/get-started/index.html:918
msgctxt "page:get-started/index.html"
msgid "Look for a short explanation with file and line references:"
msgstr ""
#. {ph0}: <code>notes:export</code>
#. {ph1}: <code>notes.csv</code>
#. {ph2}: <code>id</code>
#. {ph3}: <code>title</code>
#: website/public/get-started/index.html:920
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
"The button sends a {ph0} message. The main process formats the notes as CSV and writes"
" {ph1} in the user’s Downloads folder. The columns are {ph2} and {ph3}."
msgstr ""
#. {ph0}: <a href="../first-investigation/#check" >
#. {ph1}: </a >
#: website/public/get-started/index.html:927
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "{ph0}Check a prediction in the guided exercise →{ph1}"
msgstr ""
#: website/public/get-started/index.html:933
msgctxt "page:get-started/index.html"
msgid "Download the example yourself, or use your own app"
msgstr ""
#. {ph0}: <a class="button" href="../examples/notes-example.zip" download="notes-
#. example.zip" >
#. {ph1}: </a >
#: website/public/get-started/index.html:936
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "{ph0}Download example ZIP{ph1}"
msgstr ""
#. {ph0}: <code>notes-example</code>
#: website/public/get-started/index.html:944
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
"If your agent can’t download files, unzip this archive yourself. Give it the path to "
"the {ph0} folder and the same export question."
msgstr ""
#. {ph0}: <code>/absolute/path/to/app</code>
#: website/public/get-started/index.html:950
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
"Use REA to inspect the app at {ph0}. Find how it exports data and show the relevant "
"files and lines."
msgstr ""
#: website/public/get-started/index.html:957
msgctxt "page:get-started/index.html"
msgid "How do I get a folder's full path?"
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#. {ph2}: <em>
#. {ph3}: </em>
#: website/public/get-started/index.html:959
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
"{ph0}Windows:{ph1} in File Explorer, right-click the folder and choose {ph2}Copy as "
"path{ph3}. On Windows 10, hold Shift while right-clicking."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#. {ph2}: <em>
#. {ph3}: </em>
#: website/public/get-started/index.html:964
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
"{ph0}macOS:{ph1} in Finder, right-click the folder, hold Option and choose {ph2}Copy "
"\"…\" as Pathname{ph3}."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#: website/public/get-started/index.html:968
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
"{ph0}Any system:{ph1} drag the folder into a terminal window and its path appears."
msgstr ""
#: website/public/get-started/index.html:973 website/public/get-started/index.html:1731
msgctxt "page:get-started/index.html"
msgid "In a terminal, put quotes around a path that contains spaces."
msgstr ""
#: website/public/get-started/index.html:980
msgctxt "page:get-started/index.html"
msgid "Analyze another kind of software"
msgstr ""
#: website/public/get-started/index.html:981
msgctxt "page:get-started/index.html"
msgid ""
"Choose the section for your target. A provider is the local analysis tool REA uses for"
" that kind of software."
msgstr ""
#: website/public/get-started/index.html:986
msgctxt "page:get-started/index.html"
msgid "Native executables and libraries · Hopper, Ghidra or IDA"
msgstr ""
#: website/public/get-started/index.html:989
msgctxt "page:get-started/index.html"
msgid ""
"Install one analysis tool on the computer running REA. The host is your operating "
"system; the target is the program you want to inspect."
msgstr ""
#: website/public/get-started/index.html:998
msgctxt "page:get-started/index.html"
msgid "Provider"
msgstr ""
#: website/public/get-started/index.html:1007
msgctxt "page:get-started/index.html"
msgid "Unavailable"
msgstr ""
#: website/public/get-started/index.html:1009
msgctxt "page:get-started/index.html"
msgid "Supported distributions"
msgstr ""
#: website/public/get-started/index.html:1013
msgctxt "page:get-started/index.html"
msgid "x64 · experimental"
msgstr ""
#: website/public/get-started/index.html:1019
msgctxt "page:get-started/index.html"
msgid "Verified profiles"
msgstr ""
#: website/public/get-started/index.html:1020
msgctxt "page:get-started/index.html"
msgid "Verified headless profile"
msgstr ""
#: website/public/get-started/index.html:1021
msgctxt "page:get-started/index.html"
msgid "See provider guide"
msgstr ""
#: website/public/get-started/index.html:1027
msgctxt "page:get-started/index.html"
msgid "Hopper · let setup install or connect it"
msgstr ""
#: website/public/get-started/index.html:1028
msgctxt "page:get-started/index.html"
msgid ""
"Connect Hopper on macOS or Linux. Run the setup command above; it detects an existing "
"installation or offers an installation plan for your approval."
msgstr ""
#: website/public/get-started/index.html:1033
msgctxt "page:get-started/index.html"
msgid ""
"Choose Hopper in setup and review its separate installation plan. On macOS, choose "
"demo mode or activate your license when Hopper first opens. On Linux, setup prepares "
"the supported demo and its private display."
msgstr ""
#: website/public/get-started/index.html:1039
msgctxt "page:get-started/index.html"
msgid ""
"Linux hosts: Ubuntu 24.04+, Fedora 41+, Nobara 44+, Arch Linux, CachyOS or Omarchy. "
"Hopper is commercial software; its demo has vendor-defined limits."
msgstr ""
#: website/public/get-started/index.html:1058
msgctxt "page:get-started/index.html"
msgid ""
"If macOS asks for Automation permission, allow the app that starts REA in System "
"Settings → Privacy & Security → Automation, then retry."
msgstr ""
#. {ph0}: <a href="https://github.com/morluto/rea/blob/main/docs/installation.md#hopper"
#. >
#. {ph1}: </a >
#: website/public/get-started/index.html:1063
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "{ph0}Hopper setup and troubleshooting{ph1}"
msgstr ""
#: website/public/get-started/index.html:1071
msgctxt "page:get-started/index.html"
msgid "Ghidra · install the free analysis tool and Java"
msgstr ""
#: website/public/get-started/index.html:1075
msgctxt "page:get-started/index.html"
msgid ""
"Install a 64-bit JDK 21 or newer, including the Java compiler. Choose the package "
"matching your computer's architecture."
msgstr ""
#. {ph0}: <code>ghidra_…_PUBLIC_….zip</code>
#: website/public/get-started/index.html:1080
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
"Download Ghidra 12.1.4 from the release's Assets list and extract the {ph0} archive. "
"Choose the release archive, not “Source code”."
msgstr ""
#. {ph0}: <code>ghidraRun</code>
#. {ph1}: <code>ghidraRun.bat</code>
#. {ph2}: <code>GHIDRA_INSTALL_DIR</code>
#: website/public/get-started/index.html:1085
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "Find the extracted folder containing {ph0} or {ph1}. Use that folder for {ph2}."
msgstr ""
#. {ph0}: <a href="https://adoptium.net/temurin/releases/?version=21" >
#. {ph1}: </a >
#. {ph2}: <a
#. href="https://github.com/NationalSecurityAgency/ghidra/releases/tag/Ghidra_12.1.4_build"
#. >
#. {ph3}: </a >
#: website/public/get-started/index.html:1091
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "{ph0}Download a JDK{ph1} · {ph2}Download Ghidra 12.1.4{ph3}"
msgstr ""
#. {ph0}: <code>java.home</code>
#. {ph1}: <code>JAVA_HOME</code>
#: website/public/get-started/index.html:1101
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
"Check Java. The first command prints {ph0}; use that folder for {ph1}. The second "
"confirms the compiler is installed:"
msgstr ""
#: website/public/get-started/index.html:1122
msgctxt "page:get-started/index.html"
msgid "Connect Ghidra on Windows"
msgstr ""
#: website/public/get-started/index.html:1123
msgctxt "page:get-started/index.html"
msgid ""
"Windows x64 has experimental, read-only support for native x86 and x64 PE applications"
" and DLLs on fixed local NTFS drives. Use an existing Ghidra 12.1.x installation and a"
" 64-bit JDK 21 or newer:"
msgstr ""
#: website/public/get-started/index.html:1146
msgctxt "page:get-started/index.html"
msgid "Replace the two paths with your installations, then review setup's plan."
msgstr ""
#: website/public/get-started/index.html:1152
msgctxt "page:get-started/index.html"
msgid "Connect your Ghidra installation"
msgstr ""
#: website/public/get-started/index.html:1168
msgctxt "page:get-started/index.html"
msgid ""
"Replace both paths with your existing installations. For a fresh macOS or Linux arm64 "
"installation, build the native decompiler for your computer before continuing."
msgstr ""
#: website/public/get-started/index.html:1174
msgctxt "page:get-started/index.html"
msgid "Build Ghidra's native decompiler"
msgstr ""
#: website/public/get-started/index.html:1175
msgctxt "page:get-started/index.html"
msgid ""
"On macOS, the build needs Xcode Command Line Tools, make and bison. Use the guide for "
"your computer:"
msgstr ""
#. {ph0}: <a
#. href="https://github.com/morluto/rea/blob/main/docs/installation.md#missing-macos-
#. native-decompiler" >
#. {ph1}: </a >
#: website/public/get-started/index.html:1180
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "{ph0}macOS · Intel{ph1}"
msgstr ""
#. {ph0}: <a href="https://github.com/morluto/rea/blob/main/docs/installation.md#macos-
#. arm64-native-decompiler" >
#. {ph1}: </a >
#: website/public/get-started/index.html:1186
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "{ph0}macOS · Apple Silicon{ph1}"
msgstr ""
#. {ph0}: <a
#. href="https://github.com/NationalSecurityAgency/ghidra/blob/Ghidra_12.1.4_build/GhidraDocs/GettingStarted.md#building-
#. native-components" >
#. {ph1}: </a >
#: website/public/get-started/index.html:1192
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "{ph0}Linux arm64 · native build instructions{ph1}"
msgstr ""
#: website/public/get-started/index.html:1200
msgctxt "page:get-started/index.html"
msgid "Then check Ghidra and save its paths for your client:"
msgstr ""
#: website/public/get-started/index.html:1217
msgctxt "page:get-started/index.html"
msgid ""
"Keep these commands in the same terminal session. Rerun setup after setting the paths,"
" approve the updated client configuration, then restart your agent."
msgstr ""
#. {ph0}: <a href="https://github.com/morluto/rea/blob/main/docs/installation.md#ghidra"
#. >
#. {ph1}: </a >
#. {ph2}: <a href="https://github.com/morluto/rea/blob/main/docs/windows-ghidra-p0.md" >
#. {ph3}: </a >
#: website/public/get-started/index.html:1222
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
"{ph0}Ghidra setup and architecture requirements{ph1} · {ph2}Windows Ghidra guide{ph3}"
msgstr ""
#: website/public/get-started/index.html:1235
msgctxt "page:get-started/index.html"
msgid "IDA · connect an existing installation"
msgstr ""
#: website/public/get-started/index.html:1236
msgctxt "page:get-started/index.html"
msgid ""
"Use the IDA provider guide to prepare an upstream MCP registration. Choose an attached"
" GUI with the original binary open, or a headless supervisor that opens a private "
"database."
msgstr ""
#: website/public/get-started/index.html:1241
msgctxt "page:get-started/index.html"
msgid ""
"Verified profiles include the Windows legacy GUI and headless supervisor, plus a macOS"
" arm64 headless supervisor with IDA Professional 9.1. The optional native GUI bridge "
"has its own version and platform requirements."
msgstr ""
#. {ph0}: <a href="https://github.com/morluto/rea/blob/main/CONTRIBUTING.md#development-
#. setup" >
#. {ph1}: </a >
#. {ph2}: <code>6.4.0</code>
#: website/public/get-started/index.html:1247
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
"The macOS headless profile and native GUI bridge require a {ph0}REA source build{ph1} "
"or a release containing those changes. npm {ph2} does not include them."
msgstr ""
#. {ph0}: <code>node scripts/rea.mjs doctor --provider ida --json</code>
#. {ph1}: <code>node scripts/rea.mjs setup</code>
#. {ph2}: <code>npx</code>
#: website/public/get-started/index.html:1256
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
"From the built checkout, run {ph0} and {ph1} instead of the {ph2} commands below."
msgstr ""
#: website/public/get-started/index.html:1263
msgctxt "page:get-started/index.html"
msgid "Prepare the IDA registration file"
msgstr ""
#. {ph0}: <code>ida-mcp.json</code>
#. {ph1}: <code>.txt</code>
#: website/public/get-started/index.html:1264
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
"Install and configure the upstream server using the IDA guide below. Then save its "
"working registration as {ph0} in a text editor. On Windows, choose “All files” when "
"saving in Notepad so it doesn't add {ph1}."
msgstr ""
#. {ph0}: <code>idb_open</code>
#. {ph1}: <code>idb_list</code>
#. {ph2}: <code>idb_close</code>
#: website/public/get-started/index.html:1271
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
"For a headless supervisor providing {ph0}, {ph1} and {ph2}, the file can look like "
"this:"
msgstr ""
#. {ph0}: <code>command</code>
#. {ph1}: <code>args</code>
#. {ph2}: <code>env</code>
#: website/public/get-started/index.html:1294
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
"For an attached legacy 1.4.0 GUI server, copy its working {ph0}, {ph1} and optional "
"{ph2} into the file. Open the original binary in IDA and start its upstream plugin "
"before asking REA to inspect it."
msgstr ""
#: website/public/get-started/index.html:1336
msgctxt "page:get-started/index.html"
msgid ""
"Use the JSON registration file you prepared with the provider guide, then rerun setup "
"and restart your agent."
msgstr ""
#. {ph0}: <a href="https://github.com/morluto/rea/blob/main/docs/ida-provider.md" >
#. {ph1}: </a >
#: website/public/get-started/index.html:1340
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "{ph0}IDA profiles, registration examples and verified platforms{ph1}"
msgstr ""
#: website/public/get-started/index.html:1348
msgctxt "page:get-started/index.html"
msgid ""
"Once connected, give your agent the original executable's full path and name your "
"provider:"
msgstr ""
#. {ph0}: <code>/absolute/path/to/program</code>
#: website/public/get-started/index.html:1353
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
"Use REA with my configured provider to inspect {ph0}. List its functions and strings, "
"then explain the part that handles user input with references to the code."
msgstr ""
#. {ph0}: <a href="../guides/native/">
#. {ph1}: </a>
#: website/public/get-started/index.html:1360
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "{ph0}Follow a native analysis example{ph1}"
msgstr ""
#: website/public/get-started/index.html:1365
msgctxt "page:get-started/index.html"
msgid "Websites, Android, .NET, firmware and other targets"
msgstr ""
#: website/public/get-started/index.html:1368
msgctxt "page:get-started/index.html"
msgid ""
"Open the guide for the target you have. Each guide gives the additional tools, "
"supported hosts and first command."
msgstr ""
#: website/public/get-started/index.html:1376
msgctxt "page:get-started/index.html"
msgid "Target"
msgstr ""
#: website/public/get-started/index.html:1377
msgctxt "page:get-started/index.html"
msgid "Tools to prepare"
msgstr ""
#: website/public/get-started/index.html:1378
msgctxt "page:get-started/index.html"
msgid "Guide"
msgstr ""
#: website/public/get-started/index.html:1383
msgctxt "page:get-started/index.html"
msgid "JavaScript / Electron"
msgstr ""
#. {ph0}: <a href="../guides/javascript/">
#. {ph1}: </a>
#: website/public/get-started/index.html:1385 website/public/get-started/index.html:1390
#: website/public/get-started/index.html:1395 website/public/get-started/index.html:1405
#: website/public/get-started/index.html:1415 website/public/get-started/index.html:1425
#: website/public/get-started/index.html:1435 website/public/get-started/index.html:1445
#: website/public/get-started/index.html:1455 website/public/get-started/index.html:1465
#: website/public/get-started/index.html:1475 website/public/get-started/index.html:1485
#: website/public/get-started/index.html:1495 website/public/get-started/index.html:1505
#: website/public/get-started/index.html:1515 website/public/get-started/index.html:1525
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "{ph0}Open guide{ph1}"
msgstr ""
#: website/public/get-started/index.html:1388
msgctxt "page:get-started/index.html"
msgid "Website"
msgstr ""
#: website/public/get-started/index.html:1393
msgctxt "page:get-started/index.html"
msgid ".NET / Flutter / packages"
msgstr ""
#: website/public/get-started/index.html:1403
msgctxt "page:get-started/index.html"
msgid "Android APK"
msgstr ""
#: website/public/get-started/index.html:1413
msgctxt "page:get-started/index.html"
msgid "Android device"
msgstr ""
#: website/public/get-started/index.html:1423
msgctxt "page:get-started/index.html"
msgid "Android resources"
msgstr ""
#: website/public/get-started/index.html:1433
msgctxt "page:get-started/index.html"
msgid "JEB project"
msgstr ""
#: website/public/get-started/index.html:1443
msgctxt "page:get-started/index.html"
msgid "Firmware"
msgstr ""
#: website/public/get-started/index.html:1453
msgctxt "page:get-started/index.html"
msgid "WASM"
msgstr ""
#: website/public/get-started/index.html:1463
msgctxt "page:get-started/index.html"
msgid "SQLite database"
msgstr ""
#: website/public/get-started/index.html:1473
msgctxt "page:get-started/index.html"
msgid "EVM bytecode"
msgstr ""
#: website/public/get-started/index.html:1483
msgctxt "page:get-started/index.html"
msgid "ELF / Linux crash"
msgstr ""
#: website/public/get-started/index.html:1493
msgctxt "page:get-started/index.html"
msgid "HAR / SAZ / mitmproxy"
msgstr ""
#: website/public/get-started/index.html:1503
msgctxt "page:get-started/index.html"
msgid "PCAP / PCAPNG"
msgstr ""
#: website/public/get-started/index.html:1513
msgctxt "page:get-started/index.html"
msgid "Logic signals"
msgstr ""
#: website/public/get-started/index.html:1523
msgctxt "page:get-started/index.html"
msgid "Process behavior"
msgstr ""
#. {ph0}: <a href="https://github.com/morluto/rea/blob/main/docs/flutter-analysis.md" >
#. {ph1}: </a >
#. {ph2}: <a href="https://github.com/morluto/rea/blob/main/docs/javascript-artifact-
#. reconstruction.md" >
#. {ph3}: </a >
#. {ph4}: <a href="https://github.com/morluto/rea/blob/main/docs/evm-bytecode.md" >
#. {ph5}: </a >
#. {ph6}: <a href="../guides/">
#. {ph7}: </a>
#: website/public/get-started/index.html:1535
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
"{ph0}Flutter guide{ph1} · {ph2}Packages and resources{ph3} · {ph4}EVM bytecode{ph5} · "
"{ph6}All investigation guides{ph7}"
msgstr ""
#: website/public/get-started/index.html:1555
msgctxt "page:get-started/index.html"
msgid "Use REA from a terminal"
msgstr ""
#: website/public/get-started/index.html:1557
msgctxt "page:get-started/index.html"
msgid "CLI commands, global installation and curl"
msgstr ""
#: website/public/get-started/index.html:1558
msgctxt "page:get-started/index.html"
msgid ""
"Analyze a JavaScript or Electron application folder or ASAR archive without running "
"the app:"
msgstr ""
#: website/public/get-started/index.html:1564
msgctxt "page:get-started/index.html"
msgid "Static application analysis"
msgstr ""
#. {ph0}: <code>.asar</code>
#. {ph1}: <code>"D:/apps/example"</code>
#: website/public/get-started/index.html:1576
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
"Replace the path with your extracted app directory or {ph0} file. On Windows, a path "
"such as {ph1} works here."
msgstr ""
#: website/public/get-started/index.html:1582
msgctxt "page:get-started/index.html"
msgid "Where do I find an app's .asar file?"
msgstr ""
#. {ph0}: <code>resources</code>
#: website/public/get-started/index.html:1583
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "Electron apps usually keep it in a {ph0} folder:"
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#. {ph2}: <code
#. >C:\Users\&lt;you&gt;\AppData\Local\Programs\&lt;App&gt;\resources\app.asar</code >
#: website/public/get-started/index.html:1588
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "{ph0}Windows:{ph1} {ph2}"
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#. {ph2}: <code >/Applications/&lt;App&gt;.app/Contents/Resources/app.asar</code >
#. {ph3}: <em>
#. {ph4}: </em>
#: website/public/get-started/index.html:1594
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
"{ph0}macOS:{ph1} {ph2} (right-click the app and choose {ph3}Show Package "
"Contents{ph4})"
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#. {ph2}: <code>/opt/&lt;App&gt;/resources/app.asar</code>
#: website/public/get-started/index.html:1602
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "{ph0}Linux:{ph1} often {ph2}"
msgstr ""
#. {ph0}: <code>app.asar</code>
#: website/public/get-started/index.html:1607
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "Some apps install elsewhere. Search the app's folder for {ph0}."
msgstr ""
#: website/public/get-started/index.html:1612
msgctxt "page:get-started/index.html"
msgid ""
"The result identifies the app, shows connections between modules and gives their "
"source locations. Connections REA cannot resolve are marked in the result."
msgstr ""
#. {ph0}: <code>rea</code>
#: website/public/get-started/index.html:1617
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "If you'd like a permanent {ph0} command in your shell:"
msgstr ""
#: website/public/get-started/index.html:1623
msgctxt "page:get-started/index.html"
msgid "Install the CLI"
msgstr ""
#. {ph0}: <a href="../guides/javascript/" >
#. {ph1}: </a >
#: website/public/get-started/index.html:1635
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "{ph0}Continue with the JavaScript application guide{ph1}"
msgstr ""
#. {ph0}: <code>main</code>
#: website/public/get-started/index.html:1654
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
"Replace {ph0} with a function name or address from the target's function list. Ghidra "
"must be configured first."
msgstr ""
#: website/public/get-started/index.html:1658
msgctxt "page:get-started/index.html"
msgid "On macOS or Linux, you can also use the curl installer after preparing Node.js:"
msgstr ""
#. {ph0}: <code>rea setup</code>
#: website/public/get-started/index.html:1676
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "Follow the setup prompts to connect your agent. If they don't appear, run {ph0}."
msgstr ""
#. {ph0}: <code>rea</code>
#. {ph1}: <code>"$HOME/.local/bin/rea" setup</code>
#: website/public/get-started/index.html:1680
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
"If your shell can't find {ph0}, use the executable path printed by the installer. On "
"Linux, the default setup command is {ph1}."
msgstr ""
#: website/public/get-started/index.html:1689
msgctxt "page:get-started/index.html"
msgid "Getting help"
msgstr ""
#: website/public/get-started/index.html:1691
msgctxt "page:get-started/index.html"
msgid "If your agent doesn't see REA"
msgstr ""
#. {ph0}: <code>doctor</code>
#: website/public/get-started/index.html:1692
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
"Restart or reconnect the client after setup. Check its REA connection with {ph0}; for "
"Codex:"
msgstr ""
#: website/public/get-started/index.html:1696
msgctxt "page:get-started/index.html"
msgid ""
"Use the client check in step 3 with your setup ID. In editor clients, enable REA in "
"MCP settings and allow its tools in the agent chat."
msgstr ""
#: website/public/get-started/index.html:1703
msgctxt "page:get-started/index.html"
msgid "If a provider needs attention"
msgstr ""
#: website/public/get-started/index.html:1704
msgctxt "page:get-started/index.html"
msgid "Check the provider you're using. For Ghidra:"
msgstr ""
#: website/public/get-started/index.html:1707
msgctxt "page:get-started/index.html"
msgid "Check one provider"
msgstr ""
#: website/public/get-started/index.html:1719
msgctxt "page:get-started/index.html"
msgid "The report gives the failed check and a suggested next step."
msgstr ""
#: website/public/get-started/index.html:1724
msgctxt "page:get-started/index.html"
msgid "Windows, WSL and paths with spaces"
msgstr ""
#: website/public/get-started/index.html:1725
msgctxt "page:get-started/index.html"
msgid ""
"Use Windows PowerShell for Windows clients and analysis tools. If your agent runs "
"inside WSL, install Node.js and REA inside that Linux environment and use Linux paths "
"there. Headless providers run on the same host as REA."
msgstr ""
#: website/public/get-started/index.html:1734
msgctxt "page:get-started/index.html"
msgid "Windows setup command:"
msgstr ""
#: website/public/get-started/index.html:1751
msgctxt "page:get-started/index.html"
msgid "Update or remove REA"
msgstr ""
#: website/public/get-started/index.html:1752
msgctxt "page:get-started/index.html"
msgid ""
"To refresh your agent connection, run the latest setup command again, review its plan "
"and restart your client."
msgstr ""
#. {ph0}: <code>rea update</code>
#. {ph1}: <code>npx rea-agents@latest uninstall</code>
#: website/public/get-started/index.html:1770
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
"If you installed the global CLI, update it with {ph0}. Use {ph1} to remove REA's "
"client configuration and skill."
msgstr ""
#. {ph0}: <a
#. href="https://github.com/morluto/rea/blob/main/docs/installation.md#diagnose-update-
#. and-remove" >
#. {ph1}: </a >
#: website/public/get-started/index.html:1776
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "{ph0}Update and uninstall details{ph1}"
msgstr ""
#. {ph0}: <a href="../faq/">
#. {ph1}: </a >
#. {ph2}: <span>
#. {ph3}: </span>
#: website/public/get-started/index.html:1784
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "{ph0}REA FAQ{ph1}{ph2}Quick answers on updates, agents and analysis.{ph3}"
msgstr ""
#. {ph0}: <a href="../guides/">
#. {ph1}: </a >
#. {ph2}: <span >
#. {ph3}: </span >
#: website/public/get-started/index.html:1788
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
"{ph0}Choose an investigation guide{ph1}{ph2}Worked examples for a binary, an Electron "
"app and a browser.{ph3}"
msgstr ""
#. {ph0}: <a href="https://github.com/morluto/rea/issues">
#. {ph1}: </a >
#. {ph2}: <span>
#. {ph3}: </span>
#: website/public/get-started/index.html:1795
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
"{ph0}GitHub issues{ph1}{ph2}Report a problem with the command and diagnostics.{ph3}"
msgstr ""
#. {ph0}: <a href="https://discord.gg/GkcryMnJDM">
#. {ph1}: </a >
#. {ph2}: <span>
#. {ph3}: </span>
#: website/public/get-started/index.html:1799
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "{ph0}REA community{ph1}{ph2}Questions, investigations and work in progress.{ph3}"
msgstr ""
#: website/public/get-started/index.html:6
msgctxt "page:get-started/index.html"
msgid "Install REA and Set Up Your Coding Agent"
msgstr ""
#: website/public/get-started/index.html:7
msgctxt "page:get-started/index.html"
msgid ""
"Connect REA to your coding agent or inspect a local JavaScript or Electron app from "
"the terminal. Setup, first questions and native provider guides."
msgstr ""
#: website/public/get-started/index.html:223
msgctxt "page:get-started/index.html"
msgid "REA getting started guide"
msgstr ""
#: website/public/get-started/index.html:269
msgctxt "page:get-started/index.html"
msgid "Copy Node.js version check"
msgstr ""
#: website/public/get-started/index.html:292
msgctxt "page:get-started/index.html"
msgid "Copy Node.js installation command for Windows"
msgstr ""
#: website/public/get-started/index.html:322
msgctxt "page:get-started/index.html"
msgid "Copy Windows REA setup command"
msgstr ""
#: website/public/get-started/index.html:347
msgctxt "page:get-started/index.html"
msgid "Copy Homebrew Node.js installation command"
msgstr ""
#: website/public/get-started/index.html:370
msgctxt "page:get-started/index.html"
msgid "Copy fnm installation command for Linux"
msgstr ""
#: website/public/get-started/index.html:385
msgctxt "page:get-started/index.html"
msgid "Copy Node.js 24 commands for Linux"
msgstr ""
#: website/public/get-started/index.html:419 website/public/get-started/index.html:450
#: website/public/get-started/index.html:464 website/public/get-started/index.html:482
#: website/public/get-started/index.html:534 website/public/get-started/index.html:548
#: website/public/get-started/index.html:580 website/public/get-started/index.html:609
#: website/public/get-started/index.html:744 website/public/get-started/index.html:799
#: website/public/get-started/index.html:814 website/public/get-started/index.html:862
#: website/public/get-started/index.html:1047 website/public/get-started/index.html:1109
#: website/public/get-started/index.html:1132 website/public/get-started/index.html:1156
#: website/public/get-started/index.html:1204 website/public/get-started/index.html:1279
#: website/public/get-started/index.html:1305 website/public/get-started/index.html:1322
#: website/public/get-started/index.html:1643 website/public/get-started/index.html:1665
#: website/public/get-started/index.html:1738 website/public/get-started/index.html:1759
msgctxt "page:get-started/index.html"
msgid "Copy command"
msgstr ""
#: website/public/get-started/index.html:774
msgctxt "page:get-started/index.html"
msgid "Copy REA installation prompt"
msgstr ""
#: website/public/get-started/index.html:895
msgctxt "page:get-started/index.html"
msgid "Copy Notes investigation prompt"
msgstr ""
#: website/public/get-started/index.html:1565
msgctxt "page:get-started/index.html"
msgid "Copy JavaScript analysis command"
msgstr ""
#: website/public/get-started/index.html:1624
msgctxt "page:get-started/index.html"
msgid "Copy CLI installation command"
msgstr ""
#: website/public/get-started/index.html:1708
msgctxt "page:get-started/index.html"
msgid "Copy provider diagnosis command"
msgstr ""
#: website/public/get-started/index.html:1823
msgctxt "page:get-started/index.html"
msgid "Back to top"
msgstr ""
#: website/public/guides/browser/index.html:107
msgctxt "page:guides/browser/index.html"
msgid "Skip to content"
msgstr ""
#. {ph0}: <a href="../../">
#. {ph1}: </a>
#. {ph2}: <a href="../">
#. {ph3}: </a>
#: website/public/guides/browser/index.html:199
#, python-brace-format
msgctxt "page:guides/browser/index.html"
msgid "{ph0}Home{ph1} / {ph2}Guides{ph3} / Browser observation"
msgstr ""
#. {ph0}: <br />
#: website/public/guides/browser/index.html:203
#, python-brace-format
msgctxt "page:guides/browser/index.html"
msgid "See what happens{ph0}when you click."
msgstr ""
#: website/public/guides/browser/index.html:204
msgctxt "page:guides/browser/index.html"
msgid ""
"Use a small browser app to connect an action, its network request and the JavaScript "
"that builds a download."
msgstr ""
#: website/public/guides/browser/index.html:211
msgctxt "page:guides/browser/index.html"
msgid "In this guide"
msgstr ""
#. {ph0}: <a href="#example">
#. {ph1}: </a>
#: website/public/guides/browser/index.html:213
#, python-brace-format
msgctxt "page:guides/browser/index.html"
msgid "{ph0}The example{ph1}"
msgstr ""
#. {ph0}: <a href="#prepare">
#. {ph1}: </a>
#: website/public/guides/browser/index.html:214
#, python-brace-format
msgctxt "page:guides/browser/index.html"
msgid "{ph0}Open the browser{ph1}"
msgstr ""
#. {ph0}: <a href="#ask">
#. {ph1}: </a>
#: website/public/guides/browser/index.html:215
#, python-brace-format
msgctxt "page:guides/browser/index.html"
msgid "{ph0}Ask your agent{ph1}"
msgstr ""
#. {ph0}: <a href="#capture">
#. {ph1}: </a>
#: website/public/guides/browser/index.html:216
#, python-brace-format
msgctxt "page:guides/browser/index.html"
msgid "{ph0}Capture from CLI{ph1}"
msgstr ""
#. {ph0}: <a href="#result">
#. {ph1}: </a>
#: website/public/guides/browser/index.html:217
#, python-brace-format
msgctxt "page:guides/browser/index.html"
msgid "{ph0}Read the request and script{ph1}"
msgstr ""
#: website/public/guides/browser/index.html:222
msgctxt "page:guides/browser/index.html"
msgid "What happens when you click Export?"
msgstr ""
#. {ph0}: <a href="../../examples/notes-web/">
#. {ph1}: </a>
#. {ph2}: <strong>
#. {ph3}: </strong>
#. {ph4}: <code>notes.json</code>
#: website/public/guides/browser/index.html:223
#, python-brace-format
msgctxt "page:guides/browser/index.html"
msgid ""
"The {ph0}Notes browser example{ph1} has an {ph2}Export notes{ph3} button. Clicking it "
"loads {ph4}, formats the two notes as CSV, and starts a download."
msgstr ""
#: website/public/guides/browser/index.html:231
msgctxt "page:guides/browser/index.html"
msgid "From the click to the CSV download"
msgstr ""
#. {ph0}: <span class="flow-label">
#. {ph1}: </span >
#. {ph2}: <span class="flow-node">
#. {ph3}: </span >
#. {ph4}: <span class="flow-note" >
#. {ph5}: </span >
#: website/public/guides/browser/index.html:233
#, python-brace-format
msgctxt "page:guides/browser/index.html"
msgid ""
"{ph0}01 · You{ph1}{ph2}Click Export notes{ph3}{ph4}Perform the action in your browser "
"while the capture is running.{ph5}"
msgstr ""
#. {ph0}: <span class="flow-label">
#. {ph1}: </span >
#. {ph2}: <span class="flow-node">
#. {ph3}: </span >
#. {ph4}: <span class="flow-note" >
#. {ph5}: </span >
#: website/public/guides/browser/index.html:241
#, python-brace-format
msgctxt "page:guides/browser/index.html"
msgid ""
"{ph0}02 · REA{ph1}{ph2}Record the request{ph3}{ph4}Capture the request URL, response "
"status and JSON structure from the selected page.{ph5}"
msgstr ""
#. {ph0}: <span class="flow-label">
#. {ph1}: </span >
#. {ph2}: <span class="flow-node">
#. {ph3}: </span >
#. {ph4}: <span class="flow-note" >
#. {ph5}: <code>fetch("./notes.json")</code>
#. {ph6}: <code>export.js</code>
#. {ph7}: </span >
#: website/public/guides/browser/index.html:249
#, python-brace-format
msgctxt "page:guides/browser/index.html"
msgid ""
"{ph0}03 · Your agent{ph1}{ph2}Read the export code{ph3}{ph4}Connect the observed "
"request to {ph5} in {ph6}.{ph7}"
msgstr ""
#: website/public/guides/browser/index.html:262
msgctxt "page:guides/browser/index.html"
msgid "Start the capture before clicking Export notes."
msgstr ""
#: website/public/guides/browser/index.html:268
msgctxt "page:guides/browser/index.html"
msgid "Open Chrome with remote debugging"
msgstr ""
#: website/public/guides/browser/index.html:269
msgctxt "page:guides/browser/index.html"
msgid ""
"Open the hosted Notes example with a separate browser profile and a local debugging "
"port. On Linux:"
msgstr ""
#: website/public/guides/browser/index.html:275
msgctxt "page:guides/browser/index.html"
msgid "Start the example browser"
msgstr ""
#: website/public/guides/browser/index.html:276
#: website/public/guides/browser/index.html:308
#: website/public/guides/browser/index.html:342
#: website/public/guides/browser/index.html:361
#: website/public/guides/browser/index.html:426
msgctxt "page:guides/browser/index.html"
msgid "Copy"
msgstr ""
#: website/public/guides/browser/index.html:290
msgctxt "page:guides/browser/index.html"
msgid ""
"Use your installed browser's executable path on macOS or Windows. You can replace the "
"page URL with another page you want to inspect."
msgstr ""
#: website/public/guides/browser/index.html:295
msgctxt "page:guides/browser/index.html"
msgid ""
"REA connects to this existing browser. You keep control of the page, perform the "
"action, and close the browser when finished."
msgstr ""
#: website/public/guides/browser/index.html:301
msgctxt "page:guides/browser/index.html"
msgid "Ask your agent to watch one action"
msgstr ""
#. {ph0}: <span class="terminal-dots" aria-hidden="true" >
#. {ph1}: <i>
#. {ph2}: </i>
#. {ph3}: <i>
#. {ph4}: </i>
#. {ph5}: <i>
#. {ph6}: </i>
#. {ph7}: </span >
#: website/public/guides/browser/index.html:304
#, python-brace-format
msgctxt "page:guides/browser/index.html"
msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent"
msgstr ""
#. {ph0}: <span class="prompt-symbol" aria-hidden="true">
#. {ph1}: </span >
#. {ph2}: <span id="browser-prompt" >
#. {ph3}: </span >
#. {ph4}: <span class="terminal-cursor" aria-hidden="true">
#. {ph5}: </span>
#: website/public/guides/browser/index.html:317
#, python-brace-format
msgctxt "page:guides/browser/index.html"
msgid ""
"{ph0}›{ph1}{ph2}Use REA to inspect this page while I click Export notes. What request "
"does it make, and how is the CSV built?{ph3}{ph4}{ph5}"
msgstr ""
#. {ph0}: <code>http://127.0.0.1:9222</code>
#: website/public/guides/browser/index.html:325
#, python-brace-format
msgctxt "page:guides/browser/index.html"
msgid ""
"Example prompt. Give your agent the debugging endpoint, {ph0}, and the page URL. Let "
"it start the capture before you click."
msgstr ""
#: website/public/guides/browser/index.html:330
msgctxt "page:guides/browser/index.html"
msgid ""
"Your agent discovers the page target, starts an observation window, and reads the "
"resulting evidence. It can then inspect the script behind the export."
msgstr ""
#: website/public/guides/browser/index.html:337
msgctxt "page:guides/browser/index.html"
msgid "Or capture from the terminal"
msgstr ""
#: website/public/guides/browser/index.html:338
msgctxt "page:guides/browser/index.html"
msgid "Find the page's target ID:"
msgstr ""
#: website/public/guides/browser/index.html:341
msgctxt "page:guides/browser/index.html"
msgid "Find the page"
msgstr ""
#. {ph0}: <code>TARGET_ID</code>
#: website/public/guides/browser/index.html:354
#, python-brace-format
msgctxt "page:guides/browser/index.html"
msgid ""
"Choose the target with the Notes example URL. Replace {ph0} below with its ID, then "
"run:"
msgstr ""
#: website/public/guides/browser/index.html:360
msgctxt "page:guides/browser/index.html"
msgid "Capture the next ten seconds"
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#: website/public/guides/browser/index.html:376
#, python-brace-format
msgctxt "page:guides/browser/index.html"
msgid ""
"Let the command connect for a few seconds, then click {ph0}Export notes{ph1} in that "
"browser. The result arrives after the observation window ends."
msgstr ""
#: website/public/guides/browser/index.html:381
msgctxt "page:guides/browser/index.html"
msgid ""
"The captured result includes the selected page, network activity during that window, "
"and the shape of the JSON response. Earlier requests are outside this capture."
msgstr ""
#: website/public/guides/browser/index.html:388
msgctxt "page:guides/browser/index.html"
msgid "Read the request and export script"
msgstr ""
#: website/public/guides/browser/index.html:391
msgctxt "page:guides/browser/index.html"
msgid "Recorded with REA 4.1.0 on the local Notes example"
msgstr ""
#: website/public/guides/browser/index.html:396
msgctxt "page:guides/browser/index.html"
msgid "Captured fact"
msgstr ""
#: website/public/guides/browser/index.html:397
msgctxt "page:guides/browser/index.html"
msgid "Value"
msgstr ""
#: website/public/guides/browser/index.html:402
msgctxt "page:guides/browser/index.html"
msgid "Request"
msgstr ""
#: website/public/guides/browser/index.html:406
msgctxt "page:guides/browser/index.html"
msgid "Response"
msgstr ""
#: website/public/guides/browser/index.html:410
msgctxt "page:guides/browser/index.html"
msgid "Request initiator"
msgstr ""
#. {ph0}: <code>export.js</code>
#: website/public/guides/browser/index.html:411
#, python-brace-format
msgctxt "page:guides/browser/index.html"
msgid "{ph0} · script"
msgstr ""
#: website/public/guides/browser/index.html:414
msgctxt "page:guides/browser/index.html"
msgid "Response structure"
msgstr ""
#. {ph0}: <code>notes[]</code>
#. {ph1}: <code>id</code>
#. {ph2}: <code>title</code>
#: website/public/guides/browser/index.html:415
#, python-brace-format
msgctxt "page:guides/browser/index.html"
msgid "{ph0} with {ph1} and {ph2} fields"
msgstr ""
#: website/public/guides/browser/index.html:425
msgctxt "page:guides/browser/index.html"
msgid "Read the loaded scripts"
msgstr ""
#. {ph0}: <code>export.js</code>
#: website/public/guides/browser/index.html:439
#, python-brace-format
msgctxt "page:guides/browser/index.html"
msgid ""
"The request identifies the data source, and REA records {ph0} as its initiator. Read "
"the captured script source to see how the data is used:"
msgstr ""
#. {ph0}: <span translate="no">export.js</span>
#: website/public/guides/browser/index.html:446
#, python-brace-format
msgctxt "page:guides/browser/index.html"
msgid "{ph0} · example source excerpt"
msgstr ""
#. {ph0}: <code>notes.json</code>
#: website/public/guides/browser/index.html:459
#, python-brace-format
msgctxt "page:guides/browser/index.html"
msgid ""
"The download is constructed in the page using the JSON response. The CSV formatting "
"step comes from the script; the network capture establishes that this click requested "
"{ph0}."
msgstr ""
#. {ph0}: <a href="../../examples/notes-web/">
#. {ph1}: </a>
#. {ph2}: <a href="../../examples/notes-web/export.js" download >
#. {ph3}: <span translate="no">export.js</span>
#. {ph4}: </a >
#. {ph5}: <a href="../../examples/notes-web/notes.json" download >
#. {ph6}: <span translate="no">notes.json</span>
#. {ph7}: </a >
#: website/public/guides/browser/index.html:464
#, python-brace-format
msgctxt "page:guides/browser/index.html"
msgid "{ph0}Open the example{ph1} · {ph2}Download {ph3}{ph4} · {ph5}Download {ph6}{ph7}"
msgstr ""
#. {ph0}: <code>notes.json</code>
#: website/public/guides/browser/index.html:475
#, python-brace-format
msgctxt "page:guides/browser/index.html"
msgid ""
"Find the script that requests {ph0}. How does it escape titles containing commas or "
"quotation marks?"
msgstr ""
#. {ph0}: <a href="../javascript/">
#. {ph1}: </a>
#: website/public/guides/browser/index.html:480
#, python-brace-format
msgctxt "page:guides/browser/index.html"
msgid ""
"For an installed JavaScript or Electron app, continue with the {ph0}application "
"workflow{ph1} to follow files and process boundaries."
msgstr ""
#. {ph0}: <a href="https://github.com/morluto/rea/blob/main/docs/web-network-
#. captures.md" >
#. {ph1}: </a >
#: website/public/guides/browser/index.html:485
#, python-brace-format
msgctxt "page:guides/browser/index.html"
msgid ""
"For HTTP request and response bodies, use {ph0}Fiddler Everywhere: SAZ captures, MCP "
"and public skills{ph1}. Export SAZ or HAR 1.2 for offline REA capture Evidence, or "
"connect Everywhere's MCP server to inspect captured traffic with your agent."
msgstr ""
#: website/public/guides/browser/index.html:6
msgctxt "page:guides/browser/index.html"
msgid "Browser and Network Analysis — REA"
msgstr ""
#: website/public/guides/browser/index.html:7
msgctxt "page:guides/browser/index.html"
msgid ""
"Observe a Notes export with REA: select a browser page, capture a click, inspect the "
"request and follow the export script."
msgstr ""
#: website/public/guides/browser/index.html:210
msgctxt "page:guides/browser/index.html"
msgid "On this page"
msgstr ""
#: website/public/guides/browser/index.html:220
msgctxt "page:guides/browser/index.html"
msgid "Browser observation"
msgstr ""
#: website/public/guides/browser/index.html:276
msgctxt "page:guides/browser/index.html"
msgid "Copy start the example browser"
msgstr ""
#: website/public/guides/browser/index.html:308
msgctxt "page:guides/browser/index.html"
msgid "Copy example prompt"
msgstr ""
#: website/public/guides/browser/index.html:342
msgctxt "page:guides/browser/index.html"
msgid "Copy find the page"
msgstr ""
#: website/public/guides/browser/index.html:361
msgctxt "page:guides/browser/index.html"
msgid "Copy capture the next ten seconds"
msgstr ""
#: website/public/guides/browser/index.html:426
msgctxt "page:guides/browser/index.html"
msgid "Copy read the loaded scripts"
msgstr ""
#: website/public/guides/browser/index.html:513
msgctxt "page:guides/browser/index.html"
msgid "Back to top"
msgstr ""
#: website/public/guides/index.html:107
msgctxt "page:guides/index.html"
msgid "Skip to content"
msgstr ""
#. {ph0}: <a href="../">
#. {ph1}: </a>
#: website/public/guides/index.html:199
#, python-brace-format
msgctxt "page:guides/index.html"
msgid "{ph0}Home{ph1} / Guides"
msgstr ""
#: website/public/guides/index.html:200
msgctxt "page:guides/index.html"
msgid "REA guides."
msgstr ""
#: website/public/guides/index.html:201
msgctxt "page:guides/index.html"
msgid ""
"Analyze a native function, an Electron export or a browser request. Each guide "
"includes a prompt, code and results."
msgstr ""
#: website/public/guides/index.html:208
msgctxt "page:guides/index.html"
msgid "First investigation"
msgstr ""
#: website/public/guides/index.html:210
msgctxt "page:guides/index.html"
msgid "Set up REA"
msgstr ""
#: website/public/guides/index.html:211
msgctxt "page:guides/index.html"
msgid "Connect your coding agent or use REA from the terminal."
msgstr ""
#: website/public/guides/index.html:212
msgctxt "page:guides/index.html"
msgid "Get started with REA"
msgstr ""
#: website/public/guides/index.html:216
msgctxt "page:guides/index.html"
msgid "Native binaries"
msgstr ""
#: website/public/guides/index.html:218
msgctxt "page:guides/index.html"
msgid "Recover a sound-pan calculation"
msgstr ""
#: website/public/guides/index.html:219
msgctxt "page:guides/index.html"
msgid ""
"Start with a Windows game executable. Inspect instructions, follow a caller, read "
"numeric constants and check the recovered C."
msgstr ""
#: website/public/guides/index.html:224
msgctxt "page:guides/index.html"
msgid "Instructions"
msgstr ""
#: website/public/guides/index.html:225
msgctxt "page:guides/index.html"
msgid "Caller"
msgstr ""
#: website/public/guides/index.html:226
msgctxt "page:guides/index.html"
msgid "Constants"
msgstr ""
#: website/public/guides/index.html:227
msgctxt "page:guides/index.html"
msgid "C function"
msgstr ""
#: website/public/guides/index.html:229
msgctxt "page:guides/index.html"
msgid "Native analysis guide"
msgstr ""
#: website/public/guides/index.html:233
msgctxt "page:guides/index.html"
msgid "JavaScript & Electron"
msgstr ""
#: website/public/guides/index.html:235
msgctxt "page:guides/index.html"
msgid "Follow a CSV export"
msgstr ""
#: website/public/guides/index.html:236
msgctxt "page:guides/index.html"
msgid ""
"A small Notes app spreads one feature across the renderer, preload and main process. "
"Use REA to connect the API, IPC channel and file writer."
msgstr ""
#: website/public/guides/index.html:242
msgctxt "page:guides/index.html"
msgid "Button"
msgstr ""
#: website/public/guides/index.html:243
msgctxt "page:guides/index.html"
msgid "Preload API"
msgstr ""
#: website/public/guides/index.html:244
msgctxt "page:guides/index.html"
msgid "IPC"
msgstr ""
#: website/public/guides/index.html:244
msgctxt "page:guides/index.html"
msgid "CSV file"
msgstr ""
#: website/public/guides/index.html:246
msgctxt "page:guides/index.html"
msgid "JavaScript & Electron guide"
msgstr ""
#. {ph0}: <a href="../showcase/notion/">
#. {ph1}: </a>
#: website/public/guides/index.html:249
#, python-brace-format
msgctxt "page:guides/index.html"
msgid "For a larger packaged app, follow {ph0}Notion's clipboard bridge{ph1}."
msgstr ""
#: website/public/guides/index.html:256
msgctxt "page:guides/index.html"
msgid "Browser behavior"
msgstr ""
#: website/public/guides/index.html:258
msgctxt "page:guides/index.html"
msgid "Observe a click"
msgstr ""
#: website/public/guides/index.html:259
msgctxt "page:guides/index.html"
msgid ""
"Open a working Notes example, capture an export request and find the code that turns "
"its response into a download."
msgstr ""
#: website/public/guides/index.html:264
msgctxt "page:guides/index.html"
msgid "Your click"
msgstr ""
#: website/public/guides/index.html:265
msgctxt "page:guides/index.html"
msgid "Captured request"
msgstr ""
#: website/public/guides/index.html:266
msgctxt "page:guides/index.html"
msgid "Export script"
msgstr ""
#: website/public/guides/index.html:268
msgctxt "page:guides/index.html"
msgid "Browser observation guide"
msgstr ""
#: website/public/guides/index.html:6
msgctxt "page:guides/index.html"
msgid "Reverse Engineering Guides — REA"
msgstr ""
#: website/public/guides/index.html:7
msgctxt "page:guides/index.html"
msgid ""
"Learn REA through short worked examples: a native calculation, an Electron CSV export "
"and a browser request."
msgstr ""
#: website/public/guides/index.html:288
msgctxt "page:guides/index.html"
msgid "Back to top"
msgstr ""
#: website/public/guides/javascript/index.html:107
msgctxt "page:guides/javascript/index.html"
msgid "Skip to content"
msgstr ""
#. {ph0}: <a href="../../">
#. {ph1}: </a>
#. {ph2}: <a href="../">
#. {ph3}: </a>
#: website/public/guides/javascript/index.html:199
#, python-brace-format
msgctxt "page:guides/javascript/index.html"
msgid "{ph0}Home{ph1} / {ph2}Guides{ph3} / JavaScript & Electron"
msgstr ""
#. {ph0}: <br />
#: website/public/guides/javascript/index.html:203
#, python-brace-format
msgctxt "page:guides/javascript/index.html"
msgid "Trace an Electron{ph0}CSV export."
msgstr ""
#: website/public/guides/javascript/index.html:204
msgctxt "page:guides/javascript/index.html"
msgid ""
"Follow a button click from the page API, through Electron IPC, to the CSV file writer."
msgstr ""
#: website/public/guides/javascript/index.html:211
msgctxt "page:guides/javascript/index.html"
msgid "In this guide"
msgstr ""
#. {ph0}: <a href="#example">
#. {ph1}: </a>
#: website/public/guides/javascript/index.html:213
#, python-brace-format
msgctxt "page:guides/javascript/index.html"
msgid "{ph0}The example{ph1}"
msgstr ""
#. {ph0}: <a href="#ask">
#. {ph1}: </a>
#: website/public/guides/javascript/index.html:214
#, python-brace-format
msgctxt "page:guides/javascript/index.html"
msgid "{ph0}Ask your agent{ph1}"
msgstr ""
#. {ph0}: <a href="#follow">
#. {ph1}: </a>
#: website/public/guides/javascript/index.html:215
#, python-brace-format
msgctxt "page:guides/javascript/index.html"
msgid "{ph0}Trace the export code{ph1}"
msgstr ""
#. {ph0}: <a href="#try">
#. {ph1}: </a>
#: website/public/guides/javascript/index.html:216
#, python-brace-format
msgctxt "page:guides/javascript/index.html"
msgid "{ph0}Try the example{ph1}"
msgstr ""
#. {ph0}: <a href="#next">
#. {ph1}: </a>
#: website/public/guides/javascript/index.html:217
#, python-brace-format
msgctxt "page:guides/javascript/index.html"
msgid "{ph0}Inspect the CSV writer{ph1}"
msgstr ""
#: website/public/guides/javascript/index.html:222
msgctxt "page:guides/javascript/index.html"
msgid "Where does “Export notes” go?"
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#: website/public/guides/javascript/index.html:223
#, python-brace-format
msgctxt "page:guides/javascript/index.html"
msgid ""
"This guide uses a small Electron app. Clicking {ph0}Export notes{ph1} calls an API in "
"the page, crosses into the main process, and writes a CSV. The behavior is spread "
"across several files."
msgstr ""
#: website/public/guides/javascript/index.html:230
msgctxt "page:guides/javascript/index.html"
msgid "The CSV export across Electron processes"
msgstr ""
#. {ph0}: <span class="flow-label">
#. {ph1}: </span >
#. {ph2}: <span class="flow-node">
#. {ph3}: <code>notes.exportCsv()</code>
#. {ph4}: </span >
#. {ph5}: <span class="flow-note" >
#. {ph6}: <code>renderer.js</code>
#. {ph7}: <code>preload.js</code>
#. {ph8}: </span >
#: website/public/guides/javascript/index.html:234
#, python-brace-format
msgctxt "page:guides/javascript/index.html"
msgid ""
"{ph0}Renderer → preload{ph1}{ph2}{ph3}{ph4}{ph5}{ph6} calls the API exposed by "
"{ph7}.{ph8}"
msgstr ""
#. {ph0}: <span class="flow-label">
#. {ph1}: </span >
#. {ph2}: <span class="flow-node">
#. {ph3}: <code>notes:export</code>
#. {ph4}: </span >
#. {ph5}: <span class="flow-note" >
#. {ph6}: </span >
#: website/public/guides/javascript/index.html:242
#, python-brace-format
msgctxt "page:guides/javascript/index.html"
msgid ""
"{ph0}Between processes{ph1}{ph2}{ph3}{ph4}{ph5}The preload invokes an IPC channel: a "
"named message to the main process.{ph6}"
msgstr ""
#. {ph0}: <span class="flow-label">
#. {ph1}: </span >
#. {ph2}: <span class="flow-node">
#. {ph3}: </span >
#. {ph4}: <span class="flow-note" >
#. {ph5}: <code>main.js</code>
#. {ph6}: </span >
#: website/public/guides/javascript/index.html:250
#, python-brace-format
msgctxt "page:guides/javascript/index.html"
msgid ""
"{ph0}Main process{ph1}{ph2}An export handler{ph3}{ph4}{ph5} handles that channel and "
"calls the CSV writer.{ph6}"
msgstr ""
#. {ph0}: <code>csv.js</code>
#. {ph1}: <code>main.js</code>
#. {ph2}: <code>downloads/notes.csv</code>
#: website/public/guides/javascript/index.html:259
#, python-brace-format
msgctxt "page:guides/javascript/index.html"
msgid "{ph0} formats the notes → {ph1} writes {ph2}."
msgstr ""
#: website/public/guides/javascript/index.html:263
msgctxt "page:guides/javascript/index.html"
msgid ""
"REA matches the literal IPC call to its handler and identifies the exposed API. The "
"path is inferred from code; a runtime capture can check what executes."
msgstr ""
#: website/public/guides/javascript/index.html:271
msgctxt "page:guides/javascript/index.html"
msgid "Ask about the CSV export"
msgstr ""
#. {ph0}: <a href="../../get-started/#agent">
#. {ph1}: </a>
#: website/public/guides/javascript/index.html:272
#, python-brace-format
msgctxt "page:guides/javascript/index.html"
msgid "{ph0}Connect your agent to REA{ph1} and give it the app directory or ASAR file:"
msgstr ""
#. {ph0}: <span class="terminal-dots" aria-hidden="true" >
#. {ph1}: <i>
#. {ph2}: </i>
#. {ph3}: <i>
#. {ph4}: </i>
#. {ph5}: <i>
#. {ph6}: </i>
#. {ph7}: </span >
#: website/public/guides/javascript/index.html:278
#, python-brace-format
msgctxt "page:guides/javascript/index.html"
msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent"
msgstr ""
#: website/public/guides/javascript/index.html:282
#: website/public/guides/javascript/index.html:431
msgctxt "page:guides/javascript/index.html"
msgid "Copy"
msgstr ""
#. {ph0}: <span class="prompt-symbol" aria-hidden="true">
#. {ph1}: </span >
#. {ph2}: <span id="javascript-prompt" >
#. {ph3}: </span >
#. {ph4}: <span class="terminal-cursor" aria-hidden="true">
#. {ph5}: </span>
#: website/public/guides/javascript/index.html:291
#, python-brace-format
msgctxt "page:guides/javascript/index.html"
msgid ""
"{ph0}›{ph1}{ph2}Use REA to find what happens when I export notes in this app. Where is"
" the CSV created?{ph3}{ph4}{ph5}"
msgstr ""
#. {ph0}: <code>app.asar</code>
#: website/public/guides/javascript/index.html:299
#, python-brace-format
msgctxt "page:guides/javascript/index.html"
msgid "Example prompt. Include the absolute path to the application folder or {ph0}."
msgstr ""
#: website/public/guides/javascript/index.html:303
msgctxt "page:guides/javascript/index.html"
msgid ""
"REA reads the application files and builds a map of entrypoints, modules and process "
"boundaries. Your agent uses that map to narrow the investigation to the export "
"feature."
msgstr ""
#: website/public/guides/javascript/index.html:310
msgctxt "page:guides/javascript/index.html"
msgid "Trace the export code"
msgstr ""
#: website/public/guides/javascript/index.html:311
msgctxt "page:guides/javascript/index.html"
msgid "The page calls a small API"
msgstr ""
#. {ph0}: <span translate="no">renderer.js</span>
#: website/public/guides/javascript/index.html:314
#: website/public/guides/javascript/index.html:330
#: website/public/guides/javascript/index.html:345
#, python-brace-format
msgctxt "page:guides/javascript/index.html"
msgid "{ph0} · example source"
msgstr ""
#: website/public/guides/javascript/index.html:324
msgctxt "page:guides/javascript/index.html"
msgid ""
"The page knows the method name. The implementation lives in the preload, which exposes"
" it to the renderer."
msgstr ""
#. {ph0}: <code>notes.exportCsv</code>
#. {ph1}: <code>notes:export</code>
#: website/public/guides/javascript/index.html:338
#, python-brace-format
msgctxt "page:guides/javascript/index.html"
msgid ""
"REA records {ph0} and the literal channel {ph1}. It pairs that invocation with the "
"single matching handler in the main process."
msgstr ""
#. {ph0}: <code>csv.js</code>
#. {ph1}: <code>notes.csv</code>
#: website/public/guides/javascript/index.html:355
#, python-brace-format
msgctxt "page:guides/javascript/index.html"
msgid ""
"Reading the handler answers the original question: {ph0} formats the notes, and the "
"main process writes {ph1} into the user's Downloads folder."
msgstr ""
#: website/public/guides/javascript/index.html:362
msgctxt "page:guides/javascript/index.html"
msgid "REA result · summary.ipc excerpt"
msgstr ""
#: website/public/guides/javascript/index.html:372
msgctxt "page:guides/javascript/index.html"
msgid ""
"Recorded by REA 4.1.0 on the downloadable example below. Source locations accompany "
"the API, channel and handler findings."
msgstr ""
#: website/public/guides/javascript/index.html:378
msgctxt "page:guides/javascript/index.html"
msgid "Analyze the example yourself"
msgstr ""
#. {ph0}: <code>notes-example</code>
#. {ph1}: <span translate="no">Node.js</span>
#: website/public/guides/javascript/index.html:379
#, python-brace-format
msgctxt "page:guides/javascript/index.html"
msgid ""
"Download the example and unzip it. The archive contains the complete {ph0} folder. "
"Analyze it with {ph1} and npm; Electron is not needed for this example."
msgstr ""
#. {ph0}: <a class="button" href="../../examples/notes-example.zip" download="notes-
#. example.zip" >
#. {ph1}: </a >
#: website/public/guides/javascript/index.html:385
#, python-brace-format
msgctxt "page:guides/javascript/index.html"
msgid "{ph0}Download example ZIP{ph1}"
msgstr ""
#: website/public/guides/javascript/index.html:394
msgctxt "page:guides/javascript/index.html"
msgid "Browse the six source files"
msgstr ""
#: website/public/guides/javascript/index.html:430
msgctxt "page:guides/javascript/index.html"
msgid "Static application analysis"
msgstr ""
#. {ph0}: <code>normalized_result.summary.ipc</code>
#. {ph1}: <code>normalized_result.graph</code>
#: website/public/guides/javascript/index.html:443
#, python-brace-format
msgctxt "page:guides/javascript/index.html"
msgid ""
"Replace the path with the folder you unzipped. You should find one IPC channel and one"
" matching handler in {ph0}. Source locations are in {ph1}."
msgstr ""
#: website/public/guides/javascript/index.html:449
msgctxt "page:guides/javascript/index.html"
msgid ""
"For your own app, use the same command with its directory or ASAR path. An agent can "
"follow a literal string, API name or IPC channel with REA's feature tracing tools."
msgstr ""
#: website/public/guides/javascript/index.html:456
msgctxt "page:guides/javascript/index.html"
msgid "Inspect the CSV writer"
msgstr ""
#. {ph0}: <code>notes:export</code>
#: website/public/guides/javascript/index.html:458
#, python-brace-format
msgctxt "page:guides/javascript/index.html"
msgid ""
"Follow {ph0} to its handler. Which inputs reach the CSV writer, and what happens if "
"writing the file fails?"
msgstr ""
#: website/public/guides/javascript/index.html:464
msgctxt "page:guides/javascript/index.html"
msgid ""
"Use the source locations to inspect those details. Computed channel names and "
"ambiguous handlers can remain unresolved; runtime observations give you another way to"
" investigate them."
msgstr ""
#. {ph0}: <a href="../../showcase/notion/" >
#. {ph1}: </a >
#. {ph2}: <span>
#. {ph3}: </span>
#: website/public/guides/javascript/index.html:470
#, python-brace-format
msgctxt "page:guides/javascript/index.html"
msgid ""
"{ph0}Follow Notion's clipboard bridge{ph1} {ph2}Apply the same approach to a packaged "
"Electron app.{ph3}"
msgstr ""
#. {ph0}: <a href="../browser/">
#. {ph1}: </a >
#. {ph2}: <span >
#. {ph3}: </span >
#: website/public/guides/javascript/index.html:476
#, python-brace-format
msgctxt "page:guides/javascript/index.html"
msgid ""
"{ph0}Observe a browser export{ph1}{ph2}Capture a real click and see which request it "
"makes.{ph3}"
msgstr ""
#. {ph0}: <a href="../native/">
#. {ph1}: </a >
#. {ph2}: <span >
#. {ph3}: </span >
#: website/public/guides/javascript/index.html:482
#, python-brace-format
msgctxt "page:guides/javascript/index.html"
msgid ""
"{ph0}Follow a native function{ph1}{ph2}Continue into a binary when a feature depends "
"on native code.{ph3}"
msgstr ""
#: website/public/guides/javascript/index.html:6
msgctxt "page:guides/javascript/index.html"
msgid "JavaScript and Electron Analysis — REA"
msgstr ""
#: website/public/guides/javascript/index.html:7
msgctxt "page:guides/javascript/index.html"
msgid ""
"Trace a Notes CSV export through a renderer API, preload and IPC handler with REA. "
"Includes downloadable example files and a verified analysis result."
msgstr ""
#: website/public/guides/javascript/index.html:210
msgctxt "page:guides/javascript/index.html"
msgid "On this page"
msgstr ""
#: website/public/guides/javascript/index.html:220
msgctxt "page:guides/javascript/index.html"
msgid "JavaScript & Electron"
msgstr ""
#: website/public/guides/javascript/index.html:282
msgctxt "page:guides/javascript/index.html"
msgid "Copy example prompt"
msgstr ""
#: website/public/guides/javascript/index.html:431
msgctxt "page:guides/javascript/index.html"
msgid "Copy static application analysis"
msgstr ""
#: website/public/guides/javascript/index.html:509
msgctxt "page:guides/javascript/index.html"
msgid "Back to top"
msgstr ""
#: website/public/guides/native/index.html:107
msgctxt "page:guides/native/index.html"
msgid "Skip to content"
msgstr ""
#. {ph0}: <a href="../../">
#. {ph1}: </a>
#. {ph2}: <a href="../">
#. {ph3}: </a>
#: website/public/guides/native/index.html:199
#, python-brace-format
msgctxt "page:guides/native/index.html"
msgid "{ph0}Home{ph1} / {ph2}Guides{ph3} / Native analysis"
msgstr ""
#. {ph0}: <br />
#: website/public/guides/native/index.html:202
#, python-brace-format
msgctxt "page:guides/native/index.html"
msgid "Recover DX-Ball's{ph0}sound-pan calculation."
msgstr ""
#: website/public/guides/native/index.html:203
msgctxt "page:guides/native/index.html"
msgid ""
"Inspect the original instructions, identify the input and constants, then check the "
"recovered C."
msgstr ""
#: website/public/guides/native/index.html:210
msgctxt "page:guides/native/index.html"
msgid "In this guide"
msgstr ""
#. {ph0}: <a href="#example">
#. {ph1}: </a>
#: website/public/guides/native/index.html:212
#, python-brace-format
msgctxt "page:guides/native/index.html"
msgid "{ph0}The example{ph1}"
msgstr ""
#. {ph0}: <a href="#ask">
#. {ph1}: </a>
#: website/public/guides/native/index.html:213
#, python-brace-format
msgctxt "page:guides/native/index.html"
msgid "{ph0}Ask your agent{ph1}"
msgstr ""
#. {ph0}: <a href="#follow">
#. {ph1}: </a>
#: website/public/guides/native/index.html:214
#, python-brace-format
msgctxt "page:guides/native/index.html"
msgid "{ph0}Read the REA results{ph1}"
msgstr ""
#. {ph0}: <a href="#result">
#. {ph1}: </a>
#: website/public/guides/native/index.html:215
#, python-brace-format
msgctxt "page:guides/native/index.html"
msgid "{ph0}Recover and check{ph1}"
msgstr ""
#. {ph0}: <a href="#try">
#. {ph1}: </a>
#: website/public/guides/native/index.html:216
#, python-brace-format
msgctxt "page:guides/native/index.html"
msgid "{ph0}Use your own binary{ph1}"
msgstr ""
#: website/public/guides/native/index.html:221
msgctxt "page:guides/native/index.html"
msgid "Calculate left/right sound panning"
msgstr ""
#: website/public/guides/native/index.html:222
msgctxt "page:guides/native/index.html"
msgid ""
"In DX-Ball, a brick hit supplies a horizontal screen position. The sound code turns it"
" into a left/right panning value."
msgstr ""
#. {ph0}: <code>0x00406400</code>
#. {ph1}: <code>__ftol()</code>
#: website/public/guides/native/index.html:226
#, python-brace-format
msgctxt "page:guides/native/index.html"
msgid ""
"The starting function, {ph0}, has a short decompiler result: a call to {ph1}. REA also"
" returns its instructions and callers, which give the agent a way to investigate the "
"missing arithmetic."
msgstr ""
#: website/public/guides/native/index.html:233
msgctxt "page:guides/native/index.html"
msgid "New to these terms?"
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#. {ph2}: <code>MOV</code>
#. {ph3}: <code>ADD</code>
#: website/public/guides/native/index.html:235
#, python-brace-format
msgctxt "page:guides/native/index.html"
msgid ""
"{ph0}Instructions:{ph1} the steps the processor runs, shown in readable form such as "
"{ph2} or {ph3}."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#: website/public/guides/native/index.html:240
#, python-brace-format
msgctxt "page:guides/native/index.html"
msgid ""
"{ph0}Decompiler result / pseudocode:{ph1} an analysis tool's attempt to turn "
"instructions back into C-like code. It can miss parts, as in this example."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#: website/public/guides/native/index.html:245
#, python-brace-format
msgctxt "page:guides/native/index.html"
msgid ""
"{ph0}Caller:{ph1} a function that calls this one. It shows which values are passed in."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#. {ph2}: <code>0x00406400</code>
#: website/public/guides/native/index.html:249
#, python-brace-format
msgctxt "page:guides/native/index.html"
msgid ""
"{ph0}Address:{ph1} a location in the program, written in hexadecimal, such as {ph2}."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#: website/public/guides/native/index.html:253
#, python-brace-format
msgctxt "page:guides/native/index.html"
msgid ""
"{ph0}Constants:{ph1} fixed numbers stored in the program, read as raw bytes and "
"decoded."
msgstr ""
#: website/public/guides/native/index.html:260
msgctxt "page:guides/native/index.html"
msgid "Three pieces of evidence, one calculation"
msgstr ""
#. {ph0}: <span class="flow-label">
#. {ph1}: </span >
#. {ph2}: <span class="flow-node">
#. {ph3}: </span >
#. {ph4}: <span class="flow-note" >
#. {ph5}: </span >
#: website/public/guides/native/index.html:264
#, python-brace-format
msgctxt "page:guides/native/index.html"
msgid ""
"{ph0}01 · Instructions{ph1}{ph2}An integer input{ph3}{ph4}A stack read supplies the "
"value used by the floating-point instructions.{ph5}"
msgstr ""
#. {ph0}: <span class="flow-label">
#. {ph1}: </span >
#. {ph2}: <span class="flow-node">
#. {ph3}: </span >
#. {ph4}: <span class="flow-note" >
#. {ph5}: <code>20 + 30 × tile_x</code>
#. {ph6}: </span >
#: website/public/guides/native/index.html:272
#, python-brace-format
msgctxt "page:guides/native/index.html"
msgid ""
"{ph0}02 · Caller{ph1}{ph2}A screen coordinate{ph3}{ph4}The brick-hit caller passes "
"{ph5}.{ph6}"
msgstr ""
#. {ph0}: <span class="flow-label">
#. {ph1}: </span >
#. {ph2}: <span class="flow-node">
#. {ph3}: </span >
#. {ph4}: <span class="flow-note" >
#. {ph5}: <code>1.5625</code>
#. {ph6}: <code>500.0</code>
#. {ph7}: </span >
#: website/public/guides/native/index.html:280
#, python-brace-format
msgctxt "page:guides/native/index.html"
msgid ""
"{ph0}03 · Data bytes{ph1}{ph2}The numeric constants{ph3}{ph4}Referenced bytes decode "
"to {ph5}, {ph6} and a scale value.{ph7}"
msgstr ""
#: website/public/guides/native/index.html:292
msgctxt "page:guides/native/index.html"
msgid ""
"REA supplies the instructions, call relationship and bytes. The agent interprets them "
"together."
msgstr ""
#: website/public/guides/native/index.html:299
msgctxt "page:guides/native/index.html"
msgid "Ask about the behavior"
msgstr ""
#. {ph0}: <a href="../../get-started/#agent" >
#. {ph1}: </a >
#. {ph2}: <a href="../../get-started/#native" >
#. {ph3}: </a >
#: website/public/guides/native/index.html:300
#, python-brace-format
msgctxt "page:guides/native/index.html"
msgid ""
"After {ph0}connecting REA to your agent{ph1} and {ph2}setting up a native analysis "
"tool{ph3}, provide the local executable and a question:"
msgstr ""
#: website/public/guides/native/index.html:311
msgctxt "page:guides/native/index.html"
msgid "Which analysis tool should I use?"
msgstr ""
#: website/public/guides/native/index.html:312
msgctxt "page:guides/native/index.html"
msgid "REA needs one of these to read native programs:"
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#: website/public/guides/native/index.html:314
#, python-brace-format
msgctxt "page:guides/native/index.html"
msgid ""
"{ph0}Hopper{ph1} (macOS or Linux): REA's setup detects it or offers to install it. On "
"macOS, open Hopper once and choose demo mode or activate a license before your first "
"analysis."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#: website/public/guides/native/index.html:320
#, python-brace-format
msgctxt "page:guides/native/index.html"
msgid ""
"{ph0}Ghidra{ph1} (macOS or Linux; experimental on Windows): free, but needs an "
"existing Ghidra 12.1.x installation and a 64-bit JDK 21 or newer."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#: website/public/guides/native/index.html:325
#, python-brace-format
msgctxt "page:guides/native/index.html"
msgid "{ph0}IDA{ph1} (Windows): for an existing IDA setup with an MCP registration."
msgstr ""
#. {ph0}: <a href="../../get-started/#native">
#. {ph1}: </a>
#: website/public/guides/native/index.html:330
#, python-brace-format
msgctxt "page:guides/native/index.html"
msgid "See {ph0}Set up native analysis{ph1} for the steps."
msgstr ""
#. {ph0}: <span class="terminal-dots" aria-hidden="true" >
#. {ph1}: <i>
#. {ph2}: </i>
#. {ph3}: <i>
#. {ph4}: </i>
#. {ph5}: <i>
#. {ph6}: </i>
#. {ph7}: </span >
#: website/public/guides/native/index.html:338
#, python-brace-format
msgctxt "page:guides/native/index.html"
msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent"
msgstr ""
#: website/public/guides/native/index.html:342
#: website/public/guides/native/index.html:473
msgctxt "page:guides/native/index.html"
msgid "Copy"
msgstr ""
#. {ph0}: <span class="prompt-symbol" aria-hidden="true">
#. {ph1}: </span >
#. {ph2}: <span id="native-prompt" >
#. {ph3}: </span >
#. {ph4}: <span class="terminal-cursor" aria-hidden="true">
#. {ph5}: </span>
#: website/public/guides/native/index.html:351
#, python-brace-format
msgctxt "page:guides/native/index.html"
msgid ""
"{ph0}›{ph1}{ph2}Use REA to find how DX-Ball calculates sound panning. Explain the "
"calculation and show the code.{ph3}{ph4}{ph5}"
msgstr ""
#: website/public/guides/native/index.html:359
msgctxt "page:guides/native/index.html"
msgid ""
"Example prompt. Give your agent the path to your local DX-Ball 1.07 executable. REA "
"doesn't include DX-Ball, so use your own copy, or ask the same kind of question about "
"another small Windows program you have."
msgstr ""
#: website/public/guides/native/index.html:366
msgctxt "page:guides/native/index.html"
msgid "How do I get a file's full path?"
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#. {ph2}: <em>
#. {ph3}: </em>
#: website/public/guides/native/index.html:368
#, python-brace-format
msgctxt "page:guides/native/index.html"
msgid ""
"{ph0}Windows:{ph1} in File Explorer, right-click the file and choose {ph2}Copy as "
"path{ph3}. On Windows 10, hold Shift while right-clicking."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#. {ph2}: <em>
#. {ph3}: </em>
#: website/public/guides/native/index.html:373
#, python-brace-format
msgctxt "page:guides/native/index.html"
msgid ""
"{ph0}macOS:{ph1} in Finder, right-click the file, hold Option and choose {ph2}Copy "
"\"…\" as Pathname{ph3}."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#: website/public/guides/native/index.html:377
#, python-brace-format
msgctxt "page:guides/native/index.html"
msgid "{ph0}Any system:{ph1} drag the file into a terminal window and its path appears."
msgstr ""
#: website/public/guides/native/index.html:385
msgctxt "page:guides/native/index.html"
msgid "Read the REA results"
msgstr ""
#: website/public/guides/native/index.html:386
msgctxt "page:guides/native/index.html"
msgid "Read the input"
msgstr ""
#: website/public/guides/native/index.html:389
msgctxt "page:guides/native/index.html"
msgid "REA instruction excerpt · 0x406409"
msgstr ""
#: website/public/guides/native/index.html:395
msgctxt "page:guides/native/index.html"
msgid ""
"The instructions load an integer argument and convert it for floating-point "
"arithmetic. This is the input absent from the first pseudocode view."
msgstr ""
#: website/public/guides/native/index.html:400
msgctxt "page:guides/native/index.html"
msgid "Follow the caller"
msgstr ""
#: website/public/guides/native/index.html:403
msgctxt "page:guides/native/index.html"
msgid "REA caller excerpt · 0x411f5b"
msgstr ""
#. {ph0}: <code>0x14</code>
#: website/public/guides/native/index.html:409
#, python-brace-format
msgctxt "page:guides/native/index.html"
msgid ""
"REA identifies the brick-hit caller. Its earlier instructions multiply the tile "
"coordinate by 30; adding {ph0} (20) gives the brick's screen position."
msgstr ""
#: website/public/guides/native/index.html:414
msgctxt "page:guides/native/index.html"
msgid "Read the referenced constants"
msgstr ""
#: website/public/guides/native/index.html:417
msgctxt "page:guides/native/index.html"
msgid "REA byte results · interpreted as little-endian doubles"
msgstr ""
#: website/public/guides/native/index.html:425
msgctxt "page:guides/native/index.html"
msgid ""
"The arithmetic references these addresses. Reading the bytes supplies the actual "
"values; the instruction order tells the agent how they are used."
msgstr ""
#: website/public/guides/native/index.html:432
msgctxt "page:guides/native/index.html"
msgid "Write and check the recovered function"
msgstr ""
#: website/public/guides/native/index.html:434
msgctxt "page:guides/native/index.html"
msgid "Recovered C · excerpt"
msgstr ""
#: website/public/guides/native/index.html:441
msgctxt "page:guides/native/index.html"
msgid ""
"With a scale of 1.0, screen positions 0, 320 and 640 map to −500, 0 and 500 before "
"integer conversion. The calculation puts the center of the screen at the center of the"
" stereo field."
msgstr ""
#: website/public/guides/native/index.html:446
msgctxt "page:guides/native/index.html"
msgid ""
"The agent used REA's findings to write the C. Separate checks compared 3,205 inputs "
"against the original x86 function and reproduced all 63 compiled bytes of the complete"
" function."
msgstr ""
#. {ph0}: <a href="../../showcase/dx-ball/#sound-pan" >
#. {ph1}: </a >
#: website/public/guides/native/index.html:451
#, python-brace-format
msgctxt "page:guides/native/index.html"
msgid "{ph0}See the full investigation and assembly-to-C comparison{ph1}"
msgstr ""
#: website/public/guides/native/index.html:458
msgctxt "page:guides/native/index.html"
msgid "Try it with your own binary"
msgstr ""
#. {ph0}: <a href="../../get-started/#native" >
#. {ph1}: </a >
#: website/public/guides/native/index.html:459
#, python-brace-format
msgctxt "page:guides/native/index.html"
msgid ""
"{ph0}Connect a native analysis provider{ph1}, then give your agent a local executable "
"or library and a feature to investigate. Useful starting questions include “How is "
"this file parsed?” or “Which function handles this menu action?”"
msgstr ""
#: website/public/guides/native/index.html:466
msgctxt "page:guides/native/index.html"
msgid ""
"If you already know a function name or address, you can query it from the terminal. "
"For a configured Ghidra installation:"
msgstr ""
#: website/public/guides/native/index.html:472
msgctxt "page:guides/native/index.html"
msgid "Function analysis"
msgstr ""
#. {ph0}: <code>main</code>
#: website/public/guides/native/index.html:485
#, python-brace-format
msgctxt "page:guides/native/index.html"
msgid ""
"Replace the target path and {ph0} with your own function name or address. Each CLI "
"invocation imports and analyzes the binary, then closes its session. Your agent's MCP "
"queries reuse the imported binary while that session is open."
msgstr ""
#: website/public/guides/native/index.html:491
msgctxt "page:guides/native/index.html"
msgid ""
"Read the pseudocode alongside instructions and references. When a result leaves a call"
" or value unresolved, use that location as the next question."
msgstr ""
#: website/public/guides/native/index.html:6
msgctxt "page:guides/native/index.html"
msgid "Native Binary Analysis — REA"
msgstr ""
#: website/public/guides/native/index.html:7
msgctxt "page:guides/native/index.html"
msgid ""
"Recover a native calculation with REA: inspect instructions, follow a caller, read "
"constants and check reconstructed C."
msgstr ""
#: website/public/guides/native/index.html:209
msgctxt "page:guides/native/index.html"
msgid "On this page"
msgstr ""
#: website/public/guides/native/index.html:219
msgctxt "page:guides/native/index.html"
msgid "Native analysis"
msgstr ""
#: website/public/guides/native/index.html:342
msgctxt "page:guides/native/index.html"
msgid "Copy example prompt"
msgstr ""
#: website/public/guides/native/index.html:473
msgctxt "page:guides/native/index.html"
msgid "Copy function analysis"
msgstr ""
#: website/public/guides/native/index.html:515
msgctxt "page:guides/native/index.html"
msgid "Back to top"
msgstr ""
#: website/public/index.html:109
msgctxt "page:index.html"
msgid "Skip to content"
msgstr ""
#: website/public/index.html:201 website/public/index.html:211
#: website/public/index.html:209
msgctxt "page:index.html"
msgid "On this page"
msgstr ""
#: website/public/index.html:202 website/public/index.html:250
msgctxt "page:index.html"
msgid "Set up REA"
msgstr ""
#. {ph0}: <a href="#setup" aria-current="location">
#. {ph1}: </a>
#: website/public/index.html:213
#, python-brace-format
msgctxt "page:index.html"
msgid "{ph0}Set up REA{ph1}"
msgstr ""
#. {ph0}: <a href="#what-is-re">
#. {ph1}: </a>
#: website/public/index.html:214
#, python-brace-format
msgctxt "page:index.html"
msgid "{ph0}How it works{ph1}"
msgstr ""
#. {ph0}: <a href="#dinosaur">
#. {ph1}: </a>
#: website/public/index.html:215
#, python-brace-format
msgctxt "page:index.html"
msgid "{ph0}Dinosaur game{ph1}"
msgstr ""
#. {ph0}: <a href="#calculator">
#. {ph1}: </a>
#: website/public/index.html:216
#, python-brace-format
msgctxt "page:index.html"
msgid "{ph0}Calculator{ph1}"
msgstr ""
#. {ph0}: <a href="#showcases">
#. {ph1}: </a>
#: website/public/index.html:217
#, python-brace-format
msgctxt "page:index.html"
msgid "{ph0}Showcases{ph1}"
msgstr ""
#. {ph0}: <a href="#try-rea">
#. {ph1}: </a>
#: website/public/index.html:218
#, python-brace-format
msgctxt "page:index.html"
msgid "{ph0}Try REA{ph1}"
msgstr ""
#. {ph0}: <a href="#analyze">
#. {ph1}: </a>
#: website/public/index.html:219
#, python-brace-format
msgctxt "page:index.html"
msgid "{ph0}Go deeper{ph1}"
msgstr ""
#: website/public/index.html:228
msgctxt "page:index.html"
msgid "Reverse engineering, with your coding agent"
msgstr ""
#. {ph0}: <br />
#: website/public/index.html:229
#, python-brace-format
msgctxt "page:index.html"
msgid "Find out how{ph0}software works."
msgstr ""
#: website/public/index.html:230
msgctxt "page:index.html"
msgid ""
"Ask your coding agent about an app, a game or a website. REA gives it the tools to "
"inspect the code behind the answer."
msgstr ""
#: website/public/index.html:235
msgctxt "page:index.html"
msgid "Get started"
msgstr ""
#: website/public/index.html:236
msgctxt "page:index.html"
msgid "See an example ↓"
msgstr ""
#. {ph0}: <a href="showcase/">
#. {ph1}: </a>
#: website/public/index.html:239
#, python-brace-format
msgctxt "page:index.html"
msgid "{ph0}Showcases →{ph1} — investigations and interactive demos."
msgstr ""
#. {ph0}: <a href="blog/">
#. {ph1}: </a>
#: website/public/index.html:243
#, python-brace-format
msgctxt "page:index.html"
msgid "{ph0}Blog →{ph1} — methods and reconstruction notes."
msgstr ""
#: website/public/index.html:251
msgctxt "page:index.html"
msgid "Copy this into your coding agent:"
msgstr ""
#. {ph0}: <span class="terminal-dots" aria-hidden="true" >
#. {ph1}: <i>
#. {ph2}: </i>
#. {ph3}: <i>
#. {ph4}: </i>
#. {ph5}: <i>
#. {ph6}: </i>
#. {ph7}: </span >
#: website/public/index.html:254
#, python-brace-format
msgctxt "page:index.html"
msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent"
msgstr ""
#: website/public/index.html:259 website/public/index.html:283
#: website/public/index.html:519 website/public/index.html:600
#: website/public/index.html:824 website/public/index.html:1136
#: website/public/index.html:1164
msgctxt "page:index.html"
msgid "Copy"
msgstr ""
#. {ph0}: <span class="prompt-symbol" aria-hidden="true">
#. {ph1}: </span >
#. {ph2}: <span id="home-install-prompt" >
#. {ph3}: <span translate="no">npx rea-agents@latest setup</span>
#. {ph4}: </span >
#. {ph5}: <span class="terminal-cursor" aria-hidden="true">
#. {ph6}: </span>
#: website/public/index.html:268
#, python-brace-format
msgctxt "page:index.html"
msgid ""
"{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using {ph3}. Show me "
"the setup plan for approval, then verify the installation.{ph4}{ph5}{ph6}"
msgstr ""
#: website/public/index.html:280
msgctxt "page:index.html"
msgid "Or run this in your terminal:"
msgstr ""
#: website/public/index.html:292
msgctxt "page:index.html"
msgid "Approve the setup plan, then restart your agent."
msgstr ""
#: website/public/index.html:296
msgctxt "page:index.html"
msgid "Setup for your platform:"
msgstr ""
#. {ph0}: <a href="get-started/#curl-installation" >
#. {ph1}: <span translate="no">curl</span>
#. {ph2}: </a >
#: website/public/index.html:307
#, python-brace-format
msgctxt "page:index.html"
msgid "Other install options: {ph0}{ph1} →{ph2}"
msgstr ""
#. {ph0}: <span translate="no">Node.js</span>
#. {ph1}: <a href="get-started/">
#. {ph2}: </a>
#: website/public/index.html:313
#, python-brace-format
msgctxt "page:index.html"
msgid ""
"First time, or missing {ph0} or a coding agent? {ph1}Follow the step-by-step setup "
"guide →{ph2}"
msgstr ""
#: website/public/index.html:326
msgctxt "page:index.html"
msgid "How it works"
msgstr ""
#: website/public/index.html:328
msgctxt "page:index.html"
msgid ""
"Reverse engineering means learning how software works by inspecting the program "
"itself. With REA, your agent can follow the code, explain a feature and help you "
"rebuild it."
msgstr ""
#: website/public/index.html:335
msgctxt "page:index.html"
msgid "Ask about one feature"
msgstr ""
#: website/public/index.html:336
msgctxt "page:index.html"
msgid "Give your agent a program or page and a question."
msgstr ""
#: website/public/index.html:339
msgctxt "page:index.html"
msgid "Inspect the program"
msgstr ""
#: website/public/index.html:340
msgctxt "page:index.html"
msgid "REA returns code, references and runtime observations."
msgstr ""
#: website/public/index.html:343
msgctxt "page:index.html"
msgid "Explain it, then try a change"
msgstr ""
#: website/public/index.html:344
msgctxt "page:index.html"
msgid "Your agent uses the findings to explain or rebuild the feature."
msgstr ""
#: website/public/index.html:350
msgctxt "page:index.html"
msgid "See the full Calculator investigation"
msgstr ""
#. {ph0}: <span translate="no">200 + 10%</span>
#: website/public/index.html:351
#, python-brace-format
msgctxt "page:index.html"
msgid "Why does Calculator give 220 for {ph0}?"
msgstr ""
#: website/public/index.html:360
msgctxt "page:index.html"
msgid "Follow the instructions step by step"
msgstr ""
#. {ph0}: <span>
#. {ph1}: </span>
#: website/public/index.html:368
#, python-brace-format
msgctxt "page:index.html"
msgid "{ph0}01{ph1} Decode branches"
msgstr ""
#. {ph0}: <span>
#. {ph1}: </span>
#: website/public/index.html:376
#, python-brace-format
msgctxt "page:index.html"
msgid "{ph0}02{ph1} Trace calls"
msgstr ""
#. {ph0}: <span>
#. {ph1}: </span>
#: website/public/index.html:384
#, python-brace-format
msgctxt "page:index.html"
msgid "{ph0}03{ph1} Recover the rule"
msgstr ""
#. {ph0}: <span>
#. {ph1}: </span>
#. {ph2}: <span class="assembly-disclosure" aria-hidden="true" >
#. {ph3}: </span>
#: website/public/index.html:395
#, python-brace-format
msgctxt "page:index.html"
msgid "{ph0}Original x64 · selected instructions{ph1} {ph2}{ph3}"
msgstr ""
#: website/public/index.html:437
msgctxt "page:index.html"
msgid "01 · Which branch?"
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#: website/public/index.html:438
#, python-brace-format
msgctxt "page:index.html"
msgid "“{ph0}0x5b? 0x5c?{ph1} Two jumps to the same place. Which operators are these?”"
msgstr ""
#: website/public/index.html:442
msgctxt "page:index.html"
msgid "Look up the command IDs, then label the branch."
msgstr ""
#: website/public/index.html:448
msgctxt "page:index.html"
msgid "Divide ÷"
msgstr ""
#: website/public/index.html:452
msgctxt "page:index.html"
msgid "Multiply ×"
msgstr ""
#: website/public/index.html:457
msgctxt "page:index.html"
msgid "02 · What do the calls do?"
msgstr ""
#. {ph0}: <strong >
#. {ph1}: </strong >
#: website/public/index.html:458
#, python-brace-format
msgctxt "page:index.html"
msgid ""
"“100 is clear. The calls are just addresses. {ph0}Which one divides? Which value goes "
"in?{ph1}”"
msgstr ""
#: website/public/index.html:464
msgctxt "page:index.html"
msgid "Inspect the helpers and trace the stored values."
msgstr ""
#: website/public/index.html:474
msgctxt "page:index.html"
msgid "Divide"
msgstr ""
#: website/public/index.html:479
msgctxt "page:index.html"
msgid "03 · What is the rule?"
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#: website/public/index.html:480
#, python-brace-format
msgctxt "page:index.html"
msgid ""
"“This path multiplies by the other input. So {ph0}10% means 10% of 200{ph1} after +.”"
msgstr ""
#: website/public/index.html:484
msgctxt "page:index.html"
msgid "Name the operands and check both operator paths."
msgstr ""
#: website/public/index.html:500 website/public/index.html:427
msgctxt "page:index.html"
msgid "Illustrative expert reasoning"
msgstr ""
#. {ph0}: <strong >
#. {ph1}: </strong >
#: website/public/index.html:503
#, python-brace-format
msgctxt "page:index.html"
msgid ""
"{ph0}You decode the instructions, follow the calls and reconstruct the "
"calculation.{ph1}"
msgstr ""
#: website/public/index.html:511
msgctxt "page:index.html"
msgid "Ask your agent the same question"
msgstr ""
#. {ph0}: <span class="terminal-dots" aria-hidden="true" >
#. {ph1}: <i>
#. {ph2}: </i>
#. {ph3}: <i>
#. {ph4}: </i>
#. {ph5}: <i>
#. {ph6}: </i>
#. {ph7}: </span >
#: website/public/index.html:514
#, python-brace-format
msgctxt "page:index.html"
msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Calculator"
msgstr ""
#. {ph0}: <span class="prompt-symbol" aria-hidden="true">
#. {ph1}: </span >
#. {ph2}: <span id="home-analysis-prompt" >
#. {ph3}: <span translate="no">200 + 10%</span>
#. {ph4}: </span >
#. {ph5}: <span class="terminal-cursor" aria-hidden="true">
#. {ph6}: </span>
#: website/public/index.html:528
#, python-brace-format
msgctxt "page:index.html"
msgid ""
"{ph0}›{ph1}{ph2}Use REA to inspect Windows Calculator. Why does {ph3} give "
"220?{ph4}{ph5}{ph6}"
msgstr ""
#: website/public/index.html:536
msgctxt "page:index.html"
msgid "Example answer · based on the findings"
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#: website/public/index.html:539
#, python-brace-format
msgctxt "page:index.html"
msgid "After +, the % button takes {ph0}a percentage of the first number.{ph1}"
msgstr ""
#: website/public/index.html:552
msgctxt "page:index.html"
msgid "REA supplies"
msgstr ""
#: website/public/index.html:553
msgctxt "page:index.html"
msgid "The handler’s instructions, decompiled code and calls."
msgstr ""
#: website/public/index.html:558
msgctxt "page:index.html"
msgid "Your agent explains"
msgstr ""
#: website/public/index.html:559
msgctxt "page:index.html"
msgid "Which branch applies, what it calculates and how to rebuild it."
msgstr ""
#. {ph0}: <a href="#calculator">
#. {ph1}: </a>
#: website/public/index.html:566
#, python-brace-format
msgctxt "page:index.html"
msgid ""
"Selected assembly from the installed Calculator DLL. The thoughts and reply illustrate"
" the findings. {ph0}Continue with the Calculator example ↓{ph1}"
msgstr ""
#: website/public/index.html:578
msgctxt "page:index.html"
msgid ""
"Let’s try two examples: change a game’s speed, then rebuild Calculator’s % button."
msgstr ""
#: website/public/index.html:583
msgctxt "page:index.html"
msgid "Example 01 · Chrome’s dinosaur game"
msgstr ""
#: website/public/index.html:584
msgctxt "page:index.html"
msgid "Why does the dinosaur get faster?"
msgstr ""
#: website/public/index.html:586
msgctxt "page:index.html"
msgid ""
"The game gets faster as you run. To rebuild it with a speed control, we first need to "
"find out how the speed changes."
msgstr ""
#: website/public/index.html:592
msgctxt "page:index.html"
msgid "1. Ask about the speed"
msgstr ""
#. {ph0}: <span class="terminal-dots" aria-hidden="true" >
#. {ph1}: <i>
#. {ph2}: </i>
#. {ph3}: <i>
#. {ph4}: </i>
#. {ph5}: <i>
#. {ph6}: </i>
#. {ph7}: </span >
#: website/public/index.html:595
#, python-brace-format
msgctxt "page:index.html"
msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example question · Dinosaur game"
msgstr ""
#. {ph0}: <span class="prompt-symbol" aria-hidden="true">
#. {ph1}: </span >
#. {ph2}: <span id="dino-analysis-prompt" >
#. {ph3}: </span >
#. {ph4}: <span class="terminal-cursor" aria-hidden="true">
#. {ph5}: </span>
#: website/public/index.html:609
#, python-brace-format
msgctxt "page:index.html"
msgid ""
"{ph0}›{ph1}{ph2}Use REA to inspect this dinosaur game. Why does it get faster? Show "
"the speed rule, then build a small version with an adjustable speed.{ph3}{ph4}{ph5}"
msgstr ""
#: website/public/index.html:618
msgctxt "page:index.html"
msgid "2. Find the speed rule"
msgstr ""
#: website/public/index.html:619
msgctxt "page:index.html"
msgid ""
"REA lets the agent read the game’s running code. The speed starts at 6 and increases a"
" little each update while it is below 13."
msgstr ""
#: website/public/index.html:626
msgctxt "page:index.html"
msgid "3. Play the result"
msgstr ""
#: website/public/index.html:627
msgctxt "page:index.html"
msgid ""
"We rebuilt that rule in the mini-game below and added a speed slider. Press Play, then"
" choose your own speed."
msgstr ""
#: website/public/index.html:663
msgctxt "page:index.html"
msgid "Play"
msgstr ""
#: website/public/index.html:666
msgctxt "page:index.html"
msgid "Jump ↑"
msgstr ""
#: website/public/index.html:667
msgctxt "page:index.html"
msgid "Restart"
msgstr ""
#: website/public/index.html:670
msgctxt "page:index.html"
msgid "Speed"
msgstr ""
#: website/public/index.html:680
msgctxt "page:index.html"
msgid "Use the recovered acceleration rule"
msgstr ""
#: website/public/index.html:684
msgctxt "page:index.html"
msgid "Original rule: start at 6, then increase toward 13."
msgstr ""
#: website/public/index.html:687
msgctxt "page:index.html"
msgid "Move the slider to set your own speed. Space or Jump clears a cactus."
msgstr ""
#: website/public/index.html:692
msgctxt "page:index.html"
msgid ""
"Enable JavaScript to play. You can still read the rule and open the source code below."
msgstr ""
#: website/public/index.html:698
msgctxt "page:index.html"
msgid "Open the speed lab →"
msgstr ""
#: website/public/index.html:704
msgctxt "page:index.html"
msgid "See the script, checks and how to try the analysis"
msgstr ""
#. {ph0}: <a href="https://wayou.github.io/t-rex-runner/" >
#. {ph1}: </a >
#: website/public/index.html:707
#, python-brace-format
msgctxt "page:index.html"
msgid "Inspected target: {ph0}wayou’s Chromium-derived browser edition{ph1}."
msgstr ""
#. {ph0}: <span translate="no">index.js</span>
#: website/public/index.html:715
#, python-brace-format
msgctxt "page:index.html"
msgid "REA · loaded {ph0} · selected lines"
msgstr ""
#: website/public/index.html:724
msgctxt "page:index.html"
msgid "Start at 6. Add 0.001 each update without a collision, while speed is below 13."
msgstr ""
#: website/public/index.html:729
msgctxt "page:index.html"
msgid "What each part does"
msgstr ""
#. {ph0}: <span class="flow-label">
#. {ph1}: </span >
#. {ph2}: <span class="flow-node">
#. {ph3}: </span >
#. {ph4}: <span class="flow-note" >
#. {ph5}: </span >
#: website/public/index.html:731
#, python-brace-format
msgctxt "page:index.html"
msgid ""
"{ph0}01 · REA{ph1}{ph2}Read the running game’s script{ph3}{ph4}Return its actual code "
"and settings to the agent.{ph5}"
msgstr ""
#. {ph0}: <span class="flow-label">
#. {ph1}: </span >
#. {ph2}: <span class="flow-node">
#. {ph3}: </span >
#. {ph4}: <span class="flow-note" >
#. {ph5}: </span >
#: website/public/index.html:738
#, python-brace-format
msgctxt "page:index.html"
msgid ""
"{ph0}02 · Your agent{ph1}{ph2}Rebuild the rule, add a control{ph3}{ph4}Use the "
"recovered acceleration in a small game with a speed slider.{ph5}"
msgstr ""
#. {ph0}: <span class="flow-label">
#. {ph1}: </span >
#. {ph2}: <span class="flow-node">
#. {ph3}: </span >
#. {ph4}: <span class="flow-note" >
#. {ph5}: </span >
#: website/public/index.html:746
#, python-brace-format
msgctxt "page:index.html"
msgid ""
"{ph0}03 · You{ph1}{ph2}Change the speed and play{ph3}{ph4}Try the original "
"acceleration, then choose your own pace.{ph5}"
msgstr ""
#. {ph0}: <code>index.js</code>
#: website/public/index.html:756
#, python-brace-format
msgctxt "page:index.html"
msgid ""
"REA inspected the HTTP browser edition through a local debugging connection and "
"returned the loaded {ph0}, including its source and digest."
msgstr ""
#: website/public/index.html:763
msgctxt "page:index.html"
msgid "Selected settings from the inspected script"
msgstr ""
#: website/public/index.html:769
msgctxt "page:index.html"
msgid ""
"We called the original game’s update function in a controlled browser check, with "
"obstacles and automatic scheduling disabled. After 4,000 updates, speed was 10.0; "
"after 10,000, it was 13.0, rounded to one decimal."
msgstr ""
#. {ph0}: <a href="examples/dino-lab/">
#. {ph1}: </a>
#: website/public/index.html:775
#, python-brace-format
msgctxt "page:index.html"
msgid ""
"The new mini-game keeps that speed rule. Its drawing, jumping and collision code are a"
" small teaching implementation. {ph0}Open the lab{ph1} to see the new code and run the"
" same speed check."
msgstr ""
#. {ph0}: <a href="guides/browser/#prepare">
#. {ph1}: </a>
#. {ph2}: <a href="https://wayou.github.io/t-rex-runner/" >
#. {ph3}: </a >
#: website/public/index.html:781
#, python-brace-format
msgctxt "page:index.html"
msgid ""
"To inspect the target yourself, follow the {ph0}browser connection steps{ph1} using "
"{ph2}the dinosaur page{ph3}. Give your agent that page URL and your local debugging "
"endpoint, then copy the prompt above."
msgstr ""
#. {ph0}: <a href="https://github.com/wayou/t-rex-
#. runner/blob/5455bfa408ec6b707c7300ff194b7390733a766d/index.js#L565-L571" >
#. {ph1}: </a >
#. {ph2}: <a href="assets/licenses/dinosaur.txt" >
#. {ph3}: </a >
#: website/public/index.html:790
#, python-brace-format
msgctxt "page:index.html"
msgid "{ph0}Inspected speed code{ph1} · {ph2}Chromium Authors · BSD license{ph3}"
msgstr ""
#: website/public/index.html:807
msgctxt "page:index.html"
msgid "Example 02 · Windows Calculator"
msgstr ""
#: website/public/index.html:808
msgctxt "page:index.html"
msgid "Rebuild Calculator’s % button."
msgstr ""
#: website/public/index.html:810
msgctxt "page:index.html"
msgid ""
"The % button does different things after + and ×. Let’s find both rules and try them "
"in a small calculator."
msgstr ""
#: website/public/index.html:816
msgctxt "page:index.html"
msgid "1. Ask about the % button"
msgstr ""
#. {ph0}: <span class="terminal-dots" aria-hidden="true" >
#. {ph1}: <i>
#. {ph2}: </i>
#. {ph3}: <i>
#. {ph4}: </i>
#. {ph5}: <i>
#. {ph6}: </i>
#. {ph7}: </span >
#: website/public/index.html:819
#, python-brace-format
msgctxt "page:index.html"
msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example question · Calculator"
msgstr ""
#. {ph0}: <span class="prompt-symbol" aria-hidden="true">
#. {ph1}: </span >
#. {ph2}: <span id="calculator-analysis-prompt" >
#. {ph3}: </span >
#. {ph4}: <span class="terminal-cursor" aria-hidden="true">
#. {ph5}: </span>
#: website/public/index.html:833
#, python-brace-format
msgctxt "page:index.html"
msgid ""
"{ph0}›{ph1}{ph2}Use REA to inspect Windows Calculator’s % button. Recover the rules "
"after + and ×, then build a small calculator that uses both.{ph3}{ph4}{ph5}"
msgstr ""
#: website/public/index.html:842
msgctxt "page:index.html"
msgid "2. Find both rules"
msgstr ""
#: website/public/index.html:843
msgctxt "page:index.html"
msgid ""
"REA helps the agent read the code behind the % button. It applies two different rules:"
msgstr ""
#: website/public/index.html:849
msgctxt "page:index.html"
msgid "With +"
msgstr ""
#. {ph0}: <span>
#. {ph1}: </span >
#. {ph2}: <code>10% of 200 = 20 → 200 + 20 = 220</code>
#: website/public/index.html:850
#, python-brace-format
msgctxt "page:index.html"
msgid "{ph0}Take 10% of the first number.{ph1}{ph2}"
msgstr ""
#: website/public/index.html:856
msgctxt "page:index.html"
msgid "With ×"
msgstr ""
#. {ph0}: <span>
#. {ph1}: </span>
#. {ph2}: <code>200 × 0.1 = 20</code>
#: website/public/index.html:857
#, python-brace-format
msgctxt "page:index.html"
msgid "{ph0}Turn 10% into 0.1.{ph1}{ph2}"
msgstr ""
#: website/public/index.html:864
msgctxt "page:index.html"
msgid "3. Try the % button"
msgstr ""
#: website/public/index.html:865
msgctxt "page:index.html"
msgid "We recreated both rules below. Choose + or ×, press %, then press =."
msgstr ""
#: website/public/index.html:913
msgctxt "page:index.html"
msgid "Reset"
msgstr ""
#: website/public/index.html:921
msgctxt "page:index.html"
msgid "10% of 200 = 20. Then 200 + 20 = 220."
msgstr ""
#: website/public/index.html:924
msgctxt "page:index.html"
msgid "Interactive illustration of the inspected percentage rule."
msgstr ""
#: website/public/index.html:931
msgctxt "page:index.html"
msgid "See the real code and how the answer was checked"
msgstr ""
#. {ph0}: <code>previous = 200</code>
#. {ph1}: <code>current = 10</code>
#: website/public/index.html:932
#, python-brace-format
msgctxt "page:index.html"
msgid "For this example, {ph0} and {ph1}."
msgstr ""
#: website/public/index.html:938
msgctxt "page:index.html"
msgid "Readable summary of the % handler"
msgstr ""
#: website/public/index.html:947
msgctxt "page:index.html"
msgid "From the installed app to a working % button"
msgstr ""
#. {ph0}: <span class="flow-label" >
#. {ph1}: <span translate="no">calc.exe</span>
#. {ph2}: </span >
#. {ph3}: <span class="flow-node">
#. {ph4}: </span >
#. {ph5}: <span class="flow-note" >
#. {ph6}: <code>ms-calculator:</code>
#. {ph7}: </span >
#: website/public/index.html:951
#, python-brace-format
msgctxt "page:index.html"
msgid ""
"{ph0}01 · REA reads {ph1}{ph2}{ph3}It launches the Calculator app{ph4}{ph5}The code "
"opens {ph6}. The agent then selects the installed app’s library.{ph7}"
msgstr ""
#. {ph0}: <span class="flow-label">
#. {ph1}: </span >
#. {ph2}: <span class="flow-node">
#. {ph3}: </span >
#. {ph4}: <span class="flow-note" >
#. {ph5}: <code>100</code>
#. {ph6}: </span >
#: website/public/index.html:960
#, python-brace-format
msgctxt "page:index.html"
msgid ""
"{ph0}02 · REA reads the library{ph1}{ph2}Return the % handler’s code{ph3}{ph4}The "
"function checks the operator and uses the constant {ph5}.{ph6}"
msgstr ""
#. {ph0}: <span class="flow-label">
#. {ph1}: </span >
#. {ph2}: <span class="flow-node">
#. {ph3}: </span >
#. {ph4}: <span class="flow-note" >
#. {ph5}: </span >
#: website/public/index.html:968
#, python-brace-format
msgctxt "page:index.html"
msgid ""
"{ph0}03 · Your agent interprets it{ph1}{ph2}Explain and reproduce the "
"rules{ph3}{ph4}Crosscheck the branch with Microsoft’s source, then try + and × "
"above.{ph5}"
msgstr ""
#: website/public/index.html:982
msgctxt "page:index.html"
msgid "REA · selected original instructions"
msgstr ""
#: website/public/index.html:993
msgctxt "page:index.html"
msgid "Operator IDs · Microsoft’s source"
msgstr ""
#: website/public/index.html:1003
msgctxt "page:index.html"
msgid ""
"Inspected with REA 4.1.0: Windows Calculator 11.2508.4.0, x64. The readable summary "
"uses names from Microsoft’s public source to explain the recovered branch."
msgstr ""
#. {ph0}: <a
#. href="https://github.com/microsoft/calculator/blob/d125246a4e19842ce1332e6c7839cf0e110027d8/src/CalcManager/CEngine/scifunc.cpp#L98-L111"
#. >
#. {ph1}: </a >
#. {ph2}: <a
#. href="https://github.com/microsoft/calculator/blob/d125246a4e19842ce1332e6c7839cf0e110027d8/src/CalculatorUnitTests/CalculatorManagerTest.cpp#L350-L370"
#. >
#. {ph3}: </a >
#. {ph4}: <a href="guides/native/">
#. {ph5}: </a>
#: website/public/index.html:1008
#, python-brace-format
msgctxt "page:index.html"
msgid ""
"{ph0}Percentage implementation{ph1} · {ph2}Microsoft’s test cases{ph3} · {ph4}Native "
"setup guide{ph5}"
msgstr ""
#: website/public/index.html:1028
msgctxt "page:index.html"
msgid "REA case studies."
msgstr ""
#: website/public/index.html:1029
msgctxt "page:index.html"
msgid "Explore a feature in a released app or game, with code and checked results."
msgstr ""
#: website/public/index.html:1034
msgctxt "page:index.html"
msgid "Showcases →"
msgstr ""
#: website/public/index.html:1038
msgctxt "page:index.html"
msgid "Android · APK analysis"
msgstr ""
#: website/public/index.html:1039
msgctxt "page:index.html"
msgid "How an authenticator generates a login code"
msgstr ""
#: website/public/index.html:1040
msgctxt "page:index.html"
msgid ""
"Trace Aegis's six-digit login code through its released APK, then move a demo clock to"
" see why it changes every 30 seconds."
msgstr ""
#: website/public/index.html:1044
msgctxt "page:index.html"
msgid "Read the Android case study"
msgstr ""
#: website/public/index.html:1049
msgctxt "page:index.html"
msgid "Electron · Feature tracing"
msgstr ""
#: website/public/index.html:1050
msgctxt "page:index.html"
msgid "How Notion copies text and HTML"
msgstr ""
#: website/public/index.html:1051
msgctxt "page:index.html"
msgid ""
"Follow Notion's packaged JavaScript to the system clipboard and see how a copy "
"preserves rich block data."
msgstr ""
#: website/public/index.html:1055
msgctxt "page:index.html"
msgid "Read the Notion case study"
msgstr ""
#: website/public/index.html:1060
msgctxt "page:index.html"
msgid "Native · Reconstruction"
msgstr ""
#: website/public/index.html:1061
msgctxt "page:index.html"
msgid "DX-Ball's sound-pan calculation"
msgstr ""
#: website/public/index.html:1062
msgctxt "page:index.html"
msgid "Recover how a ball's position becomes left/right sound in a 1996 Windows game."
msgstr ""
#: website/public/index.html:1066
msgctxt "page:index.html"
msgid "Read the DX-Ball case study"
msgstr ""
#: website/public/index.html:1077
msgctxt "page:index.html"
msgid "Your first investigation"
msgstr ""
#: website/public/index.html:1078
msgctxt "page:index.html"
msgid "Try REA on a small app."
msgstr ""
#: website/public/index.html:1079
msgctxt "page:index.html"
msgid "Download our Notes example, trace its CSV export, and check one changed input."
msgstr ""
#: website/public/index.html:1084
msgctxt "page:index.html"
msgid "Try the guided example"
msgstr ""
#: website/public/index.html:1093
msgctxt "page:index.html"
msgid "Choose your target."
msgstr ""
#: website/public/index.html:1094
msgctxt "page:index.html"
msgid "These guides cover setup and a first investigation for each kind of software."
msgstr ""
#: website/public/index.html:1101
msgctxt "page:index.html"
msgid "Native binaries"
msgstr ""
#: website/public/index.html:1102
msgctxt "page:index.html"
msgid ""
"Inspect functions, strings, references and call relationships in executables and "
"libraries."
msgstr ""
#: website/public/index.html:1106
msgctxt "page:index.html"
msgid "Native analysis guide"
msgstr ""
#: website/public/index.html:1109
msgctxt "page:index.html"
msgid "JavaScript & Electron"
msgstr ""
#: website/public/index.html:1110
msgctxt "page:index.html"
msgid ""
"Map modules, routes, IPC and native dependencies from an application folder or ASAR "
"archive."
msgstr ""
#: website/public/index.html:1114
msgctxt "page:index.html"
msgid "Application workflows"
msgstr ""
#: website/public/index.html:1117
msgctxt "page:index.html"
msgid "Browser & runtime activity"
msgstr ""
#: website/public/index.html:1118
msgctxt "page:index.html"
msgid ""
"Capture selected browser or process activity, then compare the results across runs."
msgstr ""
#: website/public/index.html:1122
msgctxt "page:index.html"
msgid "Browser observation guide"
msgstr ""
#: website/public/index.html:1126
msgctxt "page:index.html"
msgid "Try a larger project"
msgstr ""
#. {ph0}: <span class="terminal-dots" aria-hidden="true" >
#. {ph1}: <i>
#. {ph2}: </i>
#. {ph3}: <i>
#. {ph4}: </i>
#. {ph5}: <i>
#. {ph6}: </i>
#. {ph7}: </span >
#: website/public/index.html:1131
#, python-brace-format
msgctxt "page:index.html"
msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Website"
msgstr ""
#. {ph0}: <span class="prompt-symbol" aria-hidden="true">
#. {ph1}: </span >
#. {ph2}: <span id="website-project-prompt" >
#. {ph3}: <span translate="no">https://rea.tools/</span>
#. {ph4}: </span >
#. {ph5}: <span class="terminal-cursor" aria-hidden="true">
#. {ph6}: </span>
#: website/public/index.html:1145
#, python-brace-format
msgctxt "page:index.html"
msgid ""
"{ph0}›{ph1}{ph2}Use REA to inspect {ph3}. Clone this website for me.{ph4}{ph5}{ph6}"
msgstr ""
#: website/public/index.html:1154
msgctxt "page:index.html"
msgid "Yes, this one."
msgstr ""
#. {ph0}: <span class="terminal-dots" aria-hidden="true" >
#. {ph1}: <i>
#. {ph2}: </i>
#. {ph3}: <i>
#. {ph4}: </i>
#. {ph5}: <i>
#. {ph6}: </i>
#. {ph7}: </span >
#: website/public/index.html:1159
#, python-brace-format
msgctxt "page:index.html"
msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Game reconstruction"
msgstr ""
#. {ph0}: <span class="prompt-symbol" aria-hidden="true">
#. {ph1}: </span >
#. {ph2}: <span id="game-project-prompt" >
#. {ph3}: </span >
#. {ph4}: <span class="terminal-cursor" aria-hidden="true">
#. {ph5}: </span>
#: website/public/index.html:1173
#, python-brace-format
msgctxt "page:index.html"
msgid ""
"{ph0}›{ph1}{ph2}Use REA to reconstruct this game from its executable. Recover the "
"gameplay logic in C and test it against the original.{ph3}{ph4}{ph5}"
msgstr ""
#. {ph0}: <a href="showcase/dx-ball/">
#. {ph1}: </a>
#: website/public/index.html:1182
#, python-brace-format
msgctxt "page:index.html"
msgid "{ph0}See the DX-Ball case study →{ph1}"
msgstr ""
#: website/public/index.html:1193
msgctxt "page:index.html"
msgid "Any questions?"
msgstr ""
#. {ph0}: <a href="faq/">
#. {ph1}: </a>
#: website/public/index.html:1195
#, python-brace-format
msgctxt "page:index.html"
msgid "{ph0}Read the FAQ{ph1} — setup and common questions."
msgstr ""
#. {ph0}: <a href="https://discord.gg/GkcryMnJDM">
#. {ph1}: </a>
#: website/public/index.html:1198
#, python-brace-format
msgctxt "page:index.html"
msgid "{ph0}Join Discord{ph1} — get help and discuss your investigations."
msgstr ""
#. {ph0}: <a href="https://github.com/morluto/rea/issues/new/choose" >
#. {ph1}: </a >
#: website/public/index.html:1202
#, python-brace-format
msgctxt "page:index.html"
msgid "{ph0}GitHub issues{ph1} — report a bug or request a feature."
msgstr ""
#: website/public/index.html:6
msgctxt "page:index.html"
msgid "REA — Reverse Engineering for Your Coding Agent"
msgstr ""
#: website/public/index.html:7
msgctxt "page:index.html"
msgid ""
"Reverse engineer apps, binaries and browser behavior with your coding agent. Follow "
"clear guides and try interactive examples with REA."
msgstr ""
#: website/public/index.html:259
msgctxt "page:index.html"
msgid "Copy REA installation prompt"
msgstr ""
#: website/public/index.html:283
msgctxt "page:index.html"
msgid "Copy setup command"
msgstr ""
#: website/public/index.html:295
msgctxt "page:index.html"
msgid "Setup options"
msgstr ""
#: website/public/index.html:363
msgctxt "page:index.html"
msgid "Follow the manual Calculator analysis"
msgstr ""
#: website/public/index.html:519
msgctxt "page:index.html"
msgid "Copy Calculator percentage question"
msgstr ""
#: website/public/index.html:600
msgctxt "page:index.html"
msgid "Copy dinosaur analysis prompt"
msgstr ""
#: website/public/index.html:653
msgctxt "page:index.html"
msgid ""
"Dinosaur mini-game. Use the Jump button or press Space while the game is focused."
msgstr ""
#: website/public/index.html:824
msgctxt "page:index.html"
msgid "Copy Calculator analysis prompt"
msgstr ""
#: website/public/index.html:870
msgctxt "page:index.html"
msgid "Choose the calculation"
msgstr ""
#: website/public/index.html:1136
msgctxt "page:index.html"
msgid "Copy website project prompt"
msgstr ""
#: website/public/index.html:1164
msgctxt "page:index.html"
msgid "Copy game reconstruction prompt"
msgstr ""
#: website/public/index.html:1228
msgctxt "page:index.html"
msgid "Back to top"
msgstr ""
#: website/public/showcase/aegis/index.html:108
msgctxt "page:showcase/aegis/index.html"
msgid "Skip to content"
msgstr ""
#. {ph0}: <a href="../../">
#. {ph1}: </a>
#. {ph2}: <a href="../">
#. {ph3}: </a>
#: website/public/showcase/aegis/index.html:200
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / Android"
msgstr ""
#: website/public/showcase/aegis/index.html:203
msgctxt "page:showcase/aegis/index.html"
msgid "Case study · Aegis Authenticator"
msgstr ""
#. {ph0}: <br />
#: website/public/showcase/aegis/index.html:204
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid "How does an authenticator{ph0}generate a login code?"
msgstr ""
#: website/public/showcase/aegis/index.html:205
msgctxt "page:showcase/aegis/index.html"
msgid ""
"A six-digit code changes every 30 seconds. Use REA to find the calculation in an "
"Android APK, then rebuild it with a clock you can control."
msgstr ""
#: website/public/showcase/aegis/index.html:210
msgctxt "page:showcase/aegis/index.html"
msgid "Aegis 3.4.3 · Android · Official release APK · 6.9 MB"
msgstr ""
#: website/public/showcase/aegis/index.html:213
msgctxt "page:showcase/aegis/index.html"
msgid "View Aegis on GitHub"
msgstr ""
#: website/public/showcase/aegis/index.html:219
msgctxt "page:showcase/aegis/index.html"
msgid "From an APK to a code you can reproduce"
msgstr ""
#. {ph0}: <span class="flow-label">
#. {ph1}: </span >
#. {ph2}: <strong class="flow-node" >
#. {ph3}: </strong >
#. {ph4}: <span class="flow-note" >
#. {ph5}: </span >
#: website/public/showcase/aegis/index.html:221
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid ""
"{ph0}01 · Locate the feature{ph1}{ph2}3,077 classes → generating methods{ph3}{ph4}REA "
"searches the package and traces the code used by the display and copy actions.{ph5}"
msgstr ""
#. {ph0}: <span class="flow-label">
#. {ph1}: </span >
#. {ph2}: <strong class="flow-node">
#. {ph3}: </strong >
#. {ph4}: <span class="flow-note" >
#. {ph5}: </span >
#: website/public/showcase/aegis/index.html:230
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid ""
"{ph0}02 · Read the calculation{ph1}{ph2}Time + account key → six digits{ph3}{ph4}REA "
"returns the methods and defaults. The agent explains how they fit together.{ph5}"
msgstr ""
#. {ph0}: <span class="flow-label">
#. {ph1}: </span >
#. {ph2}: <strong class="flow-node">
#. {ph3}: </strong >
#. {ph4}: <span class="flow-note" >
#. {ph5}: </span >
#: website/public/showcase/aegis/index.html:238
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid ""
"{ph0}03 · Rebuild and check{ph1}{ph2}Change the clock. Watch the code.{ph3}{ph4}A new "
"browser demo reproduces the rule and checks it against public reference cases.{ph5}"
msgstr ""
#: website/public/showcase/aegis/index.html:251
msgctxt "page:showcase/aegis/index.html"
msgid "In this case study"
msgstr ""
#. {ph0}: <a href="#ask">
#. {ph1}: </a>
#: website/public/showcase/aegis/index.html:253
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid "{ph0}Ask your agent{ph1}"
msgstr ""
#. {ph0}: <a href="#demo">
#. {ph1}: </a>
#: website/public/showcase/aegis/index.html:254
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid "{ph0}Try the code generator{ph1}"
msgstr ""
#. {ph0}: <a href="#find">
#. {ph1}: </a>
#: website/public/showcase/aegis/index.html:255
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid "{ph0}Find the code with REA{ph1}"
msgstr ""
#. {ph0}: <a href="#calculation">
#. {ph1}: </a>
#: website/public/showcase/aegis/index.html:256
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid "{ph0}Read the calculation{ph1}"
msgstr ""
#. {ph0}: <a href="#verify">
#. {ph1}: </a>
#: website/public/showcase/aegis/index.html:257
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid "{ph0}Check the reconstruction{ph1}"
msgstr ""
#. {ph0}: <a href="#try">
#. {ph1}: </a>
#: website/public/showcase/aegis/index.html:258
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid "{ph0}Inspect the APK yourself{ph1}"
msgstr ""
#: website/public/showcase/aegis/index.html:263
msgctxt "page:showcase/aegis/index.html"
msgid "Ask your agent"
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#: website/public/showcase/aegis/index.html:264
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid ""
"The app shows a changing login code. We want to find {ph0}what makes it change{ph1} "
"and reproduce that behavior."
msgstr ""
#. {ph0}: <span class="terminal-dots" aria-hidden="true" >
#. {ph1}: <i>
#. {ph2}: </i>
#. {ph3}: <i>
#. {ph4}: </i>
#. {ph5}: <i>
#. {ph6}: </i>
#. {ph7}: </span >
#: website/public/showcase/aegis/index.html:270
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent"
msgstr ""
#: website/public/showcase/aegis/index.html:274
#: website/public/showcase/aegis/index.html:737
msgctxt "page:showcase/aegis/index.html"
msgid "Copy"
msgstr ""
#. {ph0}: <span class="prompt-symbol" aria-hidden="true">
#. {ph1}: </span >
#. {ph2}: <span id="aegis-prompt" >
#. {ph3}: <span translate="no">aegis-v3.4.3.apk</span>
#. {ph4}: </span >
#. {ph5}: <span class="terminal-cursor" aria-hidden="true">
#. {ph6}: </span>
#: website/public/showcase/aegis/index.html:283
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid ""
"{ph0}›{ph1}{ph2}Use REA to inspect {ph3}. Find how it generates the six-digit login "
"code, explain why it changes every 30 seconds, and rebuild a small demo where I can "
"change the time.{ph4}{ph5}{ph6}"
msgstr ""
#. {ph0}: <a href="#try">
#. {ph1}: </a>
#: website/public/showcase/aegis/index.html:294
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid ""
"An example prompt for the downloaded APK, with REA's Android analysis configured. "
"{ph0}Get the APK and analysis setup ↓{ph1}"
msgstr ""
#: website/public/showcase/aegis/index.html:302
msgctxt "page:showcase/aegis/index.html"
msgid "Try the code generator"
msgstr ""
#. {ph0}: <mark class="prose-highlight">
#. {ph1}: </mark>
#: website/public/showcase/aegis/index.html:303
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid ""
"The app groups time into {ph0}30-second blocks.{ph1} It combines the block number with"
" the account key to generate a code. The same key and block produce the same code."
msgstr ""
#: website/public/showcase/aegis/index.html:310
msgctxt "page:showcase/aegis/index.html"
msgid "Move the clock across 60 seconds"
msgstr ""
#: website/public/showcase/aegis/index.html:313
msgctxt "page:showcase/aegis/index.html"
msgid "Time"
msgstr ""
#: website/public/showcase/aegis/index.html:315
msgctxt "page:showcase/aegis/index.html"
msgid "seconds"
msgstr ""
#: website/public/showcase/aegis/index.html:316
msgctxt "page:showcase/aegis/index.html"
msgid "Our adjustable example clock"
msgstr ""
#: website/public/showcase/aegis/index.html:319
msgctxt "page:showcase/aegis/index.html"
msgid "30-second block"
msgstr ""
#: website/public/showcase/aegis/index.html:321
#: website/public/showcase/aegis/index.html:648
msgctxt "page:showcase/aegis/index.html"
msgid "Block"
msgstr ""
#. {ph0}: <code data-aegis-division>floor(59 / 30)</code>
#. {ph1}: <br />
#. {ph2}: <span data-aegis-window >
#. {ph3}: </span >
#: website/public/showcase/aegis/index.html:322
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid "{ph0}{ph1}{ph2}30–59 seconds{ph3}"
msgstr ""
#: website/public/showcase/aegis/index.html:330
msgctxt "page:showcase/aegis/index.html"
msgid "Generated code"
msgstr ""
#: website/public/showcase/aegis/index.html:338
msgctxt "page:showcase/aegis/index.html"
msgid "Account key + block → six digits"
msgstr ""
#: website/public/showcase/aegis/index.html:344
msgctxt "page:showcase/aegis/index.html"
msgid "Example time, in seconds"
msgstr ""
#: website/public/showcase/aegis/index.html:359
#: website/public/showcase/aegis/index.html:659
msgctxt "page:showcase/aegis/index.html"
msgid "59 seconds"
msgstr ""
#: website/public/showcase/aegis/index.html:366
#: website/public/showcase/aegis/index.html:664
msgctxt "page:showcase/aegis/index.html"
msgid "60 seconds"
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#. {ph2}: <strong>
#. {ph3}: </strong>
#: website/public/showcase/aegis/index.html:375
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid ""
"At 59 seconds: {ph0}287082.{ph1} At 60 seconds: {ph2}359152.{ph3} Moving within one "
"block leaves the code unchanged."
msgstr ""
#. {ph0}: <a href="https://www.rfc-editor.org/rfc/rfc6238.html#appendix-B" >
#. {ph1}: </a >
#: website/public/showcase/aegis/index.html:382
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid ""
"The key is fixed, public {ph0}RFC 6238 test data{ph1}. The demo implements the "
"calculation recovered from the APK."
msgstr ""
#: website/public/showcase/aegis/index.html:389
msgctxt "page:showcase/aegis/index.html"
msgid ""
"The diagram shows the result at 59 seconds. Enable JavaScript to change the clock."
msgstr ""
#: website/public/showcase/aegis/index.html:398
msgctxt "page:showcase/aegis/index.html"
msgid "Find the code with REA"
msgstr ""
#: website/public/showcase/aegis/index.html:401
msgctxt "page:showcase/aegis/index.html"
msgid "Narrow the APK to three classes"
msgstr ""
#: website/public/showcase/aegis/index.html:404
#: website/public/showcase/aegis/index.html:436
msgctxt "page:showcase/aegis/index.html"
msgid "Agent → REA"
msgstr ""
#: website/public/showcase/aegis/index.html:414
msgctxt "page:showcase/aegis/index.html"
msgid "REA → agent · selected results"
msgstr ""
#. {ph0}: <code>TotpInfo</code>
#: website/public/showcase/aegis/index.html:426
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid ""
"{ph0} is the calculation candidate; the other two concern the progress bar and "
"imported accounts. TOTP means a time-based one-time password."
msgstr ""
#: website/public/showcase/aegis/index.html:433
msgctxt "page:showcase/aegis/index.html"
msgid "Connect the generator to the app's display"
msgstr ""
#: website/public/showcase/aegis/index.html:450
msgctxt "page:showcase/aegis/index.html"
msgid "REA → agent · methods and callers"
msgstr ""
#. {ph0}: <code>EntryHolder.getOtp</code>
#. {ph1}: <code>TotpInfo.getOtp(timestamp)</code>
#: website/public/showcase/aegis/index.html:461
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid ""
"REA identifies the timestamp overload and finds the base method's callers. Inspecting "
"{ph0} then shows the display calling {ph1}."
msgstr ""
#. {ph0}: <code>com.beemdevelopment.aegis</code>
#: website/public/showcase/aegis/index.html:469
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid ""
"Requests show a shortened input path. Result class names omit the common {ph0} prefix."
msgstr ""
#: website/public/showcase/aegis/index.html:476
msgctxt "page:showcase/aegis/index.html"
msgid "Read the calculation"
msgstr ""
#. {ph0}: <strong >
#. {ph1}: </strong >
#: website/public/showcase/aegis/index.html:477
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid ""
"REA returns {ph0}the clock conversion, default settings and generating methods.{ph1} "
"The constructors set a 30-second interval and six digits; the timestamp method turns "
"seconds into a block number."
msgstr ""
#. {ph0}: <span>
#. {ph1}: </span>
#: website/public/showcase/aegis/index.html:492
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid "{ph0}01{ph1} Time block"
msgstr ""
#. {ph0}: <span>
#. {ph1}: </span>
#: website/public/showcase/aegis/index.html:500
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid "{ph0}02{ph1} Key + block"
msgstr ""
#. {ph0}: <span>
#. {ph1}: </span>
#: website/public/showcase/aegis/index.html:508
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid "{ph0}03{ph1} Six digits"
msgstr ""
#: website/public/showcase/aegis/index.html:520
msgctxt "page:showcase/aegis/index.html"
msgid "REA · selected decompiled Java"
msgstr ""
#: website/public/showcase/aegis/index.html:550
msgctxt "page:showcase/aegis/index.html"
msgid "Readable summary · agent's interpretation"
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#: website/public/showcase/aegis/index.html:567
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid ""
"{ph0}Time chooses the block.{ph1} Seconds 30 through 59 all give block 1. At 60 "
"seconds, the block becomes 2."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#: website/public/showcase/aegis/index.html:573
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid ""
"{ph0}The key matters too.{ph1} The generator combines the account key with the block. "
"An account with a different key can show a different code at the same time."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#: website/public/showcase/aegis/index.html:580
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid ""
"{ph0}Keep six digits.{ph1} The remainder after division by 1,000,000 is padded with "
"zeroes when needed, so a code can begin with 0."
msgstr ""
#. {ph0}: <a
#. href="https://github.com/beemdevelopment/Aegis/blob/d6f4e5925a97e4e91593f1542085eae03432a759/LICENSE"
#. >
#. {ph1}: </a >
#: website/public/showcase/aegis/index.html:587
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid ""
"Excerpts from several inspected methods, with line wrapping for display. The right "
"panel is an explanatory summary. {ph0}Aegis code is GPL-3.0.{ph1}"
msgstr ""
#: website/public/showcase/aegis/index.html:596
msgctxt "page:showcase/aegis/index.html"
msgid "Inside the generator"
msgstr ""
#. {ph0}: <code>generateOTP</code>
#. {ph1}: <code>kotlin.ExceptionsKt</code>
#. {ph2}: <code>TotpInfo</code>
#. {ph3}: <code>HOTP</code>
#: website/public/showcase/aegis/index.html:597
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid ""
"The released APK puts {ph0} in {ph1}. REA follows the call from {ph2} and returns this"
" body; the original source calls the helper {ph3}."
msgstr ""
#: website/public/showcase/aegis/index.html:605
msgctxt "page:showcase/aegis/index.html"
msgid "REA · generateOTP, complete body"
msgstr ""
#: website/public/showcase/aegis/index.html:619
msgctxt "page:showcase/aegis/index.html"
msgid ""
"The last hash byte selects a position. Four bytes at that position provide a positive "
"31-bit number; formatting reduces it to the requested number of digits. The "
"constructor's last argument selects the code-formatting branch introduced by "
"compilation."
msgstr ""
#. {ph0}: <a
#. href="https://github.com/beemdevelopment/Aegis/blob/d6f4e5925a97e4e91593f1542085eae03432a759/app/src/main/java/com/beemdevelopment/aegis/crypto/otp/HOTP.java"
#. >
#. {ph1}: </a >
#: website/public/showcase/aegis/index.html:626
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid "{ph0}Compare with the matching release source{ph1}."
msgstr ""
#: website/public/showcase/aegis/index.html:636
msgctxt "page:showcase/aegis/index.html"
msgid "Check the reconstruction"
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#: website/public/showcase/aegis/index.html:637
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid ""
"We assembled the selected REA-returned Java methods in a small test program. Their "
"output matched an independent reconstruction on {ph0}133 test cases{ph1}, including "
"time-block boundaries and codes beginning with zero."
msgstr ""
#: website/public/showcase/aegis/index.html:647
msgctxt "page:showcase/aegis/index.html"
msgid "Example time"
msgstr ""
#: website/public/showcase/aegis/index.html:649
msgctxt "page:showcase/aegis/index.html"
msgid "Six-digit code"
msgstr ""
#: website/public/showcase/aegis/index.html:654
msgctxt "page:showcase/aegis/index.html"
msgid "30 seconds"
msgstr ""
#: website/public/showcase/aegis/index.html:669
msgctxt "page:showcase/aegis/index.html"
msgid "1,111,111,109 seconds"
msgstr ""
#. {ph0}: <a href="https://www.rfc-editor.org/rfc/rfc6238.html#appendix-B" >
#. {ph1}: </a >
#: website/public/showcase/aegis/index.html:676
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid ""
"The generator also matches the six published SHA-1 reference cases in {ph0}RFC "
"6238{ph1}. Check the browser implementation against them:"
msgstr ""
#: website/public/showcase/aegis/index.html:684
msgctxt "page:showcase/aegis/index.html"
msgid "Run reference checks"
msgstr ""
#: website/public/showcase/aegis/index.html:691
msgctxt "page:showcase/aegis/index.html"
msgid "Read the demo's calculation"
msgstr ""
#: website/public/showcase/aegis/index.html:695
msgctxt "page:showcase/aegis/index.html"
msgid ""
"The reference cases use eight digits. The check also verifies their six-digit results."
msgstr ""
#: website/public/showcase/aegis/index.html:704
msgctxt "page:showcase/aegis/index.html"
msgid ""
"Verification runs extracted Java methods and the new demo. The Android APK was "
"inspected statically."
msgstr ""
#: website/public/showcase/aegis/index.html:711
msgctxt "page:showcase/aegis/index.html"
msgid "Inspect the APK yourself"
msgstr ""
#. {ph0}: <a href="../../get-started/">
#. {ph1}: </a>
#: website/public/showcase/aegis/index.html:712
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid ""
"{ph0}Set up REA{ph1} on macOS or Linux, then download these two files into the same "
"folder. On Windows, use a Linux environment such as WSL."
msgstr ""
#. {ph0}: <code>JAVA_HOME</code>
#. {ph1}: <code>PATH</code>
#: website/public/showcase/aegis/index.html:717
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid ""
"Android analysis needs a full JDK 17 or later. Select it with {ph0} or {ph1}. This "
"case used JDK 21."
msgstr ""
#: website/public/showcase/aegis/index.html:723
msgctxt "page:showcase/aegis/index.html"
msgid "Download Aegis APK"
msgstr ""
#: website/public/showcase/aegis/index.html:727
msgctxt "page:showcase/aegis/index.html"
msgid "Download Android analysis provider"
msgstr ""
#: website/public/showcase/aegis/index.html:733
msgctxt "page:showcase/aegis/index.html"
msgid "Point REA at the provider file and inspect the APK:"
msgstr ""
#: website/public/showcase/aegis/index.html:736
msgctxt "page:showcase/aegis/index.html"
msgid "macOS / Linux"
msgstr ""
#. {ph0}: <code>REA_JADX_MCP_JAR</code>
#: website/public/showcase/aegis/index.html:750
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid ""
"Your agent can continue through REA's CLI using the prompt above. For MCP, add {ph0} "
"to the REA server's environment and reconnect it."
msgstr ""
#. {ph0}: <strong >
#. {ph1}: </strong >
#: website/public/showcase/aegis/index.html:755
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid ""
"A next question: {ph0}what happens when an account uses eight digits or a different "
"time interval?{ph1}"
msgstr ""
#: website/public/showcase/aegis/index.html:765
msgctxt "page:showcase/aegis/index.html"
msgid "Sources"
msgstr ""
#. {ph0}: <a href="https://github.com/beemdevelopment/Aegis/releases/tag/v3.4.3" >
#. {ph1}: </a >
#. {ph2}: <a
#. href="https://github.com/beemdevelopment/Aegis/tree/d6f4e5925a97e4e91593f1542085eae03432a759"
#. >
#. {ph3}: </a >
#. {ph4}: <a
#. href="https://github.com/beemdevelopment/Aegis/blob/d6f4e5925a97e4e91593f1542085eae03432a759/LICENSE"
#. >
#. {ph5}: </a >
#: website/public/showcase/aegis/index.html:767
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid ""
"{ph0}Official Aegis 3.4.3 release{ph1} · {ph2}Matching source commit{ph3} · "
"{ph4}GPL-3.0 license{ph5}"
msgstr ""
#. {ph0}: <a href="https://www.rfc-editor.org/rfc/rfc6238.html#appendix-B" >
#. {ph1}: </a >
#. {ph2}: <a href="test-vectors.json">
#. {ph3}: </a>
#: website/public/showcase/aegis/index.html:783
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid "{ph0}RFC 6238 reference cases{ph1} · {ph2}Demo test data{ph3}"
msgstr ""
#: website/public/showcase/aegis/index.html:790
msgctxt "page:showcase/aegis/index.html"
msgid ""
"Inspected with REA 6.1.0 on 9 October 2026. Decompiled excerpts are credited to Aegis;"
" the diagram, readable summary and browser reconstruction are new teaching material."
msgstr ""
#: website/public/showcase/aegis/index.html:6
msgctxt "page:showcase/aegis/index.html"
msgid "Aegis APK Reverse Engineering: Login Codes — REA"
msgstr ""
#: website/public/showcase/aegis/index.html:7
msgctxt "page:showcase/aegis/index.html"
msgid ""
"Inspect the Aegis Android APK with REA, recover its six-digit login-code calculation "
"and try a reconstruction with an adjustable clock."
msgstr ""
#: website/public/showcase/aegis/index.html:250
msgctxt "page:showcase/aegis/index.html"
msgid "On this page"
msgstr ""
#: website/public/showcase/aegis/index.html:261
msgctxt "page:showcase/aegis/index.html"
msgid "Aegis APK case study"
msgstr ""
#: website/public/showcase/aegis/index.html:274
msgctxt "page:showcase/aegis/index.html"
msgid "Copy Aegis example prompt"
msgstr ""
#: website/public/showcase/aegis/index.html:487
msgctxt "page:showcase/aegis/index.html"
msgid "Follow the login-code calculation"
msgstr ""
#: website/public/showcase/aegis/index.html:737
msgctxt "page:showcase/aegis/index.html"
msgid "Copy APK inspection command"
msgstr ""
#: website/public/showcase/aegis/index.html:814
msgctxt "page:showcase/aegis/index.html"
msgid "Back to top"
msgstr ""
#: website/public/showcase/ctf/index.html:107
msgctxt "page:showcase/ctf/index.html"
msgid "Skip to content"
msgstr ""
#. {ph0}: <a href="../../">
#. {ph1}: </a>
#. {ph2}: <a href="../">
#. {ph3}: </a>
#: website/public/showcase/ctf/index.html:199
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / CTF"
msgstr ""
#: website/public/showcase/ctf/index.html:202
msgctxt "page:showcase/ctf/index.html"
msgid "Case study · DownUnderCTF 2023"
msgstr ""
#. {ph0}: <br />
#: website/public/showcase/ctf/index.html:203
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid "Find the flag in{ph0}a CTF binary."
msgstr ""
#. {ph0}: <code>Correct!</code>
#: website/public/showcase/ctf/index.html:204
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid ""
"Use REA to inspect a small flag checker, turn its rules into equations and find an "
"input that makes the original program print {ph0}."
msgstr ""
#: website/public/showcase/ctf/index.html:209
msgctxt "page:showcase/ctf/index.html"
msgid "masked squares flag checker · Easy · Linux x86-64"
msgstr ""
#: website/public/showcase/ctf/index.html:212
msgctxt "page:showcase/ctf/index.html"
msgid "View the original challenge"
msgstr ""
#: website/public/showcase/ctf/index.html:220
msgctxt "page:showcase/ctf/index.html"
msgid "From a binary to a checked answer"
msgstr ""
#. {ph0}: <span class="flow-label">
#. {ph1}: </span >
#. {ph2}: <strong class="flow-node">
#. {ph3}: </strong >
#. {ph4}: <span class="flow-note" >
#. {ph5}: </span >
#: website/public/showcase/ctf/index.html:222
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid ""
"{ph0}01 · Find the check{ph1}{ph2}Strings → checking functions{ph3}{ph4}REA finds the "
"prompt, its references and the code that accepts or rejects an input.{ph5}"
msgstr ""
#. {ph0}: <span class="flow-label">
#. {ph1}: </span >
#. {ph2}: <strong class="flow-node">
#. {ph3}: </strong >
#. {ph4}: <span class="flow-note" >
#. {ph5}: </span >
#: website/public/showcase/ctf/index.html:230
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid ""
"{ph0}02 · Extract the rules{ph1}{ph2}36 characters · 26 sums{ph3}{ph4}REA returns the "
"instructions and data behind each check. The agent turns them into equations.{ph5}"
msgstr ""
#. {ph0}: <span class="flow-label">
#. {ph1}: </span >
#. {ph2}: <strong class="flow-node">
#. {ph3}: </strong >
#. {ph4}: <span class="flow-note" >
#. {ph5}: </span >
#: website/public/showcase/ctf/index.html:238
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid ""
"{ph0}03 · Solve and run{ph1}{ph2}Recovered flag → Correct!{ph3}{ph4}A Python script "
"solves the equations. REA captures the original program accepting the result.{ph5}"
msgstr ""
#: website/public/showcase/ctf/index.html:247
msgctxt "page:showcase/ctf/index.html"
msgid "The challenge is by joseph, published in DownUnderCTF's official repository."
msgstr ""
#: website/public/showcase/ctf/index.html:255
msgctxt "page:showcase/ctf/index.html"
msgid "In this case study"
msgstr ""
#. {ph0}: <a href="#find">
#. {ph1}: </a>
#: website/public/showcase/ctf/index.html:257
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid "{ph0}Find the checking code{ph1}"
msgstr ""
#. {ph0}: <a href="#mask">
#. {ph1}: </a>
#: website/public/showcase/ctf/index.html:258
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid "{ph0}Read one mask{ph1}"
msgstr ""
#. {ph0}: <a href="#code">
#. {ph1}: </a>
#: website/public/showcase/ctf/index.html:259
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid "{ph0}Assembly to readable code{ph1}"
msgstr ""
#. {ph0}: <a href="#solve">
#. {ph1}: </a>
#: website/public/showcase/ctf/index.html:260
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid "{ph0}Solve the equations{ph1}"
msgstr ""
#. {ph0}: <a href="#verify">
#. {ph1}: </a>
#: website/public/showcase/ctf/index.html:261
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid "{ph0}Check the answer{ph1}"
msgstr ""
#. {ph0}: <a href="#try">
#. {ph1}: </a>
#: website/public/showcase/ctf/index.html:262
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid "{ph0}Try it yourself{ph1}"
msgstr ""
#: website/public/showcase/ctf/index.html:267
msgctxt "page:showcase/ctf/index.html"
msgid "Find the checking code"
msgstr ""
#. {ph0}: <code>Correct!</code>
#. {ph1}: <code>Incorrect!</code>
#: website/public/showcase/ctf/index.html:268
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid ""
"The handout is a 15 KB executable. It asks for a flag, then prints {ph0} or {ph1}. "
"Start with a simple request to your agent."
msgstr ""
#. {ph0}: <span class="terminal-dots" aria-hidden="true" >
#. {ph1}: <i>
#. {ph2}: </i>
#. {ph3}: <i>
#. {ph4}: </i>
#. {ph5}: <i>
#. {ph6}: </i>
#. {ph7}: </span >
#: website/public/showcase/ctf/index.html:275
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent"
msgstr ""
#: website/public/showcase/ctf/index.html:280 website/public/showcase/ctf/index.html:499
#: website/public/showcase/ctf/index.html:523 website/public/showcase/ctf/index.html:593
#: website/public/showcase/ctf/index.html:740
msgctxt "page:showcase/ctf/index.html"
msgid "Copy"
msgstr ""
#. {ph0}: <span class="prompt-symbol" aria-hidden="true">
#. {ph1}: </span >
#. {ph2}: <span id="ctf-prompt" >
#. {ph3}: </span >
#. {ph4}: <span class="terminal-cursor" aria-hidden="true">
#. {ph5}: </span>
#: website/public/showcase/ctf/index.html:289
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid ""
"{ph0}›{ph1}{ph2}Use REA to analyze ms_flag_checker and find the flag. Explain how the "
"checks work, then verify the answer with the original program.{ph3}{ph4}{ph5}"
msgstr ""
#: website/public/showcase/ctf/index.html:298
msgctxt "page:showcase/ctf/index.html"
msgid ""
"An example prompt, with the downloaded challenge available locally and a native "
"analysis provider connected."
msgstr ""
#: website/public/showcase/ctf/index.html:304
msgctxt "page:showcase/ctf/index.html"
msgid "Follow the input prompt to its function"
msgstr ""
#: website/public/showcase/ctf/index.html:307 website/public/showcase/ctf/index.html:343
msgctxt "page:showcase/ctf/index.html"
msgid "Agent → REA"
msgstr ""
#: website/public/showcase/ctf/index.html:323
msgctxt "page:showcase/ctf/index.html"
msgid "REA → agent · selected results"
msgstr ""
#: website/public/showcase/ctf/index.html:333
msgctxt "page:showcase/ctf/index.html"
msgid ""
"The reference gives the agent a place to investigate, even though the executable's "
"original function names have been removed."
msgstr ""
#: website/public/showcase/ctf/index.html:340
msgctxt "page:showcase/ctf/index.html"
msgid "Read the checker and its two helpers"
msgstr ""
#: website/public/showcase/ctf/index.html:355
msgctxt "page:showcase/ctf/index.html"
msgid "REA → agent · selected instructions"
msgstr ""
#. {ph0}: <code>0x18</code>
#. {ph1}: <code>0x270</code>
#: website/public/showcase/ctf/index.html:368
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid ""
"The first loop copies 36 character codes. The checking loop decodes a mask, sums the "
"selected codes and compares the result with a stored number. Its {ph0}-byte steps "
"across {ph1} bytes give 26 masks."
msgstr ""
#: website/public/showcase/ctf/index.html:376
msgctxt "page:showcase/ctf/index.html"
msgid ""
"These are selected results from a fresh REA analysis. The local target path is "
"shortened for display; addresses refer to REA's imported image."
msgstr ""
#: website/public/showcase/ctf/index.html:384
msgctxt "page:showcase/ctf/index.html"
msgid "One check reveals one character"
msgstr ""
#: website/public/showcase/ctf/index.html:385
msgctxt "page:showcase/ctf/index.html"
msgid ""
"The checker arranges the input in a 6×6 grid. A mask chooses which cells contribute to"
" a sum. Its compact encoding uses negative numbers to skip cells and positive numbers "
"to select them."
msgstr ""
#. {ph0}: <a href="../../assets/figures/ctf-mask-equation.svg" >
#. {ph1}: </a >
#: website/public/showcase/ctf/index.html:405
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid "The seventh check selects just one position. {ph0}Open figure{ph1}."
msgstr ""
#: website/public/showcase/ctf/index.html:412
msgctxt "page:showcase/ctf/index.html"
msgid "Read the mask and its target from the binary"
msgstr ""
#: website/public/showcase/ctf/index.html:418
msgctxt "page:showcase/ctf/index.html"
msgid "Agent → REA · read_bytes"
msgstr ""
#: website/public/showcase/ctf/index.html:425
msgctxt "page:showcase/ctf/index.html"
msgid "REA → agent · seventh entries"
msgstr ""
#. {ph0}: <code>MOVSX</code>
#. {ph1}: <code>eb</code>
#. {ph2}: <code>code[21] = 55</code>
#. {ph3}: <code>7</code>
#: website/public/showcase/ctf/index.html:434
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid ""
"The instruction {ph0} reads mask bytes as signed values. This is why {ph1} means −21. "
"The target is a little-endian integer. Together, these bytes tell the agent that "
"{ph2}, so that character is {ph3}."
msgstr ""
#: website/public/showcase/ctf/index.html:443
msgctxt "page:showcase/ctf/index.html"
msgid "From instructions to a readable check"
msgstr ""
#: website/public/showcase/ctf/index.html:444
msgctxt "page:showcase/ctf/index.html"
msgid ""
"Select a step to connect the summing helper and its caller to the same rule in C."
msgstr ""
#. {ph0}: <span>
#. {ph1}: </span>
#: website/public/showcase/ctf/index.html:454
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid "{ph0}01{ph1} Start"
msgstr ""
#. {ph0}: <span>
#. {ph1}: </span>
#: website/public/showcase/ctf/index.html:462
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid "{ph0}02{ph1} Select"
msgstr ""
#. {ph0}: <span>
#. {ph1}: </span>
#: website/public/showcase/ctf/index.html:470
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid "{ph0}03{ph1} Add"
msgstr ""
#. {ph0}: <span>
#. {ph1}: </span>
#: website/public/showcase/ctf/index.html:478
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid "{ph0}04{ph1} Advance"
msgstr ""
#. {ph0}: <span>
#. {ph1}: </span>
#: website/public/showcase/ctf/index.html:486
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid "{ph0}05{ph1} Compare"
msgstr ""
#: website/public/showcase/ctf/index.html:498
msgctxt "page:showcase/ctf/index.html"
msgid "REA · selected original instructions"
msgstr ""
#: website/public/showcase/ctf/index.html:522
msgctxt "page:showcase/ctf/index.html"
msgid "Readable C · one-check summary"
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#. {ph2}: <code>ECX</code>
#: website/public/showcase/ctf/index.html:551
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid "{ph0}01 · Start at zero.{ph1} {ph2} holds the running sum."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#: website/public/showcase/ctf/index.html:555
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid ""
"{ph0}02 · Check the mask cell.{ph1} A zero value skips the character; a nonzero value "
"includes it."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#: website/public/showcase/ctf/index.html:559
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid ""
"{ph0}03 · Add a character code.{ph1} The input's integer at the same offset is added "
"to the sum."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#: website/public/showcase/ctf/index.html:563
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid ""
"{ph0}04 · Move to the next cell.{ph1} The original loop advances four bytes per "
"integer and visits six rows of six cells."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#. {ph2}: <code>EAX</code>
#. {ph3}: <code>Incorrect!</code>
#: website/public/showcase/ctf/index.html:568
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid ""
"{ph0}05 · Compare with the stored target.{ph1} The caller receives the sum in {ph2}. A"
" mismatch jumps to {ph3}."
msgstr ""
#: website/public/showcase/ctf/index.html:575
msgctxt "page:showcase/ctf/index.html"
msgid ""
"The instructions come from the summing helper and its caller. The C is an explanatory "
"summary with descriptive names and a flattened 36-cell loop."
msgstr ""
#: website/public/showcase/ctf/index.html:583
msgctxt "page:showcase/ctf/index.html"
msgid "Solve the 26 equations"
msgstr ""
#: website/public/showcase/ctf/index.html:584
msgctxt "page:showcase/ctf/index.html"
msgid ""
"Most masks select several cells. For example, the first check adds 16 character codes "
"and requires a total of 1441. The overlapping selections give equations that a small "
"Python script can solve together."
msgstr ""
#: website/public/showcase/ctf/index.html:592
msgctxt "page:showcase/ctf/index.html"
msgid "Python · solver excerpt"
msgstr ""
#. {ph0}: <code>DUCTF{…}</code>
#: website/public/showcase/ctf/index.html:620
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid ""
"Z3 is a solver that finds values satisfying these equations. This excerpt uses the "
"extracted checks and assumes a {ph0} flag with letters, digits, underscores and "
"braces. The complete download includes all 26 masks and targets."
msgstr ""
#: website/public/showcase/ctf/index.html:626
msgctxt "page:showcase/ctf/index.html"
msgid "Download the complete solver"
msgstr ""
#: website/public/showcase/ctf/index.html:632
msgctxt "page:showcase/ctf/index.html"
msgid "Check the answer with the original program"
msgstr ""
#. {ph0}: <code>z</code>
#. {ph1}: <code>y</code>
#: website/public/showcase/ctf/index.html:633
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid ""
"REA's process capture records the original executable accepting the solved flag. "
"Changing one selected character from {ph0} to {ph1} makes the first sum 1440 instead "
"of 1441, and the program rejects it."
msgstr ""
#: website/public/showcase/ctf/index.html:643
msgctxt "page:showcase/ctf/index.html"
msgid "Input"
msgstr ""
#: website/public/showcase/ctf/index.html:644
msgctxt "page:showcase/ctf/index.html"
msgid "Observed output"
msgstr ""
#: website/public/showcase/ctf/index.html:645
msgctxt "page:showcase/ctf/index.html"
msgid "Exit code"
msgstr ""
#: website/public/showcase/ctf/index.html:650
msgctxt "page:showcase/ctf/index.html"
msgid "Solver's flag"
msgstr ""
#: website/public/showcase/ctf/index.html:655
msgctxt "page:showcase/ctf/index.html"
msgid "One character changed"
msgstr ""
#: website/public/showcase/ctf/index.html:663
msgctxt "page:showcase/ctf/index.html"
msgid "Show the recovered flag and captured output"
msgstr ""
#: website/public/showcase/ctf/index.html:666
msgctxt "page:showcase/ctf/index.html"
msgid "REA · original program output"
msgstr ""
#: website/public/showcase/ctf/index.html:667
msgctxt "page:showcase/ctf/index.html"
msgid "Copy flag"
msgstr ""
#: website/public/showcase/ctf/index.html:679
msgctxt "page:showcase/ctf/index.html"
msgid ""
"The recovered value also matches the flag in the organizers' published challenge "
"metadata, checked after solving the binary."
msgstr ""
#: website/public/showcase/ctf/index.html:685
msgctxt "page:showcase/ctf/index.html"
msgid "Source, target identity and analysis details"
msgstr ""
#: website/public/showcase/ctf/index.html:686
msgctxt "page:showcase/ctf/index.html"
msgid ""
"Fresh analysis and two process captures on 8 October 2026, using REA 4.1.0 with Ghidra"
" 12.1.4 on Linux x64. The binary is a stripped x86-64 ELF, 15,248 bytes."
msgstr ""
#: website/public/showcase/ctf/index.html:693
msgctxt "page:showcase/ctf/index.html"
msgid "Original executable · SHA-256"
msgstr ""
#: website/public/showcase/ctf/index.html:697
msgctxt "page:showcase/ctf/index.html"
msgid ""
"The string references, functions and constants were inspected before reading the "
"organizers' source or solution. The Python solver and the diagram were built from "
"those REA results."
msgstr ""
#. {ph0}: <a
#. href="https://github.com/DownUnderCTF/Challenges_2023_Public/blob/b48f83db2984bc7fa2ec7879a32d7efb1be8d333/rev/masked-
#. squares-flag-checker/src/ms_flag_checker.c" >
#. {ph1}: </a >
#. {ph2}: <a
#. href="https://github.com/DownUnderCTF/Challenges_2023_Public/blob/b48f83db2984bc7fa2ec7879a32d7efb1be8d333/rev/masked-
#. squares-flag-checker/ctfcli.yaml" >
#. {ph3}: </a >
#. {ph4}: <a href="https://github.com/morluto/rea/blob/main/website/evidence/ctf-masked-
#. squares.md" >
#. {ph5}: </a >
#: website/public/showcase/ctf/index.html:702
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid ""
"{ph0}Compare with the organizers' source{ph1} · {ph2}Challenge metadata and flag{ph3} "
"· {ph4}REA evidence notes{ph5}"
msgstr ""
#: website/public/showcase/ctf/index.html:722
msgctxt "page:showcase/ctf/index.html"
msgid "Try it yourself"
msgstr ""
#: website/public/showcase/ctf/index.html:723
msgctxt "page:showcase/ctf/index.html"
msgid ""
"Download the original challenge and the solver into one folder. Use the prompt above "
"to investigate with your agent, or run the included script."
msgstr ""
#: website/public/showcase/ctf/index.html:729
msgctxt "page:showcase/ctf/index.html"
msgid "Download the original challenge"
msgstr ""
#: website/public/showcase/ctf/index.html:733
msgctxt "page:showcase/ctf/index.html"
msgid "Download solver"
msgstr ""
#: website/public/showcase/ctf/index.html:739
msgctxt "page:showcase/ctf/index.html"
msgid "Terminal · solve and run"
msgstr ""
#. {ph0}: <code>z3-solver</code>
#: website/public/showcase/ctf/index.html:756
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid ""
"The script prints a candidate flag; paste it at the program's prompt. Solving needs "
"Python and {ph0}. Running the original executable needs Linux x86-64."
msgstr ""
#: website/public/showcase/ctf/index.html:761
msgctxt "page:showcase/ctf/index.html"
msgid "Set up REA with your coding agent"
msgstr ""
#: website/public/showcase/ctf/index.html:6
msgctxt "page:showcase/ctf/index.html"
msgid "CTF Reverse Engineering: DownUnderCTF Flag Checker — REA"
msgstr ""
#: website/public/showcase/ctf/index.html:7
msgctxt "page:showcase/ctf/index.html"
msgid ""
"Use REA to solve DownUnderCTF's masked squares flag checker. Find the checking "
"functions, extract the masks and compare a recovered flag with the original program."
msgstr ""
#: website/public/showcase/ctf/index.html:254
msgctxt "page:showcase/ctf/index.html"
msgid "On this page"
msgstr ""
#: website/public/showcase/ctf/index.html:265
msgctxt "page:showcase/ctf/index.html"
msgid "CTF flag-checker case study"
msgstr ""
#: website/public/showcase/ctf/index.html:280
msgctxt "page:showcase/ctf/index.html"
msgid "Copy CTF example prompt"
msgstr ""
#: website/public/showcase/ctf/index.html:391
msgctxt "page:showcase/ctf/index.html"
msgid "CTF mask equation; scroll horizontally on smaller screens"
msgstr ""
#: website/public/showcase/ctf/index.html:397
msgctxt "page:showcase/ctf/index.html"
msgid ""
"The seventh mask skips 21 cells, selects position 21, then skips 14. Only that cell "
"contributes to the sum. Its required character code is 55, which means the character "
"is 7."
msgstr ""
#: website/public/showcase/ctf/index.html:449
msgctxt "page:showcase/ctf/index.html"
msgid "Follow the CTF check"
msgstr ""
#: website/public/showcase/ctf/index.html:499
msgctxt "page:showcase/ctf/index.html"
msgid "Copy CTF assembly"
msgstr ""
#: website/public/showcase/ctf/index.html:523
msgctxt "page:showcase/ctf/index.html"
msgid "Copy readable CTF check"
msgstr ""
#: website/public/showcase/ctf/index.html:593
msgctxt "page:showcase/ctf/index.html"
msgid "Copy CTF solver excerpt"
msgstr ""
#: website/public/showcase/ctf/index.html:667
msgctxt "page:showcase/ctf/index.html"
msgid "Copy recovered flag"
msgstr ""
#: website/public/showcase/ctf/index.html:740
msgctxt "page:showcase/ctf/index.html"
msgid "Copy CTF solver commands"
msgstr ""
#: website/public/showcase/ctf/index.html:783
msgctxt "page:showcase/ctf/index.html"
msgid "Back to top"
msgstr ""
#: website/public/showcase/dx-ball/index.html:107
msgctxt "page:showcase/dx-ball/index.html"
msgid "Skip to content"
msgstr ""
#. {ph0}: <a href="../../">
#. {ph1}: </a>
#. {ph2}: <a href="../">
#. {ph3}: </a>
#: website/public/showcase/dx-ball/index.html:199
#, python-brace-format
msgctxt "page:showcase/dx-ball/index.html"
msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / DX-Ball"
msgstr ""
#: website/public/showcase/dx-ball/index.html:202
msgctxt "page:showcase/dx-ball/index.html"
msgid "Case study · DX-Ball 1.07"
msgstr ""
#. {ph0}: <br />
#: website/public/showcase/dx-ball/index.html:203
#, python-brace-format
msgctxt "page:showcase/dx-ball/index.html"
msgid "Rebuilding DX-Ball{ph0}from its executable."
msgstr ""
#: website/public/showcase/dx-ball/index.html:204
msgctxt "page:showcase/dx-ball/index.html"
msgid ""
"The goal is a maintainable C version of the 1996 Windows game. REA helps the agent "
"inspect the original, one function at a time."
msgstr ""
#: website/public/showcase/dx-ball/index.html:208
msgctxt "page:showcase/dx-ball/index.html"
msgid "Windows i386 · C · REA"
msgstr ""
#. {ph0}: <a href="../../assets/figures/dx-ball-sound-pan-investigation.svg" >
#. {ph1}: </a >
#: website/public/showcase/dx-ball/index.html:225
#, python-brace-format
msgctxt "page:showcase/dx-ball/index.html"
msgid ""
"One function, from executable to checked C. REA supplies the instructions, callers and"
" data reads; the reconstruction project implements and tests the result. {ph0}Open "
"figure{ph1}"
msgstr ""
#: website/public/showcase/dx-ball/index.html:236
msgctxt "page:showcase/dx-ball/index.html"
msgid "In this case study"
msgstr ""
#. {ph0}: <a href="#progress">
#. {ph1}: </a>
#: website/public/showcase/dx-ball/index.html:238
#, python-brace-format
msgctxt "page:showcase/dx-ball/index.html"
msgid "{ph0}The project{ph1}"
msgstr ""
#. {ph0}: <a href="#sound-pan">
#. {ph1}: </a>
#: website/public/showcase/dx-ball/index.html:239
#, python-brace-format
msgctxt "page:showcase/dx-ball/index.html"
msgid "{ph0}Sound pan{ph1}"
msgstr ""
#. {ph0}: <a href="#checking">
#. {ph1}: </a>
#: website/public/showcase/dx-ball/index.html:240
#, python-brace-format
msgctxt "page:showcase/dx-ball/index.html"
msgid "{ph0}Checking the result{ph1}"
msgstr ""
#. {ph0}: <a href="#continue">
#. {ph1}: </a>
#: website/public/showcase/dx-ball/index.html:241
#, python-brace-format
msgctxt "page:showcase/dx-ball/index.html"
msgid "{ph0}Continue the work{ph1}"
msgstr ""
#: website/public/showcase/dx-ball/index.html:249
msgctxt "page:showcase/dx-ball/index.html"
msgid "maintained C functions"
msgstr ""
#: website/public/showcase/dx-ball/index.html:253
msgctxt "page:showcase/dx-ball/index.html"
msgid "comparisons with original code"
msgstr ""
#: website/public/showcase/dx-ball/index.html:257
msgctxt "page:showcase/dx-ball/index.html"
msgid "functions with matching compiled bytes"
msgstr ""
#. {ph0}: <a href="https://github.com/N0zoM1z0/dx-
#. ball/blob/a55dca27ec0a07018c1b2c95ae2be027f7d8c3c4/docs/PROGRESS.md" >
#. {ph1}: </a >
#. {ph2}: <a href="https://github.com/N0zoM1z0/dx-
#. ball/blob/a55dca27ec0a07018c1b2c95ae2be027f7d8c3c4/docs/ORACLES.md" >
#. {ph3}: </a >
#: website/public/showcase/dx-ball/index.html:260
#, python-brace-format
msgctxt "page:showcase/dx-ball/index.html"
msgid ""
"Project checkpoint: 7 October 2026. {ph0}Progress ledger{ph1} · {ph2}Test "
"coverage{ph3}"
msgstr ""
#: website/public/showcase/dx-ball/index.html:272
msgctxt "page:showcase/dx-ball/index.html"
msgid "The project so far"
msgstr ""
#: website/public/showcase/dx-ball/index.html:273
msgctxt "page:showcase/dx-ball/index.html"
msgid ""
"The recovered code covers board and resource handling, brick hits, animations, "
"particles and bonus production. Current builds provide inspection utilities and an "
"analysis library. Work on the playable game continues with ball and paddle physics, "
"power-up handling and Windows integration."
msgstr ""
#: website/public/showcase/dx-ball/index.html:283
msgctxt "page:showcase/dx-ball/index.html"
msgid "Finding the sound-pan calculation"
msgstr ""
#: website/public/showcase/dx-ball/index.html:284
msgctxt "page:showcase/dx-ball/index.html"
msgid ""
"When a brick is hit, its horizontal position is passed to the sound code. The "
"investigation needed to recover how that screen coordinate becomes a left/right "
"panning value."
msgstr ""
#. {ph0}: <span class="terminal-dots" aria-hidden="true" >
#. {ph1}: <i>
#. {ph2}: </i>
#. {ph3}: <i>
#. {ph4}: </i>
#. {ph5}: <i>
#. {ph6}: </i>
#. {ph7}: </span >
#: website/public/showcase/dx-ball/index.html:291
#, python-brace-format
msgctxt "page:showcase/dx-ball/index.html"
msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent"
msgstr ""
#: website/public/showcase/dx-ball/index.html:295
#: website/public/showcase/dx-ball/index.html:486
#: website/public/showcase/dx-ball/index.html:507
#: website/public/showcase/dx-ball/index.html:578
#: website/public/showcase/dx-ball/index.html:732
msgctxt "page:showcase/dx-ball/index.html"
msgid "Copy"
msgstr ""
#. {ph0}: <span class="prompt-symbol" aria-hidden="true">
#. {ph1}: </span >
#. {ph2}: <span id="dxball-prompt" >
#. {ph3}: </span >
#. {ph4}: <span class="terminal-cursor" aria-hidden="true">
#. {ph5}: </span>
#: website/public/showcase/dx-ball/index.html:304
#, python-brace-format
msgctxt "page:showcase/dx-ball/index.html"
msgid ""
"{ph0}›{ph1}{ph2}Use REA to find how DX-Ball calculates sound panning. Explain the "
"calculation and show the code.{ph3}{ph4}{ph5}"
msgstr ""
#: website/public/showcase/dx-ball/index.html:312
msgctxt "page:showcase/dx-ball/index.html"
msgid ""
"An example prompt for your coding agent, with the local executable available. The "
"investigation below shows the REA queries and evidence behind the answer."
msgstr ""
#: website/public/showcase/dx-ball/index.html:317
msgctxt "page:showcase/dx-ball/index.html"
msgid ""
"The agent used REA to inspect the function, follow its brick-hit caller and read the "
"constants from the executable. Those results supplied the input and arithmetic needed "
"to write the C function below."
msgstr ""
#. {ph0}: <code>0x406400</code>
#. {ph1}: <code>FUN_00406400(void)</code>
#. {ph2}: <code>__ftol()</code>
#: website/public/showcase/dx-ball/index.html:323
#, python-brace-format
msgctxt "page:showcase/dx-ball/index.html"
msgid ""
"The first function result for {ph0} included pseudocode declaring {ph1} and calling "
"{ph2}. Its instruction view showed a stack input and floating-point operations. That "
"discrepancy gave the agent a concrete reason to keep investigating."
msgstr ""
#: website/public/showcase/dx-ball/index.html:331
msgctxt "page:showcase/dx-ball/index.html"
msgid "The first decompiler view"
msgstr ""
#: website/public/showcase/dx-ball/index.html:334
msgctxt "page:showcase/dx-ball/index.html"
msgid "REA result · pseudocode excerpt"
msgstr ""
#: website/public/showcase/dx-ball/index.html:344
msgctxt "page:showcase/dx-ball/index.html"
msgid ""
"The output shows a conversion call. Reading the instructions below reveals the input "
"and the calculation feeding that call."
msgstr ""
#: website/public/showcase/dx-ball/index.html:350
msgctxt "page:showcase/dx-ball/index.html"
msgid "Three questions answered through REA"
msgstr ""
#: website/public/showcase/dx-ball/index.html:353
msgctxt "page:showcase/dx-ball/index.html"
msgid "Recover the missing input"
msgstr ""
#. {ph0}: <code>analyze_function</code>
#: website/public/showcase/dx-ball/index.html:357
#: website/public/showcase/dx-ball/index.html:381
#, python-brace-format
msgctxt "page:showcase/dx-ball/index.html"
msgid "Agent → REA · {ph0}"
msgstr ""
#: website/public/showcase/dx-ball/index.html:363
msgctxt "page:showcase/dx-ball/index.html"
msgid "REA → agent · instruction excerpt"
msgstr ""
#. {ph0}: <code>[EBP+8]</code>
#: website/public/showcase/dx-ball/index.html:370
#, python-brace-format
msgctxt "page:showcase/dx-ball/index.html"
msgid ""
"The function result includes instructions alongside pseudocode and callers. Here, "
"{ph0} exposes the integer input missing from the decompiler view."
msgstr ""
#: website/public/showcase/dx-ball/index.html:377
msgctxt "page:showcase/dx-ball/index.html"
msgid "Follow the caller to understand the input"
msgstr ""
#: website/public/showcase/dx-ball/index.html:387
msgctxt "page:showcase/dx-ball/index.html"
msgid "REA → agent · caller excerpt"
msgstr ""
#. {ph0}: <code>tile_x</code>
#. {ph1}: <code>20 + 30 × tile_x</code>
#: website/public/showcase/dx-ball/index.html:394
#, python-brace-format
msgctxt "page:showcase/dx-ball/index.html"
msgid ""
"REA identified this caller in the first result. Its preceding instructions scale {ph0}"
" by 30; adding 20 gives the brick's screen coordinate, {ph1}."
msgstr ""
#: website/public/showcase/dx-ball/index.html:401
msgctxt "page:showcase/dx-ball/index.html"
msgid "Read the values behind the memory addresses"
msgstr ""
#. {ph0}: <code>read_bytes</code>
#: website/public/showcase/dx-ball/index.html:405
#, python-brace-format
msgctxt "page:showcase/dx-ball/index.html"
msgid "Agent → REA · two {ph0} requests"
msgstr ""
#: website/public/showcase/dx-ball/index.html:415
msgctxt "page:showcase/dx-ball/index.html"
msgid "REA byte results · decoded as doubles"
msgstr ""
#: website/public/showcase/dx-ball/index.html:422
msgctxt "page:showcase/dx-ball/index.html"
msgid ""
"The returned bytes establish the two arithmetic constants and initial pan scale. The "
"agent now has the values needed for the C expression."
msgstr ""
#: website/public/showcase/dx-ball/index.html:430
msgctxt "page:showcase/dx-ball/index.html"
msgid "From REA's findings to C"
msgstr ""
#: website/public/showcase/dx-ball/index.html:431
msgctxt "page:showcase/dx-ball/index.html"
msgid ""
"Follow the five steps below. Each selection highlights the original instructions and "
"the C lines they informed."
msgstr ""
#. {ph0}: <span>
#. {ph1}: </span>
#: website/public/showcase/dx-ball/index.html:441
#, python-brace-format
msgctxt "page:showcase/dx-ball/index.html"
msgid "{ph0}01{ph1} Input"
msgstr ""
#. {ph0}: <span>
#. {ph1}: </span>
#: website/public/showcase/dx-ball/index.html:449
#, python-brace-format
msgctxt "page:showcase/dx-ball/index.html"
msgid "{ph0}02{ph1} Multiply"
msgstr ""
#. {ph0}: <span>
#. {ph1}: </span>
#: website/public/showcase/dx-ball/index.html:457
#, python-brace-format
msgctxt "page:showcase/dx-ball/index.html"
msgid "{ph0}03{ph1} Subtract"
msgstr ""
#. {ph0}: <span>
#. {ph1}: </span>
#: website/public/showcase/dx-ball/index.html:465
#, python-brace-format
msgctxt "page:showcase/dx-ball/index.html"
msgid "{ph0}04{ph1} Scale"
msgstr ""
#. {ph0}: <span>
#. {ph1}: </span>
#: website/public/showcase/dx-ball/index.html:473
#, python-brace-format
msgctxt "page:showcase/dx-ball/index.html"
msgid "{ph0}05{ph1} Return"
msgstr ""
#: website/public/showcase/dx-ball/index.html:485
msgctxt "page:showcase/dx-ball/index.html"
msgid "Original x86 · excerpt"
msgstr ""
#: website/public/showcase/dx-ball/index.html:506
msgctxt "page:showcase/dx-ball/index.html"
msgid "Reconstructed C"
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#. {ph2}: <code>[EBP+8]</code>
#. {ph3}: <code>FILD</code>
#. {ph4}: <code>x</code>
#: website/public/showcase/dx-ball/index.html:533
#, python-brace-format
msgctxt "page:showcase/dx-ball/index.html"
msgid ""
"{ph0}01 · Read the input.{ph1} The instruction view in REA's function result reads "
"{ph2} and uses {ph3} to load the integer. Following its caller through REA establishes"
" the screen-coordinate meaning of the C parameter {ph4}."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#. {ph2}: <code>FMUL</code>
#. {ph3}: <code>0x420068</code>
#. {ph4}: <code>read_bytes</code>
#. {ph5}: <code>1.5625</code>
#: website/public/showcase/dx-ball/index.html:540
#, python-brace-format
msgctxt "page:showcase/dx-ball/index.html"
msgid ""
"{ph0}02 · Multiply by 1.5625.{ph1} {ph2} reads the double at {ph3}. The bytes returned"
" by REA's {ph4} decode to {ph5}; the C uses the same constant."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#. {ph2}: <code>FSUB</code>
#. {ph3}: <code>0x420070</code>
#. {ph4}: <code>500.0</code>
#. {ph5}: <code>320</code>
#: website/public/showcase/dx-ball/index.html:546
#, python-brace-format
msgctxt "page:showcase/dx-ball/index.html"
msgid ""
"{ph0}03 · Subtract 500.0.{ph1} {ph2} reads the double at {ph3}. REA's byte result "
"decodes to {ph4}, shifting the calculation's center to screen coordinate {ph5}."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#. {ph2}: <code>FMUL</code>
#. {ph3}: <code>0x4210a0</code>
#. {ph4}: <code>dxball_pan_scale</code>
#. {ph5}: <code>1.0</code>
#: website/public/showcase/dx-ball/index.html:552
#, python-brace-format
msgctxt "page:showcase/dx-ball/index.html"
msgid ""
"{ph0}04 · Apply the stored scale.{ph1} The second {ph2} reads {ph3}. That global is "
"named {ph4} in the maintained source. REA's second byte read establishes its initial "
"value of {ph5}."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#. {ph2}: <code>0x406430</code>
#. {ph3}: <code>__ftol</code>
#. {ph4}: <code>DxBallInt</code>
#: website/public/showcase/dx-ball/index.html:559
#, python-brace-format
msgctxt "page:showcase/dx-ball/index.html"
msgid ""
"{ph0}05 · Return an integer.{ph1} The call at {ph2} reaches {ph3}, identified in REA's"
" callee results. The C casts the result to {ph4}; original-x86 comparisons check the "
"returned value."
msgstr ""
#: website/public/showcase/dx-ball/index.html:568
msgctxt "page:showcase/dx-ball/index.html"
msgid ""
"The assembly excerpt selects the input, arithmetic and return instructions. The full "
"listing below also includes the intervening stores and function setup and cleanup."
msgstr ""
#: website/public/showcase/dx-ball/index.html:574
msgctxt "page:showcase/dx-ball/index.html"
msgid "Full assembly and supporting evidence"
msgstr ""
#: website/public/showcase/dx-ball/index.html:577
msgctxt "page:showcase/dx-ball/index.html"
msgid "REA result · 0x406400–0x40643e"
msgstr ""
#: website/public/showcase/dx-ball/index.html:611
msgctxt "page:showcase/dx-ball/index.html"
msgid "What the caller supplies"
msgstr ""
#. {ph0}: <code>0x411f40</code>
#: website/public/showcase/dx-ball/index.html:612
#, python-brace-format
msgctxt "page:showcase/dx-ball/index.html"
msgid ""
"The brick-hit function at {ph0} scales its tile coordinate by 30, adds 20, then pushes"
" it before the call:"
msgstr ""
#: website/public/showcase/dx-ball/index.html:626
msgctxt "page:showcase/dx-ball/index.html"
msgid "What the data reads establish"
msgstr ""
#: website/public/showcase/dx-ball/index.html:629
msgctxt "page:showcase/dx-ball/index.html"
msgid "REA byte reads, decoded as little-endian doubles"
msgstr ""
#: website/public/showcase/dx-ball/index.html:634
msgctxt "page:showcase/dx-ball/index.html"
msgid "Address"
msgstr ""
#: website/public/showcase/dx-ball/index.html:635
msgctxt "page:showcase/dx-ball/index.html"
msgid "Value"
msgstr ""
#: website/public/showcase/dx-ball/index.html:636
msgctxt "page:showcase/dx-ball/index.html"
msgid "Used for"
msgstr ""
#: website/public/showcase/dx-ball/index.html:643
msgctxt "page:showcase/dx-ball/index.html"
msgid "First multiplication"
msgstr ""
#: website/public/showcase/dx-ball/index.html:648
msgctxt "page:showcase/dx-ball/index.html"
msgid "Subtraction"
msgstr ""
#. {ph0}: <code>1.0</code>
#: website/public/showcase/dx-ball/index.html:652
#, python-brace-format
msgctxt "page:showcase/dx-ball/index.html"
msgid "{ph0} initially"
msgstr ""
#: website/public/showcase/dx-ball/index.html:653
msgctxt "page:showcase/dx-ball/index.html"
msgid "Stored pan scale"
msgstr ""
#: website/public/showcase/dx-ball/index.html:658
msgctxt "page:showcase/dx-ball/index.html"
msgid ""
"Recorded with REA 4.1.0 for the hash-pinned DX-Ball 1.07 target. The linked "
"investigation notes retain the Evidence IDs."
msgstr ""
#. {ph0}: <a href="https://github.com/N0zoM1z0/dx-
#. ball/blob/a55dca27ec0a07018c1b2c95ae2be027f7d8c3c4/src/gameplay.c#L41" >
#. {ph1}: </a >
#. {ph2}: <a href="https://github.com/N0zoM1z0/dx-
#. ball/blob/a55dca27ec0a07018c1b2c95ae2be027f7d8c3c4/docs/GAMEPLAY_OWNER.md" >
#. {ph3}: </a >
#: website/public/showcase/dx-ball/index.html:663
#, python-brace-format
msgctxt "page:showcase/dx-ball/index.html"
msgid ""
"{ph0}Maintained source{ph1} · {ph2}Investigation notes and evidence references{ph3}"
msgstr ""
#: website/public/showcase/dx-ball/index.html:677
msgctxt "page:showcase/dx-ball/index.html"
msgid "Checking the recovered function"
msgstr ""
#: website/public/showcase/dx-ball/index.html:678
msgctxt "page:showcase/dx-ball/index.html"
msgid ""
"The recovered function passes two checks: its return values match the original, and "
"its compiled bytes match the executable."
msgstr ""
#: website/public/showcase/dx-ball/index.html:684
msgctxt "page:showcase/dx-ball/index.html"
msgid "3,205 behavior cases"
msgstr ""
#: website/public/showcase/dx-ball/index.html:685
msgctxt "page:showcase/dx-ball/index.html"
msgid ""
"The tests execute the original x86 function and compare its return value with the "
"maintained C. They cover every integer position from 0 to 640 at five pan scales: 0, "
"0.5, 1, 20 and −1."
msgstr ""
#: website/public/showcase/dx-ball/index.html:693
msgctxt "page:showcase/dx-ball/index.html"
msgid "63 matching bytes"
msgstr ""
#: website/public/showcase/dx-ball/index.html:694
msgctxt "page:showcase/dx-ball/index.html"
msgid ""
"The C function is compiled with the pinned VC4.0 toolchain. Compiler replay matches "
"the complete function after applying the reviewed relocations and checking the "
"referenced constants."
msgstr ""
#: website/public/showcase/dx-ball/index.html:702
msgctxt "page:showcase/dx-ball/index.html"
msgid ""
"At a scale of 1, the recovered calculation returns −500 at the left edge, 0 at the "
"center and 500 at the right edge. The next part of the audio work is integrating that "
"value with the game's sound backend."
msgstr ""
#. {ph0}: <a href="https://github.com/N0zoM1z0/dx-
#. ball/blob/a55dca27ec0a07018c1b2c95ae2be027f7d8c3c4/docs/BUILD_MATCHING.md" >
#. {ph1}: </a >
#: website/public/showcase/dx-ball/index.html:708
#, python-brace-format
msgctxt "page:showcase/dx-ball/index.html"
msgid "{ph0}Read the compiler replay details{ph1}"
msgstr ""
#: website/public/showcase/dx-ball/index.html:717
msgctxt "page:showcase/dx-ball/index.html"
msgid "Continue the investigation"
msgstr ""
#: website/public/showcase/dx-ball/index.html:718
msgctxt "page:showcase/dx-ball/index.html"
msgid ""
"The same approach is being used for particle updates, explosion queues and bonus "
"generation: inspect the relevant functions, recover their state and dependencies, then"
" compare the implementation with the original."
msgstr ""
#: website/public/showcase/dx-ball/index.html:724
msgctxt "page:showcase/dx-ball/index.html"
msgid ""
"To inspect the sound-pan function yourself, follow the DX-Ball project's setup "
"instructions and supply its matching original target. Then run:"
msgstr ""
#: website/public/showcase/dx-ball/index.html:731
msgctxt "page:showcase/dx-ball/index.html"
msgid "In the DX-Ball checkout"
msgstr ""
#. {ph0}: <a href="https://github.com/N0zoM1z0/dx-ball" >
#. {ph1}: </a >
#. {ph2}: <span>
#. {ph3}: </span>
#: website/public/showcase/dx-ball/index.html:745
#, python-brace-format
msgctxt "page:showcase/dx-ball/index.html"
msgid "{ph0}DX-Ball repository{ph1}{ph2}Current source, progress and local setup.{ph3}"
msgstr ""
#. {ph0}: <a href="../../guides/native/">
#. {ph1}: </a >
#. {ph2}: <span >
#. {ph3}: </span >
#: website/public/showcase/dx-ball/index.html:750
#, python-brace-format
msgctxt "page:showcase/dx-ball/index.html"
msgid ""
"{ph0}REA analysis workflow{ph1}{ph2}Follow the calculation, then use the same approach"
" with your own binary.{ph3}"
msgstr ""
#. {ph0}: <a href="https://github.com/N0zoM1z0/dx-
#. ball/blob/a55dca27ec0a07018c1b2c95ae2be027f7d8c3c4/docs/ENTITIES_OWNER.md" >
#. {ph1}: </a >
#. {ph2}: <span >
#. {ph3}: </span >
#: website/public/showcase/dx-ball/index.html:757
#, python-brace-format
msgctxt "page:showcase/dx-ball/index.html"
msgid ""
"{ph0}Particles and bonus production{ph1}{ph2}A larger investigation into state, queues"
" and pixel writes.{ph3}"
msgstr ""
#: website/public/showcase/dx-ball/index.html:768
msgctxt "page:showcase/dx-ball/index.html"
msgid "Start with your own target"
msgstr ""
#: website/public/showcase/dx-ball/index.html:6
msgctxt "page:showcase/dx-ball/index.html"
msgid "DX-Ball Reverse Engineering: Sound Panning — REA"
msgstr ""
#: website/public/showcase/dx-ball/index.html:7
msgctxt "page:showcase/dx-ball/index.html"
msgid ""
"Follow a DX-Ball reconstruction from binary analysis through REA to maintained C, "
"original-x86 tests and matching compiled function bytes."
msgstr ""
#: website/public/showcase/dx-ball/index.html:211
msgctxt "page:showcase/dx-ball/index.html"
msgid "DX-Ball sound-pan investigation; scroll horizontally on smaller screens"
msgstr ""
#: website/public/showcase/dx-ball/index.html:217
msgctxt "page:showcase/dx-ball/index.html"
msgid ""
"DXBALL.EXE function 0x00406400 is inspected with REA. A brick-hit caller supplies 20 "
"plus 30 times tile_x. Instructions load x, multiply by 1.5625, subtract 500.0, apply "
"pan_scale and return an integer. The maintained C is checked independently against the"
" original x86 in 3,205 cases and by VC4.0 compiler replay matching 63 bytes."
msgstr ""
#: website/public/showcase/dx-ball/index.html:235
msgctxt "page:showcase/dx-ball/index.html"
msgid "On this page"
msgstr ""
#: website/public/showcase/dx-ball/index.html:244
msgctxt "page:showcase/dx-ball/index.html"
msgid "DX-Ball reconstruction case study"
msgstr ""
#: website/public/showcase/dx-ball/index.html:295
msgctxt "page:showcase/dx-ball/index.html"
msgid "Copy example prompt"
msgstr ""
#: website/public/showcase/dx-ball/index.html:436
msgctxt "page:showcase/dx-ball/index.html"
msgid "Follow the sound-pan calculation"
msgstr ""
#: website/public/showcase/dx-ball/index.html:486
msgctxt "page:showcase/dx-ball/index.html"
msgid "Copy original assembly excerpt"
msgstr ""
#: website/public/showcase/dx-ball/index.html:507
msgctxt "page:showcase/dx-ball/index.html"
msgid "Copy sound-pan function"
msgstr ""
#: website/public/showcase/dx-ball/index.html:578
msgctxt "page:showcase/dx-ball/index.html"
msgid "Copy complete sound-pan assembly"
msgstr ""
#: website/public/showcase/dx-ball/index.html:732
msgctxt "page:showcase/dx-ball/index.html"
msgid "Copy DX-Ball analysis command"
msgstr ""
#: website/public/showcase/dx-ball/index.html:791
msgctxt "page:showcase/dx-ball/index.html"
msgid "Back to top"
msgstr ""
#: website/public/showcase/index.html:107
msgctxt "page:showcase/index.html"
msgid "Skip to content"
msgstr ""
#. {ph0}: <a href="../">
#. {ph1}: </a>
#: website/public/showcase/index.html:199
#, python-brace-format
msgctxt "page:showcase/index.html"
msgid "{ph0}Home{ph1} / Showcases"
msgstr ""
#: website/public/showcase/index.html:200
msgctxt "page:showcase/index.html"
msgid "REA case studies."
msgstr ""
#: website/public/showcase/index.html:201
msgctxt "page:showcase/index.html"
msgid ""
"Android, games, Electron and a CTF challenge, with code, figures and checked results."
msgstr ""
#: website/public/showcase/index.html:208
msgctxt "page:showcase/index.html"
msgid "Android · APK analysis"
msgstr ""
#: website/public/showcase/index.html:210
msgctxt "page:showcase/index.html"
msgid "How an authenticator generates a login code"
msgstr ""
#: website/public/showcase/index.html:211
msgctxt "page:showcase/index.html"
msgid ""
"Find Aegis's six-digit code calculation in its released APK. Trace the generating "
"methods with REA, then move a demo clock to see why the code changes every 30 seconds."
msgstr ""
#: website/public/showcase/index.html:217
msgctxt "page:showcase/index.html"
msgid "APK"
msgstr ""
#: website/public/showcase/index.html:218
msgctxt "page:showcase/index.html"
msgid "Generating code"
msgstr ""
#: website/public/showcase/index.html:219
msgctxt "page:showcase/index.html"
msgid "Recovered rule"
msgstr ""
#: website/public/showcase/index.html:220
msgctxt "page:showcase/index.html"
msgid "Adjustable clock"
msgstr ""
#: website/public/showcase/index.html:222
msgctxt "page:showcase/index.html"
msgid "Read the Android case study"
msgstr ""
#: website/public/showcase/index.html:226
msgctxt "page:showcase/index.html"
msgid "CTF · Native analysis"
msgstr ""
#: website/public/showcase/index.html:228
msgctxt "page:showcase/index.html"
msgid "Solve a CTF flag checker"
msgstr ""
#: website/public/showcase/index.html:229
msgctxt "page:showcase/index.html"
msgid ""
"Inspect an easy DownUnderCTF challenge with REA. Find its checking functions, turn "
"masks and sums into equations, then verify the solved flag with the original program."
msgstr ""
#: website/public/showcase/index.html:235
msgctxt "page:showcase/index.html"
msgid "Binary"
msgstr ""
#: website/public/showcase/index.html:236
msgctxt "page:showcase/index.html"
msgid "Checking code"
msgstr ""
#: website/public/showcase/index.html:237
msgctxt "page:showcase/index.html"
msgid "Equations"
msgstr ""
#: website/public/showcase/index.html:238
msgctxt "page:showcase/index.html"
msgid "Correct!"
msgstr ""
#: website/public/showcase/index.html:240
msgctxt "page:showcase/index.html"
msgid "Read the CTF case study"
msgstr ""
#: website/public/showcase/index.html:244
msgctxt "page:showcase/index.html"
msgid "Native · Reconstruction"
msgstr ""
#: website/public/showcase/index.html:246
msgctxt "page:showcase/index.html"
msgid "DX-Ball's sound-pan calculation"
msgstr ""
#: website/public/showcase/index.html:247
msgctxt "page:showcase/index.html"
msgid ""
"Recover a sound-pan calculation from a 1996 Windows game. REA's instructions, caller "
"references and numeric constants lead to a small C function, checked against the "
"original behavior and all 63 compiled bytes."
msgstr ""
#: website/public/showcase/index.html:254
msgctxt "page:showcase/index.html"
msgid "Executable"
msgstr ""
#: website/public/showcase/index.html:255
msgctxt "page:showcase/index.html"
msgid "REA findings"
msgstr ""
#: website/public/showcase/index.html:256
msgctxt "page:showcase/index.html"
msgid "Recovered C"
msgstr ""
#: website/public/showcase/index.html:257
msgctxt "page:showcase/index.html"
msgid "Validation"
msgstr ""
#: website/public/showcase/index.html:259
msgctxt "page:showcase/index.html"
msgid "Read the DX-Ball case study"
msgstr ""
#: website/public/showcase/index.html:263
msgctxt "page:showcase/index.html"
msgid "Electron · Feature tracing"
msgstr ""
#: website/public/showcase/index.html:265
msgctxt "page:showcase/index.html"
msgid "How Notion copies text and HTML"
msgstr ""
#: website/public/showcase/index.html:266
msgctxt "page:showcase/index.html"
msgid ""
"Trace a page-facing API through Notion's packaged JavaScript. Follow its IPC wrappers "
"to the system clipboard, then see how a small HTML marker keeps rich block data "
"connected to a copy."
msgstr ""
#: website/public/showcase/index.html:272
msgctxt "page:showcase/index.html"
msgid "Packaged app"
msgstr ""
#: website/public/showcase/index.html:273
msgctxt "page:showcase/index.html"
msgid "Exposed API"
msgstr ""
#: website/public/showcase/index.html:274
msgctxt "page:showcase/index.html"
msgid "IPC wrappers"
msgstr ""
#: website/public/showcase/index.html:275
msgctxt "page:showcase/index.html"
msgid "Clipboard"
msgstr ""
#: website/public/showcase/index.html:277
msgctxt "page:showcase/index.html"
msgid "Read the Notion case study"
msgstr ""
#: website/public/showcase/index.html:281
msgctxt "page:showcase/index.html"
msgid "PC-98 DOS · Reconstruction"
msgstr ""
#: website/public/showcase/index.html:283
msgctxt "page:showcase/index.html"
msgid "How TH04 aims a ring of bullets"
msgstr ""
#: website/public/showcase/index.html:284
msgctxt "page:showcase/index.html"
msgid ""
"Inspect the original 16-bit angle helper with REA. Match its multiply, divide and "
"coordinate operations to readable C++, then see how they produce a ring aimed at the "
"player."
msgstr ""
#: website/public/showcase/index.html:290
msgctxt "page:showcase/index.html"
msgid "Original DOS code"
msgstr ""
#: website/public/showcase/index.html:291
msgctxt "page:showcase/index.html"
msgid "REA instructions"
msgstr ""
#: website/public/showcase/index.html:292
msgctxt "page:showcase/index.html"
msgid "Angle calculation"
msgstr ""
#: website/public/showcase/index.html:293
msgctxt "page:showcase/index.html"
msgid "Bullet ring"
msgstr ""
#: website/public/showcase/index.html:295
msgctxt "page:showcase/index.html"
msgid "Read the TH04 case study"
msgstr ""
#: website/public/showcase/index.html:300
msgctxt "page:showcase/index.html"
msgid "Step-by-step guides"
msgstr ""
#: website/public/showcase/index.html:301
msgctxt "page:showcase/index.html"
msgid ""
"The guides walk through a native calculation, an Electron export and a browser "
"request. Each starts with a prompt and a concrete target."
msgstr ""
#: website/public/showcase/index.html:305
msgctxt "page:showcase/index.html"
msgid "Read the guides"
msgstr ""
#: website/public/showcase/index.html:6
msgctxt "page:showcase/index.html"
msgid "Reverse Engineering Case Studies — REA"
msgstr ""
#: website/public/showcase/index.html:7
msgctxt "page:showcase/index.html"
msgid ""
"Follow REA investigations through code, figures and demos: an Android authenticator, "
"DX-Ball, Notion, TH04 and a DownUnderCTF flag checker."
msgstr ""
#: website/public/showcase/index.html:323
msgctxt "page:showcase/index.html"
msgid "Back to top"
msgstr ""
#: website/public/showcase/notion/index.html:107
msgctxt "page:showcase/notion/index.html"
msgid "Skip to content"
msgstr ""
#. {ph0}: <a href="../../">
#. {ph1}: </a>
#. {ph2}: <a href="../">
#. {ph3}: </a>
#: website/public/showcase/notion/index.html:199
#, python-brace-format
msgctxt "page:showcase/notion/index.html"
msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / Notion"
msgstr ""
#: website/public/showcase/notion/index.html:202
msgctxt "page:showcase/notion/index.html"
msgid "Case study · Electron"
msgstr ""
#. {ph0}: <br />
#: website/public/showcase/notion/index.html:203
#, python-brace-format
msgctxt "page:showcase/notion/index.html"
msgid "How Notion copies{ph0}text and HTML."
msgstr ""
#: website/public/showcase/notion/index.html:204
msgctxt "page:showcase/notion/index.html"
msgid ""
"Trace a clipboard call from Notion's page API, through the preload and main process, "
"to Electron's clipboard writer."
msgstr ""
#: website/public/showcase/notion/index.html:208
msgctxt "page:showcase/notion/index.html"
msgid "Notion Desktop 7.6.1 · JavaScript · REA"
msgstr ""
#: website/public/showcase/notion/index.html:212
msgctxt "page:showcase/notion/index.html"
msgid "The bridge inside Notion's desktop package"
msgstr ""
#. {ph0}: <span class="flow-label">
#. {ph1}: </span>
#. {ph2}: <span class="flow-node">
#. {ph3}: <code>clipboard.write(data)</code>
#. {ph4}: </span>
#. {ph5}: <span class="flow-note" >
#. {ph6}: </span >
#: website/public/showcase/notion/index.html:214
#, python-brace-format
msgctxt "page:showcase/notion/index.html"
msgid ""
"{ph0}01 · Page-facing API{ph1} {ph2}{ph3}{ph4} {ph5}The preload exposes a callable "
"method.{ph6}"
msgstr ""
#. {ph0}: <span class="flow-label">
#. {ph1}: </span>
#. {ph2}: <span class="flow-node">
#. {ph3}: <code>ipcRenderer.invoke</code>
#. {ph4}: </span>
#. {ph5}: <span class="flow-note" >
#. {ph6}: </span >
#: website/public/showcase/notion/index.html:221
#, python-brace-format
msgctxt "page:showcase/notion/index.html"
msgid ""
"{ph0}02 · Preload wrapper{ph1} {ph2}{ph3}{ph4} {ph5}The wrapper sends the channel and "
"arguments.{ph6}"
msgstr ""
#. {ph0}: <span class="flow-label">
#. {ph1}: </span>
#. {ph2}: <span class="flow-node">
#. {ph3}: <code>ipcMain.handle</code>
#. {ph4}: </span>
#. {ph5}: <span class="flow-note" >
#. {ph6}: </span >
#: website/public/showcase/notion/index.html:228
#, python-brace-format
msgctxt "page:showcase/notion/index.html"
msgid ""
"{ph0}03 · Main-process handler{ph1} {ph2}{ph3}{ph4} {ph5}The receiver checks which "
"page sent it.{ph6}"
msgstr ""
#. {ph0}: <span class="flow-label">
#. {ph1}: </span>
#. {ph2}: <span class="flow-node">
#. {ph3}: <code>clipboard.write(data)</code>
#. {ph4}: </span>
#. {ph5}: <span class="flow-note" >
#. {ph6}: </span >
#: website/public/showcase/notion/index.html:235
#, python-brace-format
msgctxt "page:showcase/notion/index.html"
msgid ""
"{ph0}04 · System clipboard{ph1} {ph2}{ph3}{ph4} {ph5}Electron writes the supplied text"
" and HTML.{ph6}"
msgstr ""
#. {ph0}: <code class="notion-channel">notion:clipboard:write</code>
#: website/public/showcase/notion/index.html:243
#, python-brace-format
msgctxt "page:showcase/notion/index.html"
msgid "One channel joins the two sides: {ph0}"
msgstr ""
#: website/public/showcase/notion/index.html:247
msgctxt "page:showcase/notion/index.html"
msgid ""
"The packaged code uses the same channel in the preload and main process. Resolving the"
" wrappers reveals the Electron calls behind those names."
msgstr ""
#: website/public/showcase/notion/index.html:256
msgctxt "page:showcase/notion/index.html"
msgid "In this case study"
msgstr ""
#. {ph0}: <a href="#clipboard">
#. {ph1}: </a>
#: website/public/showcase/notion/index.html:258
#, python-brace-format
msgctxt "page:showcase/notion/index.html"
msgid "{ph0}Follow the clipboard bridge{ph1}"
msgstr ""
#. {ph0}: <a href="#rich-clipboard">
#. {ph1}: </a>
#: website/public/showcase/notion/index.html:259
#, python-brace-format
msgctxt "page:showcase/notion/index.html"
msgid "{ph0}Keeping a block's structure{ph1}"
msgstr ""
#. {ph0}: <a href="#continue">
#. {ph1}: </a>
#: website/public/showcase/notion/index.html:260
#, python-brace-format
msgctxt "page:showcase/notion/index.html"
msgid "{ph0}More examples and sources{ph1}"
msgstr ""
#: website/public/showcase/notion/index.html:265
msgctxt "page:showcase/notion/index.html"
msgid "Where does the copy operation go?"
msgstr ""
#. {ph0}: <code>clipboard.write</code>
#: website/public/showcase/notion/index.html:266
#, python-brace-format
msgctxt "page:showcase/notion/index.html"
msgid ""
"The page sees a method called {ph0}. Its implementation in the preload is a wrapper. "
"The useful question is what that wrapper sends, and which code receives it."
msgstr ""
#. {ph0}: <span class="terminal-dots" aria-hidden="true" >
#. {ph1}: <i>
#. {ph2}: </i>
#. {ph3}: <i>
#. {ph4}: </i>
#. {ph5}: <i>
#. {ph6}: </i>
#. {ph7}: </span >
#: website/public/showcase/notion/index.html:273
#, python-brace-format
msgctxt "page:showcase/notion/index.html"
msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent"
msgstr ""
#: website/public/showcase/notion/index.html:277
#: website/public/showcase/notion/index.html:350
#: website/public/showcase/notion/index.html:379
#: website/public/showcase/notion/index.html:410
#: website/public/showcase/notion/index.html:438
msgctxt "page:showcase/notion/index.html"
msgid "Copy"
msgstr ""
#. {ph0}: <span class="prompt-symbol" aria-hidden="true">
#. {ph1}: </span >
#. {ph2}: <span id="notion-prompt" >
#. {ph3}: </span >
#. {ph4}: <span class="terminal-cursor" aria-hidden="true">
#. {ph5}: </span>
#: website/public/showcase/notion/index.html:286
#, python-brace-format
msgctxt "page:showcase/notion/index.html"
msgid ""
"{ph0}›{ph1}{ph2}Use REA to trace how Notion copies text and HTML to the system "
"clipboard. Show the code at each step.{ph3}{ph4}{ph5}"
msgstr ""
#: website/public/showcase/notion/index.html:294
msgctxt "page:showcase/notion/index.html"
msgid ""
"An example prompt with Notion's local application package available to your coding "
"agent."
msgstr ""
#: website/public/showcase/notion/index.html:299
msgctxt "page:showcase/notion/index.html"
msgid "REA finds where to start reading"
msgstr ""
#: website/public/showcase/notion/index.html:300
msgctxt "page:showcase/notion/index.html"
msgid ""
"Analyzing the tab preload with REA locates the API exposed to the page and the call "
"that sends an IPC request. Both findings come with source ranges in the minified "
"bundle:"
msgstr ""
#: website/public/showcase/notion/index.html:306
msgctxt "page:showcase/notion/index.html"
msgid "REA findings → two places to open"
msgstr ""
#: website/public/showcase/notion/index.html:309
msgctxt "page:showcase/notion/index.html"
msgid "Exposed page API"
msgstr ""
#: website/public/showcase/notion/index.html:315
msgctxt "page:showcase/notion/index.html"
msgid "Renderer IPC call"
msgstr ""
#. {ph0}: <code>analyze_javascript_application</code>
#: website/public/showcase/notion/index.html:321
#, python-brace-format
msgctxt "page:showcase/notion/index.html"
msgid ""
"Selected fields from a fresh {ph0} result on Notion's tab preload, recorded with REA "
"4.1.0. Positions use the original bundle's line and zero-based column."
msgstr ""
#. {ph0}: <code>invokerInMain</code>
#. {ph1}: <code class="notion-channel">notion:clipboard:write</code>
#: website/public/showcase/notion/index.html:328
#, python-brace-format
msgctxt "page:showcase/notion/index.html"
msgid ""
"The agent opens those locations, finds the clipboard member in the assembled API, and "
"reads {ph0}. Its call site supplies {ph1}. That name gives the agent something precise"
" to look for in the main bundle. The four excerpts below show the route it connects."
msgstr ""
#: website/public/showcase/notion/index.html:337
msgctxt "page:showcase/notion/index.html"
msgid "Four short pieces of code"
msgstr ""
#: website/public/showcase/notion/index.html:338
msgctxt "page:showcase/notion/index.html"
msgid ""
"Simplified from the packaged JavaScript, with readable variable names. Unrelated "
"members are omitted."
msgstr ""
#: website/public/showcase/notion/index.html:344
msgctxt "page:showcase/notion/index.html"
msgid "Start at the API exposed to the page"
msgstr ""
#. {ph0}: <span translate="no">preload.js</span>
#: website/public/showcase/notion/index.html:347
#, python-brace-format
msgctxt "page:showcase/notion/index.html"
msgid "tab_browser_view/{ph0} · API member"
msgstr ""
#. {ph0}: <code>invokerInMain</code>
#: website/public/showcase/notion/index.html:366
#, python-brace-format
msgctxt "page:showcase/notion/index.html"
msgid ""
"This member supplies the channel name. The implementation of {ph0} tells us how the "
"request leaves the page's process."
msgstr ""
#: website/public/showcase/notion/index.html:373
msgctxt "page:showcase/notion/index.html"
msgid "Resolve the preload's wrapper"
msgstr ""
#. {ph0}: <span translate="no">preload.js</span>
#: website/public/showcase/notion/index.html:376
#, python-brace-format
msgctxt "page:showcase/notion/index.html"
msgid "tab_browser_view/{ph0} · IPC helper"
msgstr ""
#. {ph0}: <code class="notion-channel">notion:clipboard:write</code>
#: website/public/showcase/notion/index.html:396
#, python-brace-format
msgctxt "page:showcase/notion/index.html"
msgid ""
"The returned function forwards the arguments through Electron's request-and-response "
"IPC. We can now look for {ph0} on the main-process side."
msgstr ""
#: website/public/showcase/notion/index.html:404
msgctxt "page:showcase/notion/index.html"
msgid "Check how the receiver is registered"
msgstr ""
#. {ph0}: <span translate="no">index.js</span>
#: website/public/showcase/notion/index.html:407
#, python-brace-format
msgctxt "page:showcase/notion/index.html"
msgid "main/{ph0} · handler helper"
msgstr ""
#. {ph0}: <code>addListener</code>
#. {ph1}: <code>ipcMain.handle</code>
#: website/public/showcase/notion/index.html:425
#, python-brace-format
msgctxt "page:showcase/notion/index.html"
msgid ""
"The main process uses another wrapper. Its {ph0} method registers an {ph1} receiver "
"for that channel."
msgstr ""
#: website/public/showcase/notion/index.html:432
msgctxt "page:showcase/notion/index.html"
msgid "Find the write and its sender check"
msgstr ""
#. {ph0}: <span translate="no">index.js</span>
#: website/public/showcase/notion/index.html:435
#, python-brace-format
msgctxt "page:showcase/notion/index.html"
msgid "main/{ph0} · clipboard receiver"
msgstr ""
#: website/public/showcase/notion/index.html:455
msgctxt "page:showcase/notion/index.html"
msgid ""
"This is the destination. After checking the sender, the handler passes the supplied "
"data to Electron's clipboard API. The channel and the two resolved wrappers connect "
"the exposed method to this call."
msgstr ""
#: website/public/showcase/notion/index.html:466
msgctxt "page:showcase/notion/index.html"
msgid "How does a copied block keep its structure?"
msgstr ""
#. {ph0}: <code>electronApi.clipboard.write</code>
#: website/public/showcase/notion/index.html:467
#, python-brace-format
msgctxt "page:showcase/notion/index.html"
msgid ""
"Notion's web editor sends text and HTML through {ph0}. It keeps the block data locally"
" and puts an ID in the copied HTML to connect them."
msgstr ""
#: website/public/showcase/notion/index.html:473
msgctxt "page:showcase/notion/index.html"
msgid "HTML links to saved block data"
msgstr ""
#: website/public/showcase/notion/index.html:477
msgctxt "page:showcase/notion/index.html"
msgid "Sent to the system clipboard"
msgstr ""
#: website/public/showcase/notion/index.html:485
msgctxt "page:showcase/notion/index.html"
msgid "Saved locally by Notion"
msgstr ""
#: website/public/showcase/notion/index.html:497
msgctxt "page:showcase/notion/index.html"
msgid "Read the HTML ID"
msgstr ""
#: website/public/showcase/notion/index.html:498
msgctxt "page:showcase/notion/index.html"
msgid "Find the same local ID"
msgstr ""
#: website/public/showcase/notion/index.html:499
msgctxt "page:showcase/notion/index.html"
msgid "Restore Notion block data"
msgstr ""
#: website/public/showcase/notion/index.html:501
msgctxt "page:showcase/notion/index.html"
msgid ""
"Illustrative text and ID. The recorded module test restores the block data when IDs "
"match; a stale entry returns only text and HTML."
msgstr ""
#: website/public/showcase/notion/index.html:507
msgctxt "page:showcase/notion/index.html"
msgid ""
"On paste, Notion looks for the HTML ID and checks it against the saved copy. Matching "
"IDs restore the block data."
msgstr ""
#: website/public/showcase/notion/index.html:511
msgctxt "page:showcase/notion/index.html"
msgid "Clipboard format recorded from web assets cached on July 13, 2026."
msgstr ""
#: website/public/showcase/notion/index.html:517
msgctxt "page:showcase/notion/index.html"
msgid "More examples and sources"
msgstr ""
#: website/public/showcase/notion/index.html:519
msgctxt "page:showcase/notion/index.html"
msgid "Another example: Markdown tables"
msgstr ""
#: website/public/showcase/notion/index.html:520
msgctxt "page:showcase/notion/index.html"
msgid ""
"Notion parses Markdown into block data. This example shows how a table becomes header "
"and data rows."
msgstr ""
#: website/public/showcase/notion/index.html:525
msgctxt "page:showcase/notion/index.html"
msgid "A table through Notion's Markdown parser"
msgstr ""
#: website/public/showcase/notion/index.html:530
msgctxt "page:showcase/notion/index.html"
msgid "Markdown input"
msgstr ""
#: website/public/showcase/notion/index.html:537
msgctxt "page:showcase/notion/index.html"
msgid "Structured parser output · excerpt"
msgstr ""
#: website/public/showcase/notion/index.html:546
msgctxt "page:showcase/notion/index.html"
msgid ""
"Recorded output from an extracted Markdown parser. The table becomes rows and cells."
msgstr ""
#: website/public/showcase/notion/index.html:553
msgctxt "page:showcase/notion/index.html"
msgid "Another path: the offline SQLite connection"
msgstr ""
#. {ph0}: <code>getSqliteMeta</code>
#: website/public/showcase/notion/index.html:554
#, python-brace-format
msgctxt "page:showcase/notion/index.html"
msgid ""
"Notion's renderer requests {ph0} through IPC. The main process creates a message "
"channel and gives one port to the renderer and the other to a SQLite utility process. "
"Subsequent statement batches and results travel over that port."
msgstr ""
#: website/public/showcase/notion/index.html:560
msgctxt "page:showcase/notion/index.html"
msgid ""
"Following this handoff explains where the database work runs, and why tracing only the"
" initial IPC request misses the later conversation."
msgstr ""
#: website/public/showcase/notion/index.html:567
msgctxt "page:showcase/notion/index.html"
msgid "Sources and how to read the excerpts"
msgstr ""
#. {ph0}: <code>app.asar</code>
#. {ph1}: <code>main/index.js</code>
#. {ph2}: <code>isNotionWebContents</code>
#: website/public/showcase/notion/index.html:568
#, python-brace-format
msgctxt "page:showcase/notion/index.html"
msgid ""
"The clipboard bridge comes from Notion Desktop 7.6.1's {ph0}: the tab preload and "
"{ph1}. The excerpts expand minified variable names and omit unrelated code; the "
"sender-check helper is shown with its underlying {ph2} call."
msgstr ""
#. {ph0}: <code>747001</code>
#. {ph1}: <code>58169</code>
#. {ph2}: <code>736810</code>
#. {ph3}: <code>422457</code>
#: website/public/showcase/notion/index.html:576
#, python-brace-format
msgctxt "page:showcase/notion/index.html"
msgid ""
"The virtual clipboard and Markdown examples come from web assets cached on July 13, "
"2026, including modules {ph0}, {ph1}, {ph2} and {ph3}. Those assets have their own "
"version. Saved probes executed extracted modules and small harnesses; their outputs "
"describe those probes rather than a captured desktop UI session."
msgstr ""
#: website/public/showcase/notion/index.html:584
msgctxt "page:showcase/notion/index.html"
msgid ""
"The REA result shown here is a focused analysis of the saved tab preload, recorded "
"with the published REA 4.1.0 package. It locates the API and invoke operation. The "
"clipboard member and matching receiver are connected by reading their wrapper "
"implementations in the package."
msgstr ""
#. {ph0}: <code>422457</code>
#: website/public/showcase/notion/index.html:591
#, python-brace-format
msgctxt "page:showcase/notion/index.html"
msgid ""
"The Markdown example uses parser module {ph0}. Saved module tests show that both page "
"and chat filters preserve this table. The paste/import, structured Markdown and "
"AI/chat parsers have separate entry points and intermediate formats."
msgstr ""
#. {ph0}: <a href="../../guides/javascript/" >
#. {ph1}: </a >
#. {ph2}: <span >
#. {ph3}: </span >
#: website/public/showcase/notion/index.html:599
#, python-brace-format
msgctxt "page:showcase/notion/index.html"
msgid ""
"{ph0}JavaScript application guide{ph1}{ph2}Follow a small Electron application's "
"export feature.{ph3}"
msgstr ""
#. {ph0}: <a href="../dx-ball/">
#. {ph1}: </a >
#. {ph2}: <span >
#. {ph3}: </span >
#: website/public/showcase/notion/index.html:606
#, python-brace-format
msgctxt "page:showcase/notion/index.html"
msgid ""
"{ph0}DX-Ball reconstruction{ph1}{ph2}Follow native instructions to a checked C "
"function.{ph3}"
msgstr ""
#: website/public/showcase/notion/index.html:614
msgctxt "page:showcase/notion/index.html"
msgid "Analyze your own app"
msgstr ""
#: website/public/showcase/notion/index.html:6
msgctxt "page:showcase/notion/index.html"
msgid "Notion Electron Reverse Engineering: Clipboard — REA"
msgstr ""
#: website/public/showcase/notion/index.html:7
msgctxt "page:showcase/notion/index.html"
msgid ""
"Follow Notion's clipboard API through Electron's preload, IPC wrappers and main "
"process, with short code excerpts and a look at its rich clipboard format."
msgstr ""
#: website/public/showcase/notion/index.html:255
msgctxt "page:showcase/notion/index.html"
msgid "On this page"
msgstr ""
#: website/public/showcase/notion/index.html:263
msgctxt "page:showcase/notion/index.html"
msgid "Notion Electron case study"
msgstr ""
#: website/public/showcase/notion/index.html:277
msgctxt "page:showcase/notion/index.html"
msgid "Copy Notion analysis prompt"
msgstr ""
#: website/public/showcase/notion/index.html:350
msgctxt "page:showcase/notion/index.html"
msgid "Copy Notion preload excerpt"
msgstr ""
#: website/public/showcase/notion/index.html:379
msgctxt "page:showcase/notion/index.html"
msgid "Copy Notion invoke wrapper excerpt"
msgstr ""
#: website/public/showcase/notion/index.html:410
msgctxt "page:showcase/notion/index.html"
msgid "Copy Notion handler wrapper excerpt"
msgstr ""
#: website/public/showcase/notion/index.html:438
msgctxt "page:showcase/notion/index.html"
msgid "Copy Notion clipboard receiver excerpt"
msgstr ""
#: website/public/showcase/notion/index.html:493
msgctxt "page:showcase/notion/index.html"
msgid "Restoring rich clipboard data on paste"
msgstr ""
#: website/public/showcase/notion/index.html:637
msgctxt "page:showcase/notion/index.html"
msgid "Back to top"
msgstr ""
#: website/public/showcase/th04/index.html:107
msgctxt "page:showcase/th04/index.html"
msgid "Skip to content"
msgstr ""
#. {ph0}: <a href="../../">
#. {ph1}: </a>
#. {ph2}: <a href="../">
#. {ph3}: </a>
#: website/public/showcase/th04/index.html:199
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / TH04"
msgstr ""
#: website/public/showcase/th04/index.html:202
msgctxt "page:showcase/th04/index.html"
msgid "Case study · Touhou 4: Lotus Land Story"
msgstr ""
#. {ph0}: <br />
#: website/public/showcase/th04/index.html:203
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid "Reconstructing TH04's{ph0}bullet patterns."
msgstr ""
#: website/public/showcase/th04/index.html:204
msgctxt "page:showcase/th04/index.html"
msgid ""
"A ring of bullets starts with a short angle calculation. Use REA to inspect the "
"original DOS function, then follow its instructions into readable C++."
msgstr ""
#: website/public/showcase/th04/index.html:209
msgctxt "page:showcase/th04/index.html"
msgid "PC-98 · 16-bit DOS · C++ and assembly"
msgstr ""
#: website/public/showcase/th04/index.html:210
msgctxt "page:showcase/th04/index.html"
msgid "View the TH04 reconstruction"
msgstr ""
#: website/public/showcase/th04/index.html:216
msgctxt "page:showcase/th04/index.html"
msgid "From original instructions to checked source"
msgstr ""
#. {ph0}: <span class="flow-label">
#. {ph1}: </span >
#. {ph2}: <strong class="flow-node">
#. {ph3}: </strong >
#. {ph4}: <span class="flow-note" >
#. {ph5}: </span >
#: website/public/showcase/th04/index.html:218
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid ""
"{ph0}01 · Original game{ph1}{ph2}MAIN.EXE{ph3}{ph4}The PC-98 executable and its "
"bullet-angle helper.{ph5}"
msgstr ""
#. {ph0}: <span class="flow-label">
#. {ph1}: </span >
#. {ph2}: <strong class="flow-node">
#. {ph3}: </strong >
#. {ph4}: <span class="flow-note" >
#. {ph5}: </span >
#: website/public/showcase/th04/index.html:225
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid ""
"{ph0}02 · Inspect with REA{ph1}{ph2}Instructions + references{ph3}{ph4}Verify the "
"loaded DOS code and read the angle calculation from the executable.{ph5}"
msgstr ""
#. {ph0}: <span class="flow-label">
#. {ph1}: </span >
#. {ph2}: <strong class="flow-node">
#. {ph3}: </strong >
#. {ph4}: <span class="flow-note" >
#. {ph5}: </span >
#: website/public/showcase/th04/index.html:233
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid ""
"{ph0}03 · Read the C++{ph1}{ph2}Space → aim → rotate{ph3}{ph4}Connect each operation "
"to the maintained reconstruction.{ph5}"
msgstr ""
#. {ph0}: <span class="flow-label">
#. {ph1}: </span >
#. {ph2}: <strong class="flow-node">
#. {ph3}: </strong >
#. {ph4}: <span class="flow-note" >
#. {ph5}: </span >
#: website/public/showcase/th04/index.html:240
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid ""
"{ph0}04 · Check the source{ph1}{ph2}2,139 matching bytes{ph3}{ph4}Recorded compiler "
"checks cover the bullet-generation code that contains this helper.{ph5}"
msgstr ""
#: website/public/showcase/th04/index.html:249
msgctxt "page:showcase/th04/index.html"
msgid ""
"REA returns the original code and its analysis evidence. The TH04 project supplies the"
" maintained source and compiler checks."
msgstr ""
#: website/public/showcase/th04/index.html:257
msgctxt "page:showcase/th04/index.html"
msgid "In this case study"
msgstr ""
#. {ph0}: <a href="#ring">
#. {ph1}: </a>
#: website/public/showcase/th04/index.html:259
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid "{ph0}The bullet ring{ph1}"
msgstr ""
#. {ph0}: <a href="#rea">
#. {ph1}: </a>
#: website/public/showcase/th04/index.html:260
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid "{ph0}What REA returns{ph1}"
msgstr ""
#. {ph0}: <a href="#source">
#. {ph1}: </a>
#: website/public/showcase/th04/index.html:261
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid "{ph0}Assembly to C++{ph1}"
msgstr ""
#. {ph0}: <a href="#checking">
#. {ph1}: </a>
#: website/public/showcase/th04/index.html:262
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid "{ph0}Checking the source{ph1}"
msgstr ""
#. {ph0}: <a href="#project">
#. {ph1}: </a>
#: website/public/showcase/th04/index.html:263
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid "{ph0}The full project{ph1}"
msgstr ""
#: website/public/showcase/th04/index.html:268
msgctxt "page:showcase/th04/index.html"
msgid "How a ring aims at the player"
msgstr ""
#: website/public/showcase/th04/index.html:269
msgctxt "page:showcase/th04/index.html"
msgid ""
"Elly's attack requests an aimed ring with an initial count of 16. One helper "
"calculates the direction of each bullet. The same ring can face a fixed direction or "
"turn toward the player."
msgstr ""
#. {ph0}: <span class="terminal-dots" aria-hidden="true" >
#. {ph1}: <i>
#. {ph2}: </i>
#. {ph3}: <i>
#. {ph4}: </i>
#. {ph5}: <i>
#. {ph6}: </i>
#. {ph7}: </span >
#: website/public/showcase/th04/index.html:276
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent"
msgstr ""
#: website/public/showcase/th04/index.html:281
#: website/public/showcase/th04/index.html:337
#: website/public/showcase/th04/index.html:514
#: website/public/showcase/th04/index.html:548
msgctxt "page:showcase/th04/index.html"
msgid "Copy"
msgstr ""
#. {ph0}: <span class="prompt-symbol" aria-hidden="true">
#. {ph1}: </span >
#. {ph2}: <span id="th04-prompt" >
#. {ph3}: </span >
#. {ph4}: <span class="terminal-cursor" aria-hidden="true">
#. {ph5}: </span>
#: website/public/showcase/th04/index.html:290
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid ""
"{ph0}›{ph1}{ph2}Use REA to find how TH04 creates a ring of bullets and aims it at the "
"player. Explain the calculation and show the code.{ph3}{ph4}{ph5}"
msgstr ""
#: website/public/showcase/th04/index.html:299
msgctxt "page:showcase/th04/index.html"
msgid ""
"An example prompt, with the original executable and reconstruction checkout available "
"locally."
msgstr ""
#. {ph0}: <code>0, 16, 32, …, 240</code>
#: website/public/showcase/th04/index.html:303
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid ""
"TH04 stores a full clockwise turn in 256 angle units. For 16 bullets, each index adds "
"16 units: {ph0}. Adding the player's direction rotates those positions together."
msgstr ""
#. {ph0}: <a href="../../assets/figures/th04-bullet-ring.svg" >
#. {ph1}: </a >
#: website/public/showcase/th04/index.html:323
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid ""
"An illustration of the recovered angle math for count 16, player direction 40 and "
"template rotation 0. {ph0}Open figure{ph1}"
msgstr ""
#: website/public/showcase/th04/index.html:331
msgctxt "page:showcase/th04/index.html"
msgid "The firing template in the recovered source"
msgstr ""
#: website/public/showcase/th04/index.html:336
msgctxt "page:showcase/th04/index.html"
msgid "Elly's ring attack · source excerpt"
msgstr ""
#. {ph0}: <a
#. href="https://github.com/N0zoM1z0/th04/blob/0d72e9801a5c14c10384efcbb6734ceccb74ee63/src/main/boss/elly_phase_ring16.cpp#L26"
#. >
#. {ph1}: </a >
#: website/public/showcase/th04/index.html:351
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid ""
"These lines select the pattern before difficulty and performance tuning. {ph0}Read the"
" attack's source{ph1}."
msgstr ""
#: website/public/showcase/th04/index.html:362
msgctxt "page:showcase/th04/index.html"
msgid "What REA returns"
msgstr ""
#. {ph0}: <code>bullet_velocity_and_angle_set()</code>
#: website/public/showcase/th04/index.html:363
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid ""
"We inspect {ph0}, the function that sets each bullet's velocity and angle. REA returns"
" its instructions, pseudocode and references. Three parts of that result explain the "
"pattern."
msgstr ""
#: website/public/showcase/th04/index.html:371
msgctxt "page:showcase/th04/index.html"
msgid "Check the DOS image before reading its code"
msgstr ""
#: website/public/showcase/th04/index.html:374
msgctxt "page:showcase/th04/index.html"
msgid "Agent → REA"
msgstr ""
#: website/public/showcase/th04/index.html:383
msgctxt "page:showcase/th04/index.html"
msgid "REA → agent · selected fields"
msgstr ""
#: website/public/showcase/th04/index.html:392
msgctxt "page:showcase/th04/index.html"
msgid ""
"The check ties the loaded code and relocation records to the supplied executable. The "
"path above is shortened for display."
msgstr ""
#: website/public/showcase/th04/index.html:398
msgctxt "page:showcase/th04/index.html"
msgid "Read the ring's multiply and divide"
msgstr ""
#. {ph0}: <code>analyze_function</code>
#: website/public/showcase/th04/index.html:402
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid "Agent → REA · {ph0}"
msgstr ""
#: website/public/showcase/th04/index.html:408
msgctxt "page:showcase/th04/index.html"
msgid "REA → agent · instruction excerpt"
msgstr ""
#. {ph0}: <code>SI</code>
#. {ph1}: <code>DS:53AF</code>
#. {ph2}: <code>bullet_template.count</code>
#: website/public/showcase/th04/index.html:416
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid ""
"{ph0} holds the bullet index. The shift multiplies it by 256, then the division uses "
"the count read from {ph1}. The maintained source names that field {ph2}. The complete "
"sequence appears below."
msgstr ""
#: website/public/showcase/th04/index.html:425
msgctxt "page:showcase/th04/index.html"
msgid "Find where the pattern turns toward the player"
msgstr ""
#: website/public/showcase/th04/index.html:429
msgctxt "page:showcase/th04/index.html"
msgid "Same function result · aim excerpt"
msgstr ""
#: website/public/showcase/th04/index.html:438
msgctxt "page:showcase/th04/index.html"
msgid "Corresponding maintained C++"
msgstr ""
#: website/public/showcase/th04/index.html:446
msgctxt "page:showcase/th04/index.html"
msgid ""
"The instruction operands expose two coordinate differences and a direction helper. Its"
" return value is added to the relative ring angle. Source names make those addresses "
"readable; REA lets the agent check the original operations behind them."
msgstr ""
#: website/public/showcase/th04/index.html:457
msgctxt "page:showcase/th04/index.html"
msgid "From assembly to readable C++"
msgstr ""
#: website/public/showcase/th04/index.html:458
msgctxt "page:showcase/th04/index.html"
msgid ""
"Select a step to match the original instructions with the angle calculation. This "
"summary follows the aimed-ring path; the full source also handles spreads, stacks and "
"random patterns."
msgstr ""
#. {ph0}: <span>
#. {ph1}: </span>
#: website/public/showcase/th04/index.html:469
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid "{ph0}01{ph1} Index"
msgstr ""
#. {ph0}: <span>
#. {ph1}: </span>
#: website/public/showcase/th04/index.html:477
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid "{ph0}02{ph1} Space"
msgstr ""
#. {ph0}: <span>
#. {ph1}: </span>
#: website/public/showcase/th04/index.html:485
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid "{ph0}03{ph1} Aim"
msgstr ""
#. {ph0}: <span>
#. {ph1}: </span>
#: website/public/showcase/th04/index.html:493
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid "{ph0}04{ph1} Rotate"
msgstr ""
#. {ph0}: <span>
#. {ph1}: </span>
#: website/public/showcase/th04/index.html:501
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid "{ph0}05{ph1} Store"
msgstr ""
#: website/public/showcase/th04/index.html:513
msgctxt "page:showcase/th04/index.html"
msgid "REA · original 16-bit instructions"
msgstr ""
#: website/public/showcase/th04/index.html:547
msgctxt "page:showcase/th04/index.html"
msgid "Readable C++ · aimed-ring summary"
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#. {ph2}: <code>SI</code>
#: website/public/showcase/th04/index.html:576
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid ""
"{ph0}01 · Read the bullet index.{ph1} The stack argument is loaded into {ph2}. In a "
"16-bullet ring, this member index runs from 0 through 15."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#. {ph2}: <code>SHL AX,8</code>
#. {ph3}: <code>IDIV</code>
#: website/public/showcase/th04/index.html:581
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid ""
"{ph0}02 · Space the directions around a full turn.{ph1} {ph2} multiplies by 256. The "
"count is zero-extended into a word, then {ph3} divides the product by that count. For "
"count 16, each index advances 16 angle units."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#. {ph2}: <code>AX</code>
#: website/public/showcase/th04/index.html:588
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid ""
"{ph0}03 · Add the player direction.{ph1} The two subtractions form player-minus-origin"
" coordinates. The direction helper returns an angle in {ph2}; adding it turns the "
"whole ring toward the player."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#. {ph2}: <code>ADD AL,[0x53ad]</code>
#: website/public/showcase/th04/index.html:594
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid ""
"{ph0}04 · Add the pattern's rotation.{ph1} {ph2} adds the template angle. Elly's "
"initial template sets it to zero; other patterns can use the same helper with a "
"rotation."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#. {ph2}: <code>AL</code>
#: website/public/showcase/th04/index.html:600
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid ""
"{ph0}05 · Keep the final angle in one byte.{ph1} The store writes {ph2} to the spawn-"
"angle field. Values wrap after 255, just as the unsigned-byte cast does. The "
"surrounding source also converts this angle and speed into velocity."
msgstr ""
#: website/public/showcase/th04/index.html:609
msgctxt "page:showcase/th04/index.html"
msgid ""
"The assembly selects the aimed-ring branch, aim calculation and final store. The C++ "
"above is a readable summary. Compiler checks below apply to the maintained source in "
"the linked project."
msgstr ""
#: website/public/showcase/th04/index.html:615
msgctxt "page:showcase/th04/index.html"
msgid "Read the maintained ring and aim source"
msgstr ""
#: website/public/showcase/th04/index.html:618
msgctxt "page:showcase/th04/index.html"
msgid "Ring macro · TH04 branch, excerpt"
msgstr ""
#: website/public/showcase/th04/index.html:628
msgctxt "page:showcase/th04/index.html"
msgid "Angle and velocity · source excerpt"
msgstr ""
#. {ph0}: <a
#. href="https://github.com/N0zoM1z0/th04/blob/0d72e9801a5c14c10384efcbb6734ceccb74ee63/src/main/bullet/add_impl.hpp#L4"
#. >
#. {ph1}: </a >
#. {ph2}: <a
#. href="https://github.com/N0zoM1z0/th04/blob/0d72e9801a5c14c10384efcbb6734ceccb74ee63/src/main/bullet/add.cpp#L422"
#. >
#. {ph3}: </a >
#. {ph4}: <a
#. href="https://github.com/N0zoM1z0/th04/blob/0d72e9801a5c14c10384efcbb6734ceccb74ee63/src/main/bullet/types.hpp#L6"
#. >
#. {ph5}: </a >
#: website/public/showcase/th04/index.html:644
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid ""
"{ph0}Ring macro{ph1} · {ph2}Aim and velocity source{ph3} · {ph4}Angle "
"representation{ph5}"
msgstr ""
#: website/public/showcase/th04/index.html:664
msgctxt "page:showcase/th04/index.html"
msgid "Checking the maintained source"
msgstr ""
#: website/public/showcase/th04/index.html:665
msgctxt "page:showcase/th04/index.html"
msgid ""
"The TH04 project's recorded checks compile the bullet-generation code, including this "
"helper, with its pinned Turbo C++ 4.0J toolchain."
msgstr ""
#: website/public/showcase/th04/index.html:672
msgctxt "page:showcase/th04/index.html"
msgid "2,139 matching bytes"
msgstr ""
#: website/public/showcase/th04/index.html:673
msgctxt "page:showcase/th04/index.html"
msgid ""
"The compiled bullet-generation code matches a 2,139-byte section of the original "
"executable."
msgstr ""
#: website/public/showcase/th04/index.html:679
msgctxt "page:showcase/th04/index.html"
msgid "Two clean builds"
msgstr ""
#: website/public/showcase/th04/index.html:680
msgctxt "page:showcase/th04/index.html"
msgid ""
"Two separate builds produce the same matching bytes. The recorded input hashes match "
"the maintained source shown here."
msgstr ""
#. {ph0}: <a
#. href="https://github.com/N0zoM1z0/th04/blob/0d72e9801a5c14c10384efcbb6734ceccb74ee63/docs/reconstruction/product/TH04_SEMANTIC_BULLET_GENERATION_V1236.md#validation"
#. >
#. {ph1}: </a >
#: website/public/showcase/th04/index.html:686
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid "Recorded on 3 October 2026. {ph0}Read the compiler checks{ph1}."
msgstr ""
#: website/public/showcase/th04/index.html:694
msgctxt "page:showcase/th04/index.html"
msgid "Target identity and analysis scope"
msgstr ""
#: website/public/showcase/th04/index.html:699
msgctxt "page:showcase/th04/index.html"
msgid "Original target"
msgstr ""
#. {ph0}: <code>MAIN.EXE</code>
#: website/public/showcase/th04/index.html:700
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid "{ph0}, 156,258 bytes, DOS MZ"
msgstr ""
#: website/public/showcase/th04/index.html:703
msgctxt "page:showcase/th04/index.html"
msgid "Helper entry"
msgstr ""
#. {ph0}: <code>0x2cfc8</code>
#: website/public/showcase/th04/index.html:704
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid "{ph0} in REA's loaded image"
msgstr ""
#: website/public/showcase/th04/index.html:707
msgctxt "page:showcase/th04/index.html"
msgid "Original file offset"
msgstr ""
#. {ph0}: <code>0x1e7c8</code>
#. {ph1}: <code>address_to_file_offset</code>
#: website/public/showcase/th04/index.html:708
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid "{ph0}, returned by {ph1}"
msgstr ""
#: website/public/showcase/th04/index.html:714
msgctxt "page:showcase/th04/index.html"
msgid "Recorded code inspection"
msgstr ""
#: website/public/showcase/th04/index.html:715
msgctxt "page:showcase/th04/index.html"
msgid "REA 4.1.0 · 7 October 2026"
msgstr ""
#: website/public/showcase/th04/index.html:720
msgctxt "page:showcase/th04/index.html"
msgid ""
"Compiler checks cover the complete bullet-add code section, including this helper. "
"They also compare its MAP contribution and overlapping relocation."
msgstr ""
#. {ph0}: <code>0x1000</code>
#: website/public/showcase/th04/index.html:725
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid ""
"REA verified the static DOS load image at load segment {ph0}. Its addresses describe "
"that analysis image. The function result reports 503 body bytes in two ranges across a"
" 517-byte span; the selected instructions above lie in those reported ranges."
msgstr ""
#. {ph0}: <code>0d72e980</code>
#: website/public/showcase/th04/index.html:732
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid ""
"The source names and compiler checks come from TH04 checkpoint {ph0}. Earlier "
"reconstruction observations used the project's own analysis scripts; this page adds a "
"fresh REA inspection of the same original target. The supplied game's identity is "
"pinned by its repository manifest, with independent pristine-dump provenance still "
"open."
msgstr ""
#: website/public/showcase/th04/index.html:740
msgctxt "page:showcase/th04/index.html"
msgid ""
"The figure illustrates the angle calculation. Full-game controls, timing and PC-98 "
"hardware behavior have separate runtime checks in the reconstruction project."
msgstr ""
#: website/public/showcase/th04/index.html:749
msgctxt "page:showcase/th04/index.html"
msgid "The full TH04 reconstruction"
msgstr ""
#: website/public/showcase/th04/index.html:750
msgctxt "page:showcase/th04/index.html"
msgid ""
"The project builds the game's four DOS products from maintained C++ and assembly. "
"Beyond bullet generation, the source covers stages, bosses, rendering, input, menus, "
"endings and score handling."
msgstr ""
#. {ph0}: <a class="text-link" href="https://github.com/N0zoM1z0/th04" >
#. {ph1}: </a >
#: website/public/showcase/th04/index.html:756
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid "{ph0}Explore the TH04 repository{ph1}"
msgstr ""
#. {ph0}: <a
#. href="https://github.com/N0zoM1z0/th04/blob/0d72e9801a5c14c10384efcbb6734ceccb74ee63/src/main/bullet/add.cpp#L292"
#. >
#. {ph1}: </a >
#. {ph2}: <span >
#. {ph3}: </span >
#: website/public/showcase/th04/index.html:762
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid ""
"{ph0}Bullet-generation source{ph1}{ph2}The complete helper, other pattern types and "
"template tuning.{ph3}"
msgstr ""
#. {ph0}: <a
#. href="https://github.com/N0zoM1z0/th04/blob/0d72e9801a5c14c10384efcbb6734ceccb74ee63/docs/DOS_BUILD.md"
#. >
#. {ph1}: </a >
#. {ph2}: <span >
#. {ph3}: </span >
#: website/public/showcase/th04/index.html:771
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid ""
"{ph0}DOS build and run guide{ph1}{ph2}Build the source and test it in the project's "
"PC-98 emulator workflow.{ph3}"
msgstr ""
#. {ph0}: <a
#. href="https://github.com/N0zoM1z0/th04/blob/0d72e9801a5c14c10384efcbb6734ceccb74ee63/docs/RE_HANDOFF.md"
#. >
#. {ph1}: </a >
#. {ph2}: <span>
#. {ph3}: </span>
#: website/public/showcase/th04/index.html:780
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid ""
"{ph0}Current project state{ph1}{ph2}DOS verification and the separate native x64 "
"port.{ph3}"
msgstr ""
#: website/public/showcase/th04/index.html:6
msgctxt "page:showcase/th04/index.html"
msgid "TH04 Reverse Engineering: DOS Bullet Patterns — REA"
msgstr ""
#: website/public/showcase/th04/index.html:7
msgctxt "page:showcase/th04/index.html"
msgid ""
"Inspect TH04's original 16-bit DOS code with REA. Follow the assembly and recovered "
"C++ to see how a ring of bullets is spaced and aimed at the player."
msgstr ""
#: website/public/showcase/th04/index.html:256
msgctxt "page:showcase/th04/index.html"
msgid "On this page"
msgstr ""
#: website/public/showcase/th04/index.html:266
msgctxt "page:showcase/th04/index.html"
msgid "TH04 bullet-pattern case study"
msgstr ""
#: website/public/showcase/th04/index.html:281
msgctxt "page:showcase/th04/index.html"
msgid "Copy TH04 example prompt"
msgstr ""
#: website/public/showcase/th04/index.html:309
msgctxt "page:showcase/th04/index.html"
msgid "TH04 fixed and aimed bullet rings; scroll horizontally on smaller screens"
msgstr ""
#: website/public/showcase/th04/index.html:315
msgctxt "page:showcase/th04/index.html"
msgid ""
"Two diagrams of a 16-bullet ring. The fixed ring starts at angle zero. Adding a player"
" direction of 40 rotates every direction by the same amount; the highlighted first "
"bullet points toward the player. Both keep a spacing of 16 angle units, or 22.5 "
"degrees."
msgstr ""
#: website/public/showcase/th04/index.html:337
msgctxt "page:showcase/th04/index.html"
msgid "Copy TH04 firing template"
msgstr ""
#: website/public/showcase/th04/index.html:464
msgctxt "page:showcase/th04/index.html"
msgid "Follow the TH04 aimed-ring calculation"
msgstr ""
#: website/public/showcase/th04/index.html:514
msgctxt "page:showcase/th04/index.html"
msgid "Copy TH04 assembly excerpt"
msgstr ""
#: website/public/showcase/th04/index.html:548
msgctxt "page:showcase/th04/index.html"
msgid "Copy readable aimed-ring calculation"
msgstr ""
#: website/public/showcase/th04/index.html:806
msgctxt "page:showcase/th04/index.html"
msgid "Back to top"
msgstr ""
#: scripts/website_i18n.py
msgctxt "runtime"
msgid "Translation is being updated. Read this page in English for now."
msgstr ""
#: website/public/assets/aegis-demo.js:22
#, python-brace-format
msgctxt "runtime"
msgid "{start}–{end} seconds"
msgstr ""
#: website/public/assets/aegis-demo.js:29
#, python-brace-format
msgctxt "runtime"
msgid "{seconds} seconds, time block {block}"
msgstr ""
#: website/public/assets/aegis-demo.js:35
msgctxt "runtime"
msgid ""
"Interactive calculation is unavailable in this browser. The example shows the code at "
"59 seconds."
msgstr ""
#: website/public/assets/aegis-demo.js:62
msgctxt "runtime"
msgid "Checking…"
msgstr ""
#: website/public/assets/aegis-demo.js:76
#, python-brace-format
msgctxt "runtime"
msgid "{passed} / {total} checks passed (six reference cases, at six and eight digits)."
msgstr ""
#: website/public/assets/aegis-demo.js:81
msgctxt "runtime"
msgid "Could not run the reference checks. Try again."
msgstr ""
#: website/public/assets/contributors.js:21
#, python-brace-format
msgctxt "runtime"
msgid "Contributors: {count}"
msgstr ""
#: website/public/assets/dino-demo.js:77
#, python-brace-format
msgctxt "runtime"
msgid "Distance {distance}"
msgstr ""
#: website/public/assets/dino-demo.js:87
msgctxt "runtime"
msgid "Hit a cactus. Try another speed."
msgstr ""
#: website/public/assets/dino-demo.js:87
msgctxt "runtime"
msgid "Space or Jump ↑"
msgstr ""
#: website/public/assets/dino-demo.js:97
msgctxt "runtime"
msgid "Play again"
msgstr ""
#: website/public/assets/dino-demo.js:97 website/public/assets/dino-demo.js:111
msgctxt "runtime"
msgid "Play"
msgstr ""
#: website/public/assets/dino-demo.js:112
msgctxt "runtime"
msgid "Press Play, then jump over the cactus."
msgstr ""
#: website/public/assets/dino-demo.js:147
msgctxt "runtime"
msgid "Hit a cactus. Press Play again, or change the speed and restart."
msgstr ""
#: website/public/assets/dino-demo.js:171
msgctxt "runtime"
msgid "Pause"
msgstr ""
#: website/public/assets/dino-demo.js:172
msgctxt "runtime"
msgid "Running. Space or Jump clears a cactus."
msgstr ""
#: website/public/assets/dino-demo.js:183 website/public/assets/dino-demo.js:219
#: website/public/assets/dino-demo.js:224
msgctxt "runtime"
msgid "Paused. Press Play to continue."
msgstr ""
#: website/public/assets/dino-demo.js:203
#, python-brace-format
msgctxt "runtime"
msgid "Fixed speed: {speed}. Space or Jump clears a cactus."
msgstr ""
#: website/public/assets/dino-demo.js:206
#, python-brace-format
msgctxt "runtime"
msgid "Fixed speed: {speed}. Press Play to try it."
msgstr ""
#: website/public/assets/dino-demo.js:215
msgctxt "runtime"
msgid "Recovered rule: start at 6, then increase toward 13."
msgstr ""
#: website/public/assets/dino-demo.js:216
#, python-brace-format
msgctxt "runtime"
msgid "Fixed speed: {speed}."
msgstr ""
#: website/public/assets/dino-demo.js:249
msgctxt "runtime"
msgid ""
"Replayed the recovered rule. All four values match the controlled original-game check "
"when rounded to three decimals."
msgstr ""
#: website/public/assets/dino-demo.js:252
msgctxt "runtime"
msgid ""
"The replay differs from the recorded original-game values. Compare the speed rule and "
"settings above."
msgstr ""
#: website/public/assets/home.js:29
msgctxt "runtime"
msgid "Press % to see what happens to 10."
msgstr ""
#: website/public/assets/home.js:32
msgctxt "runtime"
msgid "10% of 200 is 20. Press = to add it."
msgstr ""
#: website/public/assets/home.js:33
msgctxt "runtime"
msgid "For multiplication, 10 becomes 0.1. Press = to multiply."
msgstr ""
#: website/public/assets/main.js:21
msgctxt "runtime"
msgid "Copied"
msgstr ""
#: website/public/assets/main.js:23
msgctxt "runtime"
msgid "Code copied to clipboard."
msgstr ""
#: website/public/assets/main.js:32
msgctxt "runtime"
msgid "Selected"
msgstr ""
#: website/public/assets/main.js:34
msgctxt "runtime"
msgid "Code selected. Use your keyboard to copy it."
msgstr ""
#: website/public/assets/main.js:158
#, python-brace-format
msgctxt "runtime"
msgid "REA on GitHub ({count})"
msgstr ""
#: website/public/assets/theme.js:52
msgctxt "runtime"
msgid "Switch to light mode"
msgstr ""
#: website/public/assets/theme.js:53
msgctxt "runtime"
msgid "Switch to dark mode"
msgstr ""
#: website/public/assets/figures/analyst-thinking.svg:2
msgctxt "figure:analyst-thinking.svg"
msgid "An analyst thinking at a computer"
msgstr ""
#: website/public/assets/figures/ctf-mask-equation.svg:2
#: website/public/assets/figures/ctf-mask-equation.svg:24
msgctxt "figure:ctf-mask-equation.svg"
msgid "One check reveals one character"
msgstr ""
#: website/public/assets/figures/ctf-mask-equation.svg:3
msgctxt "figure:ctf-mask-equation.svg"
msgid ""
"The seventh mask selects only position 21 in the six by six input grid. Its character "
"code must equal 55, so the character is 7. The other masks select different positions "
"and give further equations."
msgstr ""
#: website/public/assets/figures/ctf-mask-equation.svg:25
msgctxt "figure:ctf-mask-equation.svg"
msgid "The seventh check. Cell labels are input positions, starting at 0."
msgstr ""
#: website/public/assets/figures/ctf-mask-equation.svg:27
msgctxt "figure:ctf-mask-equation.svg"
msgid "Encoded mask: −21, +1, −14, 0"
msgstr ""
#: website/public/assets/figures/ctf-mask-equation.svg:28
msgctxt "figure:ctf-mask-equation.svg"
msgid "Skip 21 cells. Select 1. Skip 14. Stop at 0."
msgstr ""
#: website/public/assets/figures/ctf-mask-equation.svg:32
msgctxt "figure:ctf-mask-equation.svg"
msgid "Only one cell contributes to this sum"
msgstr ""
#: website/public/assets/figures/ctf-mask-equation.svg:35
msgctxt "figure:ctf-mask-equation.svg"
msgid "Position 21 in the flag must contain 7."
msgstr ""
#: website/public/assets/figures/ctf-mask-equation.svg:37
msgctxt "figure:ctf-mask-equation.svg"
msgid "Selected: one cell"
msgstr ""
#: website/public/assets/figures/ctf-mask-equation.svg:38
msgctxt "figure:ctf-mask-equation.svg"
msgid "26 masks give 26 equations."
msgstr ""
#: website/public/assets/figures/ctf-mask-equation.svg:39
msgctxt "figure:ctf-mask-equation.svg"
msgid "Solve them together to find the flag."
msgstr ""
#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:2
#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:20
msgctxt "figure:dx-ball-sound-pan-investigation.svg"
msgid "DX-Ball sound-pan investigation"
msgstr ""
#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:3
msgctxt "figure:dx-ball-sound-pan-investigation.svg"
msgid ""
"REA provides the instruction, caller and byte-read evidence for one DX-Ball function. "
"A stack input is multiplied by 1.5625, offset by 500, scaled, and converted to an "
"integer. Maintained C is checked in 3,205 original-x86 cases and a separate 63-byte "
"compiler replay."
msgstr ""
#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:39
msgctxt "figure:dx-ball-sound-pan-investigation.svg"
msgid "Stack"
msgstr ""
#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:40
msgctxt "figure:dx-ball-sound-pan-investigation.svg"
msgid "input x"
msgstr ""
#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:44
msgctxt "figure:dx-ball-sound-pan-investigation.svg"
msgid "Integer"
msgstr ""
#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:45
msgctxt "figure:dx-ball-sound-pan-investigation.svg"
msgid "return"
msgstr ""
#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:46
msgctxt "figure:dx-ball-sound-pan-investigation.svg"
msgid "Reconstructed function"
msgstr ""
#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:47
msgctxt "figure:dx-ball-sound-pan-investigation.svg"
msgid "Maintained C"
msgstr ""
#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:48
msgctxt "figure:dx-ball-sound-pan-investigation.svg"
msgid "Brick-hit caller"
msgstr ""
#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:49
msgctxt "figure:dx-ball-sound-pan-investigation.svg"
msgid "20 + 30 × tile_x"
msgstr ""
#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:50
msgctxt "figure:dx-ball-sound-pan-investigation.svg"
msgid "Original code"
msgstr ""
#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:51
#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:54
msgctxt "figure:dx-ball-sound-pan-investigation.svg"
msgid "comparison"
msgstr ""
#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:52
msgctxt "figure:dx-ball-sound-pan-investigation.svg"
msgid "3,205 cases"
msgstr ""
#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:53
msgctxt "figure:dx-ball-sound-pan-investigation.svg"
msgid "VC4.0 build"
msgstr ""
#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:55
msgctxt "figure:dx-ball-sound-pan-investigation.svg"
msgid "63 matching bytes"
msgstr ""
#: website/public/assets/figures/rea-investigation-flow.svg:2
#: website/public/assets/figures/rea-investigation-flow.svg:22
msgctxt "figure:rea-investigation-flow.svg"
msgid "REA investigation flow"
msgstr ""
#: website/public/assets/figures/rea-investigation-flow.svg:3
msgctxt "figure:rea-investigation-flow.svg"
msgid ""
"Ask a question about a local target. REA inspects and traces through local analysis "
"adapters, returns evidence, and supports follow-up questions as your agent explains, "
"implements and tests."
msgstr ""
#: website/public/assets/figures/rea-investigation-flow.svg:31
msgctxt "figure:rea-investigation-flow.svg"
msgid "1. Ask"
msgstr ""
#: website/public/assets/figures/rea-investigation-flow.svg:32
msgctxt "figure:rea-investigation-flow.svg"
msgid "Your agent + local target"
msgstr ""
#: website/public/assets/figures/rea-investigation-flow.svg:33
msgctxt "figure:rea-investigation-flow.svg"
msgid "App / binary / browser"
msgstr ""
#: website/public/assets/figures/rea-investigation-flow.svg:34
msgctxt "figure:rea-investigation-flow.svg"
msgid "2. Inspect & trace"
msgstr ""
#: website/public/assets/figures/rea-investigation-flow.svg:36
msgctxt "figure:rea-investigation-flow.svg"
msgid "CLI / MCP"
msgstr ""
#: website/public/assets/figures/rea-investigation-flow.svg:37
msgctxt "figure:rea-investigation-flow.svg"
msgid "3. Read the evidence"
msgstr ""
#: website/public/assets/figures/rea-investigation-flow.svg:38
msgctxt "figure:rea-investigation-flow.svg"
msgid "Code / references /"
msgstr ""
#: website/public/assets/figures/rea-investigation-flow.svg:39
msgctxt "figure:rea-investigation-flow.svg"
msgid "unknowns"
msgstr ""
#: website/public/assets/figures/rea-investigation-flow.svg:40
msgctxt "figure:rea-investigation-flow.svg"
msgid "4. Use what you learn"
msgstr ""
#: website/public/assets/figures/rea-investigation-flow.svg:41
msgctxt "figure:rea-investigation-flow.svg"
msgid "Your agent"
msgstr ""
#: website/public/assets/figures/rea-investigation-flow.svg:42
msgctxt "figure:rea-investigation-flow.svg"
msgid "Explain / implement / test"
msgstr ""
#: website/public/assets/figures/rea-investigation-flow.svg:43
msgctxt "figure:rea-investigation-flow.svg"
msgid "Analysis tools"
msgstr ""
#: website/public/assets/figures/rea-investigation-flow.svg:44
msgctxt "figure:rea-investigation-flow.svg"
msgid "Local analysis adapters"
msgstr ""
#: website/public/assets/figures/rea-investigation-flow.svg:45
msgctxt "figure:rea-investigation-flow.svg"
msgid "Follow-up question"
msgstr ""
#: website/public/assets/figures/th04-bullet-ring.svg:2
msgctxt "figure:th04-bullet-ring.svg"
msgid "TH04: spacing and aiming a ring of bullets"
msgstr ""
#: website/public/assets/figures/th04-bullet-ring.svg:3
msgctxt "figure:th04-bullet-ring.svg"
msgid ""
"A full clockwise turn has 256 angle units. Sixteen bullets start at angles zero, "
"sixteen, thirty-two, through 240. Adding an example player direction of forty turns "
"all sixteen directions together; the first bullet points at the player. Template "
"rotation is zero."
msgstr ""
#: website/public/assets/figures/th04-bullet-ring.svg:24
msgctxt "figure:th04-bullet-ring.svg"
msgid "Fixed ring"
msgstr ""
#: website/public/assets/figures/th04-bullet-ring.svg:25
msgctxt "figure:th04-bullet-ring.svg"
msgid "First bullet: angle 0"
msgstr ""
#: website/public/assets/figures/th04-bullet-ring.svg:26
msgctxt "figure:th04-bullet-ring.svg"
msgid "Aimed ring"
msgstr ""
#: website/public/assets/figures/th04-bullet-ring.svg:27
msgctxt "figure:th04-bullet-ring.svg"
msgid "First bullet: player direction"
msgstr ""
#: website/public/assets/figures/th04-bullet-ring.svg:64
#: website/public/assets/figures/th04-bullet-ring.svg:102
msgctxt "figure:th04-bullet-ring.svg"
msgid "Origin"
msgstr ""
#: website/public/assets/figures/th04-bullet-ring.svg:105
msgctxt "figure:th04-bullet-ring.svg"
msgid "Player"
msgstr ""
#: website/public/assets/figures/th04-bullet-ring.svg:110
msgctxt "figure:th04-bullet-ring.svg"
msgid "Same spacing: 256 ÷ 16 = 16 angle units = 22.5°"
msgstr ""