Ë
    ‡™hw  ã                   óŠ   — d dl Z d dlmZ d dlmZ d dlmZ d dlmZ d dlm	Z	 d dl
mZ g d¢Zdd	„Zd
„ Zdd„Zd„ Zd„ Zd„ Zd„ Zy)é    N)Úsqrt)Údatetime)Úbase91)Ú
ParseError)Úlogger)Úparse_comment_telemetry)Úvalidate_callsignÚparse_headerÚparse_timestampÚparse_commentÚparse_data_extentionsÚparse_comment_altitudeÚ	parse_daoc                 óÖ   — t        |«      rd|z  nd}t        j                  d| «      }|st        d|z  «      ‚|d   \  } }}t        |«      rt	        |«      dkD  rt        d|z  «      ‚y y )Nz%s: Ú z^([A-Z0-9]{1,6})(-(\d{1,2}))?$z%sinvalid callsignr   é   z%sssid not in 0-15 range)ÚboolÚreÚfindallr   Úint)ÚcallsignÚprefixÚmatchÚ_Ússids        úW/home/bbl/html/w1hd-tracker/venv/lib/python3.12/site-packages/aprslib/parsing/common.pyr	   r	      sq   € Ü $ V¤ˆV�fŠ_°"€Fä�J‰JÐ8¸(ÓC€EáÜÐ-°Ñ6Ó7Ð7à˜a™Ñ€Hˆa�äˆD„z”c˜$“i "’nÜÐ3°fÑ<Ó=Ð=ð %€zó    c                 óv  — 	 | j                  dd«      \  }}dt        |«      cxk  rdk  r2n t        d«      ‚t        j                  d|t        j
                  «      st        d«      ‚|j                  d«      }t        |d   «      dk(  rt        d	«      ‚|d   }|dd
 }t        |d«       |D ]2  }t        j                  d|t        j
                  «      rŒ)t        d«      ‚ |||dœ}d}t        |«      dk\  rt        j                  d|d   «      r|d   }|j                  d|i«       |S #  t        d«      ‚xY w)z=
    Parses the header part of packet
    Returns a dict
    ú>é   zinvalid packet headeré	   z!^[a-z0-9]{0,9}(\-[a-z0-9]{1,8})?$zfromcallsign is invalidú,r   zno tocallsign in headerNÚ
tocallsignz^[A-Z0-9\-]{1,9}\*?$zinvalid callsign in path)ÚfromÚtoÚpathr   é   z^q..$éþÿÿÿéÿÿÿÿÚvia)	Úsplitr   Úlenr   r   ÚIr	   r   Úupdate)ÚheadÚfromcallr&   ÚtocallÚdigiÚparsedÚviacalls          r   r
   r
   !   s?  € ð
2ØŸ:™: c¨1Ó-Ñˆ�4ð ”�X“Ô# !Ô#ô Ð2Ó3Ð3ô �:‰:Ð:¸HÄbÇdÁdÔKäÐ2Ó3Ð3à�:‰:�c‹?€Dä
ˆ4�‰7ƒ|�qÒÜÐ2Ó3Ð3à�!‰W€FØ��ˆ8€Dä�f˜lÔ+àò 9ˆÜ�z‰zÐ1°4¼¿¹Õ>ÜÐ7Ó8Ð8ð9ð
 ØØñ
€Fð €GÜ
ˆ4ƒy�A‚~œ"Ÿ(™( 8¨T°"©XÔ6Ø�r‘(ˆà
‡M�M�5˜'Ð"Ô#à€MøðE2ÜÐ0Ó1Ð1ús   ‚D+ Ä+D8c                 ó�  — i }t        j                  d| dd «      }|rù|d   \  }}}t        j                  «       }d}|dk(  r|dk7  rn²| dd  } 	 |dk(  r(d|j                  |j
                  |j                  |fz  }n$|dv rd	|j                  |j
                  |dfz  }nd
}|j                  |d«      t        ddd«      z
  }	t        |	j                  |	j                  |	j                  dz  dz  z   dz  z   dz  «      }|j                  |t        |«      dœ«       | |fS # t        $ r!}
