[{"data":1,"prerenderedAt":724},["ShallowReactive",2],{"docs-navigation:de":3,"content-page:docs:v2tn6wTnBW_UoBEtcZzXEYdONrhDooDadz0ArOU7Yt8":197,"content-page-surround:docs:v2tn6wTnBW_UoBEtcZzXEYdONrhDooDadz0ArOU7Yt8":722},[4,54,74],{"title":5,"page":6,"canonicalKey":7,"locale":8,"id":9,"draft":6,"icon":10,"sidebar":11,"children":12},"Ableitungen",false,"1","de","content:de:1.dokumentation:1.anleitungen:.navigation.yml","lucide:route","section",[13,19,26,33,40,47],{"title":14,"id":15,"canonicalKey":16,"locale":8,"draft":6,"icon":17,"path":18},"Guild Wars auf dem Mac installieren","content:de:1.dokumentation:1.anleitungen:1.installation.md","1\u002F1","lucide:download","\u002Fde\u002Fdokumentation\u002Fanleitungen\u002Finstallation",{"title":20,"id":21,"canonicalKey":22,"locale":8,"draft":6,"navigation":23,"icon":24,"path":25},"Konten & Mobile-Verknüpfung","content:de:1.dokumentation:1.anleitungen:2.konten.md","1\u002F2",{"title":20},"lucide:key-round","\u002Fde\u002Fdokumentation\u002Fanleitungen\u002Fkonten",{"title":27,"id":28,"canonicalKey":29,"locale":8,"draft":6,"navigation":30,"icon":31,"path":32},"Auf dem Mac spielen: Optionen","content:de:1.dokumentation:1.anleitungen:3.guild-wars-auf-dem-mac-spielen.md","1\u002F3",{"title":27},"lucide:scale","\u002Fde\u002Fdokumentation\u002Fanleitungen\u002Fguild-wars-auf-dem-mac-spielen",{"title":34,"id":35,"canonicalKey":36,"locale":8,"draft":6,"navigation":37,"icon":38,"path":39},"Leistung","content:de:1.dokumentation:1.anleitungen:4.leistung.md","1\u002F4",{"title":34},"lucide:gauge","\u002Fde\u002Fdokumentation\u002Fanleitungen\u002Fleistung",{"title":41,"id":42,"canonicalKey":43,"locale":8,"draft":6,"navigation":44,"icon":45,"path":46},"Templates","content:de:1.dokumentation:1.anleitungen:5.templates.md","1\u002F5",{"title":41},"lucide:bookmark","\u002Fde\u002Fdokumentation\u002Fanleitungen\u002Ftemplates",{"title":48,"id":49,"canonicalKey":50,"locale":8,"draft":6,"navigation":51,"icon":52,"path":53},"Fehlerbehebung","content:de:1.dokumentation:1.anleitungen:6.fehlerbehebung.md","1\u002F6",{"title":48},"lucide:wrench","\u002Fde\u002Fdokumentation\u002Fanleitungen\u002Ffehlerbehebung",{"title":55,"page":6,"canonicalKey":56,"locale":8,"id":57,"draft":6,"icon":58,"sidebar":59,"children":60},"Projekt","2","content:de:1.dokumentation:2.projekt:.navigation.yml","lucide:shield-check","group",[61,67],{"title":62,"id":63,"canonicalKey":64,"locale":8,"draft":6,"navigation":65,"icon":58,"path":66},"Sicherheit & Kontorisiko","content:de:1.dokumentation:2.projekt:1.sicherheit.md","2\u002F1",{"title":62},"\u002Fde\u002Fdokumentation\u002Fprojekt\u002Fsicherheit",{"title":68,"id":69,"canonicalKey":70,"locale":8,"draft":6,"navigation":71,"icon":72,"path":73},"Über & Credits","content:de:1.dokumentation:2.projekt:2.ueber.md","2\u002F2",{"title":68},"lucide:users","\u002Fde\u002Fdokumentation\u002Fprojekt\u002Fueber",{"title":75,"page":6,"canonicalKey":76,"locale":77,"id":78,"draft":6,"icon":79,"sidebar":11,"fallback":80,"children":81},"For ArenaNet","3","en","content:en:1.docs:3.upstream:.navigation.yml","lucide:send",true,[82,89,96,122,148,160,179],{"title":83,"id":84,"canonicalKey":85,"locale":77,"draft":6,"navigation":86,"icon":87,"fallback":80,"path":88},"Introduction","content:en:1.docs:3.upstream:1.introduction.md","3\u002F1",{"title":83},"lucide:book-open-check","\u002Fde\u002Fdokumentation\u002Fupstream\u002Fintroduction",{"title":90,"id":91,"canonicalKey":92,"locale":77,"draft":6,"navigation":93,"icon":94,"fallback":80,"path":95},"Request summary","content:en:1.docs:3.upstream:2.request-summary.md","3\u002F2",{"title":90},"lucide:list-checks","\u002Fde\u002Fdokumentation\u002Fupstream\u002Frequest-summary",{"title":97,"page":6,"canonicalKey":98,"locale":77,"id":99,"draft":6,"icon":100,"sidebar":59,"fallback":80,"children":101},"File system","3\u002F3","content:en:1.docs:3.upstream:3.filesystem:.navigation.yml","lucide:folder-x",[102,108,115],{"title":103,"id":104,"canonicalKey":105,"locale":77,"draft":6,"navigation":106,"icon":100,"fallback":80,"path":107},"File routines (UR-01…04)","content:en:1.docs:3.upstream:3.filesystem:1.unimplemented-routines.md","3\u002F3\u002F1",{"title":103},"\u002Fde\u002Fdokumentation\u002Fupstream\u002Ffilesystem\u002Funimplemented-routines",{"title":109,"id":110,"canonicalKey":111,"locale":77,"draft":6,"navigation":112,"icon":113,"fallback":80,"path":114},"RemoveExtension (UR-05)","content:en:1.docs:3.upstream:3.filesystem:2.path-remove-extension.md","3\u002F3\u002F2",{"title":109},"lucide:scissors","\u002Fde\u002Fdokumentation\u002Fupstream\u002Ffilesystem\u002Fpath-remove-extension",{"title":116,"id":117,"canonicalKey":118,"locale":77,"draft":6,"navigation":119,"icon":120,"fallback":80,"path":121},"File::Open mode (UR-06)","content:en:1.docs:3.upstream:3.filesystem:3.file-open-mode.md","3\u002F3\u002F3",{"title":116},"lucide:file-plus-2","\u002Fde\u002Fdokumentation\u002Fupstream\u002Ffilesystem\u002Ffile-open-mode",{"title":123,"page":6,"canonicalKey":124,"locale":77,"id":125,"draft":6,"icon":126,"sidebar":59,"fallback":80,"children":127},"Input","3\u002F4","content:en:1.docs:3.upstream:4.input:.navigation.yml","lucide:mouse-pointer-click",[128,134,141],{"title":129,"id":130,"canonicalKey":131,"locale":77,"draft":6,"navigation":132,"icon":126,"fallback":80,"path":133},"Double-click (UR-07)","content:en:1.docs:3.upstream:4.input:1.double-click-flag.md","3\u002F4\u002F1",{"title":129},"\u002Fde\u002Fdokumentation\u002Fupstream\u002Finput\u002Fdouble-click-flag",{"title":135,"id":136,"canonicalKey":137,"locale":77,"draft":6,"navigation":138,"icon":139,"fallback":80,"path":140},"Key labels (UR-08)","content:en:1.docs:3.upstream:4.input:2.key-labels.md","3\u002F4\u002F2",{"title":135},"lucide:keyboard","\u002Fde\u002Fdokumentation\u002Fupstream\u002Finput\u002Fkey-labels",{"title":142,"id":143,"canonicalKey":144,"locale":77,"draft":6,"navigation":145,"icon":146,"fallback":80,"path":147},"Cursor re-test (UR-09)","content:en:1.docs:3.upstream:4.input:3.cursor-re-evaluation.md","3\u002F4\u002F3",{"title":142},"lucide:pointer","\u002Fde\u002Fdokumentation\u002Fupstream\u002Finput\u002Fcursor-re-evaluation",{"title":149,"page":6,"canonicalKey":150,"locale":77,"id":151,"draft":6,"icon":152,"sidebar":59,"fallback":80,"children":153},"Runtime","3\u002F5","content:en:1.docs:3.upstream:5.runtime:.navigation.yml","lucide:cpu",[154],{"title":155,"id":156,"canonicalKey":157,"locale":77,"draft":6,"navigation":158,"icon":152,"fallback":80,"path":159},"Heap maximum (UR-10)","content:en:1.docs:3.upstream:5.runtime:1.heap-maximum.md","3\u002F5\u002F1",{"title":155},"\u002Fde\u002Fdokumentation\u002Fupstream\u002Fruntime\u002Fheap-maximum",{"title":161,"page":6,"canonicalKey":162,"locale":77,"id":163,"draft":6,"icon":164,"sidebar":59,"fallback":80,"children":165},"Interface proposals","3\u002F6","content:en:1.docs:3.upstream:6.proposals:.navigation.yml","lucide:plug",[166,173],{"title":167,"id":168,"canonicalKey":169,"locale":77,"draft":6,"navigation":170,"icon":171,"fallback":80,"path":172},"Build identity (UR-11)","content:en:1.docs:3.upstream:6.proposals:1.build-identification.md","3\u002F6\u002F1",{"title":167},"lucide:fingerprint","\u002Fde\u002Fdokumentation\u002Fupstream\u002Fproposals\u002Fbuild-identification",{"title":174,"id":175,"canonicalKey":176,"locale":77,"draft":6,"navigation":177,"icon":164,"fallback":80,"path":178},"Host interface (UR-12)","content:en:1.docs:3.upstream:6.proposals:2.platform-host-interface.md","3\u002F6\u002F2",{"title":174},"\u002Fde\u002Fdokumentation\u002Fupstream\u002Fproposals\u002Fplatform-host-interface",{"title":180,"page":6,"canonicalKey":181,"locale":77,"id":182,"draft":6,"icon":183,"sidebar":59,"fallback":80,"children":184},"Reference","3\u002F7","content:en:1.docs:3.upstream:7.reference:.navigation.yml","lucide:microscope",[185,191],{"title":186,"id":187,"canonicalKey":188,"locale":77,"draft":6,"navigation":189,"icon":52,"fallback":80,"path":190},"Our workarounds","content:en:1.docs:3.upstream:7.reference:1.our-workarounds.md","3\u002F7\u002F1",{"title":186},"\u002Fde\u002Fdokumentation\u002Fupstream\u002Freference\u002Four-workarounds",{"title":192,"id":193,"canonicalKey":194,"locale":77,"draft":6,"navigation":195,"icon":183,"fallback":80,"path":196},"Verification method","content:en:1.docs:3.upstream:7.reference:2.verification-method.md","3\u002F7\u002F2",{"title":192},"\u002Fde\u002Fdokumentation\u002Fupstream\u002Freference\u002Fverification-method",{"title":198,"ref":199,"description":200,"icon":52,"updated":201,"navigation":202,"body":203,"type":703,"id":187,"canonicalKey":188,"draft":6,"partial":6,"locale":77,"collection":704,"navigationFile":6,"file":705,"resolvedRefs":711,"route":712,"resolution":719},"Our workarounds, and what each fix removes","docs\u002Fupstream\u002Freference\u002Four-workarounds","What GWonMac does to the client today, why each workaround exists, what it costs us per client build, and exactly what we delete after each upstream fix.","2026-08-08",{"title":186},{"type":204,"children":205,"toc":688},"root",[206,214,221,226,255,261,304,309,319,329,335,349,368,377,383,397,416,425,434,447,453,470,475,484,500,506,520,532,541,547,561,566,575,581,595,600,605,614,623,629,659,665],{"type":207,"tag":208,"props":209,"children":210},"element","p",{},[211],{"type":212,"value":213},"text","This page is everything our host does to the client today: why each workaround\nexists, what it costs per client build, and exactly what each upstream fix\nlets us delete.",{"type":207,"tag":215,"props":216,"children":218},"h2",{"id":217},"ground-rules",[219],{"type":212,"value":220},"Ground rules",{"type":207,"tag":208,"props":222,"children":223},{},[224],{"type":212,"value":225},"The downloaded artifact from ArenaNet stays canonical: we never change it on\ndisk and never redistribute it. When the client is broken on this platform,\nthe host derives a separate patched copy in memory, verifying the input by\nhash and the output by hash. If any check fails, the host serves the untouched\nofficial module — so a new client build degrades to \"the feature is missing\",\nnever to a broken client.",{"type":207,"tag":227,"props":228,"children":230},"info",{"title":229},"Three states, one decision",[231,233,239,241,246,248,253],{"type":212,"value":232},"Each build is ",{"type":207,"tag":234,"props":235,"children":236},"code",{},[237],{"type":212,"value":238},"certified",{"type":212,"value":240},", ",{"type":207,"tag":234,"props":242,"children":243},{},[244],{"type":212,"value":245},"template-only",{"type":212,"value":247},", or ",{"type":207,"tag":234,"props":249,"children":250},{},[251],{"type":212,"value":252},"uncertified",{"type":212,"value":254},", decided by one\ncomponent. A build we don't recognise runs as the plain official client, with\nevery workaround switched off.",{"type":207,"tag":215,"props":256,"children":258},{"id":257},"workaround-1-the-template-file-bridge",[259],{"type":212,"value":260},"Workaround 1 — the template file bridge",{"type":207,"tag":208,"props":262,"children":263},{},[264,270,272,277,278,283,284,289,290,295,297,302],{"type":207,"tag":265,"props":266,"children":267},"strong",{},[268],{"type":212,"value":269},"Removed by:",{"type":212,"value":271}," ",{"type":207,"tag":234,"props":273,"children":274},{},[275],{"type":212,"value":276},"UR-01",{"type":212,"value":240},{"type":207,"tag":234,"props":279,"children":280},{},[281],{"type":212,"value":282},"UR-02",{"type":212,"value":240},{"type":207,"tag":234,"props":285,"children":286},{},[287],{"type":212,"value":288},"UR-03",{"type":212,"value":240},{"type":207,"tag":234,"props":291,"children":292},{},[293],{"type":212,"value":294},"UR-04",{"type":212,"value":296},", and the probe part of\n",{"type":207,"tag":234,"props":298,"children":299},{},[300],{"type":212,"value":301},"UR-06",{"type":212,"value":303},".",{"type":207,"tag":208,"props":305,"children":306},{},[307],{"type":212,"value":308},"The host appends five forwarder functions to the module and repoints the call\nsites of the four stub routines at them. Each forwarder calls the host through\na marker value on a syscall import the module already has — no real call can\nproduce that value. The host then does the file work in the Emscripten file\nsystem: create a directory tree, list a directory, derive a relative name,\ndelete a file, and test for a file.",{"type":207,"tag":208,"props":310,"children":311},{},[312,317],{"type":207,"tag":265,"props":313,"children":314},{},[315],{"type":212,"value":316},"Cost per client build.",{"type":212,"value":318}," The five routines have to be found again, with\nproof that their callers didn't change. This part is automated: a machine\nlocates each routine by body bytes, signature, and caller set, then hashes the\ncomplete body of every caller the transform touches. If any of that changed,\nthe transform refuses to run.",{"type":207,"tag":208,"props":320,"children":321},{},[322,327],{"type":207,"tag":265,"props":323,"children":324},{},[325],{"type":212,"value":326},"Deleted after the fix:",{"type":212,"value":328}," all of it — five forwarders, five marker values,\nthe host file-system bridge, and the whole certification table for this\ntransform.",{"type":207,"tag":215,"props":330,"children":332},{"id":331},"workaround-2-the-entry-name-without-an-extension",[333],{"type":212,"value":334},"Workaround 2 — the entry name without an extension",{"type":207,"tag":208,"props":336,"children":337},{},[338,342,343,348],{"type":207,"tag":265,"props":339,"children":340},{},[341],{"type":212,"value":269},{"type":212,"value":271},{"type":207,"tag":234,"props":344,"children":345},{},[346],{"type":212,"value":347},"UR-05",{"type":212,"value":303},{"type":207,"tag":208,"props":350,"children":351},{},[352,354,359,361,366],{"type":212,"value":353},"Our bridge returns each entry name ",{"type":207,"tag":265,"props":355,"children":356},{},[357],{"type":212,"value":358},"without",{"type":212,"value":360}," its extension, so the client\ncalls ",{"type":207,"tag":234,"props":362,"children":363},{},[364],{"type":212,"value":365},"Path::RemoveExtension",{"type":212,"value":367}," on a name where the off-by-one can't fire.",{"type":207,"tag":208,"props":369,"children":370},{},[371,375],{"type":207,"tag":265,"props":372,"children":373},{},[374],{"type":212,"value":326},{"type":212,"value":376}," nothing on day one — removing an absent extension\ndoes nothing, so the workaround stays correct. It goes together with\nworkaround 1.",{"type":207,"tag":215,"props":378,"children":380},{"id":379},"workaround-3-the-double-click-flag",[381],{"type":212,"value":382},"Workaround 3 — the double-click flag",{"type":207,"tag":208,"props":384,"children":385},{},[386,390,391,396],{"type":207,"tag":265,"props":387,"children":388},{},[389],{"type":212,"value":269},{"type":212,"value":271},{"type":207,"tag":234,"props":392,"children":393},{},[394],{"type":212,"value":395},"UR-07",{"type":212,"value":303},{"type":207,"tag":208,"props":398,"children":399},{},[400,402,407,409,414],{"type":212,"value":401},"The host appends one exported mutable ",{"type":207,"tag":234,"props":403,"children":404},{},[405],{"type":212,"value":406},"i32",{"type":212,"value":408}," global to the module and splices\nthree instructions into the mousedown callback. They store the global's value\ninto the record word the client already carries to ",{"type":207,"tag":234,"props":410,"children":411},{},[412],{"type":212,"value":413},"FrMouse",{"type":212,"value":415},", and the host\nwrites the Chromium click count into that global on every trusted press. The\ntransform adds no function and moves no index or table entry.",{"type":207,"tag":208,"props":417,"children":418},{},[419,423],{"type":207,"tag":265,"props":420,"children":421},{},[422],{"type":212,"value":316},{"type":212,"value":424}," The exact body hash of the mousedown callback, plus\ntwo byte offsets. A machine re-derives this; a human confirms it.",{"type":207,"tag":208,"props":426,"children":427},{},[428,432],{"type":207,"tag":265,"props":429,"children":430},{},[431],{"type":212,"value":326},{"type":212,"value":433}," the transform, its table, and the renderer code\nthat writes the global.",{"type":207,"tag":208,"props":435,"children":436},{},[437,439,445],{"type":212,"value":438},"An earlier workaround for the same defect synthesised a pair of touch taps. It\ndelivered four clicks instead of two, so we deleted it —\n",{"type":207,"tag":440,"props":441,"children":443},"a",{"href":442},"$docs\u002Fupstream\u002Finput\u002Fdouble-click-flag",[444],{"type":212,"value":395},{"type":212,"value":446}," has the measurement.",{"type":207,"tag":215,"props":448,"children":450},{"id":449},"workaround-4-the-native-cursor",[451],{"type":212,"value":452},"Workaround 4 — the native cursor",{"type":207,"tag":208,"props":454,"children":455},{},[456,460,462,468],{"type":207,"tag":265,"props":457,"children":458},{},[459],{"type":212,"value":269},{"type":212,"value":461}," nothing today.\n",{"type":207,"tag":440,"props":463,"children":465},{"href":464},"$docs\u002Fupstream\u002Fproposals\u002Fplatform-host-interface",[466],{"type":212,"value":467},"UR-12",{"type":212,"value":469}," would remove it.",{"type":207,"tag":208,"props":471,"children":472},{},[473],{"type":212,"value":474},"The host adds a small companion component to the module. It reads the client's\ncursor state — the active art pointer, the texture chain, and the colour\nbuffer — and publishes a 32 by 32 image into a region the host allocated; the\nhost sets that image as the native cursor. The component imports no function\nand writes nothing the game owns. Every read goes through bounds-checked\npointer chases, and every chase can fail safely.",{"type":207,"tag":208,"props":476,"children":477},{},[478,482],{"type":207,"tag":265,"props":479,"children":480},{},[481],{"type":212,"value":316},{"type":212,"value":483}," Our most expensive workaround: twelve memory\naddresses and two function indices. No machine can prove a memory address, so\na human measures them on each build. Until that's done, the player gets the\nplain system pointer.",{"type":207,"tag":208,"props":485,"children":486},{},[487,498],{"type":207,"tag":265,"props":488,"children":489},{},[490,492,496],{"type":212,"value":491},"Deleted after ",{"type":207,"tag":234,"props":493,"children":494},{},[495],{"type":212,"value":467},{"type":212,"value":497},":",{"type":212,"value":499}," the twelve cursor addresses and the component's\nread path.",{"type":207,"tag":215,"props":501,"children":503},{"id":502},"workaround-5-the-pointer-replay",[504],{"type":212,"value":505},"Workaround 5 — the pointer replay",{"type":207,"tag":208,"props":507,"children":508},{},[509,513,514,519],{"type":207,"tag":265,"props":510,"children":511},{},[512],{"type":212,"value":269},{"type":212,"value":271},{"type":207,"tag":234,"props":515,"children":516},{},[517],{"type":212,"value":518},"UR-09",{"type":212,"value":303},{"type":207,"tag":208,"props":521,"children":522},{},[523,525,530],{"type":212,"value":524},"After a click that produced no cursor event, the host dispatches one synthetic\nout-and-back ",{"type":207,"tag":234,"props":526,"children":527},{},[528],{"type":212,"value":529},"mousemove",{"type":212,"value":531}," pair at the last click position; the physical pointer\ndoesn't move. It retries every 150 ms for at most 2,500 ms. The replay can't\nstart a click and can't leave the pointer at a new position. The host also\nsynthesises pointer moves while the player rotates the camera, because the\nclient steers from absolute coordinates — that path can't originate a click\neither.",{"type":207,"tag":208,"props":533,"children":534},{},[535,539],{"type":207,"tag":265,"props":536,"children":537},{},[538],{"type":212,"value":326},{"type":212,"value":540}," the whole retry path.",{"type":207,"tag":215,"props":542,"children":544},{"id":543},"workaround-6-the-heap-warning-and-safe-reload",[545],{"type":212,"value":546},"Workaround 6 — the heap warning and safe reload",{"type":207,"tag":208,"props":548,"children":549},{},[550,554,555,560],{"type":207,"tag":265,"props":551,"children":552},{},[553],{"type":212,"value":269},{"type":212,"value":271},{"type":207,"tag":234,"props":556,"children":557},{},[558],{"type":212,"value":559},"UR-10",{"type":212,"value":303},{"type":207,"tag":208,"props":562,"children":563},{},[564],{"type":212,"value":565},"The host monitors the effective heap cap, warns while the player still has\nroom to return somewhere safe, then offers a user-controlled reload. WASM\nmemory capacity cannot shrink inside one process; reload starts a new heap.",{"type":207,"tag":208,"props":567,"children":568},{},[569,573],{"type":207,"tag":265,"props":570,"children":571},{},[572],{"type":212,"value":326},{"type":212,"value":574}," emergency reload guidance can go once ArenaNet's\nownership policy is bounded and long content-diverse sessions remain well\nbelow the effective cap. The general crash-recovery path remains.",{"type":207,"tag":215,"props":576,"children":578},{"id":577},"research-profile-paired-4-gb-jswasm-transform",[579],{"type":212,"value":580},"Research profile — paired 4 GB JS\u002FWASM transform",{"type":207,"tag":208,"props":582,"children":583},{},[584,589,590,594],{"type":207,"tag":265,"props":585,"children":586},{},[587],{"type":212,"value":588},"Reduced or removed by:",{"type":212,"value":271},{"type":207,"tag":234,"props":591,"children":592},{},[593],{"type":212,"value":559},{"type":212,"value":303},{"type":207,"tag":208,"props":596,"children":597},{},[598],{"type":212,"value":599},"An off-by-default developer profile raises build 38797's WASM maximum to 4 GiB\nminus one page and transforms the matching generated JavaScript to normalize\nwasm32 pointers above 2 GiB. It is a paired transform: changing only the WASM\nmaximum would hand negative pointer values to JavaScript and is refused.",{"type":207,"tag":208,"props":601,"children":602},{},[603],{"type":212,"value":604},"The exact pair has passed ArenaNet-allocator qualification above 3 GiB and a\nlive Electron string-glue test at 2,625 MiB. It remains a research profile, not\na default player setting. All five variants the production chain can emit are\nhash-pinned. Before an experimental release it still needs packaged\nhigh-address gameplay coverage, system-memory testing, and explicit opt-in\ncopy. Diagnostics record the effective mode and cap.",{"type":207,"tag":208,"props":606,"children":607},{},[608,612],{"type":207,"tag":265,"props":609,"children":610},{},[611],{"type":212,"value":316},{"type":212,"value":613}," Both official artifact hashes, every accepted\npredecessor hash, both derived hashes, and the generated-glue pointer audit.\nAny ArenaNet update disables the profile until it is re-certified.",{"type":207,"tag":208,"props":615,"children":616},{},[617,621],{"type":207,"tag":265,"props":618,"children":619},{},[620],{"type":212,"value":326},{"type":212,"value":622}," the whole transform and its certification table. A\nsource-built 4 GB client already has the compiler's matching unsigned-pointer\nsupport; a bounded cache\u002Flifecycle fix removes the reason for our emergency\nheadroom.",{"type":207,"tag":215,"props":624,"children":626},{"id":625},"what-our-workarounds-never-do",[627],{"type":212,"value":628},"What our workarounds never do",{"type":207,"tag":630,"props":631,"children":632},"ul",{},[633,639,644,649,654],{"type":207,"tag":634,"props":635,"children":636},"li",{},[637],{"type":212,"value":638},"They never change the artifact on disk.",{"type":207,"tag":634,"props":640,"children":641},{},[642],{"type":212,"value":643},"They never redistribute game files.",{"type":207,"tag":634,"props":645,"children":646},{},[647],{"type":212,"value":648},"They never send credentials, account identifiers, or game traffic anywhere.",{"type":207,"tag":634,"props":650,"children":651},{},[652],{"type":212,"value":653},"They never automate gameplay. The host does not choose a target, move a\ncharacter, use a skill, or send chat.",{"type":207,"tag":634,"props":655,"children":656},{},[657],{"type":212,"value":658},"They never run on a build that we have not certified.",{"type":207,"tag":215,"props":660,"children":662},{"id":661},"the-bottom-line",[663],{"type":212,"value":664},"The bottom line",{"type":207,"tag":208,"props":666,"children":667},{},[668,670,674,676,680,682,686],{"type":212,"value":669},"Six of the twelve requests exist because of file handling; one exists because\nof a single unwritten byte. Fix ",{"type":207,"tag":234,"props":671,"children":672},{},[673],{"type":212,"value":276},{"type":212,"value":675}," to ",{"type":207,"tag":234,"props":677,"children":678},{},[679],{"type":212,"value":395},{"type":212,"value":681}," and three production\nworkarounds disappear outright. A source-level ",{"type":207,"tag":234,"props":683,"children":684},{},[685],{"type":212,"value":559},{"type":212,"value":687}," correction also avoids\nturning the research-only 4 GB profile into another permanent certification\nburden.",{"title":689,"searchDepth":690,"depth":690,"links":691},"",4,[692,694,695,696,697,698,699,700,701,702],{"id":217,"depth":693,"text":220},2,{"id":257,"depth":693,"text":260},{"id":331,"depth":693,"text":334},{"id":379,"depth":693,"text":382},{"id":449,"depth":693,"text":452},{"id":502,"depth":693,"text":505},{"id":543,"depth":693,"text":546},{"id":577,"depth":693,"text":580},{"id":625,"depth":693,"text":628},{"id":661,"depth":693,"text":664},"markdown","docs",{"source":706,"path":707,"stem":708,"dir":709,"extension":710},"content","en\u002F1.docs\u002F3.upstream\u002F7.reference\u002F1.our-workarounds.md","en\u002F1.docs\u002F3.upstream\u002F7.reference\u002F1.our-workarounds","reference","md",{"$docs\u002Fupstream\u002Finput\u002Fdouble-click-flag":133,"$docs\u002Fupstream\u002Fproposals\u002Fplatform-host-interface":178},{"requestedPath":190,"resolvedPath":713,"alternates":714},"\u002Fdocs\u002Fupstream\u002Freference\u002Four-workarounds",[715,717],{"locale":77,"path":713,"source":716},"variant",{"locale":8,"path":190,"source":718,"resolvedLocale":77},"fallback",{"requested":720,"resolved":721,"usedFallback":80},{"locale":8},{"locale":77},{"previous":723,"next":723},null,1786362946321]