human
Complete the below
def make_configDictValidator(config, ignore_undefined=False):

    ''''Okay, stay with me here, this may get confusing. This function returns a
    validator that validates a "configdict". This is a term I just made up to
    refer to a dict that holds config information: keys are strings and values
    are whatever that config value is. The argument to /this/ function is a
    dictionary defining the valid keys for the configdict. It therefore maps
    those key names to Setting objects. When the returned validator function
    validates, it calls all the appropriate validators for each configdict
    setting
    I hope that makes sense.
    ignore_undefined, if True, will ignore any items in the dict to be
    validated which don\'t have a corresponding definition in the config.
    Otherwise, undefined entries will raise an error.'
    '''
 Hereever that config value is?
assistant
#Hereever that config value is.
    def configDictValidator(d):
        newdict = util.OrderedDict()
        undefined_key_matches = {}
        for key in d.iterkeys():
            if (key not in config):
                match = _get_closest_match(key, config.iterkeys())
                if (match and ignore_undefined):
                    undefined_key_matches[match] = key
                    newdict[key] = d[key]
                elif match:
                    raise ValidationException(("'%s'    is    not    a    configuration    item.    Did    you    mean    '%s'?" % (key, match)))
                elif (not ignore_undefined):
                    raise ValidationException(("'%s'    is    not    a    configuration    item" % key))
                else:
                    newdict[key] = d[key]
        for (configkey, configsetting) in config.iteritems():
            if (configkey in d):
                newdict[configkey] = configsetting.validator(d[configkey])
            elif (configsetting.default is not None):
                newdict[configkey] = configsetting.validator(configsetting.default)
            elif configsetting.required:
                if (configkey in undefined_key_matches):
                    raise ValidationException(("Key    '%s'    is    not    a    valid    configuration    item.    Did    you    mean    '%s'?" % (undefined_key_matches[configkey], configkey)))
                else:
                    raise ValidationException(("Required    key    '%s'    was    not    specified.    You    must    give    a    value    for    this    setting" % configkey))
        return newdict
    configDictValidator.config = config
    configDictValidator.ignore_undefined = ignore_undefined
    return configDictValidator