§
    „6Ûji+  ã                   ó  — d Z ddlmZ ddlmZmZ ddlmZ ddlZddlZddl	Z	ddl
Z
ddlmZ ddlmZ ddlmZ  ee¦  «                             ¦   «         j        Zd	„ Zd
„ Zed„ ¦   «         Zd„ Zd„ Zd„ Zd„ Zdd„Zd„ ZdS )zÚHistorical-clock bridge to the recovered FinBot execution/risk engine.

No broker imports or order APIs. Entry decisions come from the host strategy,
not from target income or invented research. See REPLAY_INPUTS.txt.
é    )Úcontextmanager)ÚdatetimeÚtimezone©ÚDecimalN)ÚPath)ÚBlocked)Úfinbot_enginec                 ó¼   — t          j        |                      dd¦  «        ¦  «        } | j        €t	          d¦  «        ‚|                      t          j        ¦  «        S )NÚZz+00:00ÚTIMEZONE_REQUIRED)r   ÚfromisoformatÚreplaceÚtzinfor	   Ú
astimezoner   Úutc)Úvalues    úO/Users/bpa/Desktop/ForesixaQuant/FinBot_Century_Gauntlet/host_replay_adapter.pyÚinstantr      sL   € Ý
Ô
  §¢¨s°8Ñ!<Ô!<Ñ
