§
    ø(g/¨  ã            	       ón  — d Z dZddlmZmZmZmZmZm	Z	m
Z
mZmZmZmZmZmZ ddlZddlZddlZddlZej        j        Zej        j        ZdZ ej!         "                    ej!         "                    ej!         "                    ej!         "                    e#¦  «        ¦  «        ¦  «        ¦  «        Z$ e%¦   «         Z&ddœd„Z'd„ Z( e%¦   «         Z)d	„ Z*d
„ Z+d„ Z,g Z-ddl.Z/ddddœd„Z0ddœd„Z1d„ Z2d„ Z3d„ Z4ddddddœd„Zd„ Z5ddœd„Z6d„ Z7d„ Z8d„ Z9d„ Z:d„ Z;d„ Z<ddd œd!„Z=ddd œd"„Z>ddd œd#„Z?ddd œd$„Z@dd%d&œd'„ZAd(„ ZBdd)œd*„ZCd+dd,œd-„Zd+dd,œd.„ZDd/„ ZEd0„ ZFdddd1œd2„ZGd3„ ZHd4„ ZIeIgZJd5„ ZKd6„ ZLd7„ ZMi d8d9“d:d;“d<d=“d>d?“d@d@“dAdB“dCdD“dEdF“dGdH“dIdJ“dKdL“dMdN“dOdP“dQdP“dRdS“dTdU“dVdW“dXdYdZd[d\d]œ¥ZNdad_„ZOd`„ ZPdS )bzl
This module contains utility functions specific to blender but
not associated with blenders internal data.
)%Úblend_pathsÚescape_identifierÚ	flip_nameÚunescape_identifierÚkeyconfig_initÚkeyconfig_setÚload_scriptsÚmodules_from_pathÚpreset_findÚpreset_pathsÚrefresh_script_pathsÚapp_template_pathsÚregister_classÚregister_cli_commandÚunregister_cli_commandÚregister_manual_mapÚunregister_manual_mapÚregister_preset_pathÚunregister_preset_pathÚregister_classes_factoryÚregister_submodule_factoryÚregister_toolÚmake_rna_pathsÚ
manual_mapÚmanual_language_codeÚpreviewsÚresource_pathÚscript_path_userÚextension_path_userÚscript_pathsÚsmpte_from_frameÚsmpte_from_secondsÚunitsÚunregister_classÚunregister_toolÚuser_resourceÚexecfileé    )Ú_utils_unitsr   r   r   r   r   r   r   r   r#   r   r%   Úsystem_resourceN)ÚstartupÚmodules)Úmodc                óˆ  — ddl }d}|j                             || ¦  «        }|€|j                             |¦  «        }t          j        }|                     |d¦  «        }|||<   	 |j                             |¦  «         |€| 	                    |d¦  «         n)|||<   n## |€| 	                    |d¦  «         n|||<   w xY w|S )a>  
    Execute a file path as a Python script.

    :arg filepath: Path of the script to execute.
    :type filepath: str
    :arg mod: Optional cached module, the result of a previous execution.
    :type mod: ModuleType | None
    :return: The module which can be passed back in as ``mod``.
    :rtype: ModuleType
    r'   NÚ__main__)
Úimportlib.utilÚutilÚspec_from_file_locationÚmodule_from_specÚ_sysr+   ÚgetÚloaderÚexec_moduleÚpop)Úfilepathr,   Ú	importlibÚmod_nameÚmod_specr+   Úmod_origs          úX/home/blender/git/blender-v430/install_release/4.3/scripts/modules/bpy/utils/__init__.pyr&   r&   Y   sì   € ð ÐÐÐØ€HØŒ~×5Ò5°hÀÑIÔI€HØ
€{ØŒn×-Ò-¨hÑ7Ô7ˆõ
 Œl€GØ�{Š{˜8 TÑ*Ô*€HØ€GˆHÑð)ØŒ×#Ò# CÑ(Ô(Ð(àÐØ�KŠK˜ $Ñ'Ô'Ð'Ð'à (ˆG�HÑÐøð ÐØ�KŠK˜ $Ñ'Ô'Ð'Ð'à (ˆG�HÑÐ(Ð(Ð(Ð(à€Js   Á&B Â B?c                 óÂ  — t           j        j        }| |v rd S d| v r$t          d                     | ¦  «        ¦  «         d S |rdd l}|                     ¦   «         }	 t          | ¦  «        }n #  dd l}|                     ¦   «          Y d S xY w|r8t          d                     | |                     ¦   «         |z
  ¦  «        ¦  «         | 	                    |j
        ¦  «         |S )Nú.z?Ignoring '{:s}', can't import files containing multiple periodsr'   ztime {:s} {:.4f})Ú_bpyÚappÚdebug_pythonÚprintÚformatÚtimeÚ
__import__Ú	tracebackÚ	print_excÚaddÚ__name__)Úmodule_nameÚloaded_modulesÚuse_timerE   Útr,   rG   s          r=   Ú_test_importrO   ~   sù   € ÝŒxÔ$€Hà�nÐ$Ð$ØˆtØ
ˆkÐÐÝÐO×VÒVÐWbÑcÔcÑdÔdÐdØˆtàð ØˆˆˆØ�IŠI‰KŒKˆðÝ˜Ñ%Ô%ˆˆøðØÐÐÐØ×ÒÑÔÐØˆtˆtøøøàð GÝÐ ×'Ò'¨°T·Y²Y±[´[À1±_ÑEÔEÑFÔFÐFà×Ò�s”|Ñ$Ô$Ð$Ø€Js   ÁA+ Á+Bc                 óš   — | t           j        vr<t           j                             d| ¦  «         t                               | ¦  «         d S d S ©Nr'   )r3   ÚpathÚinsertÚ_sys_path_ensure_pathsrI   ©rR   s    r=   Ú_sys_path_ensure_prependrV   £   sI   € Ø•4”9ÐÐÝŒ	×Ò˜˜DÑ!Ô!Ð!Ý×"Ò" 4Ñ(Ô(Ð(Ð(Ð(ð Ðó    c                 ó˜   — | t           j        vr;t           j                             | ¦  «         t                               | ¦  «         d S d S ©N)r3   rR   ÚappendrT   rI   rU   s    r=   Ú_sys_path_ensure_appendr[   ©   sG   € Ø•4”9ÐÐÝŒ	×Ò˜ÑÔÐÝ×"Ò" 4Ñ(Ô(Ð(Ð(Ð(ð ÐrW   c                 ó¢   — g }t           j                             | ¦  «        D ],\  }}t          ||¦  «        }|r|                     |¦  «         Œ-|S )ac  
    Load all modules in a path and return them as a list.

    :arg path: this path is scanned for scripts and packages.
    :type path: str
    :arg loaded_modules: already loaded module names, files matching these
       names will be ignored.
    :type loaded_modules: set[ModuleType]
    :return: all loaded modules.
    :rtype: list[ModuleType]
    )r@   rR   Úmodule_namesrO   rZ   )rR   rL   r+   r:   Ú	_mod_pathr,   s         r=   r	   r	   ¯   s\   € ð €Gå#œy×5Ò5°dÑ;Ô;ð  ð  Ñˆ�)Ý˜8 ^Ñ4Ô4ˆØð 	 Ø�NŠN˜3ÑÔÐøà€NrW   FT)Úreload_scriptsÚrefresh_scriptsÚ
extensionsc                 óB  ‡ ‡‡‡‡— t           j        j        x}}t           }|rddl}|                     ¦   «         }t          ¦   «         }‰rt          j                             ¦   «         Š‰ r-d„ t          j
        D ¦   «         D ]}	t          j        |	¦  «         Œd„ Šd„ }
