§
    šÁjV[  ã                  óÜ   — d Z ddlmZ ddlZddlZddlZddlmZ ddlm	Z	m
Z
mZmZmZmZ ddlmZmZmZmZmZmZmZmZmZ ddlmZmZmZmZ  G d„ d	e¦  «        Zdd„Z G d„ d¦  «        Z dS )zþ
Item Crafting Engine for FreeExile.
Implements deep Path of Exile 2 style deterministic and stochastic crafting.
Supports iLvl tier gating, slot exclusivity, pinnacle boss materials,
quest-gated Primal Boneforge trade-off affixes, and Feral Corruption.
é    )ÚannotationsN)ÚEnum)ÚListÚOptionalÚTupleÚSetÚUnionÚAny)	ÚItemSlotÚ
ItemRarityÚ	AffixTypeÚPrimalCurrencyTypeÚDownsidePenaltyTypeÚAffixDefinitionÚAffixModÚCraftingItemÚCraftingResult)Úget_available_affixesÚget_tradeoff_affix_by_idÚCANONICAL_AFFIX_DEFINITIONSÚCANONICAL_TRADEOFF_AFFIXESc                  ó"   — e Zd ZdZdZdZdZdZdS )ÚSpiritStoneCurrencyÚKHAI_LINH_CHAUÚHON_NGUYEN_THACHÚTHIEN_MENH_DANÚTHAN_TUONG_PHUÚTHAI_HU_CAN_KHON_KINHN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   © ó    ú:C:\Projects\FreeExile\server\world\item_crafting_engine.pyr   r   "   s+   € € € € € Ø%€NØ)ÐØ%€NØ%€NØ3ÐÐÐr#   r   Úcurrencyr   Ú
item_levelÚintÚreturnc                óú  — t           j        dt           j        dt           j        dt           j        dt           j        dt           j        dt           j        dt           j        dt           j	        dt           j
        d	t           j        d
t           j        dt           j        di}|                     | d¦  «        }t          dt!          d|¦  «        ¦  «        }d|dz  z   dz  }t#          t%          ||z  ¦  «        ¦  «        S )zOCalculates exponential crafting gold fee based on currency type and item level.é2   éd   é–   éÈ   i,  i   iÜ  iˆ  i¸  i   i'  i † iô  é   ç      ð?g      9@gš™™™™™ù?)r   ÚHAC_THACH_MAI_NHANÚCOT_GIAP_THAO_THIETÚTRO_XUONG_TAY_UEÚBAO_MA_THACHÚHAC_SO_THACHÚUAN_MA_THACHÚ	CO_COT_ANÚHUYET_HON_THACHÚU_MINH_COT_DINHÚCOT_DAO_TUOC_DOATÚTINH_HOA_HUYET_THACHÚTA_HUYET_DI_BIEN_THACHÚHUYET_ANH_CO_KINHÚgetÚmaxÚminr'   Úround)r%   r&   Ú	base_feesÚbaseÚilvl_clampedÚscales         r$   Úcalculate_crafting_gold_feerE   *   sÏ   € õ 	Ô-¨rÝÔ.°ÝÔ+¨SÝÔ'¨ÝÔ'¨ÝÔ'¨ÝÔ$ cÝÔ*¨DÝÔ*¨DÝÔ,¨dÝÔ/°ÝÔ1°5ÝÔ,¨fð€Ið �=Š=˜ 3Ñ'Ô'€DÝ�q�#˜c :Ñ.Ô.Ñ/Ô/€LØ�< $Ñ&Ñ&¨3Ñ.€EÝ�u�T˜E‘\Ñ"Ô"Ñ#Ô#Ð#r#   c                  ó|   — e Zd ZdZd-d.d„Z	 d-d/d„Z	 d0d1d„Zd2d„Zd3d„Zd4d „Z	d5d!„Z
d4d"„Zd6d#„Zd7d%„Zd8d'„Zd9d,„ZdS ):ÚItemCraftingEnginez%Server-Authoritative Crafting Engine.NÚrng_seedúOptional[int]r(   ÚNonec                ó8   — t          j        |¦  «        | _        d S ©N)ÚrandomÚRandomÚ_rng)ÚselfrH   s     r$   Ú__init__zItemCraftingEngine.__init__D   s   € Ý”M (Ñ+Ô+ˆŒ	ˆ	ˆ	r#   Úslotr   Ú
affix_typer   r&   r'   Úguaranteed_tierúOptional[AffixMod]c                ól  ‡— t          |||¦  «        }|sdS ‰�ˆfd„|D ¦   «         }|r|}| j                             |d„ |D ¦   «         d¬¦  «        d         }t          | j                             |j        |j        ¦  «        d¦  «        }|j                             ¦   «         r(|j                             ¦   «         rt          |¦  «        }t          |j
        › dt          j        ¦   «         j        dd…         › �|j        ||j        ||j        |j        |j        |j        |j        |j        ¬	¦  «        S )