=Ô
=€EØ„|Ð¥'Ð*=Ñ">Ô">Ð>Ø×Ò�HœLÑ)Ô)Ð)ó    c                 ó  ‡— t          j        ¦   «         }t          | ¦  «                             d¦  «        5 Št	          ˆfd„d¦  «        D ]}|                     |¦  «         Œ	 d d d ¦  «         n# 1 swxY w Y   |                     ¦   «         S )NÚrbc                  ó.   •— ‰                       d¦  «        S )Ni   )Úread)Úfs   €r   ú<lambda>zdigest.<locals>.<lambda>   s   ø€  §¢¨	Ñ!2Ô!2€ r   r   )ÚhashlibÚsha256r   ÚopenÚiterÚupdateÚ	hexdigest)ÚpathÚhÚblockr   s      @r   Údigestr&      sÊ   ø€ Ý„nÑÔ€AÝ	ˆd‰Œ�Š˜Ñ	Ô	ð H !ÝÐ2Ð2Ð2Ð2°3Ñ7Ô7ÐGÐGˆE¸¿ºÀ¹¼¸¸ÐGðHð Hð Hñ Hô Hð Hð Hð Hð Hð Hð Høøøð Hð Hð Hð Hà�;Š;‰=Œ=Ðs   ·,A0Á0A4Á7A4c              #   ó–  ‡ K  — t           j        t           j        }} G ˆ fd„dt          ¦  «        }|t           _        ˆ fd„t           _        d„ dD ¦   «         }dt          j        d<   dt          j        d	<   d V — ||ct           _        t           _        |                     ¦   «         D ]7\  }}|€!t          j                             |d ¦  «         Œ(|t          j        |<   Œ8d S # ||ct           _        t           _        |                     ¦   «         D ]7\  }}|€!t          j                             |d ¦  «         Œ(|t          j        |<   Œ8w xY w)
Nc                   ó,   •— e Zd Zedˆ fd„	¦   «         ZdS )ú(historical_clock.<locals>.ReplayDateTimeNc                 óv   •— |r‰d                               |¦  «        n‰d                              d ¬¦  «        S )Nr   ©r   )r   r   )ÚclsÚtzÚcursors     €r   Únowz,historical_clock.<locals>.ReplayDateTime.now"   s;   ø€ Ø@BÐ$f F¨1¤I×$8Ò$8¸Ñ$<Ô$<Ð$<ÈÈqÌ	×HYÒHYÐaeÐHYÑHfÔHfÐfr   ©N)Ú__name__Ú
__module__Ú__qualname__Úclassmethodr/   ©r.   s   €r   ÚReplayDateTimer)   !   s-   ø€ € € € € Ø	ØfÐfÐfÐfÐfñ 
ŒØfÐfÐfr   r6   c                  ó8   •— ‰ d                               ¦   «         S )Nr   ©Ú	isoformatr5   s   €r   r   z"historical_clock.<locals>.<lambda>$   s   ø€ °v¸a´y×7JÒ7JÑ7LÔ7L€ r   c                 óN   — i | ]"}|t           j                             |¦  «        “Œ#S © )ÚosÚenvironÚget)Ú.0Úks     r   ú
<dictcomp>z$historical_clock.<locals>.<dictcomp>%   s(   € ÐIÐIÐI ˆ�2Œ:�>Š>˜!ÑÔÐIÐIÐIr   )ÚTRADING_MODEÚALPACA_BASE_URLÚLOCAL_SIMULATIONrB   z https://paper-api.alpaca.marketsrC   )Úcorer   Ú	timestampr<   r=   ÚitemsÚpop)r.   Úoriginal_datetimeÚoriginal_timestampr6   Úoldr@   Úvs   `      r   Úhistorical_clockrM      sd  øè è € å)-¬µt´~Ð(Ððgð gð gð gð gð gð g�ñ gô gð gð !…D„MÐ0LÐ0LÐ0LÐ0L¥¤ØIÐIÐ&HÐIÑIÔI€CØ1…B„Jˆ~ÑÐPrµ"´*Ð=NÑ2OØˆˆˆà%6Ð7IÐ$�Œ•d”nØ—9’9‘;”;ð 	!ð 	!‰CˆAˆaØˆy�œŸš¨¨$Ñ/Ô/Ð/Ð/Ø •”˜A‘�ð	!ð 	!øð &7Ð7IÐ$�Œ•d”nØ—9’9‘;”;ð 	!ð 	!‰CˆAˆaØˆy�œŸš¨¨$Ñ/Ô/Ð/Ð/Ø •”˜A‘�ð	!øøøs   Á6C! Ã!A'Ec                 ó–  — i }t          | ¦  «                             ¦   «         5 }|D ]j}t          j        |¦  «        }t	          |d         ¦  «        }|d         }|                     |i ¦  «        }||vs||         d         |d         k     r|||<   Œk	 d d d ¦  «         n# 1 swxY w Y   t          |                     ¦   «         ¦  «        S )NÚavailable_atÚseriesÚobservation_date)r   r   ÚjsonÚloadsr   Ú
setdefaultÚsortedrG   )r#   Ú	snapshotsÚstreamÚlineÚrÚ	availablerP   Úsnapshots           r   Úmacro_snapshotsr\   .   s   € Ø€IÝ	ˆd‰Œ�ŠÑ	Ô	ð w˜fØð 	wð 	wˆDÝŒj˜ÑÔˆA­°°>Ô1BÑ)CÔ)C˜yÈ1ÈXÌ;ÀFØ×)Ò)¨)°BÑ7Ô7ˆHØ˜XÐ%Ð%¨°&Ô)9Ð:LÔ)MÈaÐPbÔNcÒ)cÐ)cÐuvÐdlÐmsÑdtøð	wðwð wð wñ wô wð wð wð wð wð wð wøøøð wð wð wð wõ
 �)—/’/Ñ#Ô#Ñ$Ô$Ð$s   ¤A.BÂB#Â&B#c                 óT   — i }| D ]"\  }}||k    r n|                      |¦  «         Œ#|S r0   )r!   )rV   ÚatÚvaluesrZ   Úrowss        r   Úmacro_atra   7   sA   € Ø€FØ#ð ð ‰ˆ	�$Ø�RŠ<ˆ<˜˜Ø�Š�dÑÔÐÐØ€Mr   c              #   óä  K  — d }d}t          | ¦  «                             ¦   «         5 }|D �]
}t          j        |¦  «        }t	          |d         ¦  «        }|�||k    rt          d¦  «        ‚|}|j        |k    rŒQ|                     d¦  «        dk    rt          d¦  «        ‚|                     d¦  «        }t          |¦  «        t          usd|cxk     rdk    sn t          d	¦  «        ‚t	          |d
         ¦  «        |k    rt          d¦  «        ‚|                     d¦  «        rt          |d         t          ¦  «        st          d¦  «        ‚t          |                     d¦  «        t          ¦  «        r|d                              d¦  «        st          d¦  «        ‚t          d„ |d         D ¦   «         ¦  «        rt          d¦  «        ‚|d                              ¦   «         D ];}	t          |	t          ¦  «        st          d¦  «        ‚t!          j        |	d¦  «         Œ<|dz  }||fV — �Œ	 d d d ¦  «         n# 1 swxY w Y   |st          dt          |¦  «        z   ¦  «        ‚d S )Nr   r^   ÚBARS_NOT_CHRONOLOGICALÚdata_originÚHISTORICAL_INTRADAY_QUOTESÚ!VERIFIED_INTRADAY_QUOTES_REQUIREDÚbar_interval_secondsé<   ÚINTRADAY_INTERVAL_REQUIREDrO   ÚBAR_LOOKAHEADÚquotesÚQUOTES_REQUIREDÚ