d„ Šˆˆˆˆ ˆfd„}‰ rãd„ t          t          j        j        t          t           ¦  «        ¦  «        D ¦   «         }t#          |¦  «        t#          t           ¦  «        k    rt%          d	d
„ t           D ¦   «         ¦  «         t                                ¦   «          |D ]} |
|¦  «         Œ|D ]} ‰|¦  «         Œ~t           j        j        j                             d¬¦  «         ddlm}  |¦   «         5  t5          |¬¦  «        D ]~}t6          D ]t}t8          j                             ||¦  «        }t8          j                             |¦  «        r3tA          |¦  «         |dk    rtC          ||¦  «        D ]} ||¦  «         ŒŒuŒ	 ddd¦  «         n# 1 swxY w Y   ‰ r(t           j        j        j                             ¦   «          |rtE          ‰ ¬¦  «         ‰ r[t           j        j         #                    ¦   «          ddl$}t%          d %                    | &                    ¦   «         ¦  «        ¦  «         |r7t%          d %                    |                     ¦   «         |z
  ¦  «        ¦  «         |r‚t           j'        j(         )                    ¦   «         D ]`}tU          |dd¦  «        rK| )                    ¦   «         D ]6}|j+        s-t%          d %                    |j,        |j,        ¦  «        ¦  «         Œ7Œ_dS dS )a¨  
    Load scripts and run each modules register function.

    :arg reload_scripts: Causes all scripts to have their unregister method
       called before loading.
    :type reload_scripts: bool
    :arg refresh_scripts: only load scripts which are not already loaded
       as modules.
    :type refresh_scripts: bool
    :arg extensions: Loads additional scripts (add-ons & app-templates).
    :type extensions: bool
    r'   Nc                 ó   — g | ]	}|j         ‘Œ
S © )Úmodule)Ú.0Úexts     r=   ú
<listcomp>z load_scripts.<locals>.<listcomp>ê   s   € Ð!LÐ!LÐ!L° #¤*Ð!LÐ!LÐ!LrW   c                 óÔ   — t          | dd ¦  «        }|r-	  |¦   «          d S #  dd l}|                     ¦   «          Y d S xY wt          d                     | j        ¦  «        ¦  «         d S )NÚregisterr'   z[
Warning! {!r} has no register function, this is now a requirement for registerable scripts)ÚgetattrrG   rH   rC   rD   Ú__file__)r,   rj   rG   s      r=   Úregister_module_callz*load_scripts.<locals>.register_module_callí   s�   € Ý˜3 
¨DÑ1Ô1ˆØð 
	ð&Ø�‘
”
�
�
�
øð&Ø Ð Ð Ð Ø×#Ò#Ñ%Ô%Ð%Ð%Ð%Ð%øøøåðEßEKÂVÈCÌLÑEYÔEYñô ð ð ð ó   •
! ¡>c                 ó†   — t          | dd ¦  «        }|r-	  |¦   «          d S #  dd l}|                     ¦   «          Y d S xY wd S )NÚ
unregisterr'   )rk   rG   rH   )r,   rp   rG   s      r=   Úunregister_module_callz,load_scripts.<locals>.unregister_module_callû   si   € Ý˜S ,°Ñ5Ô5ˆ
Øð 	&ð&Ø�
‘”���øð&Ø Ð Ð Ð Ø×#Ò#Ñ%Ô%Ð%Ð%Ð%Ð%øøøð	&ð 	&rn   c                 ó�   — dd l }| t          k    r| S 	 |                     | ¦  «        S #  dd l}|                     ¦   «          Y d S xY wrQ   )r9   Ú
_bpy_typesÚreloadrG   rH   )r,   r9   rG   s      r=   Útest_reloadz!load_scripts.<locals>.test_reload  si   € ØÐÐÐð •*ÒÐØˆJð	"Ø×#Ò# CÑ(Ô(Ð(øð	"ØÐÐÐØ×ÒÑ!Ô!Ð!Ð!Ð!Ð!øøøs	   “( ¨Ac                 ó²   •— ‰r| ‰v rd S ‰r| rt          d| ¦  «          ‰| ¦  «        } | r, ‰| ¦  «         t                               | j        ¦  «         d S d S )Nz
Reloading:)rC   Ú_registered_module_namesrZ   rJ   )r,   Úoriginal_modulesr`   rm   r_   ru   s    €€€€€r=   Útest_registerz#load_scripts.<locals>.test_register  sˆ   ø€ àð 	˜sÐ&6Ð6Ð6ØˆFàð 	#˜cð 	#Ý�, Ñ$Ô$Ð$Ø�+˜cÑ"Ô"ˆCàð 	:Ø Ð  Ñ%Ô%Ð%Ý$×+Ò+¨C¬LÑ9Ô9Ð9Ð9Ð9ð	:ð 	:rW   c                 ó   — g | ]}|®|‘ŒS rY   rd   )rf   r,   s     r=   rh   z load_scripts.<locals>.<listcomp>$  s%   € ð 
ð 
ð 
ØØˆð ØˆˆrW   z:Warning: globally loaded modules not found in sys.modules:c                 ó.   — g | ]}|t           j        v¯|‘ŒS rd   )r3   r+   )rf   r:   s     r=   rh   z load_scripts.<locals>.<listcomp>-  s&   € ÐcÐcÐc˜hÀhÕVZÔVbÐFbÐFb�ÐFbÐFbÐFbrW   T)Úkeep_properties)ÚRestrictBlend)Úuse_userr*   ©r_   zgc.collect() -> {:d}zPython Script Load Time {:.4f}Úis_registeredFz'Warning, unregistered class: {:s}({:s}))-r@   rA   rB   Ú_is_factory_startuprE   Úsetr3   r+   ÚvaluesÚ_preferencesÚaddonsÚ_addon_utilsÚdisableÚmapr4   Úreversedrw   ÚlenrC   ÚclearÚcontextÚwindow_managerÚ
keyconfigsÚupdateÚbpy_restrict_stater}   r   Ú_script_module_dirsÚ_osrR   ÚjoinÚisdirrV   r	   Úload_scripts_extensionsÚtag_script_reloadÚgcrD   ÚcollectÚtypesÚ
bpy_structÚ__subclasses__rk   r€   rJ   )r_   r`   ra   rM   Úuse_class_register_checkr~   rE   Út_mainrL   Úaddon_module_namerq   ry   Úregistered_modulesr,   r}   Ú	base_pathÚpath_subdirrR   r—   ÚclsÚsubclsrx   rm   ru   s   ``                   @@@r=   r   r   Ì   s†  øøøøø€ õ +/¬(Ô*?Ð?€HÐ'Ý&Ð&€Hàð ØˆˆˆØ—’‘”ˆå‘U”U€Nàð 1Ýœ<×.Ò.Ñ0Ô0Ðàð 4ð
 "MÐ!L½Ô8KÐ!LÑ!LÔ!Lð 	4ð 	4ÐÝÔ Ð!2Ñ3Ô3Ð3Ð3ðð ð ð&ð &ð &ð"ð "ð "ð:ð :ð :ð :ð :ð :ð :ð :ð :ð ð Lð

ð 
Ý�tœ|Ô/µÕ:RÑ1SÔ1SÑTÔTð
ñ 
ô 
Ðõ Ð!Ñ"Ô"¥cÕ*BÑ&CÔ&CÒCÐCÝØLØcÐcÕ*BÐcÑcÔcñô ð õ 	!×&Ò&Ñ(Ô(Ð(ð &ð 	(ð 	(ˆCØ"Ð" 3Ñ'Ô'Ð'Ð'à%ð 	ð 	ˆCØˆK˜ÑÔÐÐØõ 	ŒÔ#Ô.×5Ò5ÀdÐ5ÑKÔKÐKà0Ð0Ð0Ð0Ð0Ð0à	ˆ‰Œð 
/ð 
/Ý%¨xÐ8Ñ8Ô8ð 		/ð 		/ˆIÝ2ð /ð /�Ý”x—}’} Y°Ñ<Ô<�Ý”8—>’> $Ñ'Ô'ð /Ý,¨TÑ2Ô2Ð2ð # iÒ/Ð/Ý#4°T¸>Ñ#JÔ#Jð /ð /˜CØ)˜M¨#Ñ.Ô.Ð.Ð.øð/ð		/ð
/ð 
/ð 
/ñ 
/ô 
/ð 
/ð 
/ð 
/ð 
/ð 
/ð 
/øøøð 
/ð 
/ð 
/ð 
/ð ð 8õ 	ŒÔ#Ô.×5Ò5Ñ7Ô7Ð7àð ?Ý¨~Ð>Ñ>Ô>Ð>àð ;ÝŒÔ#×5Ò5Ñ7Ô7Ð7àˆ	ˆ	ˆ	ÝÐ$×+Ò+¨B¯JªJ©L¬LÑ9Ô9Ñ:Ô:Ð:àð MÝÐ.×5Ò5°d·i²i±k´kÀFÑ6JÑKÔKÑLÔLÐLàð oÝ”:Ô(×7Ò7Ñ9Ô9ð 	oð 	oˆCÝ�s˜O¨UÑ3Ô3ð oØ!×0Ò0Ñ2Ô2ð oð o�FØ!Ô/ð oÝÐG×NÒNÈvÌÐ`cÔ`lÑmÔmÑnÔnÐnøøðoð oð	oð 	os   ÆBH<È<I ÉI r   c                 ó  — t          t          j                             ¦   «         ¦  «        rddl}|                     | ¬¦  «         ~t          t          dd¦  «        }|� |¦   «          t          `nt          j	        | ¬¦  «         ~dS )zÇ
    Load extensions scripts (add-ons and app-templates)

    :arg reload_scripts: Causes all scripts to have their unregister method
       called before loading.
    :type reload_scripts: bool
    r'   Nr   Ú_initialize_once)
Úanyr@   Úutilsr   Úbl_app_template_utilsÚresetrk   r†   r¥   Ú	reset_all)r_   r¨   r¥   s      r=   r•   r•   g  s˜   € õ �4Œ:×(Ò(Ñ*Ô*Ñ+Ô+ð "Ø$Ð$Ð$Ð$Ø×#Ò#°>Ð#ÑBÔBÐBØ!õ �|Ð-?ÀÑFÔFÐØÐ#àÐÑÔÐÝÐ)Ð)åÔ¨nÐ=Ñ=Ô=Ð=ØÐÐrW   c                  óf   — t          d¦  «        } | rt          j                             | ¦  «        ndS )z6returns the env var and falls back to home dir or NoneÚSCRIPTSN)Ú_user_resourcer’   rR   ÚnormpathrU   s    r=   r   r   €  s/   € å˜)Ñ$Ô$€DØ&*Ð4�3Œ8×Ò˜TÑ"Ô"Ð"°Ð4rW   c                  ó¨   — g } t           j        j        D ]=}|j        }|r2|                      t
          j                             |¦  «        ¦  «         Œ>| S )z5Returns a list of user preference script directories.)r„   Ú	filepathsÚscript_directoriesÚ	directoryrZ   r’   rR   r®   )ÚpathsÚscript_directoryr²   s      r=   Úscript_paths_prefrµ   †  sU   € à€EÝ(Ô2ÔEð 7ð 7ÐØ$Ô.ˆ	Øð 	7Ø�LŠL�œ×*Ò*¨9Ñ5Ô5Ñ6Ô6Ð6øØ€LrW   c                  óˆ   — t           j                             d¦  «        x} r t           j                             | ¦  «        gS g S )zGReturns a list of system script directories from environment variables.ÚBLENDER_SYSTEM_SCRIPTS)r’   Úenvironr4   rR   r®   )Úenv_system_paths    r=   Úscript_paths_system_environmentrº   �  s<   € åœ+Ÿ/š/Ð*BÑCÔCÐC€ð 4Ý”×!Ò! /Ñ2Ô2Ð3Ð3Ø€IrW   )ÚsubdirÚ	user_prefÚ	check_allr~   Úuse_system_environmentc                 ó  — |s|rt          ¦   «         \  }}g }|rpt          d¦  «        x}r3|                     t          j                             |d¦  «        ¦  «         |r|                     |¦  «         |                     |¦  «         |                     t          ¦  «         |s|r|                     |¦  «         |r!|                     t          ¦   «         ¦  «         |r!|                     t          ¦   «         ¦  «         g }	|D ]€}