z:Rolls an affix from catalog based on slot and iLvl gating.Nc                ó*   •— g | ]}|j         ‰k    ¯|‘ŒS r"   )Útier)Ú.0ÚarT   s     €r$   ú
<listcomp>z2ItemCraftingEngine._roll_affix.<locals>.<listcomp>S   s%   ø€ ÐFÐFÐF˜q¨A¬F°oÒ,EÐ,E˜Ð,EÐ,EÐ,Er#   c                ó   — g | ]	}|j         ‘Œ
S r"   ©Úweight©rY   rZ   s     r$   r[   z2ItemCraftingEngine._roll_affix.<locals>.<listcomp>W   s   € Ð1IÐ1IÐ1I¸q°!´(Ð1IÐ1IÐ1Ir#   r.   ©ÚweightsÚkr   Ú_é   ©Úmod_idÚmod_nameÚmod_typerX   ÚvalueÚtier_minÚtier_maxÚis_downsideÚdownside_typeÚdownside_valÚdownside_desc)r   rO   Úchoicesr@   ÚuniformÚmin_valÚmax_valÚ
is_integerr'   r   rf   ÚuuidÚuuid4Úhexrg   rX   Úis_downside_affixrm   rn   ro   )	rP   rR   rS   r&   rT   ÚpoolÚ	tier_poolÚchosenÚvals	       `    r$   Ú_roll_affixzItemCraftingEngine._roll_affixG   sI  ø€ õ % T¨:°zÑBÔBˆØð 	Ø�4ØÐ&ØFÐFÐFÐF DÐFÑFÔFˆIØð !Ø �à”×"Ò" 4Ð1IÐ1IÀDÐ1IÑ1IÔ1IÈQÐ"ÑOÔOÐPQÔRˆÝ�D”I×%Ò% f¤n°f´nÑEÔEÀqÑIÔIˆØŒ>×$Ò$Ñ&Ô&ð 	¨6¬>×+DÒ+DÑ+FÔ+Fð 	Ý�c‘(”(ˆCåØ”mÐ<Ð<¥d¤j¡l¤lÔ&6°r¸°rÔ&:Ð<Ð<Ø”_ØØ”ØØ”^Ø”^ØÔ0Ø Ô.ØÔ,Ø Ô.ð
ñ 
ô 
ð 	
r#   r   Úitemr   r%   r   Úplayer_goldr   c           	     óê   — t          ||j        ¦  «        }||k     r!t          ddd|› d|› d�||j        d¬¦  «        S |                      ||¦  «        \  }}}t          |||||j        |r|nd¬¦  «        S )zKApplies primal currency with exponential gold fee validation and deduction.FÚINSUFFICIENT_GOLD_FEEz INSUFFICIENT_GOLD_FEE: Required z gold fee, but player only has ú.r   )ÚsuccessÚstatus_codeÚmessager~   Úconsumed_currencyÚgold_fee_consumed)rE   r&   r   ri   Úapply_currency)rP   r~   r%   r   Úgold_feeÚokÚstatusÚmodified_items           r$   Úapply_primal_currencyz(ItemCraftingEngine.apply_primal_currencyj   s±   € õ /¨x¸¼ÑIÔIˆØ˜Ò!Ð!Ý!ØØ3Ør¸8ÐrÐrÐdoÐrÐrÐrØØ"*¤.Ø"#ðñ ô ð ð %)×$7Ò$7¸¸hÑ$GÔ$GÑ!ˆˆF�MÝØØØØØ&œnØ*,Ð3˜h˜h°!ð
ñ 
ô 
ð 	
r#   úTuple[bool, str, CraftingItem]c                ó†  — |t           j        k    r�|t          j        t          j        fvrdd|fS |j        dk    rdd|fS |j        t          j        k    rdn|j        t          j	        k    rdnd}t          d|j        |z   ¦  «        |_        dd	|fS |t           j        k    r¢|t          j        t          j        t          j        t          j        t          j        fvrdd
|fS |j        dk    rdd|fS |j        t          j        k    rdn|j        t          j	        k    rdnd}t          d|j        |z   ¦  «        |_        dd	|fS |t           j        k    rj|j        t          j        k    r|j        s|j        sdd|fS t          j        |_        d„ |j        D ¦   «         |_        d„ |j        D ¦   «         |_        dd|fS dd|fS )NFÚINCOMPATIBLE_SLOT_FOR_WHETSTONEé   ÚQUALITY_ALREADY_MAX_20é   é   r.   TÚQUALITY_INCREASED_SUCCESSÚ"INCOMPATIBLE_SLOT_FOR_ARMOUR_SCRAPÚCANNOT_SCOUR_NORMAL_ITEMc                ó    — g | ]}|j         ¯	|‘ŒS r"   ©Úis_fractured©rY   Úms     r$   r[   z?ItemCraftingEngine._handle_quality_or_reset.<locals>.<listcomp>š   ó   € ÐHÐHÐH 1¸¼ÐH˜QÐHÐHÐHr#   c                ó    — g | ]}|j         ¯	|‘ŒS r"   r™   r›   s     r$   r[   z?ItemCraftingEngine._handle_quality_or_reset.<locals>.<listcomp>›   r�   r#   ÚSCOUR_SUCCESSÚUNKNOWN_QUALITY_OR_RESET)r   r0   r   Ú	WEAPON_1HÚ	WEAPON_2HÚqualityÚrarityr   ÚNORMALÚMAGICr?   r1   ÚBODY_ARMOURÚHELMETÚGLOVESÚBOOTSÚSHIELDr2   ÚprefixesÚsuffixes)rP   r~   r%   rR   Úincs        r$   Ú_handle_quality_or_resetz+ItemCraftingEngine._handle_quality_or_reset…   sß  € ØÕ)Ô<Ò<Ð<Ø�HÔ.µÔ0BÐCÐCÐCØÐ?ÀÐEÐEØŒ|˜rÒ!Ð!¨%Ð1IÈ4Ð*OÐ#OØ”{¥jÔ&7Ò7Ð7�!�!À4Ä;ÕR\ÔRbÒCbÐCb¸a¸aÐhiˆCÝ˜r 4¤<°#Ñ#5Ñ6Ô6ˆDŒLØÐ4°dÐ:Ð:àÕ)Ô=Ò=Ð=Ø�HÔ0µ(´/Å8Ä?ÕT\ÔTbÕdlÔdsÐtÐtÐtØÐBÀDÐHÐHØŒ|˜rÒ!Ð!¨%Ð1IÈ4Ð*OÐ#OØ”{¥jÔ&7Ò7Ð7�!�!À4Ä;ÕR\ÔRbÒCbÐCb¸a¸aÐhiˆCÝ˜r 4¤<°#Ñ#5Ñ6Ô6ˆDŒLØÐ4°dÐ:Ð:àÕ)Ô:Ò:Ð:ØŒ{�jÔ/Ò/Ð/¸¼Ð/È$Ì-Ð/ØÐ8¸$Ð>Ð>Ý$Ô+ˆDŒKØHÐH¨¬ÐHÑHÔHˆDŒMØHÐH¨¬ÐHÑHÔHˆDŒMØ˜¨$Ð.Ð.àÐ0°$Ð6Ð6r#   Úmodr   Úitem_lvlc           
     ó¾  ‡‡‡	‡
‡— d|j         v r!|j                              dd¦  «        d         ndŠ
d|j        v r |j                             d¦  «        d         n|j        Št	          ˆ
ˆfd„t
          D ¦   «         d¦  «        }|�r6|j                              dd¦  «        d         Š	ˆ	ˆˆfd„t
          D ¦   «         }|rþ| j                             |d„ |D ¦   «         d¬	¦  «        d         }t          | j         	                    |j
        |j        ¦  «        d¦  «        }|j
                             ¦   «         r(|j                             ¦   «         rt          |¦  «        }t          |j         › d
t          j        ¦   «         j        dd…         › �|j        |j        |j        ||j
        |j        |j        ¬¦  «        S |                      ‰|j        ‰¦  «        }|r|n|S )zBRerolls the tier of an existing affix within its canonical family.Ú_tr.   r   Nz (Tc              3  óŽ   •K  — | ]?}‰r|j                              ‰d z   ¦  «        s|j                             ‰¦  «        ¯;|V — Œ@dS )r³   N)rf   Ú
