human
Complete this python program:
def DNSServiceEnumerateDomains(flags, interfaceIndex=kDNSServiceInterfaceIndexAny, callBack=None):
assistant
#Here is the Python code you requested.

    """Asynchronously enumerate domains available for browsing and
    registration.
    The enumeration MUST be cancelled by closing the returned
    DNSServiceRef when no more domains are to be found.
    flags:
    Possible values are:
    kDNSServiceFlagsBrowseDomains to enumerate domains
    recommended for browsing.
    kDNSServiceFlagsRegistrationDomains to enumerate domains
    recommended for registration.
    interfaceIndex:
    If non-zero, specifies the interface on which to look for
    domains.  Most applications will pass
    kDNSServiceInterfaceIndexAny (0) to enumerate domains on all
    interfaces.
    callBack:
    The function to be called when a domain is found or the call
    asynchronously fails.  Its signature should be
    callBack(sdRef, flags, interfaceIndex, errorCode, replyDomain).
    return value:
    A DNSServiceRef instance.
    Callback Parameters:
    sdRef:
    The DNSServiceRef returned by DNSServiceEnumerateDomains().
    flags:
    Possible values are:
    kDNSServiceFlagsMoreComing
    kDNSServiceFlagsAdd
    kDNSServiceFlagsDefault
    interfaceIndex:
    Specifies the interface on which the domain exists.
    errorCode:
    Will be kDNSServiceErr_NoError (0) on success, otherwise
    indicates the failure that occurred (in which case other
    parameters are undefined).
    replyDomain:
    The name of the domain.
    """
    @_DNSServiceDomainEnumReply
    def _callback(sdRef, flags, interfaceIndex, errorCode, replyDomain, context):
        if (callBack is not None):
            callBack(sdRef, flags, interfaceIndex, errorCode, replyDomain.decode())
    _global_lock.acquire()
    try:
        sdRef = _DNSServiceEnumerateDomains(flags, interfaceIndex, _callback, None)
    finally:
        _global_lock.release()
    sdRef._add_callback(_callback)
    return sdRef