|
sŒt          j         
                    |
¦  «        }
| � t          j                             |
| ¦  «        }
|
|	v rŒKt          j                             |
¦  «        sŒk|	                     |
¦  «         Œ�|	S )a  
    Returns a list of valid script paths.

    :arg subdir: Optional subdir.
    :type subdir: str
    :arg user_pref: Include the user preference script paths.
    :type user_pref: bool
    :arg check_all: Include local, user and system paths rather just the paths Blender uses.
    :type check_all: bool
    :arg use_user: Include user paths
    :type use_user: bool
    :arg use_system_environment: Include BLENDER_SYSTEM_SCRIPTS variable path
    :type use_system_environment: bool
    :return: script paths.
    :rtype: list[str]
    ÚLOCALÚscripts)Ú_bpy_script_pathsr   rZ   r’   rR   r“   Ú_script_base_dirÚextendrµ   rº   r®   r”   )r»   r¼   r½   r~   r¾   Úpath_systemÚ	path_userÚ
base_pathsÚ
path_localrÁ   rR   s              r=   r   r   —  s©  € ð$ ð 5�Hð 5Ý!2Ñ!4Ô!4Ñˆ�Yà€Jàð 'å& wÑ/Ô/Ð/ˆ:ð 	DØ×Ò�cœhŸmšm¨J¸	ÑBÔBÑCÔCÐCØð 	)Ø×Ò˜iÑ(Ô(Ð(Ø×Ò˜+Ñ&Ô&Ð&ð ×ÒÕ&Ñ'Ô'Ð'àð )Øð 	)Ø×Ò˜iÑ(Ô(Ð(àð /Ø×ÒÕ+Ñ-Ô-Ñ.Ô.Ð.àð =Ø×ÒÕ9Ñ;Ô;Ñ<Ô<Ð<à€GØð ð ˆØð 	ØåŒx× Ò  Ñ&Ô&ˆØÐÝ”8—=’=  vÑ.Ô.ˆDà�7ˆ?ˆ?ØÝŒx�~Š~˜dÑ#Ô#ð 	ØØ�Š�tÑÔÐÐà€NrW   c                  ód  — t           D ]2} 	 t          j                             | ¦  «         Œ## t          $ r Y Œ/w xY wt                                ¦   «          t          ¦   «         D ]Z}t          D ]P}t          j         	                    ||¦  «        } t          j         
                    | ¦  «        rt          | ¦  «         ŒQŒ[t          j        ¦   «         D ]_} t          | ¦  «         t          j         	                    | d¦  «        } t          j         
                    | ¦  «        rt          | ¦  «         Œ`dS )zE
    Run this after creating new script paths to update sys.path
    r+   N)rT   r3   rR   ÚremoveÚ
ValueErrorr‹   r   r‘   r’   r“   r”   rV   r†   r³   r[   )rR   r    r¡   s      r=   r   r   Ù  s0  € õ
 'ð ð ˆð	ÝŒI×Ò˜TÑ"Ô"Ð"Ð"øÝð 	ð 	ð 	ØˆDð	øøøå× Ò Ñ"Ô"Ð"å!‘^”^ð /ð /ˆ	Ý.ð 	/ð 	/ˆKÝ”8—=’= ¨KÑ8Ô8ˆDÝŒx�~Š~˜dÑ#Ô#ð /Ý(¨Ñ.Ô.Ð.øð	/õ
 Ô"Ñ$Ô$ð *ð *ˆÝ Ñ%Ô%Ð%ÝŒx�}Š}˜T 9Ñ-Ô-ˆÝŒ8�>Š>˜$ÑÔð 	*Ý# DÑ)Ô)Ð)øð	*ð *s   ‹+«
8·8rU   c              #   óê  K  — | �| fnd}t          dt          j        j        ddg|¢R Ž ¬¦  «        }|r#t          j                             |¦  «        r|V — t          ¦   «         D ]>} t          j        j        | ddg|¢R Ž }t          j                             |¦  «        r|V — Œ?t          dt          j        j        ddg|¢R Ž ¬¦  «        }|r%t          j                             |¦  «        r|V — dS dS dS )z£
    Returns valid application template paths.

    :arg path: Optional subdir.
    :type path: str
    :return: App template paths.
    :rtype: Iterator[str]
    Nrd   r¬   r*   Úbl_app_templates_userrU   Úbl_app_templates_system)r­   r’   rR   r“   r”   rº   r)   )rR   Úsubdir_argsÚ	path_tests      r=   r   r   ò  s)  è è € ð "Ð-�4�'�'°2€Kõ ˜y­s¬x¬}¸YÐH_Ð/nÐbmÐ/nÐ/nÐ/nÐoÑoÔo€IØð •S”X—^’^ IÑ.Ô.ð Øˆˆˆõ 0Ñ1Ô1ð ð ˆÝ”H”M $¨	Ð3LÐ[È{Ð[Ð[Ð[ˆ	ÝŒ8�>Š>˜)Ñ$Ô$ð 	ØˆOˆOˆOøõ   	µ´´¸iÐIbÐ0qÐepÐ0qÐ0qÐ0qÐrÑrÔr€IØð •S”X—^’^ IÑ.Ô.ð Øˆˆˆˆˆðð ð ð rW   c                 óÚ  — g }t          d¬¦  «        D ]�}t          j                             || ¦  «        }|                     |¦  «        s"t          d                     | ¦  «        ¦  «        ‚t          j                             |¦  «        r|                     |¦  «         ŒŽt          j
        ¦   «         D ]W}t          j                             |d| ¦  «        }t          j                             |¦  «        r|                     |¦  «         ŒXt          D ]W}t          j                             |d| ¦  «        }t          j                             |¦  «        r|                     |¦  «         ŒX|S )zÅ
    Returns a list of paths for a specific preset.

    :arg subdir: preset subdirectory (must not be an absolute path).
    :type subdir: str
    :return: Script paths.
    :rtype: list[str]
    Úpresets)r»   zinvalid subdir given {!r})r   r’   rR   r“   Ú
startswithÚ	ExceptionrD   r”   rZ   r†   r³   Ú_preset_path_registry)r»   ÚdirsrR   r²   s       r=   r   r     sB  € ð €DÝ IÐ.Ñ.Ô.ð #ð #ˆÝ”H—M’M $¨Ñ/Ô/ˆ	Ø×#Ò# DÑ)Ô)ð 	#ÝÐ7×>Ò>¸vÑFÔFÑGÔGÐGÝŒX�^Š^˜IÑ&Ô&ð 	#Ø�KŠK˜	Ñ"Ô"Ð"øõ Ô"Ñ$Ô$ð #ð #ˆÝ”H—M’M $¨	°6Ñ:Ô:ˆ	ÝŒ8�>Š>˜)Ñ$Ô$ð 	#Ø�KŠK˜	Ñ"Ô"Ð"øå%ð #ð #ˆÝ”H—M’M $¨	°6Ñ:Ô:ˆ	ÝŒ8�>Š>˜)Ñ$Ô$ð 	#Ø�KŠK˜	Ñ"Ô"Ð"øà€KrW   c                 ó¶   — t          t          ¦  «        }t                               | ¦  «         |t          t          ¦  «        k    rt          d| ¦  «         dS dS )a|  
    Register a preset search path.

    :arg path: preset directory (must be an absolute path).

       This path must contain a "presets" subdirectory which will typically contain presets for add-ons.

       You may call ``bpy.utils.register_preset_path(os.path.dirname(__file__))`` from an add-ons ``__init__.py`` file.
       When the ``__init__.py`` is in the same location as a ``presets`` directory.
       For example an operators preset would be located under: ``presets/operator/{operator.id}/``
       where ``operator.id`` is the ``bl_idname`` of the operator.
    :type path: str
    :return: success
    :rtype: bool
    z'Warning: preset path already registeredFT)rŠ   rÕ   rI   rC   ©rR   Úset_lens     r=   r   r   -  sU   € õ  Õ'Ñ(Ô(€GÝ×Ò˜dÑ#Ô#Ð#Ø•#Õ+Ñ,Ô,Ò,Ð,ÝÐ7¸Ñ>Ô>Ð>ØˆuØˆ4rW   c                 ó¶   — t          t          ¦  «        }t                               | ¦  «         |t          t          ¦  «        k    rt          d| ¦  «         dS dS )zÖ
    Unregister a preset search path.

    :arg path: preset directory (must be an absolute path).

       This must match the registered path exactly.
    :type path: str
    :return: success
    :rtype: bool
    z#Warning: preset path not registeredFT)rŠ   rÕ   ÚdiscardrC   rØ   s     r=   r   r   E  sU   € õ Õ'Ñ(Ô(€GÝ×!Ò! $Ñ'Ô'Ð'Ø•#Õ+Ñ,Ô,Ò,Ð,ÝÐ3°TÑ:Ô:Ð:ØˆuØˆ4rW   c                 ó  — 	 t           j                             t           j                             | g¦  «        t           j                             | |g¦  «        ¦  «        rdS n&# t          $ r Y nt
          $ r Y nt          $ r Y nw xY wdS )NTF)r’   rR   ÚsamefileÚ
commonpathÚFileNotFoundErrorrË   ÚPermissionError)Úparent_pathrR   s     r=   Ú_is_path_parent_ofrâ   X  s±   € ðÝŒ8×ÒÝ”×#Ò# [ MÑ2Ô2Ý”×#Ò# [°$Ð$7Ñ8Ô8ñ
ô 
ð 	ð �4ð		øõ ð ð ð àˆÝð ð ð àˆÝð ð ð àˆðøøøð ˆ5s   ‚AA" Á"
BÁ.	BÁ9	BÂBc                 ó„   — t          d¦  «        }dD ]-}t          |¦  «        }|r||k    rŒt          || ¦  «        r dS Œ.dS )zÈ
    Returns True if the path is one of the built-in paths used by Blender.

    :arg path: Path you want to check if it is in the built-in settings directory
    :type path: str
    :rtype: bool
    ÚUSER)ÚSYSTEMrÀ   TF)r   râ   )rR   Ú	user_pathÚresrá   s       r=   Úis_path_builtinrè   q  si   € õ ˜fÑ%Ô%€Ià"ð 	ð 	ˆÝ# CÑ(Ô(ˆØð 	˜k¨YÒ6Ð6ð å˜k¨4Ñ0Ô0ð 	Ø�4�4ð	ð ˆ5rW   c                 ón   — t           j        j        D ]"}|j        sŒ
t	          |j        | ¦  «        r dS Œ#dS )z°
    Returns True if the path is from an extensions repository.

    :arg path: Path to check if it is within an extension repository.
    :type path: str
    :rtype: bool
    TF)r„   ra   ÚreposÚenabledrâ   r²   )rR   Úrepos     r=   Úis_path_extensionrí   �  sO   € õ Ô'Ô-ð ð ˆØŒ|ð 	Øõ ˜dœn¨dÑ3Ô3ð 	Ø�4�4ð	ð ˆ5rW   ©ÚfpsÚfps_basec                óF   — t          t          | ||¬¦  «        ||¬¦  «        S )a  
    Returns an SMPTE formatted string from the *time*:
    ``HH:MM:SS:FF``.

    If *fps* and *fps_base* are not given the current scene is used.

    :arg time: time in seconds.
    :type time: int | float | datetime.timedelta
    :return: the frame string.
    :rtype: str
    rî   )r    Útime_to_frame)rE   rï   rð   s      r=   r!   r!      s3   € õ Ý�d ¨hÐ7Ñ7Ô7ØØðñ ô ð rW   c          
      ó|  — |€t           j        j        j        j        }|€t           j        j        j        j        }||z  }| dk     rdnd}t          | ¦  «        } d                     |t          | d|z  z  ¦  «        t          | d|z  z  dz  ¦  «        t          | |z  dz  ¦  «        t          | |z  ¦  «        ¦  «        S )a  
    Returns an SMPTE formatted string from the *frame*:
    ``HH:MM:SS:FF``.

    If *fps* and *fps_base* are not given the current scene is used.

    :arg frame: frame number.
    :type frame: int | float
    :return: the frame string.
    :rtype: str
    Nr'   ú-Ú z{:s}{:02d}:{:02d}:{:02d}:{:02d}i  é<   )	r@   rŒ   ÚsceneÚrenderrï   rð   ÚabsrD   Úint)Úframerï   rð   Úsigns       r=   r    r    ´  sÁ   € ð €{ÝŒlÔ Ô'Ô+ˆàÐÝ”<Ô%Ô,Ô5ˆà
�‰.€CØ˜!’)�)ˆ3ˆ3 €DÝ�‰JŒJ€Eð 	*×0Ò0ØÝ�˜ ™Ñ$Ñ%Ô%Ý�˜"˜s™(Ñ# rÑ)Ñ*Ô*Ý�˜‘ Ñ"Ñ#Ô#Ý�˜‘ÑÔñ	
ô 	
ðrW   c                óª   — |€t           j        j        j        j        }|€t           j        j        j        j        }||z  }ddlm}  |d| |z  ¦  «        S )zí
    Returns the time from a frame number .

    If *fps* and *fps_base* are not given the current scene is used.

    :arg frame: number.
    :type frame: int | float
    :return: the time in seconds.
    :rtype: datetime.timedelta
    Nr'   ©Ú	timedelta)r@   rŒ   r÷   rø   rï   rð   Údatetimerÿ   )rû   rï   rð   rÿ   s       r=   Útime_from_framer  Ö  s`   € ð €{ÝŒlÔ Ô'Ô+ˆàÐÝ”<Ô%Ô,Ô5ˆà
�‰.€Cà"Ð"Ð"Ð"Ð"Ð"àˆ9�Q˜ ™Ñ$Ô$Ð$rW   c                óÞ   — |€t           j        j        j        j        }|€t           j        j        j        j        }||z  }ddlm} t          | |¦  «        r|  	                    ¦   «         } | |z  S )aG  
    Returns a float frame number from a time given in seconds or
    as a datetime.timedelta object.

    If *fps* and *fps_base* are not given the current scene is used.

    :arg time: time in seconds.
    :type time: float | int | datetime.timedelta
    :return: The frame.
    :rtype: float | int | datetime.timedelta
    Nr'   rþ   )
