From d98c8214cc973be87cce6936aa50658a824db4a5 Mon Sep 17 00:00:00 2001 From: sylph-decoder Date: Sat, 29 Aug 2026 19:56:34 +0000 Subject: [PATCH] re: the title's build-in measured in the guest's draw stream -- the flashes are real The settle-time decode was confirmed only against a SETTLED frame, which shows the end state is right and says nothing about whether the five flashes ever happen. This runs the oracle: a draw capture armed before the title exists, so the window contains the frames in which the screen is built. The flashes fire in a six-frame window and are absent from all 155 other sampled frames. `ptlogo_back2eff1` is drawn in exactly two frames at t = 54.0 against a decoded peak of t54-56; `ptlogo1` first appears at t = 42.2 against a decoded t42. Units-per-frame was taken from the GLOW's period alone, a different element, so the timings are not circular. The two holders are continuous from frame 134. The plate glow's quad carries a per-vertex colour whose alpha IS the element's fade alpha, so the ramp is read straight out of the guest: observed range 0..80 against a decoded peak of 80, exact and unfitted; period 51.158 presented frames over 20 cycle starts. Fitting the decoded ramp gives RMS 13.16 alpha levels against 38.18 for the same ramp REVERSED -- if the shape carried no information those would be equal, so the asymmetry is real and correctly directed. Further controls: symmetric triangle 15.73, flat 31.13. `ptlogo_back2eff3` was never drawn, and that is expected rather than a miss: a 2-unit flash peak is 0.85 of a presented frame, so catching one is a matter of phase. A port drawing all five every time shows more sweep than the console. METHOD.md gains the trap this cost: a 2D draw's identity is its vertex geometry, not its bound texture. These sprites sample shared pages, and matching texture dimensions produced a false negative (no flash is ever drawn) and a false positive (the intro movie's 640x360 YUV planes read as `ptbase2`) in the same pass. Also records the top-level restriction on the settle window, which the port raised and which is verified here: top-level [160,236] width 76, including the `ptloop` leaves [269,540] width 271 -- an instant past the end of every top-level element's timeline. Evidence committed as a derived per-frame series, not the 7 MB raw log. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01QsEPXWVaEpyfudtR6re1Pd --- .../sylpheed-formats/examples/sprite_dims.rs | 12 + docs/port/HANDOFF.md | 48 + docs/re/INDEX.md | 1 + docs/re/METHOD.md | 21 + docs/re/data/title-glow-alpha-per-frame.csv | 3184 +++++++++++++++++ docs/re/structures/ui-record-loop-length.md | 17 + docs/re/structures/ui-settle-time.md | 15 + .../structures/ui-title-buildin-measured.md | 134 + tools/re-capture/buildin_timeline.py | 79 + 9 files changed, 3511 insertions(+) create mode 100644 crates/sylpheed-formats/examples/sprite_dims.rs create mode 100644 docs/re/data/title-glow-alpha-per-frame.csv create mode 100644 docs/re/structures/ui-title-buildin-measured.md create mode 100755 tools/re-capture/buildin_timeline.py diff --git a/crates/sylpheed-formats/examples/sprite_dims.rs b/crates/sylpheed-formats/examples/sprite_dims.rs new file mode 100644 index 00000000..e7ade7d1 --- /dev/null +++ b/crates/sylpheed-formats/examples/sprite_dims.rs @@ -0,0 +1,12 @@ +use sylpheed_formats::{pak, ui_layout, t8ad}; +fn main(){ + let mut a=std::env::args().skip(1); + let pk=a.next().unwrap(); let i:usize=a.next().unwrap().parse().unwrap(); + let ar=pak::PakArchive::open(pk).unwrap(); + let by=ar.read(&ar.entries()[i]).unwrap(); + let b=ui_layout::parse_build(&by).unwrap(); + let mut v:Vec<(String,u32,u32)>=b.sprites.iter().filter_map(|(n,&(o,s))|{ + let im=t8ad::parse(&by[o..o+s])?; Some((n.clone(),im.width,im.height))}).collect(); + v.sort(); + for (n,w,h) in v { println!(" {w:>5} x {h:<5} {n}"); } +} diff --git a/docs/port/HANDOFF.md b/docs/port/HANDOFF.md index 7bce3df3..b0363cd2 100644 --- a/docs/port/HANDOFF.md +++ b/docs/port/HANDOFF.md @@ -1927,3 +1927,51 @@ every 5 s. Detail, census and the falsification test: [`docs/re/structures/ui-record-loop-length.md`](../re/structures/ui-record-loop-length.md). +## 2026-08-29 (later still) — the settle-time mechanism confirmed in the running game + +✅ **measured.** The settle-time finding was previously confirmed only against a +*settled* frame, which shows the end state is right and says nothing about whether +the five flashes ever happen. They do. From a draw capture armed before the title +exists: + +| element | drawn in frames | → t units | decoded | +|---|---|---|---| +| `ptlogo_back2eff1` | **130–131** | **54.0 – 56.3** | flash, peak **t54–56** | +| `ptlogo_back2eff2` | 133 | 61.0 | flash, peak t58–60 | +| `ptlogo_back2eff4` | 133–135 | 61.0 – 65.7 | flash, peak t~64 | +| `ptlogo_back2eff` / `ptlogo_back2` | 134–260 | 63.3 – … | **hold** | +| `ptlogo1` | **125** | **42.2** | stops moving at **t42** | + +The flashes occupy a six-frame window and are absent from all 155 other sampled +frames. Units-per-frame came from the **glow's period alone** — a different +element — so the timings are not circular. + +🔴 **One thing for you to act on: do not draw all five flashes every time.** A +flash's peak is 2 keyframe units, which at this run's pacing is **0.85 of a +presented frame**. `ptlogo_back2eff3` was **never drawn** — not a miss, a phase +effect. The console shows a *subset* of these on any given play; a port that draws +all five will show more of the sweep than the real thing. + +✅ **And your 120 is confirmed from the guest's own vertex data.** The glow quad's +per-vertex colour alpha *is* the element's fade alpha: observed range **0…80** +against a decoded peak of **80**, exact and unfitted; period **51.158 presented +frames** over 20 cycle starts; the draw is omitted entirely while dark. Fitting the +decoded ramp gives RMS 13.16 alpha levels against **38.18 for the same ramp +reversed**, so the asymmetry is real and pointing the right way. + +✅ **Your top-level restriction is right and is now in the page**, verified rather +than taken: top-level gives `[160, 236]` (width 76), including the `ptloop` leaves +gives `[269, 540]` (width 271) — a "settled instant" *after every top-level +element has exited*. Thank you for catching that the description permitted the +wrong reading. + +🔴 **A trap worth having before you write any draw-stream tooling:** a 2D draw's +identity here is its **vertex geometry, not its bound texture**. These sprites +sample large shared pages. Matching texture dimensions told me first that no flash +is ever drawn, and second that `ptbase2` and `pteff04` are drawn in frames 75–105 — +those frames are the **intro movie**, whose YUV planes are 640×360 and whose target +is 1280×720. Both wrong, neither loud. + +Detail, controls and reach: +[`docs/re/structures/ui-title-buildin-measured.md`](../re/structures/ui-title-buildin-measured.md). + diff --git a/docs/re/INDEX.md b/docs/re/INDEX.md index b3c105f6..19725d96 100644 --- a/docs/re/INDEX.md +++ b/docs/re/INDEX.md @@ -171,3 +171,4 @@ files, which is how the same ground got covered twice. | [`structures/ui-tie-break-cost-at-settle.md`](structures/ui-tie-break-cost-at-settle.md) | What the unknown paint-order tie-break costs, in pixels | ✅ **decoded**, closing the open half of Q3: at the settled instant the tie-break costs **at most 1 px at Δ1**, on the **Japanese title only** (`ptlogo2`×`ptlogo_tm`, 5 px shared ink); **exactly 0 px on all five port screens**. The earlier 24-pair bound was a `rest()` count — and 10 of the title's 11 tied pairs are between `ptlogo_back2eff1`…`eff5`, five transient flashes that are **transparent** on the settled screen ([`ui-settle-time.md`](structures/ui-settle-time.md)). Live pairs at settle: entry 4 → **1**, entry 7 → **2**, the four loading bundles → **0**. ✅ Not a knife-edge — sweeping every keyframe time and midpoint, the count is **flat across the whole settle window**, and the loading bundles' tie is live only at t17–t33. ✅ Controls: an overlapping *different*-key swap moves 25 310 / 268 698 / ~765 000 px on the entries reporting zero; zeros are explained by shared-ink counts (the `ptframe` pairs share **0 px** of ink). ⚠️ Entries 0/1/12/15 have **no live control** — their zeros rest on keyframe data, not a render. 🟡 Refutation attempt on the corpus's "24 pairs": **survives** as a rest-pose bound, 16/16 on entry 7. ❔ *Why* ties order as they do is still unknown — and now worth one pixel | | [`structures/ui-record-loop-length.md`](structures/ui-record-loop-length.md) | Where a looping record's cycle restarts — and the `PRESS Ⓐ` plate's real period | ✅ **decoded**: a nested record is itself a RATC bundle and its header **`+0x08` is the loop length**; its keyframes need not fill it, and the slack is a hold at the final pose. Disc-wide over **1 781** timed nested records: 92.3 % declare exactly their last keyframe time, **7.7 % declare more**, and **0 declare less** — the falsifier (a cycle cannot restart before its own last pose) never fires. 🔴 **The plate's `ptbtn00f` is 105 units of ramp inside a 120-unit cycle, so it holds dark for 15 units** — the port was shipping **105**, and the answer is **120**. ✅ Falsification test against the running game, using a pacing factor measured *independently* on the focus ring (declared 120 → **2.177 s**, factor **1.0885**): to reach the corpus's measured 2.12–2.34 s, 105 units needs a factor of **1.211–1.337** (🔴 excludes the ring's) while 120 needs **1.060–1.170** (✅ contains it). Different elements, different bundles, separate runs — tied only by both declaring 120. ⚠️ Says where a cycle *ends*, not which records cycle. ❔ the **top-level** `+0x08` (300 on every `GP_TITLE` entry, elements ending at 244–269) is a different question, untouched | | [`structures/ui-focus-record-pulse-census.md`](structures/ui-focus-record-pulse-census.md) | Every focus record whose glow pulses, and where `rest()` puts it | ✅ **decoded**, disc-wide: **1 130** focus records, **2 664** timed elements, **210 with a varying alpha** — of which **202** have `rest()` == the **peak** (burns bright forever) and **8** land **mid-ramp**. By pak: `PILOTLOG` 116, `MOVIE_THEATER` 54, `HANGAR_ARSENAL` 30, `LEADERBOARD` 8, **`GP_TITLE` 2**. 🟡 Bounds rather than refutes the port's "34 in the export, 2 varying, nothing to fix" — correct, and correct *because* `GP_TITLE` has 2; the pathology sits in the screens a wider port needs next. 🔴 The 8 mid-ramp ones are the worse mode: `py_ranking_btn01f` swings 255→127→255 and `rest()` returns **244**, neither extreme, which looks entirely plausible and nothing reports it. ✅ Control: `ptbtn01f` is genuinely constant (255 throughout) and is **not** flagged; two hits verified keyframe by keyframe. ⚠️ A pulsing element has no resting pose — the question is malformed, not mis-answered; `pose_at(t)` inside the record's declared cycle ([`ui-record-loop-length.md`](structures/ui-record-loop-length.md)) is the only well-formed query. ⚠️ 210 is a **floor**: focus records are matched by the `Xf.rat` name rule, and varying scale/rotation/position is not counted | +| [`structures/ui-title-buildin-measured.md`](structures/ui-title-buildin-measured.md) | The title's build-in and the plate glow, read out of the guest's own draw stream | ✅ **measured** (Canary, `ARM=early` draw capture): the decoded *mechanism* is observed, not just its end state. **The five flashes fire in a six-frame window and are absent from all 155 other sampled frames**; `ptlogo_back2eff1` is drawn in exactly 2 frames at **t = 54.0** against a decoded peak of **t54–56**, and `ptlogo1` first appears at **t = 42.2** against a decoded **t42** — with units/frame taken from the **glow's period alone**, a different element. The two holders (`ptlogo_back2eff`, `ptlogo_back2`) are continuous from frame 134. ✅ The glow's per-vertex colour alpha IS its fade alpha: **observed range 0…80 against a decoded peak of 80**, exact and unfitted; **period 51.158 presented frames** over 20 cycle starts; fitting the decoded ramp gives RMS **13.16** against **38.18 reversed** (2.9×), so the asymmetry is real and correctly directed. Structure: frame **107** is a **27-draw composite**, the settled title is 10–11 draws naming no sprite — which is why arming at the title sees nothing. ⚠️ **`eff3` was never drawn and that is expected**: a 2-unit flash peak is **0.85 of a presented frame**, so catching one is a matter of phase — 🔴 a port drawing all five every time shows more sweep than the console does. 🔴 **Trap:** matching a bound texture's dimensions to a sprite fails both ways — it missed every flash *and* read the intro movie's 640×360 YUV planes as `ptbase2`. ❔ Run's frame rate not recorded, so nothing is stated in seconds; `eff5` vs `ptlogo_back2eff` not separated | diff --git a/docs/re/METHOD.md b/docs/re/METHOD.md index a3a26397..84651d9c 100644 --- a/docs/re/METHOD.md +++ b/docs/re/METHOD.md @@ -1059,3 +1059,24 @@ The general trap: **an aggregate computed per-element is not a state of the system.** Ask what instant a composite claims to depict, and check that every element was asked the same question. See [`structures/ui-settle-time.md`](structures/ui-settle-time.md). + +## A 2D draw's identity is its geometry, not its bound texture + +The title's sprites **sample large shared texture pages**, so the texture bound to +a draw identifies a page and not an element. Matching a bound texture's dimensions +against a decoded sprite's fails silently in both directions, and one pass here +did both at once: + +* **false negative** — "none of the five flash sprites is ever drawn". They are + drawn; they simply never appear as their own texture. +* **false positive** — "`ptbase2` (640×360) and `pteff04` (1280×720) are drawn in + frames 75–105". Those frames are the **intro movie**, whose YUV planes and + target happen to be 640×360 and 1280×720. + +Re-run against the **quad's vertex rect** in design space and every element +appears where the disc says it should. Canary's own capture code already carries +this warning in a comment, and the corpus had already recorded that the settled +title binds only 1280×768 pages — both were there to be read first. + +The general shape: **a coincidence of size is not an identification.** Before +matching on one attribute, ask what else in the frame shares it. diff --git a/docs/re/data/title-glow-alpha-per-frame.csv b/docs/re/data/title-glow-alpha-per-frame.csv new file mode 100644 index 00000000..378fa684 --- /dev/null +++ b/docs/re/data/title-glow-alpha-per-frame.csv @@ -0,0 +1,3184 @@ +# GP_TITLE `ptbtn00f` glow: per-vertex colour ALPHA read out of the guest's own +# draw stream, one row per presented frame. 0 = the draw was not submitted. +# Capture: ui_draw_capture.sh ARM=early FRAMES=9000, 2026-08-29. +# The title composite spike is frame 107; the settled screen runs 168..1217. +frame,draws_in_frame,glow_alpha +2,5,0 +3,5,0 +4,5,0 +5,5,0 +6,5,0 +7,5,0 +8,5,0 +9,5,0 +10,5,0 +11,5,0 +12,5,0 +13,5,0 +14,5,0 +15,5,0 +16,5,0 +17,5,0 +18,5,0 +19,5,0 +20,5,0 +21,5,0 +22,5,0 +23,5,0 +24,5,0 +25,5,0 +26,5,0 +27,5,0 +28,5,0 +29,5,0 +30,5,0 +31,5,0 +32,5,0 +33,5,0 +34,5,0 +36,5,0 +37,5,0 +38,5,0 +40,5,0 +41,5,0 +42,5,0 +43,5,0 +44,5,0 +45,5,0 +46,5,0 +47,5,0 +48,5,0 +49,5,0 +50,5,0 +51,5,0 +52,5,0 +53,5,0 +54,5,0 +55,5,0 +56,5,0 +57,5,0 +58,5,0 +59,5,0 +60,5,0 +61,5,0 +62,5,0 +63,5,0 +64,5,0 +65,4,0 +66,4,0 +67,4,0 +68,4,0 +69,3,0 +70,3,0 +71,3,0 +72,3,0 +73,3,0 +74,3,0 +75,4,0 +77,4,0 +78,4,0 +79,4,0 +80,4,0 +81,4,0 +82,4,0 +83,4,0 +84,4,0 +85,4,0 +86,4,0 +87,4,0 +88,4,0 +89,4,0 +90,4,0 +91,4,0 +92,4,0 +94,4,0 +95,4,0 +97,4,0 +98,4,0 +99,4,0 +101,4,0 +102,4,0 +103,4,0 +104,4,0 +105,4,0 +106,3,0 +107,27,0 +109,6,0 +110,6,0 +111,6,0 +112,6,0 +113,6,0 +114,6,0 +115,6,0 +116,6,0 +117,6,0 +118,6,0 +119,8,0 +120,8,0 +121,8,0 +122,8,0 +123,8,0 +124,8,0 +125,8,0 +126,8,0 +127,8,0 +128,8,0 +129,9,0 +130,12,0 +131,12,0 +133,13,0 +134,14,0 +135,14,0 +136,13,0 +137,13,0 +138,14,0 +139,14,0 +141,14,0 +142,14,0 +143,14,0 +144,14,0 +145,14,0 +146,14,0 +148,14,0 +149,14,0 +150,14,0 +152,14,0 +153,12,0 +154,12,0 +155,12,0 +157,9,0 +158,9,0 +159,9,0 +160,9,0 +162,9,0 +163,9,0 +164,9,0 +165,9,0 +166,9,0 +167,9,0 +168,10,0 +169,10,0 +170,10,0 +171,10,0 +172,10,0 +173,10,0 +174,10,0 +175,10,0 +176,10,0 +177,10,0 +178,10,0 +179,10,0 +180,10,0 +181,10,0 +182,10,0 +183,10,0 +184,10,0 +185,10,0 +186,10,0 +187,10,0 +189,10,0 +190,10,0 +191,10,0 +192,10,0 +193,10,0 +194,10,0 +195,10,0 +196,10,0 +197,10,0 +198,10,0 +199,10,0 +201,10,0 +202,10,0 +203,10,0 +204,10,0 +206,10,0 +207,10,0 +208,11,1 +209,11,3 +211,11,17 +212,11,29 +213,11,35 +214,11,44 +215,11,50 +216,11,56 +217,11,62 +218,11,74 +220,11,78 +221,11,80 +222,11,80 +223,11,80 +224,11,80 +225,11,80 +226,11,80 +227,11,79 +228,11,78 +229,11,76 +230,11,75 +232,11,67 +233,11,63 +234,11,61 +235,11,58 +237,11,47 +238,11,40 +239,11,39 +240,11,35 +241,11,30 +242,11,26 +243,11,23 +245,11,14 +246,11,11 +247,11,5 +248,11,3 +249,11,1 +250,10,0 +251,10,0 +252,10,0 +253,10,0 +255,10,0 +256,10,0 +258,11,2 +259,11,6 +260,11,8 +261,11,17 +263,11,38 +264,11,44 +265,11,53 +266,11,59 +267,11,71 +269,11,77 +270,11,79 +272,11,80 +273,11,80 +274,11,80 +276,11,78 +277,11,76 +279,11,70 +280,11,67 +282,11,60 +283,11,54 +284,11,53 +285,11,49 +286,11,46 +287,11,42 +289,11,35 +290,11,32 +291,11,30 +292,11,25 +293,11,21 +294,11,16 +295,11,11 +296,11,5 +297,11,4 +298,11,2 +299,10,0 +300,10,0 +301,10,0 +302,10,0 +303,10,0 +305,10,0 +306,10,0 +307,10,0 +308,11,4 +309,11,8 +310,11,14 +311,11,20 +312,11,26 +313,11,32 +314,11,44 +315,11,50 +316,11,56 +317,11,65 +318,11,71 +319,11,76 +320,11,79 +321,11,80 +322,11,80 +323,11,80 +324,11,80 +325,11,80 +326,11,80 +327,11,77 +328,11,76 +329,11,74 +330,11,70 +332,11,61 +333,11,56 +334,11,54 +335,11,51 +336,11,47 +337,11,44 +339,11,37 +340,11,33 +341,11,32 +342,11,28 +344,11,18 +345,11,12 +346,11,11 +347,11,5 +348,11,4 +349,11,2 +350,10,0 +351,10,0 +352,10,0 +353,10,0 +354,10,0 +355,10,0 +356,10,0 +357,11,1 +358,11,4 +359,11,8 +360,11,14 +362,11,26 +363,11,32 +364,11,35 +365,11,44 +366,11,50 +367,11,59 +368,11,65 +369,11,75 +370,11,78 +371,11,80 +372,11,80 +373,11,80 +374,11,80 +375,11,80 +376,11,80 +378,11,79 +379,11,77 +380,11,76 +381,11,74 +383,11,67 +384,11,61 +385,11,60 +386,11,56 +387,11,53 +388,11,49 +390,11,39 +391,11,35 +392,11,33 +393,11,30 +395,11,23 +396,11,19 +397,11,18 +398,11,12 +399,11,7 +400,11,4 +401,11,2 +402,10,0 +403,10,0 +404,10,0 +405,10,0 +406,10,0 +407,10,0 +409,11,1 +410,11,4 +411,11,5 +412,11,8 +413,11,14 +414,11,23 +415,11,29 +416,11,35 +418,11,53 +419,11,59 +420,11,62 +421,11,71 +423,11,79 +424,11,80 +425,11,80 +426,11,80 +427,11,80 +428,11,80 +429,11,80 +430,11,79 +431,11,77 +432,11,76 +433,11,73 +435,11,65 +436,11,60 +437,11,58 +438,11,53 +439,11,47 +440,11,44 +441,11,40 +442,11,35 +443,11,32 +444,11,28 +446,11,21 +447,11,18 +448,11,16 +449,11,11 +450,11,5 +451,11,3 +452,11,2 +453,10,0 +454,10,0 +455,10,0 +456,10,0 +457,10,0 +458,10,0 +459,10,0 +460,10,0 +462,11,6 +463,11,11 +464,11,14 +465,11,20 +466,11,26 +467,11,32 +468,11,38 +469,11,50 +470,11,56 +471,11,65 +472,11,71 +473,11,76 +474,11,79 +475,11,80 +476,11,80 +477,11,80 +478,11,80 +479,11,80 +480,11,80 +481,11,79 +482,11,77 +483,11,76 +484,11,73 +485,11,68 +486,11,65 +487,11,61 +488,11,58 +489,11,53 +490,11,49 +491,11,44 +493,11,37 +494,11,33 +495,11,32 +496,11,26 +497,11,23 +498,11,16 +499,11,11 +500,11,7 +501,11,5 +502,11,3 +503,11,1 +504,10,0 +505,10,0 +506,10,0 +507,10,0 +509,10,0 +510,10,0 +511,11,1 +512,11,4 +513,11,6 +514,11,11 +515,11,17 +516,11,26 +517,11,32 +518,11,41 +519,11,47 +520,11,53 +521,11,59 +523,11,74 +524,11,77 +525,11,78 +526,11,80 +527,11,80 +528,11,80 +529,11,80 +530,11,80 +531,11,80 +532,11,80 +533,11,78 +534,11,76 +535,11,74 +536,11,70 +537,11,65 +538,11,61 +539,11,58 +540,11,53 +541,11,49 +542,11,44 +543,11,40 +544,11,35 +545,11,32 +546,11,28 +547,11,25 +549,11,14 +550,11,9 +551,11,7 +552,11,5 +553,11,3 +554,11,2 +555,10,0 +556,10,0 +557,10,0 +558,10,0 +559,10,0 +560,10,0 +561,10,0 +562,11,1 +563,11,5 +564,11,8 +565,11,14 +566,11,20 +568,11,32 +569,11,38 +570,11,41 +571,11,50 +572,11,56 +573,11,68 +574,11,74 +575,11,76 +576,11,79 +577,11,80 +578,11,80 +579,11,80 +580,11,80 +581,11,80 +582,11,80 +583,11,79 +584,11,78 +585,11,76 +586,11,75 +587,11,72 +588,11,67 +589,11,63 +590,11,60 +591,11,56 +592,11,53 +593,11,49 +594,11,44 +595,11,40 +596,11,37 +597,11,33 +599,11,23 +600,11,19 +601,11,18 +602,11,12 +603,11,7 +604,11,5 +605,11,3 +606,11,2 +607,10,0 +608,10,0 +609,10,0 +610,10,0 +611,10,0 +612,10,0 +613,10,0 +614,11,4 +615,11,6 +616,11,14 +617,11,20 +618,11,26 +619,11,32 +620,11,38 +621,11,44 +623,11,62 +624,11,68 +625,11,71 +626,11,76 +627,11,78 +628,11,80 +629,11,80 +630,11,80 +631,11,80 +632,11,80 +633,11,80 +634,11,80 +635,11,78 +636,11,76 +637,11,75 +638,11,73 +639,11,70 +640,11,65 +641,11,60 +642,11,56 +643,11,53 +644,11,49 +645,11,46 +646,11,42 +647,11,37 +648,11,33 +649,11,28 +650,11,25 +651,11,21 +652,11,18 +653,11,12 +654,11,7 +655,11,4 +656,11,2 +657,11,1 +658,10,0 +660,10,0 +661,10,0 +662,10,0 +663,10,0 +664,10,0 +665,10,0 +666,11,2 +667,11,5 +668,11,11 +669,11,17 +670,11,26 +671,11,32 +672,11,41 +673,11,47 +674,11,53 +675,11,62 +676,11,68 +677,11,74 +679,11,79 +680,11,80 +681,11,80 +682,11,80 +683,11,80 +684,11,80 +685,11,80 +686,11,80 +687,11,79 +688,11,77 +689,11,74 +690,11,72 +691,11,68 +692,11,65 +693,11,61 +694,11,54 +695,11,49 +696,11,46 +697,11,42 +698,11,39 +699,11,35 +701,11,26 +702,11,23 +703,11,21 +704,11,16 +705,11,12 +706,11,9 +707,11,5 +708,11,3 +709,11,1 +710,10,0 +711,10,0 +712,10,0 +713,10,0 +714,10,0 +715,10,0 +716,10,0 +717,10,0 +718,11,3 +719,11,5 +720,11,14 +721,11,23 +722,11,29 +723,11,35 +724,11,41 +725,11,47 +727,11,65 +728,11,71 +729,11,74 +730,11,76 +731,11,78 +732,11,80 +733,11,80 +734,11,80 +735,11,80 +736,11,80 +737,11,80 +738,11,79 +739,11,77 +740,11,76 +741,11,74 +742,11,70 +743,11,67 +744,11,61 +745,11,58 +746,11,53 +747,11,47 +748,11,44 +749,11,40 +750,11,37 +751,11,33 +752,11,30 +753,11,25 +754,11,21 +755,11,18 +756,11,12 +757,11,9 +758,11,5 +760,11,2 +761,10,0 +762,10,0 +763,10,0 +765,10,0 +766,10,0 +767,10,0 +768,10,0 +769,10,0 +770,11,3 +771,11,5 +772,11,11 +773,11,20 +774,11,26 +775,11,32 +776,11,41 +777,11,47 +778,11,53 +779,11,59 +781,11,75 +782,11,77 +783,11,78 +784,11,80 +785,11,80 +786,11,80 +787,11,80 +788,11,80 +789,11,80 +790,11,79 +791,11,77 +792,11,76 +793,11,73 +794,11,70 +795,11,63 +796,11,60 +797,11,54 +798,11,51 +799,11,46 +800,11,40 +801,11,37 +802,11,33 +804,11,26 +805,11,23 +806,11,21 +807,11,18 +808,11,14 +809,11,9 +810,11,5 +811,11,2 +812,10,0 +813,10,0 +814,10,0 +815,10,0 +816,10,0 +817,10,0 +818,10,0 +819,10,0 +820,11,2 +821,11,4 +823,11,17 +824,11,26 +825,11,29 +826,11,35 +827,11,41 +828,11,47 +829,11,53 +830,11,62 +831,11,68 +832,11,74 +833,11,77 +834,11,79 +835,11,80 +837,11,80 +838,11,80 +839,11,80 +840,11,80 +841,11,80 +842,11,79 +843,11,78 +844,11,76 +845,11,75 +846,11,73 +847,11,70 +848,11,67 +849,11,61 +850,11,58 +851,11,53 +852,11,47 +853,11,44 +854,11,40 +856,11,30 +857,11,26 +858,11,25 +859,11,19 +860,11,16 +861,11,11 +862,11,7 +863,11,5 +864,11,2 +865,10,0 +866,10,0 +867,10,0 +868,10,0 +870,10,0 +871,10,0 +872,10,0 +873,11,2 +874,11,4 +875,11,8 +876,11,14 +877,11,23 +878,11,32 +879,11,38 +880,11,44 +881,11,50 +882,11,59 +884,11,75 +885,11,77 +886,11,78 +887,11,80 +888,11,80 +889,11,80 +890,11,80 +891,11,80 +892,11,80 +893,11,79 +894,11,77 +895,11,76 +896,11,74 +897,11,72 +898,11,67 +899,11,63 +900,11,56 +901,11,53 +902,11,47 +903,11,42 +904,11,39 +905,11,33 +906,11,30 +907,11,26 +909,11,18 +910,11,14 +911,11,12 +912,11,7 +914,11,2 +915,10,0 +916,10,0 +917,10,0 +918,10,0 +919,10,0 +920,10,0 +921,10,0 +922,10,0 +923,11,2 +924,11,4 +926,11,11 +927,11,17 +928,11,20 +929,11,29 +930,11,35 +931,11,41 +933,11,56 +934,11,62 +935,11,65 +936,11,74 +937,11,76 +938,11,79 +939,11,80 +940,11,80 +941,11,80 +942,11,80 +943,11,80 +944,11,80 +945,11,79 +946,11,77 +947,11,76 +948,11,74 +949,11,70 +950,11,67 +951,11,61 +952,11,56 +953,11,51 +954,11,47 +955,11,44 +956,11,39 +957,11,35 +958,11,32 +960,11,25 +961,11,21 +962,11,19 +963,11,14 +965,11,5 +966,11,2 +967,11,2 +968,10,0 +969,10,0 +970,10,0 +971,10,0 +972,10,0 +973,10,0 +974,10,0 +975,11,1 +976,11,3 +977,11,5 +979,11,20 +980,11,29 +981,11,32 +982,11,38 +983,11,44 +984,11,53 +985,11,59 +986,11,68 +987,11,74 +988,11,78 +989,11,80 +990,11,80 +991,11,80 +992,11,80 +993,11,80 +994,11,80 +995,11,79 +996,11,77 +997,11,75 +999,11,67 +1000,11,63 +1001,11,61 +1002,11,56 +1004,11,46 +1005,11,40 +1006,11,39 +1007,11,35 +1008,11,32 +1009,11,26 +1010,11,23 +1011,11,16 +1012,11,12 +1013,11,9 +1014,11,5 +1015,11,3 +1016,11,2 +1018,10,0 +1019,10,0 +1020,10,0 +1021,10,0 +1022,10,0 +1023,10,0 +1024,10,0 +1025,11,4 +1026,11,6 +1027,11,11 +1028,11,20 +1029,11,26 +1030,11,35 +1031,11,44 +1032,11,53 +1033,11,59 +1034,11,65 +1035,11,71 +1036,11,76 +1037,11,78 +1038,11,80 +1039,11,80 +1040,11,80 +1041,11,80 +1043,11,80 +1044,11,79 +1045,11,79 +1046,11,77 +1047,11,76 +1048,11,73 +1049,11,70 +1050,11,67 +1051,11,61 +1052,11,58 +1053,11,54 +1055,11,47 +1056,11,42 +1057,11,40 +1058,11,37 +1059,11,33 +1060,11,28 +1061,11,25 +1062,11,21 +1063,11,16 +1064,11,12 +1065,11,9 +1066,11,5 +1067,11,2 +1068,11,1 +1069,10,0 +1070,10,0 +1071,10,0 +1072,10,0 +1073,10,0 +1074,10,0 +1076,11,2 +1077,11,4 +1078,11,5 +1079,11,8 +1080,11,14 +1081,11,23 +1082,11,29 +1083,11,38 +1084,11,47 +1085,11,53 +1086,11,59 +1087,11,65 +1088,11,71 +1089,11,75 +1090,11,78 +1091,11,80 +1092,11,80 +1093,11,80 +1094,11,80 +1095,11,80 +1096,11,80 +1097,11,79 +1098,11,78 +1099,11,76 +1100,11,74 +1101,11,72 +1102,11,67 +1103,11,63 +1104,11,60 +1105,11,56 +1106,11,51 +1107,11,47 +1108,11,42 +1109,11,39 +1110,11,35 +1111,11,30 +1112,11,26 +1113,11,23 +1114,11,19 +1115,11,14 +1116,11,11 +1117,11,7 +1118,11,4 +1120,10,0 +1121,10,0 +1122,10,0 +1123,10,0 +1124,10,0 +1125,10,0 +1126,10,0 +1127,10,0 +1128,11,1 +1129,11,3 +1130,11,5 +1131,11,8 +1132,11,14 +1134,11,32 +1135,11,38 +1136,11,41 +1137,11,50 +1138,11,56 +1139,11,65 +1140,11,71 +1141,11,75 +1142,11,77 +1144,11,80 +1145,11,80 +1146,11,80 +1147,11,80 +1148,11,80 +1149,11,80 +1150,11,79 +1151,11,77 +1152,11,76 +1153,11,74 +1154,11,70 +1155,11,67 +1156,11,63 +1158,11,53 +1159,11,47 +1160,11,46 +1161,11,42 +1162,11,39 +1163,11,33 +1164,11,30 +1165,11,26 +1166,11,23 +1167,11,19 +1168,11,12 +1169,11,9 +1170,11,5 +1171,11,3 +1172,11,2 +1173,10,0 +1174,10,0 +1175,10,0 +1176,10,0 +1177,10,0 +1178,10,0 +1179,10,0 +1180,11,1 +1181,11,3 +1182,11,8 +1183,11,14 +1184,11,26 +1185,11,35 +1186,11,41 +1187,11,50 +1188,11,56 +1189,11,62 +1190,11,68 +1191,11,74 +1192,11,76 +1193,11,78 +1194,11,80 +1195,11,80 +1196,11,80 +1198,11,80 +1199,11,80 +1200,11,80 +1201,11,79 +1202,11,77 +1203,11,75 +1204,11,73 +1205,11,70 +1206,11,65 +1207,11,61 +1208,11,58 +1209,11,54 +1210,11,49 +1211,11,44 +1212,11,40 +1213,11,37 +1214,11,33 +1215,11,30 +1216,11,26 +1217,11,6 +1218,9,0 +1219,9,0 +1220,9,0 +1221,7,0 +1222,7,0 +1223,7,0 +1224,7,0 +1225,7,0 +1226,8,0 +1227,6,0 +1228,6,0 +1229,6,0 +1230,6,0 +1231,6,0 +1232,5,0 +1233,5,0 +1234,5,0 +1235,5,0 +1236,5,0 +1237,5,0 +1238,5,0 +1239,5,0 +1240,6,0 +1241,6,0 +1242,6,0 +1243,6,0 +1244,6,0 +1245,6,0 +1246,6,0 +1247,6,0 +1248,6,0 +1249,6,0 +1250,6,0 +1251,6,0 +1252,6,0 +1253,6,0 +1254,6,0 +1255,6,0 +1256,6,0 +1257,5,0 +1258,5,0 +1259,5,0 +1260,5,0 +1261,5,0 +1262,5,0 +1263,5,0 +1264,5,0 +1265,5,0 +1266,5,0 +1267,5,0 +1268,5,0 +1269,5,0 +1270,5,0 +1271,5,0 +1272,5,0 +1273,5,0 +1274,5,0 +1275,5,0 +1276,5,0 +1277,5,0 +1278,5,0 +1279,5,0 +1280,5,0 +1281,5,0 +1282,5,0 +1283,5,0 +1284,5,0 +1285,5,0 +1286,5,0 +1287,5,0 +1288,5,0 +1289,5,0 +1290,5,0 +1291,5,0 +1292,5,0 +1293,5,0 +1294,5,0 +1295,5,0 +1296,5,0 +1297,5,0 +1298,5,0 +1299,5,0 +1300,5,0 +1301,5,0 +1302,5,0 +1303,5,0 +1304,5,0 +1305,5,0 +1306,5,0 +1307,5,0 +1308,5,0 +1309,5,0 +1310,5,0 +1311,5,0 +1312,5,0 +1313,5,0 +1314,5,0 +1315,5,0 +1316,5,0 +1317,5,0 +1318,5,0 +1319,5,0 +1320,5,0 +1321,5,0 +1322,5,0 +1323,5,0 +1324,5,0 +1325,5,0 +1326,5,0 +1327,5,0 +1328,5,0 +1329,5,0 +1330,5,0 +1331,5,0 +1332,5,0 +1333,5,0 +1334,5,0 +1335,5,0 +1336,5,0 +1337,5,0 +1338,5,0 +1339,5,0 +1340,5,0 +1341,5,0 +1342,5,0 +1343,5,0 +1344,5,0 +1345,5,0 +1346,5,0 +1347,5,0 +1348,5,0 +1349,5,0 +1350,5,0 +1351,5,0 +1352,5,0 +1353,5,0 +1354,5,0 +1355,5,0 +1356,5,0 +1357,5,0 +1358,5,0 +1359,5,0 +1360,5,0 +1361,5,0 +1362,5,0 +1363,5,0 +1364,5,0 +1365,5,0 +1366,5,0 +1367,5,0 +1368,5,0 +1369,5,0 +1370,5,0 +1371,5,0 +1372,5,0 +1373,5,0 +1374,5,0 +1375,5,0 +1376,5,0 +1377,5,0 +1378,5,0 +1379,5,0 +1380,5,0 +1381,5,0 +1382,5,0 +1383,5,0 +1384,4,0 +1385,4,0 +1386,4,0 +1387,5,0 +1388,5,0 +1389,5,0 +1390,5,0 +1391,5,0 +1392,5,0 +1393,5,0 +1394,5,0 +1395,5,0 +1396,5,0 +1397,5,0 +1398,5,0 +1399,5,0 +1400,5,0 +1401,5,0 +1402,5,0 +1403,5,0 +1404,5,0 +1405,5,0 +1406,5,0 +1407,5,0 +1408,5,0 +1409,5,0 +1410,5,0 +1411,5,0 +1412,5,0 +1413,5,0 +1414,5,0 +1415,5,0 +1416,5,0 +1417,5,0 +1418,5,0 +1419,5,0 +1420,5,0 +1421,5,0 +1422,5,0 +1423,5,0 +1424,5,0 +1425,5,0 +1426,5,0 +1427,5,0 +1428,5,0 +1429,5,0 +1430,5,0 +1431,5,0 +1432,5,0 +1433,5,0 +1434,5,0 +1435,5,0 +1436,5,0 +1437,5,0 +1438,5,0 +1439,5,0 +1440,5,0 +1441,5,0 +1442,5,0 +1443,5,0 +1444,5,0 +1445,5,0 +1446,5,0 +1447,5,0 +1448,5,0 +1449,5,0 +1450,5,0 +1451,5,0 +1452,5,0 +1453,5,0 +1454,5,0 +1455,5,0 +1456,5,0 +1457,5,0 +1458,5,0 +1459,5,0 +1460,5,0 +1461,5,0 +1462,5,0 +1463,5,0 +1464,5,0 +1465,5,0 +1466,5,0 +1467,5,0 +1468,5,0 +1469,5,0 +1470,5,0 +1471,5,0 +1472,5,0 +1473,5,0 +1474,5,0 +1475,5,0 +1476,5,0 +1477,5,0 +1478,5,0 +1479,5,0 +1480,5,0 +1481,5,0 +1482,5,0 +1483,5,0 +1484,5,0 +1485,5,0 +1486,5,0 +1487,5,0 +1488,5,0 +1489,5,0 +1490,5,0 +1491,5,0 +1492,5,0 +1493,5,0 +1494,5,0 +1495,5,0 +1496,5,0 +1497,5,0 +1498,5,0 +1499,5,0 +1500,5,0 +1501,5,0 +1502,5,0 +1503,5,0 +1504,5,0 +1505,5,0 +1506,5,0 +1507,5,0 +1508,5,0 +1509,5,0 +1510,4,0 +1511,4,0 +1512,4,0 +1513,4,0 +1514,3,0 +1515,3,0 +1516,3,0 +1517,3,0 +1518,3,0 +1519,4,0 +1520,4,0 +1521,4,0 +1522,4,0 +1523,4,0 +1524,4,0 +1525,4,0 +1526,4,0 +1527,4,0 +1528,4,0 +1529,4,0 +1530,4,0 +1531,4,0 +1532,4,0 +1533,4,0 +1534,4,0 +1535,4,0 +1536,4,0 +1537,4,0 +1538,4,0 +1539,4,0 +1540,4,0 +1541,4,0 +1542,4,0 +1543,4,0 +1544,4,0 +1545,4,0 +1546,4,0 +1547,4,0 +1548,4,0 +1549,4,0 +1550,4,0 +1551,4,0 +1552,4,0 +1553,4,0 +1554,4,0 +1555,4,0 +1556,4,0 +1557,4,0 +1558,4,0 +1559,4,0 +1560,4,0 +1561,4,0 +1562,4,0 +1563,4,0 +1564,4,0 +1565,4,0 +1566,4,0 +1567,4,0 +1568,4,0 +1569,4,0 +1570,4,0 +1571,4,0 +1572,4,0 +1573,4,0 +1574,4,0 +1575,4,0 +1576,4,0 +1577,4,0 +1578,4,0 +1579,4,0 +1580,4,0 +1581,4,0 +1582,4,0 +1583,4,0 +1584,4,0 +1585,4,0 +1586,4,0 +1587,4,0 +1588,4,0 +1589,4,0 +1590,4,0 +1591,4,0 +1592,4,0 +1593,4,0 +1594,4,0 +1595,4,0 +1596,4,0 +1597,4,0 +1598,4,0 +1599,4,0 +1600,4,0 +1601,4,0 +1602,4,0 +1603,4,0 +1604,4,0 +1605,4,0 +1606,4,0 +1607,4,0 +1608,4,0 +1609,4,0 +1610,4,0 +1611,4,0 +1612,4,0 +1613,4,0 +1614,4,0 +1615,4,0 +1616,4,0 +1617,4,0 +1618,4,0 +1619,4,0 +1620,4,0 +1621,4,0 +1622,4,0 +1623,4,0 +1624,4,0 +1625,4,0 +1626,4,0 +1627,4,0 +1628,4,0 +1629,4,0 +1630,4,0 +1631,4,0 +1632,4,0 +1633,4,0 +1634,4,0 +1635,4,0 +1636,4,0 +1637,4,0 +1638,4,0 +1639,4,0 +1640,4,0 +1641,4,0 +1642,4,0 +1643,4,0 +1644,4,0 +1645,4,0 +1646,4,0 +1647,4,0 +1648,4,0 +1649,4,0 +1650,4,0 +1651,4,0 +1652,4,0 +1653,4,0 +1654,4,0 +1655,4,0 +1656,4,0 +1657,4,0 +1658,4,0 +1659,4,0 +1660,4,0 +1661,4,0 +1662,4,0 +1663,4,0 +1664,4,0 +1665,4,0 +1666,4,0 +1667,4,0 +1668,4,0 +1669,4,0 +1670,4,0 +1671,4,0 +1672,4,0 +1673,4,0 +1674,4,0 +1675,4,0 +1676,4,0 +1677,4,0 +1678,4,0 +1679,4,0 +1680,4,0 +1681,4,0 +1682,4,0 +1683,4,0 +1684,4,0 +1685,4,0 +1686,4,0 +1687,4,0 +1688,4,0 +1689,4,0 +1690,4,0 +1692,4,0 +1693,4,0 +1694,4,0 +1695,4,0 +1696,4,0 +1697,4,0 +1698,4,0 +1699,4,0 +1700,4,0 +1701,4,0 +1702,4,0 +1703,4,0 +1704,4,0 +1705,4,0 +1706,4,0 +1707,4,0 +1708,4,0 +1709,4,0 +1710,4,0 +1711,4,0 +1712,4,0 +1713,4,0 +1714,4,0 +1715,4,0 +1716,4,0 +1717,4,0 +1719,4,0 +1720,4,0 +1721,4,0 +1722,4,0 +1723,4,0 +1724,4,0 +1725,4,0 +1726,4,0 +1727,4,0 +1728,4,0 +1729,4,0 +1730,4,0 +1731,4,0 +1732,4,0 +1734,4,0 +1735,4,0 +1736,4,0 +1737,4,0 +1738,4,0 +1739,4,0 +1740,4,0 +1741,4,0 +1742,4,0 +1743,4,0 +1744,4,0 +1745,4,0 +1746,4,0 +1747,4,0 +1748,4,0 +1749,4,0 +1750,4,0 +1751,4,0 +1752,4,0 +1753,4,0 +1754,4,0 +1756,4,0 +1757,4,0 +1758,4,0 +1759,4,0 +1760,4,0 +1761,4,0 +1762,4,0 +1763,4,0 +1764,4,0 +1765,4,0 +1766,4,0 +1767,4,0 +1768,4,0 +1769,4,0 +1770,4,0 +1771,4,0 +1772,4,0 +1773,4,0 +1774,4,0 +1775,4,0 +1776,4,0 +1777,4,0 +1778,4,0 +1779,4,0 +1780,4,0 +1781,4,0 +1782,4,0 +1783,4,0 +1784,4,0 +1785,4,0 +1786,4,0 +1787,4,0 +1788,4,0 +1789,4,0 +1790,4,0 +1791,4,0 +1792,4,0 +1793,4,0 +1794,4,0 +1795,4,0 +1796,4,0 +1797,4,0 +1799,4,0 +1800,4,0 +1801,4,0 +1802,4,0 +1803,4,0 +1804,4,0 +1805,4,0 +1807,4,0 +1808,4,0 +1809,4,0 +1810,4,0 +1812,4,0 +1813,4,0 +1814,4,0 +1815,4,0 +1816,4,0 +1817,4,0 +1818,4,0 +1819,4,0 +1820,4,0 +1821,4,0 +1822,4,0 +1823,4,0 +1824,4,0 +1825,4,0 +1826,4,0 +1827,4,0 +1828,4,0 +1829,4,0 +1830,4,0 +1832,4,0 +1833,4,0 +1834,4,0 +1835,4,0 +1836,4,0 +1837,4,0 +1838,4,0 +1839,4,0 +1840,4,0 +1841,4,0 +1842,4,0 +1843,4,0 +1844,4,0 +1845,4,0 +1846,4,0 +1847,4,0 +1848,4,0 +1849,4,0 +1850,4,0 +1851,4,0 +1852,4,0 +1853,4,0 +1854,4,0 +1855,4,0 +1856,4,0 +1857,4,0 +1858,4,0 +1859,4,0 +1860,4,0 +1861,4,0 +1862,4,0 +1864,4,0 +1865,4,0 +1866,4,0 +1867,4,0 +1868,4,0 +1869,4,0 +1870,4,0 +1871,4,0 +1872,4,0 +1873,4,0 +1874,4,0 +1875,4,0 +1876,4,0 +1877,4,0 +1878,4,0 +1879,4,0 +1880,4,0 +1881,4,0 +1882,4,0 +1883,4,0 +1884,4,0 +1885,4,0 +1886,4,0 +1887,4,0 +1888,4,0 +1889,4,0 +1890,4,0 +1891,4,0 +1892,4,0 +1893,4,0 +1894,4,0 +1895,4,0 +1896,4,0 +1897,4,0 +1898,4,0 +1899,4,0 +1900,4,0 +1901,4,0 +1902,4,0 +1903,4,0 +1904,4,0 +1905,4,0 +1906,4,0 +1907,4,0 +1908,4,0 +1909,4,0 +1911,4,0 +1912,4,0 +1913,4,0 +1914,4,0 +1915,4,0 +1916,4,0 +1917,4,0 +1918,4,0 +1919,4,0 +1920,4,0 +1921,4,0 +1922,4,0 +1923,4,0 +1924,4,0 +1925,4,0 +1926,4,0 +1928,4,0 +1929,4,0 +1930,4,0 +1931,4,0 +1932,4,0 +1933,4,0 +1934,4,0 +1935,4,0 +1936,4,0 +1937,4,0 +1938,4,0 +1939,4,0 +1940,4,0 +1941,4,0 +1942,4,0 +1943,4,0 +1944,4,0 +1945,4,0 +1946,4,0 +1947,4,0 +1948,4,0 +1949,4,0 +1950,4,0 +1951,4,0 +1952,4,0 +1954,4,0 +1955,4,0 +1956,4,0 +1957,4,0 +1958,4,0 +1959,4,0 +1960,4,0 +1961,4,0 +1962,4,0 +1963,4,0 +1964,4,0 +1965,4,0 +1966,4,0 +1967,4,0 +1968,4,0 +1969,4,0 +1970,4,0 +1971,4,0 +1972,4,0 +1973,4,0 +1974,4,0 +1975,4,0 +1976,4,0 +1977,4,0 +1978,4,0 +1979,4,0 +1980,4,0 +1981,4,0 +1982,4,0 +1983,4,0 +1984,4,0 +1985,4,0 +1986,4,0 +1987,4,0 +1989,4,0 +1990,4,0 +1991,4,0 +1992,4,0 +1993,4,0 +1994,4,0 +1995,4,0 +1996,4,0 +1997,4,0 +1998,4,0 +1999,4,0 +2000,4,0 +2001,4,0 +2002,4,0 +2003,4,0 +2004,4,0 +2005,4,0 +2006,4,0 +2008,4,0 +2009,4,0 +2010,4,0 +2011,4,0 +2012,4,0 +2013,4,0 +2014,4,0 +2015,4,0 +2016,4,0 +2017,4,0 +2018,4,0 +2020,4,0 +2021,4,0 +2022,4,0 +2023,4,0 +2024,4,0 +2025,4,0 +2026,4,0 +2027,4,0 +2028,4,0 +2029,4,0 +2030,4,0 +2031,4,0 +2032,4,0 +2033,4,0 +2034,4,0 +2035,4,0 +2036,4,0 +2037,4,0 +2038,4,0 +2039,4,0 +2040,4,0 +2041,4,0 +2042,4,0 +2043,4,0 +2044,4,0 +2045,4,0 +2046,4,0 +2047,4,0 +2048,4,0 +2049,4,0 +2050,4,0 +2051,4,0 +2052,4,0 +2053,4,0 +2054,4,0 +2055,4,0 +2056,4,0 +2057,4,0 +2058,4,0 +2059,4,0 +2060,4,0 +2061,4,0 +2062,4,0 +2063,4,0 +2064,4,0 +2065,4,0 +2066,4,0 +2067,4,0 +2068,4,0 +2069,4,0 +2070,4,0 +2071,4,0 +2072,4,0 +2073,4,0 +2074,4,0 +2075,4,0 +2076,4,0 +2077,4,0 +2078,4,0 +2079,4,0 +2080,4,0 +2081,4,0 +2082,4,0 +2083,4,0 +2084,4,0 +2085,4,0 +2086,4,0 +2087,4,0 +2088,4,0 +2089,4,0 +2090,4,0 +2091,4,0 +2092,4,0 +2093,4,0 +2094,4,0 +2095,4,0 +2096,4,0 +2097,4,0 +2098,4,0 +2100,4,0 +2101,4,0 +2102,4,0 +2103,4,0 +2104,4,0 +2105,4,0 +2106,4,0 +2107,4,0 +2108,4,0 +2109,4,0 +2110,4,0 +2111,4,0 +2112,4,0 +2113,4,0 +2114,4,0 +2115,4,0 +2116,4,0 +2117,4,0 +2118,4,0 +2119,4,0 +2120,4,0 +2121,4,0 +2122,4,0 +2123,4,0 +2124,4,0 +2125,4,0 +2126,4,0 +2127,4,0 +2128,4,0 +2129,4,0 +2130,4,0 +2131,4,0 +2132,4,0 +2133,4,0 +2134,4,0 +2135,4,0 +2136,4,0 +2137,4,0 +2138,4,0 +2139,4,0 +2140,4,0 +2141,4,0 +2142,4,0 +2143,4,0 +2144,4,0 +2145,4,0 +2146,4,0 +2147,4,0 +2148,4,0 +2149,4,0 +2150,4,0 +2151,4,0 +2152,4,0 +2153,4,0 +2154,4,0 +2155,4,0 +2156,4,0 +2157,4,0 +2158,4,0 +2159,4,0 +2160,4,0 +2161,4,0 +2162,4,0 +2163,4,0 +2164,4,0 +2165,4,0 +2166,4,0 +2167,4,0 +2168,4,0 +2169,4,0 +2170,4,0 +2172,4,0 +2173,4,0 +2174,4,0 +2175,4,0 +2176,4,0 +2177,4,0 +2178,4,0 +2179,4,0 +2180,4,0 +2181,4,0 +2182,4,0 +2183,4,0 +2184,4,0 +2185,4,0 +2186,4,0 +2187,4,0 +2188,4,0 +2189,4,0 +2191,4,0 +2192,4,0 +2193,4,0 +2194,4,0 +2195,4,0 +2196,4,0 +2197,4,0 +2198,4,0 +2199,4,0 +2200,4,0 +2201,4,0 +2202,4,0 +2203,4,0 +2204,4,0 +2205,4,0 +2206,4,0 +2207,4,0 +2208,4,0 +2210,4,0 +2211,4,0 +2212,4,0 +2213,4,0 +2214,4,0 +2215,4,0 +2216,4,0 +2218,4,0 +2219,4,0 +2220,4,0 +2221,4,0 +2222,4,0 +2223,4,0 +2224,4,0 +2225,4,0 +2226,4,0 +2227,4,0 +2228,4,0 +2230,4,0 +2231,4,0 +2232,4,0 +2233,4,0 +2234,4,0 +2235,4,0 +2236,4,0 +2237,4,0 +2238,4,0 +2240,4,0 +2241,4,0 +2242,4,0 +2243,4,0 +2244,4,0 +2245,4,0 +2246,4,0 +2247,4,0 +2248,4,0 +2249,4,0 +2250,4,0 +2252,4,0 +2253,4,0 +2254,4,0 +2255,4,0 +2256,4,0 +2257,4,0 +2258,4,0 +2259,4,0 +2260,4,0 +2261,4,0 +2262,4,0 +2263,4,0 +2264,4,0 +2265,4,0 +2266,4,0 +2267,4,0 +2268,4,0 +2269,4,0 +2270,4,0 +2271,4,0 +2272,4,0 +2273,4,0 +2274,4,0 +2275,4,0 +2276,4,0 +2278,4,0 +2279,4,0 +2280,4,0 +2281,4,0 +2282,4,0 +2283,4,0 +2284,4,0 +2285,4,0 +2286,4,0 +2287,4,0 +2288,4,0 +2289,4,0 +2290,4,0 +2291,4,0 +2292,4,0 +2293,4,0 +2295,4,0 +2296,4,0 +2297,4,0 +2298,4,0 +2299,4,0 +2300,4,0 +2301,4,0 +2302,4,0 +2303,4,0 +2304,4,0 +2305,4,0 +2306,4,0 +2307,4,0 +2308,4,0 +2309,4,0 +2310,4,0 +2311,4,0 +2312,4,0 +2313,4,0 +2314,4,0 +2315,4,0 +2316,4,0 +2317,4,0 +2318,4,0 +2319,4,0 +2320,4,0 +2321,4,0 +2322,4,0 +2323,4,0 +2324,4,0 +2325,4,0 +2326,4,0 +2328,4,0 +2329,4,0 +2330,4,0 +2331,4,0 +2332,4,0 +2333,4,0 +2334,4,0 +2335,4,0 +2336,4,0 +2337,4,0 +2338,4,0 +2339,4,0 +2340,4,0 +2341,4,0 +2342,4,0 +2343,4,0 +2344,4,0 +2345,4,0 +2346,4,0 +2347,4,0 +2348,4,0 +2349,4,0 +2350,4,0 +2351,4,0 +2352,4,0 +2353,4,0 +2354,4,0 +2355,4,0 +2356,4,0 +2357,4,0 +2358,4,0 +2359,4,0 +2360,4,0 +2361,4,0 +2362,4,0 +2363,4,0 +2365,4,0 +2366,4,0 +2367,4,0 +2368,4,0 +2369,4,0 +2370,4,0 +2371,4,0 +2372,4,0 +2373,4,0 +2374,4,0 +2375,4,0 +2376,4,0 +2377,4,0 +2378,4,0 +2379,4,0 +2380,4,0 +2381,4,0 +2382,4,0 +2383,4,0 +2384,4,0 +2385,4,0 +2386,4,0 +2387,4,0 +2388,4,0 +2389,4,0 +2390,4,0 +2391,4,0 +2392,4,0 +2393,4,0 +2394,4,0 +2395,4,0 +2396,4,0 +2397,4,0 +2398,4,0 +2399,4,0 +2400,4,0 +2401,4,0 +2402,4,0 +2403,4,0 +2404,4,0 +2405,4,0 +2406,4,0 +2407,4,0 +2408,4,0 +2409,4,0 +2410,4,0 +2411,4,0 +2412,4,0 +2413,4,0 +2414,4,0 +2415,4,0 +2416,4,0 +2417,4,0 +2418,4,0 +2419,4,0 +2420,4,0 +2421,4,0 +2422,4,0 +2423,4,0 +2424,4,0 +2425,4,0 +2426,4,0 +2427,4,0 +2428,4,0 +2429,4,0 +2430,4,0 +2431,4,0 +2432,4,0 +2433,4,0 +2434,4,0 +2435,4,0 +2436,4,0 +2437,4,0 +2438,4,0 +2439,4,0 +2440,4,0 +2441,4,0 +2442,4,0 +2443,4,0 +2444,4,0 +2445,4,0 +2446,4,0 +2447,4,0 +2448,4,0 +2449,4,0 +2450,4,0 +2451,4,0 +2452,4,0 +2453,4,0 +2454,4,0 +2455,4,0 +2456,4,0 +2457,4,0 +2458,4,0 +2459,4,0 +2460,4,0 +2461,4,0 +2462,4,0 +2463,4,0 +2465,4,0 +2466,4,0 +2467,4,0 +2468,4,0 +2469,4,0 +2470,4,0 +2471,4,0 +2472,4,0 +2473,4,0 +2474,4,0 +2475,4,0 +2476,4,0 +2477,4,0 +2478,4,0 +2479,4,0 +2480,4,0 +2481,4,0 +2482,4,0 +2483,4,0 +2484,4,0 +2485,4,0 +2486,4,0 +2487,4,0 +2488,4,0 +2489,4,0 +2490,4,0 +2491,4,0 +2492,4,0 +2493,4,0 +2494,4,0 +2495,4,0 +2496,4,0 +2497,4,0 +2498,4,0 +2499,4,0 +2500,4,0 +2501,4,0 +2502,4,0 +2503,4,0 +2504,4,0 +2505,4,0 +2506,4,0 +2507,4,0 +2508,4,0 +2509,4,0 +2510,4,0 +2512,4,0 +2513,4,0 +2514,4,0 +2515,4,0 +2516,4,0 +2517,4,0 +2518,4,0 +2519,4,0 +2520,4,0 +2521,4,0 +2522,4,0 +2523,4,0 +2524,4,0 +2525,4,0 +2526,4,0 +2527,4,0 +2528,4,0 +2529,4,0 +2530,4,0 +2531,4,0 +2532,4,0 +2533,4,0 +2534,4,0 +2535,4,0 +2536,4,0 +2537,4,0 +2539,4,0 +2540,4,0 +2541,4,0 +2542,4,0 +2543,4,0 +2544,4,0 +2545,4,0 +2547,4,0 +2548,4,0 +2549,4,0 +2550,4,0 +2552,4,0 +2553,4,0 +2554,4,0 +2555,4,0 +2556,4,0 +2557,4,0 +2558,4,0 +2559,4,0 +2561,4,0 +2562,4,0 +2563,4,0 +2564,4,0 +2565,4,0 +2566,4,0 +2567,4,0 +2568,4,0 +2569,4,0 +2570,4,0 +2571,4,0 +2572,4,0 +2573,4,0 +2574,4,0 +2575,4,0 +2576,4,0 +2577,4,0 +2578,4,0 +2579,4,0 +2580,4,0 +2581,4,0 +2582,4,0 +2583,4,0 +2584,4,0 +2585,4,0 +2586,4,0 +2587,4,0 +2588,4,0 +2589,4,0 +2590,4,0 +2591,4,0 +2592,4,0 +2593,4,0 +2594,4,0 +2596,4,0 +2597,4,0 +2598,4,0 +2599,4,0 +2600,4,0 +2601,4,0 +2602,4,0 +2603,4,0 +2604,4,0 +2605,4,0 +2606,4,0 +2607,4,0 +2608,4,0 +2609,4,0 +2610,4,0 +2611,4,0 +2612,4,0 +2613,4,0 +2614,4,0 +2615,4,0 +2616,4,0 +2617,4,0 +2618,4,0 +2619,4,0 +2620,4,0 +2621,4,0 +2622,4,0 +2623,4,0 +2624,4,0 +2625,4,0 +2626,4,0 +2627,4,0 +2628,4,0 +2629,4,0 +2630,4,0 +2631,4,0 +2632,4,0 +2633,4,0 +2634,4,0 +2635,4,0 +2636,4,0 +2637,4,0 +2638,4,0 +2639,4,0 +2640,4,0 +2641,4,0 +2642,4,0 +2643,4,0 +2644,4,0 +2645,4,0 +2646,4,0 +2647,4,0 +2648,4,0 +2649,4,0 +2650,4,0 +2651,4,0 +2652,4,0 +2653,4,0 +2655,4,0 +2656,4,0 +2657,4,0 +2658,4,0 +2659,4,0 +2660,4,0 +2661,4,0 +2662,4,0 +2663,4,0 +2664,4,0 +2665,4,0 +2666,4,0 +2667,4,0 +2668,4,0 +2669,4,0 +2670,4,0 +2671,4,0 +2672,4,0 +2673,4,0 +2674,4,0 +2675,4,0 +2676,4,0 +2677,4,0 +2679,4,0 +2680,4,0 +2681,4,0 +2682,4,0 +2683,4,0 +2684,4,0 +2685,4,0 +2686,4,0 +2687,4,0 +2688,4,0 +2689,4,0 +2690,4,0 +2691,4,0 +2692,4,0 +2693,4,0 +2694,4,0 +2695,4,0 +2696,4,0 +2697,4,0 +2698,4,0 +2699,4,0 +2700,4,0 +2701,4,0 +2702,4,0 +2703,4,0 +2705,4,0 +2706,4,0 +2707,4,0 +2708,4,0 +2709,4,0 +2710,4,0 +2711,4,0 +2712,4,0 +2713,4,0 +2714,4,0 +2715,4,0 +2716,4,0 +2717,4,0 +2718,4,0 +2720,4,0 +2721,4,0 +2722,4,0 +2723,4,0 +2724,4,0 +2725,4,0 +2726,4,0 +2727,4,0 +2728,4,0 +2729,4,0 +2730,4,0 +2731,4,0 +2732,4,0 +2733,4,0 +2734,4,0 +2735,4,0 +2736,4,0 +2737,4,0 +2738,4,0 +2739,4,0 +2740,4,0 +2741,4,0 +2742,4,0 +2743,4,0 +2744,4,0 +2745,4,0 +2746,4,0 +2747,4,0 +2748,4,0 +2749,4,0 +2750,4,0 +2751,4,0 +2752,4,0 +2753,4,0 +2754,4,0 +2755,4,0 +2756,4,0 +2757,4,0 +2758,4,0 +2759,4,0 +2760,4,0 +2761,4,0 +2762,4,0 +2763,4,0 +2764,4,0 +2765,4,0 +2766,4,0 +2767,4,0 +2768,4,0 +2769,4,0 +2770,4,0 +2771,4,0 +2772,4,0 +2773,4,0 +2774,4,0 +2775,4,0 +2776,4,0 +2777,4,0 +2778,4,0 +2779,4,0 +2780,4,0 +2781,4,0 +2782,4,0 +2783,4,0 +2784,4,0 +2785,4,0 +2786,4,0 +2787,4,0 +2788,4,0 +2789,4,0 +2790,4,0 +2791,4,0 +2792,4,0 +2793,4,0 +2794,4,0 +2795,4,0 +2796,4,0 +2797,4,0 +2798,4,0 +2799,4,0 +2800,4,0 +2801,4,0 +2802,4,0 +2803,4,0 +2804,4,0 +2805,4,0 +2806,4,0 +2807,4,0 +2808,4,0 +2809,4,0 +2810,4,0 +2811,4,0 +2812,4,0 +2813,4,0 +2814,4,0 +2815,4,0 +2816,4,0 +2817,4,0 +2818,4,0 +2819,4,0 +2820,4,0 +2821,4,0 +2822,4,0 +2823,4,0 +2824,4,0 +2825,4,0 +2826,4,0 +2827,4,0 +2828,4,0 +2829,4,0 +2830,4,0 +2831,4,0 +2832,4,0 +2833,4,0 +2834,4,0 +2835,4,0 +2836,4,0 +2837,4,0 +2838,4,0 +2839,4,0 +2840,4,0 +2841,4,0 +2842,4,0 +2843,4,0 +2844,4,0 +2845,4,0 +2846,4,0 +2847,4,0 +2848,4,0 +2850,4,0 +2851,4,0 +2852,4,0 +2853,4,0 +2854,4,0 +2855,4,0 +2856,4,0 +2857,4,0 +2858,4,0 +2859,4,0 +2860,4,0 +2862,4,0 +2863,4,0 +2864,4,0 +2865,4,0 +2866,4,0 +2867,4,0 +2868,4,0 +2869,4,0 +2870,4,0 +2872,4,0 +2873,4,0 +2874,4,0 +2875,4,0 +2876,4,0 +2877,4,0 +2878,4,0 +2879,4,0 +2880,4,0 +2881,4,0 +2882,4,0 +2883,4,0 +2884,4,0 +2885,4,0 +2886,4,0 +2887,4,0 +2888,4,0 +2889,4,0 +2890,4,0 +2891,4,0 +2892,4,0 +2893,4,0 +2894,4,0 +2895,4,0 +2896,4,0 +2897,4,0 +2898,4,0 +2899,4,0 +2900,4,0 +2901,4,0 +2902,4,0 +2903,4,0 +2904,4,0 +2905,4,0 +2906,4,0 +2907,4,0 +2908,4,0 +2909,4,0 +2910,4,0 +2911,4,0 +2912,4,0 +2913,4,0 +2914,4,0 +2915,4,0 +2916,4,0 +2917,4,0 +2918,4,0 +2919,4,0 +2920,4,0 +2921,4,0 +2922,4,0 +2923,4,0 +2924,4,0 +2925,4,0 +2926,4,0 +2927,4,0 +2928,4,0 +2929,4,0 +2930,4,0 +2931,4,0 +2932,4,0 +2933,4,0 +2934,4,0 +2935,4,0 +2936,4,0 +2937,4,0 +2938,4,0 +2939,4,0 +2940,4,0 +2941,4,0 +2942,4,0 +2943,4,0 +2944,4,0 +2945,4,0 +2946,4,0 +2947,4,0 +2948,4,0 +2949,4,0 +2950,4,0 +2951,4,0 +2952,4,0 +2953,4,0 +2955,4,0 +2956,4,0 +2957,4,0 +2958,4,0 +2959,4,0 +2960,4,0 +2961,4,0 +2962,4,0 +2963,4,0 +2964,4,0 +2965,4,0 +2966,4,0 +2967,4,0 +2968,4,0 +2969,4,0 +2970,4,0 +2972,4,0 +2973,4,0 +2974,4,0 +2975,4,0 +2976,4,0 +2977,4,0 +2978,4,0 +2979,4,0 +2980,4,0 +2981,4,0 +2982,4,0 +2983,4,0 +2984,4,0 +2985,4,0 +2986,4,0 +2987,4,0 +2988,4,0 +2989,4,0 +2990,4,0 +2991,4,0 +2992,4,0 +2993,4,0 +2994,4,0 +2995,4,0 +2997,4,0 +2998,4,0 +2999,4,0 +3000,4,0 +3001,4,0 +3002,4,0 +3004,4,0 +3005,4,0 +3006,4,0 +3007,4,0 +3008,4,0 +3009,4,0 +3011,4,0 +3012,4,0 +3013,4,0 +3014,4,0 +3015,4,0 +3016,4,0 +3017,4,0 +3018,4,0 +3019,4,0 +3020,4,0 +3021,4,0 +3022,4,0 +3023,4,0 +3024,4,0 +3025,4,0 +3026,4,0 +3027,4,0 +3028,4,0 +3029,4,0 +3030,4,0 +3031,4,0 +3032,4,0 +3033,4,0 +3034,4,0 +3035,4,0 +3036,4,0 +3037,4,0 +3038,4,0 +3039,4,0 +3040,4,0 +3041,4,0 +3042,4,0 +3043,4,0 +3044,4,0 +3045,4,0 +3046,4,0 +3047,4,0 +3049,4,0 +3050,4,0 +3051,4,0 +3052,4,0 +3053,4,0 +3054,4,0 +3055,4,0 +3056,4,0 +3057,4,0 +3058,4,0 +3059,4,0 +3060,4,0 +3061,4,0 +3063,4,0 +3064,4,0 +3065,4,0 +3066,4,0 +3067,4,0 +3068,4,0 +3069,4,0 +3070,4,0 +3071,4,0 +3072,4,0 +3073,4,0 +3074,4,0 +3075,4,0 +3076,4,0 +3077,4,0 +3078,4,0 +3079,4,0 +3080,4,0 +3081,4,0 +3082,4,0 +3083,4,0 +3084,4,0 +3085,4,0 +3086,4,0 +3087,4,0 +3088,4,0 +3089,4,0 +3090,4,0 +3091,4,0 +3092,4,0 +3093,4,0 +3094,4,0 +3095,4,0 +3096,4,0 +3097,4,0 +3098,4,0 +3099,4,0 +3100,4,0 +3101,4,0 +3102,4,0 +3103,4,0 +3104,4,0 +3105,4,0 +3106,4,0 +3107,4,0 +3108,4,0 +3109,4,0 +3110,4,0 +3111,4,0 +3112,4,0 +3113,4,0 +3114,4,0 +3115,4,0 +3116,4,0 +3117,4,0 +3118,4,0 +3120,4,0 +3121,4,0 +3122,4,0 +3123,4,0 +3124,4,0 +3125,4,0 +3126,4,0 +3127,4,0 +3128,4,0 +3129,4,0 +3130,4,0 +3131,4,0 +3132,4,0 +3133,4,0 +3134,4,0 +3135,4,0 +3136,4,0 +3137,4,0 +3138,4,0 +3139,4,0 +3140,4,0 +3141,4,0 +3142,4,0 +3143,4,0 +3144,4,0 +3145,4,0 +3146,4,0 +3147,4,0 +3148,4,0 +3149,4,0 +3150,4,0 +3151,4,0 +3152,4,0 +3153,4,0 +3154,4,0 +3155,4,0 +3156,4,0 +3157,4,0 +3158,4,0 +3159,4,0 +3160,4,0 +3162,4,0 +3163,4,0 +3164,4,0 +3165,4,0 +3166,4,0 +3167,4,0 +3168,4,0 +3169,4,0 +3170,4,0 +3172,4,0 +3173,4,0 +3174,4,0 +3175,4,0 +3176,4,0 +3177,4,0 +3178,4,0 +3179,4,0 +3180,4,0 +3181,4,0 +3182,4,0 +3183,4,0 +3184,4,0 +3185,4,0 +3186,4,0 +3187,4,0 +3188,4,0 +3189,4,0 +3190,4,0 +3191,4,0 +3192,4,0 +3193,4,0 +3194,4,0 +3195,4,0 +3196,4,0 +3197,4,0 +3198,4,0 +3199,4,0 +3200,4,0 +3201,4,0 +3202,4,0 +3203,4,0 +3204,4,0 +3205,4,0 +3206,4,0 +3207,4,0 +3208,4,0 +3209,4,0 +3210,4,0 +3211,4,0 +3212,4,0 +3213,4,0 +3214,4,0 +3215,4,0 +3216,4,0 +3217,4,0 +3218,4,0 +3219,4,0 +3220,4,0 +3221,4,0 +3222,4,0 +3223,4,0 +3224,4,0 +3225,4,0 +3226,4,0 +3227,4,0 +3228,4,0 +3229,4,0 +3230,4,0 +3231,4,0 +3232,4,0 +3233,4,0 +3234,4,0 +3235,4,0 +3236,4,0 +3237,4,0 +3238,4,0 +3239,4,0 +3240,4,0 +3241,4,0 +3242,4,0 +3244,4,0 +3245,4,0 +3246,4,0 +3247,4,0 +3248,4,0 +3249,4,0 +3250,4,0 +3251,4,0 +3252,4,0 +3253,4,0 +3254,4,0 +3255,4,0 +3256,4,0 +3257,4,0 +3258,4,0 +3259,4,0 +3260,4,0 +3261,4,0 +3262,4,0 +3263,4,0 +3264,4,0 +3265,4,0 +3266,4,0 +3267,4,0 +3268,4,0 +3269,4,0 +3270,4,0 +3271,4,0 +3272,4,0 +3273,4,0 +3274,4,0 +3275,4,0 +3276,4,0 +3277,4,0 +3278,4,0 +3279,4,0 +3280,4,0 +3281,4,0 +3282,4,0 +3283,4,0 +3284,4,0 +3285,4,0 +3286,4,0 +3287,4,0 +3288,4,0 +3289,4,0 +3290,4,0 +3291,4,0 +3293,4,0 +3294,4,0 +3295,4,0 +3296,4,0 +3297,4,0 +3298,4,0 +3299,4,0 +3300,4,0 +3301,4,0 +3302,4,0 +3303,4,0 +3304,4,0 +3305,4,0 +3306,4,0 +3308,4,0 +3309,4,0 +3310,4,0 +3311,4,0 +3312,4,0 +3313,4,0 +3314,4,0 +3315,4,0 +3316,4,0 +3317,1,0 diff --git a/docs/re/structures/ui-record-loop-length.md b/docs/re/structures/ui-record-loop-length.md index 001bab7b..2aa35aa0 100644 --- a/docs/re/structures/ui-record-loop-length.md +++ b/docs/re/structures/ui-record-loop-length.md @@ -73,6 +73,23 @@ This is a genuine test rather than a fit: the ring and the plate are different elements in different bundles, measured in separate runs, and the only thing tying them together is that both declare a 120-unit cycle. +## ✅ Measured in the running game + +The glow's quad carries a per-vertex colour whose **alpha is the element's fade +alpha**, so the ramp can be read straight out of the guest's draw stream +([`ui-title-buildin-measured.md`](ui-title-buildin-measured.md)): + +* **observed alpha range 0 … 80, against a decoded peak of 80** — exact, unfitted; +* **period 51.158 presented frames** over 20 consecutive cycle starts; +* the draw is **omitted entirely** while the glow is dark, which is the 11↔10 + draw alternation visible in the settled title; +* fitting the decoded ramp gives RMS 13.16 alpha levels against **38.18 for the + same ramp reversed** — the asymmetry is real and in the decoded direction. + +This does not re-measure the period in seconds (the run's frame rate was not +recorded), so the falsification below stands on the corpus's wall-clock timings +rather than on this run. + ## What this replaces * 🔴 **105 is wrong** and the port should stop shipping it. The number is **120**, diff --git a/docs/re/structures/ui-settle-time.md b/docs/re/structures/ui-settle-time.md index 77aba8b0..4ab839e7 100644 --- a/docs/re/structures/ui-settle-time.md +++ b/docs/re/structures/ui-settle-time.md @@ -26,6 +26,21 @@ vocabulary the file has. `UiBuild::settle_window()` returns the interval, whose width is how much confidence the midpoint deserves. +🔴 **Gather the times from the TOP-LEVEL elements only — not from nested leaf +records.** The port raised this after reproducing `[160, 236]` from its own +export, and it is worth stating because the implementation reads correctly either +way while only one is right. Including `GP_TITLE` build 4's `ptloop` leaves, whose +cycles run to 600 and 720, gives **`[269, 540]`** instead — a "settled instant" +that lies *past the end of every top-level element's timeline*, i.e. after the +screen has exited. Verified here: top-level `[160, 236]` width 76, with leaves +`[269, 540]` width 271. A leaf loops on its own clock and says nothing about when +the screen stops changing. + +✅ **Confirmed against the running game.** The mechanism this page decodes — five +transient flashes that fire and vanish — is observed in the guest's own draw +stream, with `ptlogo_back2eff1` drawn in exactly two frames at t = 54.0 against a +decoded peak of t54–56: [`ui-title-buildin-measured.md`](ui-title-buildin-measured.md). + ## The case that found it `GP_TITLE` build 4. Seven elements share the light-arc band behind the logo: diff --git a/docs/re/structures/ui-title-buildin-measured.md b/docs/re/structures/ui-title-buildin-measured.md new file mode 100644 index 00000000..82d55f17 --- /dev/null +++ b/docs/re/structures/ui-title-buildin-measured.md @@ -0,0 +1,134 @@ +# The title's build-in, measured in the guest's own draw stream + +**Classification: measured.** Xenia Canary, `ui_draw_capture.sh ARM=early +FRAMES=9000`, 2026-08-29. Evidence: +[`title-glow-alpha-per-frame.csv`](../data/title-glow-alpha-per-frame.csv) — the +per-frame series the numbers below come from. (The 7 MB raw draw log is a scratch +capture and is not committed.) + +## What this tests + +[`ui-settle-time.md`](ui-settle-time.md) decodes the title's light arc as **five +staggered two-frame flashes** (`ptlogo_back2eff1`…`eff5`) that fire around t54–66 +and are gone by t110, with `ptlogo_back2eff` and `ptlogo_back2` holding for the +rest of the screen. That decode was confirmed only against a **settled** frame: +posing at the settle time matched the console, which shows the *end state* is +right and says nothing about whether the flashes ever happen. + +[`ui-record-loop-length.md`](ui-record-loop-length.md) decodes the `PRESS Ⓐ` +glow as a **120-unit cycle** containing a 105-unit ramp that peaks at **alpha 80**. + +Both are predictions about the running game. This is the run. + +## 🔴 First, the trap that nearly produced a false negative + +The obvious instrument — match a bound texture's dimensions to a decoded sprite's +— **does not work, and fails silently in both directions.** + +A first pass reported that none of the five flashes are ever drawn. It also +reported `ptbase2` (640×360) and `pteff04` (1280×720) drawn during frames 75–105. +Both were wrong. Those frames are the **intro movie**: four full-screen quads per +frame sampling a pair of 640×360 planes and a 1280×720 target — a video decode +whose plane sizes happen to collide with two sprite sizes. And the flashes were +missing because the title's sprites **sample large shared texture pages**, so the +bound texture identifies a page, not an element. + +Canary's own capture code says so in a comment, and the corpus had already +recorded that the settled title's textures are all 1280×768. **The identity of a +2D draw here is its vertex geometry, not its texture.** Re-run against the quad +rects, everything appears. + +## The structure of the title in the draw stream + +| frames | draws/frame | what | +|---|---|---| +| 2–105 | 3–5 | splashes, then the intro movie | +| **107** | **27** | 🔴 the title **composited**, once | +| 109–167 | 6 → 14 | the build-in | +| 168–1217 | 10–11 | the settled title | +| 1218– | 4–5 | back to the attract loop | + +The settled screen is 10–11 draws that never name a sprite; the composite happens +in a single 27-draw frame. **A capture armed at the title therefore sees nothing** — +which is why `ARM=early` exists. + +## The flashes are real, and they are transient + +Matching quads by design-space rect over frames 100–260, and converting frames to +keyframe units with **2.346 units/frame — derived from the glow's period alone, +a different element**, taking the composite spike (frame 107) as t=0: + +| element | drawn in frames | → t units | decoded | +|---|---|---|---| +| `ptlogo_back2eff1` | **130–131** | **54.0 – 56.3** | flash, peak **t54–56** ✅ | +| `ptlogo_back2eff2` | **133** | **61.0** | flash, peak t58–60 | +| `ptlogo_back2eff3` | **never** | — | flash, peak t62–64 ⚠️ | +| `ptlogo_back2eff4` | **133–135** | 61.0 – 65.7 | flash, peak **t~64** ✅ | +| `ptlogo_back2eff` / `eff5` | 134–260 | 63.3 – … | 255 at t64–66, **holds** ✅ | +| `ptlogo_back2` | 134–260 | 63.3 – … | 255 at t80, **holds** ✅ | +| `ptlogo1` | **125**–148 | **42.2** | stops moving at **t42** ✅ | + +**The flashes fire inside a six-frame window and are absent from every one of the +other 155 frames sampled.** The two holders are present continuously from frame +134 onward. That is the decoded mechanism, observed. + +⚠️ **`eff3` was never drawn, and that is expected rather than a miss.** A flash's +peak is 2 keyframe units, and at 2.346 units per presented frame that is **0.85 of +a frame** — sub-frame. Whether any given flash is sampled at all depends on phase. +Four of five were caught here; a second run would likely catch a different four. +🔴 **A port that draws all five every time will show more of this sweep than the +console does.** + +## The glow's ramp, read out of the guest + +The plate glow's quad carries a **per-vertex colour whose alpha is the element's +fade alpha**, so the ramp can be read directly rather than inferred from pixels. + +* **Observed alpha range: 0 … 80. Decoded peak: 80.** Exact, and not fitted. +* **Period: 51.158 presented frames**, from the first to the last of **20 + consecutive cycle starts** (individual periods 49–53). +* The draw is **omitted entirely** while the glow is dark — which is what the + 11↔10 draw alternation in the settled title is. + +Fitting the decoded 8-keyframe ramp to the 972 measured frames, with **one +disclosed free parameter** (a constant phase offset): + +| curve | RMS residual, alpha levels | +|---|---| +| **the decoded ramp**, phase +2.25 units (= **+0.96 frames**, sub-frame) | **13.16** | +| the decoded ramp, no phase fit | 13.68 | +| a symmetric triangle of the same period and peak | 15.73 | +| flat at the mean | 31.13 | +| 🔴 **the decoded ramp REVERSED** | **38.18** | + +The reversal control is the one that matters: if the shape carried no +information, forwards and backwards would fit equally. They differ by **2.9×**, so +the measured ramp has the decoded ramp's asymmetry — fast rise, slow fall — in the +decoded direction. + +⚠️ The +0.96-frame phase is the expected bias, not a correction: a cycle start is +detected at the first frame with a non-zero alpha, and the decoded curve leaves +zero part-way through a frame. + +## Reach and what is not settled + +⚠️ **One run, one machine.** 2.346 units per presented frame is *this run's* +pacing, not a property of the game. The internal ratios are what transfer. + +❔ **The absolute frame rate of this run was not measured** — Canary logged no fps +and the log has no timestamps — so nothing here is stated in seconds. It did not +need to be: every comparison above is a ratio of measured quantities. + +❔ **`ptlogo_tm` was never matched.** At 37×17 it is below the rect tolerance used; +absence here is not evidence. + +⚠️ **`eff5` and `ptlogo_back2eff` are the same rect at the same position and were +not separated.** Distinguishing them needs the per-vertex alpha, which the decode +says differs — not attempted. + +## Reproducing + +```bash +FRAMES=9000 MAXDRAWS=5000000 ARM=early tools/re-capture/ui_draw_capture.sh 900 /tmp/uicap +python3 tools/re-capture/buildin_timeline.py /tmp/uicap/xenia_re_ui_draws_01.log +``` diff --git a/tools/re-capture/buildin_timeline.py b/tools/re-capture/buildin_timeline.py new file mode 100755 index 00000000..10b556b8 --- /dev/null +++ b/tools/re-capture/buildin_timeline.py @@ -0,0 +1,79 @@ +#!/usr/bin/env python3 +"""When does each title sprite get DRAWN, frame by frame, in the real game? + +Reads a `xenia_re_ui_draws_NN.log` armed early (so the window contains the frames +in which the screen is BUILT, not just its steady state) and reports, per texture +size, the first and last frame it is bound in. + +The point is a falsifiable prediction. `docs/re/structures/ui-settle-time.md` +decodes `ptlogo_back2eff1`..`eff5` as five staggered two-frame flashes that sweep +across the logo once and are extinguished by keyframe t110, while +`ptlogo_back2eff` and `ptlogo_back2` hold for the rest of the screen. Four of the +five have UNIQUE decoded dimensions, so the log can confirm or refute that +directly: + + eff1 167x126 eff2 258x203 eff3 408x203 eff4 749x203 + +If they appear in a short contiguous run of early frames and never again, the +decode is right. If they are bound every frame, or never, it is wrong. + + buildin_timeline.py [--dims WxH,...] +""" +import re, sys, collections + +# GP_TITLE build 4, from `sylpheed-cli`/`sprite_dims`. Two share 1133x280, which +# is why the capture also records per-vertex colour alpha. +KNOWN = { + (167,126): "ptlogo_back2eff1 FLASH t54-58", + (258,203): "ptlogo_back2eff2 FLASH t58-62", + (408,203): "ptlogo_back2eff3 FLASH t62-66", + (749,203): "ptlogo_back2eff4 FLASH t~64", + (1133,280): "ptlogo_back2eff / eff5 (AMBIGUOUS: same size)", + (1118,262): "ptlogo_back2 holds t80-243", + (919,113): "ptlogo1 holds", + (992,104): "ptlogo2 holds", + (1280,720): "pteff04 full-screen", + (640,360): "ptbase2", + (694,20): "ptcopyright", + (399,180): "pteff03 / pteff03a (sweeps)", + (517,131): "ptlogoall_eff", + (235,180): "ptlogoall_eff2", + (640,319): "pteff01", + (37,17): "ptlogo_tm", +} + +def main(): + path = sys.argv[1] + frame = None + seen = collections.defaultdict(list) # dims -> [frames] + per_frame = collections.Counter() + frames = [] + for line in open(path, errors="replace"): + m = re.match(r"--- frame (\d+) ---", line) + if m: + frame = int(m.group(1)); frames.append(frame); continue + if frame is None: + continue + for w, h in re.findall(r"tex\[base=0x[0-9A-F]+ (\d+)x(\d+) fmt=\d+\]", line): + seen[(int(w), int(h))].append(frame) + if line.startswith(("0","1","2","3","4","5","6","7","8","9")) or re.match(r"^\s*\d+ prim=", line): + per_frame[frame] += 1 + + if not frames: + print("no frames in the log"); return + lo, hi = min(frames), max(frames) + print(f"frames {lo}..{hi} ({len(set(frames))} distinct) draws {sum(per_frame.values())}\n") + rows = [] + for dims, fl in seen.items(): + s = sorted(set(fl)) + rows.append((s[0], dims, s[-1], len(s), len(fl))) + rows.sort() + print(f" {'first':>7} {'last':>7} {'frames':>7} {'draws':>7} {'size':>10} what") + for first, dims, last, nf, nd in rows: + name = KNOWN.get(dims, "") + span = last - first + tag = " ⟵ TRANSIENT" if nf <= 12 and span <= 20 else (" (every frame)" if nf > 0.8*len(set(frames)) else "") + print(f" {first:>7} {last:>7} {nf:>7} {nd:>7} {dims[0]:>4}x{dims[1]:<4} {name}{tag}") + +if __name__ == "__main__": + main()