diff --git a/Doc/data/python3.13.abi b/Doc/data/python3.13.abi index 617006a6489605..062ef3a2e77f79 100644 --- a/Doc/data/python3.13.abi +++ b/Doc/data/python3.13.abi @@ -1057,6 +1057,7 @@ + @@ -1124,6 +1125,7 @@ + @@ -1293,6 +1295,10 @@ + + + + @@ -1331,6 +1337,7 @@ + @@ -1349,6 +1356,7 @@ + @@ -1679,14 +1687,14 @@ - - + + - + @@ -1694,7 +1702,7 @@ - + @@ -1709,29 +1717,29 @@ - + - + - + - + - + @@ -1819,11 +1827,11 @@ - + - + @@ -1835,14 +1843,14 @@ - + - + @@ -1861,7 +1869,7 @@ - + @@ -1889,7 +1897,7 @@ - + @@ -1931,7 +1939,7 @@ - + @@ -1948,7 +1956,7 @@ - + @@ -1965,7 +1973,7 @@ - + @@ -1979,12 +1987,6 @@ - - - - - - @@ -1998,13 +2000,13 @@ - - + + - + @@ -2012,7 +2014,7 @@ - + @@ -2059,7 +2061,7 @@ - + @@ -2097,7 +2099,7 @@ - + @@ -2122,7 +2124,7 @@ - + @@ -2161,7 +2163,7 @@ - + @@ -2219,17 +2221,16 @@ - - + - - + + - + @@ -2238,13 +2239,13 @@ - + - + @@ -2258,13 +2259,13 @@ - + - + @@ -2272,22 +2273,22 @@ - + - + - + - + - + - + @@ -2299,21 +2300,21 @@ - + - + - + - + - + - + @@ -2322,20 +2323,20 @@ - + - + - - - - - - - - + + + + + + + + @@ -2343,12 +2344,12 @@ - + - + - + @@ -2356,28 +2357,28 @@ - - - + + + - + - + - + - + - - - - - - + + + + + + @@ -2397,60 +2398,60 @@ - + - - - - + + + + - - - + + + + + - + - + - + - - - - - - - - - - - - - + + + + + + + + + + + + + - - - - - - - - + + + + + + + + - + - - - - - - - - + + + + + + @@ -2491,7 +2492,7 @@ - + @@ -2516,124 +2517,124 @@ - + - + + + - - - - + + - + - + - + - + - + - + - - + + - - - + + + - - - + + + - + - + - + - + - + - - - + + + - + - - + + + - - + + - - - + + - - + + - + - + - + @@ -2645,24 +2646,24 @@ - - + + - + - + - + - + - + @@ -2672,90 +2673,90 @@ - - - - - - + + + + + + - + - - - - + + + + - + - + - - + + - - + + - + - + - + - - + + - + - + - + - + - + - + - + - + @@ -2787,13 +2788,6 @@ - - - - - - - @@ -2817,14 +2811,14 @@ - + - - + + @@ -2840,37 +2834,37 @@ - + - + - - + + - - + + - - + + - - + + @@ -2895,19 +2889,19 @@ - - + + - - + + - + @@ -2917,104 +2911,104 @@ - + - + - + - - + + - - + + - + - - + + - + - + - + - + - + - + - - + + - + - + - - + + - + - - - - - - + + + + + + - - - + + + - - - + + + - + @@ -3048,10 +3042,10 @@ + - - + @@ -3069,15 +3063,17 @@ - + - + - - + + + + @@ -3092,12 +3088,12 @@ - + - + - - + + @@ -3109,29 +3105,29 @@ - + - + - + - + - + - - + + - + @@ -3144,178 +3140,178 @@ - + - + - + - - + + - - + + - + - + - + - - + + - + - + - - + + - - + + - + - + - + - + - - + + - - + + - - - + + + - + - - + + - + - - + + - + - + - + - + - + - - + + - - + + - + - - - + + + - + - - + + - - + + - - + + @@ -3346,39 +3342,39 @@ - + - + - + - + - + - + @@ -3395,14 +3391,9 @@ - - - - - - - + + @@ -3410,10 +3401,10 @@ - + - + @@ -3425,10 +3416,10 @@ - - - - + + + + @@ -3436,53 +3427,53 @@ - + - - - + + + - + + + - - - + - - + + - + - + - + - - - + + + + + + - - - - + - + @@ -3511,7 +3502,7 @@ - + @@ -3520,19 +3511,19 @@ - - + + - - + + - - - + + + @@ -3546,153 +3537,153 @@ - - + + - + - - + + + - - + - - + + - - + + - + - + - - - - + + + + + + - - - + - - + + - - + + - - + + - - - + + + - - - + + + - - + + - - + + - + - - + + - - + + - - + + - + - - + + - + - - - + + + - - + + - + - - + + - + - - + + @@ -3702,13 +3693,13 @@ - + - + - + @@ -3743,7 +3734,7 @@ - + @@ -3771,7 +3762,7 @@ - + @@ -3782,12 +3773,12 @@ - - + + - + @@ -3815,90 +3806,99 @@ - - - + + + + + + + + + + + + - - - + + + - - + + - + - - - - + + + + - + - - + + - + - - + + - - + + - + - - + + - + - + - - + + - - - - + + + + - - - + + + - - + + - - + + - + - + @@ -3975,18 +3975,18 @@ - - + + - + - + @@ -4012,9 +4012,9 @@ - - - + + + @@ -4022,39 +4022,39 @@ - - + + - + - + - + - + - + @@ -4063,30 +4063,30 @@ - + - + - - + + + + - - - - - + + + - + - + @@ -4097,7 +4097,7 @@ - + @@ -4111,13 +4111,13 @@ - + - + @@ -4135,7 +4135,7 @@ - + @@ -4154,22 +4154,22 @@ - + - + - + - + @@ -4184,12 +4184,12 @@ - + - + @@ -4208,7 +4208,7 @@ - + @@ -4241,7 +4241,7 @@ - + @@ -4257,7 +4257,7 @@ - + @@ -4316,7 +4316,7 @@ - + @@ -4345,36 +4345,36 @@ - + - + - + - + - + - - + + @@ -4382,7 +4382,7 @@ - + @@ -4402,7 +4402,7 @@ - + @@ -4411,17 +4411,17 @@ - + - + - + @@ -4736,7 +4736,7 @@ - + @@ -4810,18 +4810,18 @@ - - + + - - + + - - - + + + @@ -4839,7 +4839,7 @@ - + @@ -4851,22 +4851,19 @@ - + - + - - - - - - - - - - + + + + + + + @@ -5005,8 +5002,8 @@ - - + + @@ -5021,7 +5018,7 @@ - + @@ -5040,29 +5037,29 @@ - + - + - - + + - + - + - + - + @@ -5080,8 +5077,8 @@ - - + + @@ -5125,7 +5122,7 @@ - + @@ -5208,57 +5205,57 @@ - - - + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + @@ -5266,37 +5263,37 @@ - - - + + + - + - + - + - + - + - + - + - + - - - - + + + + @@ -5307,10 +5304,10 @@ - + - + @@ -5320,9 +5317,9 @@ - + - + @@ -5351,11 +5348,11 @@ - + - + @@ -5363,108 +5360,111 @@ - - - + + + - - + + - - - - - - + + + + + - - - + + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - + + - - - - + + + + - - - - + + + + - - - + + + - - - + + + - - - - - + + + + + - - + + @@ -5472,61 +5472,61 @@ - + - + - + - - + + - + - + - - + + - + - + - + - + - + - + - + - + - + @@ -5539,7 +5539,7 @@ - + @@ -5547,7 +5547,7 @@ - + @@ -5566,14 +5566,14 @@ - + - + @@ -5639,7 +5639,7 @@ - + @@ -5658,7 +5658,7 @@ - + @@ -5667,8 +5667,8 @@ - - + + @@ -5677,11 +5677,11 @@ - + - + @@ -5700,7 +5700,7 @@ - + @@ -5718,7 +5718,7 @@ - + @@ -5728,8 +5728,8 @@ - - + + @@ -5737,13 +5737,13 @@ - + - - + + @@ -5764,9 +5764,9 @@ - - - + + + @@ -5774,7 +5774,7 @@ - + @@ -5792,23 +5792,23 @@ - + - - + + - - + + - - - + + + @@ -5820,66 +5820,71 @@ - - + + - + - + - + - + - + - + - + - + - - - - - - - + + + + + + + - + - + - + + + + + + - - + + - + - + @@ -5889,7 +5894,7 @@ - + @@ -5905,131 +5910,131 @@ - - - - - - + + + + + + - - + + - - + + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - - - - - + + + + + - - - + + + - - - + + + - - - - - - - + + + + + + + - - - - + + + + - - - - + + + + - - + + - - + + - - + + - - + + - - + + - - - + + + - - + + - + @@ -6042,103 +6047,103 @@ - + - + - - - + + + - - + + - - + + - - + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - - + + + - - + + - - + + - + - + - + - - + + @@ -6154,23 +6159,23 @@ - - - - - - - - - + + + + + + + + + - + - + @@ -6184,9 +6189,9 @@ - + - + @@ -6194,27 +6199,27 @@ - + - + - + - + - + @@ -6241,27 +6246,27 @@ - + - + - + - + - + @@ -6279,7 +6284,7 @@ - + @@ -6293,24 +6298,24 @@ - - - - - - - - - - - + + + + + + + + + + + - + - + @@ -6328,190 +6333,185 @@ - - + + - - - - + + + + - - - - - + + + + + - - - + + + - - - - + + + + - - - - + + + + - - - - - + + + + + - - - - - + + + + + - - - - + + + + - - - - - + + + + + - - + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - - + + + + + - - - - + + + + - - + + - - - + + + - - - + + + - - - - + + + + - - - + + + - - - - + + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - + + - + - - - - - - - - + + + - - - + + + @@ -6547,7 +6547,7 @@ - + @@ -6573,7 +6573,7 @@ - + @@ -6686,7 +6686,7 @@ - + @@ -6850,8 +6850,8 @@ - - + + @@ -6926,7 +6926,7 @@ - + @@ -6939,8 +6939,8 @@ - - + + @@ -6948,8 +6948,8 @@ - - + + @@ -6957,17 +6957,17 @@ - + - - - - - + + + + + @@ -6976,19 +6976,19 @@ - + - - + + - + - - - + + + @@ -6996,7 +6996,7 @@ - + @@ -7005,8 +7005,8 @@ - - + + @@ -7030,7 +7030,7 @@ - + @@ -7045,7 +7045,7 @@ - + @@ -7063,44 +7063,44 @@ - - + + - + - - - + + + - + - + - - - + + + - - + + - - - - + + + + - - + + - + - + @@ -7110,19 +7110,19 @@ - + - + - + @@ -7130,21 +7130,21 @@ - + - + - + - - + + @@ -7170,8 +7170,8 @@ - - + + @@ -7180,11 +7180,11 @@ - + - - + + @@ -7205,8 +7205,8 @@ - - + + @@ -7214,21 +7214,21 @@ - + - - + + - + - - + + @@ -7238,7 +7238,7 @@ - + @@ -7251,78 +7251,78 @@ - - + + - - - - - - + + + + + + - - - + + + - - - + + + - - + + - - + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - + + - - + + - - + + - - + + - + - - - - + + + + @@ -7330,105 +7330,105 @@ - + - - + + - - + + - - - - + + + + - - - + + + - - - + + + - - + + - - + + - - + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - + + - + - + - + @@ -7455,10 +7455,10 @@ - - + + - + @@ -7470,7 +7470,7 @@ - + @@ -7485,16 +7485,16 @@ - + - + - - + + - + @@ -7506,7 +7506,7 @@ - + @@ -7521,59 +7521,57 @@ - + - + - - - - - + + + + + + + - + - - - - + + + + - + - + - - - - - - + + - + - - + + - - - + + + @@ -7582,220 +7580,220 @@ - + - + - - - + + + - - - + + + - - + + - - + + - - + + - - - - + + + + - - + + - - + + - - - - + + + + - - - - + + + + - + - - + + - + - - + + - - - + + + - - + + - - - + + + - + - - + + - - - + + + - - - - + + + + - - - - + + + + - - - + + + - - - - + + + + - - - + + + - - + + - - + + - - - + + + - - + + - - - - - - + + + + + + - + - + - + - + - + - + - - + + - + - + @@ -7810,140 +7808,140 @@ - + - - - - - - - + + + + + + + - - - - - + + + + + - - - - + + + + - - - - + + + + - - + + - - + + - - - - - - + + - - - + + + - - - - + + + + + + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - - + + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - + - - + + - - + + - - - + + + @@ -7955,7 +7953,7 @@ - + @@ -7969,40 +7967,40 @@ - - - - - - + + + + + + - - - - + + + + - - - + + + - - + + - - + + - - + + - + - + @@ -8011,8 +8009,8 @@ - - + + @@ -8020,9 +8018,9 @@ - + - + @@ -8034,27 +8032,27 @@ - + - + - + - + - + - - - - - - + + + + + + @@ -8093,18 +8091,19 @@ - - + + + + + + + - - - - @@ -8123,104 +8122,104 @@ - + - - + + - - + + - - + + - - - + + + - - - - + + + + - - - + + + - - - + + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - + - + - + - - + + - - - + + + - - + + - + - + - + @@ -8232,17 +8231,17 @@ - - + + - - - - - + + + + + @@ -8253,56 +8252,56 @@ - + - + - + - + - + - + - + - + - + - + @@ -8311,40 +8310,40 @@ - + - + - + - + - + - + - - + + - - - + + + @@ -8352,20 +8351,20 @@ - + - + - + - + - + @@ -8380,21 +8379,21 @@ - + - - + + - + - + @@ -8404,16 +8403,16 @@ - - + + - + - + @@ -8441,351 +8440,346 @@ - - - + + + - - - - - + + + + + - - + + - - - - + + + + - + - - + + - - + + - - - + + + - - - + + + - - - + + + - - - - + + + + - - - + + + - - - + + + - - - + + + - - - - - + + + + + - - + + - - + + - - - + + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - - + + + - - - + + + - - + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - - - + + + - - + + - - + + - + - - + + - - + + - + - - - - - - - - - - - - + + + + + + + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - + + + + + + - + - + - - + + - + - + - + - - + + - + - + - + - + - + - + - + - + @@ -8797,147 +8791,147 @@ - + - + - + - + - + - + - + - + - + - + - - + + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - - + + - + - - + + - + @@ -8952,261 +8946,261 @@ - + - + - + - - + + - + - + - + - + - + - + - + - + - - - + + + - - + + - - - - - - + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + @@ -9221,12 +9215,12 @@ - - - - - - + + + + + + @@ -9234,30 +9228,30 @@ - - - + + + - + - + - - - - + + + + + - - + @@ -9272,7 +9266,7 @@ - + @@ -9281,8 +9275,8 @@ - - + + @@ -9307,7 +9301,7 @@ - + @@ -9315,8 +9309,8 @@ + - @@ -9325,18 +9319,18 @@ - - + + - + - + - + @@ -9360,63 +9354,63 @@ - - + + - - + + - + - - - + + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - + + - + - - - - - - + + + + + + @@ -9433,17 +9427,17 @@ - + - - + + - + - - + + @@ -9460,23 +9454,23 @@ - - - + + + - + - + - + - + @@ -9485,60 +9479,60 @@ - + - - - - + + + + - - - + + + - - + + - + - - - + + + - + - - - + + + - - - + + + - + - + - - + + - + @@ -9550,66 +9544,66 @@ - + - + - + - - - + + + - + - + - - - - - - + + + + + + - - + + - - + + - - - + + + - - + + - - - - + + + + @@ -9634,8 +9628,8 @@ - - + + @@ -9643,8 +9637,8 @@ - - + + @@ -9655,25 +9649,25 @@ - + - + - - - + + + - + - + @@ -9681,32 +9675,32 @@ - + - + - + - + - + - + - + - - + + @@ -9714,12 +9708,12 @@ - + - + @@ -9756,73 +9750,73 @@ - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + @@ -9837,14 +9831,14 @@ - - + + - - - + + + @@ -9863,177 +9857,184 @@ - - + + - - + + - - + + - - - + + + - - - + + + - - + + - - + + - - + + - - + + - - + + - - - - - + + + + + - - - - + + + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - - + + + + + + + + + - - - - + + + + + - - - + + + - - + + - - + + - - - + + + - - - + + + - - - - - + + + + + - + - + - + - - + + - - - + + + - + - - + + - + - - - + + + - - - + + + - - + + - - - + + + - - + + - + - + @@ -10045,11 +10046,11 @@ - - - - - + + + + + @@ -10071,46 +10072,46 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -10133,46 +10134,46 @@ - + - + - + - + - + - + + + - - - - - + + + - + - + - + - + @@ -10182,10 +10183,10 @@ - + - + @@ -10207,65 +10208,65 @@ - + - + - + - - + + - - + + - - + + - - + + - + - + - + - + - - + + - + @@ -10275,411 +10276,419 @@ - - - + + + - - - - - - + + + + + + - - - + + + - - - + + + - - - - + + + + - - - - - - + + + + + + - - - + + + - - - + + + - - + + - - + + - - - - + + + + - - - - + + + + - - - - + + + + - - - + + + - - + + - - - - + + + + - - - - + + + + - - - + + + - - - + + + - - - + + + - - - + + + - - + + - - + + - - + + - - - - + + + + - - - - + + + + - - - - - + + + + + - - - - - + + + + + - - - - - - + + + + + + - - - - + + + + - - + + - - - - - + + + + + - - - - - - + + + + + + - - - - + + + + - - + + - - - - + + + + + + - - + + + + - - - - + + - - + + + + - - + + - - - - - + + - - + + + + + - - - + + - - - - + + + - - - - - - + + + + + - - - - - - + + + + + - - - - - - + + + + + + - - - + + + - - + + + + + + + + + + - - - - + + + + - - - - - + + + + + - - - + + + - - - + + + - - - - + + + + - - - - + + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - - - + + + + + - - - - + + + + - - - + + + - - - + + + - - - - + + + + - - - + + + - - - - - + + + + + - - - - + + + + - - - + + + - - + + - - - + + + - - + + - - + + - + - + - - + + @@ -10692,10 +10701,10 @@ - - + + - + @@ -10704,25 +10713,25 @@ - + - + - + - + - - - - - + + + + + - + @@ -10732,7 +10741,7 @@ - + @@ -10748,35 +10757,35 @@ - + + + + - + - + - + - + - + - + - - + + - - + + - - - - + @@ -10787,7 +10796,7 @@ - + @@ -10799,201 +10808,201 @@ - + - + - + - - + + - + - + - - + + - + - + - - - - - - - - - - - + + + + + + + + + + + - + - + - - + + - + - + - - + + - + - + - - + + - + - + - - + + - + - + - - + + - + - + - - + + - + - + - - + + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -11024,12 +11033,12 @@ - + - + - + @@ -11044,286 +11053,286 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -11338,28 +11347,28 @@ - + - + - + - + - + - + - + - + - + @@ -11374,26 +11383,26 @@ - + - + - + - + - + - + - + - + @@ -11404,12 +11413,12 @@ - + - + - + @@ -11424,117 +11433,117 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -11549,57 +11558,57 @@ - + - + - + - + - + - + - + - + - + - + - + - + + + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + @@ -11637,7 +11646,7 @@ - + @@ -11667,22 +11676,22 @@ - + - + - + - + - + @@ -11721,16 +11730,16 @@ - + - + - + @@ -11750,237 +11759,248 @@ - + - + - + - + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - - + + + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + - - - - - - + + + + + + - - + + - - - - + + + - - + + + + + + + + + + + + + + - + - + - - + + - + - - + + - - - + + + - - + + - - - + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + + + - - - - - - - + + + + + + + - - - - + + - - + + - - + + - - - + + + @@ -11992,37 +12012,37 @@ - - + + - - + + - + - + - - + + - + - - + + - + - + @@ -12034,13 +12054,13 @@ - + - + - + @@ -12049,7 +12069,7 @@ - + @@ -12073,10 +12093,10 @@ - + - + @@ -12088,19 +12108,19 @@ - + - + - + - + @@ -12127,13 +12147,13 @@ - + - + @@ -12141,24 +12161,24 @@ - + - + - + - - + + @@ -12167,20 +12187,20 @@ - - + + - - - + + + + + - - @@ -12196,7 +12216,7 @@ - + @@ -12213,15 +12233,15 @@ - + - + - + @@ -12237,27 +12257,27 @@ - + - + - - + + - + - - + + @@ -12270,71 +12290,71 @@ - - + + - + - + - - + + - + - + - - + + - + - + - - + + - + - + - - + + - + - + - - + + - + - + - + - - + + - + - - + + @@ -12342,8 +12362,8 @@ - - + + @@ -12351,1054 +12371,1055 @@ - - + + - - + + + + - - + + - - - + + + - - - - - + + + - - - + + + - - - - + + + + - + - - + + - + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - + + - - + + - - + + - - + + - - - + + + - - + + - - - + + + - - + + - - + + - - + + - - + + - - + + - - - - + + + + - - + + - - - - + + + + - - + + - - + + - - + + - - - - - - - - - - - - + - - + + - + - - + + - + - - + + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - + - - + + - - + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - + - - + + - + - - + + - + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - + + - - + + - - + + - - + + - - - - + + + + - - + - - + + + - + - - + + - + - - + + - + - - + + - - - + + + - - + + - - - - + + + + - - + + - + - - + + - - + + - - + + - + - - + + - - - + + + - - + + - - + + - - + + - - + + - - + + - + - + - + - + - - + + - + - - + - + + + + - - - - + - - + + + - - + + - + - - + + - + - - + + - + - - - + + + - - - + + + - - - + + + - - - + + + - - + + - - + + - - - - + + + + - - + + - - + + - - + + - - + + - - + + - - + + + - - + - - + + - + - - + + - - + + - - - + + + - + - - - - + + + + - - - - - + + + + + - - + + - - + + - - - - - - - + + - - - - - + + + + - - - - + + + + + - - - - + + + + - - - + - + + - - - - - + + + + + - - - - + + + + + - - - - + + + + - - - - - + + + + - - - - + + + + + - - - - + + + + - - - - - - + + + + - - + + - - - - - - - + - + + + + + + + - - + + - + - - - - - - - + - - - - - + + + + + + - + + + + + + + + + + + + + - - + + - - - - + + + + - - - - - + + + + + - - - - - + + + + + - - + + - + - - - - + + + + - - - - + + + + - - - - + + + + - - + + - - - - + + + + - - - - + + + + - - - - + + + + - - - + + + - - + + - - - - + + + + - - - - + + + + - - - - - + + + + + - - - + + + - - - + + + - - - - - + + + + + - - - - + + + + - - + + - - - - + + + + - - - + + + - - - + + + - - - - + + + + - - - + + + + + + + + + + + - - - - - - + + + - - + + + + + + + + + - + - - - + + + - - + + - + - - + + - - + + @@ -13406,170 +13427,170 @@ - - + + - + - - - - - + + + + + - + - - - + + + - - - + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - + - - + + - - + + - - + + - - + + - - + + - + - - + + - + - - - + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - - - - + + + + + + - + - + @@ -13578,22 +13599,22 @@ - - + + - + - + - + - + @@ -13602,222 +13623,222 @@ - + - + - + - + - + - + - + - - - + + + - - + + - - - + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - - - + + + + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - - + + + + - + - + - + - + - + - - + + - + - - + + - + - - + + @@ -13831,163 +13852,163 @@ - - + + - + - + - - + + - + - + - + - - + + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - + + + - + - + - - - - + + + + @@ -13998,7 +14019,7 @@ - + @@ -14010,27 +14031,27 @@ - - - + + + - + - + - + - + - - + + @@ -14039,21 +14060,21 @@ - - - - + + + + - + - + - - + + - + @@ -14098,14 +14119,14 @@ - + - + - - + + @@ -14113,26 +14134,26 @@ - - - + + + - + - + - + - - + + @@ -14164,8 +14185,8 @@ - - + + @@ -14227,16 +14248,16 @@ - + - + - + - + @@ -14317,7 +14338,7 @@ - + @@ -14365,55 +14386,55 @@ - - + + - + - + - - + + - + - - - + + + - + - + - - + + - + - + - + - + - - + + - + @@ -14422,7 +14443,7 @@ - + @@ -14440,193 +14461,193 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - - + + - + - + - + - - - + + + - + - + - + - + - - + + - + - + - - + + - + @@ -14638,49 +14659,49 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -14689,31 +14710,31 @@ - + - + - + - + - + - + - + - + @@ -14722,28 +14743,28 @@ - + - + - + - + - + - + - + @@ -14761,47 +14782,47 @@ - + - + - + - + - + - + - - + + - - - + + + - + - + - - + + - + @@ -14825,39 +14846,39 @@ - - - + + + - + - + - + - + - - - + + + - + - - + + - + @@ -14866,11 +14887,11 @@ - + - - + + @@ -14881,10 +14902,10 @@ - + - + @@ -14911,13 +14932,13 @@ - + - + - + @@ -14929,7 +14950,7 @@ - + @@ -14950,7 +14971,7 @@ - + @@ -14965,28 +14986,28 @@ - + - + - + - + - + - + - + @@ -14995,90 +15016,90 @@ - + - + - + - + - + - + - + - + - + - + - - + + - + - - - + + + - + - + - - + + - + - + - + - + - + - + - + - + - + - - + + - + @@ -15087,18 +15108,18 @@ - - - - + + + + - + - + @@ -15107,7 +15128,7 @@ - + @@ -15124,36 +15145,36 @@ - - - - + + + + - + - + - - - + + + - - + + - - + + @@ -15169,68 +15190,68 @@ - - + + - - - - - - + + + + + + - + - + - - + + - + - + - - + + - + - + - - + + - + - + - - + + @@ -15260,12 +15281,12 @@ - + - + - + @@ -15280,329 +15301,329 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -15617,12 +15638,12 @@ - + - + - + @@ -15637,9 +15658,9 @@ - + - + @@ -16374,19 +16395,19 @@ - - + + - + - + - + @@ -16394,11 +16415,11 @@ - + - - + + @@ -16409,50 +16430,50 @@ - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - + + + - + @@ -16461,24 +16482,24 @@ - + - + - + - + - + - + @@ -16487,22 +16508,22 @@ - + - - + + - + - + - + @@ -16511,20 +16532,20 @@ - + - + - + - + - + - + @@ -16533,10 +16554,10 @@ - + - + @@ -16545,52 +16566,52 @@ - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + @@ -16604,7 +16625,7 @@ - + @@ -16618,21 +16639,21 @@ - + - + - - + + - + - + - + @@ -16641,10 +16662,10 @@ - - - - + + + + @@ -16652,22 +16673,22 @@ - + - + - + - - + + - + - + @@ -16679,10 +16700,10 @@ - + - + @@ -16690,40 +16711,40 @@ - + - + - + - + - + - + - + - + - + - + - - + + - + @@ -16738,39 +16759,39 @@ - + - + - + - + - + - + - + - + - + - - + + @@ -16787,21 +16808,21 @@ - + - + - + - + - + @@ -16810,7 +16831,7 @@ - + @@ -16827,7 +16848,7 @@ - + @@ -16835,7 +16856,7 @@ - + @@ -16853,18 +16874,18 @@ - + - + - + - + @@ -16876,30 +16897,30 @@ - - + + - + - + - + - + - + - + - + @@ -16920,15 +16941,15 @@ - + - + - + @@ -16943,161 +16964,161 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + @@ -17106,7 +17127,7 @@ - + @@ -17117,7 +17138,7 @@ - + @@ -17131,16 +17152,16 @@ - + - + - + - + @@ -17158,7 +17179,7 @@ - + @@ -17172,66 +17193,66 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -17245,7 +17266,7 @@ - + @@ -17266,2515 +17287,2515 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + @@ -19783,37 +19804,37 @@ - - + + - + - + - + - - + + - + - - + + - + - - + + - + - + @@ -19822,22 +19843,22 @@ - - - - - - - + + + + + + + - + - + - - + + @@ -19845,50 +19866,50 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -19911,43 +19932,43 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -19956,45 +19977,45 @@ - + - + - + - + - + - + - - + + - + - + - + - + - + @@ -20006,13 +20027,13 @@ - + - + - + @@ -20021,7 +20042,7 @@ - + @@ -20030,16 +20051,16 @@ - + - + - + - + @@ -20054,22 +20075,22 @@ - + - + - + - + - + @@ -20081,88 +20102,88 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -20171,30 +20192,30 @@ - + - + - + - + - + - + - + - + @@ -20209,142 +20230,142 @@ - + - + - + - + - + - - + + - + - + - - + + - + - - + + - + - + - + - + - + - - - + + + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -20359,34 +20380,34 @@ - + - + - + - - + + - + - + - + - + - + - - + + - + @@ -20395,7 +20416,7 @@ - + @@ -20403,128 +20424,128 @@ - + - + - + - + - + - + - + - - + + - + - - + + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - - + + - + - + - + - + - + @@ -20536,177 +20557,186 @@ - + - - - - + + + + - + - + - + - + - - + + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - + - + + + + + + + + + + + + + - + - + - - + + - + - + - + - + - + - + - + - + - + - + @@ -20714,326 +20744,326 @@ - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + @@ -21057,7 +21087,7 @@ - + @@ -21066,105 +21096,105 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -21173,23 +21203,23 @@ - + - + - + - + - + - + - + @@ -21204,7 +21234,7 @@ - + @@ -21212,17 +21242,17 @@ - + - + - + - + @@ -21231,43 +21261,43 @@ - + - + - + - + - + - + - + - + - + - + - + - + @@ -21276,77 +21306,77 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + @@ -21355,12 +21385,12 @@ - + - + - + @@ -21383,33 +21413,33 @@ - - + + - + - + - + - + - + - + - + - + @@ -21417,66 +21447,66 @@ - + - - + + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -21487,19 +21517,19 @@ - + - + - - + + - + @@ -21508,67 +21538,67 @@ - + - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + @@ -21603,27 +21633,27 @@ - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + @@ -21635,64 +21665,64 @@ - - - - - + + + + + - + - + - + - + - + - - + + - + - - - + + + - + - + - + - - + + - + - + - + - - + + - + @@ -21701,36 +21731,35 @@ - + - + - + - + - - - - - - - - + + + + + + + - + - + @@ -21742,65 +21771,64 @@ - + - + - + - + - - + + - + - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -21808,9 +21836,9 @@ - - - + + + @@ -21824,44 +21852,44 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -21869,38 +21897,38 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -21908,18 +21936,18 @@ - + - + - + - + - + @@ -21927,15 +21955,15 @@ - + - + - + @@ -21943,11 +21971,11 @@ - + - - + + @@ -21958,9 +21986,9 @@ - - - + + + @@ -21998,10 +22026,10 @@ - + - + @@ -22010,31 +22038,31 @@ - + - + - + - + - + - + - + @@ -22046,25 +22074,25 @@ - + - - - - - + + + + + - + - + @@ -22090,14 +22118,14 @@ - + - + - + @@ -22145,8 +22173,8 @@ - - + + @@ -22184,7 +22212,7 @@ - + @@ -22214,22 +22242,22 @@ - + - + - + - + - + @@ -22268,16 +22296,16 @@ - + - + - + @@ -22292,7 +22320,7 @@ - + @@ -22303,11 +22331,11 @@ - + - - + + @@ -22330,14 +22358,14 @@ - + - - + + @@ -22345,10 +22373,10 @@ - - + + - + @@ -22357,7 +22385,7 @@ - + @@ -22365,13 +22393,13 @@ - - + + - + - + @@ -22383,13 +22411,13 @@ - + - + - + @@ -22398,7 +22426,7 @@ - + @@ -22422,10 +22450,10 @@ - + - + @@ -22437,199 +22465,199 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - - - - - - - - - - + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - + @@ -22645,12 +22673,12 @@ - + - + @@ -22662,28 +22690,28 @@ - + - - + + - - + + - - + + - - + + @@ -22691,41 +22719,46 @@ - + - + + + + + + - + - + - + - + - + - + - + @@ -22778,9 +22811,9 @@ - + - + @@ -22802,7 +22835,7 @@ - + @@ -22826,351 +22859,356 @@ - - + + - + - + - + - - + + - + - - + + - - + + - - + + - + - - - + + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - + + + + + - + - + - + - - + + - - - + + + - - + + - - - + + + - - + + - + + + + + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + @@ -23196,9 +23234,9 @@ - - - + + + @@ -23219,21 +23257,25 @@ - + - - + + - + - - + + + + + + @@ -23243,19 +23285,21 @@ - + - + + - + - + + @@ -23277,15 +23321,15 @@ - - - + + + - - + + - - + + @@ -23302,15 +23346,15 @@ - - + + - - + + - + @@ -23332,7 +23376,7 @@ - + @@ -23389,7 +23433,7 @@ - + @@ -23407,41 +23451,41 @@ - + - + - + - + - + - + - + - + @@ -23450,43 +23494,43 @@ - - - - + + + + - - + + - + - - + + - + - + - + - + @@ -23495,27 +23539,27 @@ - - - - + + + + - - + + - + - + @@ -23527,13 +23571,13 @@ - + - + @@ -23543,13 +23587,13 @@ - + - + @@ -23563,18 +23607,18 @@ - - + - + + - - + + @@ -23585,7 +23629,7 @@ - + @@ -23594,31 +23638,31 @@ - - - - - - - + + + + + + + - - - - - - - + + + + + + + - + - - + + @@ -23668,7 +23712,7 @@ - + @@ -23679,8 +23723,8 @@ - - + + @@ -23688,10 +23732,10 @@ - + - + @@ -23700,13 +23744,13 @@ - - + + - + - + @@ -23718,7 +23762,7 @@ - + @@ -23727,8 +23771,8 @@ - - + + @@ -23742,47 +23786,47 @@ - - - - + + + + - + - - + + - + - + - + - + - + - + - - - - - + + + + + @@ -23793,11 +23837,11 @@ - + - + - + @@ -23807,7 +23851,7 @@ - + @@ -23815,14 +23859,14 @@ - + - + @@ -23835,37 +23879,37 @@ - + - + - + - + - + - + - - + + - + - + - + @@ -23873,45 +23917,53 @@ - + - + - + - + - + - + - - + + - + + + + + + + + + - + @@ -23941,13 +23993,13 @@ - + - - + + @@ -23955,22 +24007,22 @@ - - - + + + - - + + - - + + - - + + - - - + + + @@ -23991,26 +24043,26 @@ - + - - + + - + - + - + @@ -24018,119 +24070,119 @@ - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + @@ -24141,44 +24193,44 @@ - - + + - - - + + + - - + + - - - - + + + + - - + + - - + + @@ -24186,8 +24238,8 @@ - - + + @@ -24198,20 +24250,20 @@ - + - + - + @@ -24226,218 +24278,231 @@ - + - + + + + + + + + + - + + + + + + - + - + - - + + - - - - + + + + - - - - - - + + + + + + - - + + - - - + + + - - - + + + - - - - - - - - + + + + + + + + - - - - - + + + + + - - - - - - + + + + + + - - - - + + + + - - + + - - + + - - - + + + - - - + + + - - - + + + - - - + + + - - + + - + - + - + - + - - + + - - + + - - - + + + - - - + + + - - - - + + + + - - - - - + + + + + - - - - + + + + - - - - + + + + - - + + - - + + - + - - + + - + - - - - - - - - - - + + + + + + + + + + @@ -24447,7 +24512,7 @@ - + @@ -24481,39 +24546,39 @@ - - + + - + - + - + - + - + - - + + - - - + + + @@ -24537,7 +24602,7 @@ - + @@ -24549,16 +24614,16 @@ - + - - + + - + @@ -24571,7 +24636,7 @@ - + @@ -24647,27 +24712,27 @@ - - - + + + - - - + + + - + - - + + - - + + - + - + @@ -24705,49 +24770,49 @@ - - + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + @@ -24757,8 +24822,8 @@ - - + + @@ -24766,25 +24831,25 @@ - - + + - + - - + + - + - + @@ -24802,7 +24867,7 @@ - + @@ -24811,9 +24876,9 @@ - + - + @@ -24837,7 +24902,7 @@ - + @@ -24846,43 +24911,43 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -24906,69 +24971,76 @@ - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - - + + - - + + - + - + - + - + - + - + @@ -24977,111 +25049,111 @@ - - + + - - + + - - - + + + - + - + - + - + - + - + - - + + - + - + - - + + - + - - - - - - + + + + + + - + - + - + - + - + - - + + - + - + - + - + - + - + @@ -25129,7 +25201,7 @@ - + @@ -25141,14 +25213,14 @@ - + - + - + @@ -25158,50 +25230,50 @@ - - - - - + + + + + - + - + - + - + - + - + - + - - + + - + - + - + - + @@ -25233,7 +25305,7 @@ - + @@ -25247,22 +25319,22 @@ - - - - - - - - - + + + + + + + + + - + - + @@ -25277,27 +25349,27 @@ - + - + - + - + - - + + @@ -25320,11 +25392,11 @@ - - - + + + - + @@ -25333,7 +25405,7 @@ - + @@ -25347,8 +25419,8 @@ - - + + @@ -25359,22 +25431,22 @@ - - + + - + - + - - - - + + + + @@ -25391,54 +25463,54 @@ - + - + - + - + - + - + - + - - + + - + - + - - - - - - - - - - - - + + + + + + + + + + + + - - + + @@ -25447,10 +25519,10 @@ - + - + @@ -25459,7 +25531,7 @@ - + @@ -25468,7 +25540,7 @@ - + @@ -25494,7 +25566,7 @@ - + @@ -25517,31 +25589,31 @@ - + - + - + - + - + - + - + - + @@ -25550,100 +25622,100 @@ - + - + - + - + - - - + + + - - + + - - + + - - + + - - + + - - + + - - - + + + - - - - + + + + - - - - + + + + - - + + - - + + - - - - + + + + - - + + - - - - - + + + + + - - - - + + + + - + - + @@ -25651,7 +25723,7 @@ - + @@ -25662,11 +25734,6 @@ - - - - - @@ -25676,139 +25743,144 @@ - + + + + + + - - - - + + + + - - - - + + + + - - - + + + - - - - + + + + - - - - - + + + + + - - - - + + + + - + - - - - + + + + - - - - - + + + + + - - - + + + - - - - - - + + + + + + - - - - + + + + - - - + + + - + - - + + - + - + - + - + - - - - - + + + + + - + - - + + - + - + - + - + - + @@ -25821,7 +25893,7 @@ - + @@ -25829,22 +25901,22 @@ + - - + - - + + - + - + @@ -25853,51 +25925,51 @@ - - - + + + - - - + + + - - - - + + + + - - - - + + + + - - - + + + - - - + + + - + - - + + - - + + @@ -25971,18 +26043,18 @@ - + - - - + + + - + @@ -25997,10 +26069,10 @@ - + - - + + @@ -26008,41 +26080,41 @@ - + - + - - - + + + - - - - + + + + - - + + - + - + - - + + - + @@ -26051,7 +26123,7 @@ - + @@ -26059,18 +26131,18 @@ - - - - - - - - - + + + + + + + + + - - + + @@ -26082,11 +26154,11 @@ - + - + @@ -26097,7 +26169,7 @@ - + @@ -26122,19 +26194,19 @@ - + - - - + + + - - + + - + @@ -26174,20 +26246,20 @@ - - - + + + - + - + - + @@ -26211,7 +26283,7 @@ - + @@ -26220,20 +26292,20 @@ - + - + - + @@ -26241,55 +26313,55 @@ - - + + - - + + - + - + - + - - - + + + - - - - - - - - + + + + + + + + - - - + + + - + @@ -26297,54 +26369,54 @@ - + - + - - + + - - - + + + - + - - + + - - + + - - + + - - + + @@ -26361,7 +26433,7 @@ - + @@ -26370,32 +26442,32 @@ - + - + - + - + - + - + - + - + - + - + @@ -26405,9 +26477,9 @@ - - - + + + @@ -26415,82 +26487,82 @@ - - - - - - + + + + + + - + - + - - + + - - + + - - + + - - + + - + - - - - + + + + - + - + - + - + - + - - + + - + - + - - - + + + @@ -26524,22 +26596,22 @@ - + - + - + - + @@ -26547,81 +26619,81 @@ - - + + - - - + + + - - + + - + - - - + + + - - - - + + + + - - - - - + + + + + - - - - - + + + + + - - + + - - + + - - + + - - - - - - + + + + + + - - + + - - - + + + - + - - + + @@ -26629,19 +26701,19 @@ - + - + - - + + - + - + @@ -26656,24 +26728,24 @@ - - - - - - - - - - - - + + + + + + + + + + + + - - + + - - + + @@ -26707,7 +26779,7 @@ - + @@ -26715,22 +26787,22 @@ - - + + - - + + - + - + @@ -26741,36 +26813,36 @@ - + - + - + - - + + - - + + - + - - + + @@ -26783,7 +26855,7 @@ - + @@ -26791,8 +26863,8 @@ - - + + @@ -26805,8 +26877,8 @@ - - + + @@ -26825,305 +26897,297 @@ - - + + - + - + - + - + - - + + - - + + - - + + - - - - + + + + - - - + + + - - - + + + - - + + - - + + - - - - + + + + - - - - + + + + - - + + - - - + + + - - - - + + + + - - - - - + + + + + - - + + - + - - + + - - + + - + - + - - - - - - - - - - - - - - - - - - + + + + + + + + + + - + - - - - + + + + - - - - + + + + - - - - - + + + + + - - - - - + + + + + - - - - - - + + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - - + + + + + - + - + - + - + - + - - - + + + - - + + - - + + - - + + - - - + + + - + - - + + - + - - - - - + + + + + @@ -27135,9 +27199,9 @@ - - - + + + @@ -27182,21 +27246,21 @@ - + - + - - - + + + @@ -27205,74 +27269,69 @@ - + - + - + - - - - - - - + + - - + + - + - + - - - + + + - + - - + + - + - + - - - - - - + + + + + + - + - + - + @@ -27280,174 +27339,174 @@ - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - + + - - - - + + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - + + + - - - + + + - - + + - + - - - + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - + + + + + + + - + - + - + @@ -27464,7 +27523,7 @@ - + @@ -27483,101 +27542,101 @@ - + - - + + - - - + + + - - - + + + - - - - + + + + - - - - + + + + - + - + - - + + - + - - - - + + + + - + - + - - + + - + - + - + - + - - - + + + - + - + @@ -27635,22 +27694,22 @@ - - - + + + - - + + - - + + - + - + @@ -27658,8 +27717,8 @@ - - + + @@ -27671,24 +27730,24 @@ - - + + - + - - + + - - + + @@ -27705,11 +27764,11 @@ - + - + @@ -27719,138 +27778,138 @@ - + - + - + - - + + - + - - - - + + + + - - + + - - + + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - + + + + + - + - + - + - - + + - + - + - + - - - + + + - - - - - - - + + + + + + + @@ -27860,7 +27919,7 @@ - + @@ -27934,7 +27993,7 @@ - + @@ -28016,22 +28075,22 @@ - - + + - - + + - + - + @@ -28044,8 +28103,8 @@ - - + + @@ -28054,7 +28113,7 @@ - + @@ -28077,11 +28136,11 @@ - + - + @@ -28089,7 +28148,7 @@ - + @@ -28120,7 +28179,7 @@ - + @@ -28136,7 +28195,7 @@ - + @@ -28174,7 +28233,7 @@ - + @@ -28282,23 +28341,23 @@ - + - + - + - + - + - + @@ -28321,14 +28380,20 @@ - + + + + + + + @@ -28349,27 +28414,27 @@ - + - + - + - + - + - + @@ -28399,7 +28464,7 @@ - + @@ -28408,14 +28473,14 @@ - - + + - - - + + + @@ -28424,82 +28489,82 @@ - + - - + + - - - - + + + + - - - - + + + + - - + + - - + + - + - + - + - + - - + + - - - + + + - - + + - - + + - - - + + + - - - + + + - - - - + + + + - - - - - + + + + + @@ -28519,18 +28584,18 @@ - + - + - + @@ -28549,7 +28614,7 @@ - + @@ -28573,14 +28638,14 @@ - + - + - + @@ -28591,40 +28656,40 @@ - + - + - + - + - + - + - + - + - + @@ -28644,7 +28709,7 @@ - + @@ -28652,7 +28717,7 @@ - + @@ -28691,67 +28756,67 @@ - + - - + + - - - + + + - - - + + + - + - + - + - - - + + + - - - + + + - - + + - + - + - + - + - + - + @@ -28761,9 +28826,9 @@ - - - + + + @@ -28772,10 +28837,10 @@ - - - - + + + + @@ -28784,11 +28849,11 @@ - - - - - + + + + + @@ -28805,151 +28870,151 @@ - - - - + + + + - - - - + + + + - - - - + + + + - - - - - + + + + + - - - + + + - - - - + + + + - - - - - - - - + + + + + + + + - - - - - - + + + + + + - - - + + + - - - - + + + + - - - - + + + + - - - - - - + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - + + + - - - - + + + + - - - - - + + + + + - - + + - - - - + + + + - - - - - + + + + + - - - + + + - - - + + + - - + + @@ -28960,11 +29025,11 @@ - + - - + + @@ -28993,186 +29058,186 @@ - + - - - - - - - - - + + + + + + + + + - - - + + + - - - + + + - - + + - + - + - - + + - - - + + + - - - + + + - + - + - + - + - + - + - + - - - + + + - - - + + + - - - + + + - - - - + + + + - - + + - + - + - + - - + + - + - - + + - - + + - - + + - + - - + + - + - + - - + + - + - + - + @@ -29180,49 +29245,49 @@ - - + + - - - + + + - - - - + + + + - + - + - - - - - + + + + + + + + - - - - - - - - - + + + + + + - - + + - - - - + + + + @@ -29230,59 +29295,59 @@ - - + + - + - + - + - + - + - + - - + + - + - - + + - + - + - + @@ -29297,7 +29362,7 @@ - + @@ -29309,76 +29374,76 @@ - + - - - + + + - + - + - - - - - + + + + + - - - + + + - - + + - - + + - - - - - + + + + + - + - - + + - - + + - - - + + + - - + + - + - + - + @@ -29389,7 +29454,7 @@ - + @@ -29397,21 +29462,21 @@ - - - - - + + + + + - - - + + + - - - + + + diff --git a/Include/internal/pycore_pymem.h b/Include/internal/pycore_pymem.h index dd6b0762370c92..e9593dbff1cc60 100644 --- a/Include/internal/pycore_pymem.h +++ b/Include/internal/pycore_pymem.h @@ -117,7 +117,7 @@ extern int _PyMem_SetupAllocators(PyMemAllocatorName allocator); extern int _PyMem_DebugEnabled(void); // Enqueue a pointer to be freed possibly after some delay. -extern void _PyMem_FreeDelayed(void *ptr); +extern void _PyMem_FreeDelayed(void *ptr, size_t size); // Enqueue an object to be freed possibly after some delay extern void _PyObject_FreeDelayed(void *ptr); diff --git a/Include/internal/pycore_qsbr.h b/Include/internal/pycore_qsbr.h index 20e643e172b38d..84e9d98dd21bda 100644 --- a/Include/internal/pycore_qsbr.h +++ b/Include/internal/pycore_qsbr.h @@ -49,8 +49,21 @@ struct _qsbr_thread_state { // Thread state (or NULL) PyThreadState *tstate; - // Used to defer advancing write sequence a fixed number of times - int deferrals; + // Number of held items added by this thread since the last write sequence + // advance + int deferred_count; + + // Estimate for the amount of memory that is held by this thread since + // the last write sequence advance + size_t deferred_memory; + + // Amount of memory in mimalloc pages deferred from collection. When + // deferred, they are prevented from being used for a different size class + // and in a different thread. + size_t deferred_page_memory; + + // True if the deferred memory frees should be processed. + bool should_process; // Is this thread state allocated? bool allocated; @@ -110,11 +123,17 @@ _Py_qbsr_goal_reached(struct _qsbr_thread_state *qsbr, uint64_t goal) extern uint64_t _Py_qsbr_advance(struct _qsbr_shared *shared); -// Batches requests to advance the write sequence. This advances the write -// sequence every N calls, which reduces overhead but increases time to -// reclamation. Returns the new goal. +// Return the next value for the write sequence (current plus the increment). extern uint64_t -_Py_qsbr_deferred_advance(struct _qsbr_thread_state *qsbr); +_Py_qsbr_shared_next(struct _qsbr_shared *shared); + +// Return true if deferred memory frees held by QSBR should be processed to +// determine if they can be safely freed. +static inline bool +_Py_qsbr_should_process(struct _qsbr_thread_state *qsbr) +{ + return qsbr->should_process; +} // Have the read sequences advanced to the given goal? If this returns true, // it safe to reclaim any memory tagged with the goal (or earlier goal). diff --git a/Misc/NEWS.d/next/Core_and_Builtins/2025-06-03-21-06-22.gh-issue-133136.Usnvri.rst b/Misc/NEWS.d/next/Core_and_Builtins/2025-06-03-21-06-22.gh-issue-133136.Usnvri.rst new file mode 100644 index 00000000000000..a9501c13c95b3a --- /dev/null +++ b/Misc/NEWS.d/next/Core_and_Builtins/2025-06-03-21-06-22.gh-issue-133136.Usnvri.rst @@ -0,0 +1,2 @@ +Limit excess memory usage in the :term:`free threading` build when a +large dictionary or list is resized and accessed by multiple threads. diff --git a/Objects/dictobject.c b/Objects/dictobject.c index baac54911f0371..0508900c42ebf7 100644 --- a/Objects/dictobject.c +++ b/Objects/dictobject.c @@ -851,7 +851,7 @@ free_keys_object(PyDictKeysObject *keys, bool use_qsbr) { #ifdef Py_GIL_DISABLED if (use_qsbr) { - _PyMem_FreeDelayed(keys); + _PyMem_FreeDelayed(keys, _PyDict_KeysSize(keys)); return; } #endif @@ -902,7 +902,7 @@ free_values(PyDictValues *values, bool use_qsbr) assert(values->embedded == 0); #ifdef Py_GIL_DISABLED if (use_qsbr) { - _PyMem_FreeDelayed(values); + _PyMem_FreeDelayed(values, values_size_from_count(values->capacity)); return; } #endif diff --git a/Objects/listobject.c b/Objects/listobject.c index 04a31f1f34a4bb..8af6964189ec3e 100644 --- a/Objects/listobject.c +++ b/Objects/listobject.c @@ -68,7 +68,8 @@ free_list_items(PyObject** items, bool use_qsbr) #ifdef Py_GIL_DISABLED _PyListArray *array = _Py_CONTAINER_OF(items, _PyListArray, ob_item); if (use_qsbr) { - _PyMem_FreeDelayed(array); + size_t size = sizeof(_PyListArray) + array->allocated * sizeof(PyObject *); + _PyMem_FreeDelayed(array, size); } else { PyMem_Free(array); diff --git a/Objects/obmalloc.c b/Objects/obmalloc.c index 6f23639645000b..3fdc9d01f2d21c 100644 --- a/Objects/obmalloc.c +++ b/Objects/obmalloc.c @@ -123,6 +123,33 @@ _PyMem_mi_page_is_safe_to_free(mi_page_t *page) } +#ifdef Py_GIL_DISABLED + +// If we are deferring collection of more than this amount of memory for +// mimalloc pages, advance the write sequence. Advancing allows these +// pages to be re-used in a different thread or for a different size class. +#define QSBR_PAGE_MEM_LIMIT 4096*20 + +// Return true if the global write sequence should be advanced for a mimalloc +// page that is deferred from collection. +static bool +should_advance_qsbr_for_page(struct _qsbr_thread_state *qsbr, mi_page_t *page) +{ + size_t bsize = mi_page_block_size(page); + size_t page_size = page->capacity*bsize; + if (page_size > QSBR_PAGE_MEM_LIMIT) { + qsbr->deferred_page_memory = 0; + return true; + } + qsbr->deferred_page_memory += page_size; + if (qsbr->deferred_page_memory > QSBR_PAGE_MEM_LIMIT) { + qsbr->deferred_page_memory = 0; + return true; + } + return false; +} +#endif + static bool _PyMem_mi_page_maybe_free(mi_page_t *page, mi_page_queue_t *pq, bool force) { @@ -138,7 +165,14 @@ _PyMem_mi_page_maybe_free(mi_page_t *page, mi_page_queue_t *pq, bool force) _PyMem_mi_page_clear_qsbr(page); page->retire_expire = 0; - page->qsbr_goal = _Py_qsbr_deferred_advance(tstate->qsbr); + + if (should_advance_qsbr_for_page(tstate->qsbr, page)) { + page->qsbr_goal = _Py_qsbr_advance(tstate->qsbr->shared); + } + else { + page->qsbr_goal = _Py_qsbr_shared_next(tstate->qsbr->shared); + } + llist_insert_tail(&tstate->mimalloc.page_list, &page->qsbr_node); return false; } @@ -1103,8 +1137,44 @@ free_work_item(uintptr_t ptr) } } + +#ifdef Py_GIL_DISABLED + +// For deferred advance on free: the number of deferred items before advancing +// the write sequence. This is based on WORK_ITEMS_PER_CHUNK. We ideally +// want to process a chunk before it overflows. +#define QSBR_DEFERRED_LIMIT 127 + +// If the deferred memory exceeds 1 MiB, advance the write sequence. This +// helps limit memory usage due to QSBR delaying frees too long. +#define QSBR_FREE_MEM_LIMIT 1024*1024 + +// Return true if the global write sequence should be advanced for a deferred +// memory free. +static bool +should_advance_qsbr_for_free(struct _qsbr_thread_state *qsbr, size_t size) +{ + if (size > QSBR_FREE_MEM_LIMIT) { + qsbr->deferred_count = 0; + qsbr->deferred_memory = 0; + qsbr->should_process = true; + return true; + } + qsbr->deferred_count++; + qsbr->deferred_memory += size; + if (qsbr->deferred_count > QSBR_DEFERRED_LIMIT || + qsbr->deferred_memory > QSBR_FREE_MEM_LIMIT) { + qsbr->deferred_count = 0; + qsbr->deferred_memory = 0; + qsbr->should_process = true; + return true; + } + return false; +} +#endif + static void -free_delayed(uintptr_t ptr) +free_delayed(uintptr_t ptr, size_t size) { #ifndef Py_GIL_DISABLED free_work_item(ptr); @@ -1145,23 +1215,32 @@ free_delayed(uintptr_t ptr) } assert(buf != NULL && buf->wr_idx < WORK_ITEMS_PER_CHUNK); - uint64_t seq = _Py_qsbr_deferred_advance(tstate->qsbr); + uint64_t seq; + if (should_advance_qsbr_for_free(tstate->qsbr, size)) { + seq = _Py_qsbr_advance(tstate->qsbr->shared); + } + else { + seq = _Py_qsbr_shared_next(tstate->qsbr->shared); + } buf->array[buf->wr_idx].ptr = ptr; buf->array[buf->wr_idx].qsbr_goal = seq; buf->wr_idx++; if (buf->wr_idx == WORK_ITEMS_PER_CHUNK) { + // Normally the processing of delayed items is done from the eval + // breaker. Processing here is a safety measure to ensure too much + // work does not accumulate. _PyMem_ProcessDelayed((PyThreadState *)tstate); } #endif } void -_PyMem_FreeDelayed(void *ptr) +_PyMem_FreeDelayed(void *ptr, size_t size) { assert(!((uintptr_t)ptr & 0x01)); if (ptr != NULL) { - free_delayed((uintptr_t)ptr); + free_delayed((uintptr_t)ptr, size); } } @@ -1169,7 +1248,10 @@ void _PyObject_FreeDelayed(void *ptr) { assert(!((uintptr_t)ptr & 0x01)); - free_delayed(((uintptr_t)ptr)|0x01); + // We use 0 as the size since we don't have an easy way to know the + // actual size. If we are freeing many objects, the write sequence + // will be advanced due to QSBR_DEFERRED_LIMIT. + free_delayed(((uintptr_t)ptr)|0x01, 0); } static struct _mem_work_chunk * @@ -1239,6 +1321,8 @@ _PyMem_ProcessDelayed(PyThreadState *tstate) PyInterpreterState *interp = tstate->interp; _PyThreadStateImpl *tstate_impl = (_PyThreadStateImpl *)tstate; + tstate_impl->qsbr->should_process = false; + // Process thread-local work process_queue(&tstate_impl->mem_free_queue, tstate_impl->qsbr, true); diff --git a/Python/ceval_gil.c b/Python/ceval_gil.c index 0b45caba0d49ff..e82993b8f7ca7f 100644 --- a/Python/ceval_gil.c +++ b/Python/ceval_gil.c @@ -1288,6 +1288,10 @@ _Py_HandlePending(PyThreadState *tstate) _Py_unset_eval_breaker_bit(tstate, _PY_EVAL_EXPLICIT_MERGE_BIT); _Py_brc_merge_refcounts(tstate); } + /* Process deferred memory frees held by QSBR */ + if (_Py_qsbr_should_process(((_PyThreadStateImpl *)tstate)->qsbr)) { + _PyMem_ProcessDelayed(tstate); + } #endif /* GC scheduled to run */ diff --git a/Python/qsbr.c b/Python/qsbr.c index 386a8451dc40c0..935226e36e84cd 100644 --- a/Python/qsbr.c +++ b/Python/qsbr.c @@ -41,10 +41,6 @@ // Starting size of the array of qsbr thread states #define MIN_ARRAY_SIZE 8 -// For _Py_qsbr_deferred_advance(): the number of deferrals before advancing -// the write sequence. -#define QSBR_DEFERRED_LIMIT 10 - // Allocate a QSBR thread state from the freelist static struct _qsbr_thread_state * qsbr_allocate(struct _qsbr_shared *shared) @@ -117,13 +113,9 @@ _Py_qsbr_advance(struct _qsbr_shared *shared) } uint64_t -_Py_qsbr_deferred_advance(struct _qsbr_thread_state *qsbr) +_Py_qsbr_shared_next(struct _qsbr_shared *shared) { - if (++qsbr->deferrals < QSBR_DEFERRED_LIMIT) { - return _Py_qsbr_shared_current(qsbr->shared) + QSBR_INCR; - } - qsbr->deferrals = 0; - return _Py_qsbr_advance(qsbr->shared); + return _Py_qsbr_shared_current(shared) + QSBR_INCR; } static uint64_t