startswithrg   )rY   rZ   Úfamily_prefixÚtitles     €€r$   ú	<genexpr>z:ItemCraftingEngine._reroll_tier_for_mod.<locals>.<genexpr>¦   s}   øè è € ð oð o�1ØðoØ#$¤8×#6Ò#6°}ÀtÑ7KÑ#LÔ#LðoØQRÔQ[×QfÒQfÐglÑQmÔQmðoˆQð oð oð oð oð oð or#   c                ó†   •— g | ]=}|j                              d d¦  «        d         ‰k    ¯'‰|j        k    ¯2‰|j        v ¯;|‘Œ>S )r³   r.   r   )rf   ÚrsplitÚrequired_ilvlÚallowed_slots)rY   rZ   Úfamr±   rR   s     €€€r$   r[   z;ItemCraftingEngine._reroll_tier_for_mod.<locals>.<listcomp>¬   s^   ø€ ð ð ð ØØ”8—?’? 4¨Ñ+Ô+¨AÔ.°#Ò5Ð5¸(ÀaÄoÒ:UÐ:UÐZ^ÐbcÔbqÐZqÐZqð ØZqÐZqÐZqr#   c                ó   — g | ]	}|j         ‘Œ
S r"   r]   r_   s     r$   r[   z;ItemCraftingEngine._reroll_tier_for_mod.<locals>.<listcomp>±   s   € Ð@_Ð@_Ð@_ÈaÀÄÐ@_Ð@_Ð@_r#   r`   rc   rd   )rf   rg   rh   rX   ri   rj   rk   rš   )rf   rº   rg   ÚsplitÚnextr   rO   rp   r@   rq   rr   rs   rt   r'   r   ru   rv   rw   rS   rX   rš   r}   rh   )rP   rR   r°   r±   ÚmatchÚfamily_defsr{   r|   Úfallbackr½   r¶   r·   s    ` `     @@@r$   Ú_reroll_tier_for_modz'ItemCraftingEngine._reroll_tier_for_mod    s   øøøøø€ à9=ÀÄÐ9KÐ9K˜œ
×)Ò)¨$°Ñ2Ô2°1Ô5Ð5ÐQUˆØ05¸¼Ð0EÐ0E�”×"Ò" 5Ñ)Ô)¨!Ô,Ð,È3Ì<ˆåðoð oð oð oð oÕ3ð oñ oô oàñ
ô 
ˆð
 ñ 	Ø”,×%Ò% d¨AÑ.Ô.¨qÔ1ˆCðð ð ð ð ð Ý6ðñ ô ˆKð ð Øœ×*Ò*¨;Ð@_Ð@_ÐS^Ð@_Ñ@_Ô@_ÐcdÐ*ÑeÔeÐfgÔh�Ý˜DœI×-Ò-¨f¬n¸f¼nÑMÔMÈqÑQÔQ�Ø”>×,Ò,Ñ.Ô.ð #°6´>×3LÒ3LÑ3NÔ3Nð #Ý˜c™(œ(�CÝØ$œmÐDÐD­d¬j©l¬lÔ.>¸rÀ¸rÔ.BÐDÐDØ#œ_Ø#Ô.ØœØØ#œ^Ø#œ^Ø!$Ô!1ð	ñ 	ô 	ð 	ð ×#Ò# D¨#¬,¸ÑAÔAˆØ#Ð,ˆxˆx¨Ð,r#   r
   c                óü  — |t           j        k    �r|j        t          j        k    rdd|fS d„ |j        D ¦   «         |_        d„ |j        D ¦   «         |_        | j                             ddg¦  «        }t          |¦  «        D ]™}t          |j        ¦  «        dk    r)| j                             ¦   «         dk     rt          j        nt          j        }|                      |||¦  «        }|r1|t          j        k    r|j        n|j                             |¦  «         Œšd	d