source_urlzhttps://ÚBAR_SOURCE_REQUIREDc              3   ó   K  — | ]}|d vV — Œ	dS ))zBTC/USDzETH/USDNr;   )r?   Úsymbols     r   ú	<genexpr>zyear_bars.<locals>.<genexpr>L   s(   è è € ÐQÐQ¸6�6Ð!6Ð6ÐQÐQÐQÐQÐQÐQr   Ú"RECOVERED_ENGINE_UNIVERSE_MISMATCHÚEXACT_PRICE_STRINGS_REQUIREDTé   úNO_MARKET_BARS_FOR_YEAR:)r   r   rR   rS   r   r	   Úyearr>   ÚtypeÚintÚ
isinstanceÚdictÚstrÚ
startswithÚanyr_   rE   Únumber)
r#   rv   ÚpreviousÚcountrW   rX   rY   r^   ÚsecondsÚprices
             r   Ú	year_barsrƒ   >   sÇ  è è € Ø€H˜�%Ý	ˆd‰Œ�ŠÑ	Ô	ð  ˜fØð 	 ñ 	 ˆDÝŒj˜ÑÔˆA¥'¨!¨D¬'Ñ"2Ô"2˜rØÐ#¨¨Hª¨½7ÐC[Ñ;\Ô;\Ð5\ØˆHØŒw˜Š}ˆ}˜XØ�uŠu�]Ñ#Ô#Ð%AÒAÐAÍÐPsÑHtÔHtÐBtØ—E’EÐ0Ñ1Ô1ˆGÝ�G‰}Œ}¥CÐ'Ð'¨q°¨}¨}ª}¨}¸"ª}¨}¨}¨}Å7ÐKgÑChÔChÐ=hÝ�q˜Ô(Ñ)Ô)¨"Ò,Ð,µ7¸?Ñ3KÔ3KÐ-KØ—5’5˜‘?”?Ðg­*°Q°x´[ÅÑ*FÔ*FÐgÍWÐUfÑMgÔMgÐGgÝ˜aŸeše LÑ1Ô1µ#Ñ6Ô6ð  J¸aÀ¼o×>XÒ>XÐYcÑ>dÔ>dð  JÕkrð  tIñ  lJô  lJð  fJÝÐQÐQÀQÀxÄ[ÐQÑQÔQÑQÔQð  FÕX_ð  aEñ  YFô  YFð  SFØ˜8œ×+Ò+Ñ-Ô-ð (ð (�Ý! %­Ñ,Ô,ÐZµ7Ð;YÑ3ZÔ3ZÐ-ZÝ”˜E $Ñ'Ô'Ð'Ð'Ø�1‰HˆE˜2˜a˜4�Z�Z�Z‘Zð	 ð ð  ð  ñ  ô  ð  ð  ð  ð  ð  ð  øøøð  ð  ð  ð  ð" ÐD•wÐ9½#¸d¹)¼)ÑCÑDÔDÐDÐDÐDs   ¨HIÉIÉIc                 ón  — t          | t          ¦  «        st          d¦  «        ‚t          j        D ]ƒ}|                      |i ¦  «                             dg ¦  «        D ]V}d|vst          |d         ¦  «        |k    rt          d¦  «        ‚t          |d         ¦  «        |k    rt          d¦  «        ‚ŒWŒ„d S )NÚHOST_RESEARCH_REQUIREDÚsourcesrO   Ú)RESEARCH_LOOKAHEAD_OR_UNKNOWN_PUBLICATIONÚobserved_atÚRESEARCH_OBSERVED_IN_FUTURE)ry   rz   r	   rE   ÚCHANNELSr>   r   )rY   r^   ÚchannelÚsources       r   Úvalidate_researchr�   S   sÞ   € Ý�a�ÑÔÐE¥GÐ,DÑ$EÔ$EÐEÝ”=ð ^ð ^ˆØ—e’e˜G BÑ'Ô'×+Ò+¨I°bÑ9Ô9ð 	^ð 	^ˆFØ VÐ+Ð+­w°v¸nÔ7MÑ/NÔ/NÈrÒ/QÐ/QÕX_ð  aLñ  YMô  YMð  SMÝ�v˜mÔ,Ñ-Ô-¨bÒ0Ð0µwÐ?\Ñ7]Ô7]Ð1]Ð0ð	^ð^ð ^r   Tc                 óà  ‡#‡$— | d         }t          t          ||¦  «        ¦  «        }t          |¦  «        }n-# t          $ r  t	          dt          |¦  «        z   ¦  «        ‚w xY w|dk     rt	          d¦  «        ‚|r8|d         t          |ddddt          j        ¬¦  «        k    rt	          d¦  «        ‚t          |¦  «        }	|d         g}
