ó
    _š‘hãP ã                   óô   • S SK r S SKrS SKJrJr  S SKJr  S SKJr  S SK	J
r
  S SKJr  S SKJr  S SKJr  S S	KJr  S S
KJr  S SKJr  S SKJr  S SKJrJrJr  S SKJr   " S S\" SS5      5      r " S S5      r g)é    N)ÚdefaultdictÚ
namedtuple)ÚEnum)ÚTopologicalSorter)Úchain)Úsettings)Úmodels)Ú
operations)Ú	Migration)ÚAlterModelOptions)ÚMigrationOptimizer)ÚMigrationQuestioner)ÚCOMPILED_REGEX_TYPEÚRegexObjectÚresolve_relation)Úcached_propertyc                   óJ   • \ rS rSr " S S\5      r\S 5       r\S 5       rSr	g)ÚOperationDependencyé   c                   ó(   • \ rS rSrSrSrSrSrSrSr	g)	ÚOperationDependency.Typeé   r   é   é   é   é   © N)
Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__ÚCREATEÚREMOVEÚALTERÚREMOVE_ORDER_WRTÚALTER_FOO_TOGETHERÚ__static_attributes__r   ó    ÚeC:\Users\psant\Downloads\Noiseback\school\venv\Lib\site-packages\django/db/migrations/autodetector.pyÚTyper      s   † ØˆØˆØˆØÐØÓr(   r*   c                 ó6   • U R                   R                  5       $ ©N)Ú
model_nameÚlower©Úselfs    r)   Úmodel_name_lowerÚ$OperationDependency.model_name_lower!   ó   € à�‰×$Ñ$Ó&Ð&r(   c                 ó6   • U R                   R                  5       $ r,   )Ú
field_namer.   r/   s    r)   Úfield_name_lowerÚ$OperationDependency.field_name_lower%   r3   r(   r   N)
r   r   r    r!   r   r*   r   r1   r6   r'   r   r(   r)   r   r      s6   † ôˆtô ð ñ'ó ð'ð ñ'ó ó'r(   r   z$app_label model_name field_name typec                   ó€  • \ rS rSrSrS8S jrS9S jrS rS rS:S jr	S	 r
S
 r\S 5       rS8S jrS rS rS rS;S jrS rS rS rS rS rS rS rS rS rS rS rS rS rS r S r!S  r"S! r#S" r$S# r%S$ r&S% r'S& r(\S' 5       r)S( r*S) r+S* r,S+ r-S, r.S- r/S. r0S/ r1S0 r2S1 r3S2 r4S3 r5S8S4 jr6S5 r7\8S6 5       r9S7r:g)<ÚMigrationAutodetectoré*   aé  