|fS |t"          j        t           j        fv �rå|j        t          j        k    �rJt          j        |_        d„ |j        D ¦   «         |_        d„ |j        D ¦   «         |_        t+          d| j                             ddg¦  «        ¦  «        t          |j        |j        z   ¦  «        z
  }	t          |	¦  «        D ]±}t          |j        ¦  «        dk     rAt          |j        ¦  «        dk    s| j                             ¦   «         dk     rt          j        nt          j        }|                      |||¦  «        }|r1|t          j        k    r|j        n|j                             |¦  «         Œ²d	d|fS t-          |j        ¦  «        D ]+\  }
}|j        s|                      |||¦  «        |j        |
<   Œ,t-          |j        ¦  «        D ]+\  }
}|j        s|                      |||¦  «        |j        |
<   Œ,d	d|fS |t           j        k    rÇ|j        t          j        k    rdd|fS t          j        |_        t          |j        ¦  «        dk     r)| j                             ¦   «         dk     rt          j        nt          j        }|                      |||¦  «        }|r1|t          j        k    r|j        n|j                             |¦  «         d	d|fS dd|fS )NFÚREQUIRES_MAGIC_ITEMc                ó    — g | ]}|j         ¯	|‘ŒS r"   r™   r›   s     r$   r[   zBItemCraftingEngine._handle_magic_and_transmute.<locals>.<listcomp>Å   r�   r#   c                ó    — g | ]}|j         ¯	|‘ŒS r"   r™   r›   s     r$   r[   zBItemCraftingEngine._handle_magic_and_transmute.<locals>.<listcomp>Æ   r�   r#   r.   r”   r   ç      à?TÚALTERATION_SUCCESSc                ó    — g | ]}|j         ¯	|‘ŒS r"   r™   r›   s     r$   r[   zBItemCraftingEngine._handle_magic_and_transmute.<locals>.<listcomp>Ñ   ó   € Ð LÐ LÐ L q¸Q¼^Ð L Ð LÐ LÐ Lr#   c                ó    — g | ]}|j         ¯	|‘ŒS r"   r™   r›   s     r$   r[   zBItemCraftingEngine._handle_magic_and_transmute.<locals>.<listcomp>Ò   rÌ   r#   ÚTRANSMUTE_SUCCESSÚREROLL_TIERS_SUCCESSé   ÚREGAL_SUCCESSÚUNKNOWN_MAGIC_CRAFT)r   r3   r¤   r   r¦   r¬   r­   rO   ÚchoiceÚrangeÚlenrM   r   ÚPREFIXÚSUFFIXr}   Úappendr   r   r4   r¥   r>   Ú	enumeraterš   rÄ   r6   ÚRARE)rP   r~   r%   rR   r±   Úcountrc   Útrœ   ÚneededÚir°   s               r$   Ú_handle_magic_and_transmutez.ItemCraftingEngine._handle_magic_and_transmuteÂ   sû  € ØÕ)Ô6Ò6Ñ6ØŒ{�jÔ.Ò.Ð.°uÐ>SÐUYÐ7YÐ0YØHÐH¨¬ÐHÑHÔHˆDŒMØHÐH¨¬ÐHÑHÔHˆDŒMØ”I×$Ò$ a¨ VÑ,Ô,ˆEÝ˜5‘\”\ð \ð \�Ý),¨T¬]Ñ);Ô);¸qÒ)@Ð)@ÀTÄY×EUÒEUÑEWÔEWÐZ]ÒE]ÐE]•IÔ$Ð$ÕdmÔdt�Ø×$Ò$ T¨1¨hÑ7Ô7�ØÐ[¨­YÔ-=Ò(=Ð(=�t”}�}À4Ä=×XÒXÐYZÑ[Ô[Ð[øØÐ-¨tÐ3Ð3àÕ+Ô:Õ<NÔ<[Ð\Ð\Ñ\ØŒ{�jÔ/Ò/Ñ/Ý(Ô.�”Ø LÐ L¨D¬MÐ LÑ LÔ L�”Ø LÐ L¨D¬MÐ LÑ LÔ L�”Ý˜Q ¤	× 0Ò 0°!°Q°Ñ 8Ô 8Ñ9Ô9½CÀÄÐPTÔP]Ñ@]Ñ<^Ô<^Ñ^�Ý˜v™œð `ð `�AÝ,/°´Ñ,>Ô,>ÀÒ,BÐ,BÍÈDÌMÑHZÔHZÐ^_ÒH_ÐH_ÐcgÔcl×csÒcsÑcuÔcuÐx{Òc{Ðc{�	Ô(Ð(õ  CLô  CS�AØ×(Ò(¨¨q°(Ñ;Ô;�AØÐ_¨AµÔ1AÒ,AÐ,A˜4œ=˜=ÀtÄ}×\Ò\Ð]^Ñ_Ô_Ð_øØÐ0°$Ð6Ð6å# D¤MÑ2Ô2ð Vð V‘��3ØÔ'ð VØ'+×'@Ò'@ÀÀsÈHÑ'UÔ'U�D”M !Ñ$øÝ# D¤MÑ2Ô2ð Vð V‘��3ØÔ'ð VØ'+×'@Ò'@ÀÀsÈHÑ'UÔ'U�D”M !Ñ$øØÐ/°Ð5Ð5àÕ)Ô3Ò3Ð3ØŒ{�jÔ.Ò.Ð.°uÐ>SÐUYÐ7YÐ0YÝ$œ/ˆDŒKÝ$'¨¬Ñ$6Ô$6¸Ò$:Ð$:¸t¼y×?OÒ?OÑ?QÔ?QÐTWÒ?WÐ?W•	Ô Ð Õ]fÔ]mˆAØ× Ò   q¨(Ñ3Ô3ˆAØÐW A­Ô)9Ò$9Ð$9�4”=�=¸t¼}×TÒTÐUVÑWÔWÐWØ˜¨$Ð.Ð.àÐ+¨TÐ1Ð1r#   c                ó^  — |j         t          j        k    �rJt          j        |_         d„ |j        D ¦   «         |_        d„ |j        D ¦   «         |_        t          d| j                             ddg¦  «        ¦  «        t          |j        |j        z   ¦  «        z
  }t          |¦  «        D ]±}t          |j        ¦  «        dk     rAt          |j        ¦  «        dk    s| j                             ¦   «         dk     rt          j        nt          j        }|                      |||¦  «        }|r1|t          j        k    r|j        n|j                             |¦  «         Œ²dd|fS |j         t          j        k    rdd	|fS d
„ |j        D ¦   «         |_        d„ |j        D ¦   «         |_        | j                             dd¦  «        }t          d| j                             dt'          d|dz
  ¦  «        ¦  «        t          |j        ¦  «        z
  ¦  «        }	t          dt'          d|t          |j        ¦  «        z
  |	z
  ¦  «        t          |j        ¦  «        z
  ¦  «        }
