Merge branch 'pairing2' into webview2

This commit is contained in:
Claude Brisson
2023-12-21 13:09:10 +01:00
16 changed files with 9744 additions and 1319 deletions

View File

@@ -116,8 +116,16 @@ object OpenGotha {
else -> throw Error("missing byoyomi type") else -> throw Error("missing byoyomi type")
}, },
pairing = when (handParams.hdCeiling) { pairing = when (handParams.hdCeiling) {
0 -> Swiss(pairingParams = pairgothPairingParams, placementParams = pairgothPlacementParams) 0 -> Swiss(
else -> MacMahon(pairingParams = pairgothPairingParams, placementParams = pairgothPlacementParams) pairingParams = pairgothPairingParams,
placementParams = pairgothPlacementParams
)
else -> MacMahon(
pairingParams = pairgothPairingParams,
placementParams = pairgothPlacementParams,
mmFloor = Pairable.parseRank(genParams.genMMFloor),
mmBar = Pairable.parseRank(genParams.genMMBar)
)
}, },
rounds = genParams.numberOfRounds rounds = genParams.numberOfRounds
) )
@@ -241,7 +249,15 @@ object OpenGotha {
TimeSystem.TimeSystemType.STANDARD -> "STDBYOYOMI" TimeSystem.TimeSystemType.STANDARD -> "STDBYOYOMI"
TimeSystem.TimeSystemType.CANADIAN -> "CANBYOYOMI" TimeSystem.TimeSystemType.CANADIAN -> "CANBYOYOMI"
TimeSystem.TimeSystemType.FISCHER -> "FISCHER" TimeSystem.TimeSystemType.FISCHER -> "FISCHER"
} }" director="" endDate="${tournament.endDate}" fischerTime="${tournament.timeSystem.increment}" genCountNotPlayedGamesAsHalfPoint="false" genMMBar="9D" genMMFloor="30K" genMMS2ValueAbsent="1" genMMS2ValueBye="2" genMMZero="30K" genNBW2ValueAbsent="0" genNBW2ValueBye="2" genRoundDownNBWMMS="true" komi="${tournament.komi}" location="${tournament.location}" name="${tournament.name}" nbMovesCanTime="${tournament.timeSystem.stones}" numberOfCategories="1" numberOfRounds="${tournament.rounds}" shortName="${tournament.shortName}" size="${tournament.gobanSize}" stdByoYomiTime="${tournament.timeSystem.byoyomi}"/> } }" director="" endDate="${tournament.endDate}" fischerTime="${tournament.timeSystem.increment}" genCountNotPlayedGamesAsHalfPoint="false" genMMBar="${
displayRank(
if (tournament.pairing is MacMahon) tournament.pairing.mmBar else 8
).uppercase(Locale.ROOT)
}" genMMFloor="${
displayRank(
if (tournament.pairing is MacMahon) tournament.pairing.mmFloor else -30
).uppercase(Locale.ROOT)
}" genMMS2ValueAbsent="1" genMMS2ValueBye="2" genMMZero="30K" genNBW2ValueAbsent="0" genNBW2ValueBye="2" genRoundDownNBWMMS="true" komi="${tournament.komi}" location="${tournament.location}" name="${tournament.name}" nbMovesCanTime="${tournament.timeSystem.stones}" numberOfCategories="1" numberOfRounds="${tournament.rounds}" shortName="${tournament.shortName}" size="${tournament.gobanSize}" stdByoYomiTime="${tournament.timeSystem.byoyomi}"/>
<HandicapParameterSet hdBasedOnMMS="${tournament.pairing.pairingParams.handicap.useMMS}" hdCeiling="${tournament.pairing.pairingParams.handicap.ceiling}" hdCorrection="${tournament.pairing.pairingParams.handicap.correction}" hdNoHdRankThreshold="${displayRank(tournament.pairing.pairingParams.handicap.rankThreshold)}"/> <HandicapParameterSet hdBasedOnMMS="${tournament.pairing.pairingParams.handicap.useMMS}" hdCeiling="${tournament.pairing.pairingParams.handicap.ceiling}" hdCorrection="${tournament.pairing.pairingParams.handicap.correction}" hdNoHdRankThreshold="${displayRank(tournament.pairing.pairingParams.handicap.rankThreshold)}"/>
<PlacementParameterSet> <PlacementParameterSet>
<PlacementCriteria> <PlacementCriteria>

View File