r@   rŒ   r÷   rø   rï   rð   r   rÿ   Ú
isinstanceÚtotal_seconds)rE   rï   rð   rÿ   s       r=   rò   rò   ï  sw   € ð €{ÝŒlÔ Ô'Ô+ˆàÐÝ”<Ô%Ô,Ô5ˆà
�‰.€Cà"Ð"Ð"Ð"Ð"Ð"å�$˜	Ñ"Ô"ð $Ø×!Ò!Ñ#Ô#ˆà�#‰:ÐrW   z.py)Údisplay_namerg   c                óz  — | sd S t          |¦  «        D ]¦}|rXd}t          j        |¦  «        D ]@}|                     |¦  «        r)| t          j                             |d¬¦  «        k    r|} nŒAn| |z   }|rCt          j                             ||¦  «        }t          j                             |¦  «        r|c S Œ§d S )Nrõ   F)Ú
title_case)	r   r’   ÚlistdirÚendswithr@   rR   r  r“   Úexists)ÚnameÚpreset_pathr  rg   r²   ÚfilenameÚfnr8   s           r=   r
   r
     sÜ   € Øð Øˆtå! +Ñ.Ô.ð  ð  ˆ	àð 	"ØˆHÝ”k )Ñ,Ô,ð ð �Ø—;’;˜sÑ#Ô#ð ¨µ´	×0FÒ0FÀrÐV[Ð0FÑ0\Ô0\Ò(\Ð(\Ø!�HØ�Eøøà˜c‘zˆHàð 	 Ý”x—}’} Y°Ñ9Ô9ˆHÝŒx�Š˜xÑ(Ô(ð  Ø���øð ð  rW   c                  óÀ   — d} t           j        j        }t          | d¦  «        }t	          |¦  «         | |k    r#t          |d¦  «        }|rt	          |¦  «         d S d S d S )NÚBlenderÚ	keyconfig)r„   ÚkeymapÚactive_keyconfigr
   r   )Údefault_configÚactive_configr8   s      r=   r   r   !  s}   € ð €NÝ Ô'Ô8€Mõ ˜>¨;Ñ7Ô7€HÝ�(ÑÔÐð ˜Ò&Ð&Ý˜}¨kÑ:Ô:ˆØð 	$Ý˜(Ñ#Ô#Ð#Ð#Ð#ð 'Ð&ð	$ð 	$rW   )Úreportc                óH  — ddl m}m} t          j        j        rt          d| ¦  «         t          j        j        j	        } | || ¦  «        ¦  «        d         }| 
                    |¦  «        }	 d}t          | ¦  «         n#  dd l}|                     ¦   «         }Y nxY w| 
                    |¦  «        }	|r=|� |dh|¦  «         t          |¦  «         |	�|	|k    r|                     |	¦  «         dS |	€$|�  |dhd                     | ¦  «        ¦  «         dS |	|_        dS )	Nr'   )ÚbasenameÚsplitextzloading preset:rõ   ÚERRORFzFailed to load keymap {!r}T)Úos.pathr  r  r@   rA   rB   rC   rŒ   r�   rŽ   r4   r&   rG   Ú