t          |	¦  «        D ]W}|                      |t          j        |¦  «        }|r2t          |j        ¦  «        dk     r|j                             |¦  «         ŒXt          |
¦  «        D ]W}|                      |t          j        |¦  «        }|r2t          |j        ¦  «        dk     r|j                             |¦  «         ŒXdd|fS )Nc                ó    — g | ]}|j         ¯	|‘ŒS r"   r™   r›   s     r$   r[   z;ItemCraftingEngine._handle_chaos_reroll.<locals>.<listcomp>ï   r�   r#   c                ó    — g | ]}|j         ¯	|‘ŒS r"   r™   r›   s     r$   r[   z;ItemCraftingEngine._handle_chaos_reroll.<locals>.<listcomp>ð   r�   r#   r.   r”   rÉ   TrÎ   FÚREQUIRES_RARE_ITEMc                ó    — g | ]}|j         ¯	|‘ŒS r"   r™   r›   s     r$   r[   z;ItemCraftingEngine._handle_chaos_reroll.<locals>.<listcomp>ù   ó   € ÐDÐDÐD˜q°Q´^ÐD˜ÐDÐDÐDr#   c                ó    — g | ]}|j         ¯	|‘ŒS r"   r™   r›   s     r$   r[   z;ItemCraftingEngine._handle_chaos_reroll.<locals>.<listcomp>ú   rå   r#   rÐ   é   r   ÚCHAOS_REROLL_SUCCESS)r¤   r   r¥   r¦   r¬   r­   r>   rO   rÓ   rÕ   rÔ   rM   r   rÖ   r×   r}   rØ   rÚ   Úrandintr?   )rP   r~   rR   r±   rÝ   rc   rÜ   rœ   ÚtargetÚpref_neededÚsuff_neededs              r$   Ú_handle_chaos_rerollz'ItemCraftingEngine._handle_chaos_rerollì   sþ  € ØŒ;�*Ô+Ò+Ñ+Ý$Ô*ˆDŒKØHÐH¨¬ÐHÑHÔHˆDŒMØHÐH¨¬ÐHÑHÔHˆDŒMÝ˜˜DœI×,Ò,¨a°¨VÑ4Ô4Ñ5Ô5½¸D¼MÈDÌMÑ<YÑ8ZÔ8ZÑZˆFÝ˜6‘]”]ð \ð \�Ý(+¨D¬MÑ(:Ô(:¸QÒ(>Ð(>ÅCÈÌÑDVÔDVÐZ[ÒD[ÐD[Ð_cÔ_h×_oÒ_oÑ_qÔ_qÐtwÒ_wÐ_w•IÔ$Ð$õ  Hô  O�Ø×$Ò$ T¨1¨hÑ7Ô7�ØÐ[¨­YÔ-=Ò(=Ð(=�t”}�}À4Ä=×XÒXÐYZÑ[Ô[Ð[øØÐ,¨dÐ2Ð2àŒ;�*œ/Ò)Ð)°%Ð9MÈtÐ2SÐ+SØDÐD D¤MÐDÑDÔDˆŒØDÐD D¤MÐDÑDÔDˆŒØ”×"Ò" 1 aÑ(Ô(ˆÝ˜!˜TœY×.Ò.¨qµ#°a¸À!¹Ñ2DÔ2DÑEÔEÍÈDÌMÑHZÔHZÑZÑ[Ô[ˆÝ˜!�S  F­S°´Ñ-?Ô-?Ñ$?À+Ñ$MÑNÔNÕQTÐUYÔUbÑQcÔQcÑcÑdÔdˆÝ�{Ñ#Ô#ð 	Eð 	EˆAØ× Ò  ¥yÔ'7¸ÑBÔBˆAØÐD•S˜œÑ'Ô'¨!Ò+Ð+¨T¬]×-AÒ-AÀ!Ñ-DÔ-DÐ-DøÝ�{Ñ#Ô#ð 	Eð 	EˆAØ× Ò  ¥yÔ'7¸ÑBÔBˆAØÐD•S˜œÑ'Ô'¨!Ò+Ð+¨T¬]×-AÒ-AÀ!Ñ-DÔ-DÐ-DøØÐ+¨TÐ1Ð1r#   c                ó:  ‡— |t           j        t          j        fv r|                      |||¦  «        S |t           j        t          j        fv rà|j        t          j	        k    rdd|fS t          |j        ¦  «        dk     t          |j        ¦  «        dk     }}|s|sdd|fS |r+|r| j                             ¦   «         dk     rt          j        nt          j        }|                      |||¦  «        }|sdd|fS |t          j        k    r|j        n|j                             |¦  «         dd|fS |t           j        t          j        fv r—d	„ t-          |j        ¦  «        D ¦   «         d
„ t-          |j        ¦  «        D ¦   «         z   }	|	sdd|fS | j                             |	¦  «        \  }}
|t          j        k    r|j        n|j                             |
¦  «         dd|fS |t          j        k    �r)|j        t          j        t          j	        fvrdd|fS |j        |j        z   D ]ðŠ‰j        sç‰j        ‰j        }}|dk    rF|dk    r@t=          ˆfd„t>          D ¦   «         d ¦  «        }|r|j         |j!        }}||c‰_        ‰_        ||k    s|dk    r�tE          | j         #                    ||¦  «        d¦  «        }tI          |¦  «         %                    ¦   «         r0tI          |¦  «         %                    ¦   «         rtM          |¦  «        n|‰_'        Œñdd|fS dd|fS )NFrã   rÐ   ÚAFFIXES_FULL_MAX_6rÉ   ÚNO_VALID_AFFIX_FOR_SLOTTÚEXALT_SUCCESSc                ó>   — g | ]\  }}|j         °t          j        |f‘ŒS r"   )rš   r   rÖ   ©rY   rÞ   rœ   s      r$   r[   z=ItemCraftingEngine._handle_rare_and_chaos.<locals>.<listcomp>  ó-   € ÐiÐiÐi±$°!°QÐZ[ÔZhÐi�Ô)¨1Ð-ÐiÐiÐir#   c                ó>   — g | ]\  }}|j         °t          j        |f‘ŒS r"   )rš   r   r×   ró   s      r$   r[   z=ItemCraftingEngine._handle_rare_and_chaos.<locals>.<listcomp>  rô   r#   ÚITEM_HAS_NO_AFFIXESÚANNUL_SUCCESSÚREQUIRES_MAGIC_OR_RARE_ITEMg        c              3  ó|   •K  — | ]6}|j         ‰j         k    s |j        ‰j        k    ¯"|j        ‰j        k    ¯2|V — Œ7d S rL   )rg   rX   rS   rh   )rY   rZ   r°   s     €r$   r¸   z<ItemCraftingEngine._handle_rare_and_chaos.<locals>.<genexpr>#  s™   øè è € ð  &eð  &e¨AÐPQÔPZÐ^aÔ^jÒPjÐPjÐopÔouÐy|ô  zBò  pBð  pBð  GHô  GSð  WZô  Wcò  Gcð  Gc að  Gcð  Gcð  Gcð  Gcð  &eð  &er#   r.   ÚDIVINE_REROLL_SUCCESSÚUNKNOWN_RARE_CRAFT)(r   r   r   r7   rí   r   r8   r¤   r   rÚ   rÕ   r¬   r­   rO   rM   r   rÖ   r×   r}   rØ   r   r9   rÙ   rÓ   Úpopr:   r¦   rš   rj   rk   rÀ   r   rr   rs   r@   rq   Úfloatrt   r'   ri   )rP   r~   r%   rR   r±   Úcan_pÚcan_srÜ   rœ   ÚunlockedÚidxÚmin_vÚmax_vrÁ   r|   r°   s                  @r$   Ú_handle_rare_and_chaosz)ItemCraftingEngine._handle_rare_and_chaos  sj  ø€ ØÕ+Ô<Õ>PÔ>`ÐaÐaÐaØ×,Ò,¨T°4¸ÑBÔBÐBàÕ+Ô:Õ<NÔ<^Ð_Ð_Ð_ØŒ{�jœoÒ-Ð-°eÐ=QÐSWÐ6WÐ/WÝ˜tœ}Ñ-Ô-°Ò1µ3°t´}Ñ3EÔ3EÈÒ3I�5ˆEØð 9 ð 9ØÐ2°DÐ8Ð8Ø%*Ðm°EÐm¸T¼Y×=MÒ=MÑ=OÔ=OÐRUÒ=UÐ=U•	Ô Ð Õ]fÔ]mˆAØ× Ò   q¨(Ñ3Ô3ˆAØÐC˜UÐ$=¸tÐCÐCØ¥9Ô#3Ò3Ð3ˆTŒ]ˆ]¸¼×NÒNÈqÑQÔQÐQØ˜¨$Ð.Ð.àÕ+Ô:Õ<NÔ<`ÐaÐaÐaØiÐi½)ÀDÄMÑ:RÔ:RÐiÑiÔiØiÐi½)ÀDÄMÑ:RÔ:RÐiÑiÔiñjˆHàÐF EÐ+@À$Ð$FÐFØ”Y×%Ò% hÑ/Ô/‰FˆAˆsØ¥9Ô#3Ò3Ð3ˆTŒ]ˆ]¸¼×KÒKÈCÑPÔPÐPØ˜¨$Ð.Ð.àÕ)Ô>Ò>Ñ>ØŒ{¥:Ô#3µZ´_Ð"EÐEÐEÈeÐUrÐtxÐNxÐGxØ”} t¤}Ñ4ð qð q�ØÔ'ð qØ#&¤<°´˜5�EØ ’|�|¨°ª¨Ý $ð  &eð  &eð  &eð  &eÕ1Lð  &eñ  &eô  &eð  gkñ  !lô  !l˜Ø Ðx°´ÀÄ¨ %ÐlqÐsxÐOiÈsÌ|Ð]`Ô]iØ˜u’}�}¨°ª¨Ý# D¤I×$5Ò$5°e¸UÑ$CÔ$CÀQÑGÔG˜Ý05°e±´×0GÒ0GÑ0IÔ0IÐ$pÍeÐTYÉlÌl×NeÒNeÑNgÔNgÐ$p¥C¨¡H¤H HÐmp˜œ	øØÐ0°$Ð6Ð6àÐ*¨DÐ0Ð0r#   c           	     ó.  — |t           j        k    �rz| j                             ¦   «         }d|_        |dk     r>d|_        |j                             ¦   «          |j                             ¦   «          dd|fS |dk     r[|j	         
                    t          dt          j        ¦   «         j        d d…         › �dt          j        dd	¦  «        ¦  «         dd