@@ -10,7 +10,7 @@ import java.util.*
sealed class Pairable(val id: ID, val name: String, open val rating: Int, open val rank: Int) { sealed class Pairable(val id: ID, val name: String, open val rating: Int, open val rank: Int) {
companion object { companion object {
val MIN_RANK: Int = -30 // 30k val MIN_RANK: Int = -30 // 30k
val MAX_RANK: Int = 20 val MAX_RANK: Int = 8 // 9D
} }
abstract fun toJson(): Json.Object abstract fun toJson(): Json.Object
abstract val club: String? abstract val club: String?

View File

@@ -180,11 +180,13 @@ class MacMahon(
), ),
placementParams: PlacementParams = PlacementParams( placementParams: PlacementParams = PlacementParams(
Criterion.NBW, Criterion.SOSW, Criterion.SOSOSW Criterion.NBW, Criterion.SOSW, Criterion.SOSOSW
) ),
var mmFloor: Int = -20, // 20k
var mmBar: Int = 0 // 1D
): Pairing(MAC_MAHON, pairingParams, placementParams) { ): Pairing(MAC_MAHON, pairingParams, placementParams) {
companion object {} companion object {}
override fun pair(tournament: Tournament<*>, round: Int, pairables: List<Pairable>): List<Game> { override fun pair(tournament: Tournament<*>, round: Int, pairables: List<Pairable>): List<Game> {
return MacMahonSolver(round, tournament.historyBefore(round), pairables, pairingParams, placementParams).pair() return MacMahonSolver(round, tournament.historyBefore(round), pairables, pairingParams, placementParams, mmFloor, mmBar).pair()
} }
} }
@@ -305,12 +307,15 @@ fun Pairing.Companion.fromJson(json: Json.Object): Pairing {
val placementParams = json.getArray("placement")?.let { PlacementParams.fromJson(it) } ?: defaultParams.placementParams val placementParams = json.getArray("placement")?.let { PlacementParams.fromJson(it) } ?: defaultParams.placementParams
return when (type) { return when (type) {
SWISS -> Swiss(pairingParams, placementParams) SWISS -> Swiss(pairingParams, placementParams)
MAC_MAHON -> MacMahon(pairingParams, placementParams) MAC_MAHON -> MacMahon(pairingParams, placementParams).also { mm ->
mm.mmFloor = json.getInt("mmFloor") ?: -20
mm.mmBar = json.getInt("mmBar") ?: 0
}
ROUND_ROBIN -> RoundRobin(pairingParams, placementParams) ROUND_ROBIN -> RoundRobin(pairingParams, placementParams)
} }
} }
fun Pairing.toJson() = Json.Object( fun Pairing.toJson(): Json.Object = Json.MutableObject(
"type" to type.name, "type" to type.name,
"base" to pairingParams.base.toJson(), "base" to pairingParams.base.toJson(),
"main" to pairingParams.main.toJson(), "main" to pairingParams.main.toJson(),
@@ -318,4 +323,9 @@ fun Pairing.toJson() = Json.Object(
"geo" to pairingParams.geo.toJson(), "geo" to pairingParams.geo.toJson(),
"handicap" to pairingParams.handicap.toJson(), "handicap" to pairingParams.handicap.toJson(),
"placement" to placementParams.toJson() "placement" to placementParams.toJson()
) ).also { ret ->
if (this is MacMahon) {
ret["mmFloor"] = mmFloor
ret["mmBar"] = mmBar
}
}

View File

@@ -28,7 +28,7 @@ abstract class BasePairingHelper(
} }
// pairables sorted for pairing purposes // pairables sorted for pairing purposes
protected val nameSortedPairables by lazy { protected val nameSortedPairables by lazy {
pairables.sortedWith(::nameSort) pairables.sortedWith(::nameSort).toMutableList()
} }
protected val pairablesMap by lazy { protected val pairablesMap by lazy {

View File

@@ -29,6 +29,7 @@ sealed class BaseSolver(
companion object { companion object {
val rand = Random(/* seed from properties - TODO */) val rand = Random(/* seed from properties - TODO */)
val DEBUG_EXPORT_WEIGHT = true val DEBUG_EXPORT_WEIGHT = true
var byePlayers: MutableList<Pairable> = mutableListOf()
} }
open fun openGothaWeight(p1: Pairable, p2: Pairable) = open fun openGothaWeight(p1: Pairable, p2: Pairable) =
@@ -40,7 +41,7 @@ sealed class BaseSolver(
open fun weight(p1: Pairable, p2: Pairable) = open fun weight(p1: Pairable, p2: Pairable) =
openGothaWeight(p1, p2) + openGothaWeight(p1, p2) +
//pairing.base.applyByeWeight(p1, p2) + // pairing.base.applyByeWeight(p1, p2) +
pairing.handicap.color(p1, p2) pairing.handicap.color(p1, p2)
fun pair(): List<Game> { fun pair(): List<Game> {
@@ -59,13 +60,34 @@ sealed class BaseSolver(
// println("placement criteria" + placement.criteria.toString()) // println("placement criteria" + placement.criteria.toString())
} }
var chosenByePlayer: Pairable = ByePlayer
// Choose bye player and remove from pairables
if (ByePlayer in nameSortedPairables){
nameSortedPairables.remove(ByePlayer)
var minWeight = 1000.0*round + (Pairable.MAX_RANK - Pairable.MIN_RANK) + 1;
var weightForBye : Double
var byePlayerIndex = 0
for (p in nameSortedPairables){
weightForBye = p.rank + 2*p.main
if (p in byePlayers) weightForBye += 1000
if (weightForBye <= minWeight){
minWeight = weightForBye
chosenByePlayer = p
}
println("choose Bye: " + p.nameSeed() + " " + weightForBye)
}
println("Bye player : " + chosenByePlayer.nameSeed())
byePlayers.add(chosenByePlayer)
nameSortedPairables.remove(chosenByePlayer)
}
for (i in nameSortedPairables.indices) { for (i in nameSortedPairables.indices) {
// println(nameSortedPairables[i].nameSeed() + " id="+nameSortedPairables[i].id.toString()+" clasmt="+nameSortedPairables[i].placeInGroup.toString()) // println(nameSortedPairables[i].nameSeed() + " id="+nameSortedPairables[i].id.toString()+" clasmt="+nameSortedPairables[i].placeInGroup.toString())
for (j in i + 1 until pairables.size) { for (j in i + 1 until nameSortedPairables.size) {
val p = nameSortedPairables[i] val p = nameSortedPairables[i]
val q = nameSortedPairables[j] val q = nameSortedPairables[j]
weight(p, q).let { if (it != Double.NaN) builder.addEdge(p, q, it) } weight(p, q).let { if (it != Double.NaN) builder.addEdge(p, q, it/1e6) }
weight(q, p).let { if (it != Double.NaN) builder.addEdge(q, p, it) } weight(q, p).let { if (it != Double.NaN) builder.addEdge(q, p, it/1e6) }
if (DEBUG_EXPORT_WEIGHT) if (DEBUG_EXPORT_WEIGHT)
{ {
File(WEIGHTS_FILE).appendText("Player1Name="+p.nameSeed()+"\n") File(WEIGHTS_FILE).appendText("Player1Name="+p.nameSeed()+"\n")
@@ -80,6 +102,7 @@ sealed class BaseSolver(
File(WEIGHTS_FILE).appendText("secHandiCost="+dec.format(pairing.handicap.handicap(p, q))+"\n") File(WEIGHTS_FILE).appendText("secHandiCost="+dec.format(pairing.handicap.handicap(p, q))+"\n")
File(WEIGHTS_FILE).appendText("secGeoCost="+dec.format(pairing.geo.apply(p, q))+"\n") File(WEIGHTS_FILE).appendText("secGeoCost="+dec.format(pairing.geo.apply(p, q))+"\n")
File(WEIGHTS_FILE).appendText("totalCost="+dec.format(openGothaWeight(p,q))+"\n") File(WEIGHTS_FILE).appendText("totalCost="+dec.format(openGothaWeight(p,q))+"\n")
//File(WEIGHTS_FILE).appendText("ByeCost="+dec.format(pairing.base.applyByeWeight(p,q))+"\n")
} }
} }
@@ -92,10 +115,20 @@ sealed class BaseSolver(
listOf(graph.getEdgeSource(it), graph.getEdgeTarget(it)) listOf(graph.getEdgeSource(it), graph.getEdgeTarget(it))
}.sortedWith(compareBy({ min(it[0].place, it[1].place) })) }.sortedWith(compareBy({ min(it[0].place, it[1].place) }))
val result = sorted.flatMap { games(white = it[0], black = it[1]) } /* println(sorted.size)
if (chosenByePlayer != ByePlayer) sorted.add(listOf(chosenByePlayer, ByePlayer))
println(sorted.size)*/
var result = sorted.flatMap { games(white = it[0], black = it[1]) }
// add game for ByePlayer
if (chosenByePlayer != ByePlayer) result += Game(id = Store.nextGameId, white = ByePlayer.id, black = chosenByePlayer.id, result = Game.Result.fromSymbol('b'))
if (DEBUG_EXPORT_WEIGHT) { if (DEBUG_EXPORT_WEIGHT) {
println("DUDD debug")
println(nameSortedPairables[2].nameSeed() + " " + nameSortedPairables[6].nameSeed())
pairing.main.applyDUDD(nameSortedPairables[2],nameSortedPairables[6], debug=true)
var sumOfWeights = 0.0 var sumOfWeights = 0.0
println("name place ID colorBal group DUDD vs name place ID colorBal group DUDD")
for (it in sorted) { for (it in sorted) {
println(it[0].nameSeed() + " " + it[0].place.toString() println(it[0].nameSeed() + " " + it[0].place.toString()
+ " " + it[0].id.toString() + " " + it[0].id.toString()
@@ -165,8 +198,9 @@ sealed class BaseSolver(
val actualPlayer = if (p1.id == ByePlayer.id) p2 else p1 val actualPlayer = if (p1.id == ByePlayer.id) p2 else p1
// TODO maybe use a different formula than opengotha // TODO maybe use a different formula than opengotha
val x = (actualPlayer.rank - Pairable.MIN_RANK + actualPlayer.main) / (Pairable.MAX_RANK - Pairable.MIN_RANK + mainLimits.second) val x = (actualPlayer.rank - Pairable.MIN_RANK + actualPlayer.main) / (Pairable.MAX_RANK - Pairable.MIN_RANK + mainLimits.second)
concavityFunction(x, BaseCritParams.MAX_BYE_WEIGHT) //concavityFunction(x, BaseCritParams.MAX_BYE_WEIGHT)
BaseCritParams.MAX_BYE_WEIGHT - (actualPlayer.rank + 2*actualPlayer.main) //BaseCritParams.MAX_BYE_WEIGHT - (actualPlayer.rank + 2*actualPlayer.main)
BaseCritParams.MAX_BYE_WEIGHT*(1 - x)
} else { } else {
0.0 0.0
} }
@@ -202,8 +236,7 @@ sealed class BaseSolver(
open fun MainCritParams.minimizeScoreDifference(p1: Pairable, p2: Pairable): Double { open fun MainCritParams.minimizeScoreDifference(p1: Pairable, p2: Pairable): Double {
var score = 0.0 var score = 0.0
val scoreRange: Int = groupsCount val scoreRange: Int = groupsCount
// TODO check category equality if category are used in SwissCat if (scoreRange != 0){
if (scoreRange!=0){
val x = abs(p1.group - p2.group).toDouble() / scoreRange.toDouble() val x = abs(p1.group - p2.group).toDouble() / scoreRange.toDouble()
score = concavityFunction(x, scoreWeight) score = concavityFunction(x, scoreWeight)
} }
@@ -211,7 +244,7 @@ sealed class BaseSolver(
return score return score
} }
open fun MainCritParams.applyDUDD(p1: Pairable, p2: Pairable): Double { open fun MainCritParams.applyDUDD(p1: Pairable, p2: Pairable, debug: Boolean =false): Double {
var score = 0.0 var score = 0.0
// TODO apply Drawn-Up/Drawn-Down if needed // TODO apply Drawn-Up/Drawn-Down if needed
@@ -256,12 +289,16 @@ sealed class BaseSolver(
if (scenario != 0 && p2_DD > 0 && p2_DU < p2_DD && p2.group > p1.group) { if (scenario != 0 && p2_DD > 0 && p2_DU < p2_DD && p2.group > p1.group) {
scenario++ scenario++
} }
val duddWeight: Double = pairing.main.drawUpDownWeight/5.0 val duddWeight: Double = pairing.main.drawUpDownWeight/5.0
val upperSP = if (p1.group < p2.group) p1 else p2 val upperSP = if (p1.group < p2.group) p2 else p1
val lowerSP = if (p1.group < p2.group) p2 else p1 val lowerSP = if (p1.group < p2.group) p1 else p2
val uSPgroupSize = upperSP.placeInGroup.second val uSPgroupSize = upperSP.placeInGroup.second
val lSPgroupSize = lowerSP.placeInGroup.second val lSPgroupSize = lowerSP.placeInGroup.second
if (pairing.main.drawUpDownUpperMode === MainCritParams.DrawUpDown.TOP) { if (pairing.main.drawUpDownUpperMode === MainCritParams.DrawUpDown.TOP) {
score += duddWeight / 2 * (uSPgroupSize - 1 - upperSP.placeInGroup.first) / uSPgroupSize score += duddWeight / 2 * (uSPgroupSize - 1 - upperSP.placeInGroup.first) / uSPgroupSize
} else if (pairing.main.drawUpDownUpperMode === MainCritParams.DrawUpDown.MIDDLE) { } else if (pairing.main.drawUpDownUpperMode === MainCritParams.DrawUpDown.MIDDLE) {
@@ -287,8 +324,20 @@ sealed class BaseSolver(
} else if (scenario == 4) { } else if (scenario == 4) {
score += 4 * duddWeight score += 4 * duddWeight
} }
if(debug){
println("Names "+upperSP.nameSeed()+" "+lowerSP.nameSeed())
println("DUDD scenario, GroupDiff = "+scenario.toString()+" "+(upperSP.group-lowerSP.group).toString())
println("DUDD Upper/Lower modes = "+pairing.main.drawUpDownUpperMode.toString()+" "+pairing.main.drawUpDownLowerMode.toString())
println("u/lSPgroupsize = "+uSPgroupSize.toString()+" "+lSPgroupSize.toString())
println("u/lSPplaceingroup = "+upperSP.placeInGroup.first.toString()+" "+lowerSP.placeInGroup.first.toString())
println("score = " + score.toString())
}
} }
// TODO adapt to Swiss with categories // TODO adapt to Swiss with categories
/*// But, if players come from different categories, decrease score(added in 3.11) /*// But, if players come from different categories, decrease score(added in 3.11)
val catGap: Int = Math.abs(p1.category(gps) - p2.category(gps)) val catGap: Int = Math.abs(p1.category(gps) - p2.category(gps))

View File

@@ -1,29 +1,43 @@
package org.jeudego.pairgoth.pairing.solver package org.jeudego.pairgoth.pairing.solver
import org.jeudego.pairgoth.model.* import org.jeudego.pairgoth.model.*
import kotlin.math.max
import kotlin.math.min
class MacMahonSolver(round: Int, class MacMahonSolver(round: Int,
history: List<List<Game>>, history: List<List<Game>>,
pairables: List<Pairable>, pairables: List<Pairable>,
pairingParams: PairingParams, pairingParams: PairingParams,
placementParams: PlacementParams): placementParams: PlacementParams,
private val mmFloor: Int, private val mmBar: Int):
BaseSolver(round, history, pairables, pairingParams, placementParams) { BaseSolver(round, history, pairables, pairingParams, placementParams) {
override val scores: Map<ID, Double> by lazy { override val scores: Map<ID, Double> by lazy {
historyHelper.wins.mapValues { pairablesMap.mapValues { it.value.let {
pairablesMap[it.key]!!.let { pairable -> pairable -> pairable.mmBase + pairable.nbW // TODO take tournament parameter into account
pairable.mmBase + pairable.nbW } }
}
}
} }
val Pairable.mmBase: Double get() = rank + 30.0 // TODO use params
val Pairable.mmBase: Double get() = min(max(rank, mmFloor), mmBar) + mmsZero
val Pairable.mms: Double get() = scores[id] ?: 0.0 val Pairable.mms: Double get() = scores[id] ?: 0.0
// CB TODO - configurable criteria // CB TODO - configurable criteria
override val mainLimits get() = Pair(0.0, 100.0) // TODO val mainScoreMin = mmFloor + PLA_SMMS_SCORE_MIN - Pairable.MIN_RANK
val mainScoreMax = mmBar + PLA_SMMS_SCORE_MAX + (round-1) - Pairable.MIN_RANK // round number starts at 1
override val mainLimits get() = Pair(mainScoreMin.toDouble(), mainScoreMax.toDouble())
override fun evalCriterion(pairable: Pairable, criterion: Criterion) = when (criterion) { override fun evalCriterion(pairable: Pairable, criterion: Criterion) = when (criterion) {
Criterion.MMS -> pairable.mms Criterion.MMS -> pairable.mms
Criterion.SOSM -> pairable.sos
Criterion.SOSOSM -> pairable.sosos
Criterion.SOSMM1 -> pairable.sosm1
Criterion.SOSMM2 -> pairable.sosm2
else -> super.evalCriterion(pairable, criterion) else -> super.evalCriterion(pairable, criterion)
} }
companion object {
const val mmsZero = 30.0
const val PLA_SMMS_SCORE_MAX = 2 // TODO move this into placement criteria
const val PLA_SMMS_SCORE_MIN = -1
}
} }

View File

@@ -246,6 +246,11 @@ class PairingTests: TestBase() {
var firstGameID: Int var firstGameID: Int
var playersList = mutableListOf<Long>() var playersList = mutableListOf<Long>()
var forcedPairingList = mutableListOf<Int>(1)
var forcedPairing = mutableListOf<Json>()
var forcedGames: Json.Array
var game: Json
for (i in 0..34){ for (i in 0..34){
playersList.add(players.getJson(i)!!.asObject()["id"] as Long) playersList.add(players.getJson(i)!!.asObject()["id"] as Long)
} }
@@ -253,10 +258,95 @@ class PairingTests: TestBase() {
val byePlayerList = mutableListOf<Long>(354, 359, 356, 357, 345, 339, 368, 344, 349, 341) val byePlayerList = mutableListOf<Long>(354, 359, 356, 357, 345, 339, 368, 344, 349, 341)
for (round in 1..7) { for (round in 1..7) {
games = TestAPI.post("/api/tour/$id/pair/$round", Json.Array(playersList.filter{it != byePlayerList[round-1]})).asArray() //games = TestAPI.post("/api/tour/$id/pair/$round", Json.Array(playersList.filter{it != byePlayerList[round-1]})).asArray()
if (round in forcedPairingList){
// games must be created and then modified by PUT
games = TestAPI.post("/api/tour/$id/pair/$round", Json.Array("all")).asArray()
forcedPairing = mutableListOf<Json>()
forcedGames = Json.parse(pairingsR1)!!.asArray()
for (j in 0..forcedGames.size-1) {
game = forcedGames.getJson(j)!!.asObject()
TestAPI.put("/api/tour/$id/pair/$round", game)
}
games = TestAPI.get("/api/tour/$id/res/$round").asArray()
}
else {
//games = TestAPI.post("/api/tour/$id/pair/$round", Json.Array(playersList.filter{it != byePlayerList[round-1]})).asArray()
games = TestAPI.post("/api/tour/$id/pair/$round", Json.Array("all")).asArray()
logger.info("games for round $round: {}", games.toString())
assertTrue(compare_weights("weights.txt", "opengotha/notsosimpleswiss_weights_R$round.txt"), "Not matching opengotha weights for round $round")
assertTrue(compare_games(games, Json.parse(pairings[round - 1])!!.asArray()),"pairings for round $round differ")
logger.info("Pairings for round $round match OpenGotha")
}
logger.info("games for round $round: {}", games.toString()) logger.info("games for round $round: {}", games.toString())
assertTrue(compare_weights("weights.txt", "opengotha/notsosimpleswiss_weights_R$round.txt"), "Not matching opengotha weights for round $round") firstGameID = (games.getJson(0)!!.asObject()["id"] as Long?)!!.toInt()
for (gameID in firstGameID..firstGameID + 16) {
resp = TestAPI.put("/api/tour/$id/res/$round", Json.parse("""{"id":$gameID,"result":"b"}""")).asObject()
assertTrue(resp.getBoolean("success") == true, "expecting success")
}
logger.info("Results succesfully entered for round $round")
}
}
@Test
fun `testSimpleMM`() {
/*
// read tournament with pairing
var fileOG = getTestFile("opengotha/pairings/simplemm.xml")
logger.info("read from file $fileOG")
val resourceOG = fileOG.readText(StandardCharsets.UTF_8)
val respOG = TestAPI.post("/api/tour", resourceOG)
val idOG = respOG.asObject().getInt("id")
val tournamentOG = TestAPI.get("/api/tour/$idOG").asObject()
logger.info(tournamentOG.toString().slice(0..50) + "...")
val playersOG = TestAPI.get("/api/tour/$idOG/part").asArray()
//logger.info(players.toString().slice(0..50) + "...")
//logger.info(playersOG.toString())
val pairingsOG = mutableListOf<String>()
for (round in 1..tournamentOG.getInt("rounds")!!) {
val games = TestAPI.get("/api/tour/$idOG/res/$round").asArray()
logger.info("games for round $round: {}", games.toString())
pairingsOG.add(games.toString())
}*/
val pairingsR1 = """[{"id":1,"w":3,"b":5,"h":0,"r":"w","dd":0},{"id":2,"w":12,"b":10,"h":0,"r":"b","dd":0},{"id":3,"w":9,"b":14,"h":0,"r":"b","dd":0},{"id":4,"w":11,"b":6,"h":0,"r":"b","dd":0},{"id":5,"w":13,"b":15,"h":0,"r":"b","dd":0},{"id":6,"w":2,"b":16,"h":1,"r":"w","dd":0},{"id":7,"w":8,"b":4,"h":5,"r":"b","dd":0},{"id":8,"w":7,"b":1,"h":2,"r":"w","dd":0}]"""
val pairingsR2 = """[{"id":9,"w":14,"b":3,"h":0,"r":"b","dd":0},{"id":10,"w":10,"b":5,"h":0,"r":"b","dd":0},{"id":11,"w":6,"b":9,"h":0,"r":"b","dd":0},{"id":12,"w":15,"b":12,"h":0,"r":"w","dd":0},{"id":13,"w":2,"b":11,"h":0,"r":"w","dd":0},{"id":14,"w":8,"b":13,"h":0,"r":"b","dd":0},{"id":15,"w":7,"b":4,"h":0,"r":"b","dd":0},{"id":16,"w":16,"b":1,"h":7,"r":"b","dd":0}]"""
val pairingsR3 = """[{"id":17,"w":5,"b":14,"h":0,"r":"b","dd":0},{"id":18,"w":10,"b":9,"h":0,"r":"w","dd":0},{"id":19,"w":15,"b":3,"h":0,"r":"w","dd":0},{"id":20,"w":12,"b":2,"h":0,"r":"b","dd":0},{"id":21,"w":6,"b":13,"h":0,"r":"b","dd":0},{"id":22,"w":11,"b":8,"h":0,"r":"w","dd":0},{"id":23,"w":16,"b":7,"h":3,"r":"w","dd":0},{"id":24,"w":4,"b":1,"h":3,"r":"b","dd":0}]"""
val pairingsR4 = """[{"id":25,"w":3,"b":10,"h":0,"r":"w","dd":0},{"id":26,"w":14,"b":15,"h":0,"r":"b","dd":0},{"id":27,"w":5,"b":2,"h":0,"r":"w","dd":0},{"id":28,"w":12,"b":6,"h":0,"r":"w","dd":0},{"id":29,"w":9,"b":11,"h":0,"r":"w","dd":0},{"id":30,"w":16,"b":4,"h":3,"r":"b","dd":0},{"id":31,"w":13,"b":7,"h":5,"r":"w","dd":0},{"id":32,"w":8,"b":1,"h":6,"r":"w","dd":0}]"""
val pairingsR5 = """[{"id":33,"w":15,"b":5,"h":0,"r":"w","dd":0},{"id":34,"w":14,"b":10,"h":0,"r":"b","dd":0},{"id":35,"w":9,"b":3,"h":0,"r":"w","dd":0},{"id":36,"w":13,"b":2,"h":0,"r":"w","dd":0},{"id":37,"w":16,"b":12,"h":0,"r":"b","dd":0},{"id":38,"w":11,"b":4,"h":3,"r":"b","dd":0},{"id":39,"w":8,"b":7,"h":5,"r":"w","dd":0},{"id":40,"w":6,"b":1,"h":7,"r":"b","dd":0}]"""
val pairings = mutableListOf<String>()
pairings.add(pairingsR1)
pairings.add(pairingsR2)
pairings.add(pairingsR3)
pairings.add(pairingsR4)
pairings.add(pairingsR5)
// read tournament without pairings
var file = getTestFile("opengotha/pairings/simplemm_nopairings.xml")
logger.info("read from file $file")
val resource = file.readText(StandardCharsets.UTF_8)
var resp = TestAPI.post("/api/tour", resource)
val id = resp.asObject().getInt("id")
assertNotNull(id)
val tournament = TestAPI.get("/api/tour/$id").asObject()
logger.info(tournament.toString().slice(0..50) + "...")
val players = TestAPI.get("/api/tour/$id/part").asArray()
logger.info(players.toString().slice(0..50) + "...")
var games: Json.Array
var firstGameID: Int
for (round in 1..5) {
games = TestAPI.post("/api/tour/$id/pair/$round", Json.Array("all")).asArray()
logger.info("games for round $round: {}", games.toString())
assertTrue(compare_weights("weights.txt", "opengotha/simplemm/simplemm_weights_R$round.txt"), "Not matching opengotha weights for round $round")
assertTrue(compare_games(games, Json.parse(pairings[round - 1])!!.asArray()),"pairings for round $round differ") assertTrue(compare_games(games, Json.parse(pairings[round - 1])!!.asArray()),"pairings for round $round differ")
logger.info("Pairings for round $round match OpenGotha") logger.info("Pairings for round $round match OpenGotha")
@@ -267,7 +357,6 @@ class PairingTests: TestBase() {
} }
logger.info("Results succesfully entered for round $round") logger.info("Results succesfully entered for round $round")
} }
} }
} }

View File

@@ -0,0 +1,93 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<Tournament dataVersion="201" externalIPAddress="77.128.107.78" gothaMinorVersion="5" gothaVersion="348" saveDT="20191119110542">
<Players>
<Player agaExpirationDate="" agaId="" club="13Ma" country="FR" egfPin="" ffgLicence="2200056" ffgLicenceStatus="L" firstName="Clé" grade="10K" name="Robin" participating="11111111111111111111" rank="10K" rating="1129" ratingOrigin="FFG : -921" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="38Gr" country="FR" egfPin="" ffgLicence="2100063" ffgLicenceStatus="L" firstName="Baptiste" grade="1D" name="Fiorina" participating="11111111111111111111" rank="1D" rating="2106" ratingOrigin="FFG : 56" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="38Gr" country="FR" egfPin="" ffgLicence="0280000" ffgLicenceStatus="L" firstName="Motoki" grade="7D" name="Noguchi" participating="11111111111111111111" rank="7D" rating="2666" ratingOrigin="FFG : 616" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="13Ma" country="FR" egfPin="" ffgLicence="1000392" ffgLicenceStatus="L" firstName="Alexandra" grade="7K" name="Goloubkov" participating="11111111111111111111" rank="7K" rating="1389" ratingOrigin="FFG : -661" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="00St" country="FR" egfPin="" ffgLicence="1600310" ffgLicenceStatus="L" firstName="Robin" grade="4D" name="Bonjean" participating="11111111111111111111" rank="4D" rating="2357" ratingOrigin="FFG : 307" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="38Gr" country="FR" egfPin="" ffgLicence="1000005" ffgLicenceStatus="L" firstName="Quentin" grade="2D" name="Rendu" participating="11111111111111111111" rank="2D" rating="2155" ratingOrigin="FFG : 105" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="38Gr" country="FR" egfPin="" ffgLicence="1700003" ffgLicenceStatus="L" firstName="Morgane" grade="7K" name="Marechal" participating="11111111111111111111" rank="7K" rating="1388" ratingOrigin="FFG : -662" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="38Gr" country="FR" egfPin="" ffgLicence="7904900" ffgLicenceStatus="L" firstName="Dominique" grade="1K" name="Cornuejols" participating="11111111111111111111" rank="1K" rating="2035" ratingOrigin="FFG : -15" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="49An" country="FR" egfPin="" ffgLicence="1800102" ffgLicenceStatus="L" firstName="Theo" grade="3D" name="Lemoine" participating="11111111111111111111" rank="3D" rating="2317" ratingOrigin="FFG : 267" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="38Gr" country="FR" egfPin="" ffgLicence="9791002" ffgLicenceStatus="L" firstName="Toru" grade="3D" name="Imamura-Cornuejols" participating="11111111111111111111" rank="3D" rating="2343" ratingOrigin="FFG : 293" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="38Gr" country="FR" egfPin="" ffgLicence="2000113" ffgLicenceStatus="L" firstName="Warren" grade="2D" name="Aim" participating="11111111111111111111" rank="2D" rating="2231" ratingOrigin="FFG : 181" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="38Gr" country="FR" egfPin="" ffgLicence="1300045" ffgLicenceStatus="L" firstName="Loïc" grade="3D" name="Lefebvre" participating="11111111111111111111" rank="3D" rating="2281" ratingOrigin="FFG : 231" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="75Ju" country="FR" egfPin="" ffgLicence="0800078" ffgLicenceStatus="L" firstName="Rémi" grade="1K" name="Cornaggia" participating="11111111111111111111" rank="1K" rating="1995" ratingOrigin="FFG : -55" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="38Gr" country="FR" egfPin="" ffgLicence="0900438" ffgLicenceStatus="L" firstName="Denis" grade="6D" name="Karadaban" participating="11111111111111111111" rank="6D" rating="2576" ratingOrigin="FFG : 526" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="38Gr" country="FR" egfPin="" ffgLicence="1800061" ffgLicenceStatus="L" firstName="Camille" grade="2D" name="Leveque" participating="11111111111111111111" rank="2D" rating="2221" ratingOrigin="FFG : 171" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="37To" country="FR" egfPin="" ffgLicence="2100064" ffgLicenceStatus="L" firstName="Romain" grade="2K" name="Durand" participating="11111111111111111111" rank="2K" rating="1851" ratingOrigin="FFG : -199" registeringStatus="FIN" smmsCorrection="0"/>
</Players>
<Games>
<Game blackPlayer="BONJEANROBIN" handicap="0" knownColor="true" result="RESULT_WHITEWINS" roundNumber="1" tableNumber="1" whitePlayer="NOGUCHIMOTOKI"/>
<Game blackPlayer="IMAMURA-CORNUEJOLSTORU" handicap="0" knownColor="true" result="RESULT_BLACKWINS" roundNumber="1" tableNumber="2" whitePlayer="LEFEBVRELOÏC"/>
<Game blackPlayer="KARADABANDENIS" handicap="0" knownColor="true" result="RESULT_BLACKWINS" roundNumber="1" tableNumber="3" whitePlayer="LEMOINETHEO"/>
<Game blackPlayer="RENDUQUENTIN" handicap="0" knownColor="true" result="RESULT_BLACKWINS" roundNumber="1" tableNumber="4" whitePlayer="AIMWARREN"/>
<Game blackPlayer="LEVEQUECAMILLE" handicap="0" knownColor="true" result="RESULT_BLACKWINS" roundNumber="1" tableNumber="5" whitePlayer="CORNAGGIARÉMI"/>
<Game blackPlayer="DURANDROMAIN" handicap="1" knownColor="true" result="RESULT_WHITEWINS" roundNumber="1" tableNumber="6" whitePlayer="FIORINABAPTISTE"/>
<Game blackPlayer="GOLOUBKOVALEXANDRA" handicap="5" knownColor="true" result="RESULT_BLACKWINS" roundNumber="1" tableNumber="7" whitePlayer="CORNUEJOLSDOMINIQUE"/>
<Game blackPlayer="ROBINCLÉ" handicap="2" knownColor="true" result="RESULT_WHITEWINS" roundNumber="1" tableNumber="8" whitePlayer="MARECHALMORGANE"/>
<Game blackPlayer="KARADABANDENIS" handicap="0" knownColor="true" result="RESULT_BLACKWINS" roundNumber="3" tableNumber="1" whitePlayer="BONJEANROBIN"/>
<Game blackPlayer="LEMOINETHEO" handicap="0" knownColor="true" result="RESULT_WHITEWINS" roundNumber="3" tableNumber="2" whitePlayer="IMAMURA-CORNUEJOLSTORU"/>
<Game blackPlayer="NOGUCHIMOTOKI" handicap="0" knownColor="true" result="RESULT_WHITEWINS" roundNumber="3" tableNumber="3" whitePlayer="LEVEQUECAMILLE"/>
<Game blackPlayer="FIORINABAPTISTE" handicap="0" knownColor="true" result="RESULT_BLACKWINS" roundNumber="3" tableNumber="4" whitePlayer="LEFEBVRELOÏC"/>
<Game blackPlayer="CORNAGGIARÉMI" handicap="0" knownColor="true" result="RESULT_BLACKWINS" roundNumber="3" tableNumber="5" whitePlayer="RENDUQUENTIN"/>
<Game blackPlayer="CORNUEJOLSDOMINIQUE" handicap="0" knownColor="true" result="RESULT_WHITEWINS" roundNumber="3" tableNumber="6" whitePlayer="AIMWARREN"/>
<Game blackPlayer="MARECHALMORGANE" handicap="3" knownColor="true" result="RESULT_WHITEWINS" roundNumber="3" tableNumber="7" whitePlayer="DURANDROMAIN"/>
<Game blackPlayer="ROBINCLÉ" handicap="3" knownColor="true" result="RESULT_BLACKWINS" roundNumber="3" tableNumber="8" whitePlayer="GOLOUBKOVALEXANDRA"/>
<Game blackPlayer="BONJEANROBIN" handicap="0" knownColor="true" result="RESULT_WHITEWINS" roundNumber="5" tableNumber="1" whitePlayer="LEVEQUECAMILLE"/>
<Game blackPlayer="IMAMURA-CORNUEJOLSTORU" handicap="0" knownColor="true" result="RESULT_BLACKWINS" roundNumber="5" tableNumber="2" whitePlayer="KARADABANDENIS"/>
<Game blackPlayer="NOGUCHIMOTOKI" handicap="0" knownColor="true" result="RESULT_WHITEWINS" roundNumber="5" tableNumber="3" whitePlayer="LEMOINETHEO"/>
<Game blackPlayer="FIORINABAPTISTE" handicap="0" knownColor="true" result="RESULT_WHITEWINS" roundNumber="5" tableNumber="4" whitePlayer="CORNAGGIARÉMI"/>
<Game blackPlayer="LEFEBVRELOÏC" handicap="0" knownColor="true" result="RESULT_BLACKWINS" roundNumber="5" tableNumber="5" whitePlayer="DURANDROMAIN"/>
<Game blackPlayer="GOLOUBKOVALEXANDRA" handicap="3" knownColor="true" result="RESULT_BLACKWINS" roundNumber="5" tableNumber="6" whitePlayer="AIMWARREN"/>
<Game blackPlayer="MARECHALMORGANE" handicap="5" knownColor="true" result="RESULT_WHITEWINS" roundNumber="5" tableNumber="7" whitePlayer="CORNUEJOLSDOMINIQUE"/>
<Game blackPlayer="ROBINCLÉ" handicap="7" knownColor="true" result="RESULT_BLACKWINS" roundNumber="5" tableNumber="8" whitePlayer="RENDUQUENTIN"/>
<Game blackPlayer="NOGUCHIMOTOKI" handicap="0" knownColor="true" result="RESULT_BLACKWINS" roundNumber="2" tableNumber="1" whitePlayer="KARADABANDENIS"/>
<Game blackPlayer="BONJEANROBIN" handicap="0" knownColor="true" result="RESULT_BLACKWINS" roundNumber="2" tableNumber="2" whitePlayer="IMAMURA-CORNUEJOLSTORU"/>
<Game blackPlayer="LEMOINETHEO" handicap="0" knownColor="true" result="RESULT_BLACKWINS" roundNumber="2" tableNumber="3" whitePlayer="RENDUQUENTIN"/>
<Game blackPlayer="LEFEBVRELOÏC" handicap="0" knownColor="true" result="RESULT_WHITEWINS" roundNumber="2" tableNumber="4" whitePlayer="LEVEQUECAMILLE"/>
<Game blackPlayer="AIMWARREN" handicap="0" knownColor="true" result="RESULT_WHITEWINS" roundNumber="2" tableNumber="5" whitePlayer="FIORINABAPTISTE"/>
<Game blackPlayer="CORNAGGIARÉMI" handicap="0" knownColor="true" result="RESULT_BLACKWINS" roundNumber="2" tableNumber="6" whitePlayer="CORNUEJOLSDOMINIQUE"/>
<Game blackPlayer="GOLOUBKOVALEXANDRA" handicap="0" knownColor="true" result="RESULT_BLACKWINS" roundNumber="2" tableNumber="7" whitePlayer="MARECHALMORGANE"/>
<Game blackPlayer="ROBINCLÉ" handicap="7" knownColor="true" result="RESULT_BLACKWINS" roundNumber="2" tableNumber="8" whitePlayer="DURANDROMAIN"/>
<Game blackPlayer="IMAMURA-CORNUEJOLSTORU" handicap="0" knownColor="true" result="RESULT_WHITEWINS" roundNumber="4" tableNumber="1" whitePlayer="NOGUCHIMOTOKI"/>
<Game blackPlayer="LEVEQUECAMILLE" handicap="0" knownColor="true" result="RESULT_BLACKWINS" roundNumber="4" tableNumber="2" whitePlayer="KARADABANDENIS"/>
<Game blackPlayer="FIORINABAPTISTE" handicap="0" knownColor="true" result="RESULT_WHITEWINS" roundNumber="4" tableNumber="3" whitePlayer="BONJEANROBIN"/>
<Game blackPlayer="RENDUQUENTIN" handicap="0" knownColor="true" result="RESULT_WHITEWINS" roundNumber="4" tableNumber="4" whitePlayer="LEFEBVRELOÏC"/>
<Game blackPlayer="AIMWARREN" handicap="0" knownColor="true" result="RESULT_WHITEWINS" roundNumber="4" tableNumber="5" whitePlayer="LEMOINETHEO"/>
<Game blackPlayer="GOLOUBKOVALEXANDRA" handicap="3" knownColor="true" result="RESULT_BLACKWINS" roundNumber="4" tableNumber="6" whitePlayer="DURANDROMAIN"/>
<Game blackPlayer="MARECHALMORGANE" handicap="5" knownColor="true" result="RESULT_WHITEWINS" roundNumber="4" tableNumber="7" whitePlayer="CORNAGGIARÉMI"/>
<Game blackPlayer="ROBINCLÉ" handicap="6" knownColor="true" result="RESULT_WHITEWINS" roundNumber="4" tableNumber="8" whitePlayer="CORNUEJOLSDOMINIQUE"/>
</Games>
<TournamentParameterSet>
<GeneralParameterSet bInternet="false" basicTime="60" beginDate="2023-10-31" canByoYomiTime="300" complementaryTimeSystem="STDBYOYOMI" director="Theo" endDate="2023-10-31" fischerTime="10" genCountNotPlayedGamesAsHalfPoint="false" genMMBar="4D" genMMFloor="20K" genMMS2ValueAbsent="1" genMMS2ValueBye="2" genMMZero="30K" genNBW2ValueAbsent="0" genNBW2ValueBye="2" genRoundDownNBWMMS="true" komi="7.5" location="Marseillebb" name="SimpleMM" nbMovesCanTime="15" numberOfCategories="1" numberOfRounds="5" shortName="simplemm" size="19" stdByoYomiTime="30"/>
<HandicapParameterSet hdBasedOnMMS="true" hdCeiling="9" hdCorrection="1" hdNoHdRankThreshold="1D"/>
<PlacementParameterSet>
<PlacementCriteria>
<PlacementCriterion name="MMS" number="1"/>
<PlacementCriterion name="SOSM" number="2"/>
<PlacementCriterion name="SOSOSM" number="3"/>
<PlacementCriterion name="NULL" number="4"/>
<PlacementCriterion name="NULL" number="5"/>
<PlacementCriterion name="NULL" number="6"/>
</PlacementCriteria>
</PlacementParameterSet>
<PairingParameterSet paiBaAvoidDuplGame="500000000000000" paiBaBalanceWB="1000000" paiBaDeterministic="true" paiBaRandom="0" paiMaAdditionalPlacementCritSystem1="Rating" paiMaAdditionalPlacementCritSystem2="NULL" paiMaAvoidMixingCategories="0" paiMaCompensateDUDD="true" paiMaDUDDLowerMode="MID" paiMaDUDDUpperMode="MID" paiMaDUDDWeight="100000000" paiMaLastRoundForSeedSystem1="2" paiMaMaximizeSeeding="5000000" paiMaMinimizeScoreDifference="100000000000" paiMaSeedSystem1="SPLITANDRANDOM" paiMaSeedSystem2="SPLITANDSLIP" paiSeAvoidSameGeo="100000000000" paiSeBarThresholdActive="true" paiSeDefSecCrit="100000000000" paiSeMinimizeHandicap="0" paiSeNbWinsThresholdActive="false" paiSePreferMMSDiffRatherThanSameClub="3" paiSePreferMMSDiffRatherThanSameCountry="1" paiSeRankThreshold="1D" paiStandardNX1Factor="0.5"/>
<DPParameterSet displayClCol="true" displayCoCol="true" displayIndGamesInMatches="true" displayNPPlayers="false" displayNumCol="true" displayPlCol="true" gameFormat="full" playerSortType="name" showByePlayer="true" showNotFinallyRegisteredPlayers="true" showNotPairedPlayers="true" showNotParticipatingPlayers="false" showPlayerClub="true" showPlayerCountry="false" showPlayerGrade="true"/>
<PublishParameterSet exportToLocalFile="true" htmlAutoScroll="false" print="true"/>
</TournamentParameterSet>
<TeamTournamentParameterSet>
<TeamGeneralParameterSet teamSize="4"/>
<TeamPlacementParameterSet>
<PlacementCriteria>
<PlacementCriterion name="TEAMP" number="1"/>
<PlacementCriterion name="BDW" number="2"/>
<PlacementCriterion name="BDW3U" number="3"/>
<PlacementCriterion name="BDW2U" number="4"/>
<PlacementCriterion name="BDW1U" number="5"/>
<PlacementCriterion name="MNR" number="6"/>
</PlacementCriteria>
</TeamPlacementParameterSet>
</TeamTournamentParameterSet>
</Tournament>

View File

@@ -0,0 +1,52 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<Tournament dataVersion="201" externalIPAddress="77.128.107.78" gothaMinorVersion="5" gothaVersion="348" saveDT="20191119110542">
<Players>
<Player agaExpirationDate="" agaId="" club="13Ma" country="FR" egfPin="" ffgLicence="2200056" ffgLicenceStatus="L" firstName="Clé" grade="10K" name="Robin" participating="11111111111111111111" rank="10K" rating="1129" ratingOrigin="FFG : -921" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="38Gr" country="FR" egfPin="" ffgLicence="2100063" ffgLicenceStatus="L" firstName="Baptiste" grade="1D" name="Fiorina" participating="11111111111111111111" rank="1D" rating="2106" ratingOrigin="FFG : 56" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="38Gr" country="FR" egfPin="" ffgLicence="0280000" ffgLicenceStatus="L" firstName="Motoki" grade="7D" name="Noguchi" participating="11111111111111111111" rank="7D" rating="2666" ratingOrigin="FFG : 616" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="13Ma" country="FR" egfPin="" ffgLicence="1000392" ffgLicenceStatus="L" firstName="Alexandra" grade="7K" name="Goloubkov" participating="11111111111111111111" rank="7K" rating="1389" ratingOrigin="FFG : -661" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="00St" country="FR" egfPin="" ffgLicence="1600310" ffgLicenceStatus="L" firstName="Robin" grade="4D" name="Bonjean" participating="11111111111111111111" rank="4D" rating="2357" ratingOrigin="FFG : 307" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="38Gr" country="FR" egfPin="" ffgLicence="1000005" ffgLicenceStatus="L" firstName="Quentin" grade="2D" name="Rendu" participating="11111111111111111111" rank="2D" rating="2155" ratingOrigin="FFG : 105" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="38Gr" country="FR" egfPin="" ffgLicence="1700003" ffgLicenceStatus="L" firstName="Morgane" grade="7K" name="Marechal" participating="11111111111111111111" rank="7K" rating="1388" ratingOrigin="FFG : -662" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="38Gr" country="FR" egfPin="" ffgLicence="7904900" ffgLicenceStatus="L" firstName="Dominique" grade="1K" name="Cornuejols" participating="11111111111111111111" rank="1K" rating="2035" ratingOrigin="FFG : -15" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="49An" country="FR" egfPin="" ffgLicence="1800102" ffgLicenceStatus="L" firstName="Theo" grade="3D" name="Lemoine" participating="11111111111111111111" rank="3D" rating="2317" ratingOrigin="FFG : 267" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="38Gr" country="FR" egfPin="" ffgLicence="9791002" ffgLicenceStatus="L" firstName="Toru" grade="3D" name="Imamura-Cornuejols" participating="11111111111111111111" rank="3D" rating="2343" ratingOrigin="FFG : 293" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="38Gr" country="FR" egfPin="" ffgLicence="2000113" ffgLicenceStatus="L" firstName="Warren" grade="2D" name="Aim" participating="11111111111111111111" rank="2D" rating="2231" ratingOrigin="FFG : 181" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="38Gr" country="FR" egfPin="" ffgLicence="1300045" ffgLicenceStatus="L" firstName="Loïc" grade="3D" name="Lefebvre" participating="11111111111111111111" rank="3D" rating="2281" ratingOrigin="FFG : 231" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="75Ju" country="FR" egfPin="" ffgLicence="0800078" ffgLicenceStatus="L" firstName="Rémi" grade="1K" name="Cornaggia" participating="11111111111111111111" rank="1K" rating="1995" ratingOrigin="FFG : -55" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="38Gr" country="FR" egfPin="" ffgLicence="0900438" ffgLicenceStatus="L" firstName="Denis" grade="6D" name="Karadaban" participating="11111111111111111111" rank="6D" rating="2576" ratingOrigin="FFG : 526" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="38Gr" country="FR" egfPin="" ffgLicence="1800061" ffgLicenceStatus="L" firstName="Camille" grade="2D" name="Leveque" participating="11111111111111111111" rank="2D" rating="2221" ratingOrigin="FFG : 171" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="37To" country="FR" egfPin="" ffgLicence="2100064" ffgLicenceStatus="L" firstName="Romain" grade="2K" name="Durand" participating="11111111111111111111" rank="2K" rating="1851" ratingOrigin="FFG : -199" registeringStatus="FIN" smmsCorrection="0"/>
</Players>
<Games/>
<TournamentParameterSet>
<GeneralParameterSet bInternet="false" basicTime="60" beginDate="2023-10-31" canByoYomiTime="300" complementaryTimeSystem="STDBYOYOMI" director="Theo" endDate="2023-10-31" fischerTime="10" genCountNotPlayedGamesAsHalfPoint="false" genMMBar="4D" genMMFloor="20K" genMMS2ValueAbsent="1" genMMS2ValueBye="2" genMMZero="30K" genNBW2ValueAbsent="0" genNBW2ValueBye="2" genRoundDownNBWMMS="true" komi="7.5" location="Marseillebb" name="SimpleMM" nbMovesCanTime="15" numberOfCategories="1" numberOfRounds="5" shortName="simplemm" size="19" stdByoYomiTime="30"/>
<HandicapParameterSet hdBasedOnMMS="true" hdCeiling="9" hdCorrection="1" hdNoHdRankThreshold="1D"/>
<PlacementParameterSet>
<PlacementCriteria>
<PlacementCriterion name="MMS" number="1"/>
<PlacementCriterion name="SOSM" number="2"/>
<PlacementCriterion name="SOSOSM" number="3"/>
<PlacementCriterion name="NULL" number="4"/>
<PlacementCriterion name="NULL" number="5"/>
<PlacementCriterion name="NULL" number="6"/>
</PlacementCriteria>
</PlacementParameterSet>
<PairingParameterSet paiBaAvoidDuplGame="500000000000000" paiBaBalanceWB="1000000" paiBaDeterministic="true" paiBaRandom="0" paiMaAdditionalPlacementCritSystem1="Rating" paiMaAdditionalPlacementCritSystem2="NULL" paiMaAvoidMixingCategories="0" paiMaCompensateDUDD="true" paiMaDUDDLowerMode="MID" paiMaDUDDUpperMode="MID" paiMaDUDDWeight="100000000" paiMaLastRoundForSeedSystem1="2" paiMaMaximizeSeeding="5000000" paiMaMinimizeScoreDifference="100000000000" paiMaSeedSystem1="SPLITANDRANDOM" paiMaSeedSystem2="SPLITANDSLIP" paiSeAvoidSameGeo="100000000000" paiSeBarThresholdActive="true" paiSeDefSecCrit="100000000000" paiSeMinimizeHandicap="0" paiSeNbWinsThresholdActive="false" paiSePreferMMSDiffRatherThanSameClub="3" paiSePreferMMSDiffRatherThanSameCountry="1" paiSeRankThreshold="1D" paiStandardNX1Factor="0.5"/>
<DPParameterSet displayClCol="true" displayCoCol="true" displayIndGamesInMatches="true" displayNPPlayers="false" displayNumCol="true" displayPlCol="true" gameFormat="full" playerSortType="name" showByePlayer="true" showNotFinallyRegisteredPlayers="true" showNotPairedPlayers="true" showNotParticipatingPlayers="false" showPlayerClub="true" showPlayerCountry="false" showPlayerGrade="true"/>
<PublishParameterSet exportToLocalFile="true" htmlAutoScroll="false" print="true"/>
</TournamentParameterSet>
<TeamTournamentParameterSet>
<TeamGeneralParameterSet teamSize="4"/>
<TeamPlacementParameterSet>
<PlacementCriteria>
<PlacementCriterion name="TEAMP" number="1"/>
<PlacementCriterion name="BDW" number="2"/>
<PlacementCriterion name="BDW3U" number="3"/>
<PlacementCriterion name="BDW2U" number="4"/>
<PlacementCriterion name="BDW1U" number="5"/>
<PlacementCriterion name="MNR" number="6"/>
</PlacementCriteria>
</TeamPlacementParameterSet>
</TeamTournamentParameterSet>
</Tournament>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,112 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<Tournament externalIPAddress="&lt;!DOCTYPE html&gt;" fullVersionNumber="3.51.05" macAddress="C8-E2-65-6F-80-E7" privateTournament="true" runningMode="SAL" saveDT="20210711010727">
<Players>
<Player agaExpirationDate="" agaId="" club="31To" country="FR" egfPin="" ffgLicence="1100278" ffgLicenceStatus="L" firstName="Andéol" grade="1K" name="Evain" participating="11111111111111111111" rank="1K" rating="1982" ratingOrigin="FFG : -68" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="13Ma" country="FR" egfPin="" ffgLicence="0013006" ffgLicenceStatus="L" firstName="Philippe" grade="1D" name="Guerre-Genton" participating="11111111111111111111" rank="1D" rating="2080" ratingOrigin="FFG : 30" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="38Gr" country="FR" egfPin="" ffgLicence="1000229" ffgLicenceStatus="L" firstName="Ariane" grade="4D" name="Ougier" participating="11111000000000000000" rank="4D" rating="2392" ratingOrigin="FFG : 342" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="31To" country="FR" egfPin="" ffgLicence="2100122" ffgLicenceStatus="C" firstName="Annabel" grade="20K" name="Fourcade" participating="11110000000000000000" rank="20K" rating="-900" ratingOrigin="FFG : -9999" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="31Ba" country="FR" egfPin="" ffgLicence="2100112" ffgLicenceStatus="L" firstName="Benoit" grade="10K" name="Bonetti" participating="11111111111111111111" rank="10K" rating="-900" ratingOrigin="FFG : -9999" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="94Ca" country="FR" egfPin="" ffgLicence="1800050" ffgLicenceStatus="L" firstName="Bastien" grade="5K" name="Frappart" participating="11111000000000000000" rank="5K" rating="1598" ratingOrigin="FFG : -452" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="75Op" country="FR" egfPin="" ffgLicence="9425017" ffgLicenceStatus="L" firstName="Simon" grade="1K" name="Rosenblatt" participating="11111000000000000000" rank="1K" rating="2022" ratingOrigin="FFG : -28" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="38Gr" country="FR" egfPin="" ffgLicence="2000113" ffgLicenceStatus="L" firstName="Warren" grade="2K" name="Aim" participating="11111000000000000000" rank="2K" rating="1877" ratingOrigin="FFG : -173" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="38Gr" country="FR" egfPin="" ffgLicence="1900263" ffgLicenceStatus="L" firstName="Thibaut" grade="4K" name="Perrin" participating="11111111111111111111" rank="4K" rating="1652" ratingOrigin="FFG : -398" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="38Gr" country="FR" egfPin="" ffgLicence="1600034" ffgLicenceStatus="L" firstName="Benoit" grade="1K" name="Robichon" participating="11111111111111111111" rank="1K" rating="2046" ratingOrigin="FFG : -4" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="38Gr" country="FR" egfPin="" ffgLicence="1100032" ffgLicenceStatus="L" firstName="Elodie" grade="7K" name="Ronayette" participating="11111111111111111111" rank="7K" rating="1436" ratingOrigin="FFG : -614" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="92An" country="FR" egfPin="" ffgLicence="1200269" ffgLicenceStatus="L" firstName="Kevin" grade="4K" name="Houari" participating="11111111111111111111" rank="4K" rating="1674" ratingOrigin="FFG : -376" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="75OB" country="FR" egfPin="" ffgLicence="9625036" ffgLicenceStatus="L" firstName="Daniel" grade="7K" name="Stockholm" participating="11100000000000000000" rank="7K" rating="1391" ratingOrigin="FFG : -659" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="35Re" country="FR" egfPin="" ffgLicence="1800152" ffgLicenceStatus="L" firstName="Tâm_Loup" grade="6K" name="le" participating="11111111111111111111" rank="6K" rating="1492" ratingOrigin="FFG : -558" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="69Ly" country="FR" egfPin="" ffgLicence="1600070" ffgLicenceStatus="L" firstName="Abdallah" grade="2D" name="Mezouar" participating="11111111111111111111" rank="2D" rating="2198" ratingOrigin="FFG : 148" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="35Re" country="FR" egfPin="" ffgLicence="0900460" ffgLicenceStatus="L" firstName="Florent" grade="3D" name="Rioland" participating="11111000000000000000" rank="3D" rating="2342" ratingOrigin="FFG : 292" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="69Ly" country="FR" egfPin="" ffgLicence="1800162" ffgLicenceStatus="L" firstName="Lubin" grade="1K" name="Wilhelm" participating="11111000000000000000" rank="1K" rating="2045" ratingOrigin="FFG : -5" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="92An" country="FR" egfPin="" ffgLicence="1000230" ffgLicenceStatus="L" firstName="Guillaume" grade="4D" name="Ougier" participating="11111111111111111111" rank="4D" rating="2418" ratingOrigin="FFG : 368" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="76Ha" country="FR" egfPin="" ffgLicence="2100074" ffgLicenceStatus="C" firstName="Anaïs" grade="20K" name="Wargny" participating="11111000000000000000" rank="20K" rating="-900" ratingOrigin="FFG : -9999" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="64Pa" country="FR" egfPin="" ffgLicence="1700199" ffgLicenceStatus="L" firstName="Sylvie" grade="22K" name="Goossens" participating="11111000000000000000" rank="22K" rating="-101" ratingOrigin="FFG : -2151" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="38Gr" country="FR" egfPin="" ffgLicence="2100126" ffgLicenceStatus="L" firstName="Louis" grade="10K" name="Vieille" participating="11111111111111111111" rank="10K" rating="-900" ratingOrigin="FFG : -9999" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="75OB" country="FR" egfPin="" ffgLicence="2100058" ffgLicenceStatus="L" firstName="Rose-Marie" grade="8K" name="Bouisset" participating="11100000000000000000" rank="8K" rating="1280" ratingOrigin="FFG : -770" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="34Mo" country="FR" egfPin="" ffgLicence="2100033" ffgLicenceStatus="L" firstName="Hugo" grade="11K" name="Johnson" participating="11111111111111111111" rank="11K" rating="1028" ratingOrigin="FFG : -1022" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="66Pe" country="FR" egfPin="" ffgLicence="0473000" ffgLicenceStatus="L" firstName="Arnaud" grade="1K" name="Beltran" participating="11111111111111111111" rank="1K" rating="1989" ratingOrigin="FFG : -61" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="42Se" country="FR" egfPin="" ffgLicence="8590600" ffgLicenceStatus="L" firstName="Jean-Paul" grade="2K" name="Gaschignard" participating="11111111111111111111" rank="2K" rating="1925" ratingOrigin="FFG : -125" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="00St" country="FR" egfPin="" ffgLicence="1900244" ffgLicenceStatus="L" firstName="Gregoire" grade="3K" name="Thomazeau" participating="11111111111111111111" rank="3K" rating="1774" ratingOrigin="FFG : -276" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="91Or" country="FR" egfPin="" ffgLicence="1800220" ffgLicenceStatus="L" firstName="Etienne" grade="1K" name="Perroux" participating="11111111111111111111" rank="1K" rating="1978" ratingOrigin="FFG : -72" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="00St" country="FR" egfPin="" ffgLicence="2100119" ffgLicenceStatus="L" firstName="Jonathan" grade="6K" name="Pittonet" participating="11111000000000000000" rank="6K" rating="-900" ratingOrigin="FFG : -9999" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="10Tr" country="FR" egfPin="" ffgLicence="1800226" ffgLicenceStatus="L" firstName="Oscar" grade="4K" name="Yung" participating="11111111111111111111" rank="4K" rating="1689" ratingOrigin="FFG : -361" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="06Ni" country="FR" egfPin="" ffgLicence="1900160" ffgLicenceStatus="L" firstName="Nicolas" grade="13K" name="Lidureau" participating="11111111111111111111" rank="13K" rating="777" ratingOrigin="FFG : -1273" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="06Ni" country="FR" egfPin="" ffgLicence="2000223" ffgLicenceStatus="L" firstName="Andrea" grade="24K" name="Lidureau" participating="11111111111111111111" rank="24K" rating="-298" ratingOrigin="FFG : -2348" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="13Ma" country="FR" egfPin="" ffgLicence="9177001" ffgLicenceStatus="L" firstName="Olivier" grade="2D" name="Clergue" participating="11111111111111111111" rank="2D" rating="2158" ratingOrigin="FFG : 108" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="75Ju" country="FR" egfPin="" ffgLicence="1500138" ffgLicenceStatus="L" firstName="Abel" grade="9K" name="Mir" participating="11111111111111111111" rank="9K" rating="1174" ratingOrigin="FFG : -876" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="64Pa" country="FR" egfPin="" ffgLicence="" ffgLicenceStatus="-" firstName="Jean-Romain" grade="8K" name="Grange-Praderas" participating="11111000000000000000" rank="8K" rating="1250" ratingOrigin="MAN" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="44Na" country="FR" egfPin="" ffgLicence="0437002" ffgLicenceStatus="L" firstName="Brigitte" grade="12K" name="Doisneau" participating="11111000000000000000" rank="12K" rating="883" ratingOrigin="FFG : -1167" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="38Gr" country="FR" egfPin="" ffgLicence="1300156" ffgLicenceStatus="L" firstName="Elian" grade="1D" name="Mangin" participating="11111111111111111111" rank="1D" rating="2118" ratingOrigin="FFG : 68" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="75Al" country="FR" egfPin="" ffgLicence="0514106" ffgLicenceStatus="L" firstName="Fabien" grade="4D" name="Lips" participating="11111111111111111111" rank="4D" rating="2408" ratingOrigin="FFG : 358" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="42Se" country="FR" egfPin="" ffgLicence="0700382" ffgLicenceStatus="L" firstName="Léo" grade="1D" name="Battin" participating="11111000000000000000" rank="1D" rating="2097" ratingOrigin="FFG : 47" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="73Ch" country="FR" egfPin="" ffgLicence="0414403" ffgLicenceStatus="L" firstName="Gérald" grade="4K" name="Garlatti" participating="11111000000000000000" rank="4K" rating="1745" ratingOrigin="FFG : -305" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="84Av" country="FR" egfPin="" ffgLicence="1500265" ffgLicenceStatus="L" firstName="Antonin" grade="15K" name="Teissier" participating="11111000000000000000" rank="15K" rating="605" ratingOrigin="FFG : -1445" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="49An" country="FR" egfPin="" ffgLicence="1800102" ffgLicenceStatus="L" firstName="Theo" grade="2D" name="Lemoine" participating="11111111100000000000" rank="2D" rating="2172" ratingOrigin="FFG : 122" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="59Li" country="FR" egfPin="" ffgLicence="1900260" ffgLicenceStatus="L" firstName="Raphaël" grade="11K" name="Robert" participating="11111111100000000000" rank="11K" rating="1008" ratingOrigin="FFG : -1042" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="30LV" country="FR" egfPin="" ffgLicence="1900261" ffgLicenceStatus="-" firstName="Bruno" grade="10K" name="Martin-Vallas" participating="11111000000000000000" rank="10K" rating="1050" ratingOrigin="FFG : -1000" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="13Ma" country="FR" egfPin="" ffgLicence="9777001" ffgLicenceStatus="-" firstName="Christian" grade="4K" name="Chauvin" participating="11111100000000000000" rank="4K" rating="1650" ratingOrigin="FFG : -400" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="35Re" country="FR" egfPin="" ffgLicence="9737213" ffgLicenceStatus="L" firstName="Alain" grade="4K" name="Papazoglou" participating="11100000000000000000" rank="4K" rating="1704" ratingOrigin="FFG : -346" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="34Mo" country="FR" egfPin="" ffgLicence="1000483" ffgLicenceStatus="L" firstName="Sylvain" grade="3K" name="Col" participating="11111000000000000000" rank="3K" rating="1796" ratingOrigin="FFG : -254" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="31Ba" country="FR" egfPin="" ffgLicence="0700101" ffgLicenceStatus="L" firstName="Jean-Yves" grade="7K" name="Papazoglou" participating="11100000000000000000" rank="7K" rating="1356" ratingOrigin="FFG : -694" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="21Di" country="FR" egfPin="" ffgLicence="9183002" ffgLicenceStatus="L" firstName="Henri" grade="1D" name="Gauthier" participating="11111000000000000000" rank="1D" rating="2094" ratingOrigin="FFG : 44" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="38Gr" country="FR" egfPin="" ffgLicence="1700336" ffgLicenceStatus="L" firstName="Lucien" grade="2K" name="Radal" participating="11111000000000000000" rank="2K" rating="1878" ratingOrigin="FFG : -172" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="38GJ" country="FR" egfPin="" ffgLicence="2000028" ffgLicenceStatus="L" firstName="Léonard" grade="12K" name="Paret" participating="11111111111111111111" rank="12K" rating="910" ratingOrigin="FFG : -1140" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="69Ly" country="FR" egfPin="" ffgLicence="1300253" ffgLicenceStatus="L" firstName="Florent" grade="7K" name="Saint-Paul" participating="11111000000000000000" rank="7K" rating="1410" ratingOrigin="FFG : -640" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="69Ly" country="FR" egfPin="" ffgLicence="1500206" ffgLicenceStatus="L" firstName="Mikaël" grade="6K" name="Goffard" participating="11111111111111111111" rank="6K" rating="1490" ratingOrigin="FFG : -560" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="42Se" country="FR" egfPin="" ffgLicence="1500013" ffgLicenceStatus="L" firstName="Thomas" grade="12K" name="Bisaccia" participating="11111000000000000000" rank="12K" rating="918" ratingOrigin="FFG : -1132" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="13Ma" country="FR" egfPin="" ffgLicence="1700001" ffgLicenceStatus="-" firstName="Antoine" grade="11K" name="Willenbucher" participating="11111111111111111111" rank="11K" rating="950" ratingOrigin="FFG : -1100" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="92An" country="FR" egfPin="" ffgLicence="1700074" ffgLicenceStatus="L" firstName="Gaultier" grade="4K" name="Bernard" participating="11111111111111111111" rank="4K" rating="1710" ratingOrigin="FFG : -340" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="38Gr" country="FR" egfPin="" ffgLicence="2100063" ffgLicenceStatus="L" firstName="Baptiste" grade="6K" name="Fiorina" participating="11111111111111111111" rank="6K" rating="1474" ratingOrigin="FFG : -576" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="31To" country="FR" egfPin="" ffgLicence="1800214" ffgLicenceStatus="L" firstName="Octave" grade="12K" name="Hautefeuille" participating="11111000000000000000" rank="12K" rating="868" ratingOrigin="FFG : -1182" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="77ML" country="FR" egfPin="" ffgLicence="1900164" ffgLicenceStatus="L" firstName="Adam" grade="28K" name="Bakri" participating="11111000000000000000" rank="28K" rating="-738" ratingOrigin="FFG : -2788" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="64Pa" country="FR" egfPin="" ffgLicence="1100109" ffgLicenceStatus="L" firstName="Siméon" grade="3D" name="Girousse" participating="11111000000000000000" rank="3D" rating="2273" ratingOrigin="FFG : 223" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="69Ly" country="FR" egfPin="" ffgLicence="0614107" ffgLicenceStatus="L" firstName="Denis" grade="3D" name="Kuperberg" participating="11111111000000000000" rank="3D" rating="2250" ratingOrigin="FFG : 200" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="75Al" country="FR" egfPin="" ffgLicence="1800175" ffgLicenceStatus="L" firstName="Sophie" grade="8K" name="Lebas_de_Saint_Martin" participating="11111111111111111111" rank="8K" rating="1302" ratingOrigin="FFG : -748" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="35Re" country="FR" egfPin="" ffgLicence="1200092" ffgLicenceStatus="L" firstName="Christele" grade="13K" name="Derrien" participating="11111111111111111111" rank="13K" rating="835" ratingOrigin="FFG : -1215" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="91Or" country="FR" egfPin="" ffgLicence="0426802" ffgLicenceStatus="L" firstName="Stéphan" grade="3D" name="Kunne" participating="11111111111111111111" rank="3D" rating="2320" ratingOrigin="FFG : 270" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="69Ly" country="FR" egfPin="" ffgLicence="1700097" ffgLicenceStatus="L" firstName="Gilles" grade="17K" name="Forissier" participating="11111111111111111111" rank="17K" rating="402" ratingOrigin="FFG : -1648" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="92Le" country="FR" egfPin="" ffgLicence="0424601" ffgLicenceStatus="L" firstName="Sylvain" grade="3K" name="Ravera" participating="11111000000000000000" rank="3K" rating="1761" ratingOrigin="FFG : -289" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="31To" country="FR" egfPin="" ffgLicence="1500255" ffgLicenceStatus="L" firstName="Siméon" grade="7K" name="Grosdoy" participating="11111000000000000000" rank="7K" rating="1375" ratingOrigin="FFG : -675" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="25Be" country="FR" egfPin="" ffgLicence="2000239" ffgLicenceStatus="L" firstName="Raphaël" grade="4K" name="Valot" participating="11111000000000000000" rank="4K" rating="1718" ratingOrigin="FFG : -332" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="34Mo" country="FR" egfPin="" ffgLicence="0677401" ffgLicenceStatus="L" firstName="Patrice" grade="1K" name="Barcelo" participating="11111000000000000000" rank="1K" rating="1979" ratingOrigin="FFG : -71" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="00St" country="FR" egfPin="" ffgLicence="1700134" ffgLicenceStatus="L" firstName="Christophe" grade="7K" name="Levointurier" participating="11111111111111111111" rank="7K" rating="1365" ratingOrigin="FFG : -685" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="92An" country="FR" egfPin="" ffgLicence="9333003" ffgLicenceStatus="L" firstName="Jean-François" grade="3K" name="Bocquet" participating="11111111111111111111" rank="3K" rating="1820" ratingOrigin="FFG : -230" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="63Ce" country="FR" egfPin="" ffgLicence="" ffgLicenceStatus="" firstName="Soufiane" grade="13K" name="Gzhal" participating="11111111111111111111" rank="13K" rating="750" ratingOrigin="MAN" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="84Av" country="FR" egfPin="" ffgLicence="1500264" ffgLicenceStatus="L" firstName="Samuel" grade="4D" name="Teissier" participating="11111000000000000000" rank="4D" rating="2351" ratingOrigin="FFG : 301" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="31To" country="FR" egfPin="" ffgLicence="1000349" ffgLicenceStatus="C" firstName="Cyriel" grade="11K" name="Paris" participating="11110000000000000000" rank="11K" rating="950" ratingOrigin="FFG : -1100" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="38Gr" country="FR" egfPin="" ffgLicence="0682002" ffgLicenceStatus="-" firstName="Frédéric" grade="1D" name="Streicher" participating="11111111111111111111" rank="1D" rating="2050" ratingOrigin="FFG : 0" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="31Ba" country="FR" egfPin="" ffgLicence="8210000" ffgLicenceStatus="L" firstName="Denis" grade="7K" name="Puaud" participating="11111111111111111111" rank="7K" rating="1360" ratingOrigin="FFG : -690" registeringStatus="FIN" smmsCorrection="0"/>
<Player agaExpirationDate="" agaId="" club="35Re" country="FR" egfPin="" ffgLicence="2000123" ffgLicenceStatus="L" firstName="Benjamin" grade="5K" name="Loizance" participating="11111000000000000000" rank="5K" rating="1603" ratingOrigin="FFG : -447" registeringStatus="FIN" smmsCorrection="0"/>
</Players>
<Games/>
<TournamentParameterSet>
<GeneralParameterSet bInternetGame="false" basicTime="60" beginDate="2021-07-10" canByoYomiTime="300" complementaryTimeSystem="STDBYOYOMI" director="Claude brisson" endDate="2021-07-24" fischerTime="10" genCountNotPlayedGamesAsHalfPoint="true" genMMBar="1D" genMMFloor="20K" genMMS2ValueAbsent="1" genMMS2ValueBye="2" genMMZero="30K" genNBW2ValueAbsent="1" genNBW2ValueBye="2" genRoundDownNBWMMS="true" komi="7.5" location="Montcabrier" name="stage ffg" nbMovesCanTime="15" numberOfBZHGroups="1" numberOfCategories="1" numberOfRounds="10" shortName="stage-v3" size="19" stdByoYomiTime="30"/>
<HandicapParameterSet hdBase="MMS" hdCeiling="9" hdCorrection="1" hdNoHdRankThreshold="1D"/>
<PlacementParameterSet>
<PlacementCriteria>
<PlacementCriterion name="MMS" number="1"/>
<PlacementCriterion name="SOSM" number="2"/>
<PlacementCriterion name="SOSOSM" number="3"/>
<PlacementCriterion name="NULL" number="4"/>
<PlacementCriterion name="NULL" number="5"/>
<PlacementCriterion name="NULL" number="6"/>
</PlacementCriteria>
</PlacementParameterSet>
<PairingParameterSet paiBaAvoidDuplGame="500000000000000" paiBaBalanceWB="1000000" paiBaDeterministic="true" paiBaRandom="0" paiMaAdditionalPlacementCritSystem1="Rating" paiMaAdditionalPlacementCritSystem2="NULL" paiMaAvoidMixingCategories="0" paiMaCompensateDUDD="true" paiMaDUDDLowerMode="MID" paiMaDUDDUpperMode="MID" paiMaDUDDWeight="100000000" paiMaLastRoundForSeedSystem1="2" paiMaMaximizeSeeding="5000000" paiMaMinimizeScoreDifference="100000000000" paiMaSeedSystem1="SPLITANDRANDOM" paiMaSeedSystem2="SPLITANDSLIP" paiSeAvoidSameGeo="100000000000" paiSeBarThresholdActive="true" paiSeDefSecCrit="100000000000" paiSeMinimizeHandicap="0" paiSeNbWinsThresholdActive="false" paiSePreferMMSDiffRatherThanSameClub="3" paiSePreferMMSDiffRatherThanSameCountry="1" paiSeRankThreshold="1D" paiStandardNX1Factor="0.5"/>
<DPParameterSet displayClCol="true" displayCoCol="true" displayIndGamesInMatches="true" displayNPPlayers="false" displayNumCol="true" displayPlCol="true" gameFormat="full" playerSortType="name" showByePlayer="true" showNotFinallyRegisteredPlayers="true" showNotPairedPlayers="true" showNotParticipatingPlayers="false" showPlayerClub="true" showPlayerCountry="false" showPlayerGrade="true"/>
<PublishParameterSet exportToLocalFile="true" htmlAutoScroll="false" print="true"/>
</TournamentParameterSet>
<TeamTournamentParameterSet>
<TeamGeneralParameterSet teamSize="4"/>
<TeamPlacementParameterSet>
<PlacementCriteria>
<PlacementCriterion name="TEAMP" number="1"/>
<PlacementCriterion name="BDW" number="2"/>
<PlacementCriterion name="BDW3U" number="3"/>
<PlacementCriterion name="BDW2U" number="4"/>
<PlacementCriterion name="BDW1U" number="5"/>
<PlacementCriterion name="MNR" number="6"/>
</PlacementCriteria>
</TeamPlacementParameterSet>
</TeamTournamentParameterSet>
</Tournament>

File diff suppressed because it is too large Load Diff