format_excrÊ   rD   Úactive)
r8   r  r  r  rŽ   r  Úkc_oldÚ	error_msgrG   Úkc_news
             r=   r   r   2  sg  € Ø*Ð*Ð*Ð*Ð*Ð*Ð*Ð*å„xÔð +ÝÐ Ñ*Ô*Ð*å”Ô,Ô7€JØˆ8�H�H˜XÑ&Ô&Ñ'Ô'¨Ô*€Dð �^Š^˜DÑ!Ô!€Fð+Øˆ	Ý�ÑÔÐÐøð+ØÐÐÐØ×(Ò(Ñ*Ô*ˆ	ˆ	ˆ	øøøà�^Š^˜DÑ!Ô!€Fàð ØÐØˆF�G�9˜iÑ(Ô(Ð(ÝˆiÑÔÐØÐ V¨vÒ%5Ð%5Ø×Ò˜fÑ%Ô%Ð%Øˆuð €~ØÐØˆF�G�9Ð:×AÒAÀ(ÑKÔKÑLÔLÐLØˆuà"ˆ
ÔØˆts   Á0B ÂBrõ   )rR   Úcreatec                ób  — t          | |¬¦  «        }|r›|r™t          j                             |¦  «        s7	 t          j        |¦  «         nd#  ddl}|                     ¦   «          d}Y nFxY wt          j                             |¦  «        s$t          d 	                    |¦  «        ¦  «         d}|S )a�  
    Return a user resource path (normally from the users home directory).

    :arg resource_type: Resource type in ['DATAFILES', 'CONFIG', 'SCRIPTS', 'EXTENSIONS'].
    :type resource_type: str
    :arg path: Optional subdirectory.
    :type path: str
    :arg create: Treat the path as a directory and create it if its not existing.
    :type create: bool
    :return: a path.
    :rtype: str
    rU   r'   Nrõ   ú&Path {!r} found but isn't a directory!)
r­   r’   rR   r
  ÚmakedirsrG   rH   r”   rC   rD   )Úresource_typerR   r!  Útarget_pathrG   s        r=   r%   r%   Y  sÂ   € õ ! °TÐ:Ñ:Ô:€Kàð !àð 	!å”8—?’? ;Ñ/Ô/ð 	!ð%Ý”L Ñ-Ô-Ð-Ð-øð%Ø$Ð$Ð$Ð$Ø×'Ò'Ñ)Ô)Ð)Ø"$�K�K�KøøøÝ”X—^’^ KÑ0Ô0ð !ÝÐ>×EÒEÀkÑRÔRÑSÔSÐSØ �àÐs   ¶A ÁA)c                ó  — ddl m}  || ¦  «        \  }}t          d¦  «        }|rã|r$t          j                             |d|||¦  «        }n"t          j                             |d||¦  «        }|r™t          j                             |¦  «        s7	 t          j        |¦  «         nd#  ddl}| 	                    ¦   «          d}Y nFxY wt          j         
                    |¦  «        s$t          d                     |¦  «        ¦  «         d}|S )aª  
    Return a user writable directory associated with an extension.

    .. note::

       This allows each extension to have it's own user directory to store files.

       The location of the extension it self is not a suitable place to store files
       because it is cleared each upgrade and the users may not have write permissions
       to the repository (typically "System" repositories).

    :arg package: The ``__package__`` of the extension.
    :type package: str
    :arg path: Optional subdirectory.
    :type path: str
    :arg create: Treat the path as a directory and create it if its not existing.
    :type create: bool
    :return: a path.
    :rtype: str
    r'   )Ú _extension_module_name_decomposeÚ
