� ��g����� �dZddlZddlZddlZddlmZddlZddlmZm Z ddl m Z ddl m Z ddlmZddlmZdd lmZdd lmZdd lmZdd lmZdd lmZmZmZddlmZm Z m!Z!m"Z"m#Z#ddl$m%Z%ddl&m'Z'ddl(m)Z)ddl*m+Z+m,Z,ej-d��Z.ddl/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:Gd�de;��Z<Gd�de<��Z=e=�>ej?d��d���Z@d�ZAdTd�ZBe=�>ejC��d���Z@e=�>ejD��d���Z@d �ZEd!�ZFe=�>ejG��d"���Z@e=�>ejH��d#���Z@d$�ZIdUd%�ZJdUd&�ZKdVd(�ZLd)�ZMe=�>ejN��d*���Z@dWd-�ZOe=�>ejP��d.���Z@e=�>ejQ��d/���Z@d0�ZRd1�ZSd2�ZTd3�ZUd4�ZVe=�>ejW��d5���Z@e=�>ejX��d6���Z@e=�>ejY��d7���Z@Gd8�d9e=��ZZeZ�>ej[��d:���Z@eZ�>ejD��d;���Z@eZ�>ejC��d<���Z@Gd=�d>e=��Z\e\�>ej[��d?���Z@e\�>ejD��d@���Z@e\�>ejC��dA���Z@GdB�dCe=��Z]dD�Z^e]�>ej_��dE���Z@e]�>ej[��dF���Z@e]�>ejD��dG���Z@e]�>ejC��dH���Z@GdI�dJe]��Z`e`�>eja��dK���Z@e`�>ejb��dL���Z@dM�ZcdN�Zde`�>ejeejff��dO���Z@e`�>ejgejhf��dP���Z@e`�>eji��dQ���Z@e`�>ejjdR��dS���Z@dS)Xz4 Merge OpenType Layout tables (GDEF / GPOS / GSUB). �N)�ior)�MAX_PAINT_COLR_LAYER_COUNT�LayerReuseCache)� classifyTools)�otRound)�build_n_ary_tree)�otTables)�otBase)�BaseFixedValue)�dfs_base_table)� DefaultTable)�builder�models�varStore)�nonNone�allNone�allEqual� allEqualTo�subList)�VarStoreInstancer)�reduce)�buildSinglePos)�_compression_level_from_env�compact_pair_poszfontTools.varLib.merger�) �ShouldBeConstant� FoundANone�MismatchedTypes�NotANone� LengthsDiffer� KeysDiffer�InconsistentGlyphOrder�InconsistentExtensions�InconsistentFormats�UnsupportedFormat�VarLibMergeErrorc�b�eZdZdd�Zed d���Zeifd���Zd d�Zd�Zd �Z d �Z dS) �MergerNc�"�||_d|_dS�N)�font�ttfs)�selfr+s �g/home/asafur/pinokio/api/open-webui.git/app/env/lib/python3.11/site-packages/fontTools/varLib/merger.py�__init__zMerger.__init__/s���� ��� � � �r*c�������tks Jd���d�jvri�_t���ttjfvr�f�t���t kr�f����fd�}|S)NzSubclass Merger instead.�mergersc����|jdksJ�g}�D][}||vr�|�|���j�|i��}�D]!}||vsJd|j�d|�d����|||<�"�\dS)N�mergez Oops, class 'z' has merge function for 'z' defined already.)�__name__�appendr2� setdefault)�method�done�clazzr2�attr�attrs�celf�clazzess ���r.�wrapperzMerger.merger.<locals>.wrapper>s�����?�g�-�-�-�-��D� � +� +���D�=�=��� � �E�"�"�"��,�1�1�%��<�<��!�+�+�D��w�.�.�.�.� �>�>�>�4�4�4�1�/�.�.�%+�G�D�M�M� +� �4r0)r(�__dict__r2�type�enum�EnumMeta�str)r=r>r<r?s``` r.�mergerz Merger.merger4s�������v�~�~�~�9�~�~�~� �D�M� )� )��D�L� ��=�=�T�4�=�1� 1� 1��j�G� ��;�;�#� � ��H�E� � � � � � � � �r0c��t|��}|���D]8}t|dd��}|�n"|j�|d��}|�|cS�9|S)Nr2)rA�mro�getattrr2�get)r=�thing�_default�typr2�ms r.� mergersForzMerger.mergersForPsp���5�k�k���H�H�J�J� � �D��d�I�t�4�4�G������ � � ��d�+�+�A��}�������r0�c��� � �t|d��r|�d���|D](}t|d��r|�d����)tt|�������� t � fd�|D����st |� d�|D������|�|��}|�d|j j ��} � D]H� � |vr�t|� ��}� fd�|D��}|�� |��} | |||���IdS#t$r#} | j �d � z���d} ~ wwxYw) N�ensureDecompiledF)�recursec3�|�K�|]6}�tt|�������kV��7dSr*��sorted�vars�keys)�.0�vrWs �r.� <genexpr>z&Merger.mergeObjects.<locals>.<genexpr>fs>�����?�?�a�4�6�$�q�'�'�,�,�.�.�1�1�1�?�?�?�?�?�?r0c�j�g|]0}tt|���������1SrOrT�rXrYs r.� <listcomp>z'Merger.mergeObjects.<locals>.<listcomp>hs.��)N�)N�)N�Q�&��a�������*@�*@�)N�)N�)Nr0��expected�got�*c�0��g|]}t|�����SrO�rH)rX�table�keys �r.r]z'Merger.mergeObjects.<locals>.<listcomp>qs#���?�?�?�%�'�%��-�-�?�?�?r0�.)�hasattrrQrUrVrW�allr!rNrI� __class__� mergeThingsrHr&�stackr6) r-�out�lst�exclude�itemr2� defaultMerger�value�values� mergerFunc�ererWs @@r.� mergeObjectszMerger.mergeObjects_s����� �3�*� +� +� 0� � � �� � /� /� /�� 5� 5�D��t�/�0�0� 5��%�%�e�%�4�4�4���d�3�i�i�n�n�&�&�'�'���?�?�?�?�3�?�?�?�?�?� ���t�)N�)N�#�)N�)N�)N���� ��/�/�#�&�&��� � �C���)C�D�D� � �� 0� 0���'�>�>����S�)�)��?�?�?�?�3�?�?�?��$�[�[��m�<�<� �� �4���/�/�/�/�  0� 0�� � � � � �G�N�N�3��9� %� %� %� ����� ���s�/A D<�< E)�E$�$E)c�l�t||t��s)t|t|��d�|D������tt |t |�����D]O\}\}} |�||��� #t $r#}|j�d|z���d}~wwxYwdS)Nc�,�g|]}t|����SrO��len�rX�xs r.r]z%Merger.mergeLists.<locals>.<listcomp>zs��=R�=R�=R��c�!�f�f�=R�=R�=Rr0r^z[%d]) rryr � enumerate�ziprjr&rkr6)r-rlrm�irqrrrts r.� mergeListszMerger.mergeListsxs����#�s�C�(�(� T���s�3�x�x�=R�=R�c�=R�=R�=R�S�S�S� S�"+�C��S�#�Y�,?�,?�"@�"@� � � �A���v� �� � ���/�/�/�/��#� � � �����v��z�*�*�*������ ���� � s�-B� B1�B,�,B1c�l�t||t��s.t|t|��jd�|D������|�|���dd��}|�||||��dSt |tj��r$t||��st|||����dSt|d��r|� ||��dSt |t��r|� ||��dSt||��st|||����dS)Nc�6�g|]}t|��j��SrO)rAr5rzs r.r]z&Merger.mergeThings.<locals>.<listcomp>�s!��7V�7V�7V�Q��Q���8H�7V�7V�7Vr0r^r@)rrArr5rNrI� isinstancerB�Enumrrgru�listr)r-rlrmrss r.rjzMerger.mergeThings�sk���#�s�D�)�)� �!��t�C�y�y�1�7V�7V�RU�7V�7V�7V���� ��_�_�S�)�)�-�-�d�D�9�9� � � !� �J�t�S�#� &� &� &� &� &� ��T�Y� '� '� D��c�3�'�'� D�&�t�c�s�C�C�C�C� D� D� �S�*� %� %� D� � � �c�3� '� '� '� '� '� ��T� "� "� D� �O�O�C�� %� %� %� %� %��c�3�'�'� D�&�t�c�s�C�C�C�C� D� Dr0c����|D]d��|vr� ||_|�|��fd�|D�����8#t$r }|j�����d}~wwxYwdS)Nc�:��g|]}|������SrO�rI)rXrM�tags �r.r]z&Merger.mergeTables.<locals>.<listcomp>�s#���,M�,M�,M�A�Q�U�U�3�Z�Z�,M�,M�,Mr0)r,rjr&rkr6)r-r+� master_ttfs� tableTagsrtr�s @r.� mergeTableszMerger.mergeTables�s����� � �C��$���� �'�� �� � ��c��,M�,M�,M�,M��,M�,M�,M�N�N�N�N��#� � � �����s�#�#�#������ ����  � s�/<� A&�A!�!A&)r*)rO) r5� __module__� __qualname__r/� classmethodrErNrurrjr�rOr0r.r(r(.s����������� �����[��6�)+� � � ��[� �����2���D�D�D�* � � � � r0r(c��eZdZdS)�AligningMergerN)r5r�r�rOr0r.r�r��s�������Dr0r�� GlyphClassDefc���|�#t|��st|d|����dSd�|D��}i|_|j}t��}|jd�|D���|D]\�t �fd�|D����}t |��st||d|d�zg����|sd|�<�Q|d|�<�]dS)Nr^c��g|] }|j�� SrO)� classDefs�rX�ls r.r]zmerge.<locals>.<listcomp>�s�� $� $� $�1�1�;� $� $� $r0c�6�g|]}|�����SrO)rWr�s r.r]zmerge.<locals>.<listcomp>�s ��+�+�+�!�Q�V�V�X�X�+�+�+r0c3�B�K�|]}|����V��dSr*r�)rXr��ks �r.rZzmerge.<locals>.<genexpr>�s-�����2�2��A�E�E�!�H�H�2�2�2�2�2�2r0rrf)r_r`rk)rrr��set�updaterrr)rEr-rm�allKeys� allValuesr�s @r.r4r4�s��� �|��s�|�|� ;��6�D�c�:�:�:� :��� $� $�� $� $� $�C��D�N� �>�D��e�e�G��G�N�+�+�s�+�+�+�,�,� � #� #���2�2�2�2�c�2�2�2�2�2� �� �"�"� �"���1��3�s�Q�w�i���� �� #��D��G�G���l�D��G�G� #� #r0c�����jdkr�Stj��}d|_�j|_�j|_�fd�|jjD��|_t|j��|_|S)N�c���g|] }�j�� SrO��Value)rX�_r-s �r.r]z._SinglePosUpgradeToFormat2.<locals>.<listcomp>�s���9�9�9����9�9�9r0) �Format�ot� SinglePos�Coverage� ValueFormat�glyphsr�ry� ValueCount)r-�rets` r.�_SinglePosUpgradeToFormat2r��sn��� �{�a���� � �,�.�.�C��C�J��=�C�L��&�C�O�9�9�9�9�S�\�%8�9�9�9�C�I����^�^�C�N� �Jr0c����� �|� d�|D��}nd�t||��D��}t��}|j|�|���j� t |� ����t � fd�|D����st���~d}|���fd�|D��}n1t|��t|��ksJ���fd�|D��}�|fS)aTTakes font and list of glyph lists (must be sorted by glyph id), and returns two things: - Combined glyph list, - If values_lst is None, return input glyph lists, but padded with None when a glyph was missing in a list. Otherwise, return values_lst list-of-list, padded with None to match combined glyph lists. Nc�,�g|]}t|����SrO)r�r�s r.r]z&_merge_GlyphOrders.<locals>.<listcomp>�s��)�)�)��S��V�V�)�)�)r0c�H�g|]\}}d�t||��D���� S)c��i|]\}}||�� SrOrO)rX�grYs r.� <dictcomp>z1_merge_GlyphOrders.<locals>.<listcomp>.<dictcomp>�s��2�2�2�t�q�!�a��2�2�2r0)r})rXr��vss r.r]z&_merge_GlyphOrders.<locals>.<listcomp>�s3��U�U�U�u�q�"�2�2�s�1�b�z�z�2�2�2�U�U�Ur0�rec3�B�K�|]}t|����|kV��dS)r�N)rU)rXr��sortKeys �r.rZz%_merge_GlyphOrders.<locals>.<genexpr>�s5�����;�;��v�b�g�&�&�&�"�,�;�;�;�;�;�;r0c�0���g|]���fd��D����S)c� ��g|] }|�vr|n��� SrOrO�rX�glyph�default�dict_sets ��r.r]z1_merge_GlyphOrders.<locals>.<listcomp>.<listcomp>�s'��� H� H� H��e�x�'�'�U�U�W� H� H� Hr0rO�rXr�r��orders @��r.r]z&_merge_GlyphOrders.<locals>.<listcomp>�sB���� � � �� I� H� H� H� H�%� H� H� H� � � r0c�0���g|]���fd��D����S)c�,��g|]}|�vr�|n���SrOrOr�s ��r.r]z1_merge_GlyphOrders.<locals>.<listcomp>.<listcomp>�s+��� R� R� R�5��� 1� 1�X�e�_�_�w� R� R� Rr0rOr�s @��r.r]z&_merge_GlyphOrders.<locals>.<listcomp>�sB���� � � �� S� R� R� R� R�E� R� R� R� � � r0) r}r�r��getReverseGlyphMap� __getitem__rUrhr"ry) r+rm� values_lstr�� dict_sets�combined� paddedValues�paddedr�r�s ` @@r.�_merge_GlyphOrdersr��sC�������)�)�S�)�)�)� � �U�U��C��@T�@T�U�U�U� ��u�u�H��H�O�Y����%�%�'�'�3�G� �8�� )� )� )�E� �;�;�;�;�s�;�;�;� ;� ;�'�$�&�&�&���L��� � � � � �%� � � ��� �3�x�x�3�z�?�?�*�*�*�*� � � � � �%� � � �� �&�=�r0c�z�|dj���|_|�||��dS�Nr�r@�copyru�rEr-rms r.r4r4��9����F�O�(�(�*�*�D�M� ����c�"�"�"�"�"r0c�z�|dj���|_|�||��dSr�r�r�s r.r4r4�r�r0c�0�|D]�}|�2t|��tjks|j�||jjvr�7|jdkr |jcS|jdkr,|j|jj�|��cSt|d����dS)Nrr��single positioning lookup��subtable) rAr�r�r�r�r�r��indexr%)rE� subtablesr�r-s r.�%_Lookup_SinglePos_get_effective_valuer�s���� R� R�� �L��D�z�z�R�\�)�)��}�$��D�M�0�0�0� � �;�!� � ��:� � � � �[�A� � ��:�d�m�2�8�8��?�?�@� @� @� @�#�F�5P�Q�Q�Q� Q� �4r0c� �|D]�}|�2t|��tjks|j�||jjvr�7|jdkrH|j|jj�|��}|j}|D]}|j |kr|ccS���|jdkrZ|j j � |d��}|j j � |d��} |j|j| cSt!|d����dS)Nrr�r�pair positioning lookupr�)rAr��PairPosr�r�r��PairSetr��PairValueRecord� SecondGlyph� ClassDef1r�rI� ClassDef2� Class1Record� Class2Recordr%) rEr�� firstGlyph� secondGlyphr-�ps�pvr�rec�klass1�klass2s r.�(_Lookup_PairPos_get_effective_value_pairr�s#���P�P�� �L��D�z�z�R�Z�'�'��}�$����!5�5�5� � �;�!� � ���d�m�2�8�8��D�D�E�B��$�C�� � ���?�k�1�1��J�J�J�J�J�2� � �[�A� � ��^�-�1�1�*�a�@�@�F��^�-�1�1�+�q�A�A�F��$�V�,�9�&�A� A� A� A�#�F�5N�O�O�O� O� �4r0c�� � �ttjd�|D��d��x|_� t |��dks� dzdkst |d����|jj� td�|D����r�t� fd�|D����rjtj � |j ��|_ � dkr%|� |j d �|D����|j � ��|_dSd |_d �|D��}t|jd �|D��d �|D����\}}||j_� fd�|D��|_ t |j ��|_t%|��D]Z\}}t%|��D]E\}}||��t'||j||��} | �tj � ��} | ||<�F�[|�|j |��|�||d���ttjd�|j D��d��|_dS)Nc��g|] }|j�� SrO�r�r�s r.r]zmerge.<locals>.<listcomp>6s��8T�8T�8T�1���8T�8T�8Tr0rri����r�r�c3�,K�|]}|jdkV��dS)rN�r�r\s r.rZzmerge.<locals>.<genexpr><s(���� &� &�Q�1�8�q�=� &� &� &� &� &� &r0c3�8�K�|]}�|jjkV��dSr*�r�r�)rXrY�coverageGlyphss �r.rZzmerge.<locals>.<genexpr><s>�����/�/�01��!�*�+�+�/�/�/�/�/�/r0c�P�g|]#}|j�|jntj����$Sr*)r�r � ValueRecordr\s r.r]zmerge.<locals>.<listcomp>Fs.��W�W�W�a�A�G�/����V�5G�5I�5I�W�W�Wr0r�c�,�g|]}t|����SrO)r�r\s r.r]zmerge.<locals>.<listcomp>Ms!�� 6� 6� 6�Q� %�a� (� (� 6� 6� 6r0c�&�g|]}|jj��SrOr�r\s r.r]zmerge.<locals>.<listcomp>Qs��5�5�5�A�a�j�'�5�5�5r0c��g|] }|j�� SrOr�r\s r.r]zmerge.<locals>.<listcomp>Qs��7M�7M�7M�A���7M�7M�7Mr0c�8��g|]}tj�����SrO)r r�)rXr�� valueFormats �r.r]zmerge.<locals>.<listcomp>Us$���B�B�B�a�&�$�[�1�1�B�B�Br0)r�r�r�r�r��rnc�6�g|]}|�����SrO)�getEffectiveFormatr\s r.r]zmerge.<locals>.<listcomp>ns$��@�@�@��Q�)�)�+�+�@�@�@r0)r�int�__or__r�ryr%r�r�rhr r�r�rj� getFormatr�r�r+r�r|r��lookup_subtablesrru) rEr-rmr�r�r~rr�jr�rYr�r�s @@r.r4r44s�����%+�C�J�8T�8T�PS�8T�8T�8T�VW�%X�%X�X�D��{� ��H�H��M�M�k�D�0�A�5�5���1L�M�M�M�M��]�)�N� � &� &�#� &� &� &�&�&� �3�/�/�/�/�58�/�/�/�,�,� ��'� �T�Z�@�@�� � �!� � � � � �� �W�W�SV�W�W�W� � � � �:�/�/�1�1������D�K� 6� 6�#� 6� 6� 6�C�(�� �5�5��5�5�5�7M�7M��7M�7M�7M���N�F�F�"�D�M��B�B�B�B�6�B�B�B�D�J��$�*�o�o�D�O��v�&�&� � � ��6�!�&�)�)� � �H�A�u��a�y�$�� 6���/��2�E���A��y��&�{�3�3���F�1�I�I� � ���d�j�&�)�)�)� ��� �c�W������ � �@�@�T�Z�@�@�@�!���D���r0c���t|jd�|D��d�|D����\}}gx|_}|D]}tj��}||_|jrt j|j��nd|_|j rt j|j ��nd|_ |� |����t|j��|_ t|��D]�\}} t|��D]�\} }tj��} || _| | � | | } n"t||j||j|��} | �d\} }n"t%| dd��} t%| dd��}|jrt j|j| ���nd| _|j rt j|j |���nd| _ | | | <�Ԍ�|`|�|j|��dS)Nc�0�g|]}d�|jD����S)c��g|] }|j�� SrO�r�r\s r.r]z$merge.<locals>.<listcomp>.<listcomp>w��� 4� 4� 4�A�!�-� 4� 4� 4r0�r��rXr�s r.r]zmerge.<locals>.<listcomp>w�*��C�C�C�� 4� 4��!3� 4� 4� 4�C�C�Cr0c��g|] }|j�� SrOrrs r.r]zmerge.<locals>.<listcomp>x���*�*�*��� �*�*�*r0�NN�Value1�Value2)�src)r�r+r�r�r�� valueFormat1r r�r � valueFormat2r r6ry�PairValueCountr|r�r�� _firstGlyphrHr)rEr-rmr�r��pvrsr�r�r~rrr�rY�vpair�v1�v2s r.r4r4rs7��(�� �C�C�s�C�C�C�*�*�c�*�*�*���N�F�F� #%�$�D��4�� � ��� �"�"�����7=�7J� T�F� �v�2� 3� 3� 3�PT� � �8>�7J� T�F� �v�2� 3� 3� 3�PT� � � � � �C������d�2�3�3�D���v�&�&��� ��6�!�&�)�)� � �H�A�u��"�$�$�A�!�A�M��a�y�$��q� ���@��F�3�A�6��8H�%�����}�#���B�B��U�H�d�3�3���U�H�d�3�3���&���"�6�#6�B�?�?�?�?�� �H��&���"�6�#6�B�?�?�?�?�� �H� �F�1�I�I�3 �4 �� ���d�*�F�3�3�3�3�3r0c��td�|D����s Jd���|�||d���tj��}g|_d|_t |jd�|D��d�|D��|���\}}||j_ d �|D��|_t|j��|_ t||j��D] \}}||_ � |�|j|��dS) Nc�2�g|]}|j� |jdk��S�r�r�� ValueFormat2r�s r.r]z)_PairPosFormat1_merge.<locals>.<listcomp>��&��7�7�7��Q�Y�7���1� �7�7�7r0�Report bug against fonttools.)r�r�� PairSetCount� ValueFormat1rr�rc�&�g|]}|jj��SrOr�r\s r.r]z)_PairPosFormat1_merge.<locals>.<listcomp>����(�(�(�q��� �(�(�(r0c��g|] }|j�� SrO�r�r\s r.r]z)_PairPosFormat1_merge.<locals>.<listcomp>�s�� � � �q��� � � r0�r�c�4�g|]}tj����SrO)r�r�)rXr�s r.r]z)_PairPosFormat1_merge.<locals>.<listcomp>�s��1�1�1�Q�B�J�L�L�1�1�1r0)rrur�r�r�rr�r+r�r�ryrr}rr)r-rmrE�emptyr�r�r�r�s r.�_PairPosFormat1_merger&�s>�� �7�7�c�7�7�7� � �'�'�&�'�'� �  ��� � �W����� �J�L�L�E��E���E��(�� �(�(�C�(�(�(� � �C� � � �� ���N�F�F�"�D�M��1�1�&�1�1�1�D�L��D�L�)�)�D������.�.��� ��r����� ���d�l�F�+�+�+�+�+r0c�$�t|t��r|}n|r|jr|jni}|r!t|�����nd}g}t |dz��D]#}|�t�����$|���D] \}}||� |���!|�d|d<nKt|��x|d<}|dd�D],} | � |��|� | ���-|S)Nrr) r��dictr��maxrr�ranger6r��items�add�intersection_update�difference_update) r-� allGlyphsr�rMr�r�r�rY�class0�ss r.�_ClassDef_invertr2�s/���$����F�� � �&*�E�t�~�E�D�N�N�2� �#,�3��I� � � � ����!�A� �C� �1�q�5�\�\���� � � �3�5�5��������!�!�����1� �A�� � �1� � � � �����A����i�.�.�(��A����Q�R�R�� (� (�A� � !� !�&� )� )� )� � $� $�Q� '� '� '� '� �Jr0c���tj��}ix|_}|du}|rdgt|��z}t j��}t ||��D]6\}}t||��}|� |dd�}|�|���7|� ��} |r"| � dt����t| ��D]\} } | dkr� | D]} | || <��|| fS)Nrr) r��ClassDefr�ryr� Classifierr}r2r�� getClasses�insertr�r|) rm� allGlyphsesr-r��allGlyphsesWasNone� classifier�classDefr/�sets�classesr~�classSetr�s r.�_ClassDef_merge_classifyr?�s&�� �;�=�=�D�!#�#�D�N�Y�$��,���(��f�s�3�x�x�'� ��)�+�+�J�"�3� �4�4� � ���)���)�4�4�� � �����8�D����$������#�#�%�%�G��!����q�#�%�%� � � � ��)�)��� ��8� ��6�6� �� � �A��I�a�L�L� � ��=�r0Fc��d�|D��}td�|D��d�|D����\|_}t|��|_g}t ||��D�]S\}}d} t |jj��} |jj} g} |D�] } tt| ����}|| vr�d} | ��tj ��} gx}| _ t|j��D]}}|rd}natj ��}|jrt#j|j��nd|_|jrt#j|j��nd|_|�|���~| }n| �|d��}||}| �|���� |�| ����U|}~td�|D����\|_}t|��|_g}t ||��D]�\}}|jj}g} |D]�}|j }tj ��}gx}|_ |D]n} | s |d}n:tt| ����}|�|d��}||}|�t3j|�����o| �|����|�| ����|}~|S)Nc��g|] }|j�� SrO)r�r�s r.r]z2_PairPosFormat2_align_matrices.<locals>.<listcomp>s��,�,�,�1���,�,�,r0c��g|] }|j�� SrO)r�r�s r.r]z2_PairPosFormat2_align_matrices.<locals>.<listcomp>s��"�"�"����"�"�"r0c�&�g|]}|jj��SrOr�r�s r.r]z2_PairPosFormat2_align_matrices.<locals>.<listcomp>s��$D�$D�$D�1�Q�Z�%6�$D�$D�$Dr0rc��g|] }|j�� SrO)r�r�s r.r]z2_PairPosFormat2_align_matrices.<locals>.<listcomp>4s��7Q�7Q�7Q��� �7Q�7Q�7Qr0)r?r�ry� Class1Countr}r�r�r�r��next�iterr�r�r�r*� Class2Countrr r�r rr r6rIr�r��deepcopy)r-rmr+� transparent�matricesr=� new_matricesr��matrix�nullRow�coverage� classDef1� class1Recordsr>� exemplarGlyph� class2recordsr��rec2�rec1�klass� classDef2�rec1old�oldClass2Records�rec1new� class2Recordss r.�_PairPosFormat2_align_matricesr\s:��,�,��,�,�,�H�7�"�"�c�"�"�"�$D�$D��$D�$D�$D����D�N�G��7�|�|�D���L���h�'�'�&+�&+� ��6����q�z�(�)�)���K�)� �� �� '� '�H� ��h���0�0�M��H�,�,� ���?� �o�/�/�G�;=�=�M�G�$8�"�1�=�1�1�3�3��&� �#'�D�D�#%�?�#4�#4�D�$(�#4�!*�� 2�4�3D� E� E� E�%)�!�K�$(�#4�!*�� 2�4�3D� E� E� E�%)�!�K� &�,�,�T�2�2�2�2����!� � �m�Q�7�7���e�}�� � � �� &� &� &� &����M�*�*�*�*��H��7�7Q�7Q�S�7Q�7Q�7Q�R�R��D�N�G��7�|�|�D���L���h�'�'�+�+� ��6��K�)� �� �� *� *�G�&�3� ��o�'�'�G�35� 5�M�G�0�#� :� :���3�+�A�.�D�D�$(��h���$8�$8�M�%�M�M�-��;�;�E�+�E�2�D��$�$�T�]�4�%8�%8�9�9�9�9� � � �� )� )� )� )����M�*�*�*�*��H�� �Or0c���td�|D����s Jd���|�||d���t|jd�|D����\}}||j_t ||j��D]#\}}|jj|kr||dksJ��$t|||j��}t|d��|_ |� |j |��dS)Nc�2�g|]}|j� |jdk��Sr�r�rr�s r.r]z)_PairPosFormat2_merge.<locals>.<listcomp>P�&��<�<�<��Q�^�<���1� �<�<�<r0r)r�r�rEr�rHr�rrr�c�&�g|]}|jj��SrOr�r\s r.r]z)_PairPosFormat2_merge.<locals>.<listcomp>cs��0P�0P�0P�q���1B�0P�0P�0Pr0�����r) rrur�r+r�r�r}r�r\r�r�r)r-rmrEr�r�r�r�rKs r.�_PairPosFormat2_mergercNs$�� �<�<�c�<�<�<� � �'�'�&�'�'� � ��� � �  �� � � � #�6�;�0P�0P�C�0P�0P�0P�Q�Q�I�F�A�!�D�M���C��!8�9�9�&�&� ��9� �:� �� &� &�� �"� �%�%�%�%��-�d�C���E�E�H��X�a�[�)�)�D�� ���d�'��2�2�2�2�2r0c�Z�ttjd�|D��d��x|_|_ttjd�|D��d��x|_|_|jdkrt|||��n.|jdkrt|||��nt|d����|`|`d}d}|jdkri|j D]`}|j D]V}t|dd��}|�||���z}t|d d��}|�||���z}�W�ans|jdkrh|jD]`} | jD]V} t| dd��}|�||���z}t| d d��}|�||���z}�W�a||_||_dS) Nc��g|] }|j�� SrO�rr�s r.r]zmerge.<locals>.<listcomp>z���1�1�1��Q�^�1�1�1r0rc��g|] }|j�� SrO�rr�s r.r]zmerge.<locals>.<listcomp>}rgr0rr�r�r�r r )rr�r�rrrrr�r&rcr%r�r�rHr�r�r�) rEr-rm�vf1�vf2�pairSet�pairValueRecord�pv1�pv2� class1Record� class2Records r.r4r4ws ��.4� � �1�1�S�1�1�1�1�/�/��F��$�+�/5� � �1�1�S�1�1�1�1�/�/��F��$�+� �{�a����d�C��0�0�0�0� ��� � ��d�C��0�0�0�0���1J�K�K�K�K���V�0� �C� �C� �{�a����|� +� +�G�#*�#:� +� +���o�x��>�>���?��3�=�=�?�?�*�C��o�x��>�>���?��3�=�=�?�?�*�C��  +� +� ��� � � �-� +� +�L� ,� 9� +� +� ��l�H�d�;�;���?��3�=�=�?�?�*�C��l�H�d�;�;���?��3�=�=�?�?�*�C��  +��D���D���r0�Mark�Basec ����td�|D����|_t|j�fd�|D���fd�|D����\}}|t |�dz��_t|j�fd�|D���fd�|D����\}}|t |�dz��_g} t |t |���D]�\} } d�| D��} t| ��st|| d| � ���tj ��} | d| _ d �| D��}t|��rd}n0tj ��}d |_|�||��|| _| �| ����tj��}| |_ t'| ��|_t+|�d z|��g} t |t |���D�]\} } t| ��rd} n�t t�d z����} g}t+| �dz|���fd�| D��}|D]0}|�dg|jt'|��z z���1t |�D]Y}t|��rd}n0tj ��}d |_|�||��|�|���Z| �| ���� t t�d z����}t+|�d z| ��t+|�dzt'| ����t+|�d z|��dS)Nc3�$K�|] }|jV�� dSr*)� ClassCountr�s r.rZz,_MarkBasePosFormat1_merge.<locals>.<genexpr>�s$����4�4�1�!�,�4�4�4�4�4�4r0c�@��g|]}t|�dz��j��S�r��rHr��rXr�rrs �r.r]z-_MarkBasePosFormat1_merge.<locals>.<listcomp>��+���;�;�;�!���D�:�%� &� &� -�;�;�;r0c�@��g|]}t|�dz��j��S)�Array)rH� MarkRecordrzs �r.r]z-_MarkBasePosFormat1_merge.<locals>.<listcomp>�s*���<�<�<�1���D�7�N� #� #� .�<�<�<r0r�c�@��g|]}t|�dz��j��Srxry�rXr�rss �r.r]z-_MarkBasePosFormat1_merge.<locals>.<listcomp>�r{r0c �X��g|]&}tt|�dz���dz����'S)r}�Recordrcr�s �r.r]z-_MarkBasePosFormat1_merge.<locals>.<listcomp>�s5���K�K�K�!����D�7�N�+�+�T�H�_� =� =�K�K�Kr0c� �g|] }|�|j�� Sr*)�Class�rX�rs r.r]z-_MarkBasePosFormat1_merge.<locals>.<listcomp>�s��E�E�E�!�q�}�a�g�}�}�}r0rr^c�$�g|] }|�dn|j��Sr*)� MarkAnchorr�s r.r]z-_MarkBasePosFormat1_merge.<locals>.<listcomp>�s"��T�T�T�!�!�)�$�$���T�T�Tr0rr}r��Anchorc�>��g|]}|�gnt|�dz����S)Nr�rc)rXr�rss �r.r]z-_MarkBasePosFormat1_merge.<locals>.<listcomp>�s<������EF�a�i���W�Q��x��%@�%@���r0�Count)r)rvr�r+rHr�r}rrr�r~r�rr�r�rjr�r6� MarkArrayry� MarkCount�setattr�extend)r-rmrErrrs�MarkCoverageGlyphs� MarkRecords�BaseCoverageGlyphs� BaseRecords�recordsr�� glyphRecords� allClassesr�� allAnchors�anchor�array�anchors� glyphAnchorsr�s `` r.�_MarkBasePosFormat1_merger��s������4�4��4�4�4�4�4�D�O�&8�� �;�;�;�;�s�;�;�;�<�<�<�<��<�<�<�'�'�#�� � /A�G�D�$��#�$�$�+�&8�� �;�;�;�;�s�;�;�;�K�K�K�K�s�K�K�K�'�'�#�� � /A�G�D�$��#�$�$�+��G��1�3� �3D�E�E� � ���<�E�E�|�E�E�E� �$� �#�#� $�"�6�J�q�M�z�R�R�R� R��-�/�/�C�"�1� �C�I�T�T�|�T�T�T�J��z�"�"� 7��������� !�� ��"�"�6�:�6�6�6�#�C�N����s����� �L�N�N�E��E���'�l�l�E�O� �D�$��.�%�(�(�(��G��1�3� �3D�E�E�����<� �<� � � '��C�C�.�'�"�d�X�o�.�.�0�0�C��G� �C����'� 2� 2� 2�����JV����L�"� >� >�����$��4�?�S��V�V�#;�<�=�=�=�=�!�<�0� '� '� ��:�&�&�;�!�F�F��Y�[�[�F�$%�F�M��&�&�v�z�:�:�:����v�&�&�&�&����s����� '�G�B��w�� '� '� )� )�E� �E�4�(�?�G�,�,�,� �E�4�'�>�3�w�<�<�0�0�0� �D�$��.�%�(�(�(�(�(r0c���t|jd�|D����s"t|d|jd�|D������|jdkrt|||��dSt |d����)Nc3�$K�|] }|jV�� dSr*r�r�s r.rZzmerge.<locals>.<genexpr>��$����#:�#:��A�H�#:�#:�#:�#:�#:�#:r0zmark-to-base positioning lookupc��g|] }|j�� SrOr�r�s r.r]zmerge.<locals>.<listcomp>���'�'�'�a���'�'�'r0�r�r_r`rr��rr�r$r�r%r�s r.r4r4�s��� �d�k�#:�#:�c�#:�#:�#:� ;� ;� �!� �6��[�'�'�3�'�'�'�  � � � �  �{�a���!�$��V�4�4�4�4�4���1R�S�S�S�Sr0c���t|jd�|D����s"t|d|jd�|D������|jdkrt|||dd��dSt |d����) Nc3�$K�|] }|jV�� dSr*r�r�s r.rZzmerge.<locals>.<genexpr> r�r0zmark-to-mark positioning lookupc��g|] }|j�� SrOr�r�s r.r]zmerge.<locals>.<listcomp>r�r0r�r�Mark1�Mark2r�r�r�s r.r4r4s��� �d�k�#:�#:�c�#:�#:�#:� ;� ;� �!� �6��[�'�'�3�'�'�'�  � � � �  �{�a���!�$��V�W�g�F�F�F�F�F���1R�S�S�S�Sr0c�`�tj��}tj��|_t|d�|D��d�|D����\}}||j_gx|_}t |�D]"}|D]}|�|�|��n�J��#t|j��|_ |S)Nc�0�g|]}d�|jD����S)c��g|] }|j�� SrOrr\s r.r]z/_PairSet_flatten.<locals>.<listcomp>.<listcomp>rr0rrs r.r]z$_PairSet_flatten.<locals>.<listcomp>rr0c��g|] }|j�� SrOrrs r.r]z$_PairSet_flatten.<locals>.<listcomp>r r0) r�r�r�r�r�r�r}r6ryr)rmr+r-r�r�rrrrYs r.�_PairSet_flattenr�s��� �:�<�<�D��K�M�M�D�M�(� �C�C�s�C�C�C�*�*�c�*�*�*���N�F�F� "�D�M��"$�$�D��4��v�,����� � �A��}�� � �A������� �5���d�2�3�3�D�� �Kr0c�(��td�|D����s Jd���tj��}d|_tj��|_t t jd�|D��d��|_t t jd�|D��d��|_ t�d�|D��d�|D����\}}||j_ �fd �t|�D��|_ t|j ��|_|S) Nc�2�g|]}|j� |jdk��Srrr�s r.r]z<_Lookup_PairPosFormat1_subtables_flatten.<locals>.<listcomp>2rr0rrc��g|] }|j�� SrOrfr�s r.r]z<_Lookup_PairPosFormat1_subtables_flatten.<locals>.<listcomp>8���+H�+H�+H�q�A�N�+H�+H�+Hr0rc��g|] }|j�� SrOrir�s r.r]z<_Lookup_PairPosFormat1_subtables_flatten.<locals>.<listcomp>9r�r0c�&�g|]}|jj��SrOr�r\s r.r]z<_Lookup_PairPosFormat1_subtables_flatten.<locals>.<listcomp>=s��.�.�.�Q�q�z� �.�.�.r0c��g|] }|j�� SrOr"r\s r.r]z<_Lookup_PairPosFormat1_subtables_flatten.<locals>.<listcomp>=s��0H�0H�0H�q���0H�0H�0Hr0c�D��g|]}td�|D�������S)c��g|]}|�|��Sr*rOr\s r.r]zG_Lookup_PairPosFormat1_subtables_flatten.<locals>.<listcomp>.<listcomp>Bs��=�=�=��q�}�!�}�}�}r0)r�)rXrrr+s �r.r]z<_Lookup_PairPosFormat1_subtables_flatten.<locals>.<listcomp>AsB������ � �=�=�V�=�=�=�t�D�D���r0)rr�r�r�r�rr�r�rrr�r�r}r�ryr)rmr+r-r�r�s ` r.�(_Lookup_PairPosFormat1_subtables_flattenr�0s5��� �7�7�c�7�7�7� � �'�'�&�'�'� � �:�<�<�D��D�K��K�M�M�D�M��s�z�+H�+H�C�+H�+H�+H�!�L�L�D���s�z�+H�+H�C�+H�+H�+H�!�L�L�D��(� �.�.�#�.�.�.�0H�0H�C�0H�0H�0H���N�F�F�"�D�M�������6�l����D�L��D�L�)�)�D�� �Kr0c�"�td�|D����s Jd���tj��}d|_tj��|_t t jd�|D��d��|_t t jd�|D��d��|_ t|d�|D����\}}||j_ t|||d� ��}gx}|_ t|�D]�}tj ��}|�|��g|_|j}tt#d �|D�����D]=} t%t'd �| D������} |�| ���>��|S) Nc�2�g|]}|j� |jdk��Srr_r�s r.r]z<_Lookup_PairPosFormat2_subtables_flatten.<locals>.<listcomp>Kr`r0rr�c��g|] }|j�� SrOrfr�s r.r]z<_Lookup_PairPosFormat2_subtables_flatten.<locals>.<listcomp>Qr�r0rc��g|] }|j�� SrOrir�s r.r]z<_Lookup_PairPosFormat2_subtables_flatten.<locals>.<listcomp>Rr�r0c�&�g|]}|jj��SrOr�r\s r.r]z<_Lookup_PairPosFormat2_subtables_flatten.<locals>.<listcomp>U���)I�)I�)I��!�*�*;�)I�)I�)Ir0T)rJc3�$K�|] }|jV�� dSr*)r�r�s r.rZz;_Lookup_PairPosFormat2_subtables_flatten.<locals>.<genexpr>`s$����;�;��a�n�;�;�;�;�;�;r0c3�K�|]}|�|V�� dSr*rO�rX�cs r.rZz;_Lookup_PairPosFormat2_subtables_flatten.<locals>.<genexpr>as"����=�=�!�q�}�A�}�}�}�}�=�=r0)rr�r�r�r�rr�r�rrr�r�r\r�r}r6r�r�rFrG) rmr+r-r�r�rKrM�rows�row�cols�cols r.�(_Lookup_PairPosFormat2_subtables_flattenr�Is��� �<�<�c�<�<�<� � �'�'�&�'�'� � �:�<�<�D��D�K��K�M�M�D�M��s�z�+H�+H�C�+H�+H�+H�!�L�L�D���s�z�+H�+H�C�+H�+H�+H�!�L�L�D��#�4�)I�)I�S�)I�)I�)I�J�J�I�F�A�!�D�M��-�d�C��4�P�P�P�H�!#�#�F�T� ��X������o����� � �c������������;�;�d�;�;�;�;�;�<� � �D��t�=�=�t�=�=�=�=�=�>�>�C� �J�J�s�O�O�O�O� � �Kr0c��t|��}t|��}d}||kr-||jdkr|dz }||kr||jdk�t|d|�|��g|d|�<t|��}|}|dkr3||dz jdkr|dz}|dkr||dz jdk�t ||d�|��g||d�<|S)z�Merge multiple Format1 subtables at the beginning of lst, and merge multiple consecutive Format2 subtables that have the same Class2 (ie. were split because of offset overflows). Returns new list.rrNr�)r�ryr�r�r�)rmr+r�r~s r.�&_Lookup_PairPos_subtables_canonicalizer�gs��� �s�)�)�C� �C���A� �A� �a�%�%�C��F�M�Q�&�&� �Q��� �a�%�%�C��F�M�Q�&�&�7��B�Q�B���F�F�G�C����G� �C���A� �A� �a�%�%�C��A��J�%��*�*� �Q��� �a�%�%�C��A��J�%��*�*�7��A�B�B���F�F�G�C����G� �Jr0c��t|d�|D��d��\}}t|��}tj��}d|_||_tj��|_||j_||_dg|z|_ |D]�}|jdkrH|j }|jjD]3} |� | ��} tj |��|j | <�4�U|jdkr]t|jj��D]C\} } |j | }|� | ��} tj |��|j | <�D��|gS)Nc�&�g|]}|jj��SrOr�r\s r.r]z7_Lookup_SinglePos_subtables_flatten.<locals>.<listcomp>}r�r0r�r)r�ryr�r�r�r�r�r�r�r�r�r�rIr|) rmr+�min_inclusive_rec_formatr�r�� num_glyphs�new� singlePos�val_rec�gnamer~r�s r.�#_Lookup_SinglePos_subtables_flattenr�|sI��"�4�)I�)I�S�)I�)I�)I�4�P�P�I�F�A��V���J� �,�.�.�C��C�J�.�C�O��;�=�=�C�L� �C�L���C�N����#�C�I�� 6� 6� � � �q� � ��o�G�"�+�2� 6� 6���L�L��'�'��#�}�W�5�5�� �!� � � 6�� �� "� "�%�i�&8�&?�@�@� 6� 6���5�#�/�!�,���L�L��'�'��#�}�W�5�5�� �!� � �� �5�Lr0c� �t|jd�|D��d�|D����\}}d|_tj��|_||j_g|_|D]w}tj��}tj��|_d|j_tj��|_ d|j _|j� |���x|� |j|��t|j��|_ dS)Nc�&�g|]}|jj��SrOr�r�s r.r]zmerge.<locals>.<listcomp>�r r0c��g|] }|j�� SrO)�EntryExitRecordr�s r.r]zmerge.<locals>.<listcomp>�s��(�(�(�q�� �(�(�(r0r)r�r+r�r�r�r�r�r�� EntryAnchor� ExitAnchorr6rry�EntryExitCount)rEr-rmr�r�r�r�s r.r4r4�s���(�� �(�(�C�(�(�(�(�(�C�(�(�(���N�F�F� �D�K��K�M�M�D�M�!�D�M���D�� �)�)��� �"�"���)�+�+���!"���������� !���� ��#�#�C�(�(�(�(� ���d�*�F�3�3�3��d�2�3�3�D���r0c��td�|D����rd|_td�|D����rd|_|�||��dS)Nc3�(K�|] }|jduV��dSr*)r��rX�masters r.rZzmerge.<locals>.<genexpr>�s*���� 8� 8�&�6� �� %� 8� 8� 8� 8� 8� 8r0c3�(K�|] }|jduV��dSr*)r�r�s r.rZzmerge.<locals>.<genexpr>�s*���� 7� 7��6� �� $� 7� 7� 7� 7� 7� 7r0)rhr�r�rur�s r.r4r4�sk�� � 8� 8�C� 8� 8� 8�8�8� ���� � 7� 7�3� 7� 7� 7�7�7����� ����c�"�"�"�"�"r0c�x����d�|D��x}�_tt||����||jfgzD]�\}}|s�|djj�d��r�td�|D����st�dd�|D������td�|D����st����|dj |_ d�|D��}|dd�=|� |����|jo$t|jdtj��}|r5t|j�j��|_�fd �|D��x}�_n�|jo$t|jdtj��}|r�d �|D���t%�fd ��D����sZd �|D��} t't(| ���t+|j�j���|_��fd �|D��x}�_d} nd} ��|j|��t/|j��|_|�rit/|j��dkr|jdjdksJ�|jdjjs*|j�d��|xjdzc_t/|j��dkr|jdjdksJ�|jdjjs*|j�d��|xjdzc_�jj�dt?�����} | dkrSt@�!d��tE�j| |j��|_t/|j��|_nh|rf| rd|jd} | jj} d�t| | j#��D��}tI|�j�%����|_��&||ddg����`dS)Nc��g|] }|j�� SrO)�SubTabler�s r.r]zmerge.<locals>.<listcomp>�s��*C�*C�*C�!�1�:�*C�*C�*Cr0r� Extensionc��g|] }|j�� SrO�ri�rX�sts r.r]zmerge.<locals>.<listcomp>�s��8�8�8�b�R�\�8�8�8r0c�&�g|]}|jj��SrO)rir5r�s r.r]zmerge.<locals>.<listcomp>�s��=�=�=�2���.�=�=�=r0r^c��g|] }|j�� SrO)�ExtensionLookupTyper�s r.r]zmerge.<locals>.<listcomp>�s��B�B�B��R�3�B�B�Br0c��g|] }|j�� SrO)� ExtSubTabler�s r.r]zmerge.<locals>.<listcomp>�s��4�4�4�"�r�~�4�4�4r0c�:��g|]}t|�j����SrO)r�r+)rXr�rEs �r.r]zmerge.<locals>.<listcomp>�s3���/ �/ �/ �HJ� 2�2�v�{� C� C�/ �/ �/ r0c�,�g|]}t|����SrOrxr�s r.r]zmerge.<locals>.<listcomp>�s��8�8�8��C��G�G�8�8�8r0c�(��g|]}|�dk��SrrO)rX�nums� numSubtabless �r.r]zmerge.<locals>.<listcomp>�s"���I�I�I�D�� �Q��/�I�I�Ir0c�&�g|]}|D] }|j�� �SrOr�)rXr��ts r.r]zmerge.<locals>.<listcomp>�s'��"Q�"Q�"Q�R�b�"Q�"Q��1�=�"Q�"Q�"Q�"Qr0c�<��g|]}t|�j�����SrO)r�r+)rXr�rE�mirfs ��r.r]zmerge.<locals>.<listcomp>�s7���7�7�7��8��F�K��N�N�7�7�7r0TFrrbr�z0fontTools.otlLib.optimize.gpos:COMPRESSION_LEVELr#zCompacting GPOS...c��i|]\}}||�� SrOrO)rXr�� valRecords r.r�zmerge.<locals>.<dictcomp>s+�� � � �!1�� �E�9� � � r0r�� SubTableCountr�)'r�r�r}r�rir5� startswithrr#r�� LookupTyper�r�r�r�r�r+r�rhrrr�rryr�r�r�r��pop�cfgrIr�log�inforr�rr�ru)rEr-rmr�r��sts�new_sts� isPairPos� isSinglePos�valueFormatList� flattened�level�singlePosTabler��singlePosMappingr�r�s` @@r.r4r4�s������*C�*C�s�*C�*C�*C�C�I��'��s�3� �*�*�+�+��d�m�/D�.E�E� � ���3�� � � �q�6� � $� /� /� � <� <� ��8�8�C�8�8�8�9�9� �,��(�=�=��=�=�=����� �B�B�c�B�B�B�C�C� 5�,�V�4�4�4��q�6�5�A�L�4�4��4�4�4�G��A�A�A�� �J�J�w� � � ��� �J�*�T�]�1�-=�r�z�"J�"J�I��"�?� �M�6�;� � �� �/ �/ �/ �/ �NW�/ �/ �/ � � �F�+�+��m�R� �4�=��3C�R�\�(R�(R� � � "�8�8�i�8�8�8�L��I�I�I�I�L�I�I�I�J�J� "�#R�"Q�9�"Q�"Q�"Q���c�?�3�3�� C��M�6�;��!�!�� �7�7�7�7�7�'�7�7�7�� �F�3�!� � �!� � ���d�m�Y�/�/�/��T�]�+�+�D���$ ��4�=�!�!�Q�&�&�4�=��+;�+B�a�+G�+G�+G�G��}�Q��(�/� $� �M� � �a� � � � � � �!� #� � ��4�=�!�!�Q�&�&�4�=��+<�+C�q�+H�+H�+H�H��}�R� �)�0� $� �M� � �b� !� !� !� � � �!� #� � � � ��#�#� >�/�1�1�$� � �� �A�:�:� �H�H�)� *� *� *�,�V�[�%���O�O�D�M�!$�T�]�!3�!3�D� �� �  ��  ���q�)���(�/�� � �58���AU�5V�5V� � � ��'� �f�k�<�<�>�>� � �� � ����c�J��+H��I�I�I����r0c��eZdZdZd�ZdS)�InstancerMergerzLA merger that takes multiple master fonts, and instantiates an instance.c��t�||��||_||_|�|��|_dSr*)r(r/�model�location�getMasterScalars� masterScalars)r-r+r r s r.r/zInstancerMerger.__init__#s@������d�#�#�#��� � �� �"�3�3�H�=�=����r0N�r5r�r��__doc__r/rOr0r.rrs-��������>�>�>�>�>r0rc��|jdksJ�d�|D��}|j}|j}t|�||����|_dS)Nrc��g|] }|j�� SrO�� Coordinate�rX�as r.r]zmerge.<locals>.<listcomp>-s�� (� (� (�q�a�l� (� (� (r0)r�r r r�interpolateFromValuesAndScalarsr)rEr-rm�Coordsr r s r.r4r4*s_�� �;�!� � � � � (� (�C� (� (� (�F� �L�E��(�M�� �-�-�f�m�D�D���D�O�O�Or0c� �|jdksJ�d�|D��}d�|D��}|j}|j}t|�||����|_t|�||����|_dS)Nrc��g|] }|j�� SrO�� XCoordinaters r.r]zmerge.<locals>.<listcomp>8���*�*�*��q�}�*�*�*r0c��g|] }|j�� SrO�� YCoordinaters r.r]zmerge.<locals>.<listcomp>9rr0)r�r r rrrr)rEr-rm�XCoords�YCoordsr r s r.r4r45s��� �;�!� � � � �*�*�c�*�*�*�G�*�*�c�*�*�*�G� �L�E��(�M�� �-�-�g�}�E�E���D��� �-�-�g�}�E�E���D���r0c����|j}|j}dD]i\�}t||��rJ�t|���rB�fd�|D��}t|�||����}t |�|���jdS)N�)�XAdvance� XAdvDevice)�YAdvance� YAdvDevice)� XPlacement� XPlaDevice)� YPlacement� YPlaDevicec�2��g|]}t|�d����Srrc�rXr�names �r.r]zmerge.<locals>.<listcomp>Rs%���7�7�7�a�g�a��q�)�)�7�7�7r0)r r rgrrr�) rEr-rmr r � tableNamerrrqr-s @r.r4r4Ds���� �L�E��(�M�� '� '���i� �4��+�+�+�+�+� �4�� � � '�7�7�7�7�3�7�7�7�F���5�5�f�m�L�L���E� �D�$�� &� &� &�� '� 'r0c��eZdZdZdd�ZdS)� MutatorMergerz�A merger that takes a variable font, and instantiates an instance. While there's no "merging" to be done per se, the operation can benefit from many operations that the aligning merger does.Tc�X�t�||��||_||_dSr*)r(r/� instancer�deleteVariations)r-r+r2r3s r.r/zMutatorMerger.__init__ds+������d�#�#�#�"��� 0����r0N�Tr rOr0r.r0r0^s2�������� 1�1�1�1�1�1r0r0c�B�|dj���|_|jdkrdS|j}|j}|jr|`|rD|jdksJ�|jdz|jz}t||��}|xj |z c_ |jr d|_dSdS)Nr����r) r@r�r�r2� DeviceTabler3� DeltaFormat� StartSize�EndSizerr)rEr-rmr2�dev�varidx�deltas r.r4r4js�����F�O�(�(�*�*�D�M� �{�a������ �I� � �C� ��� � � �!���&�(�(�(�(��-�2�%���4��� �&�)�*�*�� ���5� ��� ����� � � ��r0c ���|dj���|_|jdkrdS|j}dD]�}|dz}t ||��s�t ||��}|jrt||��|��B|jdksJ�|j dz|j z}t||��}|dz} t|| t || ��|z����|jr d|_dSdS) Nrr6�XYr9r7r8rr) r@r�r�r2rgrHr3�delattrr:r;r<rr�) rEr-rmr2rYr.r=r>r?r;s r.r4r4�s����F�O�(�(�*�*�D�M� �{�a������ �I� �9�9��� �%� ��t�Y�'�'� � ��d�I�&�&�� � "� %� �D�)� $� $� $� �;� ���&�(�(�(�(��-�2�%���4��� �&�)�*�*���<�����d�G�D�$�/�/�%�7�8�8�8�8� ����� � � ��r0c ��|dj���|_|j}dD]�\}}t||��s�t ||��}|jrt ||��|��@|jdksJ�|jdz|j z}t||��}t||t ||d��|z����dS)Nrr"r7r8) r@r�r2rgrHr3rBr:r;r<rr�) rEr-rmr2r-r.r=r>r?s r.r4r4�s�����F�O�(�(�*�*�D�M�� �I��<�<���i� �t�Y�'�'� � ��d�I�&�&�� � "� %� �D�)� $� $� $� �;� ���&�(�(�(�(��-�2�%���4��� �&�)�*�*����d�G�D�$��2�2�U�:�;�;�;�;�%<�<r0c�.��eZdZdZd�Zd�Z�fd�Z�xZS)�VariationMergerzJA merger that takes multiple master fonts, and builds a variable font.c��t�||��tj|��|_|�|��dSr*)r(r/r�OnlineVarStoreBuilder� store_builder�setModel)r-r �axisTagsr+s r.r/zVariationMerger.__init__�sA������d�#�#�#�%�;�H�E�E��� � � �e�����r0c�H�||_|j�|��dSr*)r rHrI)r-r s r.rIzVariationMerger.setModel�s&���� � ��#�#�E�*�*�*�*�*r0c����d}d}d|vr�t|��r|�t||����dS|j}|jr$td�|D��|j��|_|j}|�|��\}}|�|��tt|��� ||��|r|�|��|r ||_dSdS)N)r`c��g|]}|du��Sr*rOr\s r.r]z/VariationMerger.mergeThings.<locals>.<listcomp>�s��$@�$@�$@�q�Q�d�]�$@�$@�$@r0) rrr,rr � getSubModelrI�superrErj)r-rlrm� masterModel�origTTFsr ris �r.rjzVariationMerger.mergeThings�s����� ��� �3�;�;��s�|�|� ��?�$�T�s�3�3�3�3����y�H��y� M�#�$@�$@�C�$@�$@�$@�$�)�L�L�� ��*�K�$�0�0��5�5�J�E�3� �M�M�%� � � � �o�t�$�$�0�0��c�:�:�:� � '� �M�M�+� &� &� &� � !� �D�I�I�I� !� !r0)r5r�r�rr/rIrj� __classcell__r�s@r.rErE�s`������������ +�+�+�!�!�!�!�!�!�!�!�!r0rEc��t|��r |ddfS|�|��\}}|tj|��fSr�)r� storeMastersr�buildVarDevTable)rH� master_values�base�varIdxs r.rUrU�sO��� ���&��Q���%�%� �-�-�m�<�<�L�D�&� ��)�&�1�1� 1�1r0c��|jdkrt|d����t|jd�|D����\|_}|rd|_||_dSdS)Nrza baseline coordinater�c��g|] }|j�� SrOrrs r.r]zmerge.<locals>.<listcomp>����9�9�9��q�|�9�9�9r0r6�r�r%rUrHrr9�rEr-rmr9s r.r4r4�sy�� �{�a�����1H�I�I�I�I�#3���9�9�S�9�9�9�$�$� �D�O�[��'��� �&�����'�'r0c��|jdkrt|d����t|jd�|D����\|_}|rd|_||_dSdS)Nrza caretr�c��g|] }|j�� SrOrrs r.r]zmerge.<locals>.<listcomp>�r[r0r6r\r]s r.r4r4�sx�� �{�a������;�;�;�;�#3���9�9�S�9�9�9�$�$� �D�O�[��'��� �&�����'�'r0c��|jdkrt|d����t|jd�|D����\|_}t|jd�|D����\|_}|s|rd|_||_||_dSdS)Nrz an anchorr�c��g|] }|j�� SrOrrs r.r]zmerge.<locals>.<listcomp> ���:�:�:��q�}�:�:�:r0c��g|] }|j�� SrOrrs r.r]zmerge.<locals>.<listcomp> rbr0r6)r�r%rUrHrr� XDeviceTable� YDeviceTable)rEr-rmrdres r.r4r4s��� �{�a������=�=�=�=�%5���:�:�c�:�:�:�&�&�"�D��l�&6���:�:�c�:�:�:�&�&�"�D��l��)�|�)��� �(���(�����)�)r0c����dD]]\�}t|���rHt|j�fd�|D����\}}t|�|��|rt|||���^dS)Nr"c�2��g|]}t|�d����Srrcr,s �r.r]zmerge.<locals>.<listcomp>s%���&H�&H�&H�q�w�q�$��':�':�&H�&H�&Hr0)rgrUrHr�)rEr-rmr.rq� deviceTabler-s @r.r4r4s����� 6� 6���i� �4�� � � 6�!1��$�&H�&H�&H�&H�C�&H�&H�&H�"�"� �E�;� �D�$�� &� &� &�� 6���i��5�5�5�� 6� 6r0c��eZdZdZdd�Zdd�Zd�fd�Zd�Zd �Zd �Z d e fd �Z d e fd �Z e d���Zed���ZdS)�COLRVariationMergera�A specialized VariationMerger that takes multiple master fonts containing COLRv1 tables, and builds a variable COLR font. COLR tables are special in that variable subtables can be associated with multiple delta-set indices (via VarIndexBase). They also contain tables that must change their type (not simply the Format) as they become variable (e.g. Affine2x3 -> VarAffine2x3) so this merger takes care of that too. Tc���t�||||��i|_g|_t ��|_g|_d|_|rt��|_d|_ dS)NF) rEr/� varIndexCache�varIdxesr�� varTableIds�layers�layerReuseCacher�_doneBaseGlyphs)r-r rJr+�allowLayerReuses r.r/zCOLRVariationMerger.__init__1sn��� � ��u�h��=�=�=� ����� ��5�5����� �#��� � 5�#2�#4�#4�D� �$����r0��COLRc��d|vr$d|vr |�|dj��t�||||��dS)Nrt)�expandPaintColrLayersrdrEr�)r-r+r�r�s r.r�zCOLRVariationMerger.mergeTablesCsR�� �Y� � �6�T�>�>� � &� &�t�F�|�'9� :� :� :��#�#�D�$� �Y�G�G�G�G�Gr0c��dS)NTrO)r�s r.�<lambda>zCOLRVariationMerger.<lambda>Ps��4�r0c���|j}|j}d} ||��}||��}n#t$rYnwxYw|s$t|t |��j|����|}g}|D]E} t | dd��} ||��}n#t$rYnwxYw|�|���Ft||��s%t|t |��j||����|S)NF)r�rqr�r�) r�� formatEnum� ValueErrorr%rAr5rHr6rr$) r-rlrm�validate�fmtrz�okr_r`rYs r.�checkFormatEnumz#COLRVariationMerger.checkFormatEnumPs7���j���^� � �� ��*�S�/�/�C���#���B�B��� � � � �D� ����� R�#�D�4��9�9�3E�S�Q�Q�Q� Q������ � �A��!�X�t�,�,�C� � �j��o�o����� � � ��� ���� �J�J�s�O�O�O�O��(�C�(�(� �%���c���+�!�� ��� � �s� )� 6�6�9 B� B�Bc����|���D]\� |�|��fd�|D�����,#t$r$}|j�d��d����d}~wwxYwdS)Nc�:��g|]}|������SrOr�)rXrYr�s �r.r]z7COLRVariationMerger.mergeSparseDict.<locals>.<listcomp>qs#���)@�)@�)@�q�!�%�%��(�(�)@�)@�)@r0�[�])rWrjr&rkr6)r-rlrmrtr�s @r.�mergeSparseDictz#COLRVariationMerger.mergeSparseDictns��������� � �A� �� � ��Q��)@�)@�)@�)@�C�)@�)@�)@�A�A�A�A��#� � � �����z�1�z�z�z�*�*�*������ ���� � s�(A� A0� A+�+A0c����|D]g�t|���}�fd�|D��} |�||���8#t$r#}|j�d������d}~wwxYwdS)Nc�0��g|]}t|�����SrOrc�rXror;s �r.r]z2COLRVariationMerger.mergeAttrs.<locals>.<listcomp>ys#���:�:�:�d�g�d�D�)�)�:�:�:r0rf)rHrjr&rkr6)r-rlrmr<rqrrrtr;s @r.� mergeAttrszCOLRVariationMerger.mergeAttrsvs����� � �D��C��&�&�E�:�:�:�:�c�:�:�:�F� �� � ���/�/�/�/��#� � � �����z�4�z�z�*�*�*������ ����  � s�<� A)�A$�$A)c�P����fd�|D��}d}|�����t�t��rd}�fd�|D��}|d}tj}t |��s|j�|��\}}|r��|��}||fS)Nc�0��g|]}t|�����SrOrcr�s �r.r]z;COLRVariationMerger.storeMastersForAttr.<locals>.<listcomp>�s#���=�=�=����t�,�,�=�=�=r0FTc�:��g|]}��|����SrO)�toInt)rXrY�convs �r.r]z;COLRVariationMerger.storeMastersForAttr.<locals>.<listcomp>�s#���B�B�B�q�T�Z�Z��]�]�B�B�Br0r) �getConverterByNamer�r r��NO_VARIATION_INDEXrrHrT�fromInt) r-rlrmr;rV�is_fixed_size_float� baseValuerXr�s ` @r.�storeMastersForAttrz'COLRVariationMerger.storeMastersForAttr�s�����=�=�=�=��=�=�=� � $���%�%�d�+�+�� �d�N� +� +� C�"&� �B�B�B�B�M�B�B�B�M�!�!�$� ��&��� �&�&� O� $� 2� ?� ?� � N� N� �I�v� � 0�� � �Y�/�/�I��&� � r0�returnc��t|��}|j�|��}|�htt |j��t |��z dz��D]3}|j||t |��z�|kr|x|j|<}n�4|��tt |��dz dd��D]c}|j| d�|d|�krEt |j��|z }||j|<|j�||d���n�d|�8t |j��x|j|<}|j�|��|S)Nrrrb)�tuplerlrIr*ryrmr�)r-rmre� varIndexBaser~�ns r.�storeVariationIndicesz)COLRVariationMerger.storeVariationIndices�sr���H�o�o���)�-�-�c�2�2� � � ��3�t�}�-�-��H� � �=��A�B�B� � ���=��Q��X���%6�!6�7�8�C�C�=>�>�D�&�s�+�l��E�D� � ��3�x�=�=�1�,�a��4�4� � ���=�!����%��"�1�"��5�5�#&�t�}�#5�#5��#9�L�.:�D�&�s�+��M�(�(��!�"�"��6�6�6��E� 6� � �58���5G�5G� G�D� �s� #�l� �M� � �� *� *� *��r0c��tj}g}|D]B}|�|||��\}}t|||��|�|���Ct d�|D����r|�|��}|S)Nc3�6K�|]}|tjkV��dSr*)r�r�r\s r.rZz9COLRVariationMerger.mergeVariableAttrs.<locals>.<genexpr>�s*����<�<�a�q�B�)�)�<�<�<�<�<�<r0)r�r�r�r�r6�anyr�) r-rlrmr<r�rmr;r�rXs r.�mergeVariableAttrsz&COLRVariationMerger.mergeVariableAttrs�s����,� ���� $� $�D� $� 8� 8��c�4� H� H� �I�v� �C��y� )� )� )� �O�O�F� #� #� #� #� �<�<�8�<�<�<� <� <� @��5�5�h�?�?�L��r0c��t|dd����D]�}|d}|j}t|��j}|��}|j�|j��|���|dj}|j�|t||j ��|j<��t||j |����dS)NTc�X�tt|dj��dd��duS)Nrb�VarType)rHrArq)�paths r.rxz?COLRVariationMerger.convertSubTablesToVarType.<locals>.<lambda>�s)����T�"�X�^�,�,�i��>�>�d�J�r0)� skip_root� predicaterb�����) r rqrAr�r@r��populateDefaultsr�rHr-r�)�clsrdr�r��subTable�varType� newSubTable�parents r.�convertSubTablesToVarTypez-COLRVariationMerger.convertSubTablesToVarType�s���"� ���� � � � 6� 6�D��b��B��x�H��8�n�n�,�G�!�'�)�)�K� � � '� '��(9� :� :� :� � (� (� *� *� *��"�X�^�F��x�#�5@�����(�(���2�2������5�5�5�5�# 6� 6r0c�|�|jsdSt��}g}|jjD�]M}|jg}|�r?|���}|jtjj kr�2|jtjj kr�tt||����}t|��}|D]q}t|��|vr'tj|��}t|��|vsJ�|�|��|�t|�����r||_t|��|_n|�|��}|�t/|����|��?��Ot|��t|��ksJ�||j_t|��|j_dS)a�Rebuild LayerList without PaintColrLayers reuse. Each base paint graph is fully DFS-traversed (with exception of PaintColrGlyph which are irrelevant for this); any layers referenced via PaintColrLayers are collected into a new LayerList and duplicated when reuse is detected, to ensure that all paints are distinct objects at the end of the process. PaintColrLayers's FirstLayerIndex/NumLayers are updated so that no overlap is left. Also, any consecutively nested PaintColrLayers are flattened. The COLR table's LayerList is replaced with the new unique layers. A side effect is also that any layer from the old LayerList which is not referenced by any PaintColrLayers is dropped. N)� LayerListr�� BaseGlyphList�BaseGlyphPaintRecord�Paintr�r�r�� PaintFormat�PaintColrGlyph�PaintColrLayersr��_flatten_layersry�idr�rIr6r,�FirstLayerIndex� NumLayers� getChildrenr��reversed� LayerCount) �colr�uniqueLayerIDs� newLayerListr��frontier�paint�children�first_layer_index�layers r.rvz)COLRVariationMerger.expandPaintColrLayers�s����~� � �F������ ��%�:� 4� 4�C�� �{�H�� 4� � � �����<�2�>�#@�@�@���\�R�^�%C�C�C� $�O�E�4�$@�$@�A�A�H�(+�L�(9�(9�%�!)�6�6���e�9�9��6�6�$(�M�%�$8�$8�E�#%�e�9�9�N�#B�#B�#B�#B�$�+�+�E�2�2�2�&�*�*�2�e�9�9�5�5�5�5�,=�E�)�&)�(�m�m�E�O�O�$�0�0��6�6�H������ 2� 2�3�3�3�)� 4��,�<� � �C��$7�$7�7�7�7�7�+����$'� �$5�$5���!�!�!r0Nr4)rs)r5r�r�rr/r�rr�r�r�r�r�r�r�r�� staticmethodrvrOr0r.rjrj&s���������%�%�%�%�$ H� H� H� H�2@������<������!�!�!�,������: �S� � � � ��6�6��[�6�(�,6�,6��\�,6�,6�,6r0rjc�l��d�|jD��}d�|D��}t|�����D]l\}� |�|��fd�|D�����/#t$r1}|j�d|�d���d���|jd<�d}~wwxYwd|_dS) Nc��i|] }|j|�� SrO�� BaseGlyph�rXr�s r.r�zmerge.<locals>.<dictcomp>s�� C� C� C�#�3�=�#� C� C� Cr0c�0�g|]}d�|jD����S)c��i|] }|j|�� SrOr�r�s r.r�z$merge.<locals>.<listcomp>.<dictcomp> s��E�E�E�s�� �s�E�E�Er0)r�)rXrMs r.r]zmerge.<locals>.<listcomp> s*��S�S�S�!�E�E�a�.D�E�E�E�S�S�Sr0c�:��g|]}|������SrOr�)rXrYr�s �r.r]zmerge.<locals>.<listcomp>s#���'B�'B�'B�Q����a���'B�'B�'Br0z.BaseGlyphPaintRecord[r�z base glyph r T) r�r|rWrjr&rkr6�causerq)rEr-rmrl�mastersr~rtr�s @r.r4r4s���� D� C��)B� C� C� C�C�S�S�s�S�S�S�G��#�(�(�*�*�%�%�����1� � � � �s�1�v�'B�'B�'B�'B�'�'B�'B�'B� C� C� C� C��� � � � �G�N�N�8�A�8�8�8� 9� 9� 9�"5��"5�"5�A�G�J� � ����� ���� "�F���s�(A/�/ B*�9,B%�%B*c�r�|js Jd���t|j��|_|j|_dS)Nz-BaseGlyphList must be merged before LayerList)rqryror�r�r�s r.r4r4s:�� � !�R�R�#R�R�R� !��&�-�(�(�D�O���D�J�J�Jr0c#��K�|jtjjksJ�|�|��D]7}|jtjjkrt ||��Ed{V���3|V��8dSr*)r�r�r�r�r�r�)�rootr�r�s r.r�r�!s����� �;�"�.�8� 8� 8� 8� 8��!�!�$�'�'���� �<�2�>�9� 9� 9�&�u�d�3�3� 3� 3� 3� 3� 3� 3� 3� 3��K�K�K�K� �r0c������tt|�jdj����}t �j��t ���ksJ���fd�t t �����D��} ��||��n-#t$r }|j � d���d}~wwxYw�j ��j � |��}t |��tk}t|t���}��fd���fd�|D��}t |��dkrF|djt jjkr&|dj|_|dj|_dSt |��|_t �j��|_�j�|���j �$|s$�j �||j��dSdSdS) Nrtc ���g|];}tt�|�j|dj������<Srs)r�r�r,rd)rXr~rmr-s ��r.r]z*_merge_PaintColrLayers.<locals>.<listcomp>3sM������ � �_�S��V�T�Y�q�\�&�%9�%?� @� @�A�A���r0z.Layers)r�c���t|t��r��fd�|D��}tj��}t tjj��|_t|��|_ t�j ��|_ �j � |���j � �j �||j ��|S)Nc�&��g|] }�|����SrOrO�rXr��listToColrLayerss �r.r]zD_merge_PaintColrLayers.<locals>.listToColrLayers.<locals>.<listcomp>Os%���9�9�9�a�&�&�q�)�)�9�9�9r0)r�r�r�r�r�r�r�r�ryr�ror�r�rpr,)r�ror�r-s ��r.r�z0_merge_PaintColrLayers.<locals>.listToColrLayersMs���� �e�T� "� "� H�9�9�9�9�5�9�9�9�F��H�J�J�E��r�~�=�>�>�E�L�!�&�k�k�E�O�$'�� �$4�$4�E� !� �K� � �v� &� &� &��#�/��$�(�(���1F�G�G�G�� r0c�&��g|] }�|����SrOrOr�s �r.r]z*_merge_PaintColrLayers.<locals>.<listcomp>Ys%���:�:�:�!�"�"�1�%�%�:�:�:r0rr)r�r�r+rdryr,r*rr&rkr6rp� try_reuserrr�r�r�r�r�r�ror�r,)r-rlrm� out_layers�master_layersesrt�is_treer�s` ` @r.�_merge_PaintColrLayersr�*s������o�c�4�9�V�+<�+B�C�C�D�D�J� �t�y�>�>�S��X�X� %� %� %� %�������s�3�x�x������O� � ��� �O�4�4�4�4�� ���� ����y�!�!�!� ����� ���� ��'��)�3�3�J�?�?� ��*�o�o� :�:�G�!�*�0J�K�K�K�J� � � � � � �;�:�:�:�z�:�:�:�J� �:���!��� �1� � 4���8V� V� V� #�1� �/�� �(��m�;������J���� �!�$�+�.�.��� � ���:�&�&�&� � � +�G� +� � � $� $�Z��1D� E� E� E� E� E� ,� +� +� +s�B� C�#B>�>Cc��� ���||d���}|tjjurt �||��dS|���}d� |�"t jt|��|��� � fd�|� ��D��}�� |||���� ||� ��}d�|� ��D��}|tj kpt�fd�|D����}|r:� r||_|r��|��|�J�t#|��|_dSdS)Nc�,�|��� Sr*)� is_variable)r}s r.rxzmerge.<locals>.<lambda>ps��C�O�O�<M�<M�8M�r0rOc3�8�K�|]}|j�v� |jV��dSr*�r-�rXr��varAttrss �r.rZzmerge.<locals>.<genexpr>{�1�����R�R�a�1�6��;Q�;Q�1�6�;Q�;Q�;Q�;Q�R�Rr0c��g|] }|j�� SrO)rqr�s r.r]zmerge.<locals>.<listcomp>�s��9�9�9�b���9�9�9r0c3�D�K�|]}t|���jvV��dSr*�r�rn)rXrdrEs �r.rZzmerge.<locals>.<genexpr>�sB�����>�>�,1��5� � �V�'�'�>�>�>�>�>�>r0)rr�r�r�r�� as_variabler �getVariableAttrsrA� getConvertersr�r�� iterSubTablesr�r�� VarIndexBaser�r�r�) rEr-rmr}� varFormat� staticAttrsr�� subTables� isVariabler�s ` @r.r4r4ns����� � � ��s�,M�,M� N� N�C� �b�n�,�,�,��v�t�S�1�1�1������!�!�I��H����*�4��:�:�y�A�A��R�R�R�R�4�#5�#5�#7�#7�R�R�R�K� ���d�C��-�-�-��,�,�T�3��A�A�L�9�9�D�$6�$6�$8�$8�9�9�9�I���!6�6��#�>�>�>�>�5>�>�>�>�;�;�J�� %� � -�!-�D� � � 3� � ,� ,�T� 2� 2� 2��$�$�$��)�n�n�� � � � %� %r0c�t��t|��j}tj|����fd�|���D��}|�|||��|�||���}|tjkr0||_ |j � t|����dSdS)Nc3�8�K�|]}|j�v� |jV��dSr*r�r�s �r.rZzmerge.<locals>.<genexpr>�r�r0) rAr�r r�r�r�r�r�r�r�rnr,r�)rEr-rmr�r�r�r�s @r.r4r4�s�����4�j�j� �G��&�w�/�/�H�R�R�R�R�4�#5�#5�#7�#7�R�R�R�K� ���d�C��-�-�-��,�,�T�3��A�A�L��r�,�,�,�(�������r�$�x�x�(�(�(�(�(�-�,r0c�*����||d�|���D����t�fd�|jD����r>��|���j�t|����dSdS)Nc3�$K�|] }|jV�� dSr*r�r�s r.rZzmerge.<locals>.<genexpr>�s$����!G�!G�Q�!�&�!G�!G�!G�!G�!G�!Gr0c3�D�K�|]}t|���jvV��dSr*r�)rX�stoprEs �r.rZzmerge.<locals>.<genexpr>�s1����� E� E�d�2�d�8�8�v�)� )� E� E� E� E� E� Er0)r�r�r�� ColorStopr�rnr,r�r�s` r.r4r4�s���� ���d�C�!G�!G�$�2D�2D�2F�2F�!G�!G�!G�H�H�H� � E� E� E� E�d�n� E� E� E�E�E�)��(�(��.�.�.�����r�$�x�x�(�(�(�(�(�)�)r0�clipsc�2�|�||��dSr*)r�r�s r.r4r4�s �� ���4��%�%�%�%�%r0r r*)F)rrrs)kr�osr�rB�operatorr�logging�fontTools.colorLib.builderrr�fontTools.miscr�fontTools.misc.roundToolsr�fontTools.misc.treeToolsr�fontTools.ttLib.tablesr r�r �#fontTools.ttLib.tables.otConvertersr �!fontTools.ttLib.tables.otTraverser �#fontTools.ttLib.tables.DefaultTabler �fontTools.varLibrrr�fontTools.varLib.modelsrrrrr�fontTools.varLib.varStorer� functoolsr�fontTools.otlLib.builderr�fontTools.otlLib.optimize.gposrr� getLoggerr��errorsrrrrr r!r"r#r$r%r&�objectr(r�rE�GDEFr4r�r�r�r�r�r�r�r�r&r2r?r\rcr�r�� MarkBasePos� MarkMarkPosr�r�r�r�r�� CursivePosr��Lookupr� CaretValuer0rErU� BaseCoordrjr�r�r�r�r��ClipBox� Affine2x3r�� ColorLine�ClipListrOr0r.�<module>rsJ ���� � � � � � � � � � � � �����������R�R�R�R�R�R�R�R�(�(�(�(�(�(�-�-�-�-�-�-�5�5�5�5�5�5�1�1�1�1�1�1�3�3�3�3�3�3�>�>�>�>�>�>�<�<�<�<�<�<�<�<�<�<�<�<�6�6�6�6�6�6�6�6�6�6�S�S�S�S�S�S�S�S�S�S�S�S�S�S�7�7�7�7�7�7�������3�3�3�3�3�3��������� �g��1�2�2�� � � � � � � � � � � � � � � � � � � � � � � � � � �r�r�r�r�r�V�r�r�r�p � � � � �V� � � ����r�w��0�0�#�#�1�0�#�2 � � �"�"�"�"�J���v�)�*�*�#�#�+�*�#����r�y�!�!�#�#�"�!�#����$���6���r�|�$�$�:�:�%�$�:�z���r�z�"�"�24�24�#�"�24�j,�,�,�B����8����6K�K�K�K�\&3�&3�&3�R���r�z�"�"�(�(�#�"�(�VS)�S)�S)�S)�l���r�~�&�&� T� T�'�&� T����r�~�&�&� T� T�'�&� T����2���2���<���*���0���r�}�%�%�4�4�&�%�4�.���r�)�*�*�#�#�+�*�#����r�y�!�!�a �a �"�!�a �R>�>�>�>�>�n�>�>�>����� �&�&���'�&������ �"�"� � �#�"� �����*�+�+�'�'�,�+�'�2 1� 1� 1� 1� 1�N� 1� 1� 1����b�m�$�$���%�$��*���b�i� � ���!� ��:���f�(�)�)�<�<�*�)�<�>%!�%!�%!�%!�%!�n�%!�%!�%!�P2�2�2����� �%�%�'�'�&�%�'����� �&�&�'�'�'�&�'����� �"�"� )� )�#�"� )�����*�+�+� 6� 6�,�+� 6� \6�\6�\6�\6�\6�/�\6�\6�\6�~���B�,�-�-�"�"�.�-�"�"���B�L�)�)���*�)�����AF�AF�AF�H���R�X�r�z�2�3�3�%%�%%�4�3�%%�P���R�\�2�<�8�9�9� )� )�:�9� )� ���B�L�)�)�)�)�*�)�)����B�K��1�1�&�&�2�1�&�&�&r0
Memory