d}t        j                  |
«       Y d }
~
ŒFd }
~
ww xY w)Nz^((\d{6})(.))$r   é   r   ÚzÚhz%d%02d%02d%szz/z%d%02d%s%02dÚ19700101000000z%Y%m%d%H%M%Si²  r    é   i  i@B )Úraw_timestampÚ	timestamp)r   r   r   ÚutcnowÚyearÚmonthÚdayÚstrptimer   ÚmicrosecondsÚsecondsÚdaysÚ	Exceptionr   Údebugr.   )ÚbodyÚpacket_typer3   r   ÚrawtsÚtsÚformÚutcr<   ÚtdÚexps              r   r   r   M   sV  € Ø€Fä�J‰JÐ(¨$¨q°¨)Ó4€EÙØ ™(‰ˆˆr�4Ü�o‰oÓˆàˆ	à˜#Ò $¨#¢+Øà˜˜�8ˆDð"à˜3’;Ø .°#·(±(¸C¿I¹IÀsÇwÁwÐPRÐ1SÑ S‘Ið ˜T‘\Ø .°#·(±(¸C¿I¹IÀrÈ1Ð1MÑ M‘Ià 0�Ià—\‘\ )¨^Ó<¼xÈÈaÐQRÓ?SÑS�Ü §¡°B·J±JÀÇÁÈ2ÁÐPTÑATÑ4TÐX]Ñ3]Ñ!]ÐafÑ fÓg�	ð
 	�‰Ø"Ü˜Y›ñô 	ð
 �&ˆ>Ðøô ò "Ø�	Ü—‘˜S×!Ñ!ûð"ús   ÁB,D Ä	EÄ$E Å Ec                 óP  — t        | «      \  } }|j                  |«       t        | «      \  } }|j                  |«       t        | «      \  } }|j                  |«       t	        | |«      } t        | «      dkD  r| d   dk(  r| dd  } |j                  d| j                  d«      i«       y )Nr   ú/r    Úcommentú )r   r.   r   r   r   r,   Ústrip)rG   r3   Úresults      r   r   r   u   s•   € Ü(¨Ó.�L€Dˆ&Ø
‡M�M�&Ôä)¨$Ó/�L€Dˆ&Ø
‡M�M�&Ôä*¨4Ó0�L€Dˆ&Ø
‡M�M�&Ôä�T˜6Ó"€Dä
ˆ4ƒy�1‚}˜˜a™ CšØ�A�Bˆxˆà
‡M�M�9˜dŸj™j¨›oÐ.Õ/r   c           
      ó,  — i }t        j                  d| «      }|�r$|d   \  }}| dd  } |j                  «       r:|dk7  r5|j                  ddt	        |«      cxk  rdk  rn nt	        |«      ndi«       |j                  «       r$|dk7  r|j                  dt	        |«      d	z  i«       t        j                  d
| «      }|r}|dk(  r|j                  ddi«       |d   \  }}| dd  } |j                  «       r|j                  dt	        |«      i«       |j                  «       r|j                  dt	        |«      i«       | |fS t        j                  d| «      }|rù|d   \  }}}	| t        |«      d  } |j                  |t	        |d   «      dz  ddt        |d   «      dz
  z  z  dz  dt	        |d   «      dz  z  dœ«       t	        |d   «      }
|
dk(  rd}
n|
dk(  rd}
nd|
z  }
|
|d<   t        d|d   dz  z  t        |d   dz  |d   dz  z  «      z  «      dz  |d <   |	r0|d!xx   |	d   z  cc<   |j                  d"t	        |	d   d#«      i«       | |fS t        j                  d$| «      }|r)|d   }| dd  } |j                  d%t	        |«      d&z  i«       | |fS )'Nz^([0-9 \.]{3})/([0-9 \.]{3})r   r6   Ú000Úcourser    ih  ÚspeedgoƒÀÊ¡ý?z^/([0-9 \.]{3})/([0-9 \.]{3})é   ÚbearingÚnrqz&^(PHG(\d[\x30-\x7e]\d\d)([0-9A-Z]\/)?)r'   é
   é0   çý‡ôÛ×�Ó?g      $@)ÚphgÚ	phg_powerÚ
