{
  "task": "M1-04",
  "generatedBy": "pnpm zone:bots (cargo run --release -p zoen-bots --bin bots)",
  "what": "1000 bots over WebSocket on loopback against the in-process zone server: linear connect ramp 20 s, then a 60 s hold (bandwidth per bot is measured over the hold), then a 1000 close each",
  "behaviours": {"walk": "waypoint wander steered by the own exact position in each snapshot; one input per snapshot (20/s), an ack per snapshot, a ping per second", "fight": "hunters cast every castEveryS once inside their zone and stand still castMs; the cast is a bot-side timer (counted, not sent): protocol v1 input has no action/skill bits", "chat": "not in protocol v1: a bot-side timer every chatEveryS (counted, not sent)", "mix": {"townSharePermille": 250, "townRadiusMm": 50000, "pauseMs": [0, 3000], "castMs": 800, "castEveryMs": [2000, 6000], "chatEveryMs": [15000, 45000], "source": "netcode.json loadTest (botMix proposed by M1-04)"}},
  "harness": {"bots": 1000, "workers": 4, "rampS": 20, "holdS": 60, "runS": 80.045, "threads": "bots run on 4 poll(2) worker threads, not one OS thread per bot: the in-process server already runs two threads per client plus the tick on this 8-core Mac, and a worker wakes about once per tick for all its sockets instead of 1,000 threads waking 40+ times a second"},
  "machine": {"os": "macos", "arch": "aarch64", "availableParallelism": 8, "loadAverageBefore": "3.51 9.19 30.07", "loadAverageAfter": "24.87 12.91 29.51", "loadAndRss": [{"tS": 0.0, "load": "3.51 9.19 30.07", "rssKiB": 2256}, {"tS": 10.0, "load": "3.36 8.96 29.74", "rssKiB": 155968}, {"tS": 20.0, "load": "3.99 8.92 29.48", "rssKiB": 304832}, {"tS": 30.0, "load": "3.60 8.67 29.16", "rssKiB": 304832}, {"tS": 40.0, "load": "3.50 8.48 28.85", "rssKiB": 304832}, {"tS": 50.0, "load": "4.86 8.60 28.65", "rssKiB": 304832}, {"tS": 60.0, "load": "8.63 9.26 28.65", "rssKiB": 304832}, {"tS": 70.0, "load": "11.97 9.97 28.68", "rssKiB": 304848}, {"tS": 80.0, "load": "24.87 12.91 29.51", "rssKiB": 304848}, {"tS": 80.1, "load": "24.87 12.91 29.51", "rssKiB": 273568}]},
  "thresholds": {"loopP99Ms": 15.000, "avgDownstreamBps": 12000, "hardCapBps": 32000, "source": "netcode.json tick.targetP99Ms, loadTest.avgDownstreamKBps, snapshot.hardCapKBps (KB = 1,000 B)"},
  "bots": {"requested": 1000, "joined": 1000, "connectErrors": 0, "disconnects": 0, "cleanCloses": 1000, "inField": 12, "snapshots": 1400639, "fullSnapshots": 1000, "missedTicks": 0, "inputs": 1400639, "acks": 1400639, "pings": 70040, "pongs": 69994, "waypointsReached": 1829, "castsNotSent": 3, "chatLinesNotSent": 1873},
  "downstreamBpsPerBotHold": {"mean": 8508.5, "p50": 8801.9, "p95": 10210.9, "p99": 10467.9, "max": 10646.3, "samples": 1000},
  "upstreamBpsPerBotHold": {"mean": 531.3, "p50": 531.3, "p95": 531.3, "p99": 531.5, "max": 531.5, "samples": 1000},
  "rttMs": {"mean": 38.906, "p50": 39.347, "p95": 49.871, "p99": 52.539, "max": 59.605, "samples": 69994},
  "botSeries": [{"tS": 1.0, "joined": 48, "downBpsPerBot": 1917}, {"tS": 2.0, "joined": 98, "downBpsPerBot": 5731}, {"tS": 3.0, "joined": 148, "downBpsPerBot": 9707}, {"tS": 4.0, "joined": 198, "downBpsPerBot": 12042}, {"tS": 5.0, "joined": 248, "downBpsPerBot": 12248}, {"tS": 6.0, "joined": 300, "downBpsPerBot": 12576}, {"tS": 7.0, "joined": 347, "downBpsPerBot": 11971}, {"tS": 8.0, "joined": 400, "downBpsPerBot": 12195}, {"tS": 9.0, "joined": 448, "downBpsPerBot": 12219}, {"tS": 10.0, "joined": 498, "downBpsPerBot": 12268}, {"tS": 11.0, "joined": 548, "downBpsPerBot": 12182}, {"tS": 12.0, "joined": 598, "downBpsPerBot": 12083}, {"tS": 13.0, "joined": 648, "downBpsPerBot": 12295}, {"tS": 14.0, "joined": 700, "downBpsPerBot": 12201}, {"tS": 15.0, "joined": 748, "downBpsPerBot": 11909}, {"tS": 16.0, "joined": 798, "downBpsPerBot": 12058}, {"tS": 17.0, "joined": 848, "downBpsPerBot": 12176}, {"tS": 18.0, "joined": 900, "downBpsPerBot": 11926}, {"tS": 19.0, "joined": 948, "downBpsPerBot": 12019}, {"tS": 20.0, "joined": 999, "downBpsPerBot": 11890}, {"tS": 21.0, "joined": 1000, "downBpsPerBot": 11990}, {"tS": 22.0, "joined": 1000, "downBpsPerBot": 11731}, {"tS": 23.0, "joined": 1000, "downBpsPerBot": 11642}, {"tS": 24.0, "joined": 1000, "downBpsPerBot": 11475}, {"tS": 25.0, "joined": 1000, "downBpsPerBot": 11209}, {"tS": 26.0, "joined": 1000, "downBpsPerBot": 10883}, {"tS": 27.0, "joined": 1000, "downBpsPerBot": 10718}, {"tS": 28.0, "joined": 1000, "downBpsPerBot": 10446}, {"tS": 29.0, "joined": 1000, "downBpsPerBot": 10272}, {"tS": 30.0, "joined": 1000, "downBpsPerBot": 10086}, {"tS": 31.0, "joined": 1000, "downBpsPerBot": 10040}, {"tS": 32.0, "joined": 1000, "downBpsPerBot": 9891}, {"tS": 33.0, "joined": 1000, "downBpsPerBot": 9631}, {"tS": 34.0, "joined": 1000, "downBpsPerBot": 9577}, {"tS": 35.0, "joined": 1000, "downBpsPerBot": 9305}, {"tS": 36.0, "joined": 1000, "downBpsPerBot": 9211}, {"tS": 37.0, "joined": 1000, "downBpsPerBot": 9308}, {"tS": 38.0, "joined": 1000, "downBpsPerBot": 9065}, {"tS": 39.0, "joined": 1000, "downBpsPerBot": 8954}, {"tS": 40.0, "joined": 1000, "downBpsPerBot": 8942}, {"tS": 41.0, "joined": 1000, "downBpsPerBot": 8900}, {"tS": 42.0, "joined": 1000, "downBpsPerBot": 8742}, {"tS": 43.0, "joined": 1000, "downBpsPerBot": 8824}, {"tS": 44.0, "joined": 1000, "downBpsPerBot": 8671}, {"tS": 45.0, "joined": 1000, "downBpsPerBot": 8618}, {"tS": 46.0, "joined": 1000, "downBpsPerBot": 8578}, {"tS": 47.0, "joined": 1000, "downBpsPerBot": 8561}, {"tS": 48.0, "joined": 1000, "downBpsPerBot": 8446}, {"tS": 49.0, "joined": 1000, "downBpsPerBot": 8277}, {"tS": 50.0, "joined": 1000, "downBpsPerBot": 8192}, {"tS": 51.0, "joined": 1000, "downBpsPerBot": 8062}, {"tS": 52.0, "joined": 1000, "downBpsPerBot": 8100}, {"tS": 53.0, "joined": 1000, "downBpsPerBot": 7906}, {"tS": 54.0, "joined": 1000, "downBpsPerBot": 8062}, {"tS": 55.0, "joined": 1000, "downBpsPerBot": 7960}, {"tS": 56.0, "joined": 1000, "downBpsPerBot": 7830}, {"tS": 57.0, "joined": 1000, "downBpsPerBot": 7523}, {"tS": 58.0, "joined": 1000, "downBpsPerBot": 7904}, {"tS": 59.0, "joined": 1000, "downBpsPerBot": 7607}, {"tS": 60.0, "joined": 1000, "downBpsPerBot": 7507}, {"tS": 61.0, "joined": 1000, "downBpsPerBot": 7485}, {"tS": 62.0, "joined": 1000, "downBpsPerBot": 7378}, {"tS": 63.0, "joined": 1000, "downBpsPerBot": 7420}, {"tS": 64.0, "joined": 1000, "downBpsPerBot": 7343}, {"tS": 65.0, "joined": 1000, "downBpsPerBot": 7325}, {"tS": 66.0, "joined": 1000, "downBpsPerBot": 7347}, {"tS": 67.0, "joined": 1000, "downBpsPerBot": 7228}, {"tS": 68.0, "joined": 1000, "downBpsPerBot": 7284}, {"tS": 69.0, "joined": 1000, "downBpsPerBot": 7152}, {"tS": 70.0, "joined": 1000, "downBpsPerBot": 7140}, {"tS": 71.0, "joined": 1000, "downBpsPerBot": 6987}, {"tS": 72.0, "joined": 1000, "downBpsPerBot": 6839}, {"tS": 73.0, "joined": 1000, "downBpsPerBot": 6969}, {"tS": 74.0, "joined": 1000, "downBpsPerBot": 6860}, {"tS": 75.0, "joined": 1000, "downBpsPerBot": 6788}, {"tS": 76.0, "joined": 1000, "downBpsPerBot": 6877}, {"tS": 77.0, "joined": 1000, "downBpsPerBot": 6844}, {"tS": 78.0, "joined": 1000, "downBpsPerBot": 6863}, {"tS": 79.0, "joined": 1000, "downBpsPerBot": 6911}, {"tS": 80.0, "joined": 1000, "downBpsPerBot": 6662}],
  "loop": {"what": "server loop iteration (ingest + tick + all snapshots + hand-off), ramp and hold", "ticks": 1602, "p50Ms": 17.930, "p99Ms": 32.000, "maxMs": 61.862, "meanMs": 17.405, "overTarget": 1237, "overBudget": 2, "catchUpTicks": 0, "droppedTicks": 0, "stalls": 0, "maxLatenessMs": 20.240},
  "tickThreadCpu": {"perLoop": {"meanMs": 15.070, "p50Ms": 16.200, "p99Ms": 21.670, "maxMs": 22.727, "n": 1602}, "wholeRunMsPerTick": 15.086, "note": "CPU time of the tick thread per loop iteration (CLOCK_THREAD_CPUTIME_ID); CPU well under wall time means the thread waited for a core"},
  "phases": {"ingest": {"meanMs": 0.358, "p50Ms": 0.330, "p99Ms": 1.350, "maxMs": 8.181, "n": 1602}, "tick": {"meanMs": 2.740, "p50Ms": 2.460, "p99Ms": 5.930, "maxMs": 7.894, "n": 1602}, "snapshotBuild": {"meanMs": 11.744, "p50Ms": 12.450, "p99Ms": 20.820, "maxMs": 44.959, "n": 1602}, "handOff": {"meanMs": 2.559, "p50Ms": 2.230, "p99Ms": 8.350, "maxMs": 29.456, "n": 1602}, "what": "wall time per loop phase: ingest = drain the inbound queue; tick = sim + spatial hash + interest; snapshotBuild = every client's delta snapshot; handOff = take a free buffer, frame, queue to the writer thread"},
  "slowTicks": {"count": 1237, "phaseMeanMs": {"ingest": 0.401, "tick": 3.049, "snapshotBuild": 13.497, "handOff": 3.014}, "cpuMeanMs": 17.050, "what": "loop iterations over the p99 target and where their wall time went"},
  "frames": {"sent": 1471696, "skipped": 0, "snapshotErrors": 0, "maxSnapshotPayloadBytes": 1448},
  "inputs": {"applied": 1400639, "stale": 0, "dropped": 0},
  "server": {"accepted": 1000, "joins": 1000, "leaves": 1000, "peakClients": 1000, "full": 0, "idleTimeouts": 0, "badMessages": 0, "threadsLeft": 0, "downMeanBps": 9081.7, "downMaxBps": 11089.4},
  "serverSeries": {"windowS": 1, "phaseOrder": ["ingest", "tick", "snapshotBuild", "handOff"], "windows": [
    {"tS": 1.0, "clients": 51, "ticks": 21, "loopP50Ms": 0.220, "loopP99Ms": 0.859, "loopMaxMs": 0.859, "cpuMeanMs": 0.258, "phaseMeanMs": [0.028, 0.032, 0.131, 0.082], "framesSent": 609, "framesSkipped": 0, "droppedTicks": 0, "inputs": 482, "sentBpsPerClient": 2088},
    {"tS": 2.0, "clients": 100, "ticks": 20, "loopP50Ms": 1.150, "loopP99Ms": 1.914, "loopMaxMs": 1.914, "cpuMeanMs": 1.080, "phaseMeanMs": [0.047, 0.137, 0.745, 0.243], "framesSent": 1654, "framesSkipped": 0, "droppedTicks": 0, "inputs": 1483, "sentBpsPerClient": 5949},
    {"tS": 3.0, "clients": 151, "ticks": 20, "loopP50Ms": 2.430, "loopP99Ms": 3.533, "loopMaxMs": 3.533, "cpuMeanMs": 2.210, "phaseMeanMs": [0.073, 0.252, 1.689, 0.356], "framesSent": 2709, "framesSkipped": 0, "droppedTicks": 0, "inputs": 2481, "sentBpsPerClient": 9907},
    {"tS": 4.0, "clients": 201, "ticks": 20, "loopP50Ms": 3.130, "loopP99Ms": 5.017, "loopMaxMs": 5.017, "cpuMeanMs": 3.163, "phaseMeanMs": [0.086, 0.343, 2.392, 0.396], "framesSent": 3758, "framesSkipped": 0, "droppedTicks": 0, "inputs": 3485, "sentBpsPerClient": 12008},
    {"tS": 5.0, "clients": 251, "ticks": 20, "loopP50Ms": 4.320, "loopP99Ms": 5.164, "loopMaxMs": 5.164, "cpuMeanMs": 4.223, "phaseMeanMs": [0.094, 0.543, 3.156, 0.503], "framesSent": 4810, "framesSkipped": 0, "droppedTicks": 0, "inputs": 4484, "sentBpsPerClient": 12197},
    {"tS": 6.0, "clients": 300, "ticks": 20, "loopP50Ms": 4.840, "loopP99Ms": 6.931, "loopMaxMs": 6.931, "cpuMeanMs": 4.938, "phaseMeanMs": [0.124, 0.755, 3.658, 0.648], "framesSent": 5855, "framesSkipped": 0, "droppedTicks": 0, "inputs": 5485, "sentBpsPerClient": 12255},
    {"tS": 7.0, "clients": 351, "ticks": 20, "loopP50Ms": 6.010, "loopP99Ms": 19.457, "loopMaxMs": 19.457, "cpuMeanMs": 5.849, "phaseMeanMs": [0.127, 1.010, 5.075, 0.748], "framesSent": 6911, "framesSkipped": 0, "droppedTicks": 0, "inputs": 6484, "sentBpsPerClient": 12282},
    {"tS": 8.0, "clients": 400, "ticks": 20, "loopP50Ms": 10.250, "loopP99Ms": 11.299, "loopMaxMs": 11.299, "cpuMeanMs": 10.039, "phaseMeanMs": [0.129, 1.974, 7.097, 0.884], "framesSent": 7958, "framesSkipped": 0, "droppedTicks": 0, "inputs": 7485, "sentBpsPerClient": 12313},
    {"tS": 9.0, "clients": 450, "ticks": 20, "loopP50Ms": 10.200, "loopP99Ms": 12.538, "loopMaxMs": 12.538, "cpuMeanMs": 10.265, "phaseMeanMs": [0.139, 2.058, 7.187, 0.983], "framesSent": 9007, "framesSkipped": 0, "droppedTicks": 0, "inputs": 8482, "sentBpsPerClient": 12260},
    {"tS": 10.0, "clients": 500, "ticks": 20, "loopP50Ms": 9.360, "loopP99Ms": 21.605, "loopMaxMs": 21.605, "cpuMeanMs": 9.391, "phaseMeanMs": [0.214, 1.897, 7.244, 1.394], "framesSent": 10055, "framesSkipped": 0, "droppedTicks": 0, "inputs": 9482, "sentBpsPerClient": 12205},
    {"tS": 11.0, "clients": 550, "ticks": 20, "loopP50Ms": 9.230, "loopP99Ms": 12.333, "loopMaxMs": 12.333, "cpuMeanMs": 9.005, "phaseMeanMs": [0.184, 2.085, 6.100, 1.022], "framesSent": 11112, "framesSkipped": 0, "droppedTicks": 0, "inputs": 10483, "sentBpsPerClient": 12193},
    {"tS": 12.0, "clients": 601, "ticks": 20, "loopP50Ms": 11.600, "loopP99Ms": 41.326, "loopMaxMs": 41.326, "cpuMeanMs": 11.630, "phaseMeanMs": [0.355, 2.888, 9.386, 2.263], "framesSent": 12153, "framesSkipped": 0, "droppedTicks": 0, "inputs": 11481, "sentBpsPerClient": 12157},
    {"tS": 13.0, "clients": 650, "ticks": 20, "loopP50Ms": 11.790, "loopP99Ms": 14.919, "loopMaxMs": 14.919, "cpuMeanMs": 11.485, "phaseMeanMs": [0.298, 2.962, 7.432, 1.303], "framesSent": 13206, "framesSkipped": 0, "droppedTicks": 0, "inputs": 12483, "sentBpsPerClient": 12187},
    {"tS": 14.0, "clients": 700, "ticks": 20, "loopP50Ms": 13.550, "loopP99Ms": 21.662, "loopMaxMs": 21.662, "cpuMeanMs": 12.986, "phaseMeanMs": [0.294, 3.367, 8.679, 1.622], "framesSent": 14260, "framesSkipped": 0, "droppedTicks": 0, "inputs": 13483, "sentBpsPerClient": 12160},
    {"tS": 15.0, "clients": 750, "ticks": 20, "loopP50Ms": 13.800, "loopP99Ms": 16.910, "loopMaxMs": 16.910, "cpuMeanMs": 13.164, "phaseMeanMs": [0.317, 3.944, 8.281, 1.479], "framesSent": 15308, "framesSkipped": 0, "droppedTicks": 0, "inputs": 14482, "sentBpsPerClient": 12024},
    {"tS": 16.0, "clients": 801, "ticks": 20, "loopP50Ms": 15.140, "loopP99Ms": 25.639, "loopMaxMs": 25.639, "cpuMeanMs": 14.708, "phaseMeanMs": [0.315, 4.242, 9.582, 1.967], "framesSent": 16353, "framesSkipped": 0, "droppedTicks": 0, "inputs": 15481, "sentBpsPerClient": 12113},
    {"tS": 17.0, "clients": 850, "ticks": 20, "loopP50Ms": 16.090, "loopP99Ms": 26.058, "loopMaxMs": 26.058, "cpuMeanMs": 15.254, "phaseMeanMs": [0.493, 4.657, 9.651, 1.915], "framesSent": 17410, "framesSkipped": 0, "droppedTicks": 0, "inputs": 16484, "sentBpsPerClient": 12099},
    {"tS": 18.0, "clients": 900, "ticks": 20, "loopP50Ms": 16.600, "loopP99Ms": 19.638, "loopMaxMs": 19.638, "cpuMeanMs": 16.112, "phaseMeanMs": [0.271, 4.708, 9.977, 1.933], "framesSent": 18459, "framesSkipped": 0, "droppedTicks": 0, "inputs": 17482, "sentBpsPerClient": 12009},
    {"tS": 19.0, "clients": 950, "ticks": 20, "loopP50Ms": 18.190, "loopP99Ms": 32.896, "loopMaxMs": 32.896, "cpuMeanMs": 16.931, "phaseMeanMs": [0.392, 5.076, 11.000, 2.341], "framesSent": 19507, "framesSkipped": 0, "droppedTicks": 0, "inputs": 18483, "sentBpsPerClient": 11971},
    {"tS": 20.0, "clients": 1000, "ticks": 20, "loopP50Ms": 19.890, "loopP99Ms": 24.628, "loopMaxMs": 24.628, "cpuMeanMs": 18.807, "phaseMeanMs": [0.342, 5.584, 12.539, 1.968], "framesSent": 20555, "framesSkipped": 0, "droppedTicks": 0, "inputs": 19481, "sentBpsPerClient": 11954},
    {"tS": 21.0, "clients": 1000, "ticks": 20, "loopP50Ms": 21.030, "loopP99Ms": 24.433, "loopMaxMs": 24.433, "cpuMeanMs": 19.871, "phaseMeanMs": [0.341, 5.450, 13.410, 2.213], "framesSent": 21004, "framesSkipped": 0, "droppedTicks": 0, "inputs": 20000, "sentBpsPerClient": 11985},
    {"tS": 22.0, "clients": 1000, "ticks": 20, "loopP50Ms": 22.680, "loopP99Ms": 29.315, "loopMaxMs": 29.315, "cpuMeanMs": 20.617, "phaseMeanMs": [0.379, 5.503, 14.922, 2.835], "framesSent": 20996, "framesSkipped": 0, "droppedTicks": 0, "inputs": 20000, "sentBpsPerClient": 11745},
    {"tS": 23.0, "clients": 1000, "ticks": 20, "loopP50Ms": 20.920, "loopP99Ms": 31.994, "loopMaxMs": 31.994, "cpuMeanMs": 19.956, "phaseMeanMs": [0.338, 5.457, 14.024, 2.532], "framesSent": 21003, "framesSkipped": 0, "droppedTicks": 0, "inputs": 20000, "sentBpsPerClient": 11644},
    {"tS": 24.0, "clients": 1000, "ticks": 20, "loopP50Ms": 21.790, "loopP99Ms": 30.150, "loopMaxMs": 30.150, "cpuMeanMs": 19.996, "phaseMeanMs": [0.381, 5.011, 14.433, 2.566], "framesSent": 20996, "framesSkipped": 0, "droppedTicks": 0, "inputs": 20000, "sentBpsPerClient": 11421},
    {"tS": 25.0, "clients": 1000, "ticks": 20, "loopP50Ms": 21.200, "loopP99Ms": 29.513, "loopMaxMs": 29.513, "cpuMeanMs": 19.668, "phaseMeanMs": [0.362, 5.000, 14.669, 2.848], "framesSent": 21001, "framesSkipped": 0, "droppedTicks": 0, "inputs": 20000, "sentBpsPerClient": 11150},
    {"tS": 26.0, "clients": 1000, "ticks": 20, "loopP50Ms": 20.880, "loopP99Ms": 33.142, "loopMaxMs": 33.142, "cpuMeanMs": 19.577, "phaseMeanMs": [0.368, 4.928, 14.563, 2.763], "framesSent": 21004, "framesSkipped": 0, "droppedTicks": 0, "inputs": 20000, "sentBpsPerClient": 10870},
    {"tS": 27.0, "clients": 1000, "ticks": 20, "loopP50Ms": 22.270, "loopP99Ms": 30.325, "loopMaxMs": 30.325, "cpuMeanMs": 19.326, "phaseMeanMs": [0.429, 4.450, 15.147, 3.149], "framesSent": 20995, "framesSkipped": 0, "droppedTicks": 0, "inputs": 20000, "sentBpsPerClient": 10713},
    {"tS": 28.0, "clients": 1000, "ticks": 20, "loopP50Ms": 21.500, "loopP99Ms": 29.082, "loopMaxMs": 29.082, "cpuMeanMs": 19.338, "phaseMeanMs": [0.378, 4.289, 14.594, 2.914], "framesSent": 21006, "framesSkipped": 0, "droppedTicks": 0, "inputs": 20000, "sentBpsPerClient": 10471},
    {"tS": 29.0, "clients": 1000, "ticks": 20, "loopP50Ms": 20.040, "loopP99Ms": 28.942, "loopMaxMs": 28.942, "cpuMeanMs": 18.556, "phaseMeanMs": [0.340, 4.272, 13.632, 2.390], "framesSent": 21003, "framesSkipped": 0, "droppedTicks": 0, "inputs": 20000, "sentBpsPerClient": 10257},
    {"tS": 30.0, "clients": 1000, "ticks": 20, "loopP50Ms": 20.730, "loopP99Ms": 26.750, "loopMaxMs": 26.750, "cpuMeanMs": 18.675, "phaseMeanMs": [0.409, 4.010, 13.962, 2.642], "framesSent": 20997, "framesSkipped": 0, "droppedTicks": 0, "inputs": 20000, "sentBpsPerClient": 10076},
    {"tS": 31.0, "clients": 1000, "ticks": 20, "loopP50Ms": 19.270, "loopP99Ms": 25.990, "loopMaxMs": 25.990, "cpuMeanMs": 18.176, "phaseMeanMs": [0.337, 3.980, 13.437, 2.172], "framesSent": 20993, "framesSkipped": 0, "droppedTicks": 0, "inputs": 20000, "sentBpsPerClient": 10006},
    {"tS": 32.0, "clients": 1000, "ticks": 20, "loopP50Ms": 18.530, "loopP99Ms": 37.028, "loopMaxMs": 37.028, "cpuMeanMs": 17.589, "phaseMeanMs": [0.405, 3.783, 13.755, 2.561], "framesSent": 21005, "framesSkipped": 0, "droppedTicks": 0, "inputs": 20000, "sentBpsPerClient": 9870},
    {"tS": 33.0, "clients": 1000, "ticks": 20, "loopP50Ms": 19.070, "loopP99Ms": 28.777, "loopMaxMs": 28.777, "cpuMeanMs": 17.852, "phaseMeanMs": [0.407, 3.542, 13.592, 2.525], "framesSent": 20995, "framesSkipped": 0, "droppedTicks": 0, "inputs": 20000, "sentBpsPerClient": 9687},
    {"tS": 34.0, "clients": 1000, "ticks": 20, "loopP50Ms": 20.340, "loopP99Ms": 25.226, "loopMaxMs": 25.226, "cpuMeanMs": 17.682, "phaseMeanMs": [0.531, 3.439, 13.861, 2.708], "framesSent": 20998, "framesSkipped": 0, "droppedTicks": 0, "inputs": 20000, "sentBpsPerClient": 9511},
    {"tS": 35.0, "clients": 1000, "ticks": 20, "loopP50Ms": 19.480, "loopP99Ms": 26.426, "loopMaxMs": 26.426, "cpuMeanMs": 17.463, "phaseMeanMs": [0.392, 3.229, 13.328, 2.544], "framesSent": 21007, "framesSkipped": 0, "droppedTicks": 0, "inputs": 20000, "sentBpsPerClient": 9302},
    {"tS": 36.0, "clients": 1000, "ticks": 20, "loopP50Ms": 18.680, "loopP99Ms": 27.112, "loopMaxMs": 27.112, "cpuMeanMs": 17.238, "phaseMeanMs": [0.329, 3.229, 13.021, 2.249], "framesSent": 21000, "framesSkipped": 0, "droppedTicks": 0, "inputs": 20000, "sentBpsPerClient": 9249},
    {"tS": 37.0, "clients": 1000, "ticks": 20, "loopP50Ms": 18.470, "loopP99Ms": 30.981, "loopMaxMs": 30.981, "cpuMeanMs": 17.141, "phaseMeanMs": [0.353, 3.152, 13.536, 2.444], "framesSent": 21000, "framesSkipped": 0, "droppedTicks": 0, "inputs": 20000, "sentBpsPerClient": 9250},
    {"tS": 38.0, "clients": 1000, "ticks": 20, "loopP50Ms": 18.310, "loopP99Ms": 26.760, "loopMaxMs": 26.760, "cpuMeanMs": 17.207, "phaseMeanMs": [0.340, 2.855, 13.368, 2.417], "framesSent": 21001, "framesSkipped": 0, "droppedTicks": 0, "inputs": 20000, "sentBpsPerClient": 9066},
    {"tS": 39.0, "clients": 1000, "ticks": 20, "loopP50Ms": 18.160, "loopP99Ms": 20.345, "loopMaxMs": 20.345, "cpuMeanMs": 16.408, "phaseMeanMs": [0.305, 2.783, 12.440, 2.202], "framesSent": 20999, "framesSkipped": 0, "droppedTicks": 0, "inputs": 20000, "sentBpsPerClient": 8951},
    {"tS": 40.0, "clients": 1000, "ticks": 20, "loopP50Ms": 17.750, "loopP99Ms": 21.514, "loopMaxMs": 21.514, "cpuMeanMs": 16.598, "phaseMeanMs": [0.342, 2.681, 12.757, 2.224], "framesSent": 20994, "framesSkipped": 0, "droppedTicks": 0, "inputs": 20000, "sentBpsPerClient": 8925},
    {"tS": 41.0, "clients": 1000, "ticks": 20, "loopP50Ms": 17.720, "loopP99Ms": 22.915, "loopMaxMs": 22.915, "cpuMeanMs": 16.534, "phaseMeanMs": [0.318, 2.743, 12.699, 2.265], "framesSent": 21003, "framesSkipped": 0, "droppedTicks": 0, "inputs": 20000, "sentBpsPerClient": 8882},
    {"tS": 42.0, "clients": 1000, "ticks": 20, "loopP50Ms": 17.020, "loopP99Ms": 22.509, "loopMaxMs": 22.509, "cpuMeanMs": 16.047, "phaseMeanMs": [0.329, 2.633, 12.191, 2.338], "framesSent": 20997, "framesSkipped": 0, "droppedTicks": 0, "inputs": 20000, "sentBpsPerClient": 8794},
    {"tS": 43.0, "clients": 1000, "ticks": 20, "loopP50Ms": 17.410, "loopP99Ms": 24.378, "loopMaxMs": 24.378, "cpuMeanMs": 15.993, "phaseMeanMs": [0.404, 2.692, 12.525, 2.439], "framesSent": 20998, "framesSkipped": 0, "droppedTicks": 0, "inputs": 20000, "sentBpsPerClient": 8801},
    {"tS": 44.0, "clients": 1000, "ticks": 20, "loopP50Ms": 17.050, "loopP99Ms": 26.005, "loopMaxMs": 26.005, "cpuMeanMs": 16.113, "phaseMeanMs": [0.330, 2.531, 12.544, 2.260], "framesSent": 21001, "framesSkipped": 0, "droppedTicks": 0, "inputs": 20000, "sentBpsPerClient": 8645},
    {"tS": 45.0, "clients": 1000, "ticks": 20, "loopP50Ms": 16.770, "loopP99Ms": 20.012, "loopMaxMs": 20.012, "cpuMeanMs": 15.843, "phaseMeanMs": [0.311, 2.416, 12.246, 2.186], "framesSent": 21001, "framesSkipped": 0, "droppedTicks": 0, "inputs": 20000, "sentBpsPerClient": 8638},
    {"tS": 46.0, "clients": 1000, "ticks": 20, "loopP50Ms": 16.810, "loopP99Ms": 22.111, "loopMaxMs": 22.111, "cpuMeanMs": 15.854, "phaseMeanMs": [0.340, 2.436, 12.415, 2.445], "framesSent": 21002, "framesSkipped": 0, "droppedTicks": 0, "inputs": 20000, "sentBpsPerClient": 8642},
    {"tS": 47.0, "clients": 1000, "ticks": 20, "loopP50Ms": 17.670, "loopP99Ms": 26.124, "loopMaxMs": 26.124, "cpuMeanMs": 15.925, "phaseMeanMs": [0.391, 2.225, 13.301, 3.103], "framesSent": 21005, "framesSkipped": 0, "droppedTicks": 0, "inputs": 20000, "sentBpsPerClient": 8533},
    {"tS": 48.0, "clients": 1000, "ticks": 20, "loopP50Ms": 16.890, "loopP99Ms": 33.562, "loopMaxMs": 33.562, "cpuMeanMs": 15.914, "phaseMeanMs": [0.411, 2.515, 12.442, 2.667], "framesSent": 20997, "framesSkipped": 0, "droppedTicks": 0, "inputs": 20000, "sentBpsPerClient": 8393},
    {"tS": 49.0, "clients": 1000, "ticks": 20, "loopP50Ms": 16.950, "loopP99Ms": 25.624, "loopMaxMs": 25.624, "cpuMeanMs": 15.689, "phaseMeanMs": [0.364, 2.256, 12.400, 2.552], "framesSent": 21000, "framesSkipped": 0, "droppedTicks": 0, "inputs": 20000, "sentBpsPerClient": 8273},
    {"tS": 50.0, "clients": 1000, "ticks": 20, "loopP50Ms": 16.810, "loopP99Ms": 21.689, "loopMaxMs": 21.689, "cpuMeanMs": 15.565, "phaseMeanMs": [0.342, 2.447, 12.060, 2.207], "framesSent": 21000, "framesSkipped": 0, "droppedTicks": 0, "inputs": 20000, "sentBpsPerClient": 8188},
    {"tS": 51.0, "clients": 1000, "ticks": 20, "loopP50Ms": 18.030, "loopP99Ms": 23.163, "loopMaxMs": 23.163, "cpuMeanMs": 15.654, "phaseMeanMs": [0.391, 2.285, 12.645, 2.843], "framesSent": 20994, "framesSkipped": 0, "droppedTicks": 0, "inputs": 20000, "sentBpsPerClient": 8123},
    {"tS": 52.0, "clients": 1000, "ticks": 20, "loopP50Ms": 16.510, "loopP99Ms": 23.950, "loopMaxMs": 23.950, "cpuMeanMs": 15.313, "phaseMeanMs": [0.343, 2.227, 11.849, 2.427], "framesSent": 21001, "framesSkipped": 0, "droppedTicks": 0, "inputs": 20000, "sentBpsPerClient": 8049},
    {"tS": 53.0, "clients": 1000, "ticks": 20, "loopP50Ms": 17.680, "loopP99Ms": 26.554, "loopMaxMs": 26.554, "cpuMeanMs": 16.027, "phaseMeanMs": [0.344, 2.148, 13.485, 3.184], "framesSent": 21006, "framesSkipped": 0, "droppedTicks": 0, "inputs": 20000, "sentBpsPerClient": 7946},
    {"tS": 54.0, "clients": 1000, "ticks": 20, "loopP50Ms": 17.400, "loopP99Ms": 22.061, "loopMaxMs": 22.061, "cpuMeanMs": 15.676, "phaseMeanMs": [0.381, 2.246, 12.494, 2.661], "framesSent": 21001, "framesSkipped": 0, "droppedTicks": 0, "inputs": 20000, "sentBpsPerClient": 7993},
    {"tS": 55.0, "clients": 1000, "ticks": 20, "loopP50Ms": 16.730, "loopP99Ms": 21.897, "loopMaxMs": 21.897, "cpuMeanMs": 15.360, "phaseMeanMs": [0.330, 2.091, 12.117, 2.485], "framesSent": 21000, "framesSkipped": 0, "droppedTicks": 0, "inputs": 20000, "sentBpsPerClient": 7962},
    {"tS": 56.0, "clients": 1000, "ticks": 20, "loopP50Ms": 17.670, "loopP99Ms": 25.349, "loopMaxMs": 25.349, "cpuMeanMs": 15.753, "phaseMeanMs": [0.404, 2.147, 13.129, 3.035], "framesSent": 20999, "framesSkipped": 0, "droppedTicks": 0, "inputs": 20000, "sentBpsPerClient": 7830},
    {"tS": 57.0, "clients": 1000, "ticks": 19, "loopP50Ms": 20.220, "loopP99Ms": 61.859, "loopMaxMs": 61.859, "cpuMeanMs": 17.144, "phaseMeanMs": [0.611, 2.580, 14.436, 4.660], "framesSent": 19948, "framesSkipped": 0, "droppedTicks": 0, "inputs": 19000, "sentBpsPerClient": 7349},
    {"tS": 58.0, "clients": 1000, "ticks": 21, "loopP50Ms": 20.600, "loopP99Ms": 37.939, "loopMaxMs": 37.939, "cpuMeanMs": 17.460, "phaseMeanMs": [0.603, 2.720, 15.756, 4.472], "framesSent": 22051, "framesSkipped": 0, "droppedTicks": 0, "inputs": 21000, "sentBpsPerClient": 8071},
    {"tS": 59.0, "clients": 1000, "ticks": 20, "loopP50Ms": 21.680, "loopP99Ms": 36.251, "loopMaxMs": 36.251, "cpuMeanMs": 17.893, "phaseMeanMs": [0.406, 2.514, 15.690, 4.592], "framesSent": 21005, "framesSkipped": 0, "droppedTicks": 0, "inputs": 20000, "sentBpsPerClient": 7595},
    {"tS": 60.0, "clients": 1000, "ticks": 20, "loopP50Ms": 24.590, "loopP99Ms": 36.387, "loopMaxMs": 36.387, "cpuMeanMs": 17.283, "phaseMeanMs": [0.590, 2.281, 16.264, 5.886], "framesSent": 21000, "framesSkipped": 0, "droppedTicks": 0, "inputs": 20000, "sentBpsPerClient": 7515},
    {"tS": 61.0, "clients": 1000, "ticks": 20, "loopP50Ms": 18.940, "loopP99Ms": 30.622, "loopMaxMs": 30.622, "cpuMeanMs": 16.641, "phaseMeanMs": [0.417, 2.263, 14.060, 3.469], "framesSent": 20991, "framesSkipped": 0, "droppedTicks": 0, "inputs": 20000, "sentBpsPerClient": 7490},
    {"tS": 62.0, "clients": 1000, "ticks": 20, "loopP50Ms": 20.280, "loopP99Ms": 36.684, "loopMaxMs": 36.684, "cpuMeanMs": 16.874, "phaseMeanMs": [0.431, 2.226, 14.576, 4.422], "framesSent": 21006, "framesSkipped": 0, "droppedTicks": 0, "inputs": 20000, "sentBpsPerClient": 7410},
    {"tS": 63.0, "clients": 1000, "ticks": 20, "loopP50Ms": 21.170, "loopP99Ms": 29.956, "loopMaxMs": 29.956, "cpuMeanMs": 16.995, "phaseMeanMs": [0.507, 2.280, 14.837, 4.037], "framesSent": 21003, "framesSkipped": 0, "droppedTicks": 0, "inputs": 20000, "sentBpsPerClient": 7385},
    {"tS": 64.0, "clients": 1000, "ticks": 20, "loopP50Ms": 20.290, "loopP99Ms": 54.498, "loopMaxMs": 54.498, "cpuMeanMs": 17.205, "phaseMeanMs": [0.464, 2.213, 15.745, 3.925], "framesSent": 20996, "framesSkipped": 0, "droppedTicks": 0, "inputs": 20000, "sentBpsPerClient": 7335},
    {"tS": 65.0, "clients": 1000, "ticks": 20, "loopP50Ms": 22.640, "loopP99Ms": 31.504, "loopMaxMs": 31.504, "cpuMeanMs": 17.481, "phaseMeanMs": [0.446, 2.207, 15.446, 4.523], "framesSent": 21009, "framesSkipped": 0, "droppedTicks": 0, "inputs": 20000, "sentBpsPerClient": 7355},
    {"tS": 66.0, "clients": 1000, "ticks": 20, "loopP50Ms": 19.020, "loopP99Ms": 31.119, "loopMaxMs": 31.119, "cpuMeanMs": 16.788, "phaseMeanMs": [0.378, 2.071, 14.260, 3.814], "framesSent": 20989, "framesSkipped": 0, "droppedTicks": 0, "inputs": 20000, "sentBpsPerClient": 7269},
    {"tS": 67.0, "clients": 1000, "ticks": 20, "loopP50Ms": 18.000, "loopP99Ms": 30.706, "loopMaxMs": 30.706, "cpuMeanMs": 16.460, "phaseMeanMs": [0.433, 2.066, 13.602, 3.378], "framesSent": 20999, "framesSkipped": 0, "droppedTicks": 0, "inputs": 20000, "sentBpsPerClient": 7264},
    {"tS": 68.0, "clients": 1000, "ticks": 20, "loopP50Ms": 19.330, "loopP99Ms": 24.134, "loopMaxMs": 24.134, "cpuMeanMs": 16.888, "phaseMeanMs": [0.442, 2.084, 14.113, 3.418], "framesSent": 21001, "framesSkipped": 0, "droppedTicks": 0, "inputs": 20000, "sentBpsPerClient": 7273},
    {"tS": 69.0, "clients": 1000, "ticks": 20, "loopP50Ms": 20.170, "loopP99Ms": 23.928, "loopMaxMs": 23.928, "cpuMeanMs": 16.630, "phaseMeanMs": [0.410, 2.029, 14.034, 3.580], "framesSent": 21005, "framesSkipped": 0, "droppedTicks": 0, "inputs": 20000, "sentBpsPerClient": 7206},
    {"tS": 70.0, "clients": 1000, "ticks": 20, "loopP50Ms": 19.570, "loopP99Ms": 26.536, "loopMaxMs": 26.536, "cpuMeanMs": 16.499, "phaseMeanMs": [0.443, 2.135, 13.941, 3.465], "framesSent": 20995, "framesSkipped": 0, "droppedTicks": 0, "inputs": 20000, "sentBpsPerClient": 7099},
    {"tS": 71.0, "clients": 1000, "ticks": 20, "loopP50Ms": 19.630, "loopP99Ms": 25.473, "loopMaxMs": 25.473, "cpuMeanMs": 16.450, "phaseMeanMs": [0.442, 2.086, 13.701, 3.507], "framesSent": 21003, "framesSkipped": 0, "droppedTicks": 0, "inputs": 20000, "sentBpsPerClient": 6955},
    {"tS": 72.0, "clients": 1000, "ticks": 20, "loopP50Ms": 19.310, "loopP99Ms": 28.051, "loopMaxMs": 28.051, "cpuMeanMs": 16.603, "phaseMeanMs": [0.464, 2.212, 14.421, 3.933], "framesSent": 21000, "framesSkipped": 0, "droppedTicks": 0, "inputs": 20000, "sentBpsPerClient": 6904},
    {"tS": 73.0, "clients": 1000, "ticks": 20, "loopP50Ms": 19.100, "loopP99Ms": 24.119, "loopMaxMs": 24.119, "cpuMeanMs": 16.294, "phaseMeanMs": [0.408, 2.043, 13.903, 3.552], "framesSent": 20997, "framesSkipped": 0, "droppedTicks": 0, "inputs": 20000, "sentBpsPerClient": 6915},
    {"tS": 74.0, "clients": 1000, "ticks": 20, "loopP50Ms": 18.930, "loopP99Ms": 29.244, "loopMaxMs": 29.244, "cpuMeanMs": 16.122, "phaseMeanMs": [0.465, 2.094, 13.669, 3.240], "framesSent": 21001, "framesSkipped": 0, "droppedTicks": 0, "inputs": 20000, "sentBpsPerClient": 6853},
    {"tS": 75.0, "clients": 1000, "ticks": 20, "loopP50Ms": 17.910, "loopP99Ms": 26.274, "loopMaxMs": 26.274, "cpuMeanMs": 15.909, "phaseMeanMs": [0.479, 1.997, 13.368, 3.545], "framesSent": 21000, "framesSkipped": 0, "droppedTicks": 0, "inputs": 20000, "sentBpsPerClient": 6810},
    {"tS": 76.0, "clients": 1000, "ticks": 20, "loopP50Ms": 17.240, "loopP99Ms": 25.605, "loopMaxMs": 25.605, "cpuMeanMs": 15.734, "phaseMeanMs": [0.419, 1.983, 12.839, 3.252], "framesSent": 20997, "framesSkipped": 0, "droppedTicks": 0, "inputs": 20000, "sentBpsPerClient": 6844},
    {"tS": 77.0, "clients": 1000, "ticks": 20, "loopP50Ms": 16.470, "loopP99Ms": 18.430, "loopMaxMs": 18.430, "cpuMeanMs": 15.130, "phaseMeanMs": [0.337, 2.098, 11.620, 2.466], "framesSent": 20997, "framesSkipped": 0, "droppedTicks": 0, "inputs": 20000, "sentBpsPerClient": 6884},
    {"tS": 78.0, "clients": 1000, "ticks": 20, "loopP50Ms": 16.600, "loopP99Ms": 29.313, "loopMaxMs": 29.313, "cpuMeanMs": 15.167, "phaseMeanMs": [0.410, 1.925, 12.178, 3.255], "framesSent": 21001, "framesSkipped": 0, "droppedTicks": 0, "inputs": 20000, "sentBpsPerClient": 6894},
    {"tS": 79.0, "clients": 1000, "ticks": 20, "loopP50Ms": 15.270, "loopP99Ms": 19.196, "loopMaxMs": 19.196, "cpuMeanMs": 14.461, "phaseMeanMs": [0.329, 1.880, 10.848, 2.416], "framesSent": 21005, "framesSkipped": 0, "droppedTicks": 0, "inputs": 20000, "sentBpsPerClient": 6850},
    {"tS": 80.0, "clients": 1000, "ticks": 20, "loopP50Ms": 13.650, "loopP99Ms": 16.405, "loopMaxMs": 16.405, "cpuMeanMs": 12.832, "phaseMeanMs": [0.435, 1.871, 9.361, 2.159], "framesSent": 21000, "framesSkipped": 0, "droppedTicks": 0, "inputs": 20000, "sentBpsPerClient": 6655},
    {"tS": 80.1, "clients": 0, "ticks": 1, "loopP50Ms": 8.214, "loopP99Ms": 8.214, "loopMaxMs": 8.214, "cpuMeanMs": 8.116, "phaseMeanMs": [8.181, 0.028, 0.000, 0.004], "framesSent": 46, "framesSkipped": 0, "droppedTicks": 0, "inputs": 983, "sentBpsPerClient": 0}
  ]},
  "errors": [],
  "checks": {"allJoined": true, "noDisconnects": true, "avgDownstreamWithinTarget": true, "everyClientWithinHardCap": true, "missedTicksUnder1Percent": true, "loopP99WithinTarget": false, "noStaleOrDroppedInputs": true, "framesSkippedUnder1Percent": true, "ticksDroppedUnder1Percent": true, "noSnapshotErrors": true, "noThreadsLeft": true},
  "pass": false
}