EXTENSIONSz.userNrõ   r#  )Úaddon_utilsr(  r­   r’   rR   r“   r
  r$  rG   rH   r”   rC   rD   )ÚpackagerR   r!  r(  Úrepo_moduleÚ
pkg_idnamer&  rG   s           r=   r   r   {  s&  € ð* =Ð<Ð<Ð<Ð<Ð<ð ?Ð>¸wÑGÔGÑ€K�å  Ñ.Ô.€Kàð !Øð 	WÝœ(Ÿ-š-¨°W¸kÈ:ÐW[Ñ\Ô\ˆKˆKåœ(Ÿ-š-¨°W¸kÈ:ÑVÔVˆKØð 	!å”8—?’? ;Ñ/Ô/ð 	!ð%Ý”L Ñ-Ô-Ð-Ð-øð%Ø$Ð$Ð$Ð$Ø×'Ò'Ñ)Ô)Ð)Ø"$�K�K�KøøøÝ”X—^’^ KÑ0Ô0ð !ÝÐ>×EÒEÀkÑRÔRÑSÔSÐSØ �àÐs   ÂB% Â%Cc                 ó    ‡ — ˆ fd„}ˆ fd„}||fS )zˆ
    Utility function to create register and unregister functions
    which simply registers and unregisters a sequence of classes.
    c                  ó0   •— ‰D ]} t          | ¦  «         Œd S rY   )r   ©r¢   Úclassess    €r=   rj   z*register_classes_factory.<locals>.register±  s-   ø€ Øð 	 ð 	 ˆCÝ˜3ÑÔÐÐð	 ð 	 rW   c                  óJ   •— t          ‰¦  «        D ]} t          | ¦  «         Œd S rY   )r‰   r#   r0  s    €r=   rp   z,register_classes_factory.<locals>.unregisterµ  s5   ø€ Ý˜GÑ$Ô$ð 	"ð 	"ˆCÝ˜SÑ!Ô!Ð!Ð!ð	"ð 	"rW   rd   )r1  rj   rp   s   `  r=   r   r   ¬  sB   ø€ ð
 ð  ð  ð  ð  ð"ð "ð "ð "ð "ð �ZÐÐrW   c                 ó6   ‡ ‡‡‡— dŠg Šˆˆ ˆˆfd„}ˆˆfd„}||fS )a3  
    Utility function to create register and unregister functions
    which simply load submodules,
    calling their register & unregister functions.

    .. note::

       Modules are registered in the order given,
       unregistered in reverse order.

    :arg module_name: The module name, typically ``__name__``.
    :type module_name: str
    :arg submodule_names: List of submodule names to load and unload.
    :type submodule_names: list[str]
    :return: register and unregister functions.
    :rtype: tuple[Callable[[], None], Callable[[], None]]
    Nc                  óˆ   •— t          ‰‰¬¦  «        Šˆfd„‰D ¦   «         ‰d d …<   ‰D ]\  } }|                      ¦   «          Œd S )N)r  Úfromlistc                 ó4   •— g | ]}t          ‰|¦  «        |f‘ŒS rd   )rk   )rf   r:   re   s     €r=   rh   z@register_submodule_factory.<locals>.register.<locals>.<listcomp>Õ  s(   ø€ Ð_Ð_Ð_À8�' &¨(Ñ3Ô3°XÐ>Ð_Ð_Ð_rW   )rF   rj   )r,   Ú	_mod_namere   rK   Úsubmodule_namesÚ
submoduless     €€€€r=   rj   z,register_submodule_factory.<locals>.registerÒ  sb   ø€ å °ÐGÑGÔGˆØ_Ð_Ð_Ð_ÈÐ_Ñ_Ô_ˆ
�1�1�1‰Ø(ð 	ð 	‰NˆC�Ø�LŠL‰NŒNˆNˆNð	ð 	rW   c                  ó¾   •— ddl m}  t          ‰¦  «        D ]1\  }}|                     ¦   «          t	          ‰|¦  «         | |j        = Œ2‰                     ¦   «          d S )Nr'   )r+   )Úsysr+   r‰   rp   ÚdelattrrJ   r‹   )r+   r,   r:   re   r9  s      €€r=   rp   z.register_submodule_factory.<locals>.unregisterÙ  su   ø€ ØÐÐÐÐÐÝ% jÑ1Ô1ð 	&ð 	&‰MˆC�Ø�NŠNÑÔÐÝ�F˜HÑ%Ô%Ð%Ø˜œÐ%Ð%Ø×ÒÑÔÐÐÐrW   rd   )rK   r8  rj   rp   re   r9  s   ``  @@r=   r   r   ¼  se   øøøø€ ð& €FØ€Jðð ð ð ð ð ð ð ðð ð ð ð ð ð �ZÐÐrW   )ÚafterÚ	separatorÚgroupc                ó`  ‡‡‡— | j         }| j        Šddlm}mŠ |                     |¦  «        Š‰€"t          d                     |¦  «        ¦  «        ‚‰j        ‰         }ddl	m
} d„ |                     |¦  «        D ¦   «         }t          | |¦  «        s/t          d                     t          | ¦  «        ¦  «        ¦  «        ‚| j        |v r't          d                     | j        ¦  «        ¦  «        ‚~~ˆˆˆfd	„}	 |	| ¦  «        }
|r|
f}
|rd|
fn|
f}d
„ }d}|�øt          |¦  «        D ]Ö\  }}|€Œt!          |‰¦  «        r'|j        |v r |||¦  «        }|||dz   |dz   …<   d} n™Œ?t!          |t$          ¦  «        r‚t          |d¦  «        D ]m\  }}t!          |‰¦  «        rX|j        |v rO|r |||¦  «        }|||dz   |dz   …<   n/ |||¦  «        }|d|dz   …         |z   ||dz   d…         z   }|||<   d} nŒn|r nŒ×|st'          d|¦  «         |s|                     |¦  «         dS dS )aš  
    Register a tool in the toolbar.

    :arg tool_cls: A tool subclass.
    :type tool_cls: :class:`bpy.types.WorkSpaceTool`
    :arg after: Optional identifiers this tool will be added after.
    :type after: Sequence[str] | None
    :arg separator: When true, add a separator before this tool.
    :type separator: bool
    :arg group: When true, add a new nested group of tools.
    :type group: bool
    r'   )ÚToolSelectPanelHelperÚToolDefNúSpace type {!r} has no toolbar)ÚWorkSpaceToolc                 ó    — h | ]}|®|j         ’ŒS rY   )Úidname)rf   Úitems     r=   ú	<setcomp>z register_tool.<locals>.<setcomp>  s*   € ð ð ð ØØÐð 	ŒØÐÐrW   z)Expected WorkSpaceTool subclass, not {!r}zTool {!r} already exists!c                 óÞ  •— ‰	                      | j        | j        t          | d| j        ¦  «        t          | dd ¦  «        t          | dd ¦  «        t          | dd ¦  «        t          | dd ¦  «        t          | dd ¦  «        t          | dd ¦  «        t          | dd ¦  «        t          | d	d ¦  «        t          | d
d ¦  «        t          | dd ¦  «        dœ¦  «        }|| _        |j        }|�„t          |d         ¦  «        roddlm	} |j
        }|j        }|j        }|j        }|�K‰€d}n(‰                     dd¦  «                             ¦   «         }‰
                     ||||j        |¦  «         |S )NÚbl_descriptionÚbl_iconÚ	bl_cursorÚ
