  % Handle batch mode
  % to overcome problems with too many open files
  \let\mypdfximage\pdfximage\def\pdfximage{\immediate\mypdfximage}
  % Set document class depending on configuration
  \documentclass[twoside]{book}
  %% moved from doxygen.sty due to workaround for LaTex 2019 version and unmaintained tabu package
  \usepackage{ifthen}
  \ifx\requestedLaTeXdate\undefined
    \usepackage{array}
  \else
    \usepackage{array}[=2016-10-06]
  \fi
  %%
  % Packages required by doxygen
  \usepackage{fixltx2e} % for \textsubscript
  \usepackage{doxygen}
  \usepackage{graphicx}
  \usepackage[utf8]{inputenc}
  \usepackage{makeidx}
  \PassOptionsToPackage{warn}{textcomp}
  \usepackage{textcomp}
  \usepackage[nointegrals]{wasysym}
  \usepackage{ifxetex}
  % NLS support packages
  % Define default fonts
  % Font selection
  \usepackage[T1]{fontenc}
  % set main and monospaced font
  \usepackage[scaled=.90]{helvet}
\usepackage{courier}
\renewcommand{\familydefault}{\sfdefault}
  \usepackage{sectsty}
  \allsectionsfont{%
    \fontseries{bc}\selectfont%
    \color{darkgray}%
  }
  \renewcommand{\DoxyLabelFont}{%
    \fontseries{bc}\selectfont%
    \color{darkgray}%
  }
  \newcommand{\+}{\discretionary{\mbox{\scriptsize$\hookleftarrow$}}{}{}}
   % Arguments of doxygenemoji:
   % 1) ':<text>:' form of the emoji, already LaTeX-escaped
   % 2) file with the name of the emoji without the .png extension
   % in case image exist use this otherwise use the ':<text>:' form
   \newcommand{\doxygenemoji}[2]{%
     \IfFileExists{./#2.png}{\raisebox{-0.1em}{\includegraphics[height=0.9em]{./#2.png}}}{#1}%
   }
  % Page & text layout
  \usepackage{geometry}
  \geometry{%
    a4paper,%
    top=2.5cm,%
    bottom=2.5cm,%
    left=2.5cm,%
    right=2.5cm%
  }
  % Allow a bit of overflow to go unnoticed by other means
  \tolerance=750
  \hfuzz=15pt
  \hbadness=750
  \setlength{\emergencystretch}{15pt}
  \setlength{\parindent}{0cm}
  \newcommand{\doxynormalparskip}{\setlength{\parskip}{3ex plus 2ex minus 2ex}}
  \newcommand{\doxytocparskip}{\setlength{\parskip}{1ex plus 0ex minus 0ex}}
  \doxynormalparskip
  % Redefine paragraph/subparagraph environments, using sectsty fonts
  \makeatletter
  \renewcommand{\paragraph}{%
    \@startsection{paragraph}{4}{0ex}{-1.0ex}{1.0ex}{%
      \normalfont\normalsize\bfseries\SS@parafont%
    }%
  }
  \renewcommand{\subparagraph}{%
    \@startsection{subparagraph}{5}{0ex}{-1.0ex}{1.0ex}{%
      \normalfont\normalsize\bfseries\SS@subparafont%
    }%
  }
  \makeatother
  \makeatletter
  \newcommand\hrulefilll{\leavevmode\leaders\hrule\hskip 0pt plus 1filll\kern\z@}
  \makeatother
  % Headers & footers
  \usepackage{fancyhdr}
  \pagestyle{fancyplain}
  \renewcommand{\footrulewidth}{0.4pt}
  \fancypagestyle{fancyplain}{
    \fancyhf{}
    \fancyhead[LE, RO]{\bfseries\thepage}
    \fancyhead[LO]{\bfseries\rightmark}
    \fancyhead[RE]{\bfseries\leftmark}
    \fancyfoot[LO, RE]{\bfseries\scriptsize Generated by Doxygen }
  }
  \fancypagestyle{plain}{
    \fancyhf{}
    \fancyfoot[LO, RE]{\bfseries\scriptsize Generated by Doxygen }
    \renewcommand{\headrulewidth}{0pt}
  }
  \pagestyle{fancyplain}
  \renewcommand{\chaptermark}[1]{%
    \markboth{#1}{}%
  }
  \renewcommand{\sectionmark}[1]{%
    \markright{\thesection\ #1}%
  }
  % ToC, LoF, LoT, bibliography, and index
  % Indices & bibliography
  \usepackage{natbib}
  \usepackage[titles]{tocloft}
  \setcounter{tocdepth}{3}
  \setcounter{secnumdepth}{5}
  % creating indexes
  \makeindex
  \usepackage{newunicodechar}
  \newunicodechar{⁻}{${}^{-}$}% Superscript minus
  \newunicodechar{²}{${}^{2}$}% Superscript two
  \newunicodechar{³}{${}^{3}$}% Superscript three
  % Hyperlinks
  % Custom commands used by the header
  % Custom commands
  \newcommand{\clearemptydoublepage}{%
    \newpage{\pagestyle{empty}\cleardoublepage}%
  }
  % caption style definition
  \usepackage{caption}
  \captionsetup{labelsep=space,justification=centering,font={bf},singlelinecheck=off,skip=4pt,position=top}
  % in page table of contents
  \usepackage{etoc}
  \etocsettocstyle{\doxytocparskip}{\doxynormalparskip}
  % prevent numbers overlap the titles in toc
  \renewcommand{\numberline}[1]{#1~}
% End of preamble, now comes the document contents
%===== C O N T E N T S =====
\begin{document}
  \raggedbottom
  % Titlepage & ToC
  \pagenumbering{alph}
  \begin{titlepage}
  \vspace*{7cm}
  \begin{center}%
  {\Large libosmocore}\\
  \vspace*{1cm}
  {\large Generated by Doxygen 1.9.4}\\
  \end{center}
  \end{titlepage}
  \clearemptydoublepage
  \pagenumbering{roman}
  \tableofcontents
  \clearemptydoublepage
  \pagenumbering{arabic}
%--- Begin generated contents ---
\chapter{libosmocore Documentation}
\label{index}\input{index}
\chapter{Module Index}
\input{modules}
\chapter{Data Structure Index}
\input{annotated}
\chapter{File Index}
\input{files}
\chapter{Module Documentation}
\input{group__bitcomp}
\input{group__bits}
\input{group__bitvec}
\input{group__conv}
\input{group__crc}
\input{group__utils}
\input{group__fsm}
\input{group__gsmtap}
\input{group__osmo__it__q}
\input{group__linuxlist}
\input{group__logging}
\input{group__logging__internal}
\input{group__loggingrb}
\input{group__msgb}
\input{group__osmo__io}
\input{group__prim}
\input{group__rate__ctr}
\input{group__select}
\input{group__sercomm}
\input{group__serial}
\input{group__signal}
\input{group__sockaddr__str}
\input{group__socket}
\input{group__osmo__stat__item}
\input{group__stats}
\input{group__osmo__strrb}
\input{group__Tdef}
\input{group__thread}
\input{group__time__cc}
\input{group__timer}
\input{group__use__count}
\input{group__write__queue}
\input{group__it__q}
\input{group__netdev}
\input{group__netns}
\input{group__tun}
\chapter{Data Structure Documentation}
\input{structbitvec}
\input{structgsmtap__hdr}
\input{structgsmtap__inst}
\input{structgsmtap__osmocore__log__hdr}
\input{structhlist__head}
\input{structhlist__node}
\input{structiofd__backend__ops}
\input{structiofd__msghdr}
\input{structllist__head}
\input{structlog__category}
\input{structlog__context}
\input{structlog__info}
\input{structlog__info__cat}
\input{structlog__target}
\input{structlog__thread__state}
\input{structmsgb}
\input{structnetdev__netns__ctx}
\input{structosmo__config__entry}
\input{structosmo__config__list}
\input{structosmo__conv__code}
\input{structosmo__conv__decoder}
\input{structosmo__conv__encoder}
\input{structosmo__counter}
\input{structosmo__crc16gen__code}
\input{structosmo__crc32gen__code}
\input{structosmo__crc64gen__code}
\input{structosmo__crc8gen__code}
\input{structosmo__fd}
\input{structosmo__fsm}
\input{structosmo__fsm__inst}
\input{structosmo__fsm__state}
\input{structosmo__io__fd}
\input{structosmo__io__ops}
\input{structosmo__isdnhdlc__vars}
\input{structosmo__it__q}
\input{structosmo__mnl}
\input{structosmo__netdev}
\input{structosmo__netns__switch__state}
\input{structosmo__prbs}
\input{structosmo__prbs__state}
\input{structosmo__prim__event__map}
\input{structosmo__prim__hdr}
\input{structosmo__sercomm__inst}
\input{structosmo__signalfd}
\input{structosmo__sock__init2__multiaddr__pars}
\input{structosmo__sockaddr}
\input{structosmo__sockaddr__str}
\input{structosmo__soft__uart}
\input{structosmo__soft__uart__cfg}
\input{structosmo__stat__item}
\input{structosmo__stat__item__desc}
\input{structosmo__stat__item__group}
\input{structosmo__stat__item__group__desc}
\input{structosmo__stat__item__period}
\input{structosmo__stats__config}
\input{structosmo__stats__reporter}
\input{structosmo__strbuf}
\input{structosmo__strrb}
\input{structosmo__talloc__contexts}
\input{structosmo__tcp__stats__config}
\input{structosmo__tdef}
\input{structosmo__tdef__group}
\input{structosmo__tdef__state__timeout}
\input{structosmo__time__cc}
\input{structosmo__time__cc__cfg}
\input{structosmo__timer__list}
\input{structosmo__tundev}
\input{structosmo__unaligned__cpu32}
\input{structosmo__use__count}
\input{structosmo__use__count__entry}
\input{structosmo__wqueue}
\input{structrate__ctr}
\input{structrate__ctr__desc}
\input{structrate__ctr__group}
\input{structrate__ctr__group__desc}
\input{structrate__ctr__per__intv}
\input{structrb__node}
\input{structrb__root}
\input{structsignal__handler}
\input{structvalue__string}
\input{structvdecoder}
\input{structvtrellis}
\chapter{File Documentation}
\input{application_8h}
\input{application_8h_source}
\input{backtrace_8h}
\input{backtrace_8h_source}
\input{base64_8h}
\input{base64_8h_source}
\input{bit16gen_8h}
\input{bit16gen_8h_source}
\input{bit32gen_8h}
\input{bit32gen_8h_source}
\input{bit64gen_8h}
\input{bit64gen_8h_source}
\input{bitcomp_8h}
\input{bitcomp_8h_source}
\input{bits_8h}
\input{bits_8h_source}
\input{bitvec_8h}
\input{bitvec_8h_source}
\input{byteswap_8h}
\input{byteswap_8h_source}
\input{conv_8h}
\input{conv_8h_source}
\input{counter_8h}
\input{counter_8h_source}
\input{crc16_8h}
\input{crc16_8h_source}
\input{crc16gen_8h}
\input{crc16gen_8h_source}
\input{crc32gen_8h}
\input{crc32gen_8h_source}
\input{crc64gen_8h}
\input{crc64gen_8h_source}
\input{crc8gen_8h}
\input{crc8gen_8h_source}
\input{crcgen_8h}
\input{crcgen_8h_source}
\input{defs_8h}
\input{defs_8h_source}
\input{endian_8h}
\input{endian_8h_source}
\input{exec_8h}
\input{exec_8h_source}
\input{fsm_8h}
\input{fsm_8h_source}
\input{gsmtap_8h}
\input{gsmtap_8h_source}
\input{gsmtap__util_8h}
\input{gsmtap__util_8h_source}
\input{hash_8h}
\input{hash_8h_source}
\input{hashtable_8h}
\input{hashtable_8h_source}
\input{isdnhdlc_8h}
\input{isdnhdlc_8h_source}
\input{it__q_8h}
\input{it__q_8h_source}
\input{jhash_8h}
\input{jhash_8h_source}
\input{linuxlist_8h}
\input{linuxlist_8h_source}
\input{linuxrbtree_8h}
\input{linuxrbtree_8h_source}
\input{log2_8h}
\input{log2_8h_source}
\input{logging_8h}
\input{logging_8h_source}
\input{logging__internal_8h}
\input{logging__internal_8h_source}
\input{loggingrb_8h}
\input{loggingrb_8h_source}
\input{macaddr_8h}
\input{macaddr_8h_source}
\input{mnl_8h}
\input{mnl_8h_source}
\input{msgb_8h}
\input{msgb_8h_source}
\input{msgfile_8h}
\input{msgfile_8h_source}
\input{netdev_8h}
\input{netdev_8h_source}
\input{netns_8h}
\input{netns_8h_source}
\input{osmo__io_8h}
\input{osmo__io_8h_source}
\input{panic_8h}
\input{panic_8h_source}
\input{plugin_8h}
\input{plugin_8h_source}
\input{prbs_8h}
\input{prbs_8h_source}
\input{prim_8h}
\input{prim_8h_source}
\input{process_8h}
\input{process_8h_source}
\input{rate__ctr_8h}
\input{rate__ctr_8h_source}
\input{select_8h}
\input{select_8h_source}
\input{sercomm_8h}
\input{sercomm_8h_source}
\input{serial_8h}
\input{serial_8h_source}
\input{signal_8h}
\input{signal_8h_source}
\input{sockaddr__str_8h}
\input{sockaddr__str_8h_source}
\input{socket_8h}
\input{socket_8h_source}
\input{socket__compat_8h}
\input{socket__compat_8h_source}
\input{soft__uart_8h}
\input{soft__uart_8h_source}
\input{stat__item_8h}
\input{stat__item_8h_source}
\input{statistics_8h}
\input{statistics_8h_source}
\input{stats_8h}
\input{stats_8h_source}
\input{stats__tcp_8h}
\input{stats__tcp_8h_source}
\input{strrb_8h}
\input{strrb_8h_source}
\input{talloc_8h}
\input{talloc_8h_source}
\input{tdef_8h}
\input{tdef_8h_source}
\input{thread_8h}
\input{thread_8h_source}
\input{time__cc_8h}
\input{time__cc_8h_source}
\input{timer_8h}
\input{timer_8h_source}
\input{timer__compat_8h}
\input{timer__compat_8h_source}
\input{tun_8h}
\input{tun_8h_source}
\input{use__count_8h}
\input{use__count_8h_source}
\input{utils_8h}
\input{utils_8h_source}
\input{version_8h}
\input{version_8h_source}
\input{write__queue_8h}
\input{write__queue_8h_source}
\input{application_8c}
\input{backtrace_8c}
\input{base64_8c}
\input{bitcomp_8c}
\input{bits_8c}
\input{bitvec_8c}
\input{context_8c}
\input{conv_8c}
\input{conv__acc_8c}
\input{conv__acc__generic_8c}
\input{conv__acc__neon_8c}
\input{conv__acc__neon__impl_8h}
\input{conv__acc__neon__impl_8h_source}
\input{conv__acc__sse_8c}
\input{conv__acc__sse__avx_8c}
\input{conv__acc__sse__impl_8h}
\input{conv__acc__sse__impl_8h_source}
\input{counter_8c}
\input{crc16_8c}
\input{crc16gen_8c}
\input{crc32gen_8c}
\input{crc64gen_8c}
\input{crc8gen_8c}
\input{exec_8c}
\input{fsm_8c}
\input{gsmtap__util_8c}
\input{isdnhdlc_8c}
\input{it__q_8c}
\input{logging_8c}
\input{logging__emscripten_8c}
\input{logging__file_8c}
\input{logging__gsmtap_8c}
\input{logging__syslog_8c}
\input{logging__systemd_8c}
\input{loggingrb_8c}
\input{macaddr_8c}
\input{mnl_8c}
\input{msgb_8c}
\input{msgfile_8c}
\input{netdev_8c}
\input{netns_8c}
\input{osmo__io_8c}
\input{osmo__io__internal_8h}
\input{osmo__io__internal_8h_source}
\input{osmo__io__poll_8c}
\input{osmo__io__uring_8c}
\input{panic_8c}
\input{plugin_8c}
\input{prbs_8c}
\input{prim_8c}
\input{probes_8d}
\input{rate__ctr_8c}
\input{rbtree_8c}
\input{select_8c}
\input{sercomm_8c}
\input{serial_8c}
\input{signal_8c}
\input{sockaddr__str_8c}
\input{socket_8c}
\input{soft__uart_8c}
\input{stat__item_8c}
\input{stat__item__internal_8h}
\input{stat__item__internal_8h_source}
\input{stats_8c}
\input{stats__statsd_8c}
\input{stats__tcp_8c}
\input{strrb_8c}
\input{tdef_8c}
\input{thread_8c}
\input{time__cc_8c}
\input{timer_8c}
\input{timer__clockgettime_8c}
\input{timer__gettimeofday_8c}
\input{tun_8c}
\input{use__count_8c}
\input{utils_8c}
\input{write__queue_8c}
%--- End generated contents ---
% Index
  \backmatter
  \newpage
  \phantomsection
  \clearemptydoublepage
  \addcontentsline{toc}{chapter}{\indexname}
  \printindex
% Required for some languages (in combination with latexdocumentpre from the header)
\end{document}