i }g }d }t          |
¦  «        5  t          j        d	¦  «        }|                     d
¦  «         t          d¦  «        }t          d¦  «        }	 dd l}t!          |                     |g|¦  «        ¦  «        D �]5\  }\  Š#}|r2|�0‰#|z
                       ¦   «         |d         k    rt	          d¦  «        ‚‰#}‰#|
d<   |                      d¦  «        rDt          j        t          j        ¦  «        t+          | d         ¦  «        k    rt	          d¦  «        ‚ˆ#fd„|d                              ¦   «         D ¦   «         Š$t/          ˆ$fd„|                     ¦   «         D ¦   «         ¦  «        rt	          d¦  «        ‚|                     ‰$¦  «        }|                     ¦   «         }t7          ||¦  «        }t          j        |                     t          |¦  «        t          |¦  «        t          |¦  «        d
‰#                     ¦   «         dœ¦  «        ¦  «        }||k     s||k    rt	          d¦  «        ‚||k    r8|                     d‰#                     ¦   «         t          |¦  «        dœ¦  «         |}|�r||k    �r|                      ¦   «         5  tC          |                     ¦   «         ¦  «        D ]D}| "                    |d         ‰$|d                  d         ‰#                     ¦   «         d¦  «         ŒE|j#         $                    d¦  «         d d d ¦  «         n# 1 swxY w Y   |                     d‰#                     ¦   «         t          |                     ¦   «         ¦  «        t          |¦  «        ddœ¦  «         tK          |	‰#¦  «        }| &                    ‰#                     ¦   «         |d         || '                    ¦   «         |                      dg ¦  «        d d!œ¦  «        }tQ          |tB          ¦  «        st	          d"¦  «        ‚|D �]}|                     d#¦  «        }|                     d¦  «        }|d$k    rŒ4|‰$vrt	          d%¦  «        ‚	 |d&k    r»tS          |                     d'¦  «        ‰#¦  «         | *                    d(| d)         › d*|› d+|› d+|› �|‰$|         d         |d,         ‰#                     ¦   «         |d'         |                     d-¦  «        |                     d.¦  «        |                     d.¦  «        rd/nd ¬0¦	  «	        }nx|d1k    rc|                      ¦   «         5  | "                    |‰$|         d         ‰#                     ¦   «         d2¦  «        }d d d ¦  «         n# 1 swxY w Y   nt	          d3¦  «        ‚|                     d4‰#                     ¦   «         |d5œ¦  «         �Œ®# t          j+        $ rC}|                     d6‰#                     ¦   «         t          |¦  «        d7œ¦  «         Y d }~�Œûd }~ww xY w|d8         dd9d:œ||d8         <   | ,                    ¦   «         D ]}|d;         dd<d:œ||d;         <   Œ|                     d=‰#                     ¦   «         |t          |                     ¦   «         ¦  «        t          |¦  «        d>œ¦  «         �Œ7|r8|
d         t          |d?d@dAdBt          j        ¬¦  «        k     rt	          dC¦  «        ‚|                      ¦   «         5  tC          |                     ¦   «         ¦  «        D ]>}| "                    |d         |dD         |
d                              ¦   «         dE¦  «         Œ?	 d d d ¦  «         n# 1 swxY w Y   dF„ |j#         $                    dG¦  «        D ¦   «         } t[          dH„ | D ¦   «         t          d¦  «        ¦  «        }!t]          |¦  «        }| /                    dd¬I¦  «         |dJ| d)         › dK|› dL�z  }"|" 0                    tc          j2        | |t          |                     ¦   «         ¦  «        dMdNœdO¬P¦  «        ¦  «         |                     ¦   «         t          d¦  «        z
  |!k    rt	          dQ¦  «        ‚|rd/ndR|d
