{"key":"reference-h-a-replica","approach":"Independent reversal-of-evaluation-order replication of one holdout reference block: immutable C versus incumbent B, B before C for each seed, fresh module/factory/instance per simulation, identical sampled config within each pair, serial in one OS process.","tried":[{"candidate_code_sha256":"baef955ec10728839f7c3357016ec9eb0550e7ec689bbd5171b1cdd5c9e37273","incumbent_code_sha256":"bf0d179f3e47d28819f6fa7e0d25548c2ced43374c216d36460b00a26a26ffae","seed_start":410000,"seed_end":410499,"requested_pairs":500,"completed_pairs":500,"evaluation_order":["B","C"],"tuning_performed":false,"code_changes":false}],"next":"Next episode: compare with h-a for agreement. This replica adds no independent n because its seeds duplicate h-a. No promotion is made here; seeds 900000..903999 were never run.","code":"\"\"\"Stale-quote defence with tick probes, a sub-tick belief and cheap YES stock.\n\nEvery step the arbitrageur removes any order on the wrong side of p, so tiny\ntwo-sided probes around the estimate locate p to a tick; a grid filter narrows\nthat further.  Quotes sit one tick inside the competitor and are sized by the\nmarginal rule: one more share is worth quoting while the chance a retail order\nreaches it, times its edge, exceeds the expected arbitrage loss.  Near p=0 a\nretail buy pays almost its whole notional as edge, so YES is held to cover low\nasks.  That YES is bought when it is cheap: a large bid rests at tick 1 while p\nis above it, so the arbitrageur fills it on the crossing for about 0.1 tick a\nshare instead of nearly a full tick once p is near zero, and smaller bids sit on\nwhichever tick p is within 0.15 of.  Below tick 1 the estimate of p decays with\nthe time spent there, since no probe can see it.\n\"\"\"\nimport math\nfrom orderbook_pm_challenge.strategy import BaseStrategy\nfrom orderbook_pm_challenge.types import CancelOrder, PlaceOrder, Side\n\nP = dict(lam_r=0.25, m=5.0, sig_n=1.2, lam_j=0.0019, sig_j=0.35, sig=0.02,\n         qmax=3000.0, rmin=2, kA=0.7, kL=0.15, pL=0.05,\n         ammo=1.0, ydem=0.4, W=200.0, fy=0.6, ammo_q=60.0, ammo_pmax=0.05, ammo_maxpay=0.02,\n         fb=0.9, fu=0.7, xu=0.1, sticky=1.0, min_ahead=2.0, keep_hi=1.5, keep_lo=0.7, Hu=300.0, bins=8.0, filt=1.0, uni=0.01, jumpinfo=1.0, dmin=0.0, kLb=0.08, kLf=0.08, pinf=1.0, pre=0.0, H1=100.0,\n         ydf=0.6, Wf=2000.0, g_hi=0.15, g_lo=0.15, qf=400.0, pmaxf=0.05, pre_gap=1.0,\n         ydf1=0.6, g1=5.0, f1=0.6, a1=100.0, nb1=0.0, gs=1.0, p1t=1.0, m1=1.0, zd=1.0, pfl=0.0005)\nP.update({'W': 50, 'ammo_pmax': 0.02, 'fy': 0.7, 'fu': 0.25, 'Hu': 500})\nC = {'W': 50, 'ammo_pmax': 0.02, 'fy': 0.7, 'reserve': 200, 'scar': 0.0025, 'fu': 0.25, 'Hu': 500}\nSQ2 = math.sqrt(2.0)\nSQ2PI = math.sqrt(2.0 * math.pi)\ndef cdf(x): return 0.5 * (1.0 + math.erf(x / SQ2))\ndef pdf(x): return math.exp(-0.5 * x * x) / SQ2PI\ndef inv(p):\n    p = min(max(p, 1e-9), 1 - 1e-9)\n    t = math.sqrt(-2.0 * math.log(min(p, 1 - p)))\n    x = t - (2.515517 + 0.802853 * t + 0.010328 * t * t) / (1 + 1.432788 * t + 0.189269 * t * t + 0.001308 * t ** 3)\n    x = -x if p < 0.5 else x\n    for _ in range(2):\n        d = pdf(x)\n        if d < 1e-12:\n            break\n        x -= (cdf(x) - p) / d\n    return x\ndef lpm(k):\n    return pdf(k) + k * cdf(k)\ndef fl(q):\n    return math.floor(q * 100 + 1e-9) / 100\n\nNODES = [(-2.2, .06), (-1.3, .17), (-0.6, .27), (0.6, .27), (1.3, .17), (2.2, .06)]\nPROBE = 0.01\n\n\nclass Strategy(BaseStrategy):\n    def __init__(self):\n        self.n = 0\n        self.ahead = set()     # main orders placed strictly ahead of any competitor order at their tick\n        self.res = {}          # order id -> uncovered quantity at placement\n        self.bc = None         # belief: sub-tick grid centres (ticks)\n        self.bw = None         # belief: weights\n        self.st = 0.5          # last one-step sd in ticks\n        self.pcb = self.pca = None\n        self.pb = set()\n        self.pa = set()\n        self.tb = 0\n        self.s = None          # competitor spread parameter\n\n    def _oid(self, tag):\n        self.n += 1\n        return tag + str(self.n)\n\n    def on_step(self, state):\n        H = max(1, state.steps_remaining)\n        cb = state.competitor_best_bid_ticks or 0\n        ca = state.competitor_best_ask_ticks or 100\n        if self.s is None:\n            self.s = max(1, (ca - cb + 1) // 2)\n        lo, hi = cb, ca\n        for o in state.own_orders:\n            if o.side is Side.BUY:\n                lo = max(lo, o.price_ticks)\n            else:\n                hi = min(hi, o.price_ticks)\n        if P['pinf'] > 0:\n            sb = {o.price_ticks for o in state.own_orders if o.side is Side.BUY and o.remaining_quantity <= PROBE + 1e-9}\n            sa = {o.price_ticks for o in state.own_orders if o.side is Side.SELL and o.remaining_quantity <= PROBE + 1e-9}\n            ea = self.pa - sa\n            eb = self.pb - sb\n            if sa and ea:\n                lo = max(lo, min(max(ea), hi))\n            if eb and (sb or min(eb) <= P['p1t']):\n                hi = min(hi, max(min(eb), lo))\n        if P['jumpinfo'] > 0 and self.pcb is not None:\n            if ca > self.pca + 1:\n                lo = max(lo, ca - 1)\n            if cb < self.pcb - 1:\n                hi = min(hi, cb + 1)\n        self.pcb, self.pca = cb, ca\n        if lo > hi:\n            lo, hi = hi, lo\n        # sub-tick belief over p_(t-1): predict with one-step noise, truncate to [lo, hi]\n        wid = max(hi - lo, 1e-6)\n        nb = max(2, min(48, int(round(wid * P['bins']))))\n        cs = [lo + (i + 0.5) * wid / nb for i in range(nb)]\n        if self.bc is None or P['filt'] <= 0:\n            ws = [1.0 / nb] * nb\n        else:\n            sg = max(self.st, 0.6 * wid / nb)\n            k = -0.5 / (sg * sg)\n            ws = []\n            uni = P['uni'] * sg\n            for c in cs:\n                t = uni\n                for ci, wi in zip(self.bc, self.bw):\n                    d = c - ci\n                    d2 = d * d * k\n                    if d2 > -12.5:\n                        t += wi * math.exp(d2)\n                ws.append(t)\n            tot = sum(ws)\n            ws = [w / tot for w in ws]\n        self.bc, self.bw = cs, ws\n        mean_t = sum(c * w for c, w in zip(cs, ws))\n        var_t = max(sum(c * c * w for c, w in zip(cs, ws)) - mean_t * mean_t, 0.0)\n        phat = min(max(mean_t / 100.0, 0.002), 0.998)\n        var = P['sig'] ** 2 + P['lam_j'] * P['sig_j'] ** 2\n        sd = math.sqrt(H * var)\n        self.tb = self.tb + 1 if hi <= 1 else 0\n        if self.tb > 0 and P['zd'] > 0:\n            # below the last tick there is no probe: the score keeps walking away from it\n            phat = min(phat, max(P['pfl'], cdf(inv(0.01) - P['zd'] * 0.02 * math.sqrt(self.tb) / sd)))\n        z = inv(phat)\n        Z = z * sd\n        sp = pdf(z) / sd * P['sig']\n        self.st = sp * 100.0\n        s = math.sqrt(sp * sp + var_t / 1e4 + 1e-8)\n        sd1 = math.sqrt(max(1.0, H - 1.0) * var)\n        jp = [(cdf((Z + n * P['sig_j']) / sd1), w) for n, w in NODES]\n        lj = P['lam_j']\n\n        def AB(x):\n            k = (x - phat) / s\n            a = s * lpm(k)\n            b = a - (x - phat)\n            ja = sum(w * max(0.0, x - p) for p, w in jp)\n            jb = sum(w * max(0.0, p - x) for p, w in jp)\n            return (1 - lj) * a + lj * ja, (1 - lj) * b + lj * jb\n\n        if H == 1:\n            def AB(x):\n                return (1 - phat) * x, phat * (1 - x)\n        rho = P['lam_r'] * 0.5\n        mu = math.log(P['m']) - 0.5 * P['sig_n'] ** 2\n        kA = P['kL'] if phat < P['pL'] else P['kA']\n\n        def qsize(loss, gain, px):\n            loss *= kA\n            if gain <= 0:\n                return 0.0\n            tail = loss / (rho * gain)\n            if tail >= 1.0:\n                return 0.0\n            return min(P['qmax'], math.exp(mu + P['sig_n'] * inv(1 - max(tail, 1e-6))) / px)\n\n        ptk = phat * 100\n        def qbid(t):\n            if not 1 <= t <= 99:\n                return 0.0\n            a, b = AB(t / 100.0)\n            if phat * 100 - t < P['dmin']:\n                return 0.0\n            if P['nb1'] > 0 and self.s == 1 and t == 1 and ptk < 1.0:\n                return 0.0\n            if phat < P['pL']:\n                ytg = P['ydem'] * min(H, P['W']) / max(ca - 1, ptk + 1) * 100.0\n                a *= (P['kLb'] if state.yes_inventory < ytg else P['kLf']) / P['kL']\n            return qsize(a, b, max(phat, 0.05))\n\n        def qask(t):\n            if not 1 <= t <= 99:\n                return 0.0\n            a, b = AB(t / 100.0)\n            if t - phat * 100 < P['dmin']:\n                return 0.0\n            if phat < C.get('scar_p', .1):\n                a = max(0.0, a - C.get('scar', 0.0) * (1 - min(1.0, state.yes_inventory / C.get('stock', 3000.0))))\n            return min(C.get('askcap', P['qmax']), qsize(b, a, t / 100.0))\n\n        bids = [o for o in state.own_orders if o.side is Side.BUY and o.remaining_quantity > PROBE + 1e-9]\n        asks = [o for o in state.own_orders if o.side is Side.SELL and o.remaining_quantity > PROBE + 1e-9]\n        sticky = P['sticky'] > 0\n        def top(orders, comp, step):\n            if sticky and sum(o.remaining_quantity for o in orders if o.price_ticks == comp and o.order_id in self.ahead) >= P['min_ahead']:\n                return comp\n            return comp + step\n        bid_t = top(bids, cb, 1)\n        ask_t = top(asks, ca, -1)\n        qb = min(C.get('bidcap', 3000.0), qbid(bid_t))\n        qa = qask(ask_t)\n\n        Y = state.yes_inventory\n        if ask_t == 1 and H > P['H1'] and P['pre'] > 0:\n            qa = qa if Y >= P['a1'] > 0 else 0.0          # let the competitor's 2-tick ask erode instead of fronting it for nothing\n        # ammunition: hold YES so that low asks are covered\n        ptick = phat * 100\n        amt = 0\n        qam = 0.0\n        if P['ammo'] > 0 and ask_t >= 2 and phat < max(P['ammo_pmax'], P['pmaxf']):\n            wealth = state.cash + Y * phat\n            x = max(ask_t, ptick + 1) / 100.0\n            capw = P['fy'] * wealth / max(phat, 0.005)\n            target = min(P['ydem'] * min(H, P['W']) / x, capw)\n            full = min(P['ydf'] * min(H, P['Wf']) / x, capw) if phat < P['pmaxf'] else 0.0\n            t = max(1, min(99, int(math.ceil(ptick + 1e-9))))\n            g = t - ptick\n            if Y < full and g <= P['g_hi'] and bid_t <= t < ask_t:\n                amt, qam = t, min(P['qf'], full - Y)     # a tick p has just crossed: nearly free\n            elif Y < target and phat < P['ammo_pmax'] and bid_t <= t < ask_t and t / 100.0 - phat < P['ammo_maxpay']:\n                amt, qam = t, min(P['ammo_q'], target - Y)\n            elif Y < full and t >= 2 and 1.0 - g <= P['g_lo']:\n                amt, qam = t - 1, min(P['qf'], full - Y)  # rest just under p: filled only on the crossing, or by retail\n\n        if P['pre'] > 0 and ca == 2 and phat < 0.01 and H > P['H1'] and Y < P['pre'] and not qam and 1.0 - ptick < P['pre_gap']:\n            amt, qam = 1, min(P['ammo_q'], P['pre'] - Y)\n        q1 = 0.0\n        if P['ydf1'] > 0 and P['m1'] < ptick < P['g1'] + 1.0 and amt != 1:\n            q1 = max(0.0, P['ydf1'] * min(H, P['Wf']) / (self.s / 100.0) - Y)\n        # order management\n        actions = []\n        free = state.free_cash - 2.0\n        keep_ask = 0.0\n        new_b = []\n        new_a = []\n        def cancel(o):\n            nonlocal free\n            actions.append(CancelOrder(o.order_id))\n            x = o.price_ticks / 100.0\n            if o.side is Side.BUY:\n                free += x * o.remaining_quantity\n            else:\n                free += (1 - x) * min(self.res.get(o.order_id, 0.0), o.remaining_quantity)\n            self.ahead.discard(o.order_id)\n            self.res.pop(o.order_id, None)\n        for o in state.own_orders:\n            if o.remaining_quantity <= PROBE + 1e-9:\n                cancel(o)\n        kept_ids = set()\n        def manage(orders, t, q, comp):\n            kept = 0.0\n            for o in orders:\n                if not (C.get('recover', 0) and o.side is Side.SELL and t < comp and self.res.get(o.order_id, 0.0) > 1 and state.yes_inventory > C.get('recover_yes', 1) and state.free_cash < C.get('recover_cash', 200)) and o.price_ticks == t and q > 0 and kept + o.remaining_quantity <= max(q * P['keep_hi'], 1.0):\n                    kept += o.remaining_quantity\n                    kept_ids.add(o.order_id)\n                else:\n                    cancel(o)\n            return kept\n        kb = manage(bids, bid_t, qb, cb)\n        ka = manage(asks, ask_t, qa, ca)\n        add_b = (qb - kb) if (kb < qb * P['keep_lo'] and bid_t != cb) else 0.0\n        add_a = (qa - ka) if (ka < qa * P['keep_lo'] and ask_t != ca) else 0.0\n\n        budget = P['fb'] * max(free, 0.0)\n        cost = add_b * bid_t / 100.0 + qam * amt / 100.0\n        if cost > budget:\n            f = budget / cost\n            add_b *= f\n            qam *= f\n            cost = budget\n        out = []\n        q1 = min(q1, P['f1'] * max(budget - cost, 0.0) * 100.0)\n        if q1 >= 0.01:\n            out.append(PlaceOrder(side=Side.BUY, price_ticks=1, quantity=fl(q1)))\n            free -= fl(q1) / 100.0 + 1e-6\n        if amt and qam >= 0.01:\n            q = fl(qam)\n            out.append(PlaceOrder(side=Side.BUY, price_ticks=amt, quantity=q))\n            free -= q * amt / 100.0 + 1e-6\n        if bid_t >= 1 and add_b >= 0.01:\n            q = fl(add_b)\n            oid = self._oid('b')\n            out.append(PlaceOrder(side=Side.BUY, price_ticks=bid_t, quantity=q, client_order_id=oid))\n            free -= q * bid_t / 100.0 + 1e-6\n            if bid_t > cb:\n                self.ahead.add(oid)\n        if ask_t <= 99 and add_a >= 0.01:\n            x = ask_t / 100.0\n            covk = sum(o.remaining_quantity - min(self.res.get(o.order_id, 0.0), o.remaining_quantity)\n                       for o in asks if o.order_id in kept_ids)\n            cov = max(0.0, Y - covk - 0.1)\n            unc = max(0.0, add_a - cov)\n            if unc > 0:\n                ub = max(0.0, free - (1 - P['fu']) * max(state.cash, 0.0)) if x >= P['xu'] else 0.0\n                if H < P['Hu'] and phat < 0.05:\n                    ub = max(0.0, free * (1 - H / P['Hu']))\n                ub = min(ub, max(0.0, free - C.get('reserve', 0.0) * min(1.0, H / C.get('release', 50.0))))\n                unc = min(unc, ub / (1 - x))\n            q = fl(min(add_a, cov + unc))\n            if q >= 0.01:\n                oid = self._oid('a')\n                out.append(PlaceOrder(side=Side.SELL, price_ticks=ask_t, quantity=q, client_order_id=oid))\n                r = max(0.0, q - cov)\n                self.res[oid] = r\n                free -= r * (1 - x) + 1e-6\n                if ask_t < ca:\n                    self.ahead.add(oid)\n\n        # probes: tiny orders that the arbitrageur removes when p crosses them\n        f = int(math.floor(ptick + 1e-9))\n        r = max(int(P['rmin']), int(math.ceil(2.0 * s * 100)))\n        self.pb = set()\n        self.pa = set()\n        if free > 1.0:\n            for t in range(f, f + r + 1):\n                if cb < t < ca and 1 <= t <= 99:\n                    out.append(PlaceOrder(side=Side.BUY, price_ticks=t, quantity=PROBE))\n                    self.pb.add(t)\n            for t in range(f + 1 - r, f + 2):\n                if cb < t < ca and 1 <= t <= 99:\n                    out.append(PlaceOrder(side=Side.SELL, price_ticks=t, quantity=PROBE))\n                    self.pa.add(t)\n        return actions + out\n","code_sha256":"baef955ec10728839f7c3357016ec9eb0550e7ec689bbd5171b1cdd5c9e37273","incumbent_code_sha256":"bf0d179f3e47d28819f6fa7e0d25548c2ced43374c216d36460b00a26a26ffae","tuning":null,"paired":{"n":500,"sum_d":230.57214797470047,"sum_d2":483842.1845811126,"mean_diff":0.46114429594940093,"se":1.3924155530393103,"C_mean_edges":{"total_edge":104.87489748409621,"retail_edge":129.99902116535898,"arb_edge":-25.124123681271403},"B_mean_edges":{"total_edge":104.4137531881468,"retail_edge":130.94495206588002,"arb_edge":-26.5311988777306},"retail_diff":-0.9459309005209994,"arb_diff":1.4070751964591999,"seeds":[410000,410001,410002,410003,410004,410005,410006,410007,410008,410009,410010,410011,410012,410013,410014,410015,410016,410017,410018,410019,410020,410021,410022,410023,410024,410025,410026,410027,410028,410029,410030,410031,410032,410033,410034,410035,410036,410037,410038,410039,410040,410041,410042,410043,410044,410045,410046,410047,410048,410049,410050,410051,410052,410053,410054,410055,410056,410057,410058,410059,410060,410061,410062,410063,410064,410065,410066,410067,410068,410069,410070,410071,410072,410073,410074,410075,410076,410077,410078,410079,410080,410081,410082,410083,410084,410085,410086,410087,410088,410089,410090,410091,410092,410093,410094,410095,410096,410097,410098,410099,410100,410101,410102,410103,410104,410105,410106,410107,410108,410109,410110,410111,410112,410113,410114,410115,410116,410117,410118,410119,410120,410121,410122,410123,410124,410125,410126,410127,410128,410129,410130,410131,410132,410133,410134,410135,410136,410137,410138,410139,410140,410141,410142,410143,410144,410145,410146,410147,410148,410149,410150,410151,410152,410153,410154,410155,410156,410157,410158,410159,410160,410161,410162,410163,410164,410165,410166,410167,410168,410169,410170,410171,410172,410173,410174,410175,410176,410177,410178,410179,410180,410181,410182,410183,410184,410185,410186,410187,410188,410189,410190,410191,410192,410193,410194,410195,410196,410197,410198,410199,410200,410201,410202,410203,410204,410205,410206,410207,410208,410209,410210,410211,410212,410213,410214,410215,410216,410217,410218,410219,410220,410221,410222,410223,410224,410225,410226,410227,410228,410229,410230,410231,410232,410233,410234,410235,410236,410237,410238,410239,410240,410241,410242,410243,410244,410245,410246,410247,410248,410249,410250,410251,410252,410253,410254,410255,410256,410257,410258,410259,410260,410261,410262,410263,410264,410265,410266,410267,410268,410269,410270,410271,410272,410273,410274,410275,410276,410277,410278,410279,410280,410281,410282,410283,410284,410285,410286,410287,410288,410289,410290,410291,410292,410293,410294,410295,410296,410297,410298,410299,410300,410301,410302,410303,410304,410305,410306,410307,410308,410309,410310,410311,410312,410313,410314,410315,410316,410317,410318,410319,410320,410321,410322,410323,410324,410325,410326,410327,410328,410329,410330,410331,410332,410333,410334,410335,410336,410337,410338,410339,410340,410341,410342,410343,410344,410345,410346,410347,410348,410349,410350,410351,410352,410353,410354,410355,410356,410357,410358,410359,410360,410361,410362,410363,410364,410365,410366,410367,410368,410369,410370,410371,410372,410373,410374,410375,410376,410377,410378,410379,410380,410381,410382,410383,410384,410385,410386,410387,410388,410389,410390,410391,410392,410393,410394,410395,410396,410397,410398,410399,410400,410401,410402,410403,410404,410405,410406,410407,410408,410409,410410,410411,410412,410413,410414,410415,410416,410417,410418,410419,410420,410421,410422,410423,410424,410425,410426,410427,410428,410429,410430,410431,410432,410433,410434,410435,410436,410437,410438,410439,410440,410441,410442,410443,410444,410445,410446,410447,410448,410449,410450,410451,410452,410453,410454,410455,410456,410457,410458,410459,410460,410461,410462,410463,410464,410465,410466,410467,410468,410469,410470,410471,410472,410473,410474,410475,410476,410477,410478,410479,410480,410481,410482,410483,410484,410485,410486,410487,410488,410489,410490,410491,410492,410493,410494,410495,410496,410497,410498,410499],"seed_start":410000,"seed_end":410499,"requested_n":500,"complete":true,"split":"holdout_reference_replication","by_spread":{"1":{"n":115,"sum_d":-145.51688112160008,"sum_d2":13264.505627801056,"mean_diff":-1.2653641836660876,"se":0.9988694516361858,"C_mean_edges":{"total_edge":27.229790276065216,"retail_edge":45.12374444698783,"arb_edge":-17.89395417088348},"B_mean_edges":{"total_edge":28.495154459731307,"retail_edge":45.3633048658487,"arb_edge":-16.868150406068697},"retail_diff":-0.23956041886086843,"arb_diff":-1.0258037648147826},"2":{"n":116,"sum_d":-148.78929725529986,"sum_d2":20494.702410464673,"mean_diff":-1.2826663556491367,"se":1.2337050457016465,"C_mean_edges":{"total_edge":96.48359612382845,"retail_edge":128.17667152654053,"arb_edge":-31.693075402730173},"B_mean_edges":{"total_edge":97.76626247947758,"retail_edge":132.18024020395777,"arb_edge":-34.413977724490515},"retail_diff":-4.003568677417244,"arb_diff":2.7209023217603447},"3":{"n":138,"sum_d":95.86738232410003,"sum_d2":36456.5836041443,"mean_diff":0.6946911762615945,"se":1.3873662129979172,"C_mean_edges":{"total_edge":129.100142579,"retail_edge":153.35783855561158,"arb_edge":-24.25769597665652},"B_mean_edges":{"total_edge":128.4054514027384,"retail_edge":154.66101846100653,"arb_edge":-26.25556705829203},"retail_diff":-1.3031799053949262,"arb_diff":1.997871081635507},"4":{"n":131,"sum_d":429.0109440275004,"sum_d2":413626.39293870254,"mean_diff":3.274892702500003,"se":4.91991905733807,"C_mean_edges":{"total_edge":154.94737430560687,"retail_edge":181.51453704979238,"arb_edge":-26.567162744189314},"B_mean_edges":{"total_edge":151.67248160310686,"retail_edge":179.99669894724732,"arb_edge":-28.324217344138933},"retail_diff":1.5178381025450411,"arb_diff":1.757054599949618}}},"failures":[],"failed_seeds":[],"missing_seeds":[],"exceptions":[],"seconds_per_simulation":0.6378463033342269,"timing":{"first_10_pair_schema":["seed","B_seconds","C_seconds"],"first_10_pairs":[[410000,0.640923592960462,0.6471576930489391],[410001,0.6098167379386723,0.5786957549862564],[410002,0.5150368888862431,0.49708871892653406],[410003,0.6364105071406811,0.6228257280308753],[410004,0.6327179239597172,0.5816415750887245],[410005,0.6748118929099292,0.6742000370286405],[410006,0.6154120799619704,0.5816041028592736],[410007,0.6978404531255364,0.6888639740645885],[410008,0.6203096699900925,0.5844091440085322],[410009,0.6446950170211494,0.6230046621058136]],"first_10_seconds_per_simulation":0.6183733077021316,"timing_pairs_included_once":true,"attempted_simulations":1000,"completed_simulations":1000,"simulation_seconds_total":637.8463033342268,"loop_wall_seconds":638.0686073109973,"wall_seconds_limit":2700,"stop_reason":null,"measurement":"time.perf_counter around each fresh load, engine.run and return checks; excludes source fetching and statistical reduction"},"simulator_commit":"b244530ee2a6247b5f930830eeca9dd950da0e7e","fixture":{"codec":"json-utf8+zlib+base64","payload":"eNpNnQmSYzmuBC+kknFfzjI297/GuIMic/rbt+mqTErvkVgCgQD7P/9pOfHPp37K+pade0pj7v6p+1vWSG2tVvvnX07fvVtvK4+a//s5q/KnfGqZ38qyucss41NH/fLvKTf+cn3+1fHNa/IROe9615VP/qTvHH2lssqun/wtffNlfM7nX/q2XflJWqPcFTzdJ6fNT/Le/NE1NX3H2L2X1Pf8/Cv5m+fso6TyHrCxrH9HKi31NHneXL45rzLaWDN//o1vz33x1fzdXdM/rOKB9s5tr8ZWsDEz9zx34+s//+a3ZT5y9/33RoMv2u27e26ztNIb39S/qYzFN9W62Yj0TbPX2Vra77sm3zX3d7VVd+Od62f3b0ul8/bTl8r92zu/Osde/a5abkb9sl17NL6AvRjfuVIec2Ye5V/9zsoncH6j3UWbr2r8Wh+dX0ssautbO5vJQp73X459aqnmdJ8vJ/cite/Ig20bgwMulUeanDWHGgeMYfQx0uIRx12XMaeOIQweJ9W1y2fE62esqbR5Nr7lwhu3t6i46FvLYq+HR54377E5rJQrb5UbG88/peW775m3+NQ1+SYMA9vlRdi+786jYRQenltYOZSxeLm7TLvIXdPkjLFo/jR5/80/fde5z8bn1VOrqc+7TNOomQPC3HsbZeslOWFAs/BcmsbEzErmm68N5oGx1/ptc6yVepl8SP3Whf213AYbv3ncjJFghPsumuxF5rU2Vjf50dYkMUZMrvbFBjY8ZmV8pjx35DQwu4kXj1I6D4Sh5O0hu23sO99VOAb8kpfMdd11vMZn5fXlaVizx4f3/vaFZ/MxnS2seo37hPH8FhUjBt/PkaTCd1Xeq5T2TZVDGHNVTIPIMAqm3T2Muy5rhxXP5XlrGnx5a182k13kRbPuv3g+XGfse15F06g4FJ5VlyfJlrKMo1qJqKSjbM4Lzyvjz6JKRA2eva1C8Bi6MsFlYswzbW2ezSm18RTl7wHZww92+l3sfK6EAT6l1O9iuwlKfelffPXE8fjEfXexaByrf/PoBZvdGAeb+d2p98RWrsp+4JdYJ4ZX29vH4avV+WUHcaHePY0+v/gQ0Wbcd1uTv6xp1+uaJSxklW/TTPsiDvKYvA+PPnDUiTW2/l2DqJdmfSGxaCTEaEJeyQWbJACx/2w98Zu4G5Hen8291wsEWvrHx6+Dp8DzOcPynXNgmn2XGs9IVB6JaJruu1VthATgHhOqcNFP57v6KrzJHjwhRsfPJsZYXnjDBjhdDk2Xxmh50S8eSmLZBWcyPazeWhtz3IPGf/k/Ptro4JPzAeVrWCZ2xIkRs9kizANXvYuqB034msQhTNHcY0zgiCa5in84sUEMx5gx4/K+TAPhKYwHnK4pIX19wdwLx+SPyHbsAsuuAVeNg3P4Em+IbRV/ia8upErywTTDFs6yadAG07tunO/SgMmoOHT6Zr50LCLy8icjIhv79F5ravTElFWw647/nYPbyeQ4Z2SHjlWQbv/eaZ3vYSdwjoTl8UX8wLReZ2w6jodt7XVDb9UkZuTqrSFg4Iujxh3Jm4ZKQyihvGPYo96nawE0CJo6YF2ZKI8zcZpkaHaPVf1bMNc12nxrhBn/FlbQmz8CF7CXJgNy5CKLmLxw2IT31FxKuq7cNAssEwRAYo68lD9zEG7Jp9VgYYwqX62WD+4vkrYwDV4N0ygVg//4SyIhnNuPJBxmQv6fWzWNAjMikvEbICU2gKj99WH58KmxL0AFnq+xPTdu/RMwhAzALnIgEaJ40DRLOKsmiIOR61t5cKMZNAyiaZhWWPdpnDhIKGOTRBA+kRDTcS1S0V0k2GCzkyGo8br8OeP5uBm72QPY9IqXDsz/rjFaEFWIioNgjSt8RF1ZNEUQ9vFIFLzgGLm+L9qiLqI1hlAnL9b546y+I9mR48JH2gROEnQIHi+C9uReZJ19GDUJ1+OL1xKqiN7TaI2HgTXGH5TsIo1WDJ9kLx4piXIa9j7JcWyA2Wt+A64RG96+d01jFM6HqGvqWZ9FBhlCyVWFhkWsJKTd8+8JhRuL1AuEW0CqPj67ii52wsKAVORy8iowCf+829F/8QJIAnbChA0XbLFmZpTWtdg9Mkm9295/QINXBSITwAMzTFIpico0TlJLK4fNtrcVwxiDm3ST2BSeBlgDtfJomDjrujEG3Nb5/ete3UwCugCAEmJ3mCBpjEzaeMgaAYOYKk6YbyMCamBk1YhBCDD5gFZ2wfjNKRhgoYwA4QCU7qJ9NmLw7cBd0OBHzFnFbib+QjgUB2DVvxXDaMEzc7aiIz7tQ4BmR/GoAmiOWMbpgV/bPdkhwChz6gCzie3wRCAhR46vVBPnP1IFCHjyscTBu678wjoryFw4N+cEksJo8ignrLPdxee4S6o7p50TWptoBizKwZAVN8tmnBNxmq3/810QH9GF42x8GKuoXkg7fIiBbQPpzrLmaQfeu+u6X8YPsI618HMsHycSCfDPOpCVKDEAcOMtCpsgoxN0AIEAuMkfzf5AEk4Ab2ELhxmTnNTu8Y55Kgy2mMBKLGZHOVCz5+KxjwGeUoZnuYY0VkTNae60HCAg4inDSovQFmks4/GcQX5fZFUC2CTN8ybs4o6UAvBgn+s8gBUjduf/PGoGrphfYzMn1ITU+JdYbWu3mtIG703z8fWpqV1gS+x1FVEv/L9b2OCRxECjOmdCqPG1XlyfxomchaTZfMgqnqgbI0AgIyDkAJVV4Oi8ZjujKsH1KCo4VmLcirqYw6WwPZZBUKV2M4bgjXfdKUuw6UUFyBcSKXHHL6Ar6zAEqX8kHiIu/tB493vMM7An/ghkY7s53UwyJlwCAorh07yKr2XMlDBU34NGHiGELbMcjowtsj0YNI/a+TfM3sJtN06ZRPv2cp5ikuDUfQtiGhZc6yLULD2QXQFjYKbpL87MizFAjJw2r4iDcdCsnu2Amcyzb+HMe7EdDAMFKGCKCpiyC3RMVuhWrhxvO8UJP8MJ63PmdQpX4vvGiUgnfA6+QwFFCOh9B14lYpcpXrnftkwmdVlmgNc5bJ4KizCJy2eI/P4BH/gNY1Hu14o1io8VA1ZgeFg5qn++ikDFc+WgQXYV7XM+b1kNGoS8R0IjJuo8BEBzR+2RCSkAkmD+BbelhbDvvJXJxC8iHpLptxCO7AP6yLrP24jAF1ZOuGXRuIn2QizqlepnxwFbKE+z5/seDYNfou4gQg1BKaiNLfOLAUERrrdUijh0lnvGVKY8UtRiRM3YJeLI8ICI11aXvNYgA1BhFOL+23nzibX0kgPiUKoezSPx6m2N2Iyu+WJ6NwqsHd6CobUqCUT9na3ntFTqoRbYhFKFcEwI+y3aKYoLQoDVFjb6WRF8sNRTVc8A/zz33YptOWKA5q9lxngK4HWV88Jsa2Quoj6FtlVvf9TEjsixgYpVKL5NVxZoYpLhe+VAJvo1+85R3nUWrUAOwt7CcodgZGny0j28lyVQ52OoEtjU/qr43Q7uN70TYVhsYZ0iLrcuDrJAsqgGFN6IY0X8wcLBjPgjWbQbFImdhGKyeVBJuNbuYp+3hyYVQDHmaXlBWYW1dL65VP6ihv8TbTjxSZH1fzsSJWs1KYA1QA0YL7h6a2PDkkMuic+reEx/Jr8NG11EV8UdOTwNQyDtlUh7QlrA+KRgHNcOhT7CO4IYoYLtWOJ+sAVFLVswI9hrxuxMvbCfdcchU/hTOggAMEDo4WMMUDgXhz4IQ3dJhAwwDRgUPIGrWPC2IIAAjsV6BpOd1ugXIOdUgpYkxPCyoD4MqgXGIVrLlQl02QFSdtt3iVahw+2I1DWSEicziZ6jBQ5f/jveeJNrQGE+mXOKsIdJ8EVSC9ukI19mxBj+ECy537KoVeUOQLX40RK3TfI6J8leimcNKMI0jfOSmRKP7TO7Sb4YZKmaNjkax1oYo8xCERxQChFI19sLocZkjygicD0LXl5M2FuNsrpkdnWRO7trlpuO62cRXeFFqH+oZRpbiT816dYsYNnFOupZLlUEB8x+EH+IZpQo/OGXMokgAcWjcKe6/a0IBpT9I0hgXYsd4Ksm+Qg0TPA7YIPUx/JGtTTueeV8aBZWcGAb8PIZFBSDvIJ99ziwbXgnEl3mQwbRHFCaDAmm1D/BpeOHcwV5R4rFtNiYS4zLI0Q9zdEna21qZQInOZUtHIe4JwLxIT3JctxVgUF57r5l9CnBJA5N9FSrFIZgzX+ycklXxMveuv4DNqRAttVamITjFgbTHTxQsJakdODJzUIAT7EXaGtK9kyKzA/xArMA8gjU4pQH2J/Vz3zzAaH6KZEJu7FtEDCDuqkSXVZYFHsjHzgur0NOYheXHDX5eIquLah5//FLJKROyqTcr1VIQX6mdBYhxb5F/ewUHHcShbkGA+W0wCD5kls5CFAwUDPpzxolEd5EvYBt/aomyhTLwktI5JIjrfJNS75zyGwQzNi7aiqNEIPDAVX4nOsh5XRLhJhWMEQYkZwcOb8ULxQsKBHm5gLiv+eLq3cyUh8rSM0pp7t8oR5Asn6lLbbJ825daeFYRPJhiKiem3EdAI8LpxyEnf2bAuR8Llz6D9ht1uG3BCdRTQd5isEjbpIqRrchc9eMQ3BT/lfzNxZBetrmEuxgBJVOfJHOu0ZUgr8winfyCvW8u0/AIJVvETCxTEgzxfDXfYutEmpBNrvwg0l+i6Od0TSKFwL0U7W2brfnrgpksaxwsE7gThb0TzECXy59YRkGEACrXQiTawroww8AGZIAK6K69XQSCofH75MYnmME1ykgKuLZhX8VwZK0FhVZILpuPKPQug/H7hKR8KWKQ5BuwYAguG33R3r6NjyolXHcy5DmIDt52Rx8XR5yORarHAS7YioVmGm/7otWcxeaRLacfCG6LJE04AdsvAuIcketxSEQ9NOji4mSUatm6ym8LUnDFPO0QYGq4Fcad+wK1HRZBYN/FZ2Sufi47omDkCjj9fcdEOZrCmrkj3fEVbNgm9a0OE/RxpTSJ11EiMiiBdAKLtXftkcHjYKeCJ7IBhFZMCz+VbwYWZsYYd58uaNGA21+xdACdP4syGlUapyXnFv7WraJKPbdvaA7CU1fS+8iXJukyP4VxlrdaIG4qWcN5qnjrYsuCfYDjNzDqI+121DDY4cI1/iybYcJCi+rleUB9V82kNfQcuWNZFAthHOLbCAGknhsdzdaPZUxTtia9T1vZhNpA4+zhyCGScIO0vJ7woCbX+liANxu5tUqqcrJSYKTW0hJ7A5B5S4RbJKrKCBmMjab622tWg1aAC7SLKWvFPtlIAF1xxeX7WQOC5RhOwSIXuWPo2+JT7KzHPr7JpEmOPfrXpEdhtwY1s13ZsGc1ZVgREPnlfdbF7QW2JstqlZBpKBWDCtNUFhMixYPxfbFrSkCyEb8q4WIwEEb/ihiJyHb9o2wsRtA5yW2yEaHc2PvKa/Iat20YIVEUuwpCNxp22DytDc6G4bwqm2HQmZOHCQ9wKGIPexA/cN7VtSABrW7TriJcW4rOVsC9sRkfIdHFaE2SxtRJMz3XfUUZOLEsm3iBnFOPMeQIruxuXNqMASPu6gFWOKwUrHssjXCc7Axdh/s+cT+AbgJv/K6d12PXhZFPn6R7YVHMmDTu5XHCjYRRLQMcnfNrzMS3C07O5utEUs/q5WTdPhXcdCLL11EgYvyVsboJgURRW63IpN4CL4JkxAHPPVBDrZT6o0ykbel7g7OCvMj8Y90Op2GqG3qvZbbd7AJVt4GffbJVeIpqzr7gRwDbyXv3154H8nagHqPw/CZrJpItYIW7LilaFkQ7sUz1Bc3Ckq2fY5Go1oAk0+zbXC7NgD4cJMdZssH3f0Y5WTUIpdl37pHSlh+wg5kQfozkaR3xGoNPnoE27CqRWwzviS5wR9nIU7GWd9JBeHZBPU2/21pBnWET+J43WAL0pQ0Hu7SXdQP6BlmaoqMYT9qWigqPIjT9WWGFOJdMqLb06JPtDhC4p/hj6JWLcmSnucULH9WFDxv4Y8Al9wkelnHRATAdNs4+93ksXja93jrVHCDgmuI6qOnz/OLbNZxD3IUUcpy4i7a4b+2TbspXoDbbYNIEAbAr5g51SHx8J7rTME/UhRoDb6xsGIQDokVsnk1fL4LBedfWTpzbN+yIq+c6wgQbPgTMAkr2D4gnEH4LhFmyvvb4yZHSBR/NfERTnUYfRLaMm7cNUYJ6g1VCngkFmuGJMRwmgAG2UPq+6BXH4eFj57SyOZ6S1ZGc4Xn8iySIso8rNRneY/WT/G7F5hZY8a0+V/J+x4SlFiQBbJvAwwPhXPEXkrIM/BGkAGgyIJPh5gEUla4ES9FBbHJe2MfvchRiZsJJGqRsnoC89qUH3jl8oycYYMhq2+hdIusVrKImbrlMF5YsLXyuAoPNuyUAkB/Po/tbqcRmopakODlQqtjG/lqk/IKODGy1CIGsMw1JBUyqgUe8WxG3SYGTgqhboZfv5a6nVqrP+KSyBvgciQyglv+LGF5n29FbFDPQoQiFIpIqvEg4noJc0jWmPrSXSNJAXz8WmLsITr9DEukYeozW7B/QwiHo/DDu+vBagqdp0IxLCWgM78+RC1mKBxjGXH++jU5mE0zl4+Bb1rQuhFF0jOdRvKWsmAn3poAmCIdWfmmZqLaDEluy7aWx+Q3toyFvJC3AkwQOPgrkSQxDOS37ExydqcsUgRVAEiqsd66Yxgak0Idst4MT1YeQ8m4lSWQYId1G0jtGvvaJxrZWsHOhrqSGY1jEmi82CkROkfH3v9W7UNdEZETFTY+yh/wJjBgz9G7wu7ZTxUfd0U+my4qtdVUwq2MjYeldi+mMNqm9HX4rVVgxF9LLh+ICEAI1P+ikRJ0yFCWR7qifLpwIkhNccGwVWbfIXwi6pcp8ze/ARgoap417ds3lSHAWE9ZGfKn/auVrds6of054+5h6NMMFLhCkK86wawYRmuPUu78oaMdPZCufm6Idth/EQJ5cthNiuyEC+Jh+zlHMJmqKogKUk4zSHUJl2xUOjibhyCAlL8wtgNGRLPFY/HDJxCwhDirunUe9J42W9vjGbb2wP4U7EeBVA6Wl1hJTdlCI1iC2ZQe37cCK+mns8AxAqAHEgH1SMxsyyKVQg3sZJi7a/JhNAZRcVIMUZz2kEvi/kdV0L/KANj8tt8XHYvIygqGAkLsldOXPFzEyRbKQtVT4v9681pR96HvSWF3TakHRNAPtjWhD6gYkcPnE++in0WUGtw3VWB0kKjylUcepA3Qtq9Q3xopq3/S8At8YTsStN6bdLqBrJtxsCJLc5xDq7sLg6HIITkIeV4zciiXpLCMqFlkXpSPkYnfHs5bC+ylGHQEoWzfj6CXTpPLTr90+r5rTt9UuZW9UVDCN7RfFBxHegOEEpyl/b7l1/pg77CCrjeoVOqqFWTI1XDZstIAb/kAsPCFghwESJ9ejaWnuHjIw4Z6ke+UabvbZ//m9OzNImWJw3pSE0kRskMJI7+O4b2viWpDqQaQIoXakzhsG5xgWaJiKxpZ0Ogq1+66enrO3T4oZkTSzyvyZhmYQDiipRuevW8QA6Vbuto3wtHUi82PZV63WJUmiJ3gdJIKs/5WRb0RYRRsabOB75pWrHydJZmuuAU/hop13b4EjUn8ItbbZlaiSq4QHPJLxKd1evC4ocLm/fbQskPW1GjOdonAbAfbUBWO5ICYFhM8U/v7thV6WNyGwrz6a0FJYSaAMLtAbBbWR5gdl4oT5ZSj1zGahSa1qRGTVJt2rqw5yNnBC95qtJQU0Tm7ucVa2uhsBLc9sU43F+8R1V2ZJDg1EHAdwgY+PtIvmYzop4gmisoph0oB8b5HGWfRNBO/uKQyS8hnmk8UqS1YA0+lvi8Ku+CsRJGqLn2jbotqhE7dthY1SooK9oaXEq0PCVDONnmQPXTM8c21RwlhsG09VJ6XGCr+2ocXVwWS7DGrGhjsYFXva90fzb5uxUZkvypO2wDuYPEtFLRM4OqUB86tHFghPFs5PWlGCTqT6l2Ve7WFOyQqbcFh+6MfjQXPZzcvvc0I4movWzpVSlXaNPLd7vN0jZsSan6U21xv2Y4IY4+XVFxI/eJygldZEZS6jaV48HdWR7sZOlc5+2U7UaHy0M1OQan+loouPwKg1F+0SCqOVzpFuXruIXsYAVoBSOSTu6ScEoIHm0K1Hek3UQJNxwaESOoBimqnG2KOctNsQRxe5hLVKAKs26dr6jsIKfPudo0iNMkEk+hl2iSImu/N8StQjpotiQAM1++r+hV72pdvKRSYRZaL/d/rZCO1DLztjWR1HD4tkOiwa2nvZ01Fq+tX4UhFE7kvEawkRKxMGlLShwOtz5ghpibkiTj/Sdn4AWC191IrQB8xi1MUUnOs0SYlyORD2xH6wLVPEkmkPhq7ImGG1aUWKXRIOUYOcBIjVyVjl3inSIuvwR1I8TYRbVKoZCFTzCPraScJvBXR5yA0yvRVn+HDlwlabAZOzyjaD1uS99VE5eg1wdLStXuGVp7cF6lMgZLtQNWc9uoX6OchlxZdMOnQItCIPqett5B7KWKR5dcIlLNfY22RO5bgddnqNBwNlWHLQmFsqZYqTMrSMG94oIRkkyi6eqgr7aWpDKPEWeojTZbNXr1jAXeJ4UHzks7C1vBT6iCSiOIKqxLlKCHOGArW7qr5OysyrdtGVDVvYtpr/QZR3IRphXtNQpHBSS5aJX5o3RYiCVt9vYa3F59XUm493NL2wWNdMbV9rhgAIjMmM485oNsvn9l0dKNeN280WQIMAVyuekAPKyH9MQkUpbf4cn/KyxIspuXdVGKj5sDoLlasNcpgLZ3YWtnxF426maOZeQkGGuo2HOWQeeJJZZ5RGYP0UIl1N76HYWRVF1lhHBkIiGSnr0pytBAqcKIcd5n5PWI7ZSKvRY4OYVsNKl6830MqxuGRE9jZ58FHs4m9RJPQrbLjyQMuB37G6SI2OROy5MMGfRycDoAIsRquUc3QAqwVkk2My261cPU93zEMTJyf8PayVNlTHcsoSBCVc1jGKRNmqu8ZV/RKbLrhQV3513AzDOlln9rNAJNUnL1H3Kd5C5ojHJILYpYH8BZiWbW8oTWW6X95dIT+KppUynLJYiHIDyp0qBf5p0gihxD0efGIqGGbWKZScQR/kURp/Jr6AJUvSXfdTcb0OuQohz62hUdgXzt6QIAk60R5LXMI++5k2ENKV7tJQRSdF/cCoyRzlmUrKTgyynwJhL9F7dfzlU0sFjgqU5SImthHuCSWa3B/TVX1tO6Fr++UjOX2B0sK8Ta+NX4lPcnccvH2m8r4EdxZpdJ27sL63vKI3Vnt6IbFTaL3u2YeFpgqgHfALQKVqS9KoZ46WUQFyV8tEapNm/3mW0pRvndKqPFrKq1bSBVJVbIlf+B0nIEQCrs5pUZtAFXVPDi7PE0KehvciNXkLk/6WzjDMrbjdcps7efwKUXw4shSDcXRLDrWvP0cfhrAsUakASJPZZkCak4O76o/FSC4aToxc/1kxkRZUpi8QkEiBU8q5nzwixRtFvzaWrf/TQ26a0cbyl4b7zAN5Vi2TEn6EvdSSDVI3FenlyPeZLdJxFU6NebX1HdONVJBPvC+RqfykEwwm87CKRW07Rla0zxsZEeZDphzsAsnfFE3qE25QgsSPKifRqQd7Rx8sAoMLGup2L/ndRSbUx7ZHrQ9cgIoGD1FMW0PK0Q9QDhj3IsYwW4aCjUUJZ0xNBDDAPs0qpajXCqX/uLn3EdHVXFHm4gxtALe6eqoTkFrEWZx8Vuxonlu68VeUwmqvDpLoTSy7tMr2aRhN/YVp+vMkvF0y6QIJtsh/neQLqhvmTmTBMHNmcy7GYfbFCcfmiOHlFpLcoLy6IdtmZOf/1DQkuv+NzZ5G+CsQsmBRctuw6LsZEzJFns61u6c9TXf4DdjUrColzN5KWO3+WynogZDrPw/+N67qAdiVbQqlt4xmMqxO68qwS+s4eWqUwCS33fzVxSpy2ztjJ1Ki6WC3nZIDpakgl22r/7owxIc5z/FNjsmfPGQmPAi9PKeNRitOSSQZojJ3kNe6kIFroBNYJSlltNMwTtaOQV2uwhlRR/dDm6fqh2D3rSDaafYEM/XOgqsxP35yT5tECdqraAtSKjY5ctVN/M2tuxDqYKZARveOguSZk42cBi1IiWr1CrxUhbvqrT331eFmNdT3pb5FJqEEOcVndAAm9vDNJMb5uWa7hbun8JCLceIkSc5mSZRtx1tZJlpk61wzO6tirkhIIkYp6tyIDg6pIFD2eTMMTXY7AQCDS9pqfjlhF/RDqkhlCPT+kyxqc0Xvs7G3lZI+Fd0hnRTXL5IA0meO6bSOB7HRWP72eQdkpr8ekPFZlDof7Em6riq6EKdNMiCvamx/UvdqJQ0hds1/C0axQg1bpsZIVZpZIWR1C6Gy7RAILyLwum7LmTfBlPzr21rexEWEDhVCq3rv6EOXs2MKuGzroaA819MwG71m9vqsp3x6tUOMct2ZrkED3PcdSHDmV/5davGckrfDX4a47RCp+k7apIbU2tQnznIxC0/xm6YAZKix+h7NqO+uIwkwq89wTj46mDFHnVNdNed25GqlW6cUcX7cSEFy3dVqPZqMCGgapnrmLoEGpXzckeVqXbmhpF6xtntpjiYqhYycJnTN6VEDyLmbVnH1r5v+mEPUi4Ij+ThOGBSdJZU3sWPhCvNTuhdM093U/m2sxAHyToxY+PGClb9xZCny7dcqTHKPhSX2mRQJT5BH4ZQtdTE3Bb69A4woBbe+R10EBpgQ8eY+f9qPFCaYb94KlmIct7XVQBw+wM1ONDQMRBsY+BTJXUzu4ZCVb53OKahmvGuyVHvVcVLPaBXEUEkW64mQDsMbAsFY35fU+44pSTkFHckg+dQFv5rXztl1FUF3TU1QtXSwZxQ3oFOz+DfCvlYEiOGIvPGtxr8Z7E5kH56tIC+VRVk7UcdU7zTgHTV3tP9Jols8xDGWg7KsC6RzumuE+ntUciEtrtoRE5vNSAYm2eDiW8E4Ecd5fCGoR6IdE0vhthjmpEzUBXoTAQ5R0a3B7bx+9L+66vX4Dyl2a0oZHDDEWuV2FYGfCJ2kVFoz/Ly4TTSEVQvi5xsnRx9rRCjxziVeeMJZ2twnkGad4c8yWnyTpaXXtJQg6X+xpUW1Wsb7qqQ9bLh1rEyr5WanGobg2sm1+AHzZMKHbDP+4ilPIlkc7J42cuSZufznUyyA7unI3Lt4rx6RJzK1ruDtyP0UlvPWyFnWIfXGEpbN7jtnlQ54l6LBZn6HcxxkEkg2678P4Iu2WtqXPPtSA9GN4dgQNVH9ANl+FZLv9rGPB0XY9w1I9TbtqWWRHoQL43g5Ly2U0fLeUglcn9nfIhPox8IEBvjdz/Thqd1+z653Ll2vgsY1e54mfR6iB0oUbG4fcZfpOmLo54zajYe9Gvh4AhNfQ95Wu3mi2qenmavFI3B7JxKPTWOTHXhgO7AElXSj97YtjZ50OhrDFvrzZE4m3LeTaEN302sR3gRDWUvHVAj54TycF42iIOq5Ewt5X08tfwfCqnAVqDdACwygtNx8HMdClbIuV7xnaPpp1fS4moB1aUiSKGawSEa5oAU4rszJHdR2EWXarG94px9F07aBRtBMcpeKIoKeuCu6tGF2Oq7FRmsT6AwSbbRTws7OfBnh/+ecA2rkCWcugmGur2uwl6Aw9EBaarNwRCA3EWRP76q4wXJRt24+6QGqXfocLMH4WO/NW9snfc0msXWS7Ur6D8OJ1mwntashoyzOE+i4PfQORQS9n6KeqR+pv6tEGXK77IW4cIQw1HERSMxMiuAI4O3IE6FvLrbBXc1aFAdAseLZlhcLEO8WVJ4PXRt2EHvTm3cs20xBNBtx0xlCLVLbnhHTJYTksIS99uLAfyU+dbV350mJbOpazmgX6LdZ2LKjvr8c7Rvx5u9S03qoUFjElI0be9VIKneAmeQSiIQOlYfQpqLfVqPEUzrD1UQugDFik3v7KRZDoEqliu1brvgPeUJGPinUUW2HsPtUpXLIBLlJF+qgV6a291Vv9gcKHBISXV/9qaM1n+EwXTiNO93O0k9Qk5dvpVhLwwPsf9jF9LJCl1Rno0AHP2quywihQOYgHGlTqGwnDFvR1F6qmvHYom/af6FwZ6OWEYi3ltxRpR7zVaWvWMLQ0prx/LY+bcon1xHMFCMOEuwjBaXQq6oCr/Li1W8duTaYRChjlonuQkJQv7SK10oFZZV0b+lzN+ba8pjGTUhbcPh9Oqs1VQZ4SRjyFBaXLuizinHxHG/5UINIjQ7/EJIqIqvzqVBgBfB9W8IMBkuXq1WQ80JSgTTdbORvY3mVT4OjGRVKNHvtCxWc3rbJvUoOlX6xk0+VoZEGnzX/kc/EwvLtj1ft98mBq/hxQomeNV2dl5Aut4zkPuZf3FaxVmES0/WI+gkdextXJw6alIOrCywpTNUkeROqZ3e1u/on2vjvXvLhL0U/dkAGjcgBY1PMmrR5LqbGIpOFbdx+5GzQDEYsFzRrVDOXI/3KewXdoMLxUEIUxKSi0Lg06U2pECcDtE8CBIeptN++y0MptzSoqpEV9jPuUu0NcPZuckrOtRkhvaesZ6DNtnXmFL6bYjwaMRwQBKaFgnRVyaM0Pta36y0Zow8KoPsce9UivtdJIGmtNl8i6Kj1h2uUJ+1j4hD+yXDHljouJj389wGdR0/TkNxOlbnVSDOuVmT56O7L2p46yuVHJLxKq3tW5KH7QhV/RiHwt1Dre/dA8pyvefoLlsnyhdBdnXgJ8jJrO4M47htK0vqvt937WAZY8oK6IHPGBbluhWel3MxmfeNeY/XTcah6wy6PUYKA0g6GulkuuEwMgoH17u0ev/L4kGFSmIGy+IIsxV2TGk6W3ekp06A222+rjXP/Th8vJDTkf0Z5TVPKN02A8zY18zSUesKJeo8sq3upVbKaPMRFW+bM15+EdQ/zoVX3lATNCixIq6n8goqYcfwyrRs1RracYMGwQDrzw9szTtEpMDOEQURssNvXWHZQcj8GqG8v+Oa48ymSP6Bj53rzBZDZHwb6us3d63CaKm/vss0jmUwqdFaUxGU7B42FfJ1nqERK60mwXrPeUbv3c6V00I6vbPNBhHNSgYjUqWz+rrr8/+YYY82TnNezzZG6EMdUBuznpvr5PWbNdxv0RlgH98Y/fFCnnHmOsisFtH5jCpHY+2Jj2rMrxsMeXLv4JP0jXGFbCiMoQe5CGfp29+i38yInm5ANnwr9RVd2fMOISXbubwM5xrG+sULjmp4NcJRjhepJ9ssI3ZwSXl0m7V3VdiG0N6up/1jo4f33HQ1JAEmpzWlspi7ph+ulvf0dhu7inIjWx3Dks2wuQO6lgd9eSs40BFUyZQdrCotYoJVGm09EYedr1fbBQeqtG54m0eN2z1UlAY5ciBeFeMtsdx8qwJp8LLqiFuxqWDFmqYaq/G7Sc7BUO+husSYw9n5oD9btjF77o0uCu2XIhTVb0482Aa7u7fDJFSaKgdqqicDnHjzjJg+H3MH9RdL7AcMgwOVAiZtjLJtA4kZ9AjK5ag+ndRSFmmf5B7xjrJEYd9WhOM9a5+mXiUfiXo5dzJtg6vF6D2wfSYELEVkcb22BDMJ1Hl4AlvcuHt6p7VDrON9k95G2FX8BQD2ihdbnwH+d5SV3ed66wJoUPGpQ7Y/1UrcpCaJAdBbFylzZnLS6z3hiPvuvJ7IS/Ecn/ZqSadgp5cS7cAnVXzqLUQ3iO4r7VsSLcZ5WxxqPMjRR2Mr1svrXShR9zoDbZysM5pNLeeQ3XaU2A6fEM8+uFdxXIe0ifEZy+yrTFT6EUDuRVzeJXJzMQG5W8D/no7YIYxvX5lBK0yizPAqpXpucIhaw9aZ0zsXLLT0K1Ci9WF781xnU+2OS4TEV3VnRpb8wF31yAz8z65asIMh3Pb2j58mxtHmd+9CS/VXfDofukwo5lmvveghE4tUomBR9NzuonZgteIf+1TGexEytUhzUiguznK60hsj9l3UD+sUF6ORgoic3cip39qHPHWJQsT6eJ12xJ5Ts7WTbxETtxlmbxk4lyD16LW0mGt+mx4hw3EM6cMmzRZ3GkzgjPXej0/33hL1w+Xt+zoaCIBN8aqKe9clnxAjgv/izheptD3eru+D/Gfoynpo2b09wVs1vR7n3COJD2NoN/e04DulPpQhNVU7LapdxSuiinYUktbiSUr0PuCVfXrtUIze9xAARb0wzyWNXSLeq0HuaeVyRsa6F9R1jCn6khTUJBHHgc6tVWq881/6aXGDJ9X2VwtzvhZbWBbay2HTGiocnl/FI5bytJgtH5xB4FLKyI5akQKYtl2e6YBhkDrNKs323F0WM4hkxSX1WZRhUwhUpUlL4lXnb3GV5HCcOb+vCwNpGoh9zxV32EbHSY1+XIwWF5sk5SirzLcpZ+Tsq+cG3xUpT+03z3yEUMM7ImXp2lt0xhCtu7wVN+jIuIJyhsC3RCYHadTsdXu9vHUhC7bMFWyFlBNA1JSTyOl1z0AW2Xt91VLeTYlR9uW8iQNtRepvRyJxmjVwPPuqXkfB6v2ymGVvYs0VVAnla/f6FVBejZgasaPEDX2PU/PKvRYzF168A6DoUSkrC5hTGY6mr1ZBtv2K1rxX4Bd5t6FWzw/RmmI5m80Reocz9beSj2kG9j3utAWTV+XrSnBVYDn4pOGvGP32Vsld3lcJN7bki/ezrdDLGW7tli2N+vBQXhdZ55NJtxhnBzGGMDUCNVGH7UjOUjsKFVi/OVSWvHfiLrspJcdtkV5h4yUMkjA7rsmTvpk2j560ph0JqAjN348YboUuxFtGhnOzBNakEuau2TGKgmEokWve5sJrlRO27GbHPVZAJbJ8eYmyBQGqiFapTgmF0BzeFQrSUTb7u/XzdKlus7DV0y9ZqrD9OknlM4Q113k86o9ij/kaRVzfGTdWjmJPPlQQskai7FDH2fMi5Xm73F2jTRjJvDWaNDSOQESh3gymzINyPht/Tc6M33VnGlG864ercAbWGJicwa8OOP47jQDwZHuX67YQguaYWlNJNw57qmzQ9mSUoTmuCJI3u2Req0feVTwfC2Ev6avODRD3hTbjR6F4DZzl0E0sMdTu9W6EPS+38I6++DXntsMIv5lsXuLqjrtmBY+c4pKCgMY+rRefnSvbrOe1Cryk3CX7d7XEijrICUovR1i2uoOm+dbqpQ75PVhLR64rCztMN7ENyhhqTNYESFaOOuSL76J8kHWPjv+KW5sdEJiyQ+Z+AvWWkJYxe99UonFpIvd2jehVk9HlrLwMt4/fBcPC3/lauS2G2YnvjksMxymm3xVyspl+cjVFy96vffWZrZ3BZS88d8bQmxydYwQHeEfluWdQd09e6PEWGSqGuJGqLmolO+vO5HrtV9ySI09n2ZJeDRSFXPB8AXas9OOGXK+MVAAy4z6FNiXU8osToQRNccfB1gaWV4B0k+qs5woQTlly7S9MtF8nzavkDJRHuLNtvuYajI4DlfZQ2tMwtjvJvi2hvZVNzZldJG+qDpeKaWYqqnx1aq3/Jo12zFlNJSEaLnG/qmOK24xMMTGtfPeuR8M9xjhnj3swfpdBedl8N/qHF8atMk1MftfFpVpj2GARspz7+LxbzbGV4RUDyiw4Qi/U2OOtC6vwrKwFstexSp7ZVqlOiMZFGyUk/fveV9linF1mQLe2P23l5ECZdzCE4j76W15WrkrhrupnqHoLJrZ3Oum6fHDwBFFtfaezZY4fvUUxrmoJQlTo9ddjlv9v69x5rGraP9b3Sjd3DMvuenTZCkq7QuJy8mX0bN69fdJrcXGiiumqivg4h1Spcwr7XPMvt22v9JpsEJ8lYmKK6f8S4inv64nhln9BZ5IfLAbu4x3W08vyzIgOTcUdKsPxOJsCAfgdNXJq8NrfYT2l35Vfe+07oNyg7j0cPUV4wdRWKAOkZO+6c0VO3DGhIHGesYOYF/ldLOjdWLbq7oq484JjInLxaxbeJGx7sjY7R4lbfg1sTszJLN917UyFOUAuLzWCIcyOhMl9HDJHMUZc5nt9JO7urArnkjftTTEVFbUB2RGZ7uSQ9a/sBJhrvvcaJw2oX1EDXkTUSwrHsLLOzsvmp5ffQgLq3YZbXnHvmPHUWZwVj4ux1BeGXvXFiqA9hQP8m0xsjyZf6Cp2zP94xVOLC6BfxTTOSMnwDdS2mDqaIW31kPWImYa66nW7JC2kn/bibXI2OyH+NwJUMPWUz9WA0mKOsfzfonwuDbGSU1eV44IrZxGCGD2zblNbaWrk76pgwZ3B6SImw0vvtjHsQipn+hfK3xIypLsNwXZK6InhDy9ga5+yCbuJWs6RT5Ck3n/1du3oPlvc0qwEQon5jLEey0rHwUMIq5s6mPgsaZ7/zkSPC8bVbgLx3XRvK2hr/2b45Ln3G+TxIc5J2d+xOR5FtVKeLhkY2WNEp66+Wfg2f/8xAd/KSdYWuiHZIJU4cUcOH+ElrVbZd9GKbgd5b6SoFvIhV8cOCjbfxmBV67z/SuIZ/VVvJKKgtKPi0JddeoduR8xNLhUqoPX+bnRtof8cXpekSN05pfgy1X4qEKPULxY8516+61dBeJ4bBR1g6XHBm1J177DO9hjjzKyivQb/yodacJ6WfSRUL0AecTuAos/QoV3Vs/NDgJ+U3vfVq4uS16w5rnpRta0hnckjE5F12dvIdfqrW5Zqs23Ju89qdEat5F0lYbi8BsIy5S47Dda4u6g4m+Jc2ledqz2AFjcRJDuvxtO7+cF7ltCE+R8G6Wcu2ZlksKLzvVKO4gZf+e193NkZJbE3cSm+jqg7va/UuaceGNUBQGHiW2bQUG/hXQRqatUiNVkcA6qNlmhFdHEuEeJxTufaTvGf83wOE++4tXqryFPPl+NGi/jvbqzyF3CC/mxRpcQdKpyFja3sTWreF/zjqmQwnSe+q/IZRPCazZUVWMZUtPLGEvc5uPXNAbwrrmgx4250Lg5lTMVchMGvlKKgJiiT5QiA00RPr+9/OiGyZHQhq9RlyItiWncLQP4dIsgN3W9RiwaLPD45WJ1dFnc63jxU0MU9unIbvP7d+H2uRrFJvJRLb8Pw8iqf+bNBL8CxZ5jf14zTTZhxHci0FeB/7McLkoeVW0SAYl+zPyFxO3xnPdPvzYvhT9WtGcQYr9oj9bLKK++adWg+adUe4FnFg2TdilZ2GKC8xfCGtLvopBIMMfDFNpV4tT6nH5crOFDVouSkvP/v/wBY62n8","row_count":500,"seed_start":410000,"seed_end":410499,"schema":["seed","s","total_edge","retail_edge","arb_edge"],"uncompressed_sha256":"2c3255828e653211fcee1f8e49e63615ede48505b3341c34c421e58008ccf736","code_sha256":"bf0d179f3e47d28819f6fa7e0d25548c2ced43374c216d36460b00a26a26ffae"},"checks":{"strategy_hashes_before_each_simulation_and_after":true,"simulator_files_byte_equal_to_pinned_archive_before_and_after":true,"simulator_files_checked":25,"failed_flags":{"B":0,"C":0},"returned_seed_finite_edges_and_2000_callbacks_checked":500,"first_observed_spread_equals_sampled_and_returned_regime_pairs":500,"fixture_rows_checked":500,"fixture_float_roundtrip_exact":true,"fixture_hash_and_row_count_checked":true,"other_result_measurements_read":false,"finalist_seeds_run":0},"reproduction_method":{"candidate_url":"https://api.imd.fun/artifacts/ecbc9087b4f238fc1b5b0d52f55af073f676c038bfb6756172b1e51480ac1741","incumbent_url":"https://api.imd.fun/artifacts/db22aff7167a4798251ed3d20432509f30e511e4958799aba5b17b41bb39b4b6","simulator_url":"https://github.com/danrobinson/prediction-market-challenge/tree/b244530ee2a6247b5f930830eeca9dd950da0e7e","python_version":"3.13.5","pythonhashseed":0,"dependencies":"Python standard library and the unmodified pinned simulator only; no installation required","procedure":"Extract only JSON.code from each artifact and verify exact UTF-8 hashes. Put pinned simulator on sys.path. With PYTHONHASHSEED=0, in one Python process create ChallengeConfig() and ParameterVariance(). For every seed in range(410000,410500), config=sample_config(base,variance,seed=seed). Run B then C using SimulationEngine(config,fresh_factory,seed=seed).run(), reloading load_strategy_factory for each simulation. A transparent observer forwards the unchanged StepState to the strategy, records first rival bid/ask and callback count, and derives s=max(1,((ask or 100)-(bid or 0)+1)//2); assert s equals sampled and returned competitor.spread_ticks. Pass no seed or config to strategy. Check returned seeds, failed/error fields, all three finite edge components, identical pair regimes and 2000 callbacks. Keep first ten timed pairs once; impose a 2700-second wall cap. No workers, subprocess simulations, sandbox, tuning, or other seeds.","statistics":"Only fully completed, validated pairs contribute to n. Every failed/incomplete attempt is retained in failures and missing_seeds; any such pair makes complete=false. d=C.total_edge-B.total_edge; sum_d=math.fsum(d); sum_d2=math.fsum(d*d); mean_diff=sum_d/n; se=statistics.stdev(d)/sqrt(n), sample SD with denominator n-1. Mean C/B components use math.fsum(component)/n. retail_diff and arb_diff are signed means of per-pair C-minus-B component differences. Repeat for each observed s=1,2,3,4, including zero effects. No decimal rounding before JSON serialization.","fixture_decode":"json.loads(zlib.decompress(base64.b64decode(fixture.payload,validate=True)).decode('utf-8')); verify SHA256 of uncompressed bytes, ordered seeds, row_count, and five-column schema. Float JSON values round-trip exactly."}}
