# File lib/dnstraverse/referral.rb, line 82
    def initialize(args)
      @resolver = args[:resolver] # Dnsruby::Resolver object
      @qname = args[:qname]
      @qclass = args[:qclass] || :IN
      @qtype = args[:qtype] || :A
      @nsatype = args[:nsatype] || :A
      @infocache = args[:infocache] || DNSTraverse::InfoCache.new
      @roots = args[:roots]
      @resolves = nil # Array of referral objects for resolving phase
      @refid = args[:refid] || ''
      @server = args[:server] || nil # nil for the root-root server
      @serverips = args[:serverips] || nil
      @responses = Hash.new # responses/exception for each IP in @serverips
      @children = Hash.new # Array of child Referrer objects keyed by IP
      @bailiwick = args[:bailiwick] || nil
      @secure = args[:secure] || true # ensure bailiwick checks
      @parent = args[:parent] || nil # Parent Referral
      @parent_ip = args[:parent_ip] || nil # Parent Referral IP if applicable
      @maxdepth = args[:maxdepth] || 10 # maximum depth before error
      @decoded_query_cache = args[:decoded_query_cache]
      @referral_resolution = args[:referral_resolution] || false # flag
      @stats = nil # will contain statistics for answers
      @stats_resolve = nil # will contain statistics for our resolve (if applic)
      @serverweights = Hash.new # key is IP
      @warnings = Array.new # warnings will be placed here
      @processed = false # flag for processed? method
      raise "Must pass Resolver" unless @resolver
      @infocache.add_hints('', args[:roots]) if args[:roots] # add root hints
      unless @decoded_query_cache then
        dcq_args = { :resolver => @resolver}
        @decoded_query_cache = DNSTraverse::DecodedQueryCache.new(dcq_args)
      end
      if serverips then # we know the server weights - we're not resolving
        for ip in serverips do
          @serverweights[ip] = 1.0 / @serverips.length
        end
      end
      Log.debug { "New resolver object created: " + self.to_s }
    end