t          |!¦  «        dStg          |j4        ¦  «        tk          j6        tg          |¦  «        tg          |¦  «        z    7                    ¦   «         ¦  «         8                    ¦   «         tg          |"¦  «        tC          | ,                    ¦   «         ¦  «        tr           :                    dTd¦  «        dUdVœ|j#         ;                    ¦   «          cd d d ¦  «         S # |j#         ;                    ¦   «          w xY w# 1 swxY w Y   d S )WNÚcalendar_yearru   iÙ  Ú,RECOVERED_CRYPTO_ENGINE_HAS_NO_1926_UNIVERSEr   rt   r+   ÚYEAR_START_COVERAGE_MISSINGz:memory:Ú500iô  rg   ÚINTRADAY_COVERAGE_GAPÚdeadline_utcÚREPLAY_DEADLINEc                 óF   •— i | ]\  }}||‰                      ¦   «         d œ“ŒS ))r‚   r^   r8   )r?   ÚsÚpr^   s      €r   rA   zreplay.<locals>.<dictcomp>j   s/   ø€ Ð[Ð[Ð[¹c¸aÀ˜ 1¨"¯,ª,©.¬.Ð9Ð9Ð[Ð[Ð[r   rk   c              3   ó,   •K  — | ]}|d          ‰vV — ŒdS )rp   Nr;   )r?   r˜   rk   s     €r   rq   zreplay.<locals>.<genexpr>k   s,   øè è € ÐMÐM°Q�q˜”{¨&Ð0ÐMÐMÐMÐMÐMÐMr   ÚMISSING_OPEN_POSITION_MARK)ÚequityÚpeak_equityÚlocked_floorÚstarting_capital_usdr^   ÚINVALID_HOST_CAPITAL_FLOORÚFLOOR_RATCHET)rw   r^   Úfloorrp   r‚   ÚCAPITAL_FLOOR_TRIGGERz'UPDATE accounts SET halted=1 WHERE id=1ÚFLOOR_TRIGGEREDT)rw   r^   Úobserved_equityr¡   Úfloor_is_not_guaranteedÚlesson_historyÚHISTORICAL_REPLAY_ONLY)r^   rk   ÚmacroÚaccountr¦   ÚmodeÚ STRATEGY_DECISIONS_MUST_BE_ARRAYÚactionÚHOLDÚDECISION_WITHOUT_QUOTEÚBUYÚresearchÚaÚattemptz-yú-ÚstopÚquantityÚtrailing_pctÚHISTORICAL_REPLAY)Úrequested_qtyr¶   Úexecution_tagÚSELLÚHOST_STRATEGY_EXITÚUNKNOWN_STRATEGY_ACTIONÚ	EXECUTION)rw   r^   ÚresultÚENGINE_REJECTION)rw   r^   Úreasonrm   z;Host supplied bar provenance; not externally authenticated.)ÚurlÚpoint_in_time_validatedÚtiming_basisrÁ   zGVerified ALFRED vintage header plus conservative snapshot availability.ÚMARK)rw   r^   r¾   r›   r�   é   é   é   é;   ÚYEAR_END_COVERAGE_MISSINGÚmarkÚREPLAY_YEAR_ENDc                 ó,   — g | ]}t          |¦  «        ‘ŒS r;   )rz   ©r?   rY   s     r   ú
<listcomp>zreplay.<locals>.<listcomp>‘   s   € Ð_Ð_Ð_˜a•$�q‘'”'Ð_Ð_Ð_r   z&SELECT * FROM dispositions ORDER BY idc              3   ó@   K  — | ]}t          |d          ¦  «        V — ŒdS )Úeconomic_pnlNr   rÍ   s     r   rq   zreplay.<locals>.<genexpr>’   s/   è è € ÐAÐA°q�  .Ô 1Ñ2Ô2ÐAÐAÐAÐAÐAÐAr   )ÚparentsÚexist_okÚattempt_Ú_year_z.jsonÚ6SIMULATED_EXECUTION_ON_HOST_SUPPLIED_HISTORICAL_QUOTES)ÚdispositionsÚeventsÚ
final_cashÚmeasurementé   )ÚindentÚLEDGER_RECONCILIATION_FAILEDÚPARTIAL_REPLAY_NOT_CENTURYÚREALIZED_NET_AFTER_COSTS)Úintraday_3pct_breakerÚcapital_floor_ratchetÚno_live_ordersÚpoint_in_time_inputsz\Evaluated at supplied observations; unseen intrabar moves and floor gaps are not guaranteed.)rd   r�   rž   Únet_income_usdÚincome_definitionÚstrategy_sha256Údataset_sha256Úledger_sha256r†   ÚcontrolsÚcontrol_scope)<r    rƒ   ÚnextÚStopIterationr	   r{   r   r   r   r\   rM   rE   ÚEngineÚ
initializer   Ú	itertoolsÚ	enumerateÚchainÚtotal_secondsr>   r/   r   rG   r}   Ú	positionsrÊ   r›   Úmaxr~   Úcapital_floorr9   ÚappendÚtransactionÚlistÚclose_positionÚdbÚexecutera   ÚdecideÚstatusry   r�   Úsimulate_entryÚRejectedr_   Úsumr   ÚmkdirÚ
write_textrR   Údumpsr&   Ú__file__r   r   Úencoder"   rz   ÚfromkeysÚclose)%ÚcontextÚstrategyÚ	bars_pathÚ
macro_pathÚ
output_dirÚrequire_full_yearrv   ÚbarsÚfirstrV   r.   r†   r×   Úprevious_atÚenginer¡   Úpeakrî   ÚindexÚrowÚmarksÚeqÚ
next_floorr˜   r¨   Ú	decisionsÚdr¬   rp   r¾   ÚexcrL   r`   ÚincomeÚledgerr^   rk   s%                                      @@r   Úreplayr  Z   sÃ  øø€ Ø	�Ô	!€D¥t­I°iÀÑ,EÔ,EÑ'FÔ'F $Ý�4‰jŒjˆˆøÝÐLÐLÐL�wÐ'AÅ#ÀdÁ)Ä)Ñ'KÑLÔLÐLÐLøøøàˆD‚y€y•wÐMÑNÔNÐNØÐ˜U 1œX­°°a¸¸!¸AÅXÄ\Ð(RÑ(RÔ(RÒRÐRÕY`Ða~ÑYÔYÐSÝ˜jÑ)Ô)€I°%¸´(°¨&ÀB¸GÈbÀvÐ]aÐQ\Ý	˜&Ñ	!Ô	!ð :"ð :"ÝŒ{˜:Ñ&Ô&ˆ v×'8Ò'8¸Ñ'?Ô'?Ð'?ÅgÈaÁjÄjÀÕV]Ð^aÑVbÔVbÐQUð8	"ØÐÐÐÝ"+¨I¯OªO¸U¸GÀDÑ,IÔ,IÑ"JÔ"Jð &Jñ &J‘�‘h�r˜#Ø$ð  i¨Ð)@ÀbÈÁn×EcÒEcÑEeÔEeÐfið  kAô  gBò  FBð  FBõ  IPð  Qhñ  Iiô  Iið  CiØ�¨˜v a™yØ—;’;˜~Ñ.Ô.ð  Qµ8´<ÅÄÑ3MÔ3MÍwÐW^Ð_mÔWnÑOoÔOoÒ3oÐ3oÕv}ð  Pñ  wQô  wQð  qQØ[Ð[Ð[Ð[ÀSÈÄ]×EXÒEXÑEZÔEZÐ[Ñ[Ô[�ÝÐMÐMÐMÐM¸&×:JÒ:JÑ:LÔ:LÐMÑMÔMÑMÔMÐyÕT[Ð\xÑTyÔTyÐNyØ—k’k &Ñ)Ô)�Ø—=’=‘?”?�­¨D°©¬ 4Ýœ; x×'=Ò'=ÍÈBÉÌÕ^aÐbfÑ^gÔ^gÕwzð  |Añ  xBô  xBð  Z_ð  eg÷  eqò  eqñ  esô  esð  ?tð  ?tñ  (uô  (uñ  vô  v�
Ø˜eÒ#Ð# z°$¢ ½WÐEaÑ=bÔ=bÐ7bØ˜uÒ$Ð$ V§]¢]¸?ÐPR×P\ÒP\ÑP^ÔP^ÕgjÐkuÑgvÔgvÐ3wÐ3wÑ%xÔ%xÐ%xØ �Øñ k˜R šY™YØ×+Ò+Ñ-Ô-ð Uð UÝ!% f×&6Ò&6Ñ&8Ô&8Ñ!9Ô!9ð  að  a˜A¸&×:OÒ:OÐPQÐRZÔP[Ð\bÐcdÐemÔcnÔ\oÐpwÔ\xÐy{÷  zFò  zFñ  zHô  zHð  I`ñ  ;aô  ;að  ;að  ;aØœ	×)Ò)Ð*SÑTÔTÐTðUð Uð Uñ Uô Uð Uð Uð Uð Uð Uð Uøøøð Uð Uð Uð Uð —M’MÐ*;ÀÇÂÁÄÕbeÐfl×fsÒfsÑfuÔfuÑbvÔbvõ  @Cð  DIñ  @Jô  @Jð  eið  #jð  #jñ  kô  kð  kÝ˜y¨Ñ,Ô,�à"Ÿ/š/°·²±´ÈÈHÌÐ^cØ$Ÿmšm™oœo¸w¿{º{ÐK[Ð\^Ñ?_Ô?_Ðgð+Að +Añ Bô B�	å! )­DÑ1Ô1Ðc½Ð@bÑ8cÔ8cÐ2cØ"ð iñ i�AØŸ5š5 ™?œ?�F°!·%²%¸±/´/¨6Ø˜v’~�~ hØ VÐ+Ð+µ'Ð:RÑ2SÔ2SÐ,Sð	iØ! 5š=˜=Ý-¨a¯eªe°JÑ.?Ô.?ÀÑCÔCÐCØ#)×#8Ò#8Ð9j¸WÀYÔ=OÐ9jÐ9jÐSWÐ9jÐ9jÐZ_Ð9jÐ9jÐbhÐ9jÐ9jÐkqÐrxÐyô  sAð  BIô  sJð  KLð  MSô  KTð  UW÷  Uaò  Uañ  Ucô  Ucð  deð  fpô  dqð  @A÷  @Eò  @Eð  FPñ  @Qô  @Qð  _`÷  _dò  _dð  esñ  _tô  _tð  Z[÷  Z_ò  Z_ð  `nñ  Zoô  Zoð  Cyð  CVð  CVð  uyÐ#8ñ  $zô  $z˜F˜FØ# Vš^˜^Ø!'×!3Ò!3Ñ!5Ô!5ð  Wð  W¸V×=RÒ=RÐSYÐZ`ÐagÔZhÐipÔZqÐrt×r~Òr~ñ  sAô  sAð  BVñ  >Wô  >W°fð  Wð  Wð  Wñ  Wô  Wð  Wð  Wð  Wð  Wð  Wð  Wøøøð  Wð  Wð  Wð  WøÝ#*Ð+DÑ#EÔ#EÐEØŸš¨k¸r¿|º|¹~¼~ÐW]Ð&^Ð&^Ñ_Ô_Ð_Ñ_øÝœ=ð ið ið iØŸšÐ.@ÀbÇlÂlÁnÄnÕ^aÐbeÑ^fÔ^fÐ&gÐ&gÑhÔhÐhÐhÐhÐhÐhÑhøøøøðiøøøà25°lÔ2CÐ^bð  spð  ,qð  ,q�˜˜LÔ)Ñ*ØŸš™œð  Cð  C�AÀÀ5ÄÐdhð  yBð  ;Cð  ;C¨°°%´Ñ(9Ð(9Ø—’ f°"·,²,±.´.È%ÕY\Ð]c×]jÒ]jÑ]lÔ]lÑYmÔYmõ  ~Að  BGñ  ~Hô  ~Hð  Ið  Iñ  Jô  Jð  Jñ  JØ ð  K V¨A¤Yµ¸$¸rÀ"ÀRÈÕRZÔR^Ð1_Ñ1_Ô1_Ò%_Ð%_Õfmð  oJñ  gKô  gKð  aKà×#Ò#Ñ%Ô%ð Gð GÝ˜f×.Ò.Ñ0Ô0Ñ1Ô1ð  Gð  G�A°&×2GÒ2GÈÈ(ÌÐTUÐV\ÔT]Ð^dÐefÔ^g×^qÒ^qÑ^sÔ^sð  uFñ  3Gô  3Gð  3Gð  3Gð  GðGð Gð Gñ Gô Gð Gð Gð Gð Gð Gð Gøøøð Gð Gð Gð Gà_Ð_ 6¤9×#4Ò#4Ð5]Ñ#^Ô#^Ð_Ñ_Ô_ˆDÝÐAÐA¸DÐAÑAÔAÅ'È!Á*Ä*ÑMÔMˆFÝ˜JÑ'Ô'ˆJ¨
×(8Ò(8ÀÈtÐ(8Ñ(TÔ(TÐ(TØÐN¨°Ô);ÐNÐNÀ4ÐNÐNÐNÑNˆFØ×Ò�dœj¸ÀvÕ[^Ð_e×_lÒ_lÑ_nÔ_nÑ[oÔ[oð  wð  *xð  *xð  @Að  Bñ  Bô  Bñ  Cô  Cð  CØ�}Š}‰Œ�w s™|œ|Ñ+¨VÒ3Ð3½'ÐB`Ñ:aÔ:aÐ4aØ9JÐ"lÐ"5Ð"5ÐPlð  ~Bð  Z_Ý!$ V¡¤ÐA[Ý"(¨Ô):Ñ";Ô";ÍWÌ^Õ]cÐdmÑ]nÔ]nÕouð  wAñ  pBô  pBñ  ^B÷  ]Jò  ]Jñ  ]Lô  ]Lñ  NMô  NM÷  NWò  NWñ  NYô  NYõ  jpð  qwñ  jxô  jxÝ˜wŸ~š~Ñ/Ô/Ñ0Ô0½D¿MºMð  Kdð  eiñ  =jô  =jØ ~ð	@ð @ð
 ”	—’Ñ!Ô!Ð!ðu:"ð :"ð :"ð :"ñ :"ô :"ð :"ð :"øðt ”	—’Ñ!Ô!Ð!Ð!øøøðu:"ð :"ð :"ð :"øøøð :"ð :"ð :"ð :"ð :"ð :"sÑ   ¨8 ¸*A"Ã!Ai#Ä*H?iÍ)BO6Ï*iÏ6O:Ï:iÏ=O:Ï>D3iÔ2CZØ7Y	ÙZÙYÙZÙYÙ>ZÚiÚ[*	Ú'8[%	ÛiÛ%[*	Û*C-ißA!aà9iáa		á	iáa		áGièi#éi é i#é#i'é*i'c           	      óÒ  ‡— t          j        t          dz                       ¦   «         ¦  «        }t          |d         z  }t          |d         z  }	 |                     ¦   «         st          d¦  «        ‚|                     d¦  «        }	 t          j        |¦  «        Št          ˆfd„dD ¦   «         ¦  «        st          d¦  «        ‚t          | ‰||t          |d	         z  ¦  «        S )
Nzreplay_config.jsonr	  r
  ÚMACRO_SNAPSHOTS_NOT_INSTALLEDÚstrategy_modulec              3   óT   •K  — | ]"}t          t          ‰|d ¦  «        ¦  «        V — Œ#d S r0   )ÚcallableÚgetattr)r?   r@   r  s     €r   rq   zrun_year.<locals>.<genexpr>¦   s7   øè è € ÐVÐV°a�x� ¨¨4Ñ0Ô0Ñ1Ô1ÐVÐVÐVÐVÐVÐVr   )rû   rô   ÚHOST_STRATEGY_INTERFACE_MISSINGÚoutput_path)rR   rS   ÚROOTÚ	read_textÚis_filer	   r>   Ú	importlibÚimport_moduleÚallr  )r  Úconfigr  r¨   Únamer  s        @r   Úrun_yearr-  ž   së   ø€ ÝŒ:•tÐ0Ñ0×;Ò;Ñ=Ô=Ñ>Ô>€FÝ	ˆf�[Ô!Ñ	!€D­¨V°LÔ-AÑ(A %ØØ�=Š=‰?Œ?ÐI¥Ð)HÑ!IÔ!IÐIØ	�ŠÐ%Ñ	&Ô	&€DØÝÔ$ TÑ*Ô*€HÝÐVÐVÐVÐVÐ;UÐVÑVÔVÑVÔVð  HÕ]dð  fGñ  ^Hô  ^Hð  XHÝ�'˜( 4¨­d°6¸-Ô3HÑ.HÑIÔIÐIr   )T)Ú__doc__Ú
contextlibr   r   r   Údecimalr   r   r(  rR   r<   Úpathlibr   Úgauntletr	   Úvendorr
   rE   r  ÚresolveÚparentr%  r   r&   rM   r\   ra   rƒ   r�   r  r-  r;   r   r   ú<module>r6     sx  ððð ð
 &Ð %Ð %Ð %Ð %Ð %Ø &Ð &Ð &Ð &Ð &Ð &Ð &Ð &Ø Ð Ð Ð Ð Ð Ø €€€Ø Ð Ð Ð Ø €€€Ø 	€	€	€	Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø (Ð (Ð (Ð (Ð (Ð (à	€Tˆ(�^„^×ÒÑÔÔ$€ð*ð *ð *ð
ð ð ð ð!ð !ñ „ð!ð%ð %ð %ðð ð ðEð Eð Eð*^ð ^ð ^ðB"ð B"ð B"ð B"ðH	Jð 	Jð 	Jð 	Jð 	Jr   