dynamic
- #1892 @ 2026-10-02 15:44:42 Selected tier: 2
- #1893 @ 2026-10-02 15:44:42 - Roundstart population: 4
- #1894 @ 2026-10-02 15:44:42 - Roundstart ruleset count: 1
- #1895 @ 2026-10-02 15:44:42 - Light midround ruleset count: 2
- #1896 @ 2026-10-02 15:44:42 - Heavy midround ruleset count: 1
- #1897 @ 2026-10-02 15:44:42 - Latejoin ruleset count: 1
- #1898 @ 2026-10-02 15:44:42 Roundstart: No rulesets to pick from!
- #7840 @ 2026-10-02 16:09:54 Midround (light_midround): Szeken/(Echo Eterna) has been selected for Midround Traitor.
- #11644 @ 2026-10-02 16:25:14 Midround (light_midround): typhnox/(Imitates-The-Lizards) has been selected for Midround Traitor.
- #14777 @ 2026-10-02 16:40:05 Midround (heavy_midround): No rulesets to pick from!
- #15476 @ 2026-10-02 16:45:06 Midround (heavy_midround): No rulesets to pick from!
- #16447 @ 2026-10-02 16:50:06 Midround (heavy_midround): No rulesets to pick from!
- #17349 @ 2026-10-02 16:55:08 Midround (heavy_midround): No rulesets to pick from!
- #18196 @ 2026-10-02 16:59:09 Latejoin: Selected ruleset Traitor for motherofsage/(Achernar CJ), but preparation failed! Latejoin chance has increased. Reason: Not enough eligible candidates. Have: 0, Need: 1
- #18476 @ 2026-10-02 17:00:09 Midround (heavy_midround): No rulesets to pick from!
- #19764 @ 2026-10-02 17:05:11 Midround (heavy_midround): No rulesets to pick from!
- #19943 @ 2026-10-02 17:05:25 Latejoin: Selected ruleset Traitor for thinkerwhov/(Zen D Chaffen), but preparation failed! Latejoin chance has increased. Reason: Not enough eligible candidates. Have: 0, Need: 1
- #21002 @ 2026-10-02 17:10:13 Midround (heavy_midround): No rulesets to pick from!
- #22095 @ 2026-10-02 17:15:14 Midround (heavy_midround): No rulesets to pick from!
- #22628 @ 2026-10-02 17:17:09 Latejoin: Selected ruleset Traitor for sablesteel/(Verity Blanche), but preparation failed! Latejoin chance has increased. Reason: Not enough eligible candidates. Have: 0, Need: 1
- #23170 @ 2026-10-02 17:20:14 Midround (heavy_midround): No rulesets to pick from!
- #24326 @ 2026-10-02 17:25:16 Midround (heavy_midround): Ruleset chance failed (52.9412% chance)
- #25178 @ 2026-10-02 17:30:18 Midround (heavy_midround): No rulesets to pick from!
Raw Data
{
"data": {
"1": {
"ts": {
"date": "2026-10-02 15:44:42.562000",
"timezone_type": 3,
"timezone": "UTC"
},
"cat": "dynamic",
"msg": "Selected tier: 2",
"data": null,
"w-state": {
"tick_usage": 163.08,
"tick_lag": 0.5,
"time": 2996,
"timestamp": "1790955882.562445"
},
"s-store": null,
"id": 1892,
"s-ver": "1.0.0"
},
"2": {
"ts": {
"date": "2026-10-02 15:44:42.562000",
"timezone_type": 3,
"timezone": "UTC"
},
"cat": "dynamic",
"msg": "- Roundstart population: 4",
"data": null,
"w-state": {
"tick_usage": 163.462,
"tick_lag": 0.5,
"time": 2996,
"timestamp": "1790955882.562636"
},
"s-store": null,
"id": 1893,
"s-ver": "1.0.0"
},
"3": {
"ts": {
"date": "2026-10-02 15:44:42.562000",
"timezone_type": 3,
"timezone": "UTC"
},
"cat": "dynamic",
"msg": "- Roundstart ruleset count: 1",
"data": null,
"w-state": {
"tick_usage": 163.77,
"tick_lag": 0.5,
"time": 2996,
"timestamp": "1790955882.562790"
},
"s-store": null,
"id": 1894,
"s-ver": "1.0.0"
},
"4": {
"ts": {
"date": "2026-10-02 15:44:42.562000",
"timezone_type": 3,
"timezone": "UTC"
},
"cat": "dynamic",
"msg": "- Light midround ruleset count: 2",
"data": null,
"w-state": {
"tick_usage": 164.052,
"tick_lag": 0.5,
"time": 2996,
"timestamp": "1790955882.562931"
},
"s-store": null,
"id": 1895,
"s-ver": "1.0.0"
},
"5": {
"ts": {
"date": "2026-10-02 15:44:42.562000",
"timezone_type": 3,
"timezone": "UTC"
},
"cat": "dynamic",
"msg": "- Heavy midround ruleset count: 1",
"data": null,
"w-state": {
"tick_usage": 164.33,
"tick_lag": 0.5,
"time": 2996,
"timestamp": "1790955882.563070"
},
"s-store": null,
"id": 1896,
"s-ver": "1.0.0"
},
"6": {
"ts": {
"date": "2026-10-02 15:44:42.563000",
"timezone_type": 3,
"timezone": "UTC"
},
"cat": "dynamic",
"msg": "- Latejoin ruleset count: 1",
"data": null,
"w-state": {
"tick_usage": 164.63,
"tick_lag": 0.5,
"time": 2996,
"timestamp": "1790955882.563220"
},
"s-store": null,
"id": 1897,
"s-ver": "1.0.0"
},
"7": {
"ts": {
"date": "2026-10-02 15:44:42.563000",
"timezone_type": 3,
"timezone": "UTC"
},
"cat": "dynamic",
"msg": "Roundstart: No rulesets to pick from!",
"data": null,
"w-state": {
"tick_usage": 166.128,
"tick_lag": 0.5,
"time": 2996,
"timestamp": "1790955882.563969"
},
"s-store": null,
"id": 1898,
"s-ver": "1.0.0"
},
"8": {
"ts": {
"date": "2026-10-02 16:09:54.235000",
"timezone_type": 3,
"timezone": "UTC"
},
"cat": "dynamic",
"msg": "Midround (light_midround): Szeken\/(Echo Eterna) has been selected for Midround Traitor.",
"data": null,
"w-state": {
"tick_usage": 42.428,
"tick_lag": 0.5,
"time": 17993.5,
"timestamp": "1790957394.235859"
},
"s-store": null,
"id": 7840,
"s-ver": "1.0.0"
},
"9": {
"ts": {
"date": "2026-10-02 16:25:14.289000",
"timezone_type": 3,
"timezone": "UTC"
},
"cat": "dynamic",
"msg": "Midround (light_midround): typhnox\/(Imitates-The-Lizards) has been selected for Midround Traitor.",
"data": null,
"w-state": {
"tick_usage": 16.892,
"tick_lag": 0.5,
"time": 27143.5,
"timestamp": "1790958314.289863"
},
"s-store": null,
"id": 11644,
"s-ver": "1.0.0"
},
"10": {
"ts": {
"date": "2026-10-02 16:40:05.318000",
"timezone_type": 3,
"timezone": "UTC"
},
"cat": "dynamic",
"msg": "Midround (heavy_midround): No rulesets to pick from!",
"data": null,
"w-state": {
"tick_usage": 9.996,
"tick_lag": 0.5,
"time": 35993.5,
"timestamp": "1790959205.318859"
},
"s-store": null,
"id": 14777,
"s-ver": "1.0.0"
},
"11": {
"ts": {
"date": "2026-10-02 16:45:06.301000",
"timezone_type": 3,
"timezone": "UTC"
},
"cat": "dynamic",
"msg": "Midround (heavy_midround): No rulesets to pick from!",
"data": null,
"w-state": {
"tick_usage": 14.272,
"tick_lag": 0.5,
"time": 38993.5,
"timestamp": "1790959506.302045"
},
"s-store": null,
"id": 15476,
"s-ver": "1.0.0"
},
"12": {
"ts": {
"date": "2026-10-02 16:50:06.972000",
"timezone_type": 3,
"timezone": "UTC"
},
"cat": "dynamic",
"msg": "Midround (heavy_midround): No rulesets to pick from!",
"data": null,
"w-state": {
"tick_usage": 15.252,
"tick_lag": 0.5,
"time": 41993.5,
"timestamp": "1790959806.972317"
},
"s-store": null,
"id": 16447,
"s-ver": "1.0.0"
},
"13": {
"ts": {
"date": "2026-10-02 16:55:08.532000",
"timezone_type": 3,
"timezone": "UTC"
},
"cat": "dynamic",
"msg": "Midround (heavy_midround): No rulesets to pick from!",
"data": null,
"w-state": {
"tick_usage": 17.704,
"tick_lag": 0.5,
"time": 44993.5,
"timestamp": "1790960108.533123"
},
"s-store": null,
"id": 17349,
"s-ver": "1.0.0"
},
"14": {
"ts": {
"date": "2026-10-02 16:59:09.011000",
"timezone_type": 3,
"timezone": "UTC"
},
"cat": "dynamic",
"msg": "Latejoin: Selected ruleset Traitor for motherofsage\/(Achernar CJ), but preparation failed! Latejoin chance has increased. Reason: Not enough eligible candidates. Have: 0, Need: 1",
"data": null,
"w-state": {
"tick_usage": 251.994,
"tick_lag": 0.5,
"time": 47391,
"timestamp": "1790960349.011282"
},
"s-store": null,
"id": 18196,
"s-ver": "1.0.0"
},
"15": {
"ts": {
"date": "2026-10-02 17:00:09.871000",
"timezone_type": 3,
"timezone": "UTC"
},
"cat": "dynamic",
"msg": "Midround (heavy_midround): No rulesets to pick from!",
"data": null,
"w-state": {
"tick_usage": 47.398,
"tick_lag": 0.5,
"time": 47993.5,
"timestamp": "1790960409.872230"
},
"s-store": null,
"id": 18476,
"s-ver": "1.0.0"
},
"16": {
"ts": {
"date": "2026-10-02 17:05:11.416000",
"timezone_type": 3,
"timezone": "UTC"
},
"cat": "dynamic",
"msg": "Midround (heavy_midround): No rulesets to pick from!",
"data": null,
"w-state": {
"tick_usage": 21.132,
"tick_lag": 0.5,
"time": 50993.5,
"timestamp": "1790960711.417379"
},
"s-store": null,
"id": 19764,
"s-ver": "1.0.0"
},
"17": {
"ts": {
"date": "2026-10-02 17:05:25.230000",
"timezone_type": 3,
"timezone": "UTC"
},
"cat": "dynamic",
"msg": "Latejoin: Selected ruleset Traitor for thinkerwhov\/(Zen D Chaffen), but preparation failed! Latejoin chance has increased. Reason: Not enough eligible candidates. Have: 0, Need: 1",
"data": null,
"w-state": {
"tick_usage": 226.968,
"tick_lag": 0.5,
"time": 51130.5,
"timestamp": "1790960725.230969"
},
"s-store": null,
"id": 19943,
"s-ver": "1.0.0"
},
"18": {
"ts": {
"date": "2026-10-02 17:10:13.170000",
"timezone_type": 3,
"timezone": "UTC"
},
"cat": "dynamic",
"msg": "Midround (heavy_midround): No rulesets to pick from!",
"data": null,
"w-state": {
"tick_usage": 13.224,
"tick_lag": 0.5,
"time": 53993.5,
"timestamp": "1790961013.170772"
},
"s-store": null,
"id": 21002,
"s-ver": "1.0.0"
},
"19": {
"ts": {
"date": "2026-10-02 17:15:14.085000",
"timezone_type": 3,
"timezone": "UTC"
},
"cat": "dynamic",
"msg": "Midround (heavy_midround): No rulesets to pick from!",
"data": null,
"w-state": {
"tick_usage": 13.19,
"tick_lag": 0.5,
"time": 56993.5,
"timestamp": "1790961314.085515"
},
"s-store": null,
"id": 22095,
"s-ver": "1.0.0"
},
"20": {
"ts": {
"date": "2026-10-02 17:17:09.978000",
"timezone_type": 3,
"timezone": "UTC"
},
"cat": "dynamic",
"msg": "Latejoin: Selected ruleset Traitor for sablesteel\/(Verity Blanche), but preparation failed! Latejoin chance has increased. Reason: Not enough eligible candidates. Have: 0, Need: 1",
"data": null,
"w-state": {
"tick_usage": 226.964,
"tick_lag": 0.5,
"time": 58149.5,
"timestamp": "1790961429.978385"
},
"s-store": null,
"id": 22628,
"s-ver": "1.0.0"
},
"21": {
"ts": {
"date": "2026-10-02 17:20:14.721000",
"timezone_type": 3,
"timezone": "UTC"
},
"cat": "dynamic",
"msg": "Midround (heavy_midround): No rulesets to pick from!",
"data": null,
"w-state": {
"tick_usage": 11.494,
"tick_lag": 0.5,
"time": 59993.5,
"timestamp": "1790961614.721914"
},
"s-store": null,
"id": 23170,
"s-ver": "1.0.0"
},
"22": {
"ts": {
"date": "2026-10-02 17:25:16.217000",
"timezone_type": 3,
"timezone": "UTC"
},
"cat": "dynamic",
"msg": "Midround (heavy_midround): Ruleset chance failed (52.9412% chance)",
"data": null,
"w-state": {
"tick_usage": 27.058,
"tick_lag": 0.5,
"time": 62993.5,
"timestamp": "1790961916.217899"
},
"s-store": null,
"id": 24326,
"s-ver": "1.0.0"
},
"23": {
"ts": {
"date": "2026-10-02 17:30:18.271000",
"timezone_type": 3,
"timezone": "UTC"
},
"cat": "dynamic",
"msg": "Midround (heavy_midround): No rulesets to pick from!",
"data": null,
"w-state": {
"tick_usage": 11.72,
"tick_lag": 0.5,
"time": 65993.5,
"timestamp": "1790962218.271871"
},
"s-store": null,
"id": 25178,
"s-ver": "1.0.0"
}
},
"parser": "\\App\\Entity\\Stat\\dynamic",
"id": -1,
"datetime": {
"date": "2026-10-02 15:38:36.000000",
"timezone_type": 3,
"timezone": "UTC"
},
"round": 264179,
"key": "dynamic",
"type": "generated",
"version": 1,
"json": "[{\"ts\":\"1790955516.662657\",\"round-id\":\"264179\",\"secret\":0,\"cat-list\":[\"dynamic\"],\"cat\":\"dynamic\"},{\"ts\":\"2026-10-02 15:44:42.562\",\"cat\":\"dynamic\",\"msg\":\"Selected tier: 2\",\"data\":null,\"w-state\":{\"tick_usage\":163.08,\"tick_lag\":0.5,\"time\":2996,\"timestamp\":\"1790955882.562445\"},\"s-store\":null,\"id\":1892,\"s-ver\":\"1.0.0\"},{\"ts\":\"2026-10-02 15:44:42.562\",\"cat\":\"dynamic\",\"msg\":\"- Roundstart population: 4\",\"data\":null,\"w-state\":{\"tick_usage\":163.462,\"tick_lag\":0.5,\"time\":2996,\"timestamp\":\"1790955882.562636\"},\"s-store\":null,\"id\":1893,\"s-ver\":\"1.0.0\"},{\"ts\":\"2026-10-02 15:44:42.562\",\"cat\":\"dynamic\",\"msg\":\"- Roundstart ruleset count: 1\",\"data\":null,\"w-state\":{\"tick_usage\":163.77,\"tick_lag\":0.5,\"time\":2996,\"timestamp\":\"1790955882.562790\"},\"s-store\":null,\"id\":1894,\"s-ver\":\"1.0.0\"},{\"ts\":\"2026-10-02 15:44:42.562\",\"cat\":\"dynamic\",\"msg\":\"- Light midround ruleset count: 2\",\"data\":null,\"w-state\":{\"tick_usage\":164.052,\"tick_lag\":0.5,\"time\":2996,\"timestamp\":\"1790955882.562931\"},\"s-store\":null,\"id\":1895,\"s-ver\":\"1.0.0\"},{\"ts\":\"2026-10-02 15:44:42.562\",\"cat\":\"dynamic\",\"msg\":\"- Heavy midround ruleset count: 1\",\"data\":null,\"w-state\":{\"tick_usage\":164.33,\"tick_lag\":0.5,\"time\":2996,\"timestamp\":\"1790955882.563070\"},\"s-store\":null,\"id\":1896,\"s-ver\":\"1.0.0\"},{\"ts\":\"2026-10-02 15:44:42.563\",\"cat\":\"dynamic\",\"msg\":\"- Latejoin ruleset count: 1\",\"data\":null,\"w-state\":{\"tick_usage\":164.63,\"tick_lag\":0.5,\"time\":2996,\"timestamp\":\"1790955882.563220\"},\"s-store\":null,\"id\":1897,\"s-ver\":\"1.0.0\"},{\"ts\":\"2026-10-02 15:44:42.563\",\"cat\":\"dynamic\",\"msg\":\"Roundstart: No rulesets to pick from!\",\"data\":null,\"w-state\":{\"tick_usage\":166.128,\"tick_lag\":0.5,\"time\":2996,\"timestamp\":\"1790955882.563969\"},\"s-store\":null,\"id\":1898,\"s-ver\":\"1.0.0\"},{\"ts\":\"2026-10-02 16:09:54.235\",\"cat\":\"dynamic\",\"msg\":\"Midround (light_midround): Szeken\\\/(Echo Eterna) has been selected for Midround Traitor.\",\"data\":null,\"w-state\":{\"tick_usage\":42.428,\"tick_lag\":0.5,\"time\":17993.5,\"timestamp\":\"1790957394.235859\"},\"s-store\":null,\"id\":7840,\"s-ver\":\"1.0.0\"},{\"ts\":\"2026-10-02 16:25:14.289\",\"cat\":\"dynamic\",\"msg\":\"Midround (light_midround): typhnox\\\/(Imitates-The-Lizards) has been selected for Midround Traitor.\",\"data\":null,\"w-state\":{\"tick_usage\":16.892,\"tick_lag\":0.5,\"time\":27143.5,\"timestamp\":\"1790958314.289863\"},\"s-store\":null,\"id\":11644,\"s-ver\":\"1.0.0\"},{\"ts\":\"2026-10-02 16:40:05.318\",\"cat\":\"dynamic\",\"msg\":\"Midround (heavy_midround): No rulesets to pick from!\",\"data\":null,\"w-state\":{\"tick_usage\":9.996,\"tick_lag\":0.5,\"time\":35993.5,\"timestamp\":\"1790959205.318859\"},\"s-store\":null,\"id\":14777,\"s-ver\":\"1.0.0\"},{\"ts\":\"2026-10-02 16:45:06.301\",\"cat\":\"dynamic\",\"msg\":\"Midround (heavy_midround): No rulesets to pick from!\",\"data\":null,\"w-state\":{\"tick_usage\":14.272,\"tick_lag\":0.5,\"time\":38993.5,\"timestamp\":\"1790959506.302045\"},\"s-store\":null,\"id\":15476,\"s-ver\":\"1.0.0\"},{\"ts\":\"2026-10-02 16:50:06.972\",\"cat\":\"dynamic\",\"msg\":\"Midround (heavy_midround): No rulesets to pick from!\",\"data\":null,\"w-state\":{\"tick_usage\":15.252,\"tick_lag\":0.5,\"time\":41993.5,\"timestamp\":\"1790959806.972317\"},\"s-store\":null,\"id\":16447,\"s-ver\":\"1.0.0\"},{\"ts\":\"2026-10-02 16:55:08.532\",\"cat\":\"dynamic\",\"msg\":\"Midround (heavy_midround): No rulesets to pick from!\",\"data\":null,\"w-state\":{\"tick_usage\":17.704,\"tick_lag\":0.5,\"time\":44993.5,\"timestamp\":\"1790960108.533123\"},\"s-store\":null,\"id\":17349,\"s-ver\":\"1.0.0\"},{\"ts\":\"2026-10-02 16:59:09.011\",\"cat\":\"dynamic\",\"msg\":\"Latejoin: Selected ruleset Traitor for motherofsage\\\/(Achernar CJ), but preparation failed! Latejoin chance has increased. Reason: Not enough eligible candidates. Have: 0, Need: 1\",\"data\":null,\"w-state\":{\"tick_usage\":251.994,\"tick_lag\":0.5,\"time\":47391,\"timestamp\":\"1790960349.011282\"},\"s-store\":null,\"id\":18196,\"s-ver\":\"1.0.0\"},{\"ts\":\"2026-10-02 17:00:09.871\",\"cat\":\"dynamic\",\"msg\":\"Midround (heavy_midround): No rulesets to pick from!\",\"data\":null,\"w-state\":{\"tick_usage\":47.398,\"tick_lag\":0.5,\"time\":47993.5,\"timestamp\":\"1790960409.872230\"},\"s-store\":null,\"id\":18476,\"s-ver\":\"1.0.0\"},{\"ts\":\"2026-10-02 17:05:11.416\",\"cat\":\"dynamic\",\"msg\":\"Midround (heavy_midround): No rulesets to pick from!\",\"data\":null,\"w-state\":{\"tick_usage\":21.132,\"tick_lag\":0.5,\"time\":50993.5,\"timestamp\":\"1790960711.417379\"},\"s-store\":null,\"id\":19764,\"s-ver\":\"1.0.0\"},{\"ts\":\"2026-10-02 17:05:25.230\",\"cat\":\"dynamic\",\"msg\":\"Latejoin: Selected ruleset Traitor for thinkerwhov\\\/(Zen D Chaffen), but preparation failed! Latejoin chance has increased. Reason: Not enough eligible candidates. Have: 0, Need: 1\",\"data\":null,\"w-state\":{\"tick_usage\":226.968,\"tick_lag\":0.5,\"time\":51130.5,\"timestamp\":\"1790960725.230969\"},\"s-store\":null,\"id\":19943,\"s-ver\":\"1.0.0\"},{\"ts\":\"2026-10-02 17:10:13.170\",\"cat\":\"dynamic\",\"msg\":\"Midround (heavy_midround): No rulesets to pick from!\",\"data\":null,\"w-state\":{\"tick_usage\":13.224,\"tick_lag\":0.5,\"time\":53993.5,\"timestamp\":\"1790961013.170772\"},\"s-store\":null,\"id\":21002,\"s-ver\":\"1.0.0\"},{\"ts\":\"2026-10-02 17:15:14.085\",\"cat\":\"dynamic\",\"msg\":\"Midround (heavy_midround): No rulesets to pick from!\",\"data\":null,\"w-state\":{\"tick_usage\":13.19,\"tick_lag\":0.5,\"time\":56993.5,\"timestamp\":\"1790961314.085515\"},\"s-store\":null,\"id\":22095,\"s-ver\":\"1.0.0\"},{\"ts\":\"2026-10-02 17:17:09.978\",\"cat\":\"dynamic\",\"msg\":\"Latejoin: Selected ruleset Traitor for sablesteel\\\/(Verity Blanche), but preparation failed! Latejoin chance has increased. Reason: Not enough eligible candidates. Have: 0, Need: 1\",\"data\":null,\"w-state\":{\"tick_usage\":226.964,\"tick_lag\":0.5,\"time\":58149.5,\"timestamp\":\"1790961429.978385\"},\"s-store\":null,\"id\":22628,\"s-ver\":\"1.0.0\"},{\"ts\":\"2026-10-02 17:20:14.721\",\"cat\":\"dynamic\",\"msg\":\"Midround (heavy_midround): No rulesets to pick from!\",\"data\":null,\"w-state\":{\"tick_usage\":11.494,\"tick_lag\":0.5,\"time\":59993.5,\"timestamp\":\"1790961614.721914\"},\"s-store\":null,\"id\":23170,\"s-ver\":\"1.0.0\"},{\"ts\":\"2026-10-02 17:25:16.217\",\"cat\":\"dynamic\",\"msg\":\"Midround (heavy_midround): Ruleset chance failed (52.9412% chance)\",\"data\":null,\"w-state\":{\"tick_usage\":27.058,\"tick_lag\":0.5,\"time\":62993.5,\"timestamp\":\"1790961916.217899\"},\"s-store\":null,\"id\":24326,\"s-ver\":\"1.0.0\"},{\"ts\":\"2026-10-02 17:30:18.271\",\"cat\":\"dynamic\",\"msg\":\"Midround (heavy_midround): No rulesets to pick from!\",\"data\":null,\"w-state\":{\"tick_usage\":11.72,\"tick_lag\":0.5,\"time\":65993.5,\"timestamp\":\"1790962218.271871\"},\"s-store\":null,\"id\":25178,\"s-ver\":\"1.0.0\"},null]",
"originalUrl": "https:\/\/manuel-logs.tgstation13.org\/2026\/10\/02\/round-264179\/dynamic.log.json"
}
Install Gentoo