|fS |dk     rªt"          j        |_        d„ |j        D ¦   «         |_        d„ |j        D ¦   «         |_        t)          | j                             dd¦  «        ¦  «        D ]?}|                      |t          j        d¦  «        }|r|j         
                    |¦  «         Œ@dd|fS dd|fS |t0          j        t           j        fv rl|j        t"          j        t"          j        fvrdd|fS t9          j        |¦  «        }dt          j        ¦   «         j        d d…         › �|_        d|_        dd|fS dd|fS )NTg      Ð?ÚPERMANENT_ANNIHILATIONrÉ   Úcorrupt_god_rd   uJ   [TÃ  Huyáº¿t Ä�á»™t Biáº¿n] +1 Cáº¥p ToÃ n Bá»™ Ma VÃµ & +4% Tráº§n KhÃ¡ngr   r/   ÚCORRUPTION_GODLY_MUTATIONg      è?c                ó    — g | ]}|j         ¯	|‘ŒS r"   r™   r›   s     r$   r[   zDItemCraftingEngine._handle_corruption_and_mirror.<locals>.<listcomp>:  rÌ   r#   c                ó    — g | ]}|j         ¯	|‘ŒS r"   r™   r›   s     r$   r[   zDItemCraftingEngine._handle_corruption_and_mirror.<locals>.<listcomp>;  rÌ   r#   r.   rÐ   é   ÚCORRUPTION_CHAOS_BRICKÚCORRUPTION_LOCKED_NO_CHANGEFÚCAN_ONLY_MIRROR_RARE_OR_MAGICÚ	mirrored_é   ÚMIRROR_SUCCESSÚUNKNOWN_SPECIAL_CRAFT) r   r;   rO   rM   Úis_corruptedÚis_destroyedr¬   Úclearr­   Ú	implicitsrØ   r   ru   rv   rw   r   Ú	CORRUPTEDr   rÚ   r¤   rÔ   ré   r}   rÖ   r   r   r<   r¦   ÚcopyÚdeepcopyÚ	item_uuidÚis_mirrored)rP   r~   r%   rR   Úrollrc   rœ   Úmirroreds           r$   Ú_handle_corruption_and_mirrorz0ItemCraftingEngine._handle_corruption_and_mirror,  sC  € ØÕ)Ô@Ò@Ñ@Ø”9×#Ò#Ñ%Ô%ˆDØ $ˆDÔØ�dŠ{ˆ{Ø$(�Ô!Ø”×#Ò#Ñ%Ô%Ð%Ø”×#Ò#Ñ%Ô%Ð%ØÐ5°tÐ;Ð;Ø�dŠ{ˆ{Ø”×%Ò%¥hÐ/T½d¼j¹l¼lÔ>NÈrÐPQÈrÔ>RÐ/TÐ/Tð  Wcõ  enô  exð  z{ð  }@ñ  'Aô  'Añ  Bô  Bð  BØÐ8¸$Ð>Ð>Ø�dŠ{ˆ{Ý(œo�”Ø LÐ L¨D¬MÐ LÑ LÔ L�”Ø LÐ L¨D¬MÐ LÑ LÔ L�”Ý˜tœy×0Ò0°°AÑ6Ô6Ñ7Ô7ð 2ð 2�AØ×(Ò(¨­yÔ/?ÀÑDÔD�AØÐ1˜$œ-×.Ò.¨qÑ1Ô1Ð1øØÐ5°tÐ;Ð;ØÐ6¸Ð<Ð<àÕ+ÔAÕCUÔCgÐhÐhÐhØŒ{¥:¤?µJÔ4DÐ"EÐEÐEÈeÐUtÐvzÐNzÐGzÝ”} TÑ*Ô*ˆHØ!C­T¬Z©\¬\Ô-=¸b¸q¸bÔ-AÐ!CÐ!CˆHÔØ#'ˆHÔ ØÐ)¨8Ð3Ð3àÐ-¨tÐ3Ð3r#   ú.Union[SpiritStoneCurrency, PrimalCurrencyType]c                ód  — |j         rdd|fS |j        rdd|fS |j        rdd|fS t          |dt          j        ¦  «        }t          |dd¦  «        }|t          j        k    �r"|j        t          j
        k    r±t          |j        ¦  «        t          |j        ¦  «        z   dk    rdd	|fS t          |j        ¦  «        d
k    rt          j        nt          j        }|                      |||¦  «        }|r1|t          j        k    r|j        n|j                             |¦  «         dd|fS |j        t          j        k    rBt          j        |_        d„ |j        D ¦   «         |_        d„ |j        D ¦   «         |_        dd|fS dd|fS |t          j        t          j        t          j        fv r|                      |||¦  «        S |t2          j        t          j        t          j        t          j        fv r|                      ||||¦  «        S |t2          j        t          j         t2          j!        t          j"        t2          j#        t          j$        t          j%        fv r|  &                    ||||¦  «        S |t          j'        t2          j(        t          j)        fv r|  *                    |||¦  «        S dd|fS )z:Unified entry point for both legacy and primal currencies.FÚCANNOT_MODIFY_DESTROYED_ITEMÚCANNOT_MODIFY_MIRRORED_ITEMÚCANNOT_MODIFY_CORRUPTED_ITEMrR   r&   éU   r”   ÚMAGIC_ITEM_AFFIXES_FULLr   TÚAUGMENT_SUCCESSc                ó    — g | ]}|j         ¯	|‘ŒS r"   r™   r›   s     r$   r[   z5ItemCraftingEngine.apply_currency.<locals>.<listcomp>b  rÌ   r#   c                ó    — g | ]}|j         ¯	|‘ŒS r"   r™   r›   s     r$   r[   z5ItemCraftingEngine.apply_currency.<locals>.<listcomp>c  rÌ   r#   rŸ   r—   ÚUNKNOWN_CURRENCY)+r  r  r  Úgetattrr   r¡   r   r5   r¤   r   r¦   rÕ   r¬   r­   r   rÖ   r×   r}   rØ   rÚ   r¥   r0   r1   r2   r¯   r   r   r4   r3   r6   rß   r   r7   r   r8   r   r9   r:   r  r;   r   r<   r  )rP   r~   r%   rR   r±   rÜ   rœ   s          r$   rˆ   z!ItemCraftingEngine.apply_currencyK  sà  € ð ÔÐP UÐ,JÈDÐ%PÐPØÔÐN EÐ+HÈ$Ð$NÐNØÔÐP UÐ,JÈDÐ%PÐPå�t˜V¥XÔ%7Ñ8Ô8ˆÝ˜4 ¨rÑ2Ô2ˆàÕ)Ô6Ò6Ñ6ØŒ{�jÔ.Ò.Ð.Ý�t”}Ñ%Ô%­¨D¬MÑ(:Ô(:Ñ:¸aÒ?Ð?Ø Ð";¸TÐAÐAÝ(+¨D¬MÑ(:Ô(:¸aÒ(?Ð(?•IÔ$Ð$ÅYÔEU�Ø×$Ò$ T¨1¨hÑ7Ô7�ØÐ[¨­YÔ-=Ò(=Ð(=�t”}�}À4Ä=×XÒXÐYZÑ[Ô[Ð[ØÐ.°Ð4Ð4Ø”¥
¤Ò/Ð/Ý(Ô/�”Ø LÐ L¨D¬MÐ LÑ LÔ L�”Ø LÐ L¨D¬MÐ LÑ LÔ L�”Ø˜_¨dÐ2Ð2ØÐ4°dÐ:Ð:àÕ*Ô=Õ?QÔ?eÕgyô  hKð  Lð  Lð  LØ×0Ò0°°xÀÑFÔFÐFàÕ+Ô:Õ<NÔ<[Õ]oÔ]|õ  Qô  [ð  \ð  \ð  \Ø×3Ò3°D¸(ÀDÈ(ÑSÔSÐSàÕ+Ô<Õ>PÔ>`Õbuô  cEÝ*Ô:Õ<OÔ<^Õ`rô  aEÝ*Ô?ðAð Að Að ×.Ò.¨t°X¸tÀXÑNÔNÐNàÕ*ÔAÕCVÔClõ  oAô  oSð  Tð  Tð  TØ×5Ò5°d¸HÀdÑKÔKÐKàÐ(¨$Ð.Ð.r#   Úmaterialc                ó
  — |j         s|j        s|j        rdd|fS |j        t          j        k    rdd|fS t          |dt          j        ¦  «        }|t          j
        k    �rI|t          j        t          j        t          j        t          j        fvrdd|fS d„ |j        D ¦   «         |_        t          |j        ¦  «        dk    r|j                             ¦   «          t#          d„ t$          D ¦   «         d	¦  «        }|r«| j                             t+          |j        ¦  «        t+          |j        ¦  «        ¦  «        }|j                             t3          d
t5          j        ¦   «         j        d	d…         › �|j        t<          j        d||j        |j        ¦  «        ¦  «         dd|fS nV|t          j         k    rFd„ |j        |j!        z   D ¦   «         }|sdd|fS | j         "                    |¦  «        }d|_#        dd|fS dd|fS )zHApplies pinnacle materials dropping from Juiced Maps and Endgame Bosses.FÚCANNOT_MODIFY_SEALED_ITEMrã   rR   Ú"INCOMPATIBLE_SLOT_FOR_FIRE_ESSENCEc                óF   — g | ]}|j                              d ¦  «        °|‘ŒS )Úpref_fire_flat)rf   rµ   )rY   Úps     r$   r[   z>ItemCraftingEngine.apply_pinnacle_material.<locals>.<listcomp>†  s.   € ÐcÐcÐc 1¸Q¼X×=PÒ=PÐQaÑ=bÔ=bÐc˜QÐcÐcÐcr#   rÐ   c              3  ó0   K  — | ]}|j         d k    ¯|V — ŒdS )Úpref_fire_flat_t1N)rf   r_   s     r$   r¸   z=ItemCraftingEngine.apply_pinnacle_material.<locals>.<genexpr>‰  s/   è è € ÐgÐg 1ÀqÄxÐSfÒGfÐGf˜QÐGfÐGfÐGfÐGfÐgÐgr#   NÚpref_fire_flat_t1_rd   r.   TÚFLAME_DEMON_ESSENCE_APPLIED_T1c                ó    — g | ]}|j         °	|‘ŒS r"   r™   r›   s     r$   r[   z>ItemCraftingEngine.apply_pinnacle_material.<locals>.<listcomp>�  s   € ÐZÐZÐZ È1Ì>ÐZ˜1ÐZÐZÐZr#   ÚNO_UNFRACTURED_AFFIXESÚ%BLACK_DRAGON_MARROW_FRACTURED_SUCCESSÚUNKNOWN_PINNACLE_MATERIAL)$r  r  r  r¤   r   rÚ   r*  r   r¡   r   ÚTINH_HUYET_VIEM_QUYr¢   ÚRINGÚAMULETr¬   rÕ   rü   rÀ   r   rO   ré   r'   rr   rs   rØ   r   ru   rv   rw   rg   r   rÖ   ÚCOT_TUY_HAC_LONGr­   rÓ   rš   )rP   r~   r+  rR   Úfire_defr|   ÚunfracturedÚ
chosen_mods           r$   Úapply_pinnacle_materialz*ItemCraftingEngine.apply_pinnacle_materialw  sC  € ð Ôð 	< Ô 0ð 	<°DÔ4Eð 	<ØÐ5°tÐ;Ð;ØŒ;�*œ/Ò)Ð)ØÐ.°Ð4Ð4å�t˜V¥XÔ%7Ñ8Ô8ˆØÕ)Ô=Ò=Ñ=Ø�HÔ.µÔ0BÅHÄMÕS[ÔSbÐcÐcÐcØÐBÀDÐHÐHØcÐc¨¬ÐcÑcÔcˆDŒMÝ�4”=Ñ!Ô! QÒ&Ð&Ø”×!Ò!Ñ#Ô#Ð#ÝÐgÐgÕ(CÐgÑgÔgÐimÑnÔnˆHØð DØ”i×'Ò'­¨HÔ,<Ñ(=Ô(=½sÀ8ÔCSÑ?TÔ?TÑUÔU�Ø”×$Ò$¥XÐ.YÅ4Ä:Á<Ä<ÔCSÐTVÐUVÐTVÔCWÐ.YÐ.YÐ[cÔ[lÕnwÔn~ð  ABð  DGð  IQô  IYð  [cô  [kñ  &lô  &lñ  mô  mð  mØÐ=¸tÐCÐCðDð
 Õ+Ô<Ò<Ð<ØZÐZ d¤m°d´mÑ&CÐZÑZÔZˆKØÐL uÐ.FÈÐ'LÐ LØœ×)Ò)¨+Ñ6Ô6ˆJØ&*ˆJÔ#ØÐ@À$ÐFÐFàÐ1°4Ð7Ð7r#   rf   ÚstrÚunlocked_quest_idsúSet[str]c                óŠ  — |j         s|j        s|j        rdd|fS |j        t          j        k    rdd|fS ddh}|                     |¦  «        sdd|fS t          |¦  «        }|sdd|fS t          |dt          j
        ¦  «        }||j        vrdd	|fS |j        t          j        k    r|j        n|j        }t#          |¦  «        d