bl_optionsÚ	bl_widgetÚbl_widget_propertiesÚ	bl_keymapÚbl_data_blockÚbl_operatorÚdraw_settingsÚdraw_cursor)rF  ÚlabelÚdescriptionÚiconÚcursorÚoptionsÚwidgetÚwidget_propertiesr  Ú
data_blockÚoperatorrS  rT  r'   ©rŒ   ÚAllÚ_ú )Ú	from_dictÚ	bl_idnameÚbl_labelrk   Ú__doc__Ú_bl_toolr  ÚcallableÚbpyrŒ   r�   rŽ   ÚdefaultÚaddonÚreplaceÚtitleÚ_km_action_simplerU  )Útool_clsÚtool_defÚkeymap_datarŒ   ÚwmrŽ   Ú
kc_defaultÚkcÚcontext_descrrB  r¢   Úcontext_modes            €€€r=   Útool_from_classz&register_tool.<locals>.tool_from_class  sŠ  ø€ à×$Ò$ØÔ(ØÔ&Ý" 8Ð-=¸xÔ?OÑPÔPÝ˜H i°Ñ6Ô6Ý˜h¨°TÑ:Ô:Ý˜x¨°tÑ<Ô<Ý˜h¨°TÑ:Ô:Ý!(¨Ð3IÈ4Ñ!PÔ!PÝ˜h¨°TÑ:Ô:Ý! (¨O¸TÑBÔBÝ ¨-¸Ñ>Ô>Ý$ X¨ÀÑEÔEÝ" 8¨]¸DÑAÔAð&
ð &
ñ ô ˆð %ˆÔà”oˆØÐ"¥x°¸A´Ñ'?Ô'?Ð"Ø#Ð#Ð#Ð#Ð#Ð#ØÔ'ˆBØœˆJØ#Ô+ˆJð Ô!ˆBØˆ~ØÐ'Ø$)�M�Mà$0×$8Ò$8¸¸cÑ$BÔ$B×$HÒ$HÑ$JÔ$J�MØ×%Ò% j°"°mÀXÄ^ÐU`ÑaÔaÐaØˆrW   c                 ó„   — |}|t          | ¦  «        k     r*| |         �"|}|dz  }|t          | ¦  «        k     r| |         ­"|S )Né   )rŠ   )ÚseqÚiÚi_prevs      r=   Úskip_to_end_of_groupz+register_tool.<locals>.skip_to_end_of_group>  sN   € ØˆØ•#�c‘(”(Šlˆl˜s 1œvÐ1ØˆFØ�‰FˆAð •#�c‘(”(Šlˆl˜s 1œvÐ1ð ˆrW   Frx  Tz/bpy.utils.register_tool: could not find 'after')Úbl_space_typeÚbl_context_modeÚbl_ui.space_toolsystem_commonrA  rB  Ú_tool_class_from_space_typerÔ   rD   Ú_toolsÚ	bpy.typesrD  Ú_tools_flattenÚ
issubclassÚtyperc  Ú	enumerater  rF  ÚtuplerC   rÄ   )rn  r=  r>  r?  Ú
space_typerA  ÚtoolsrD  Útools_idrv  Útool_convertedÚtool_def_insertr|  Úchangedrz  rG  ÚjÚsub_itemrB  r¢   ru  s                     @@@r=   r   r   è  sL  øøø€ ð Ô'€JØÔ+€Lðð ð ð ð ð ð ð ð
  ×
;Ò
;¸JÑ
GÔ
G€CØ
€{ÝÐ8×?Ò?À
ÑKÔKÑLÔLÐLØŒJ�|Ô$€Eð (Ð'Ð'Ð'Ð'Ð'ðð Ø 5× DÒ DÀUÑ KÔ Kðñ ô €Hõ �h Ñ.Ô.ð \ÝÐC×JÒJÍ4ÐPXÉ>Ì>ÑZÔZÑ[Ô[Ð[ØÔ˜XÐ%Ð%ÝÐ3×:Ò:¸8Ô;MÑNÔNÑOÔOÐOØ�-ð"ð "ð "ð "ð "ð "ð "ðH %�_ XÑ.Ô.€Nàð +à(Ð*ˆð #,ð 	ˆˆ~ÐÐØ	Ðð ð
ð ð ð €GØÐÝ  Ñ'Ô'ð 	ð 	‰GˆAˆtØˆ|ØÝ˜D 'Ñ*Ô*ð Ø”; %Ð'Ð'Ø,Ð,¨T°1Ñ5Ô5�AØ)8�E˜!˜a™%  A¡˜+Ñ&Ø"�GØ�Eð	 (õ
 ˜D¥%Ñ(Ô(ð Ý#,¨T°1Ñ#5Ô#5ð "ð "‘K�A�xÝ! (¨GÑ4Ô4ð "Ø#œ?¨eÐ3Ð3Ø$ð 0ð %9Ð$8¸ÀÑ$BÔ$B Ø5D  a¨!¡e¨A°©E kÑ 2Ð 2à$8Ð$8¸¸qÑ$AÔ$A Ø'+¨F¨Q°©U¨F¤|°oÑ'EÈÈQÐQRÉUÈVÈVÌÑ'T Ø+/  a¡Ø&*˜GØ!˜EøØð Ø�Eøàð 	LÝÐCÀUÑKÔKÐKØð &Ø�Š�_Ñ%Ô%Ð%Ð%Ð%ð&ð &rW   c                 ó  — | j         }| j        }ddlm} |                     |¦  «        }|€"t          d                     |¦  «        ¦  «        ‚|j        |         }| j        }	 | 	                    |¦  «        }n# t          $ r d}Y nw xY wd„ }d}	|dk    r||=  ||¦  «         d}	|	sžt          |¦  «        D ]Ž\  }}
t          |
t          ¦  «        rt	 |
 	                    |¦  «        }n# t          $ r d}Y nw xY w|dk    rEt          |
¦  «        }||=  ||¦  «         |rt          |¦  «        ||<   n||=  ||¦  «         ~d}	 nŒ�|	s"t          d                     | ¦  «        ¦  «        ‚| `|j        }|�“dd	lm} |j        }|j        }|j        |j        fD ]r}|€Œ|j                             |d         ¦  «        }|€/t1          d
                     |d         |j        ¦  «        ¦  «         ŒV|j                             |¦  «         Œqd S d S )Nr'   )rA  rC  éÿÿÿÿc                 óÐ   — | r| d         €| d= | r| d         ®| r| d         €| d= | r| d         ®t          t          | ¦  «        dz
  dd¦  «        D ]}| |         d u }|r|r| |= |}Œd S )Nr‘  r'   rx  )ÚrangerŠ   )Ú	tool_listrz  Úis_noneÚprev_is_nones       r=   Útool_list_cleanz(unregister_tool.<locals>.tool_list_cleanx  sµ   € àð 	˜I bœMÐ1Ø˜"�ð ð 	˜I bœMÐ1àð 	˜I aœLÐ0Ø˜!�ð ð 	˜I aœLÐ0õ •s˜9‘~”~¨Ñ)¨2¨rÑ2Ô2ð 	#ð 	#ˆAØ ”l dÐ*ˆGØð !˜<ð !Ø˜a�LØ"ˆLˆLð		#ð 	#rW   FTzUnable to remove {!r}r^  z&Warning keymap {!r} not found in {!r}!)r}  r~  r  rA  r€  rÔ   rD   r�  rf  ÚindexrË   r†  r  r‡  Úlistr  rh  rŒ   r�   rŽ   ri  rj  Úkeymapsr4   rC   r  rÊ   )rn  rˆ  ru  rA  r¢   r‰  ro  rz  r—  r�  rG  rŽ  Ú
