+
    j                     v    R t ^ RIHtHtHtHt ^ RIHt ^ RIH	t	H
t
 ^ RIHt ^ RIHt ^ RIHt R R lt. R
OtR	# )zPluggable property-search sources. See sources/_base.py for the contract.

Adding a source:
1. Create sources/<name>.py with a Source subclass
2. Add it to REGISTRY below
3. Reference 'name' in campaigns.yaml
)DisabledSourcePropertyHitSearchCriteriaSource)make_disabled_sources)LeggettEmailSourceProperstarEmailSource)GreenAcresSource)ImmonotSource)ListGloballySearchSourcec                F    V ^8  d   QhR\         \        \        3,          /# )   return)dictstrr   )formats   "X/Users/jonathan/Documents/Zakelijk/ClaudeOS/03_Lab/farmmatch/scraper/sources/__init__.py__annotate__r      s     
( 
(S&[) 
(    c                     \        4       \        4       \        4       \        4       \	        4       .p V P                  \        4       4       V  Uu/ uF  qP                  VbK  	  up# u upi )uC   Single instance per source — health() and search() are stateless.)r	   r
   r   r   r   extendr   name)sourcesss     r   build_registryr      sX     	 "G NN(*+&'w!FFAIw'''s   A%N)r   r   r   r   r   )__doc__sources._baser   r   r   r   sources._disabledr   sources.email_ingestr   r   sources.greenacresr	   sources.immonotr
   sources.listglobally_searchr   r   __all__ r   r   <module>r$      s/    N M 3 J / ) @
( Zr   