k    rdd|fS t%          | j                             |j        |j        ¦  «        d¦  «        }|j                             ¦   «         r(|j                             ¦   «         rt1          |¦  «        }t3          |j        › dt7          j        ¦   «         j        dd…         › �|j        |j        |j        ||j        |j        d|j         |j!        |j"        ¬¦  «        }	| #                    |	¦  «         dd|fS )zLApplies an overpowered cursed trade-off affix at the Primal Boneforge Altar.Fr-  rã   Úquest_epic_01_phong_ma_co_tranÚ'quest_epic_04_van_gioi_than_ma_tranh_baÚ PREREQUISITE_QUEST_NOT_COMPLETEDÚINVALID_TRADEOFF_MOD_IDrR   ÚINCOMPATIBLE_SLOT_FOR_TRADEOFFrÐ   ÚAFFIX_SLOT_FULLr.   rc   Nrd   Tre   Ú BONEFORGE_TRADEOFF_CRAFT_SUCCESS)$r  r  r  r¤   r   rÚ   Úintersectionr   r*  r   r¡   r¼   rS   r   rÖ   r¬   r­   rÕ   r@   rO   rq   rr   rs   rt   r'   r   rf   ru   rv   rw   rg   rX   rm   rn   ro   rØ   )
rP   r~   rf   rC  Úallowed_questsÚtemplaterR   Útarget_listr|   Útradeoff_mods
             r$   Úapply_boneforge_tradeoff_craftz1ItemCraftingEngine.apply_boneforge_tradeoff_craft˜  sþ  € ð Ôð 	< Ô 0ð 	<°DÔ4Eð 	<ØÐ5°tÐ;Ð;ØŒ;�*œ/Ò)Ð)ØÐ.°Ð4Ð4à:Ð<eÐfˆØ!×.Ò.¨~Ñ>Ô>ð 	CØÐ<¸dÐBÐBå+¨FÑ3Ô3ˆØÐF Ð'@À$Ð FÐFÝ�t˜V¥XÔ%7Ñ8Ô8ˆØ�xÔ-Ð-Ð-°eÐ=]Ð_cÐ6cÐ/cà'/Ô':½iÔ>NÒ'NÐ'N�d”m�mÐTXÔTaˆÝˆ{ÑÔ˜qÒ Ð ¨Ð0AÀ4Ð)GÐ"Gå�D”I×%Ò% hÔ&6¸Ô8HÑIÔIÈ1ÑMÔMˆØÔ×&Ò&Ñ(Ô(ð 	¨XÔ-=×-HÒ-HÑ-JÔ-Jð 	Ý�c‘(”(ˆCåØ”oÐ>Ð>­¬