item_cleanrp  rŒ   rq  rŽ   rs  Úkms                      r=   r$   r$   h  s²  € ØÔ'€JØÔ+€LàCÐCÐCÐCÐCÐCØ
×
;Ò
;¸JÑ
GÔ
G€CØ
€{ÝÐ8×?Ò?À
ÑKÔKÑLÔLÐLØŒJ�|Ô$€EàÔ €HðØ�KŠK˜Ñ!Ô!ˆˆøÝð ð ð Øˆˆˆðøøøð#ð #ð #ð €GØˆB‚w€wØ�!ˆHØˆ˜ÑÔÐØˆàð Ý  Ñ'Ô'ð 	ð 	‰GˆAˆtÝ˜$¥Ñ&Ô&ð ðØŸ
š
 8Ñ,Ô,�A�AøÝ!ð ð ð Ø�A�A�Aðøøøð ˜’7�7Ý!% d¡¤�JØ" 1˜Ø#�O JÑ/Ô/Ð/Ø!ð /Ý#(¨Ñ#4Ô#4˜˜a™˜à! !˜HØ'˜¨Ñ.Ô.Ð.Ø"ð #�GØ�Eøàð BÝÐ/×6Ò6°xÑ@Ô@ÑAÔAÐAØÐà”/€KØÐØÐÐÐÐÐØÔ#ˆØ”]ˆ
ØÔ% zÔ'7Ð8ð 	&ð 	&ˆBØˆzØØ”—’ ¨A¤Ñ/Ô/ˆBØˆzÝÐ>×EÒEÀkÐRSÄnÐVXÔV]Ñ^Ô^Ñ_Ô_Ð_Ð_à”
×!Ò! "Ñ%Ô%Ð%Ð%ð Ðð	&ð 	&s$   Á#A9 Á9BÂBÃC(Ã(C7Ã6C7c                  ó„   — t          t          j                             t          dd¦  «        ¦  «        } | j        | j        fS )Nr+   zrna_manual_reference.py)r&   r’   rR   r“   rÃ   Úurl_manual_prefixÚurl_manual_mapping)Úref_mods    r=   Ú_blender_default_mapr¡  º  s6   € õ •s”x—}’}Õ%5°yÐB[Ñ\Ô\Ñ]Ô]€GØÔ% wÔ'AÐBÐBrW   c                 ó:   — t                                | ¦  «         d S rY   )Ú_manual_maprZ   ©Úmanual_hooks    r=   r   r   Æ  ó   € Ý×Ò�{Ñ#Ô#Ð#Ð#Ð#rW   c                 ó:   — t                                | ¦  «         d S rY   )r£  rÊ   r¤  s    r=   r   r   Ê  r¦  rW   c               #   óä   K  — t          t          ¦  «        D ]X} 	  | ¦   «         \  }}nA#  t          d                     | ¦  «        ¦  «         dd l}|                     ¦   «          Y ŒOxY w||fV — ŒYd S )NzError calling {!r}r'   )r‰   r£  rC   rD   rG   rH   )ÚcbÚprefixrŸ  rG   s       r=   r   r   Î  sž   è è € å•{Ñ#Ô#ð 	)ð 	)ˆð	Ø)+¨©¬Ñ&ˆFÐ&Ð&øð	ÝÐ&×-Ò-¨bÑ1Ô1Ñ2Ô2Ð2ØÐÐÐØ×ÒÑ!Ô!Ð!ØˆHøøøàÐ(Ð(Ð(Ð(Ð(Ð(ð	)ð 	)s	   š(¨<A&Úar_EGÚarÚca_ADÚcaÚde_DEÚdeÚel_GRÚelÚesÚfi_FIÚfiÚfr_FRÚfrÚid_IDÚidÚit_ITÚitÚja_JPÚjaÚko_KRÚkoÚnl_NLÚnlÚpt_PTÚptÚpt_BRÚru_RUÚruÚsk_SKÚskÚsr_RSÚsrÚthÚukÚvizzh-hanszzh-hant)Úth_THÚuk_UAÚvi_VNÚzh_HANSÚzh_HANTÚenc                 óÖ   — t           j        j        j        j        }|dk    r.t          j        dd¦  «                             d¦  «        d         }t           	                    || ¦  «        S )zÆ
    :return:
       The language code used for user manual URL component based on the current language user-preference,
       falling back to the ``default`` when unavailable.
    :rtype: str
    ÚDEFAULTÚLANGrõ   r?   r'   )
r@   rŒ   ÚpreferencesÚviewÚlanguager’   ÚgetenvÚsplitÚ_manual_language_codesr4   )ri  rÙ  s     r=   r   r     sY   € õ Œ|Ô'Ô,Ô5€HØ�9ÒÐÝ”:˜f bÑ)Ô)×/Ò/°Ñ4Ô4°QÔ7ˆÝ!×%Ò% h°Ñ8Ô8Ð8rW   c                 ó�   — dx}x}}| r:|r4d                      | |f¦  «        x}}|rd                     ||¦  «        x}}n| x}}|||fS )aú  
    Create RNA "paths" from given names.

    :arg struct_name: Name of a RNA struct (like e.g. "Scene").
    :type struct_name: str
    :arg prop_name: Name of a RNA struct's property.
    :type prop_name: str
    :arg enum_name: Name of a RNA enum identifier.
    :type enum_name: str
    :return: A triple of three "RNA paths"
       (most_complete_path, "struct.prop", "struct.prop:'enum'").
       If no enum_name is given, the third element will always be void.
    :rtype: tuple[str, str, str]
    rõ   r?   z{:s}:'{:s}')r“   rD   )Ústruct_nameÚ	prop_nameÚ	enum_nameÚsrcÚsrc_rnaÚsrc_enums         r=   r   r   #  sy   € ð  "Ð!€CÐ!ˆ'�HØð (Øð 	(ØŸHšH k°9Ð%=Ñ>Ô>Ð>ˆC�'Øð JØ!.×!5Ò!5°g¸yÑ!IÔ!IÐI��høà'Ð'ˆC�'Ø�˜Ð!Ð!rW   )rÓ  )Qre  Ú__all__r@   r(   r"   r   r   r   r   r   r   r   r   rÂ   r#   r   r%   r­   r)   rh  Úosr’   r;  r3   r*  r†   rŒ   r×  r„   rA   Úfactory_startupr�   r‘   rR   Údirnamerl   rÃ   r‚   rÕ   r&   rO   rT   rV   r[   r	   rw   Ú	bpy_typesrs   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   rd   rW   r=   ú<module>ré     sÜ  ðð
ð ð
&€ðPð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð  Ð Ð Ð Ø Ð Ð Ð Ø Ð Ð Ð à "Ð "Ð "Ð "àŒ|Ô'€Ø”hÔ.Ð ð +Ð ð ”8×#Ò# C¤H×$4Ò$4°S´X×5EÒ5EÀcÄh×FVÒFVÐW_ÑF`ÔF`Ñ5aÔ5aÑ$bÔ$bÑcÔcÐ ð ˜™œÐ ð #ð "ð "ð "ð "ð "ðJð ð ðD ˜™œÐ ð)ð )ð )ð)ð )ð )ðð ð ð0 Ð à Ð Ð Ð ð $)¸%ÈDð Xoð Xoð Xoð Xoð Xoðv /4ð ð ð ð ð ð25ð 5ð 5ðð ð ðð ð ð  ¨4¸5È4Ðhlð ?ð ?ð ?ð ?ð ?ðD*ð *ð *ð2  $ð ð ð ð ð ð8ð ð ð>ð ð ð0ð ð ð&ð ð ð2ð ð ð8ð ð ð& %)°4ð ð ð ð ð ð( $(°$ð ð ð ð ð ðD #'°ð %ð %ð %ð %ð %ð2  $¨dð ð ð ð ð ð: 49¸eð  ð  ð  ð  ð  ð*$ð $ð $ð" '+ð $ð $ð $ð $ð $ðN *,°Eð ð ð ð ð ðD *,°Eð .ð .ð .ð .ð .ðb ð  ð  ð % ð % ð % ðX &*°UÀ%ð }&ð }&ð }&ð }&ð }&ð@J&ð J&ð J&ðdCð Cð Cð $Ð$€ð$ð $ð $ð$ð $ð $ð)ð )ð )ð5ð ˆTð5ð ˆTð5ð ˆTð5ð ˆTð5ð 	ˆ$ð5ð  ˆTð!5ð" ˆTð#5ð. ˆTð/5ð0 ˆTð15ð2 ˆTð35ð: ˆTð;5ðB ˆTðC5ðF ˆTðG5ðJ ˆTðK5ðN ˆTðO5ðP ˆTðQ5ðT ˆTðU5ð\ ààØØði5ð 5ð 5Ð ðp
9ð 
9ð 
9ð 
9ð"ð "ð "ð "ð "rW   