phg_heightÚphg_gainé   Úomnir!   Úinvalidé-   Úphg_dirra   r`   rb   g       @grPÂLÛ¿ù?Ú	phg_ranger_   Úphg_rateé   z^RNG(\d{4})Úrngg 8€~ß¿ù?)r   r   Úisdigitr.   r   r,   Úordr   )rG   r3   r   ÚcseÚspdÚbrgr[   Úextr_   Úphgrrg   rk   s               r   r   r   ‡   sÊ  € Ø€Fô
 �J‰JÐ6¸Ó=€EÚØ˜‘8‰ˆˆSØ�A�BˆxˆØ�;‰;Œ=˜S Eš\Ø�M‰M˜8°´c¸#³hÔ1EÀ#Õ1E¤S¨¤XÈ1ÐMÔNØ�;‰;Œ=˜S Eš\Ø�M‰M˜7¤C¨£H¨U¡NÐ3Ô4ô —
‘
Ð;¸TÓBˆÙà�eŠ|Ø—‘˜x¨˜mÔ,Ø˜Q‘x‰HˆC�Ø˜˜�8ˆDØ�{‰{Œ}Ø—‘˜y¬#¨c«(Ð3Ô4Ø�{‰{Œ}Ø—‘˜u¤c¨#£hÐ/Ô0ðT �ˆ<ÐôM —
‘
ÐDÀdÓKˆÙØ" 1™X‰NˆC��dØœ˜C›˜	�?ˆDØ�M‰MØÜ   Q¡›[¨AÑ-Ø! Q¬3¨s°1©v«;¸Ñ+=Ñ%>Ñ?À6ÑIØ¤3 s¨1¡v£;°Ñ#5Ñ6ñ	ô ô ˜#˜a™&“kˆGØ˜!Š|Ø ‘Ø˜A’Ø#‘à˜w™,�à 'ˆF�9Ñä"& q¨F°<Ñ,@À6Ñ,IÑ'JÜ)-¨v°kÑ/BÀTÑ/IØ28¸Ñ2DÀsÑ2Jñ/Ló *0ñ(0ó #)ð ,3ñ	#3ˆF�;Ññ à�u“  a¡Ñ(“Ø—‘˜z¬3¨t°A©w¸Ó+;Ð<Ô=ð �ˆ<Ðô Ÿ
™
 >°4Ó8�ÙØ ™(�CØ  ˜8�DØ—M‘M 5¬#¨c«(°XÑ*=Ð">Ô?à�ˆ<Ðr   c                 ó˜   — i }t        j                  d| «      }|r-|d   \  } }}| |z  } |j                  dt        |«      dz  i«       | |fS )Nz^(.*?)/A=(\-\d{5}|\d{6})(.*)$r   Úaltituder^   )r   r   r.   r   )rG   r3   r   rt   Úrests        r   r   r   Î   sX   € Ø€FÜ�J‰JÐ7¸Ó>€EÙØ$ Q™xÑˆˆh˜Ø�‰ˆØ�‰�z¤3 x£=°Ñ#7Ð8Ô9à�ˆ<Ðr   c                 ó  — t        j                  d| «      }|rí|d   \  } }}}| |z  } |j                  d|j                  «       i«       dx}}|dk(  r9|j	                  «       r)t        |d   «      dz  dz  }t        |d   «      dz  dz  }nK|dk(  rFd	|vrBt        j                  |d   «      d
z  dz  dz  }t        j                  |d   «      d
z  dz  dz  }|dxx   |d   dk\  r|n| z  cc<   |dxx   |d   dk\  r|n| z  cc<   | S )Nz ^(.*)\!([!-{])([ -{]{2})\!(.*?)$r   ÚdaodatumbyteÚWgü©ñÒMbP?é<   r    ÚwrR   g     ÀV@g{®Gáz„?ÚlatitudeÚ	longitude)r   r   r.   Úupperrl   r   r   Ú
to_decimal)rG   r3   r   ÚdaobyteÚdaoru   Ú
lat_offsetÚ
lon_offsets           r   r   r   Ù   s'  € Ü�J‰JÐEÀtÓL€EÙØ#(¨¡8Ñ ˆˆg�s˜DØ�‰ˆà�‰�~ w§}¡}£Ð7Ô8Ø"#Ð#ˆ
�Zà�cŠ>˜cŸk™kœmÜ˜S ™V› uÑ,¨rÑ1ˆJÜ˜S ™V› uÑ,¨rÑ1‰JØ˜Š^ ¨3¡Ü ×+Ñ+¨C°©FÓ3°dÑ:¸dÑBÀRÑGˆJÜ ×+Ñ+¨C°©FÓ3°dÑ:¸dÑBÀRÑGˆJàˆzÓ¨F°:Ñ,>À!Ò,C™jÈ*ÈÑTÓØˆ{Ó¨V°KÑ-@ÀAÒ-E™zÈJÈ;ÑVÓà€Kr   )r   )r   Úmathr   r   Úaprslibr   Úaprslib.exceptionsr   Úaprslib.parsingr   Úaprslib.parsing.telemetryr   Ú__all__r	   r
   r   r   r   r   r   © r   r   ú<module>rŠ      sH   ðÛ 	Ý Ý Ý Ý )Ý "Ý =ò€ó>ò)óX%òP0ò$EòNór   