©¬Ô(8¸¸!¸Ô(<Ð>Ð>ØÔ&ØÔ(Ø”ØØÔ%ØÔ%ØØ"Ô0Ø!Ô.Ø"Ô0ð
ñ 
ô 
ˆð 	×Ò˜<Ñ(Ô(Ð(ØÐ7¸Ð=Ð=r#   rL   )rH   rI   r(   rJ   )
rR   r   rS   r   r&   r'   rT   rI   r(   rU   )r   )r~   r   r%   r   r   r'   r(   r   )r~   r   r%   r   rR   r   r(   rŽ   )rR   r   r°   r   r±   r'   r(   r   )
r~   r   r%   r
   rR   r   r±   r'   r(   rŽ   )r~   r   rR   r   r±   r'   r(   rŽ   )r~   r   r%   r
   rR   r   r(   rŽ   )r~   r   r%   r  r(   rŽ   )r~   r   r+  r   r(   rŽ   )r~   r   rf   rB  rC  rD  r(   rŽ   )r   r    r!   Ú__doc__rQ   r}   r�   r¯   rÄ   rß   rí   r  r  rˆ   rA  rR  r"   r#   r$   rG   rG   A   s)  € € € € € Ø/Ð/ð,ð ,ð ,ð ,ð ,ð *.ð!
ð !
ð !
ð !
ð !
ðN ð	
ð 
ð 
ð 
ð 
ð67ð 7ð 7ð 7ð6 -ð  -ð  -ð  -ðD(2ð (2ð (2ð (2ðT2ð 2ð 2ð 2ð4$1ð $1ð $1ð $1ðL4ð 4ð 4ð 4ð>*/ð */ð */ð */ðX8ð 8ð 8ð 8ðB*>ð *>ð *>ð *>ð *>ð *>r#   rG   )r%   r   r&   r'   r(   r'   )!rS  Ú
__future__r   r  rM   ru   Úenumr   Útypingr   r   r   r   r	   r
   Ú server.world.item_crafting_typesr   r   r   r   r   r   r   r   r   Úserver.world.item_affix_catalogr   r   r   r   r   rE   rG   r"   r#   r$   ú<module>rY     s¤  ððð ð #Ð "Ð "Ð "Ð "Ð "Ø €€€Ø €€€Ø €€€Ø Ð Ð Ð Ð Ð Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ðð ð ð ð ð ð ð ð ð ð ð ð4ð 4ð 4ð 4ð 4˜$ñ 4ô 4ð 4ð$ð $ð $ð $ð.A>ð A>ð A>ð A>ð A>ñ A>ô A>ð A>ð A>ð A>r#   