Take a pair of ProjectStates and compare them to see what the first would
need doing to make it match the second (the second usually being the
project's current state).

Note that this naturally operates on entire projects at a time,
as it's likely that changes interact (for example, you can't
add a ForeignKey without having a migration to add the table it
depends on first). A user interface may offer single-app usage
if it wishes, with the caveat that it may not always be possible.
Nc                 ó¤   • Xl         X l        U=(       d
    [        5       U l        UR                   VVs1 s H  u  pEUiM	     snnU l        g s  snnf r,   )Ú
from_stateÚto_stater   Ú
questionerr	   Úexisting_apps)r0   r<   r=   r>   ÚappÚmodels         r)   Ú__init__ÚMigrationAutodetector.__init__7   s@   € Ø$ŒØ ŒØ$×=Ô(;Ó(=ˆŒØ4>×4EÒ4EÔFÒ4E¡j c›cÑ4EÒFˆÕùÓFs   ´Ac                 ó|   • U R                  X15      nU R                  XQU5      nU(       a  U R                  XR5      nU$ )z¬
Main entry point to produce a list of applicable changes.
Take a graph to base names on and an optional set of apps
to try and restrict to (restriction is not guaranteed)
)Ú_detect_changesÚarrange_for_graphÚ_trim_to_apps)r0   ÚgraphÚtrim_to_appsÚconvert_appsÚmigration_nameÚchangess         r)   rL   ÚMigrationAutodetector.changes=   s>   € ð ×&Ñ& |Ó;ˆØ×(Ñ(¨¸ÓHˆÞØ×(Ñ(¨Ó?ˆGØˆr(   c           
      óü  ^ • [        U[        5      (       a"  U Vs/ s H  nT R                  U5      PM     sn$ [        U[        5      (       a  [        U 4S jU 5       5      $ [        U[        5      (       a5  UR                  5        VVs0 s H  u  p2UT R                  U5      _M     snn$ [        U[        R                  5      (       aA  UR                  T R                  UR                  5      T R                  UR                  5      4$ [        U[        5      (       a  [        U5      $ [        U[        5      (       a  U$ [        US5      (       a‘  UR                  5       n[        U[         R"                  5      (       a  USS nUu  pVnUU Vs/ s H  nT R                  U5      PM     snUR                  5        VVs0 s H  u  p2UT R                  U5      _M     snn4$ U$ s  snf s  snnf s  snf s  snnf )z¨
Recursive deconstruction for a field and its arguments.
Used for full comparison for rename/alter; sometimes a single-level
deconstruction will not compare correctly.
c              3   óF   >#   • U  H  nTR                  U5      v •  M     g 7fr,   )Údeep_deconstruct)Ú.0Úvaluer0   s     €r)   Ú	<genexpr>Ú9MigrationAutodetector.deep_deconstruct.<locals>.<genexpr>R   s   øé € ÐGÂ3¸%˜×.Ñ.¨u×5Ð5Â3ùó   ƒ!Údeconstructr   N)Ú
isinstanceÚlistrP   ÚtupleÚdictÚitemsÚ	functoolsÚpartialÚfuncÚargsÚkeywordsr   r   ÚtypeÚhasattrrV   r	   ÚField)r0   ÚobjrR   ÚkeyÚdeconstructedÚpathr_   Úkwargss   `       r)   rP   Ú&MigrationAutodetector.deep_deconstructI   s±  ø€ ô �cœ4× Ñ Ù>AÓBºc°U�D×)Ñ)¨%Ö0¹cÑBÐBÜ˜œU×#Ñ#ÜÔGÁ3ÓGÓGÐGÜ˜œT×"Ñ"ØHKÏ	É	ÌÔTÊ¹*¸#�C˜×.Ñ.¨uÓ5Ò5ÉÒTÐTÜ˜œY×.Ñ.×/Ñ/à—‘Ø×%Ñ% c§h¡hÓ/Ø×%Ñ% c§l¡lÓ3ðð ô
 ˜Ô0×1Ñ1Ü˜sÓ#Ð#Ü˜œT×"Ñ"ð ˆJÜ�S˜-×(Ñ(ØŸO™OÓ-ˆMÜ˜#œvŸ|™|×,Ñ,à -¨a¨bÐ 1�Ø!.ÑˆD˜àÙ;?Ó@º4°%�×&Ñ& uÖ-¹4Ñ@ØEKÇ\Á\Ä^ÔTÂ^±z°s��d×+Ñ+¨EÓ2Ò2Á^ÒTðð ð ˆJùò; Cùó Uùò* AùÛTs   ›G(ÂG-ÆG3ÇG8
c                 ó  • / n[        UR                  5       5       Hh  u  p4U R                  U5      nUR                  (       a0  UR                  R                  (       a  US   R                  SS5        UR                  U5        Mj     U$ )z²
Return a definition of the fields that ignores field names and
what related fields actually relate to. Used for detecting renames (as
the related fields change during renames).
r   ÚtoN)Úsortedr[   rP   Úremote_fieldrA   ÚpopÚappend)r0   ÚfieldsÚ
fields_defÚnameÚfieldÚdeconstructions         r)   Úonly_relation_agnostic_fieldsÚ3MigrationAutodetector.only_relation_agnostic_fieldso   sr   € ð ˆ
Ü! &§,¡,£.Ö1‰KˆDØ!×2Ñ2°5Ó9ˆNØ×!×! e×&8Ñ&8×&>×&>Ø˜qÑ!×%Ñ% d¨DÔ1Ø×Ñ˜nÖ-ñ	 2ð
 Ðr(   c                 óÜ  • 0 U l         0 U l        0 U l        0 U l        [	        5       U l        [	        5       U l        [	        5       U l        [	        5       U l        [	        5       U l	        [	        5       U l
        U R                  R                  R                  5        H¼  u  u  p4nUR                  R                  SS5      (       d  U R                  R!                  X445        MG  X0R                  R"                  ;  d  Mb  UR                  R                  S5      (       a  U R                  R!                  X445        M   U R
                  R!                  X445        M¾     U R$                  R                  R                  5        HÊ  u  u  p4nUR                  R                  SS5      (       d  U R                  R!                  X445        MG  X0R                  R"                  ;  d  U(       d  Mi  X1;   d  Mp  UR                  R                  S5      (       a  U R                  R!                  X445        M®  U R                  R!                  X445        MÌ     U R                  R'                  5         U R$                  R'                  5         U R)                  5         U R+                  5         U R-                  5         U R/                  5         U R1                  5         U R3                  5         U R5                  5         U R7                  5         U R9                  5         U R;                  5         U R=                  5         U R?                  5         U RA                  5         U RC                  5         U RE                  5         U RG                  5         U RI                  5         U RK                  5         U RM                  5         U RO                  5         U RQ                  5         U RS                  5         U RU                  5         U RW                  5         U RY                  5         U R[                  5         U R]                  5         U R_                  5         U Ra                  U5        U Rc                  5         U Rd                  $ )a  
Return a dict of migration plans which will achieve the
change from from_state to to_state. The dict has app labels
as keys and a list of migrations as values.

The resulting migrations aren't specially named, but the names
do matter for dependencies inside the set.

convert_apps is the list of apps to convert to use migrations
(i.e. to make initial migrations for, in the usual case)

graph is an optional argument that, if provided, can help improve
dependency generation and avoid potential circular dependencies.
ÚmanagedTÚproxy)3Úgenerated_operationsÚaltered_indexesÚaltered_constraintsÚrenamed_fieldsÚsetÚold_model_keysÚold_proxy_keysÚold_unmanaged_keysÚnew_model_keysÚnew_proxy_keysÚnew_unmanaged_keysr<   r	   r[   ÚoptionsÚgetÚaddÚ	real_appsr=   Úresolve_fields_and_relationsÚgenerate_renamed_modelsÚ_prepare_field_listsÚ_generate_through_model_mapÚgenerate_deleted_modelsÚgenerate_created_modelsÚgenerate_deleted_proxiesÚgenerate_created_proxiesÚgenerate_altered_optionsÚgenerate_altered_managersÚ!generate_altered_db_table_commentÚcreate_renamed_fieldsÚcreate_altered_indexesÚcreate_altered_constraintsÚgenerate_removed_constraintsÚgenerate_removed_indexesÚgenerate_renamed_fieldsÚgenerate_renamed_indexesÚ(generate_removed_altered_unique_togetherÚgenerate_removed_fieldsÚgenerate_added_fieldsÚgenerate_altered_fieldsÚ&generate_altered_order_with_respect_toÚ generate_altered_unique_togetherÚgenerate_added_indexesÚgenerate_added_constraintsÚgenerate_altered_constraintsÚgenerate_altered_db_tableÚ_sort_migrationsÚ_build_migration_listÚ_optimize_migrationsÚ
migrations)r0   rJ   rH   Ú	app_labelr-   Úmodel_states         r)   rE   Ú%MigrationAutodetector._detect_changes}   sd  € ð& %'ˆÔ!Ø!ˆÔØ#%ˆÔ Ø ˆÔô "›eˆÔÜ!›eˆÔÜ"%£%ˆÔÜ!›eˆÔÜ!›eˆÔÜ"%£%ˆÔØ48·O±O×4JÑ4J×4PÑ4PÖ4RÑ0Ñ#ˆY [Ø×&Ñ&×*Ñ*¨9°d×;Ñ;Ø×'Ñ'×+Ñ+¨YÐ,CÖDØ§/¡/×";Ñ";Õ;Ø×&Ñ&×*Ñ*¨7×3Ñ3Ø×'Ñ'×+Ñ+¨YÐ,CÖDà×'Ñ'×+Ñ+¨YÐ,CÖDñ 5Sð 59·M±M×4HÑ4H×4NÑ4NÖ4PÑ0Ñ#ˆY [Ø×&Ñ&×*Ñ*¨9°d×;Ñ;Ø×'Ñ'×+Ñ+¨YÐ,CÖDØ§/¡/×";Ñ";Ó;ß� Õ!:à×&Ñ&×*Ñ*¨7×3Ñ3Ø×'Ñ'×+Ñ+¨YÐ,CÖDà×'Ñ'×+Ñ+¨YÐ,CÖDñ 5Qð 	�‰×4Ñ4Ô6Ø�‰×2Ñ2Ô4ð 	×$Ñ$Ô&ð 	×!Ñ!Ô#Ø×(Ñ(Ô*ð 	×$Ñ$Ô&Ø×$Ñ$Ô&Ø×%Ñ%Ô'Ø×%Ñ%Ô'Ø×%Ñ%Ô'Ø×&Ñ&Ô(Ø×.Ñ.Ô0ð 	×"Ñ"Ô$ð 	×#Ñ#Ô%Ø×'Ñ'Ô)à×)Ñ)Ô+Ø×%Ñ%Ô'à×$Ñ$Ô&Ø×%Ñ%Ô'à×5Ñ5Ô7à×$Ñ$Ô&Ø×"Ñ"Ô$Ø×$Ñ$Ô&Ø×3Ñ3Ô5Ø×-Ñ-Ô/Ø×#Ñ#Ô%Ø×'Ñ'Ô)Ø×)Ñ)Ô+Ø×&Ñ&Ô(à×ÑÔØ×"Ñ" 5Ô)Ø×!Ñ!Ô#à�‰Ðr(   c                 óp  • U R                   U R                  -  U l        U R                  U R                  -  U l        U R                  U R                  -  U l        0 U l	        U R                   VVVs1 s HP  u  pU R                  R                  XR                  R                  X4U5      4   R                    H  nXU4iM	     MR     snnnU l        U R                   VVVs1 s H5  u  pU R                   R                  X4   R                    H  nXU4iM	     M7     snnnU l        gs  snnnf s  snnnf )z¯
Prepare field lists and a list of the fields that used through models
in the old state so dependencies can be made from the through model
deletion to the field that uses it.
N)r   r‚   Úkept_model_keysr€   rƒ   Úkept_proxy_keysr�   r„   Úkept_unmanaged_keysÚthrough_usersr<   r	   Úrenamed_modelsr†   rp   Úold_field_keysr=   Únew_field_keys©r0   r©   r-   r5   s       r)   r‹   Ú*MigrationAutodetector._prepare_field_listsç   s*  € ð  $×2Ñ2°T×5HÑ5HÑHˆÔØ#×2Ñ2°T×5HÑ5HÑHˆÔØ#'×#:Ñ#:¸T×=TÑ=TÑ#TˆÔ ØˆÔð *.×)=Ò)=õ
â)=Ñ%�	Ø"Ÿo™o×4Ñ4Ø×.Ñ.×2Ñ2°IÐ3JÈJÓWÐWñç‰fó�
ð  JÓ/ññ 0Ù)=ó
ˆÔð *.×)=Ò)=õ
â)=Ñ%�	Ø"Ÿm™m×2Ñ2°9Ð3HÑI×PÕP�
ð  JÓ/áPñ 0Ù)=ó
ˆÕùô
ùô
s   Á2AD*Ã#<D1c                 óº  • [        U R                  5       HÂ  u  pU R                  R                  X4U5      nU R                  R
                  X4   nUR                  R                  5        Hh  u  pV[        US5      (       d  M  [        UR                  SS5      (       d  M6  [        UR                  R                  X5      nUUU4U R                  U'   Mj     MÄ     g)zThrough model map generation.rm   ÚthroughN)rl   r   r±   r†   r<   r	   rp   r[   rb   Úgetattrrm   r   r·   r°   )r0   r©   r-   Úold_model_nameÚold_model_stater5   rs   Úthrough_keys           r)   rŒ   Ú1MigrationAutodetector._generate_through_model_mapþ   sÏ   € ä%+¨D×,?Ñ,?Ö%@Ñ!ˆIØ!×0Ñ0×4Ñ4ØÐ'¨óˆNð #Ÿo™o×4Ñ4°YÐ5NÑOˆOØ%4×%;Ñ%;×%AÑ%AÖ%CÑ!�
Ü˜5 .×1Ó1´gØ×&Ñ&¨	°4÷7ó 7ô #3Ø×*Ñ*×2Ñ2°Ió#�Kð "Ø&Ø"ð7�D×&Ñ& {Ó3ó &Dò &Ar(   c                 óä   • U R                   S:w  a  U S4$ [        [        U R                  5      R	                  S5      u  p[        UUR                  5       U R                  U R                  5      S4$ )zX
Return the resolved dependency and a boolean denoting whether or not
it was swappable.
Ú__setting__FÚ.T)	r©   r¸   r   r-   Úsplitr   r.   r5   ra   )Ú
dependencyÚresolved_app_labelÚresolved_object_names      r)   Ú_resolve_dependencyÚ)MigrationAutodetector._resolve_dependency  sy   € ð ×Ñ =Ó0Ø˜uÐ$Ð$Ü3:Ü�j×+Ñ+ó4
ç
‰%�‹*ñ 	1Ðô  Ø"Ø$×*Ñ*Ó,Ø×%Ñ%Ø—‘ó	ð ð
ð 	
r(   c           
      óf  • 0 U l         [        S U R                  R                  5        5       5      nSnU(       Gav  [	        U R                  5       GHý  n/ n[        5       n[        U R                  U   5       GHæ  nSn[        5       n	UR                   GHŠ  n
U
nU R                  U
5      u  p¬U
R                  U:w  d  M+  U R                  R                  U
R                  / 5       H  nU R                  XÚ5      (       d  M  Sn  O   U(       d    GOU(       a)  U	R                  UR                  UR                  45        M¬  U
R                  U R                   ;   aD  U	R                  U
R                  U R                   U
R                     S   R                  45        GM
  U(       aw  U(       aP  UR                  U
R                  5      (       a0  U	R                  UR                  U
R                  5      S   5        GMh  U	R                  U
R                  S45        GMˆ  SnGM�     U(       a5  UR!                  U5        UR#                  U	5        U R                  U   S	 GMç    O   U(       d
  U(       d  GM$  U R                  U   (       a  U(       a   [%        S[&        4/ / S.5      nU" S	[)        U R                   R                  U/ 5      5      S
-   -  U5      n[        U5      Ul        X_l        X@R.                  ;  Ul        U R                   R3                  U/ 5      R!                  U5        SnGMß  XPR                  U   -   U R                  U'   GM      [        S U R                  R                  5        5       5      nUU:X  a"  U(       d  SnO[5        SU R                  -  5      eUnU(       a  GMu  gg)a  
Chop the lists of operations up into migrations with dependencies on
each other. Do this by going through an app's list of operations until
one is found that has an outgoing dependency that isn't in another
app's migration yet (hasn't been chopped off its list). Then chop off
the operations before it into a migration and move onto the next app.
If the loops completes without doing anything, there's a circular
dependency (which _should_ be impossible as the operations are
all split at this point so they can't depend and be depended on).
c              3   ó8   #   • U  H  n[        U5      v •  M     g 7fr,   ©Úlen©rQ   Úxs     r)   rS   Ú>MigrationAutodetector._build_migration_list.<locals>.<genexpr>3  s   é € ÐIÒ&H ”c˜!—f�fÒ&Hùó   ‚FTéÿÿÿÿr   Ú	__first__r   )r
   Údependencieszauto_%ir   c              3   ó8   #   • U  H  n[        U5      v •  M     g 7fr,   rÈ   rÊ   s     r)   rS   rÌ   ”  s   é € ÐQÒ.P¨œc !Ÿf˜fÒ.PùrÍ   z)Cannot resolve operation dependencies: %rN)r¨   Úsumrz   Úvaluesrl   r~   rX   Ú
_auto_depsrÄ   r©   r†   Úcheck_dependencyr‡   r-   rr   Ú
leaf_nodesro   Úupdatera   r   rÉ   rÐ   r
   r?   ÚinitialÚ
setdefaultÚ
ValueError)r0   rH   Únum_opsÚ	chop_moder©   ÚchoppedrÐ   Ú	operationÚdeps_satisfiedÚoperation_dependenciesÚdepÚoriginal_depÚis_swappable_depÚother_operationÚsubclassÚinstanceÚnew_num_opss                    r)   r¦   Ú+MigrationAutodetector._build_migration_list'  s@  € ð ˆŒÜÑI d×&?Ñ&?×&FÑ&FÔ&HÓIÓIˆØˆ	ßô $ D×$=Ñ$=×>�	Ø�Ü"›u�Ü!% d×&?Ñ&?À	Ñ&J×!K�IØ%)�NÜ-0«UÐ*Ø(×3Õ3˜ð
 (+˜Ø04×0HÑ0HÈÓ0MÑ-˜ØŸ=™=¨IÕ5ð 48×3LÑ3L×3PÑ3PØ #§¡¨rö4 ð $(×#8Ñ#8¸×#NÓ#NØ5: NÙ$)ñ4ö $2Ú %æ#3Ø$:×$>Ñ$>à,8×,BÑ,BØ,8×,CÑ,Cð)*ö%&ð &)§]¡]°d·o±oÓ%EØ$:×$>Ñ$>à,/¯M©MØ,0¯O©O¸C¿M¹MÑ,JÈ2Ñ,N×,SÑ,Sð)*÷%&ö (1ö ,1°U×5EÑ5EÀcÇmÁm×5TÑ5TØ,B×,FÑ,FØ05×0@Ñ0@ÀÇÁÓ0OÐPQÑ0R÷-.ð -C×,FÑ,FØ14·±ÀÐ0L÷-.ð :?«ñm  4ön &ØŸ™ yÔ1Ø$×+Ñ+Ð,BÔCØ ×5Ñ5°iÑ@ÀÓCáñ "LöB  §7¡7Ø×4Ñ4°Y×?Æ9Ü#'Ø'Ü&˜LØ+-¸rÑBó$˜ñ
 $,Ø%¬¨T¯_©_×-@Ñ-@ÀÈBÓ-OÓ)PÐSTÑ)TÑUØ%ó$˜ô 15°\Ó0B˜Ô-Ø.5Ô+Ø+4×<NÑ<NÑ+N˜Ô(ØŸ™×2Ñ2°9¸bÓA×HÑHÈÔRØ$)›	ð $×&?Ñ&?À	Ñ&JÑJð ×1Ñ1°)Ô<ñk ?ôp ÑQ¨d×.GÑ.G×.NÑ.NÔ.PÓQÓQˆKØ˜gÓ%Þ Ø $‘Iä$ØCØ×3Ñ3ñ4óð ð "ˆG÷Q ‹gr(   c                 ó¢  ^ ^• [        T R                  R                  5       5       H¦  u  p[        5       nU Hk  nUR	                  U5        UR
                   HG  mT R                  T5      S   mTR                  U:w  a  M)  UR                  " U/UU 4S jU 5       Q76   MI     Mm     [        UR                  5       5      T R                  U'   M¨     g)zc
Reorder to make things possible. Reordering may be needed so FKs work
nicely inside the same app.
r   c              3   óZ   >#   • U  H   nTR                  UT5      (       d  M  Uv •  M"     g 7fr,   )rÕ   )rQ   rË   rá   r0   s     €€r)   rS   Ú9MigrationAutodetector._sort_migrations.<locals>.<genexpr>®  s"   øé € Ð QªC q°4×3HÑ3HÈÈC×3P§¡ªCùs   ƒ+¢	+N)
rl   rz   r[   r   r‡   rÔ   rÄ   r©   rX   Ústatic_order)r0   r©   ÚopsÚtsÚoprá   s   `    @r)   r¥   Ú&MigrationAutodetector._sort_migrationsŸ  s¬   ù€ ô
 % T×%>Ñ%>×%DÑ%DÓ%FÖG‰NˆIÜ"Ó$ˆBÛ�Ø—‘�r”
ØŸ=œ=�Cð ×2Ñ2°3Ó7¸Ñ:�CØ—}‘}¨	Ó1Ù Ø—F’F˜2ÐRÕ Q©CÓ QÕRó )ñ ô 48¸¿¹Ó8IÓ3JˆD×%Ñ% iÓ0ò Hr(   c                 ó  • U R                   R                  5        HB  u  p[        X"SS  5       H+  u  p4UR                  R	                  XR
                  45        M-     MD     U R                   R                  5        H/  nU H&  n[        [        UR                  5      5      Ul        M(     M1     U R                   R                  5        H7  u  pU H,  n[        5       R                  UR                  U5      Ul        M.     M9     g )Nr   )r¨   r[   ÚziprÐ   ro   rr   rÓ   rX   r~   r   Úoptimizer
   )r0   r©   r¨   Úm1Úm2Ú	migrations         r)   r§   Ú*MigrationAutodetector._optimize_migrations±  sÎ   € à%)§_¡_×%:Ñ%:Ö%<Ñ!ˆIÜ˜j°Q°R¨.Ö9‘�Ø—‘×&Ñ&¨	·7±7Ð';Ö<ó :ñ &=ð
 Ÿ/™/×0Ñ0Ö2ˆJÛ'�	Ü)-¬c°)×2HÑ2HÓ.IÓ)J�	Ö&ó (ñ 3ð
 &*§_¡_×%:Ñ%:Ö%<Ñ!ˆIÛ'�	Ü'9Ó';×'DÑ'DØ×(Ñ(¨)ó(�	Ö$ó (ò &=r(   c                 óP  ^• TR                   cb  TR                  [        R                  R                  :X  a:  [        U[        R                  5      =(       a    UR                  TR                  :H  $ TR                   bé  TR                  [        R                  R                  :X  aÁ  [        U[        R                  5      =(       a?    UR                  TR                  :H  =(       a    [        U4S jUR                   5       5      =(       dZ    [        U[        R                  5      =(       a9    UR                  TR                  :H  =(       a    UR                  TR                  :H  $ TR                   b‚  TR                  [        R                  R                  :X  aZ  [        U[        R                  5      =(       a9    UR                  TR                  :H  =(       a    UR                  TR                  :H  $ TR                   cb  TR                  [        R                  R                  :X  a:  [        U[        R                   5      =(       a    UR                  TR                  :H  $ TR                   b‚  TR                  [        R                  R"                  :X  aZ  [        U[        R$                  5      =(       a9    UR                  TR                  :H  =(       a    UR                  TR                  :H  $ TR                   b™  TR                  [        R                  R&                  :X  aq  [        U[        R(                  5      =(       aP    UR                  TR                  :H  =(       a0    UR*                  =(       d    SR-                  5       TR                  :g  $ TR                   br  TR                  [        R                  R.                  :X  aJ  [        U[        R0                  [        R2                  45      =(       a    UR                  TR                  :H  $ [5        ST< 35      e)zV
Return True if the given operation depends on the given dependency,
False otherwise.
c              3   óF   >#   • U  H  u  pTR                   U:H  v •  M     g 7fr,   )r5   )rQ   rË   ÚyrÁ   s      €r)   rS   Ú9MigrationAutodetector.check_dependency.<locals>.<genexpr>Ù  s    øé € ÐPÒ?O±t°q˜
×-Ñ-°Ö2Ò?OùrU   Ú zCan't handle dependency )r5   ra   r   r*   r"   rW   r
   ÚCreateModelÚ
name_lowerr1   Úanyrp   ÚAddFieldr6   r#   ÚRemoveFieldÚDeleteModelr$   Ú
AlterFieldr%   ÚAlterOrderWithRespectToÚorder_with_respect_tor.   r&   ÚAlterUniqueTogetherÚAlterIndexTogetherrÚ   )r0   rÞ   rÁ   s     `r)   rÕ   Ú&MigrationAutodetector.check_dependencyÃ  sN  ø€ ð ×!Ñ!Ñ)Ø—‘Ô#6×#;Ñ#;×#BÑ#BÓBô ˜9¤j×&<Ñ&<Ó=÷ HØ×(Ñ(¨J×,GÑ,GÑGðð ×!Ñ!Ñ-Ø—‘Ô#6×#;Ñ#;×#BÑ#BÓBô ˜9¤j×&<Ñ&<Ó=÷ QØ×(Ñ(¨J×,GÑ,GÑG÷QäÔP¸y×?OÒ?OÓPÓP÷ô
 ˜9¤j×&9Ñ&9Ó:÷ HØ×.Ñ.°*×2MÑ2MÑM÷Hà×(Ñ(¨J×,GÑ,GÑGðð ×!Ñ!Ñ-Ø—‘Ô#6×#;Ñ#;×#BÑ#BÓBô ˜9¤j×&<Ñ&<Ó=÷ HØ×.Ñ.°*×2MÑ2MÑM÷Hà×(Ñ(¨J×,GÑ,GÑGðð ×!Ñ!Ñ)Ø—‘Ô#6×#;Ñ#;×#BÑ#BÓBô ˜9¤j×&<Ñ&<Ó=÷ HØ×(Ñ(¨J×,GÑ,GÑGðð ×!Ñ!Ñ-Ø—‘Ô#6×#;Ñ#;×#AÑ#AÓAô ˜9¤j×&;Ñ&;Ó<÷ HØ×.Ñ.°*×2MÑ2MÑM÷Hà×(Ñ(¨J×,GÑ,GÑGðð ×!Ñ!Ñ-Ø—‘Ô#6×#;Ñ#;×#LÑ#LÓLô ˜9¤j×&HÑ&HÓI÷ /Ø×(Ñ(¨J×,GÑ,GÑG÷/à×4Ñ4×:¸×AÑAÓCØ×.Ñ.ñ/ðð ×!Ñ!Ñ-Ø—‘Ô#6×#;Ñ#;×#NÑ#NÓNô ØÜ×3Ñ3´Z×5RÑ5RÐSó÷ Hð ×(Ñ(¨J×,GÑ,GÑGðõ ºZÐIÓJÐJr(   c                 óâ   • U=(       d    / Ul         U(       a-  U R                  R                  U/ 5      R                  SU5        g U R                  R                  U/ 5      R	                  U5        g )Nr   )rÔ   rz   rÙ   Úinsertro   )r0   r©   rÞ   rÐ   Ú	beginnings        r)   Úadd_operationÚ#MigrationAutodetector.add_operation  sX   € ð  ,×1¨rˆ	ÔÞØ×%Ñ%×0Ñ0°¸BÓ?×FÑFÀqÈ)ÕTà×%Ñ%×0Ñ0°¸BÓ?×FÑFÀyÕQr(   c                 óØ  •  U R                   R                  U   nUR                   Vs1 s H&  n[        U[        5      (       a  UOUR
                  iM(     nnUS   < SUS   < 3nUR                  R                  S5      (       d<  SU;   d6  SU;   d0  [        R                  R                  5       UR                  5       :X  a  SUS   -   SUS   -   4$  U$ s  snf ! [         a     U$ f = f)zd
Place potential swappable models first in lists of created models (only
real way to solve #22783).
r   r¿   r   Ú	swappableÚAbstractUserÚAbstractBaseUserÚ___)r=   r	   ÚbasesrW   Ústrr   r…   r†   r   ÚAUTH_USER_MODELr.   ÚLookupError)r0   Úitemrª   ÚbaseÚ
base_namesÚstring_versions         r)   Úswappable_first_keyÚ)MigrationAutodetector.swappable_first_key   sù   € ð
	ØŸ-™-×.Ñ.¨tÑ4ˆKð (×-Ò-óâ-�Dô # 4¬×-Ñ-‘°4·=±=Ò@Ù-ð ð ð )-¨Q¬°°a³Ð9ˆNà×#Ñ#×'Ñ'¨×4Ñ4Ø! ZÓ/Ø%¨Ó3Ü×+Ñ+×1Ñ1Ó3°~×7KÑ7KÓ7MÓMà  Q¡™¨°°a±©Ð9Ð9ð Nð
 ˆùòøô ó 	ØØˆð	ús#   ‚'C ©-CÁA<C ÃC Ã
C)Ã(C)c                 ó0  • 0 U l         0 U l        U R                  U R                  -
  n[	        U5       GHY  u  p#U R
                  R                  X#4   nU R                  UR                  5      nU R                  U R                  -
  nU GHþ  u  pxXr:X  d  M  U R                  R                  Xx4   n	U R                  U	R                  5      n
XZ:X  d  MI  U R                  R                  X”5      (       d  Mk  / n[        UR                  R                  5       5      U R
                  R                  X#4   R                  5        VVs/ s H'  nUR                  5         H  nUR                  PM     M)     snn-   nU HC  nUR                   (       d  M  UR#                  U R%                  UUUU R
                  5      5        ME     U R'                  U[(        R*                  " U	R,                  UR,                  S9US9  X€R                   X#4'   U	R.                  < SU	R0                  < 3nUR.                  < SUR0                  < 3U R                  U'   U R                  R3                  Xx45        U R                  R5                  X#45          GMW     GM\     gs  snnf )zœ
Find any renamed models, generate the operations for them, and remove
the old entry from the model lists. Must be run before other
model-level generation.
)Úold_nameÚnew_name©rÐ   r¿   N)r±   Úrenamed_models_relr‚   r   rl   r=   r	   ru   rp   r<   r>   Úask_rename_modelrX   rÓ   Ú	relationsrm   Úis_relationÚextendÚ!_get_dependencies_for_foreign_keyr  r
   ÚRenameModelrr   r©   rþ   Úremover‡   )r0   Úadded_modelsr©   r-   rª   Úmodel_fields_defÚremoved_modelsÚrem_app_labelÚrem_model_nameÚrem_model_stateÚrem_model_fields_defrÐ   r#  rs   rp   Úrenamed_models_rel_keys                   r)   rŠ   Ú-MigrationAutodetector.generate_renamed_models7  sˆ  € ð !ˆÔØ"$ˆÔØ×*Ñ*¨T×-@Ñ-@Ñ@ˆÜ%+¨L×%9Ñ!ˆIØŸ-™-×.Ñ.¨yÐ/DÑEˆKØ#×AÑAÀ+×BTÑBTÓUÐà!×0Ñ0°4×3FÑ3FÑFˆNÜ1?Ñ-�Ø Õ-Ø&*§o¡o×&<Ñ&<Ø%Ð5ñ'�Oð ,0×+MÑ+MØ'×.Ñ.ó,Ð(ð (Õ?ØŸ?™?×;Ñ;Ø+÷ó ð ,.˜LÜ%)¨+×*<Ñ*<×*CÑ*CÓ*EÓ%Fà15·±×1HÑ1HØ$-Ð$9ñ2"ç"(¡&£(ð2+ôJò2+ Ið .7×-=Ñ-=×-? Eð	 !&× 2Ô 2ñ .@ñ	 !3ñ2+òJñ &˜Fó *0 Ø#(×#4×#4Ñ#4Ø$0×$7Ñ$7Ø(,×(NÑ(NØ,5Ø,6Ø,1Ø,0¯M©Mó	)*ö%&ñ *0ð !×.Ñ.Ø )Ü *× 6Ò 6Ø-<×-AÑ-AØ-8×-=Ñ-=ñ!"ð .:ð /ñ ð JX×/Ñ/°	Ð0EÑFà /× 9Ô 9Ø /× :Ó :ð6Ð2ð %0×$9Ô$9Ø$/×$:Ó$:ð!"ð !×3Ñ3Ð4JÑKð !×/Ñ/×6Ñ6¸Ð7VÔWØ ×/Ñ/×3Ñ3°YÐ4KÔLÛ!ôi 2@ò &:ùó$Js   Å.Jc                 ó\  • U R                   U R                  -  nU R                  U-
  nU R                  U-
  n[	        [        X R                  SS9[        X0R                  SS95      nU GH´  u  pVU R                  R                  XV4   n0 nSn	UR                  R                  5        Hœ  u  p«UR                  (       d  M  UR                  R                  (       aG  UR                  (       a  UR                  R                  n	OUR                  R                  (       d  X¸U
'   [        UR                  SS5      (       d  M˜  X¸U
'   Mž     UR                   R#                  S5      nUR                   R#                  S5      nUR                   R#                  SS5      nUR                   R#                  SS5      n[%        XVS[$        R&                  R(                  5      /nUR*                   GHR  n[-        U[.        5      (       d  M  S	U;   d  M#  UR1                  S	S
5      u  nnUR3                  [%        UUS[$        R&                  R4                  5      5        U R6                  R                  R9                  UU45      nU R                  R                  R9                  UU45      nU(       d  MÄ  U(       d  MÍ  [;        UR                  5      R=                  UR                  5      R?                  UR                  5      nU H8  nUR3                  [%        UUU[$        R&                  R(                  5      5        M:     GMU     U	(       a@  UR3                  [%        / [A        X•U5      QSP[$        R&                  R4                  P76 5        U RC                  U[D        RF                  " URH                  UR                  R                  5        Vs/ s H  nUS   U;  d  M  UPM     snUR                   UR*                  URJ                  S9USS9  UR                   R9                  SS5      (       d  GMÄ  [        UR                  5       5       H�  u  nnU RM                  UUUU R                  5      nUR3                  [%        XVS[$        R&                  R4                  5      5        U RC                  U[D        RN                  " UUUS9[Q        [;        U5      5      S9  M‘     U(       am  U RC                  U[D        RR                  " UUS9[%        UUU[$        R&                  R4                  5      [%        XVS[$        R&                  R4                  5      /S9  [        U5       Vs/ s H(  n[%        XVU[$        R&                  R4                  5      PM*     nnUR3                  [%        XVS[$        R&                  R4                  5      5        U H'  nU RC                  U[D        RT                  " UUS9US9  M)     U H'  nU RC                  U[D        RV                  " UUS9US9  M)     U(       a$  U RC                  U[D        RX                  " UUS9US9  U R                  RZ                  nXV4U R\                  ;   d  GM  UXV4   R                  5        H—  u  nnU R                  R                  U   nUR                  5        Hd  u  n n!U RC                  UR^                  [D        R`                  " URH                  U U!S9[%        UUS[$        R&                  R4                  5      /S9  Mf     M™     GM·     gs  snf s  snf )a:  
Find all new models (both managed and unmanaged) and make create
operations for them as well as separate operations to create any
foreign key or M2M relationships (these are optimized later, if
possible).

Defer any model options that refer to collections of fields that might
be deferred (e.g. unique_together).
T)re   ÚreverseNr·   ÚindexesÚconstraintsÚunique_togetherr  r¿   r   r   ©rr   rp   r…   r  Úmanagers)rÐ   r  rx   ©r-   rr   rs   r   ©rr   r  ©r-   Úindex©r-   Ú
constraint©rr   r6  )1r   r�   r‚   r„   r   rl   r  r=   r	   rp   r[   rm   rA   Úprimary_keyÚparent_linkr¸   r…   rn   r   r*   r#   r  rW   r  rÀ   ro   r"   r<   r†   r~   Ú
differenceÚintersectionr   r  r
   rý   rr   r8  r&  r   rX   r  ÚAddIndexÚAddConstraintr  r#  r€   r©   r  )"r0   Úold_keysr)  Úadded_unmanaged_modelsÚall_added_modelsr©   r-   rª   Úrelated_fieldsÚprimary_key_relr5   rs   r4  r5  r6  r  rÐ   r  Úbase_app_labelÚ	base_nameÚold_base_model_stateÚnew_base_model_stateÚremoved_base_fieldsÚremoved_base_fieldÚdrr   Úrelated_dependenciesr<  r>  r#  Úrelated_model_keyÚrelated_model_stateÚrelated_field_nameÚrelated_fields"                                     r)   rŽ   Ú-MigrationAutodetector.generate_created_models{  sí  € ð ×&Ñ&¨×)@Ñ)@Ñ@ˆØ×*Ñ*¨XÑ5ˆØ!%×!8Ñ!8¸8Ñ!CÐÜ Ü�<×%=Ñ%=ÀtÑLÜÐ)×/GÑ/GÐQUÑVó
Ðô &6Ñ!ˆIØŸ-™-×.Ñ.¨yÐ/DÑEˆKàˆNØ"ˆOØ%0×%7Ñ%7×%=Ñ%=Ö%?Ñ!�
Ø×%×%Ñ%Ø×)Ñ)×/×/Ø ×,×,Ø.3×.@Ñ.@×.FÑ.F™OØ!&×!3Ñ!3×!?×!?Ø9>¨:Ñ6Ü˜u×1Ñ1°9¸d×CÓCØ5: zÓ2ñ &@ð "×)Ñ)×-Ñ-¨iÓ8ˆGØ%×-Ñ-×1Ñ1°-Ó@ˆKØ)×1Ñ1×5Ñ5Ð6GÈÓNˆOØ$/×$7Ñ$7×$;Ñ$;Ø'¨ó%Ð!ô
 $Ø¨4Ô1D×1IÑ1I×1PÑ1PóðˆLð $×)Õ)�Ü˜d¤C×(Ó(¨S°D­[Ø04·
±
¸3ÀÓ0BÑ-�N IØ ×'Ñ'Ü+Ø*Ø%Ø Ü/×4Ñ4×;Ñ;ó	ôð ,0¯?©?×+AÑ+A×+EÑ+EØ'¨Ð3ó,Ð(ð ,0¯=©=×+?Ñ+?×+CÑ+CØ'¨Ð3ó,Ð(÷ ,Ð+×0DÐ0DäÐ 4× ;Ñ ;Ó<ß'™ZØ 4× ;Ñ ;ó÷ *™\¨+×*<Ñ*<Ó=ð ,ó 3FÐ.Ø(×/Ñ/Ü 3Ø$2Ø$-Ø$6Ü$7×$<Ñ$<×$CÑ$Có	!"öô 3Fñ7 *öJ Ø×#Ñ#Ü'ð Ü)¨/ÀjÓQðàðô ,×0Ñ0×7Ñ7òôð ×ÑØÜ×&Ò&Ø$×)Ñ)ð "-×!3Ñ!3×!9Ñ!9Ô!;óâ!;˜AØ˜Q™4 ~Ñ5÷ Ù!;ñð
 (×/Ñ/Ø%×+Ñ+Ø(×1Ñ1ñ
ð *Øð ñ ð$ ×&Ñ&×*Ñ*¨9°d×;Ñ;Úô  & n×&:Ñ&:Ó&<Ö=‘��eØ#×EÑEØØØØ—M‘Mó	 �ð ×#Ñ#Ü'Ø!¨tÔ5H×5MÑ5M×5TÑ5Tóôð ×"Ñ"ØÜ×'Ò'Ø#-Ø!Ø#ñô
 "&¤c¨,Ó&7Ó!8ð #ó ñ  >ö0 %Ø×"Ñ"ØÜ×6Ò6Ø'Ø.Cñô
 ,Ø%Ø&Ø1Ü/×4Ñ4×;Ñ;ó	ô ,Ø%°4Ô9L×9QÑ9Q×9XÑ9Xóð
"ð #ñ ô, # >Ô2ó	$ò 3�Dô $Ø¨4Ô1D×1IÑ1I×1PÑ1Pöñ 3ð	 !ð $ð !×'Ñ'Ü#Ø¨4Ô1D×1IÑ1I×1PÑ1Póôó
 !�Ø×"Ñ"ØÜ×'Ò'Ø#-Ø#ñð "6ð #ó ñ !ó *�
Ø×"Ñ"ØÜ×,Ò,Ø#-Ø#-ñð "6ð #ó ñ *ö Ø×"Ñ"ØÜ×2Ò2Ø'Ø(7ñð "6ð #ñ ð Ÿ™×/Ñ/ˆIØÐ&¨$×*=Ñ*=Ö=Ø9BØÐ)ñ:ç‘%“'ò:Ñ5Ð% ~ð +/¯-©-×*>Ñ*>Ð?PÑ*QÐ'Ø=K×=QÑ=QÖ=SÑ9Ð*¨MØ×*Ñ*Ø/×9Ñ9Ü&×1Ò1Ø+>×+CÑ+CØ%7Ø&3ñô !4Ø$-Ø$.Ø$(Ü$7×$<Ñ$<×$CÑ$Có	!"ð*ð +ó ó >Tô	:òm &6ùò^ùòz$s   Ï	\$Ï\$Õ/\)c                 óº  • U R                   U R                  -
  n[        U5       GH2  u  p#U R                  R                  X#4   nUR
                  R                  S5      (       d   e[        X#S[        R                  R                  5      /nUR                   Hk  n[        U[        5      (       d  M  SU;   d  M"  UR                  SS5      u  pxUR                  [        UUS[        R                  R                  5      5        Mm     U R!                  U["        R$                  " UR&                  / UR
                  UR                  UR(                  S9US9  GM5     g)zÓ
Make CreateModel statements for proxy models. Use the same statements
as that way there's less code duplication, but for proxy models it's
safe to skip all the pointless field stuff and chuck out an operation.
ry   Nr¿   r   r7  r   )rƒ   r€   rl   r=   r	   r…   r†   r   r*   r#   r  rW   r  rÀ   ro   r"   r  r
   rý   rr   r8  )	r0   Úaddedr©   r-   rª   rÐ   r  rK  rL  s	            r)   r�   Ú.MigrationAutodetector.generate_created_proxiesX  s<  € ð ×#Ñ# d×&9Ñ&9Ñ9ˆÜ%+¨E§]Ñ!ˆIØŸ-™-×.Ñ.¨yÐ/DÑEˆKØ×&Ñ&×*Ñ*¨7×3Ñ3Ð3Ð3ô $Ø¨4Ô1D×1IÑ1I×1PÑ1PóðˆLð $×)Ô)�Ü˜d¤C×(Ó(¨S°D­[Ø04·
±
¸3ÀÓ0BÑ-�NØ ×'Ñ'Ü+Ø*Ø%Ø Ü/×4Ñ4×;Ñ;ó	öñ *ð ×ÑØÜ×&Ò&Ø$×)Ñ)ØØ'×/Ñ/Ø%×+Ñ+Ø(×1Ñ1ñð *ð ô ò- &3r(   c                 óV  • U R                   U R                  -  nU R                  U-
  nU R                  U-
  n[	        [        U5      [        U5      5      nU GHÍ  u  pVU R                  R                  XV4   n0 nUR                  R                  5        HY  u  pšU
R                  (       d  M  U
R                  R                  (       a  X¨U	'   [        U
R                  SS5      (       d  MU  X¨U	'   M[     UR                  R                  SS5      nU(       a%  U R                  U[         R"                  " USS95        [        U5       H(  nU R                  U[         R$                  " UUS95        M*     / nU R                  R&                  nXåU4   R                  5        HŸ  u  u  nnnUR                  5        H‚  u  pšUR)                  [+        UUU	[*        R,                  R.                  5      5        U
R0                  (       a  MM  UR)                  [+        UUU	[*        R,                  R2                  5      5        M„     M¡     [        U5       H7  nUR)                  [+        XVU[*        R,                  R.                  5      5        M9     U R4                  R7                  XWR8                  45      nU(       a4  UR)                  [+        / UQ[*        R,                  R.                  P76 5        U R                  U[         R:                  " UR<                  S9[?        [A        U5      5      S9  GMÐ     g)aN  
Find all deleted models (managed and unmanaged) and make delete
operations for them as well as separate operations to delete any
foreign key or M2M relationships (these are optimized later, if
possible).

Also bring forward removal of any model options that refer to
collections of fields - the inverse of generate_created_models().
r·   Nr6  r?  ©r-   rr   ©rr   r   )!r‚   r„   r   r�   r   rl   r<   r	   rp   r[   rm   rA   r¸   r…   rn   r  r
   r  r  r#  ro   r   r*   r#   Úmany_to_manyr$   r°   r†   rþ   r  rr   rX   r~   )r0   Únew_keysÚdeleted_modelsÚdeleted_unmanaged_modelsÚall_deleted_modelsr©   r-   rª   rI  r5   rs   r6  rr   rÐ   r#  Úrelated_object_app_labelÚobject_nameÚrelation_related_fieldsÚthrough_users                      r)   r�   Ú-MigrationAutodetector.generate_deleted_models‚  sæ  € ð ×&Ñ&¨×)@Ñ)@Ñ@ˆØ×,Ñ,¨xÑ7ˆØ#'×#:Ñ#:¸XÑ#EÐ Ü"Ü�>Ó"¤FÐ+CÓ$Dó
Ðô &8Ñ!ˆIØŸ/™/×0Ñ0°Ð1FÑGˆKàˆNØ%0×%7Ñ%7×%=Ñ%=Ö%?Ñ!�
Ø×%×%Ñ%Ø×)Ñ)×/×/Ø5: zÑ2Ü˜u×1Ñ1°9¸d×CÓCØ5: zÓ2ñ &@ð *×1Ñ1×5Ñ5Ð6GÈÓNˆOÞØ×"Ñ"ØÜ×2Ò2Ø'Ø(,ñôô ˜~Ö.�Ø×"Ñ"ØÜ×*Ò*Ø#-Ø!ñöñ /ð ˆLØŸ™×1Ñ1ˆIð +4¸zÐ4IÑ*J×*PÑ*PÖ*Rñ'ñ Ø(ØØ&Ø)@×)FÑ)FÖ)HÑ%�JØ ×'Ñ'Ü+Ø4Ø'Ø&Ü/×4Ñ4×;Ñ;ó	ôð !×-×-Ñ-Ø$×+Ñ+Ü/Ø 8Ø +Ø *Ü 3× 8Ñ 8× >Ñ >ó	öó *Iñ +Sô( ˜~Ö.�Ø×#Ñ#Ü'Ø!¨tÔ5H×5MÑ5M×5TÑ5Tóöñ /ð  ×-Ñ-×1Ñ1°9×>TÑ>TÐ2UÓVˆLÞØ×#Ñ#Ü'ÐW¨ÐWÔ7J×7OÑ7O×7VÑ7VÒWôð ×ÑØÜ×&Ò&Ø$×)Ñ)ñô "¤# lÓ"3Ó4ð ô òO &8r(   c                 ó2  • U R                   U R                  -
  n[        U5       Ho  u  p#U R                  R                  X#4   nUR
                  R                  S5      (       d   eU R                  U[        R                  " UR                  S95        Mq     g)z*Make DeleteModel options for proxy models.ry   r]  N)r€   rƒ   rl   r<   r	   r…   r†   r  r
   r  rr   )r0   Údeletedr©   r-   rª   s        r)   r�   Ú.MigrationAutodetector.generate_deleted_proxiesá  s…   € à×%Ñ%¨×(;Ñ(;Ñ;ˆÜ%+¨G¦_Ñ!ˆIØŸ/™/×0Ñ0°Ð1FÑGˆKØ×&Ñ&×*Ñ*¨7×3Ñ3Ð3Ð3Ø×ÑØÜ×&Ò&Ø$×)Ñ)ñöò &5r(   c                 óˆ  • / U l         U R                  R                  5       n[        U R                  U-
  5       GH  u  p#nU R
                  R                  X#4U5      nU R                  R                  X%4   nU R                  R                  X#4   nUR                  U5      nU R                  U5      n	[        XR                  -
  5       GHn  u  p«nX¢:X  d  M  X³:X  d  M  UR                  U5      nU R                  U5      nUR                  (       aP  UR                  R                  (       a5  SUS   ;   a,  US   S   nXðR                  ;   a  U R                  U   US   S'   UR                  U5        UR!                  5       S   nXé:X  d$  USS U	SS :X  d  MÏ  [#        US   US9U	S   :X  d  Må  U R$                  R'                  X<XH5      (       d  GM	  U R                   R)                  U
UUR*                  UUUUU45        UR-                  X«U45        UR/                  X#U45        UU R0                  X#U4'     GM     GM     g)zWork out renamed fields.rk   r   r   r   )Ú	db_columnN)Úrenamed_operationsr²   Úcopyrl   r³   r±   r†   r<   r	   r=   Ú	get_fieldrP   rm   rA   r!  Úset_attributes_from_nameÚget_attname_columnrZ   r>   Ú
ask_renamero   rl  r(  r‡   r}   )r0   r²   r©   r-   r5   r¹   rº   Únew_model_staters   Ú	field_decr,  r-  Úrem_field_nameÚ	old_fieldÚold_field_decÚ
old_rel_toÚold_db_columns                    r)   r”   Ú+MigrationAutodetector.create_renamed_fieldsî  sT  € à"$ˆÔØ×,Ñ,×1Ñ1Ó3ˆÜ17Ø×Ñ .Ñ0÷2
Ñ-ˆI :ð "×0Ñ0×4Ñ4ØÐ'¨óˆNð #Ÿo™o×4Ñ4°YÐ5NÑOˆOØ"Ÿm™m×2Ñ2°9Ð3HÑIˆOØ#×-Ñ-¨jÓ9ˆEà×-Ñ-¨eÓ4ˆIÜAGØ×!4Ñ!4Ñ4÷BÑ=�¨~ð !Õ-°.Õ2NØ /× 9Ñ 9¸.Ó I�IØ$(×$9Ñ$9¸)Ó$D�Mà×*×*Ø!×.Ñ.×4×4Ø  M°!Ñ$4Ó4à%2°1Ñ%5°dÑ%;˜
Ø%×)@Ñ)@Ó@Ø59×5LÑ5LÈZÑ5X˜M¨!Ñ,¨TÑ2Ø×6Ñ6°~ÔFØ$-×$@Ñ$@Ó$BÀ1Ñ$E�MØ$Ó1ð & a¨Ð*¨i¸¸!¨nÕ<Ü  ¨qÑ!1¸]ÑKØ$ Q™<õ(ð  Ÿ?™?×5Ñ5Ø&¸
÷ô ð !×3Ñ3×:Ñ:à$1Ø$2Ø$-×$7Ñ$7Ø$2Ø$-Ø$.Ø$)Ø$.ð	!"ôð +×1Ñ1Ø!.ÀÐ Oôð +×.Ñ.°	ÀzÐ/RÔSà .ð !×/Ñ/°	ÀzÐ0QÑRó "ô[Bò2
r(   c           
      ó’  • U R                    H·  u  nnnnnnnnX7R                  :w  a<  UR                  5       n	XIl        U R	                  U[
        R                  " UUU	S95        U R	                  U[
        R                  " UUUS95        U R                  R                  XU45        U R                  R                  XVU45        M¹     g)z Generate RenameField operations.r9  )r-   r  r  N)rm  rl  Úclonerr   r  r
   r  ÚRenameFieldr²   r(  r‡   )
r0   r,  r-  Úrem_db_columnru  r©   r-   rs   r5   Úaltered_fields
             r)   r™   Ú-MigrationAutodetector.generate_renamed_fields,  sÒ   € ð ×$Ô$ñ	
ØØØØØØØØð
 §¡Ó/Ø %§¡£�Ø%3Ô"Ø×"Ñ"ØÜ×)Ò)Ø#-Ø+Ø+ñôð ×ÑØÜ×&Ò&Ø)Ø+Ø'ñôð ×Ñ×&Ñ&¨À~Ð'VÔWØ×Ñ×#Ñ# Y¸JÐ$GÖHò1 %r(   c                 ó€   • [        U R                  U R                  -
  5       H  u  pnU R                  XU5        M     g)zMake AddField operations.N)rl   r³   r²   Ú_generate_added_fieldr´   s       r)   r�   Ú+MigrationAutodetector.generate_added_fieldsQ  s<   € ä17Ø×Ñ $×"5Ñ"5Ñ5ö2
Ñ-ˆI :ð ×&Ñ& y¸jÖIò2
r(   c           
      óº  • U R                   R                  X4   R                  U5      n[        XU[        R                  R
                  5      /nUR                  (       aH  UR                  R                  (       a-  UR                  U R                  UUUU R                   5      5        UR                  (       a   UR                  U R                  U5      5        [        R                  [        R                  [        R                  4n[        R                  [        R                   [        R"                  4nUR$                  =(       d—    UR'                  5       =(       d€    UR)                  5       =(       di    UR*                  =(       dV    UR,                  =(       a    UR.                  =(       d0    [1        XF5      =(       a    UR2                  =(       d    [1        XG5      nU(       dr  UR5                  5       n[1        XF5      (       a2  UR6                  (       a!  U R8                  R;                  X25      Ul        O U R8                  R?                  X25      Ul        UR@                  (       aJ  UR'                  5       (       a5  [C        UR<                  5      (       a  U R8                  RE                  X25        U RG                  U[H        RJ                  " UUUUS9US9  g )N©r-   rr   rs   Úpreserve_defaultr   )&r=   r	   ro  r   r*   r#   rm   rA   r%  r&  Ú	generatedÚ%_get_dependencies_for_generated_fieldÚ	DateFieldÚDateTimeFieldÚ	TimeFieldÚ	AutoFieldÚSmallAutoFieldÚBigAutoFieldÚnullÚhas_defaultÚhas_db_defaultr^  ÚblankÚempty_strings_allowedrW   Úauto_nowr|  Úauto_now_addr>   Úask_auto_now_add_additionÚdefaultÚask_not_null_additionÚuniqueÚcallableÚ$ask_unique_callable_default_additionr  r
   r   )	r0   r©   r-   r5   rs   rÐ   Útime_fieldsÚauto_fieldsr†  s	            r)   r‚  Ú+MigrationAutodetector._generate_added_fieldX  s/  € Ø—‘×$Ñ$ YÐ%:Ñ;×EÑEÀjÓQˆô  Ø zÔ3F×3KÑ3K×3RÑ3Róð
ˆð ×× %×"4Ñ"4×":×":Ø×ÑØ×6Ñ6ØØØØ—M‘Mó	ôð �?�?Ø×Ñ × JÑ JÈ5Ó QÔRô ×'Ñ'¬×)=Ñ)=¼v×?OÑ?OÐPˆÜ×'Ñ'¬×)>Ñ)>Ä×@SÑ@SÐTˆà�J‰J÷ 0Ø× Ñ Ó"÷0à×#Ñ#Ó%÷0ð ×!Ñ!÷0ð —‘×; × ;Ñ ;÷	0ô
 ˜5Ó.×A°5·>±>÷0ô ˜5Ó.ð 	ö  Ø—K‘K“MˆEÜ˜%×-Ñ-°%×2D×2DØ $§¡× IÑ IØó!�•ð !%§¡× EÑ EØó!�”ð �<�<˜E×-Ñ-×/Ñ/´H¸U¿]¹]×4KÑ4KØ�O‰O×@Ñ@ÀÔXØ×ÑØÜ×ÒØ%ØØØ!1ñ	ð &ð 	ò 		
r(   c                 ó€   • [        U R                  U R                  -
  5       H  u  pnU R                  XU5        M     g)zMake RemoveField operations.N)rl   r²   r³   Ú_generate_removed_fieldr´   s       r)   rœ   Ú-MigrationAutodetector.generate_removed_fields�  s<   € ä17Ø×Ñ $×"5Ñ"5Ñ5ö2
Ñ-ˆI :ð ×(Ñ(¨À
ÖKò2
r(   c                 óà   • U R                  U[        R                  " UUS9[        UUU[        R                  R
                  5      [        UUU[        R                  R                  5      /S9  g )Nr\  r   )r  r
   r  r   r*   r%   r&   r´   s       r)   r   Ú-MigrationAutodetector._generate_removed_field—  su   € Ø×ÑØÜ×"Ò"Ø%Øñô $ØØØÜ'×,Ñ,×=Ñ=ó	ô $ØØØÜ'×,Ñ,×?Ñ?ó	ðð 	ò 	
r(   c                 ó 	  • [        U R                  U R                  -  5       GH�  u  pnU R                  R	                  X4U5      nU R
                  R	                  XU4U5      nU R                  R                  X4   R                  U5      nU R                  R                  X4   R                  U5      n/ n[        US5      (       Gaõ  [        UR                  SS5      (       GaØ  [        UR                  R                  X5      n	X�R                  ;   a%  UR                  R                  UR                  l        [        UR                  SS5      n
U
(       a^  Xš4-   nX°R
                  ;   aJ  UR                  R                  UR                  l        UR                  R                  UR                  l        [        USS5      nU(       aÇ  X4n[!        U Vs/ s H"  nU R
                  R	                  XÞ4-   U5      PM$     sn5      Ul        [!        UR$                   Vs/ s H"  nU R
                  R	                  XŸ4-   U5      PM$     sn5      Ul        [        USS5      =n(       a*  [!        U5      Ul        [!        UR$                  5      Ul        UR'                  U R)                  UUUU R                  5      5        [        US5      (       ap  [        UR                  SS5      (       aT  [        UR                  R*                  X5      n	X�R                  ;   a%  UR                  R*                  UR                  l        U R-                  U5      nU R-                  U5      nUU:w  d  GMI  XS:X  d  GMQ  UR.                  =(       a    UR.                  nUR.                  (       + =(       a    UR.                  (       + nU(       d  U(       aÒ  SnUR0                  (       a”  UR0                  (       dƒ  UR3                  5       (       dn  UR5                  5       (       dY  UR.                  (       dH  UR7                  5       nU R8                  R;                  X25      nU[        R<                  La	  UUl        SnOUnU RA                  U[B        RD                  " UUUUS	9US
9  GMy  U RG                  XU5        U RI                  XU5        GM      gs  snf s  snf )zX
Make AlterField operations, or possibly RemovedField/AddField if alter
isn't possible.
rm   rA   Nr5   Úfrom_fieldsr·   TFr…  r   )%rl   r²   r³   r±   r†   r}   r<   r	   ro  r=   rb   r¸   rm   r   rA   r5   rY   r¥  Ú	to_fieldsr%  r&  r·   rP   r^  r�  r�  r‘  r|  r>   Úask_not_null_alterationÚNOT_PROVIDEDr—  r  r
   r  r   r‚  )r0   r©   r-   r5   r¹   Úold_field_namerv  Ú	new_fieldrÐ   Ú
rename_keyÚremote_field_nameÚto_field_rename_keyr¥  Úfrom_rename_keyÚ
from_fieldÚto_fieldÚold_from_fieldsrw  Únew_field_decÚboth_m2mÚneither_m2mr†  rs   Únew_defaults                           r)   rž   Ú-MigrationAutodetector.generate_altered_fields±  sb  € ô
 28Ø×Ñ $×"5Ñ"5Ñ5÷2
Ñ-ˆI :ð "×0Ñ0×4Ñ4ØÐ'¨óˆNð "×0Ñ0×4Ñ4Ø¨
Ð3°ZóˆNð Ÿ™×.Ñ.¨yÐ/HÑI×SÑSØóˆIð Ÿ™×,Ñ,¨YÐ-BÑC×MÑMØóˆIð ˆLô �y .×1Ò1´gØ×&Ñ&¨°÷7ò 7ô .Ø×*Ñ*×0Ñ0°)ó�
ð ×!4Ñ!4Ó4Ø3<×3IÑ3I×3OÑ3O�I×*Ñ*Ô0ä$+¨I×,BÑ,BÀLÐRVÓ$WÐ!Þ$Ø*4Ð7KÑ*KÐ'Ø*×.AÑ.AÓAð 8A×7MÑ7M×7SÑ7S˜	×.Ñ.Ô4à%×2Ñ2×=Ñ=ð "×.Ñ.Ô9ô & i°ÀÓE�ÞØ'0Ð&=�OÜ,1ñ
 /:ó	ò /: 
ð !×/Ñ/×3Ñ3Ø /°-Ñ ?Àöñ /:ñ	ó-�IÔ)ô +0ð -6×,?Ò,?óâ,? ð !×/Ñ/×3Ñ3°JÀÑ4LÈhÖWÙ,?ñó+�IÔ'ô +2°)¸]ÈDÓ*QÐQ�ÕQÜ05°oÓ0F˜	Ô-Ü.3°I×4GÑ4GÓ.H˜	Ô+Ø×#Ñ#Ø×:Ñ:Ø!Ø"Ø!ØŸ™ó	ôô �y .×1Ñ1´gØ×&Ñ&¨	°4÷7ñ 7ô .Ø×*Ñ*×2Ñ2°Ió�
ð ×!4Ñ!4Ó4Ø5>×5KÑ5K×5SÑ5S�I×*Ñ*Ô2Ø ×1Ñ1°)Ó<ˆMØ ×1Ñ1°)Ó<ˆMð  Ö-°.Ö2NØ$×1Ñ1×L°i×6LÑ6L�Ø"+×"8Ñ"8Ô8×WÀ×AWÑAWÔ=W�Þž{à'+Ð$à!ŸŸØ )§§Ø )× 5Ñ 5× 7Ñ 7Ø )× 8Ñ 8× :Ñ :Ø )× 6× 6à )§¡Ó 1˜Ø&*§o¡o×&MÑ&MØ&ó'˜ð '¬f×.AÑ.AÒAØ,7˜EœMØ/4Ð,øà )˜Ø×&Ñ&Ø!Ü"×-Ò-Ø'1Ø!+Ø"'Ø-=ñ	ð &2ð 'ô 	ð ×0Ñ0°È
ÔSØ×.Ñ.¨yÀj×Qòi2
ùòXùòs   Ç)S
È )S
c                 óT  • [         R                  R                  n[        [        5      U l        [        U R                  5       GHÌ  u  p#U R                  R                  X#4U5      nU R                  R                  X$4   nU R                  R                  X#4   nUR                  U   nUR                  U   nU V	s/ s H  o™U;  d  M
  U	PM     n
n	U V	s/ s H  o™U;  d  M
  U	PM     nn	/ n/ n/ nU
 Hš  nUR                  5       nUS   R                  S5      nU Hm  nUR                  5       nUS   R                  S5      nUU:X  d  M/  UU:w  d  M7  UR!                  UUS 45        UR!                  U5        UR!                  U5        Mo     Mœ     U R#                  [         R$                  R                  5       Hþ  u  nnnnnUU:w  d  UU:w  a  M  UR'                  U5      nU HÏ  n/ nU
 H_  nUR                  5       u  nnnU(       a  M   UR(                  [	        U5      :X  d  M;  [+        U5      SS1:X  d  MN  UR!                  U5        Ma     [-        U5      S:X  d  M{  US   n UR!                  U 5        UR!                  S U R.                  U45        U R
                  UU4   R!                  U5        MÑ     GM      U
 V	s/ s H  o™U;  d  M
  U	PM     n
n	U V	s/ s H  o™U;  d  M
  U	PM     nn	U R0                  R3                  X#4U
UUS.05        GMÏ     g s  sn	f s  sn	f s  sn	f s  sn	f )Nr   rr   rp   r   r   )Úadded_indexesÚremoved_indexesÚrenamed_indexes)r
   rD  Úoption_namer   rX   Úrenamed_index_together_valuesrl   r­   r±   r†   r<   r	   r=   r…   rV   rn   ro   Ú$_get_altered_foo_together_operationsr  rB  rp   r~   rÉ   rr   r{   r×   )!r0   r»  r©   r-   r¹   rº   rs  Úold_indexesÚnew_indexesÚidxr¸  r¹  rº  Úremove_from_addedÚremove_from_removedÚ	new_indexÚnew_index_decÚnew_index_nameÚ	old_indexÚold_index_decÚold_index_nameÚ	old_valueÚ	new_valueÚindex_together_app_labelÚindex_together_model_namerÐ   Úremoved_valuesÚremoved_index_togetherÚrenamed_index_together_indexesÚ_r_   rh   Úrenamed_indexs!                                    r)   r•   Ú,MigrationAutodetector.create_altered_indexes,  sH  € Ü ×)Ñ)×5Ñ5ˆÜ-8¼Ó->ˆÔ*ä%+¨D×,@Ñ,@×%AÑ!ˆIØ!×0Ñ0×4Ñ4ØÐ'¨óˆNð #Ÿo™o×4Ñ4°YÐ5NÑOˆOØ"Ÿm™m×2Ñ2°9Ð3HÑIˆOà)×1Ñ1°+Ñ>ˆKØ)×1Ñ1°+Ñ>ˆKÙ,7ÓRªK SÀkÑ;QŸS©KˆMÐRÙ.9ÓTªk sÈÑ=SŸs©kˆOÐTØ ˆOà "ÐØ"$ÐÛ*�	Ø )× 5Ñ 5Ó 7�Ø!.¨qÑ!1×!5Ñ!5°fÓ!=�Û!0�IØ$-×$9Ñ$9Ó$;�MØ%2°1Ñ%5×%9Ñ%9¸&Ó%A�Nð &¨Õ6Ø*¨nÕ<à'×.Ñ.°ÀÐPTÐ/UÔVØ)×0Ñ0°Ô;Ø+×2Ñ2°9Ö=ó "1ñ +ð* ×:Ñ:Ü×-Ñ-×9Ñ9öñØØØ(Ø)Øð
 Ð!9Ó9Ø!Ð%>Ó>áØ!*×!5Ñ!5°iÓ!@�Û.<Ð*Ø57Ð2Û%2˜	Ø*3×*?Ñ*?Ó*A™˜˜4 ÷ !% Ø )× 0Ñ 0´DÐ9OÓ4PÕ PÜ # F£°¸Ð/AÕ Aà:×AÑAÀ)ÖLñ &3ô Ð9Ó:¸aÕ?Ø(FÀqÑ(I˜Ø)×0Ñ0°Ô?Ø'×.Ñ.Ø! =×#5Ñ#5Ð7MÐNôð ×:Ñ:Ø4Ð6OÐOñç ™&Ð!7Ö8ô) /=ññB  -óÚ,˜Ð;LÑ0L—™}ð ð ñ  /óÚ.˜Ð=PÑ2P—™ð ð ð × Ñ ×'Ñ'àÐ+Ø)6Ø+:Ø+:ñ.ð÷òW &Bùò SùÚTùòtùòs0   Â=	LÃ
LÃ	LÃ#LË 	L ËL Ë	L%Ë&L%c           
      óÒ   • U R                   R                  5        HI  u  u  pnU R                  X5      nUS    H'  nU R                  U[        R
                  " UUS9US9  M)     MK     g )Nr¸  r;  r   )r{   r[   Ú_get_dependencies_for_modelr  r
   rD  )r0   r©   r-   Úalt_indexesrÐ   r<  s         r)   r¡   Ú,MigrationAutodetector.generate_added_indexes…  sr   € Ø48×4HÑ4H×4NÑ4NÖ4PÑ0Ñ#ˆY [Ø×;Ñ;¸IÓRˆLØ$ _Ô5�Ø×"Ñ"ØÜ×'Ò'Ø#-Ø#ñð ".ð #ó ó 6ò 5Qr(   c           
      óÆ   • U R                   R                  5        HC  u  u  pnUS    H2  nU R                  U[        R                  " UUR
                  S95        M4     ME     g )Nr¹  r\  )r{   r[   r  r
   ÚRemoveIndexrr   )r0   r©   r-   rÕ  r<  s        r)   r˜   Ú.MigrationAutodetector.generate_removed_indexes’  s]   € Ø48×4HÑ4H×4NÑ4NÖ4PÑ0Ñ#ˆY [Ø$Ð%6Ô7�Ø×"Ñ"ØÜ×*Ò*Ø#-Ø"ŸZ™Zñöó 8ò 5Qr(   c                 ó¼   • U R                   R                  5        H>  u  u  pnUS    H-  u  pEnU R                  U[        R                  " UUUUS95        M/     M@     g )Nrº  )r-   r  r  Ú
old_fields)r{   r[   r  r
   ÚRenameIndex)r0   r©   r-   rÕ  rÈ  rÅ  rÛ  s          r)   rš   Ú.MigrationAutodetector.generate_renamed_indexes�  sh   € Ø48×4HÑ4H×4NÑ4NÖ4PÑ0Ñ#ˆY [Ø>IØ!ô?Ñ:�°
ð ×"Ñ"ØÜ×*Ò*Ø#-Ø!/Ø!/Ø#-ñ	öó?ò 5Qr(   c                 óô   • UR                  5       u  p4nUR                  5       u  pgnUR                   H  n	UR                  U	S 5        M     UR                   H  n	UR                  U	S 5        M     X4U4XgU4:g  $ r,   )rV   Únon_db_attrsrn   )
r0   Úold_constraintÚnew_constraintÚold_pathÚold_argsÚ
old_kwargsÚnew_pathÚnew_argsÚ
new_kwargsÚattrs
             r)   Ú+_constraint_should_be_dropped_and_recreatedÚAMigrationAutodetector._constraint_should_be_dropped_and_recreated¬  s}   € ð *8×)CÑ)CÓ)EÑ&ˆ˜JØ)7×)CÑ)CÓ)EÑ&ˆ˜Jà"×/Ô/ˆDØ�N‰N˜4 Ö&ñ 0à"×/Ô/ˆDØ�N‰N˜4 Ö&ñ 0ð  JÐ/°HÈ
Ð3SÑSÐSr(   c                 ó”  • [         R                  R                  n[        U R                  5       GHŠ  u  p#U R
                  R                  X#4U5      nU R                  R                  X$4   nU R                  R                  X#4   nUR                  U   nUR                  U   n/ n	/ n
U H“  nU HŠ  nUR                  5       nUR                  5       nXÞ:w  d  M*  UR                  UR                  :X  d  MF  U R                  X¼5      (       a  M^  U	R                  U5        U
R                  UR                  5        MŒ     M•     U Vs/ s H  nX÷;  d  M
  UR                  U
;  d  M  UPM      nnU Vs/ s H  nXø;  d  M
  UR                  U
;  d  M  UPM      nnU R                  R!                  X#4UUU	S.05        GM�     g s  snf s  snf )N)Úadded_constraintsÚremoved_constraintsr|   )r
   rE  r»  rl   r­   r±   r†   r<   r	   r=   r…   rV   rr   ré  ro   r|   r×   )r0   r»  r©   r-   r¹   rº   rs  Úold_constraintsÚnew_constraintsÚalt_constraintsÚalt_constraints_nameÚold_cÚnew_cÚ	old_c_decÚ	new_c_decÚcÚadd_constraintsÚrem_constraintss                     r)   r–   Ú0MigrationAutodetector.create_altered_constraints¹  sÑ  € Ü ×.Ñ.×:Ñ:ˆÜ%+¨D×,@Ñ,@×%AÑ!ˆIØ!×0Ñ0×4Ñ4ØÐ'¨óˆNð #Ÿo™o×4Ñ4°YÐ5NÑOˆOØ"Ÿm™m×2Ñ2°9Ð3HÑIˆOà-×5Ñ5°kÑBˆOØ-×5Ñ5°kÑBˆOà ˆOØ#%Ð ã(�Û,�EØ %× 1Ñ 1Ó 3�IØ %× 1Ñ 1Ó 3�Ià!Õ.Ø!ŸJ™J¨%¯*©*Õ4Ø $× PÑ PØ!÷!ó !ð (×.Ñ.¨uÔ5Ø,×3Ñ3°E·J±JÖ?ó -ñ )ñ  )óâ(�AØÑ+ó à01·±Ð>RÑ0R÷ Ù(ð ð ñ )óâ(�AØÑ+ó à01·±Ð>RÑ0R÷ Ù(ð ð ð ×$Ñ$×+Ñ+àÐ+Ø-<Ø/>Ø/>ñ.ð÷òM &Bùò6ùò
s$   Å	G ÅG Å%G Å1	GÅ>GÆGc           
      óÔ   • U R                   R                  5        HJ  u  u  nnnU R                  X5      nUS    H'  nU R                  U[        R
                  " UUS9US9  M)     ML     g )Nrì  r=  r   )r|   r[   rÔ  r  r
   rE  ©r0   r©   r-   rð  rÐ   r>  s         r)   r¢   Ú0MigrationAutodetector.generate_added_constraintsë  s~   € ð #×6Ñ6×<Ñ<Ö>ññ 
ØØØØ×;Ñ;¸IÓRˆLØ-Ð.AÔB�
Ø×"Ñ"ØÜ×,Ò,Ø#-Ø#-ñð ".ð #ó ó Cò ?r(   c           
      óÈ   • U R                   R                  5        HD  u  u  nnnUS    H2  nU R                  U[        R                  " UUR
                  S95        M4     MF     g )Nrí  r\  )r|   r[   r  r
   ÚRemoveConstraintrr   )r0   r©   r-   rð  r>  s        r)   r—   Ú2MigrationAutodetector.generate_removed_constraintsû  sh   € ð #×6Ñ6×<Ñ<Ö>ññ 
ØØØØ-Ð.CÔD�
Ø×"Ñ"ØÜ×/Ò/Ø#-Ø'Ÿ_™_ñöó Eò ?r(   c                 óê   • U R                   R                  5        HU  u  u  nnnU R                  X5      nUS    H2  nU R                  U[        R
                  " UUR                  US9US9  M4     MW     g )Nr|   )r-   rr   r>  r   )r|   r[   rÔ  r  r
   ÚAlterConstraintrr   rû  s         r)   r£   Ú2MigrationAutodetector.generate_altered_constraints	  s…   € ð #×6Ñ6×<Ñ<Ö>ññ 
ØØØØ×;Ñ;¸IÓRˆLØ-Ð.CÔD�
Ø×"Ñ"ØÜ×.Ò.Ø#-Ø'Ÿ_™_Ø#-ñð
 ".ð #ó ó Eò ?r(   c                 ó¦  ^• S n[        TR                  S5      (       a  TR                  R                  nO]UR                  X4   nUR	                  5        H9  u  u  pgn[        U4S jUR                  5        5       5      (       d  M2  U SU 3n  O   [        TSS 5      n	U	b  Sn
U	nO[        UU U5      u  p«[        X«S [        R                  R                  5      /n[        TR                  SS 5      (       aX  [        TR                  R                  U U5      u  pÞUR                  [        UUS [        R                  R                  5      5        U$ )NrA   c              3   óB   >#   • U  H  nTUR                   :H  v •  M     g 7fr,   )rm   )rQ   rV  rs   s     €r)   rS   ÚJMigrationAutodetector._get_dependencies_for_foreign_key.<locals>.<genexpr>"  s#   øé € ð â)8˜ð ˜]×7Ñ7Ö7Ú)8ùs   ƒr¿   Úswappable_settingr¾   r·   )rb   rm   rA   r#  r[   rÿ   rÓ   r¸   r   r   r*   r"   r·   ro   )r©   r-   rs   Úproject_stateÚremote_field_modelr#  Úremote_app_labelÚremote_model_namerp   r  Údep_app_labelÚdep_object_namerÐ   Úthrough_app_labelÚthrough_object_names     `            r)   r&  Ú7MigrationAutodetector._get_dependencies_for_foreign_key  se  ø€ à!ÐÜ�5×%Ñ% w×/Ñ/Ø!&×!3Ñ!3×!9Ñ!9Ñà%×/Ñ/°	Ð0EÑFˆIØAJÇÁÖARÑ=Ñ5Ð!°vÜô à)/¯©¬ó÷ ó ð -=Ð+=¸QÐ?PÐ>QÐ)RÐ&Ùñ BSô $ EÐ+>ÀÓEÐØÑ(Ø)ˆMØ/‰Oä-=Ø"ØØó.Ñ*ˆMô  Ø°Ô6I×6NÑ6N×6UÑ6Uóð
ˆô
 �5×%Ñ% y°$×7Ñ7Ü5EØ×"Ñ"×*Ñ*ØØó6Ñ2Ðð
 ×ÑÜ#Ø%Ø'ØÜ'×,Ñ,×3Ñ3ó	ôð Ðr(   c           	      ó  • / n[         R                  " UR                  5      R                  n[	        U R
                  U R                  -
  5      nU H¬  u  pVnU R                  R                   XV4   R                  U5      nUR                  (       a  UR                  R                  (       d  UR                  U;   d  Mm  UR                  [        UUUR                  [        R                  R                  5      5        M®     U$ r,   )r	   ÚQÚ
expressionÚreferenced_base_fieldsrl   r³   r²   r=   ro  rm   rA   rr   ro   r   r*   r"   )	r0   rs   rÐ   r  Únewly_added_fieldsr©   r-   Úadded_field_nameÚadded_fields	            r)   rˆ  Ú;MigrationAutodetector._get_dependencies_for_generated_fieldH  sØ   € ØˆÜ!'§¢¨%×*:Ñ*:Ó!;×!RÑ!RÐÜ# D×$7Ñ$7¸$×:MÑ:MÑ$MÓNÐÛ7IÑ3ˆIÐ#3ØŸ-™-×.Ñ.¨yÐ/DÑE×OÑOØ óˆKð ×(×(¨[×-EÑ-E×-K×-KØ×!Ñ!Ð%;Õ;Ø×#Ñ#Ü'Ø!Ø"Ø#×(Ñ(Ü+×0Ñ0×7Ñ7ó	öñ 8Jð Ðr(   c           	      ó   • / nU R                   R                  X4   nUR                  R                  5        HC  nUR                  (       d  M  UR                  U R                  UUUU R                   5      5        ME     U$ )z3Return foreign key dependencies of the given model.)r=   r	   rp   rÓ   r$  r%  r&  )r0   r©   r-   rÐ   rª   rs   s         r)   rÔ  Ú1MigrationAutodetector._get_dependencies_for_model]  sw   € àˆØ—m‘m×*Ñ*¨9Ð+@ÑAˆØ ×'Ñ'×.Ñ.Ö0ˆEØ× × Ñ Ø×#Ñ#Ø×:Ñ:Ø!Ø"ØØŸ™ó	öñ 1ð Ðr(   c              #   ó@  ^ ^^#   • [        T R                  5       GHx  u  mmT R                  R                  TT4T5      nT R                  R
                  TU4   nT R                  R
                  TT4   nUR                  R                  U5      nU(       a(  U Vs1 s H  n[        UUU 4S jU 5       5      iM     snO	[        5       nUR                  R                  U5      nU(       a  [        U5      O	[        5       nXW:w  d  Mí  / nU Hz  n	U	 Hq  n
UR                  U
5      nUR                  (       d  M'  UR                  R                  (       d  MD  UR                  T R                  TTUT R                  5      5        Ms     M|     UUTTU4v •  GM{     g s  snf 7f)Nc              3   ób   >#   • U  H$  nTR                   R                  TTU4U5      v •  M&     g 7fr,   )r}   r†   )rQ   Únr©   r-   r0   s     €€€r)   rS   ÚMMigrationAutodetector._get_altered_foo_together_operations.<locals>.<genexpr>y  s5   øé € ð â!'˜Að ×+Ñ+×/Ñ/°¸JÈÐ0JÈA×NÐNÚ!'ùs   ƒ,/)rl   r­   r±   r†   r<   r	   r=   r…   rY   r~   ro  rm   rA   r%  r&  )r0   r»  r¹   rº   rs  rÉ  r™  rÊ  rÐ   Úfoo_togethersr5   rs   r©   r-   s   `           @@r)   r½  Ú:MigrationAutodetector._get_altered_foo_together_operationsm  s‘  úé € Ü%+¨D×,@Ñ,@×%AÑ!ˆI�zØ!×0Ñ0×4Ñ4Ø˜JÐ'¨óˆNð #Ÿo™o×4Ñ4°YÀÐ5NÑOˆOØ"Ÿm™m×2Ñ2°9¸jÐ3HÑIˆOð (×/Ñ/×3Ñ3°KÓ@ˆIö ñ #,óò
 #,˜ô	 ö á!'óö ñ #,òô “Uð ð (×/Ñ/×3Ñ3°KÓ@ˆIÞ*3œ˜Iœ¼»ˆIàÕ%Ø!�Û%.�MÛ&3˜
Ø /× 9Ñ 9¸*Ó E˜Ø ×-×-Ñ-°%×2DÑ2D×2J×2JÑ2JØ(×/Ñ/Ø $× FÑ FØ$-Ø$.Ø$)Ø$(§M¡Mó	!"öó '4ñ &/ð ØØØØ ðõ òM &Bùòùs&   …BFÂ!FÂ=AFÄ,FÄ8FÅA	Fc           
      ób  • U R                  UR                  5       H‹  u  nnnnnU[        R                  :X  a(  U Vs1 s H  nUU R                  XE4   ;  d  M  UiM     nnUR                  U5      nU(       d	  U(       d  Mf  U R                  UU" SSU0UR                  U0D6US9  M�     g s  snf ©Nrr   r   r   )r½  r»  r
   r  r¼  rC  r  )	r0   rÞ   rÉ  rÊ  r©   r-   rÐ   rR   Úremoval_values	            r)   Ú&_generate_removed_altered_foo_togetherÚ<MigrationAutodetector._generate_removed_altered_foo_togetherœ  sØ   € ð ×6Ñ6°y×7LÑ7LÖMñ
ØØØØØàœJ×9Ñ9Ó9ñ "+óâ!*˜ØØ×=Ñ=¸iÐ>SÑTñU÷ Ù!*ð ð ð &×2Ñ2°9Ó=ˆMÞ§	 	Ø×"Ñ"ØÙñ Ø'ðØ,5×,AÑ,AÀ=Ð+Qñð ".ð #ó ò Nùòs   ½B,ÁB,c                 óB   • U R                  [        R                  5        g r,   )r#  r
   r  r/   s    r)   r›   Ú>MigrationAutodetector.generate_removed_altered_unique_togetherµ  s   € Ø×3Ñ3´J×4RÑ4RÕSr(   c           
      óÎ   • U R                  UR                  5       HF  u  nnnnnUR                  U5      nX7:w  d  M!  U R                  UU" SSU0UR                  U0D6US9  MH     g r!  )r½  r»  rC  r  )r0   rÞ   rÉ  rÊ  r©   r-   rÐ   r"  s           r)   Ú_generate_altered_foo_togetherÚ4MigrationAutodetector._generate_altered_foo_together¸  s|   € ð ×6Ñ6°y×7LÑ7LÖMñ
ØØØØØà%×2Ñ2°9Ó=ˆMØÕ)Ø×"Ñ"ØÙÑT :ÐT°)×2GÑ2GÈÐ1SÑTØ!-ð #ó ò Nr(   c                 óB   • U R                  [        R                  5        g r,   )r(  r
   r  r/   s    r)   r    Ú6MigrationAutodetector.generate_altered_unique_togetherÈ  s   € Ø×+Ñ+¬J×,JÑ,JÕKr(   c           	      óò  • U R                   R                  U R                  U R                  5      n[	        U5       H¸  u  p#U R
                  R                  X#4U5      nU R                  R                  X$4   nU R                  R                  X#4   nUR                  R                  S5      nUR                  R                  S5      nXx:w  d  M“  U R                  U[        R                  " UUS95        Mº     g )NÚdb_table)rr   Útable)r­   Úunionr®   r¯   rl   r±   r†   r<   r	   r=   r…   r  r
   ÚAlterModelTable)	r0   Úmodels_to_checkr©   r-   r¹   rº   rs  Úold_db_table_nameÚnew_db_table_names	            r)   r¤   Ú/MigrationAutodetector.generate_altered_db_tableË  sä   € Ø×.Ñ.×4Ñ4Ø× Ñ  $×":Ñ":ó
ˆô &,¨OÖ%<Ñ!ˆIØ!×0Ñ0×4Ñ4ØÐ'¨óˆNð #Ÿo™o×4Ñ4°YÐ5NÑOˆOØ"Ÿm™m×2Ñ2°9Ð3HÑIˆOØ /× 7Ñ 7× ;Ñ ;¸JÓ GÐØ /× 7Ñ 7× ;Ñ ;¸JÓ GÐØ Õ5Ø×"Ñ"ØÜ×.Ò.Ø'Ø/ñöò &=r(   c           	      óò  • U R                   R                  U R                  U R                  5      n[	        U5       H¸  u  p#U R
                  R                  X#4U5      nU R                  R                  X$4   nU R                  R                  X#4   nUR                  R                  S5      nUR                  R                  S5      nXx:w  d  M“  U R                  U[        R                  " UUS95        Mº     g )NÚdb_table_comment)rr   Útable_comment)r­   r/  r®   r¯   rl   r±   r†   r<   r	   r=   r…   r  r
   ÚAlterModelTableComment)	r0   r1  r©   r-   r¹   rº   rs  Úold_db_table_commentÚnew_db_table_comments	            r)   r“   Ú7MigrationAutodetector.generate_altered_db_table_commentà  sæ   € Ø×.Ñ.×4Ñ4Ø× Ñ  $×":Ñ":ó
ˆô &,¨OÖ%<Ñ!ˆIØ!×0Ñ0×4Ñ4ØÐ'¨óˆNð #Ÿo™o×4Ñ4°YÐ5NÑOˆOØ"Ÿm™m×2Ñ2°9Ð3HÑIˆOà#2×#:Ñ#:×#>Ñ#>Ð?QÓ#RÐ Ø#2×#:Ñ#:×#>Ñ#>Ð?QÓ#RÐ Ø#Õ;Ø×"Ñ"ØÜ×5Ò5Ø'Ø&:ñöò &=r(   c           	      ó  • U R                   R                  U R                  U R                  U R                  U R
                  -  U R                  U R                  -  5      n[        U5       GH  u  p#U R                  R                  X#4U5      nU R                  R                  X$4   nU R                  R                  X#4   nUR                  R                  5        VVs0 s H  u  pxU[         R"                  ;   d  M  Xx_M     n	nnUR                  R                  5        VVs0 s H  u  pxU[         R"                  ;   d  M  Xx_M     n
nnXš:w  d  Mæ  U R%                  U[&        R                   " UU
S95        GM     gs  snnf s  snnf )z¤
Work out if any non-schema-affecting options have changed and make an
operation to represent them in state changes (in case Python code in
migrations needs them).
)rr   r…   N)r­   r/  r®   r¯   r�   r‚   r   r„   rl   r±   r†   r<   r	   r=   r…   r[   r   ÚALTER_OPTION_KEYSr  r
   )r0   r1  r©   r-   r¹   rº   rs  re   rR   Úold_optionsÚnew_optionss              r)   r‘   Ú.MigrationAutodetector.generate_altered_optionsö  sy  € ð ×.Ñ.×4Ñ4Ø× Ñ Ø×$Ñ$à×#Ñ# d×&9Ñ&9Ñ9à×Ñ $×"9Ñ"9Ñ9ó
ˆô &,¨O×%<Ñ!ˆIØ!×0Ñ0×4Ñ4ØÐ'¨óˆNð #Ÿo™o×4Ñ4°YÐ5NÑOˆOØ"Ÿm™m×2Ñ2°9Ð3HÑIˆOð #2×"9Ñ"9×"?Ñ"?Ô"Aôâ"A‘J�CØÔ+×=Ñ=Ñ=ó �’
Ù"Að ñ ð #2×"9Ñ"9×"?Ñ"?Ô"Aôâ"A‘J�CØÔ+×=Ñ=Ñ=ó �’
Ù"Að ñ ð
 Õ)Ø×"Ñ"ØÜ×0Ò0Ø'Ø +ñ÷ò# &=ùóùó
s   Ã E=Ã>E=Ä$FÅFc           
      óœ  • [        U R                  5       GH2  u  pU R                  R                  X4U5      nU R                  R
                  X4   nU R                  R
                  X4   nUR                  R                  S5      UR                  R                  S5      :w  d  M‘  / nUR                  R                  S5      (       aB  UR                  [        UUUR                  S   [        R                  R                  5      5        U R                  U[        R                  " UUR                  R                  S5      S9US9  GM5     g )Nr  r:  r   )rl   r­   r±   r†   r<   r	   r=   r…   ro   r   r*   r"   r  r
   r  )r0   r©   r-   r¹   rº   rs  rÐ   s          r)   rŸ   Ú<MigrationAutodetector.generate_altered_order_with_respect_to  s9  € Ü%+¨D×,@Ñ,@×%AÑ!ˆIØ!×0Ñ0×4Ñ4ØÐ'¨óˆNð #Ÿo™o×4Ñ4°YÐ5NÑOˆOØ"Ÿm™m×2Ñ2°9Ð3HÑIˆOØ×&Ñ&×*Ñ*Ø'óà ×(Ñ(×,Ñ,Ð-DÓEõFð
  "�Ø"×*Ñ*×.Ñ.Ð/F×GÑGØ ×'Ñ'Ü+Ø%Ø&Ø+×3Ñ3Ð4KÑLÜ/×4Ñ4×;Ñ;ó	ôð ×"Ñ"ØÜ×6Ò6Ø'Ø.=×.EÑ.E×.IÑ.IØ3ó/ñð ".ð #ô 	ò- &Br(   c           	      óx  • [        U R                  5       H¡  u  pU R                  R                  X4U5      nU R                  R
                  X4   nU R                  R
                  X4   nUR                  UR                  :w  d  Mr  U R                  U[        R                  " UUR                  S95        M£     g )N)rr   r8  )rl   r­   r±   r†   r<   r	   r=   r8  r  r
   ÚAlterModelManagers)r0   r©   r-   r¹   rº   rs  s         r)   r’   Ú/MigrationAutodetector.generate_altered_managers@  s¨   € Ü%+¨D×,@Ñ,@Ö%AÑ!ˆIØ!×0Ñ0×4Ñ4ØÐ'¨óˆNð #Ÿo™o×4Ñ4°YÐ5NÑOˆOØ"Ÿm™m×2Ñ2°9Ð3HÑIˆOØ×'Ñ'¨?×+CÑ+CÕCØ×"Ñ"ØÜ×1Ò1Ø'Ø!0×!9Ñ!9ñöò &Br(   c           	      óÀ  • UR                  5       n0 n[        UR                  5       5       GHX  u  pgU(       d  M  SnU H  n	U	S   U:X  d  M  U	n  O   Uc?  U R                  R	                  U5      (       d  U H  n
US4XVU
R
                  4'   M     X	 Mi  Uc  SnO U R                  US   5      =(       d    SS-   n[        U5       Hº  u  pÊUS:X  a"  U(       a  U
R                  R                  U5        SU-  /nU(       a  UR                  U5        OAUS:X  a  U(       d  UR                  S5        O"UR                  U
R                  5       SS 5        SR                  U5      nXn4XVU
R
                  4'   US-  nXêl        M¼     GM[     UR                  5        H<  nU H3  n
U
R                   Vs/ s H  oõR                  Xÿ5      PM     snU
l        M5     M>     U$ s  snf )	z¡
Take a result from changes() and a MigrationGraph, and fix the names
and dependencies of the changes so they extend the graph from the leaf
nodes for each app.
Nr   rÏ   r   z%04irØ   éd   rÐ  )rÖ   rX   r[   r>   Úask_initialrr   Úparse_numberÚ	enumeraterÐ   ro   Úsuggest_nameÚjoinrÓ   r†   )r0   rL   rH   rK   ÚleavesÚname_mapr©   r¨   Úapp_leafÚleafrö   Únext_numberÚiÚnew_name_partsr  rQ  s                   r)   rF   Ú'MigrationAutodetector.arrange_for_graphP  sÌ  € ð ×!Ñ!Ó#ˆØˆÜ%)¨'¯-©-«/×%:Ñ!ˆIÞÙàˆHÛ�Ø˜‘7˜iÕ'Ø#�HÙñ ð
 Ñ¨¯©×(CÑ(CÀI×(NÑ(Nã!+�IØ=FÈÐ<T�H¨¯©Ð8Ó9ñ ",àÐ&ÙàÑØ‘à#×0Ñ0°¸!±Ó=×BÀÀaÑG�ä )¨*Ö 5‘�Ø˜“6žhØ×*Ñ*×1Ñ1°(Ô;Ø"(¨;Ñ"6Ð!7�Þ!Ø"×)Ñ)¨.Õ9Ø˜!“V¦HØ"×)Ñ)¨)Õ4à"×)Ñ)¨)×*@Ñ*@Ó*BÀ4ÀCÐ*HÔIØŸ8™8 NÓ3�Ø9BÐ8M� Y§^¡^Ð4Ñ5Ø˜qÑ �Ø!)–ô !6ñ- &;ðJ "Ÿ.™.Ö*ˆJÛ'�	à09×0FÒ0Fó*Ú0F¨1—L‘L Ö&Ñ0Fñ*�	Ö&ó (ñ +ð
 ˆùò*s   Æ/Gc           	      ó°  • 0 nUR                  5        HL  u  pEU HA  nUR                   H.  u  pxUR                  U[        5       5      R	                  U5        M0     MC     MN     [        U5      n	Sn
X©:w  aA  [        U	5      n
U	R
                  " U	 Vs/ s H  oCR                  US5      PM     sn6   X©:w  a  MA  [        U5       H  nXI;  d  M
  X	 M     U$ s  snf )a	  
Take changes from arrange_for_graph() and set of app labels, and return
a modified set of changes which trims out as many migrations that are
not in app_labels as possible. Note that some other migrations may
still be present as they may be required dependencies.
Nr   )r[   rÐ   rÙ   r~   r‡   r×   r†   rX   )r0   rL   Ú
app_labelsÚapp_dependenciesr©   r¨   rö   r  rr   Úrequired_appsÚold_required_appss              r)   rG   Ú#MigrationAutodetector._trim_to_apps„  sÖ   € ð ÐØ%,§]¡]¦_Ñ!ˆIÛ'�	Ø+4×+AÔ+AÑ'�MØ$×/Ñ/°	¼3»5ÓA×EÑEÀmÖTó ,Bó (ñ &5ô ˜J›ˆà ÐØÓ0Ü # MÓ 2ÐØ× Ò ÙGTÓUÂ}¸)×&Ñ& y°"Ö5Á}ÑUñð  Õ0ô ˜gžˆIØÕ-ØÒ&ñ 'ð ˆùò Vs   ÂCc                 ó´   • [         R                  " SU5      =n(       a  [        US   5      $ [         R                  " SU5      nU(       a  [        US   5      $ g)uÃ   
Given a migration name, try to extract a number from the beginning of
it. For a squashed migration such as '0001_squashed_0004â€¦', return the
second number. If no number is found, return None.
z.*_squashed_(\d+)r   z^\d+r   N)ÚreÚsearchÚintÚmatch)Úclsrr   Úsquashed_matchr_  s       r)   rI  Ú"MigrationAutodetector.parse_numberŸ  sO   € ô  ŸYšYÐ';¸TÓBÐBˆ>ÕBÜ�~ aÑ(Ó)Ð)Ü—’˜ $Ó'ˆÞÜ�u˜Q‘x“=Ð Ør(   )r|   r{   r?   r<   rz   r­   r®   r¯   r¨   r³   r‚   rƒ   r„   r²   r   r€   r�   r>   r}   r¼  r±   r!  rm  r°   r=   r,   )NNN)NN)NF);r   r   r    r!   Ú__doc__rB   rL   rP   ru   rE   r‹   rŒ   ÚstaticmethodrÄ   r¦   r¥   r§   rÕ   r  r  rŠ   rŽ   r�   r�   r�   r”   r™   r�   r‚  rœ   r   rž   r•   r¡   r˜   rš   ré  r–   r¢   r—   r£   r&  rˆ  rÔ  r½  r#  r›   r(  r    r¤   r“   r‘   rŸ   r’   rF   rG   ÚclassmethodrI  r'   r   r(   r)   r9   r9   *   sY  † ñ
ôGô
ò$òLôhòT
ò.ð( ñ
ó ð
ô(v"òpKò$ò$RKôhRòò.B"òH[òz(òT]ò~ò<"ò|#IòJJò6
òpLò
ò4yRòvWòrò	òòTò0òdò òð" ñ+ó ð+òZò*ò -ò^ò2Tòò Lòò*ò,&òP òDô 2òhð6 ñó ór(   r9   )!r\   r\  Úcollectionsr   r   Úenumr   Úgraphlibr   Ú	itertoolsr   Údjango.confr   Ú	django.dbr	   Údjango.db.migrationsr
   Údjango.db.migrations.migrationr   Ú&django.db.migrations.operations.modelsr   Údjango.db.migrations.optimizerr   Údjango.db.migrations.questionerr   Údjango.db.migrations.utilsr   r   r   Údjango.utils.functionalr   r   r9   r   r(   r)   Ú<module>rs     s]   ðÛ Û 	ß /Ý Ý &Ý å  Ý Ý +Ý 4Ý DÝ =Ý ?÷ñ õ
 4ô'ÙÐ$Ð&LÓMô'÷&Aò Ar(   