function revealInfo(a\MetadataSet $ms)
{
    echo "<h1>", $ms->getName(), "</h1>", S_H2, "Wired Fields", E_H2, S_UL;
    foreach (a\MetadataSet::$wired_fields as $field_name) {
        $required_method_name = u\StringUtility::getMethodName($field_name) . "FieldRequired";
        $visibility_method_name = u\StringUtility::getMethodName($field_name) . "FieldVisibility";
        echo S_LI, $field_name . ", " . ($ms->{$required_method_name}() ? "required" : "not required") . ", " . $ms->{$visibility_method_name}(), E_LI;
    }
    echo E_UL;
    if ($ms->hasDynamicMetadataFieldDefinitions()) {
        echo S_H2, "Dynamic Fields", E_H2, S_UL;
        foreach ($ms->getDynamicMetadataFieldDefinitionNames() as $dmfs_name) {
            $dmfd = $ms->getDynamicMetadataFieldDefinition($dmfs_name);
            echo S_LI, $dmfd->getName(), " &mdash; ", "type: ", $dmfd->getFieldType(), "; ", !$dmfd->isText() ? "possible values: " . implode(";", $dmfd->getPossibleValueStrings()) . "; " : "", $dmfd->isRequired() ? "required" : "not required", "; ", E_LI;
        }
        echo E_UL;
    } else {
        echo "This MS does not have dynamic fields", BR;
    }
}