<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def merge_dictionary(dst, src, extend_lists=False):
 """Recursively merge two dicts. Hashes at the root level are NOT overwritten. This can be used to merge two dicts using deep key evaluation (with support for merging lists as well). There is also logic to handle placeholders (`None`) in lists as documented in split_dicts. :keyword extend_lists: if true, just extends lists instead of merging them. Note: This updates dst. """

    stack = [(dst, src)]
    while stack:
        current_dst, current_src = stack.pop()
        for key in current_src:
            source = current_src[key]
            if key not in current_dst:
                current_dst[key] = source
            else:
                dest = current_dst[key]
                if isinstance(source, dict) and isinstance(dest, dict):
                    stack.append((dest, source))
                elif isinstance(source, list) and isinstance(dest, list):
                    merge_lists(dest, source, extend_lists=extend_lists)
                else:
                    current_dst[key] = source
    return dst