Le fichier `challenge.toml` (ou `challenge.txt`) définit les paramètres de votre étape/exercice (au format [toml](https://github.com/toml-lang/toml/blob/master/versions/en/toml-v0.4.0.md)).
`wip = true` : indique que l'étape n'est pas terminée.
Cet attribut est utilisé pour signifier aux potentiels testeurs, lors des FIC blancs par exemple, que votre étape n'est pas encore prête à être testée.
Cela débloque automatiquement l'étape suivante.
![Rendu de l'avertissement d'étape non terminée](wip.png)
+ `vector` : [liste de drapeaux]({{% relref "/responses/vector.md" %}}),
+ `text` : [contenu sur plusieurs lignes]({{% relref "/responses/multiline.md" %}}),
+ `mcq` : [question à choix multiple]({{% relref "/responses/mcq.md" %}}) (cases à cocher) avec ou sans [justification]({{% relref "/responses/mcq_justified.md" %}}),
+ `ucq` : [liste de choix]({{% relref "/responses/ucq.md" %}}),
+ `label` : [texte informatif]({{% relref "/responses/label.md" %}}) qui ne donne pas lieu à validation ;
*`label = "Intitulé"` : (facultatif, par défaut : `Flag`) intitulé du drapeau ;
*`raw = 'MieH2athxuPhai6u'` ou `raw = ['part1', 'part2']` : drapeau(x) exact(s) à trouver ; sous forme de tableau, le participant n'aura pas connaissaance du nombre d'éléments (à moins de définir l'attribut `showlines`) ;
*`showlines = false` : (facultatif, par défaut : `false`) lorsque le drapeau est un tableau et que `showlines` est vrai, le nombre d'éléments du tableau sera donné au participant, sinon il devra déterminer lui-même le nombre d'éléments à trouver (pour l'instant cette option est limitée à un tableau de 9 éléments maximum, c'est normal si ça bug au-delà, demandez-moi si vous avez besoin de plus) ;
*`bonus_gain = 33` : (facultatif) donne des points supplémentaires si complété ;
*`ordered = false` : (facultatif, par défaut : `false`) ignore l'ordre dans lequel les éléments du tableau sont passés ;
*`capture_regexp = "^(?:sudo +)?(.*)$"` : (facultatif) expression rationnelle dont les groupes capturés serviront comme chaîne à valider (notez que `?:` au début d'un groupe ne le capturera pas) ;
*`choices_cost = 42` : (facultatif) coût pour afficher les choix : avant l'affichage, se comporte comme un drapeau `key` classique (à 0, les choix sont affichés directement)
*`noshuffle = true` : (facultatif, par défaut `false`) conserve l'ordre des propositions, au lieu de les mélanger ;
+ `raw = "Justification"` (nécessaire pour un [QCM justifié]({{% relref "/responses/mcq_justified.md" %}})) : utilisez une chaîne de caractères (notez qu'il n'est pas possible de combiner des réponses vraies justifiées et non justifiées),
Cependant il peut être nécessaire de préciser certains attributs. Cela se fait alors avec :
-`[[file]]` : paramètres pour un indice :
*`filename = "toto.txt"` : nom du fichier tel qu'il apparaît dans le dossier `files` ;
*`hidden = true` : indique si le fichier doit être caché aux participants par défaut (l'équipe serveur pourra le distribuer si besoin, dans tous les cas il sera affiché lorsque le challenge sera archivé) ;