%%
%% This is file `fvextra.sty',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% fvextra.dtx  (with options: `package')
%% 
%% This is a generated file.
%% 
%% Copyright (C) 2016-2025 by Geoffrey M. Poore <gpoore@gmail.com>
%% --------------------------------------------------------------------------
%% This work may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License, either version 1.3
%% of this license or (at your option) any later version.
%% The latest version of this license is in
%%   http://www.latex-project.org/lppl.txt
%% and version 1.3 or later is part of all distributions of LaTeX
%% version 2005/12/01 or later.
%% 
\NeedsTeXFormat{LaTeX2e}[1999/12/01]
\ProvidesPackage{fvextra}
    [2025/03/04 v1.12.0 fvextra - extensions and patches for fancyvrb]
\RequirePackage{etoolbox}
\RequirePackage{fancyvrb}
\RequirePackage{pdftexcmds}
\RequirePackage{upquote}
\AtEndPreamble{%
  \ifx\encodingdefault\upquote@OTone
    \ifx\ttdefault\upquote@cmtt\else\RequirePackage{textcomp}\fi
  \else
    \RequirePackage{textcomp}
  \fi}
\RequirePackage{lineno}
\@ifpackageloaded{csquotes}%
 {\PackageWarning{fvextra}{csquotes should be loaded after fvextra, %
  to avoid a warning from the lineno package}}{}
\begingroup
\catcode`\ =\active%
\gdef\FV@ActiveSpaceToken{ }%
\endgroup%
\edef\FV@SpaceCatTen{{\detokenize{ }}}
\def\FV@FVSpaceToken{\FV@Space}
\def\FV@FVTabToken{\FV@Tab}
\def\FVExtraDoSpecials{%
  \do\ \do\!\do\"\do\#\do\$\do\%\do\&\do\'\do\(\do\)\do\*\do\+\do\,\do\-%
  \do\.\do\/\do\:\do\;\do\<\do\=\do\>\do\?\do\@\do\[\do\\\do\]\do\^\do\_%
  \do\`\do\{\do\|\do\}\do\~}
\begingroup
\def\do#1{%
  \expandafter\global\expandafter
  \let\csname FV@Special:\expandafter\@gobble\detokenize{#1}\endcsname\relax}
\FVExtraDoSpecials
\endgroup
\begingroup
\catcode`\<=11
\catcode`\>=11
\gdef\FV@Sentinel{\FV@<Sentinel>}
\endgroup
\begingroup
\catcode`\^^M=\active%
\gdef\FV@OuterDefEOLEmpty{\outer\def^^M{}}%
\endgroup
\begingroup
\catcode`\^^M=\active%
\gdef\FV@DefEOLEmpty{\def^^M{}}%
\endgroup
\begingroup
\catcode`\^^B=\active
\gdef\FV@OuterDefSTXEmpty{\outer\def^^B{}}
\endgroup
\begingroup
\catcode`\^^C=\active
\gdef\FV@OuterDefETXEmpty{\outer\def^^C{}}
\endgroup
\newif\ifFV@pdfTeXinputenc
\FV@pdfTeXinputencfalse
\ifcsname pdfmatch\endcsname
\ifx\pdfmatch\relax
\else
  \@ifpackageloaded{inputenc}%
   {\ifcsname inputencodingname\endcsname
    \ifx\inputencodingname\relax
    \else
      \FV@pdfTeXinputenctrue
    \fi\fi}
   {}%
\fi\fi
\ifFV@pdfTeXinputenc
\begingroup
\catcode`\~=13
\catcode`\"=12
\def\FV@UTFviii@loop{%
  \uccode`\~\count@
  \uppercase\expandafter{\FV@UTFviii@Tmp}%
  \advance\count@\@ne
  \ifnum\count@<\@tempcnta
  \expandafter\FV@UTFviii@loop
  \fi}
\count@"C2
\@tempcnta"E0
\def\FV@UTFviii@Tmp{\expandafter\gdef\csname FV@U8:\string~\endcsname{%
  \FV@UTF@two@octets}}
\FV@UTFviii@loop
\count@"E0
\@tempcnta"F0
\def\FV@UTFviii@Tmp{\expandafter\gdef\csname FV@U8:\string~\endcsname{%
  \FV@UTF@three@octets}}
\FV@UTFviii@loop
\count@"F0
\@tempcnta"F4
\def\FV@UTFviii@Tmp{\expandafter\gdef\csname FV@U8:\string~\endcsname{%
  \FV@UTF@four@octets}}
\FV@UTFviii@loop
\endgroup
\def\FV@UTF@two@octets#1#2{%
  \ifcsname u8:\detokenize{#1#2}\endcsname
  \else
    #1#2%
  \fi
  \FV@UTF@octets@after{#1#2}}
\def\FV@UTF@three@octets#1#2#3{%
  \ifcsname u8:\detokenize{#1#2#3}\endcsname
  \else
    #1#2#3%
  \fi
  \FV@UTF@octets@after{#1#2#3}}
\def\FV@UTF@four@octets#1#2#3#4{%
  \ifcsname u8:\detokenize{#1#2#3#4}\endcsname
  \else
    #1#2#3#4%
  \fi
  \FV@UTF@octets@after{#1#2#3#4}}
\fi
\long\def\FVExtra@ifnextcharAny#1#2#3{%
  \let\reserved@d= #1%
  \def\reserved@a{#2}%
  \def\reserved@b{#3}%
  \futurelet\@let@token\FVExtra@ifnchAny}
\def\FVExtra@ifnchAny{%
  \ifx\@let@token\reserved@d
    \expandafter\reserved@a
  \else
    \expandafter\reserved@b
  \fi}

\long\def\FVExtra@ifnextcharVArg#1#2#3{%
  \begingroup
  \edef\FV@TmpSpaceCat{\the\catcode` }%
  \let\do\@makeother\FVExtraDoSpecials
  \catcode`\ =\FV@TmpSpaceCat\relax
  \catcode`\{=1
  \catcode`\}=2
  \@ifnextchar#1{\endgroup#2}{\endgroup#3}}
\begingroup
\catcode`\*=12
\gdef\FVExtra@ifstarVArg#1{\FVExtra@ifnextcharVArg*{\@firstoftwo{#1}}}
\endgroup
\def\FV@ReadOArgContinue#1[#2]{#1{#2}}
\newcommand{\FVExtraReadOArgBeforeVArg}[2][]{%
  \FVExtra@ifnextcharVArg[%
   {\FV@ReadOArgContinue{#2}}%
   {\FV@ReadOArgContinue{#2}[#1]}}
\newcommand{\FVExtraReadOArgBeforeVEnv}[2][]{%
  \begingroup
  \catcode`\^^M=\active
  \@ifnextchar[%
   {\endgroup\FVExtraReadOArgBeforeVEnv@i{#2}}%
   {\endgroup\FVExtraReadOArgBeforeVEnv@i{#2}[#1]}}
\def\FVExtraReadOArgBeforeVEnv@i#1[#2]{%
  \begingroup
  \catcode`\^^M=\active
  \FVExtraReadOArgBeforeVEnv@ii{#1}{#2}}
\begingroup
\catcode`\^^M=\active%
\gdef\FVExtraReadOArgBeforeVEnv@ii#1#2#3^^M{%
  \endgroup%
  \FVExtraReadOArgBeforeVEnv@iii{#1}{#2}{#3}}%
\endgroup%
\def\FVExtraReadOArgBeforeVEnv@iii#1#2#3{%
  \if\relax\detokenize{#3}\relax
  \else
    \PackageError{fvextra}%
     {Discarded invalid text while checking for optional argument of verbatim environment}%
     {Discarded invalid text while checking for optional argument of verbatim environment}%
  \fi
  #1{#2}}
\def\FVExtraReadVArg#1{%
  \begingroup
  \ifFV@pdfTeXinputenc
    \ifdefstring{\inputencodingname}{utf8}%
     {\let\FV@ReadVArg@Char\FV@ReadVArg@Char@UTF}%
     {}%
  \fi
  \edef\FV@TmpSpaceCat{\the\catcode` }%
  \let\do\@makeother\FVExtraDoSpecials
  \catcode`\^^B=\active
  \FV@OuterDefSTXEmpty
  \catcode`\^^C=\active
  \FV@OuterDefETXEmpty
  \begingroup
  \catcode`\ =\FV@TmpSpaceCat\relax
  \catcode`\{=1
  \catcode`\}=2
  \@ifnextchar\bgroup
   {\endgroup
    \catcode`\{=1
    \catcode`\}=2
    \catcode`\ =\active
    \catcode`\^^I=\active
    \FV@ReadVArg@Group{#1}}%
   {\endgroup
    \catcode`\ =\active
    \catcode`\^^I=\active
    \FV@ReadVArg@Char{#1}}}
\def\FVExtraReadVArgSingleLine#1{%
  \begingroup
  \ifFV@pdfTeXinputenc
    \ifdefstring{\inputencodingname}{utf8}%
     {\let\FV@ReadVArg@Char\FV@ReadVArg@Char@UTF}%
     {}%
  \fi
  \edef\FV@TmpSpaceCat{\the\catcode` }%
  \let\do\@makeother\FVExtraDoSpecials
  \catcode`\^^B=\active
  \FV@OuterDefSTXEmpty
  \catcode`\^^C=\active
  \FV@OuterDefETXEmpty
  \catcode`\^^M=\active
  \FV@OuterDefEOLEmpty
  \begingroup
  \catcode`\ =\FV@TmpSpaceCat\relax
  \catcode`\{=1
  \catcode`\}=2
  \@ifnextchar\bgroup
   {\endgroup
    \catcode`\{=1
    \catcode`\}=2
    \catcode`\ =\active
    \catcode`\^^I=\active
    \FV@ReadVArg@Group{#1}}%
   {\endgroup
    \catcode`\ =\active
    \catcode`\^^I=\active
    \FV@ReadVArg@Char{#1}}}
\def\FV@ReadVArg@Group#1#2{%
  \endgroup
  #1{#2}}
\def\FV@ReadVArg@Char#1#2{%
  \expandafter\expandafter\expandafter
  \if\expandafter\expandafter\expandafter\relax\expandafter\@gobble\detokenize{#2}\relax
    \expandafter\@gobble
  \else
    \expandafter\@firstofone
  \fi
  {\PackageError{fvextra}%
    {Verbatim delimiters must be single characters, not commands}%
    {Try a different delimiter}}%
  \def\FV@ReadVArg@Char@i##1##2#2{%
    \endgroup
    ##1{##2}}%
  \FV@ReadVArg@Char@i{#1}}%
\ifFV@pdfTeXinputenc
\def\FV@ReadVArg@Char@UTF#1#2{%
  \expandafter\expandafter\expandafter
  \if\expandafter\expandafter\expandafter\relax\expandafter\@gobble\detokenize{#2}\relax
    \expandafter\@gobble
  \else
    \expandafter\@firstofone
  \fi
  {\PackageError{fvextra}%
    {Verbatim delimiters must be single characters, not commands}%
    {Try a different delimiter}}%
  \ifcsname FV@U8:\detokenize{#2}\endcsname
    \expandafter\@firstoftwo
  \else
    \expandafter\@secondoftwo
  \fi
  {\def\FV@UTF@octets@after##1{\FV@ReadVArg@Char@UTF@i{#1}{##1}}%
   \csname FV@U8:\detokenize{#2}\endcsname#2}%
  {\FV@ReadVArg@Char@UTF@i{#1}{#2}}}
\def\FV@ReadVArg@Char@UTF@i#1#2{%
  \def\FV@ReadVArg@Char@i##1##2#2{%
    \endgroup
    ##1{##2}}%
  \FV@ReadVArg@Char@i{#1}}%
\fi
\newbool{FV@vargsingleline}
\define@booleankey{FV}{vargsingleline}%
 {\booltrue{FV@vargsingleline}}
 {\boolfalse{FV@vargsingleline}}
\fvset{vargsingleline=false}
\def\FVExtrapdfstringdef#1#2{%
  \AfterPreamble{%
    \ifcsname pdfstringdef\endcsname
    \ifx\pdfstringdef\relax
    \else
    \pdfstringdef#1{#2}%
    \fi\fi}}
\def\FVExtrapdfstringdefDisableCommands#1{%
  \AfterPreamble{%
    \ifcsname pdfstringdefDisableCommands\endcsname
    \ifx\pdfstringdefDisableCommands\relax
    \else
    \pdfstringdefDisableCommands{#1}%
    \fi\fi}}
\long\def\FVExtraAlwaysUnexpanded#1{%
  \unexpanded{\FVExtraAlwaysUnexpanded{#1}}}
\FVExtrapdfstringdefDisableCommands{%
  \long\def\FVExtraAlwaysUnexpanded#1{#1}}
\newbool{FVExtraRobustCommandExpanded}
\protected\def\FVExtraRobustCommand#1#2{%
  \ifx#2\FVExtraAlwaysUnexpanded
    \expandafter\@firstoftwo
  \else
    \expandafter\@secondoftwo
  \fi
  {\booltrue{FVExtraRobustCommandExpanded}\FV@RobustCommand@i{#1}}%
  {\boolfalse{FVExtraRobustCommandExpanded}#1}}
\FVExtrapdfstringdefDisableCommands{%
  \def\FVExtraRobustCommand{}}
\def\FV@RobustCommand@i#1#2{\expandafter#1\@gobble#2}
\def\FVExtraUnexpandedReadStarOArgMArg#1#{%
  \FV@UnexpandedReadStarOArgMArg@i{#1}}
\def\FV@UnexpandedReadStarOArgMArg@i#1#2{%
  \FVExtraAlwaysUnexpanded{\FVExtraUnexpandedReadStarOArgMArg#1{#2}}}
\FVExtrapdfstringdefDisableCommands{%
  \makeatletter
  \def\FV@UnexpandedReadStarOArgMArg@i#1#2{#2}%
  \makeatother}
\def\FVExtraUseVerbUnexpandedReadStarOArgMArg#1#{%
  \FV@UseVerbUnexpandedReadStarOArgMArg@i{#1}}
\def\FV@UseVerbUnexpandedReadStarOArgMArg@i#1#2{%
  \FVExtraAlwaysUnexpanded{\FVExtraUseVerbUnexpandedReadStarOArgMArg#1{#2}}}
\FVExtrapdfstringdefDisableCommands{%
  \makeatletter
  \def\FV@UseVerbUnexpandedReadStarOArgMArg@i#1#2{%
    \ifcsname FV@SVRaw@#2\endcsname
      \expandafter\expandafter\expandafter\FVExtraPDFStringVerbatimDetokenize
      \expandafter\expandafter\expandafter{\csname FV@SVRaw@#2\endcsname}%
    \fi}%
  \makeatother}
\def\FVExtraUnexpandedReadStarOArgBVArg#1#{%
  \FV@UnexpandedReadStarOArgBVArg@i{#1}}
\def\FV@UnexpandedReadStarOArgBVArg@i#1#2{%
  \FVExtraAlwaysUnexpanded{\FVExtraUnexpandedReadStarOArgBVArg#1{#2}}}
\FVExtrapdfstringdefDisableCommands{%
  \makeatletter
  \def\FV@UnexpandedReadStarOArgBVArg@i#1#2{%
    \FVExtraPDFStringVerbatimDetokenize{#2}}%
  \makeatother}
\def\FVExtraUnexpandedReadStarOArgBEscVArg#1#{%
  \FV@UnexpandedReadStarOArgBEscVArg@i{#1}}
\def\FV@UnexpandedReadStarOArgBEscVArg@i#1#2{%
  \FVExtraAlwaysUnexpanded{\FVExtraUnexpandedReadStarOArgBEscVArg#1{#2}}}
\FVExtrapdfstringdefDisableCommands{%
  \makeatletter
  \def\FV@UnexpandedReadStarOArgBEscVArg@i#1#2{%
    \FVExtraPDFStringEscapedVerbatimDetokenize{#2}}%
  \makeatother}
\def\FVExtraUnexpandedReadStarOArgMArgBVArg#1#{%
  \FV@UnexpandedReadStarOArgMArgBVArg@i{#1}}
\def\FV@UnexpandedReadStarOArgMArgBVArg@i#1#2{%
  \FV@UnexpandedReadStarOArgMArgBVArg@ii{#1}{#2}}
\def\FV@UnexpandedReadStarOArgMArgBVArg@ii#1#2#3#{%
  \FV@UnexpandedReadStarOArgMArgBVArg@iii{#1}{#2}{#3}}
\def\FV@UnexpandedReadStarOArgMArgBVArg@iii#1#2#3#4{%
  \FVExtraAlwaysUnexpanded{\FVExtraUnexpandedReadStarOArgMArgBVArg#1{#2}#3{#4}}}
\FVExtrapdfstringdefDisableCommands{%
  \makeatletter
  \def\FV@UnexpandedReadStarOArgMArgBVArg@iii#1#2#3#4{%
    \FVExtraPDFStringVerbatimDetokenize{#4}}%
  \makeatother}
\def\FVExtraPDFStringEscapeChar#1{%
  \ifcsname FV@PDFStringEscapeChar@#1\endcsname
    \csname FV@PDFStringEscapeChar@#1\endcsname
  \else
    #1%
  \fi}
\begingroup
\catcode`\&=14
\catcode`\%=12&
\catcode`\(=12&
\catcode`\)=12&
\catcode`\^^J=12&
\catcode`\^^M=12&
\catcode`\^^I=12&
\catcode`\^^H=12&
\catcode`\^^L=12&
\catcode`\!=0\relax&
!catcode`!\=12!relax&
!expandafter!gdef!csname FV@PDFStringEscapeChar@\!endcsname{\\}&
!expandafter!gdef!csname FV@PDFStringEscapeChar@%!endcsname{\%}&
!expandafter!gdef!csname FV@PDFStringEscapeChar@(!endcsname{\(}&
!expandafter!gdef!csname FV@PDFStringEscapeChar@)!endcsname{\)}&
!expandafter!gdef!csname FV@PDFStringEscapeChar@^^J!endcsname{\n}&
!expandafter!gdef!csname FV@PDFStringEscapeChar@^^M!endcsname{\r}&
!expandafter!gdef!csname FV@PDFStringEscapeChar@^^I!endcsname{\t}&
!expandafter!gdef!csname FV@PDFStringEscapeChar@^^H!endcsname{\b}&
!expandafter!gdef!csname FV@PDFStringEscapeChar@^^L!endcsname{\f}&
!catcode`!\=0!relax&
\endgroup
\def\FVExtraPDFStringEscapeChars#1{%
  \FV@PDFStringEscapeChars#1\FV@Sentinel}
\def\FV@PDFStringEscapeChars#1{%
  \ifx#1\FV@Sentinel
  \else
    \FVExtraPDFStringEscapeChar{#1}%
    \expandafter\FV@PDFStringEscapeChars
  \fi}%
\begingroup
\catcode`\ =10
\catcode`\a=11
\catcode`\<=11
\catcode`\>=11
\catcode`\^^C=\active
\gdef\FVExtraVerbatimDetokenize#1{%
  \FV@VDetok@Scan{}#1^^C \FV@<Sentinel>}
\gdef\FV@VDetok@Scan#1 #2\FV@<Sentinel>{%
  \if\relax\detokenize{#2}\relax
    \expandafter\@firstoftwo
  \else
    \expandafter\@secondoftwo
  \fi
  {\FV@VDetok@ScanEnd#1}%
  {\FV@VDetok@ScanCont{#1}{#2}}}
\gdef\FV@VDetok@ScanEnd#1^^C{%
  \if\relax\detokenize{#1}\relax
    \expandafter\@gobble
  \else
    \expandafter\@firstofone
  \fi
  {\expandafter\FV@VDetok@ScanGroup\@gobble#1{\FV@<Sentinel>}}}
\begingroup
\catcode`\ =12%
\gdef\FV@VDetok@ScanCont#1#2{%
\if\relax\detokenize{#1}\relax%
\expandafter\@gobble%
\else%
\expandafter\@firstofone%
\fi%
{\expandafter\FV@VDetok@ScanGroup\@gobble#1{\FV@<Sentinel>}}%
 %<-catcode 12 space
\FV@VDetok@Scan{}#2\FV@<Sentinel>}%
\endgroup
\gdef\FV@VDetok@ScanGroup#1#{%
  \FV@VDetok@ScanToken#1\FV@Sentinel
  \FV@VDetok@ScanGroup@i}
\gdef\FV@VDetok@ScanGroup@i#1{%
  \if\relax\detokenize{#1}\relax
    \expandafter\@firstoftwo
  \else
    \expandafter\@secondoftwo
  \fi
  {\FV@VDetok@ScanEmptyGroup}%
  {\FV@VDetok@ScanGroup@ii{}#1\FV@<Sentinel>^^C}}
\begingroup
\catcode`\(=1
\catcode`\)=2
\catcode`\{=12
\catcode`\}=12
\gdef\FV@VDetok@ScanEmptyGroup({}\FV@VDetok@ScanGroup)
\endgroup
\begingroup
\catcode`\(=1
\catcode`\)=2
\catcode`\{=12
\catcode`\}=12
\gdef\FV@VDetok@ScanGroup@ii#1\FV@<Sentinel>#2^^C(%
  \if\relax\detokenize(#2)\relax
    \expandafter\@firstofone
  \else
    \expandafter\@gobble
  \fi
  ({\FV@VDetok@Scan#1^^C \FV@<Sentinel>}\FV@VDetok@ScanGroup))
\endgroup
\gdef\FV@VDetok@ScanToken#1{%
  \ifx\FV@Sentinel#1%
    \expandafter\@gobble
  \else
    \expandafter\@firstofone
  \fi
  {\expandafter\FV@VDetok@ScanToken@i\detokenize{#1}^^C \FV@<Sentinel>}}
\gdef\FV@VDetok@ScanToken@i#1 #2\FV@<Sentinel>{%
  \if\relax\detokenize{#2}\relax
    \expandafter\@firstoftwo
  \else
    \expandafter\@secondoftwo
  \fi
  {\FV@VDetok@ScanTokenNoSpace#1}%
  {\FV@VDetok@ScanTokenWithSpace{#1}}}
\gdef\FV@VDetok@ScanTokenNoSpace#1^^C{#1\FV@VDetok@ScanToken}
\gdef\FV@VDetok@ScanTokenWithSpace#1{%
  \if\relax\detokenize{#1}\relax
    \expandafter\@firstoftwo
  \else
    \expandafter\@secondoftwo
  \fi
  {\FV@VDetok@ScanTokenActiveSpace}%
  {\FV@VDetok@ScanTokenWithSpace@i#1\FV@<Sentinel>}}
\begingroup
\catcode`\ =12%
\gdef\FV@VDetok@ScanTokenActiveSpace{ \FV@VDetok@ScanToken}%
\endgroup
\gdef\FV@VDetok@ScanTokenWithSpace@i#1#2\FV@<Sentinel>{%
  \if\relax\detokenize{#2}\relax
    \expandafter\@firstoftwo
  \else
    \expandafter\@secondoftwo
  \fi
  {\FV@VDetok@ScanTokenEscSpace{#1}}%
  {\FV@VDetok@ScanTokenCW{#1#2}}}
\begingroup
\catcode`\ =12%
\gdef\FV@VDetok@ScanTokenEscSpace#1{#1 \FV@VDetok@ScanToken}%
\endgroup
\begingroup
\catcode`\ =12%
\gdef\FV@VDetok@ScanTokenCW#1#2{%
\ifcat\noexpand#2a%
\expandafter\@firstoftwo%
\else%
\expandafter\@secondoftwo%
\fi%
{#1 \FV@VDetok@ScanToken#2}%
{#1\FV@VDetok@ScanToken#2}}%
\endgroup
\gdef\FVExtraPDFStringVerbatimDetokenize#1{%
  \FV@PDFStrVDetok@Scan{}#1^^C \FV@<Sentinel>}
\gdef\FV@PDFStrVDetok@Scan#1 #2\FV@<Sentinel>{%
  \if\relax\detokenize{#2}\relax
    \expandafter\@firstoftwo
  \else
    \expandafter\@secondoftwo
  \fi
  {\FV@PDFStrVDetok@ScanEnd#1}%
  {\FV@PDFStrVDetok@ScanCont{#1}{#2}}}
\gdef\FV@PDFStrVDetok@ScanEnd#1^^C{%
  \if\relax\detokenize{#1}\relax
    \expandafter\@gobble
  \else
    \expandafter\@firstofone
  \fi
  {\expandafter\FV@PDFStrVDetok@ScanGroup\@gobble#1{\FV@<Sentinel>}}}
\begingroup
\catcode`\ =12%
\gdef\FV@PDFStrVDetok@ScanCont#1#2{%
\if\relax\detokenize{#1}\relax%
\expandafter\@gobble%
\else%
\expandafter\@firstofone%
\fi%
{\expandafter\FV@PDFStrVDetok@ScanGroup\@gobble#1{\FV@<Sentinel>}}%
 %<-catcode 12 space
\FV@PDFStrVDetok@Scan{}#2\FV@<Sentinel>}%
\endgroup
\gdef\FV@PDFStrVDetok@ScanGroup#1#{%
  \FV@PDFStrVDetok@ScanToken#1\FV@Sentinel
  \FV@PDFStrVDetok@ScanGroup@i}
\gdef\FV@PDFStrVDetok@ScanGroup@i#1{%
  \if\relax\detokenize{#1}\relax
    \expandafter\@firstoftwo
  \else
    \expandafter\@secondoftwo
  \fi
  {\FV@PDFStrVDetok@ScanEmptyGroup}%
  {\FV@PDFStrVDetok@ScanGroup@ii{}#1\FV@<Sentinel>^^C}}
\begingroup
\catcode`\(=1
\catcode`\)=2
\catcode`\{=12
\catcode`\}=12
\gdef\FV@PDFStrVDetok@ScanEmptyGroup({}\FV@PDFStrVDetok@ScanGroup)
\endgroup
\begingroup
\catcode`\(=1
\catcode`\)=2
\catcode`\{=12
\catcode`\}=12
\gdef\FV@PDFStrVDetok@ScanGroup@ii#1\FV@<Sentinel>#2^^C(%
  \if\relax\detokenize(#2)\relax
    \expandafter\@firstofone
  \else
    \expandafter\@gobble
  \fi
  ({\FV@PDFStrVDetok@Scan#1^^C \FV@<Sentinel>}\FV@PDFStrVDetok@ScanGroup))
\endgroup
\gdef\FV@PDFStrVDetok@ScanToken#1{%
  \ifx\FV@Sentinel#1%
    \expandafter\@gobble
  \else
    \expandafter\@firstofone
  \fi
  {\expandafter\FV@PDFStrVDetok@ScanToken@i\detokenize{#1}^^C \FV@<Sentinel>}}
\gdef\FV@PDFStrVDetok@ScanToken@i#1 #2\FV@<Sentinel>{%
  \if\relax\detokenize{#2}\relax
    \expandafter\@firstoftwo
  \else
    \expandafter\@secondoftwo
  \fi
  {\FV@PDFStrVDetok@ScanTokenNoSpace#1}%
  {\FV@PDFStrVDetok@ScanTokenWithSpace{#1}}}
\gdef\FV@PDFStrVDetok@ScanTokenNoSpace#1^^C{%
  \FVExtraPDFStringEscapeChars{#1}\FV@PDFStrVDetok@ScanToken}
\gdef\FV@PDFStrVDetok@ScanTokenWithSpace#1{%
  \if\relax\detokenize{#1}\relax
    \expandafter\@firstoftwo
  \else
    \expandafter\@secondoftwo
  \fi
  {\FV@PDFStrVDetok@ScanTokenActiveSpace}%
  {\FV@PDFStrVDetok@ScanTokenWithSpace@i#1\FV@<Sentinel>}}
\begingroup
\catcode`\!=0\relax
\catcode`\\=12!relax
!gdef!FV@PDFStrVDetok@ScanTokenActiveSpace{\040!FV@PDFStrVDetok@ScanToken}%
!catcode`!\=0!relax
\endgroup
\gdef\FV@PDFStrVDetok@ScanTokenWithSpace@i#1#2\FV@<Sentinel>{%
  \if\relax\detokenize{#2}\relax
    \expandafter\@firstoftwo
  \else
    \expandafter\@secondoftwo
  \fi
  {\FV@PDFStrVDetok@ScanTokenEscSpace{#1}}%
  {\FV@PDFStrVDetok@ScanTokenCW{#1#2}}}
\begingroup
\catcode`\!=0\relax
\catcode`\\=12!relax
!gdef!FV@PDFStrVDetok@ScanTokenEscSpace#1{%
  !FVExtraPDFStringEscapeChar{#1}\040!FV@PDFStrVDetok@ScanToken}%
!catcode`!\=0!relax
\endgroup
\begingroup
\catcode`\ =12%
\gdef\FV@PDFStrVDetok@ScanTokenCW#1#2{%
\ifcat\noexpand#2a%
\expandafter\@firstoftwo%
\else%
\expandafter\@secondoftwo%
\fi%
{\FVExtraPDFStringEscapeChars{#1} \FV@PDFStrVDetok@ScanToken#2}%
{\FVExtraPDFStringEscapeChars{#1}\FV@PDFStrVDetok@ScanToken#2}}
\endgroup
\gdef\FVExtraEscapedVerbatimDetokenize#1{%
  \FV@EscVDetok@Scan{}#1^^C \FV@<Sentinel>}
\gdef\FV@EscVDetok@Scan#1 #2\FV@<Sentinel>{%
  \if\relax\detokenize{#2}\relax
    \expandafter\@firstoftwo
  \else
    \expandafter\@secondoftwo
  \fi
  {\FV@EscVDetok@ScanEnd#1}%
  {\FV@EscVDetok@ScanCont{#1}{#2}}}
\gdef\FV@EscVDetok@ScanEnd#1^^C{%
  \if\relax\detokenize{#1}\relax
    \expandafter\@gobble
  \else
    \expandafter\@firstofone
  \fi
  {\expandafter\FV@EscVDetok@ScanGroup\@gobble#1{\FV@<Sentinel>}}}
\begingroup
\catcode`\ =12%
\gdef\FV@EscVDetok@ScanCont#1#2{%
\if\relax\detokenize{#1}\relax%
\expandafter\@gobble%
\else%
\expandafter\@firstofone%
\fi%
{\expandafter\FV@EscVDetok@ScanGroup\@gobble#1{\FV@<Sentinel>}}%
 %<-catcode 12 space
\FV@EscVDetok@Scan{}#2\FV@<Sentinel>}%
\endgroup
\gdef\FV@EscVDetok@ScanGroup#1#{%
  \FV@EscVDetok@ScanToken#1\FV@Sentinel
  \FV@EscVDetok@ScanGroup@i}
\gdef\FV@EscVDetok@ScanGroup@i#1{%
  \if\relax\detokenize{#1}\relax
    \expandafter\@firstoftwo
  \else
    \expandafter\@secondoftwo
  \fi
  {\FV@EscVDetok@ScanEmptyGroup}%
  {\FV@EscVDetok@ScanGroup@ii{}#1\FV@<Sentinel>^^C}}
\begingroup
\catcode`\(=1
\catcode`\)=2
\catcode`\{=12
\catcode`\}=12
\gdef\FV@EscVDetok@ScanEmptyGroup({}\FV@EscVDetok@ScanGroup)
\endgroup
\begingroup
\catcode`\(=1
\catcode`\)=2
\catcode`\{=12
\catcode`\}=12
\gdef\FV@EscVDetok@ScanGroup@ii#1\FV@<Sentinel>#2^^C(%
  \if\relax\detokenize(#2)\relax
    \expandafter\@firstofone
  \else
    \expandafter\@gobble
  \fi
  ({\FV@EscVDetok@Scan#1^^C \FV@<Sentinel>}\FV@EscVDetok@ScanGroup))
\endgroup
\gdef\FV@EscVDetok@ScanToken#1{%
  \ifx\FV@Sentinel#1%
    \expandafter\@gobble
  \else
    \expandafter\@firstofone
  \fi
  {\expandafter\FV@EscVDetok@ScanToken@i\detokenize{#1}^^C \FV@<Sentinel>}}
\gdef\FV@EscVDetok@ScanToken@i#1 #2\FV@<Sentinel>{%
  \if\relax\detokenize{#2}\relax
    \expandafter\@firstoftwo
  \else
    \expandafter\@secondoftwo
  \fi
  {\FV@EscVDetok@ScanTokenNoSpace#1}%
  {\FV@EscVDetok@ScanTokenWithSpace{#1}}}
\gdef\FV@EscVDetok@ScanTokenNoSpace#1#2^^C{%
  \if\relax\detokenize{#2}\relax
    \expandafter\@firstoftwo
  \else
    \expandafter\@secondoftwo
  \fi
  {#1\FV@EscVDetok@ScanToken}%
  {#2\FV@EscVDetok@ScanToken}}
\gdef\FV@REscVDetok@ScanTokenNoSpace#1#2^^C{%
  \if\relax\detokenize{#2}\relax
    \expandafter\@firstoftwo
  \else
    \expandafter\@secondoftwo
  \fi
  {#1\FV@EscVDetok@ScanToken}%
  {\ifcsname FV@Special:\detokenize{#2}\endcsname#2\else\noexpand\FV@<InvalidEscape>\fi
   \FV@EscVDetok@ScanToken}}
\gdef\FV@EscVDetok@ScanTokenWithSpace#1{%
  \if\relax\detokenize{#1}\relax
    \expandafter\@firstoftwo
  \else
    \expandafter\@secondoftwo
  \fi
  {\FV@EscVDetok@ScanTokenActiveSpace}%
  {\FV@EscVDetok@ScanTokenWithSpace@i#1\FV@<Sentinel>}}
\begingroup
\catcode`\ =12%
\gdef\FV@EscVDetok@ScanTokenActiveSpace{ \FV@EscVDetok@ScanToken}%
\endgroup
\gdef\FV@EscVDetok@ScanTokenWithSpace@i#1#2\FV@<Sentinel>{%
  \if\relax\detokenize{#2}\relax
    \expandafter\@firstoftwo
  \else
    \expandafter\@secondoftwo
  \fi
  {\FV@EscVDetok@ScanTokenEscSpace{#1}}%
  {\FV@EscVDetok@ScanTokenCW{#1}{#2}}}
\gdef\FV@REscVDetok@ScanTokenWithSpace@i#1#2\FV@<Sentinel>{%
  \if\relax\detokenize{#2}\relax
    \expandafter\@firstoftwo
  \else
    \expandafter\@secondoftwo
  \fi
  {\FV@EscVDetok@ScanTokenEscSpace{#1}}%
  {\noexpand\FV@<InvalidEscape>\FV@EscVDetok@ScanToken}}
\begingroup
\catcode`\ =12%
\gdef\FV@EscVDetok@ScanTokenEscSpace#1{ \FV@EscVDetok@ScanToken}%
\endgroup
\begingroup
\catcode`\ =12%
\gdef\FV@EscVDetok@ScanTokenCW#1#2#3{%
\ifcat\noexpand#2a%
\expandafter\@firstoftwo%
\else%
\expandafter\@secondoftwo%
\fi%
{#2 \FV@EscVDetok@ScanToken#3}%
{#2\FV@EscVDetok@ScanToken#3}}
\endgroup
\gdef\FVExtraPDFStringEscapedVerbatimDetokenize#1{%
  \FV@PDFStrEscVDetok@Scan{}#1^^C \FV@<Sentinel>}
\gdef\FV@PDFStrEscVDetok@Scan#1 #2\FV@<Sentinel>{%
  \if\relax\detokenize{#2}\relax
    \expandafter\@firstoftwo
  \else
    \expandafter\@secondoftwo
  \fi
  {\FV@PDFStrEscVDetok@ScanEnd#1}%
  {\FV@PDFStrEscVDetok@ScanCont{#1}{#2}}}
\gdef\FV@PDFStrEscVDetok@ScanEnd#1^^C{%
  \if\relax\detokenize{#1}\relax
    \expandafter\@gobble
  \else
    \expandafter\@firstofone
  \fi
  {\expandafter\FV@PDFStrEscVDetok@ScanGroup\@gobble#1{\FV@<Sentinel>}}}
\begingroup
\catcode`\!=0\relax
\catcode`\\=12!relax
!gdef!FV@PDFStrEscVDetok@ScanCont#1#2{%
  !if!relax!detokenize{#1}!relax
    !expandafter!@gobble
  !else
    !expandafter!@firstofone
  !fi
  {!expandafter!FV@PDFStrEscVDetok@ScanGroup!@gobble#1{!FV@<Sentinel>}}%
  \040%<-space
  !FV@PDFStrEscVDetok@Scan{}#2!FV@<Sentinel>}%
!catcode`!\=0!relax
\endgroup
\gdef\FV@PDFStrEscVDetok@ScanGroup#1#{%
  \FV@PDFStrEscVDetok@ScanToken#1\FV@Sentinel
  \FV@PDFStrEscVDetok@ScanGroup@i}
\gdef\FV@PDFStrEscVDetok@ScanGroup@i#1{%
  \if\relax\detokenize{#1}\relax
    \expandafter\@firstoftwo
  \else
    \expandafter\@secondoftwo
  \fi
  {\FV@PDFStrEscVDetok@ScanEmptyGroup}%
  {\FV@PDFStrEscVDetok@ScanGroup@ii{}#1\FV@<Sentinel>^^C}}
\begingroup
\catcode`\(=1
\catcode`\)=2
\catcode`\{=12
\catcode`\}=12
\gdef\FV@PDFStrEscVDetok@ScanEmptyGroup({}\FV@PDFStrEscVDetok@ScanGroup)
\endgroup
\begingroup
\catcode`\(=1
\catcode`\)=2
\catcode`\{=12
\catcode`\}=12
\gdef\FV@PDFStrEscVDetok@ScanGroup@ii#1\FV@<Sentinel>#2^^C(%
  \if\relax\detokenize(#2)\relax
    \expandafter\@firstofone
  \else
    \expandafter\@gobble
  \fi
  ({\FV@PDFStrEscVDetok@Scan#1^^C \FV@<Sentinel>}\FV@PDFStrEscVDetok@ScanGroup))
\endgroup
\gdef\FV@PDFStrEscVDetok@ScanToken#1{%
  \ifx\FV@Sentinel#1%
    \expandafter\@gobble
  \else
    \expandafter\@firstofone
  \fi
  {\expandafter\FV@PDFStrEscVDetok@ScanToken@i\detokenize{#1}^^C \FV@<Sentinel>}}
\gdef\FV@PDFStrEscVDetok@ScanToken@i#1 #2\FV@<Sentinel>{%
  \if\relax\detokenize{#2}\relax
    \expandafter\@firstoftwo
  \else
    \expandafter\@secondoftwo
  \fi
  {\FV@PDFStrEscVDetok@ScanTokenNoSpace#1}%
  {\FV@PDFStrEscVDetok@ScanTokenWithSpace{#1}}}
\gdef\FV@PDFStrEscVDetok@ScanTokenNoSpace#1#2^^C{%
  \if\relax\detokenize{#2}\relax
    \expandafter\@firstoftwo
  \else
    \expandafter\@secondoftwo
  \fi
  {\FVExtraPDFStringEscapeChar{#1}\FV@PDFStrEscVDetok@ScanToken}%
  {\FVExtraPDFStringEscapeChar{#2}\FV@PDFStrEscVDetok@ScanToken}}
\gdef\FV@PDFStrEscVDetok@ScanTokenWithSpace#1{%
  \if\relax\detokenize{#1}\relax
    \expandafter\@firstoftwo
  \else
    \expandafter\@secondoftwo
  \fi
  {\FV@PDFStrEscVDetok@ScanTokenActiveSpace}%
  {\FV@PDFStrEscVDetok@ScanTokenWithSpace@i#1\FV@<Sentinel>}}
\begingroup
\catcode`\!=0\relax
\catcode`\\=12!relax
!gdef!FV@PDFStrEscVDetok@ScanTokenActiveSpace{\040!FV@PDFStrEscVDetok@ScanToken}%
!catcode`!\=0!relax
\endgroup
\gdef\FV@PDFStrEscVDetok@ScanTokenWithSpace@i#1#2\FV@<Sentinel>{%
  \if\relax\detokenize{#2}\relax
    \expandafter\@firstoftwo
  \else
    \expandafter\@secondoftwo
  \fi
  {\FV@PDFStrEscVDetok@ScanTokenEscSpace{#1}}%
  {\FV@PDFStrEscVDetok@ScanTokenCW{#1}{#2}}}
\begingroup
\catcode`\!=0\relax
\catcode`\\=12!relax
!gdef!FV@PDFStrEscVDetok@ScanTokenEscSpace#1{\040!FV@PDFStrEscVDetok@ScanToken}
!catcode`!\=0!relax
\endgroup
\begingroup
\catcode`\ =12%
\gdef\FV@PDFStrEscVDetok@ScanTokenCW#1#2#3{%
\ifcat\noexpand#2a%
\expandafter\@firstoftwo%
\else%
\expandafter\@secondoftwo%
\fi%
{\FVExtraPDFStringEscapeChars{#2} \FV@PDFStrEscVDetok@ScanToken#3}%
{\FVExtraPDFStringEscapeChars{#2}\FV@PDFStrEscVDetok@ScanToken#3}}
\endgroup
\gdef\FVExtraDetokenizeVArg#1#2{%
  \begingroup
  \catcode`\^^C=\active
  \let^^C\FV@Sentinel
  \edef\FV@Tmp{\FVExtraVerbatimDetokenize{#2}}%
  \expandafter\FV@DetokenizeVArg@i\expandafter{\FV@Tmp}{#1}}
\gdef\FV@DetokenizeVArg@i#1#2{%
  \endgroup
  #2{#1}}
\gdef\FVExtraDetokenizeEscVArg#1#2{%
  \begingroup
  \catcode`\^^C=\active
  \let^^C\FV@Sentinel
  \edef\FV@Tmp{\FVExtraEscapedVerbatimDetokenize{#2}}%
  \expandafter\FV@DetokenizeVArg@i\expandafter{\FV@Tmp}{#1}}
\gdef\FVExtraDetokenizeREscVArg#1#2{%
  \begingroup
  \catcode`\^^C=\active
  \let^^C\FV@Sentinel
  \let\FV@EscVDetok@ScanTokenNoSpace\FV@REscVDetok@ScanTokenNoSpace
  \let\FV@EscVDetok@ScanTokenWithSpace@i\FV@REscVDetok@ScanTokenWithSpace@i
  \edef\FV@Tmp{\FVExtraEscapedVerbatimDetokenize{#2}}%
  \expandafter\FV@DetokenizeREscVArg@InvalidEscapeCheck\FV@Tmp\FV@<InvalidEscape>\FV@<Sentinel>
  \expandafter\FV@DetokenizeVArg@i\expandafter{\FV@Tmp}{#1}}
\gdef\FV@DetokenizeREscVArg@InvalidEscapeCheck#1\FV@<InvalidEscape>#2\FV@<Sentinel>{%
  \if\relax\detokenize{#2}\relax
    \expandafter\@gobble
  \else
    \expandafter\@firstofone
  \fi
  {\PackageError{fvextra}%
   {Invalid backslash escape; only escape ASCII symbols and punctuation}%
   {Only use \@backslashchar <char> for ASCII symbols and punctuation}}}
\endgroup
\begingroup
\catcode`\^^C=\active%
\catcode`\^^M=\active%
\gdef\FV@RetokVArg@Read#1^^C^^M{%
  \endgroup%
  \def\FV@TmpRetoked{#1}}%
\endgroup
\begingroup
\catcode`\^^B=\active
\catcode`\^^C=\active
\gdef\FVExtraRetokenizeVArg#1#2#3{%
  \begingroup
  #2%
  \catcode`\^^B=\active
  \catcode`\^^C=\active
  \catcode`\^^M=\active
  \let^^B\FV@RetokVArg@Read
  \let^^C\@empty
  \FV@DefEOLEmpty
  \scantokens{^^B#3^^C}%
  \expandafter\FV@RetokenizeVArg@i\expandafter{\FV@TmpRetoked}{#1}}%
\gdef\FV@RetokenizeVArg@i#1#2{%
  #2{#1}}
\endgroup
\let\FV@FormattingPrep@PreHook\@empty
\let\FV@FormattingPrep@PostHook\@empty
\expandafter\def\expandafter\FV@FormattingPrep\expandafter{%
  \expandafter\FV@FormattingPrep@PreHook\FV@FormattingPrep\FV@FormattingPrep@PostHook}
\let\FV@PygmentsHook\relax
\g@addto@macro\FV@FormattingPrep@PreHook{\FV@PygmentsHook}
\edef\FV@hashchar{\string#}
\edef\FV@dollarchar{\string$}
\edef\FV@ampchar{\string&}
\edef\FV@underscorechar{\string_}
\edef\FV@caretchar{\string^}
\edef\FV@tildechar{\string~}
\edef\FV@leftsquarebracket{\string[}
\edef\FV@rightsquarebracket{\string]}
\edef\FV@commachar{\string,}
\newcommand{\FV@EscChars}{%
  \let\#\FV@hashchar
  \let\%\@percentchar
  \let\{\@charlb
  \let\}\@charrb
  \let\$\FV@dollarchar
  \let\&\FV@ampchar
  \let\_\FV@underscorechar
  \let\^\FV@caretchar
  \let\\\@backslashchar
  \let~\FV@tildechar
  \let\~\FV@tildechar
  \let\[\FV@leftsquarebracket
  \let\]\FV@rightsquarebracket
  \let\,\FV@commachar
} %$ <- highlighting
\def\FV@InlineKeyValues{}
\def\fvinlineset#1{%
  \expandafter\def\expandafter\FV@InlineKeyValues\expandafter{%
    \FV@InlineKeyValues#1,}}

\def\FV@UseInlineKeyValues{%
  \expandafter\fvset\expandafter{\FV@InlineKeyValues}%
  \FV@ApplyBreakAnywhereInlineStretch}
\newbool{FV@extra}
\define@booleankey{FV}{extra}%
 {\booltrue{FV@extra}}%
 {\boolfalse{FV@extra}}
\fvset{extra=true}
\def\FancyVerbFormatInline#1{#1}
\def\Verb{%
  \FVExtraRobustCommand\RobustVerb\FVExtraUnexpandedReadStarOArgBVArg}
\protected\def\RobustVerb{\FV@Command{}{Verb}}
\FVExtrapdfstringdefDisableCommands{%
  \def\RobustVerb{}}
\let\FVC@Verb@FV\FVC@Verb
\def\FVC@Verb{%
  \begingroup
  \FV@UseInlineKeyValues\FV@UseKeyValues
  \ifFV@extra
    \expandafter\endgroup\expandafter\FVC@Verb@Extra
  \else
    \expandafter\endgroup\expandafter\FVC@Verb@FV
  \fi}
\def\FVC@Verb@Extra{%
  \ifbool{FVExtraRobustCommandExpanded}%
   {\@ifnextchar\bgroup
     {\FVC@Verb@Extra@i}%
     {\PackageError{fvextra}%
       {\string\Verb\space delimiters must be paired curly braces in this context}%
       {Use curly braces as delimiters}}}%
   {\FVC@Verb@Extra@i}}
\def\FVC@Verb@Extra@i{%
  \begingroup
  \ifbool{FV@vargsingleline}%
   {\let\FV@Reader\FVExtraReadVArgSingleLine}%
   {\let\FV@Reader\FVExtraReadVArg}%
  \FV@Reader{%
    \FV@UseInlineKeyValues\FV@UseKeyValues\FV@FormattingPrep
    \FVExtraDetokenizeVArg{%
      \FVExtraRetokenizeVArg{\FVC@Verb@Extra@ii}{\FV@CatCodes}}}}
\def\FVC@Verb@Extra@ii#1{%
  \ifx\FancyVerbBackgroundColor\relax
    \expandafter\@firstoftwo
  \else
    \expandafter\@secondoftwo
  \fi
   {\ifbool{FV@breaklines}%
    {\FV@InsertBreaks{\FancyVerbFormatInline}{#1}}%
    {\mbox{\FancyVerbFormatInline{#1}}}}%
   {\setlength{\FV@TmpLength}{\fboxsep}%
    \ifx\FancyVerbBackgroundColorPadding\relax
      \setlength{\fboxsep}{0pt}%
    \else
      \setlength{\fboxsep}{\FancyVerbBackgroundColorPadding}%
    \fi
    \colorbox{\FancyVerbBackgroundColor}{%
      \setlength{\fboxsep}{\FV@TmpLength}%
      \FancyVerbBackgroundColorVPhantom\FancyVerbFormatInline{#1}}}%
  \endgroup}
\let\FVC@SaveVerb@FV\FVC@SaveVerb
\def\FVC@SaveVerb{%
  \begingroup
  \FV@UseInlineKeyValues\FV@UseKeyValues
  \ifFV@extra
    \expandafter\endgroup\expandafter\FVC@SaveVerb@Extra
  \else
    \expandafter\endgroup\expandafter\FVC@SaveVerb@FV
  \fi}
\def\FVC@SaveVerb@Extra#1{%
  \@namedef{FV@SV@#1}{}%
  \@namedef{FV@SVRaw@#1}{}%
  \begingroup
  \ifbool{FV@vargsingleline}%
   {\let\FV@Reader\FVExtraReadVArgSingleLine}%
   {\let\FV@Reader\FVExtraReadVArg}%
  \FV@Reader{%
    \FVC@SaveVerb@Extra@i{#1}}}
\def\FVC@SaveVerb@Extra@i#1#2{%
  \FV@UseInlineKeyValues\FV@UseKeyValues\FV@FormattingPrep
  \FVExtraDetokenizeVArg{%
    \FVExtraRetokenizeVArg{\FVC@SaveVerb@Extra@ii{#1}{#2}}{\FV@CatCodes}}{#2}}
\def\FVC@SaveVerb@Extra@ii#1#2#3{%
  \global\let\FV@AfterSave\FancyVerbAfterSave
  \endgroup
  \@namedef{FV@SV@#1}{#3}%
  \@namedef{FV@SVRaw@#1}{#2}%
  \FV@AfterSave}%
\newbool{FV@retokenize}
\define@booleankey{FV}{retokenize}%
 {\booltrue{FV@retokenize}}{\boolfalse{FV@retokenize}}
\def\UseVerb{%
  \FVExtraRobustCommand\RobustUseVerb\FVExtraUseVerbUnexpandedReadStarOArgMArg}
\protected\def\RobustUseVerb{\FV@Command{}{UseVerb}}
\FVExtrapdfstringdefDisableCommands{%
  \def\RobustUseVerb{}}
\let\FVC@UseVerb@FV\FVC@UseVerb
\def\FVC@UseVerb{%
  \begingroup
  \FV@UseInlineKeyValues\FV@UseKeyValues
  \ifFV@extra
    \expandafter\endgroup\expandafter\FVC@UseVerb@Extra
  \else
    \expandafter\endgroup\expandafter\FVC@UseVerb@FV
  \fi}
\def\FVC@UseVerb@Extra#1{%
  \@ifundefined{FV@SV@#1}%
   {\FV@Error{Short verbatim text never saved to name `#1'}\FV@eha}%
   {\begingroup
    \FV@UseInlineKeyValues\FV@UseKeyValues\FV@FormattingPrep
    \ifbool{FV@retokenize}%
     {\expandafter\let\expandafter\FV@Tmp\csname FV@SVRaw@#1\endcsname
      \expandafter\FV@UseVerb@Extra@Retok\expandafter{\FV@Tmp}}%
     {\expandafter\let\expandafter\FV@Tmp\csname FV@SV@#1\endcsname
      \expandafter\FV@UseVerb@Extra\expandafter{\FV@Tmp}}}}
\def\FV@UseVerb@Extra@Retok#1{%
  \FVExtraDetokenizeVArg{%
    \FVExtraRetokenizeVArg{\FV@UseVerb@Extra}{\FV@CatCodes}}{#1}}
\let\FV@UseVerb@Extra\FVC@Verb@Extra@ii
\def\EscVerb{%
  \FVExtraRobustCommand\RobustEscVerb\FVExtraUnexpandedReadStarOArgBEscVArg}
\protected\def\RobustEscVerb{\FV@Command{}{EscVerb}}
\FVExtrapdfstringdefDisableCommands{%
  \def\RobustEscVerb{}}
\def\FVC@EscVerb{%
  \@ifnextchar\bgroup
   {\FVC@EscVerb@i}%
   {\PackageError{fvextra}%
    {Invalid argument; argument must be delimited by paired curly braces}%
    {Delimit argument with curly braces}}}
\def\FVC@EscVerb@i#1{%
  \begingroup
  \FV@UseInlineKeyValues\FV@UseKeyValues\FV@FormattingPrep
  \FVExtraDetokenizeREscVArg{%
    \FVExtraRetokenizeVArg{\FVC@EscVerb@ii}{\FV@CatCodes}}{#1}}
\let\FVC@EscVerb@ii\FVC@Verb@Extra@ii
\def\VerbEnv{%
  \ifcsname @currenvir\endcsname
    \ifx\@currenvir\@empty
      \PackageError{fvextra}{VerbEnv is an environment}{VerbEnv is an environment}%
    \else
      \ifx\@currenvir\relax
        \PackageError{fvextra}{VerbEnv is an environment}{VerbEnv is an environment}%
      \fi
    \fi
  \else
    \PackageError{fvextra}{VerbEnv is an environment}{VerbEnv is an environment}%
  \fi
  \VerbatimEnvironment
  \FVExtraReadOArgBeforeVEnv{\expandafter\VerbEnv@i\expandafter{\FV@EnvironName}}}
\def\VerbEnv@i#1#2{%
  \begingroup
  \let\do\@makeother\FVExtraDoSpecials
  \catcode`\ =\active
  \catcode`\^^I=\active
  \catcode`\^^M=\active
  \VerbEnv@ii{#1}{#2}}
\begingroup
\catcode`\!=0
\catcode`\<=1
\catcode`\>=2
!catcode`!\=12
!catcode`!{=12
!catcode`!}=12
!catcode`!^^M=!active%
!gdef!VerbEnv@ii#1#2#3^^M<%
  !endgroup%
  !def!VerbEnv@CheckLine##1\end{#1}##2!FV@Sentinel<%
    !if!relax!detokenize<##2>!relax%
    !else%
      !PackageError<fvextra><Missing environment contents><Missing environment contents>%
      !let!VerbEnv@iii!VerbEnv@iii@Error%
    !fi>%
  !VerbEnv@CheckLine#3\end{#1}!FV@Sentinel%
  !VerbEnv@iii<#1><#2><#3>>%
!endgroup%
\def\VerbEnv@iii@Error#1#2#3{}
\def\VerbEnv@iii#1#2#3{%
  \begingroup
  \let\do\@makeother\FVExtraDoSpecials
  \catcode`\ =10\relax
  \catcode`\^^M=\active
  \VerbEnv@iv{#1}{#2}{#3}}
\begingroup
\catcode`\!=0
\catcode`\<=1
\catcode`\>=2
!catcode`!\=12
!catcode`!{=12
!catcode`!}=12
!catcode`!^^M=!active%
!gdef!VerbEnv@iv#1#2#3#4^^M<%
  !endgroup%
  !def!VerbEnv@CheckEndDelim##1\end{#1}##2!FV@Sentinel<%
    !if!relax!detokenize<##2>!relax%
      !PackageError<fvextra><Missing end for environment !FV@EnvironName><Add environment end>%
      !let!VerbEnv@v!VerbEnv@v@Error%
    !else%
      !VerbEnv@CheckEndLeading##1!FV@Sentinel%
      !VerbEnv@CheckEndTrailing##2!FV@Sentinel%
    !fi>%
  !def!VerbEnv@CheckEndTrailing##1\end{#1}!FV@Sentinel<%
    !if!relax!detokenize<##1>!relax%
    !else%
      !PackageError<fvextra>%
       <Discarded text after end of environment !FV@EnvironName>%
       <Discarded text after end of environment !FV@EnvironName>%
      !let!VerbEnv@v!VerbEnv@v@Error%
    !fi>%
  !VerbEnv@CheckEndDelim#4\end{#1}!FV@Sentinel%
  !VerbEnv@v<#2><#3>>%
!endgroup
\def\VerbEnv@CheckEndLeading{%
  \FVExtra@ifnextcharAny\@sptoken%
   {\VerbEnv@CheckEndLeading@Continue}%
   {\ifx\@let@token\FV@Sentinel
      \expandafter\VerbEnv@CheckEndLeading@End
    \else
      \expandafter\VerbEnv@CheckEndLeading@EndError
    \fi}}
\def\VerbEnv@CheckEndLeading@Continue#1{%
  \VerbEnv@CheckEndLeading}
\def\VerbEnv@CheckEndLeading@End#1\FV@Sentinel{}
\def\VerbEnv@CheckEndLeading@EndError{%
  \PackageError{fvextra}%
   {Discarded text before end of environment \FV@EnvironName}%
   {Discarded text before end of environment \FV@EnvironName}%
  \let\VerbEnv@v\VerbEnv@v@Error}
\def\VerbEnv@v@Error#1#2{}
\def\VerbEnv@v#1#2{%
  \Verb[#1]{#2}%
  \expandafter\end\expandafter{\FV@EnvironName}}
\def\endVerbEnv{\global\let\FV@EnvironName\relax}
\define@key{FV}{writefilehandle}{%
  \FV@SetWrite#1\FV@Sentinel}
\def\FV@SetWrite#1#2\FV@Sentinel{%
  \let\FancyVerbWriteFileHandle\relax
  \if\relax\detokenize{#2}\relax
    \let\FancyVerbWriteFileHandle#1\relax
  \fi
  \ifx\FancyVerbWriteFileHandle\relax
    \PackageError{fvextra}%
     {Missing or invalid file handle for write}%
     {Need file handle from \string\newwrite}%
  \fi}
\let\FancyVerbWriteFileHandle\relax
\define@key{FV}{writer}{%
  \let\FV@Writer#1\relax}
\def\FancyVerbDefaultWriter#1{%
  \immediate\write\FancyVerbWriteFileHandle{\detokenize{#1}}}
\fvset{writer=\FancyVerbDefaultWriter}
\newcounter{FancyVerbWriteLine}
\def\VerbatimWrite{%
  \FV@Environment
   {codes=,commandchars=none,commentchar=none,defineactive,%
    gobble=0,formatcom=,firstline,lastline}%
   {VerbatimWrite}}
\def\FVB@VerbatimWrite{%
  \@bsphack
  \begingroup
  \setcounter{FancyVerbWriteLine}{0}%
  \let\c@FancyVerbLine\c@FancyVerbWriteLine
  \FV@UseKeyValues
  \FV@DefineWhiteSpace
  \def\FV@Space{\space}%
  \FV@DefineTabOut
  \let\FV@ProcessLine\FV@Writer
  \let\FV@FontScanPrep\relax
  \let\@noligs\relax
  \FancyVerbDefineActive
  \FancyVerbFormatCom
  \FV@Scan}
\def\FVE@VerbatimWrite{%
  \endgroup
  \@esphack}
\def\endVerbatimWrite{\FVE@VerbatimWrite}
\define@key{FV}{afterbuffer}{%
  \def\FV@afterbuffer{#1}}
\fvset{afterbuffer=}
\def\FancyVerbBufferIndex{0}
\define@key{FV}{bufferer}{%
  \let\FV@Bufferer=#1\relax}
\def\FancyVerbDefaultBufferer#1{%
  \expandafter\xdef\csname\FancyVerbBufferLineName\FancyVerbBufferIndex\endcsname{%
    \detokenize{#1}}}
\fvset{bufferer=\FancyVerbDefaultBufferer}
\define@key{FV}{bufferlengthname}{%
  \ifcsname#1\endcsname
  \else
    \expandafter\xdef\csname#1\endcsname{0}%
  \fi
  \def\FancyVerbBufferLengthName{#1}%
  \expandafter\def\expandafter\FV@bufferlengthmacro\expandafter{%
    \csname#1\endcsname}}
\fvset{bufferlengthname=FancyVerbBufferLength}
\define@key{FV}{bufferlinename}{%
  \def\FancyVerbBufferLineName{#1}}
\fvset{bufferlinename=FancyVerbBufferLine}
\define@key{FV}{buffername}{%
  \fvset{bufferlengthname=#1length,bufferlinename=#1line}}
\newbool{FV@globalbuffer}
\define@booleankey{FV}{globalbuffer}%
 {\booltrue{FV@globalbuffer}}%
 {\boolfalse{FV@globalbuffer}}
\fvset{globalbuffer=false}
\newcounter{FancyVerbBufferLine}
\def\FancyVerbBufferDepth{0}
\def\VerbatimBuffer{%
  \FV@Environment
   {codes=,commandchars=none,commentchar=none,defineactive,%
    gobble=0,formatcom=,firstline,lastline}%
   {VerbatimBuffer}}
\def\FVB@VerbatimBuffer{%
  \@bsphack
  \xdef\FancyVerbBufferDepth{\the\numexpr\FancyVerbBufferDepth+1\relax}%
  \begingroup
  \FV@UseKeyValues
  \setcounter{FancyVerbBufferLine}{\FV@bufferlengthmacro}%
  \let\c@FancyVerbLine\c@FancyVerbBufferLine
  \xdef\FancyVerbBufferIndex{\FV@bufferlengthmacro}%
  \ifbool{FV@globalbuffer}%
   {}%
   {\expandafter\xdef\csname FV@setbufferlocalscopevars\FancyVerbBufferDepth\endcsname{%
      \unexpanded{\def\FV@oldbufferlength}%
       {\FV@bufferlengthmacro}%
      \unexpanded{\def\FV@bufferlengthmacro}%
       {\unexpanded\expandafter{\FV@bufferlengthmacro}}%
      \unexpanded{\def\FancyVerbBufferLineName}%
       {\unexpanded\expandafter{\FancyVerbBufferLineName}}}}%
  \ifx\FV@afterbuffer\@empty
  \else
    \ifx\FV@afterbuffer\relax
    \else
      \expandafter\global\expandafter
        \let\csname FV@afterbuffer\FancyVerbBufferDepth\endcsname\FV@afterbuffer
    \fi
  \fi
  \FV@DefineWhiteSpace
  \def\FV@ProcessLine{%
    \xdef\FancyVerbBufferIndex{\the\numexpr\FancyVerbBufferIndex+1\relax}%
    \FV@Bufferer}%
  \let\FV@FontScanPrep\relax
  \let\@noligs\relax
  \FancyVerbDefineActive
  \FancyVerbFormatCom
  \FV@Scan}
\def\FVE@VerbatimBuffer{%
  \expandafter\xdef\FV@bufferlengthmacro{\FancyVerbBufferIndex}%
  \gdef\FancyVerbBufferIndex{0}%
  \endgroup
  \@esphack
  \ifcsname FV@afterbuffer\FancyVerbBufferDepth\endcsname
    \begingroup
    \csname FV@afterbuffer\FancyVerbBufferDepth\endcsname
    \endgroup
    \expandafter\global\expandafter
      \let\csname FV@afterbuffer\FancyVerbBufferDepth\endcsname\FV@Undefined
  \fi
  \ifcsname FV@setbufferlocalscopevars\FancyVerbBufferDepth\endcsname
    \begingroup
    \csname FV@setbufferlocalscopevars\FancyVerbBufferDepth\endcsname
    \loop\unless\ifnum\FV@bufferlengthmacro=\FV@oldbufferlength\relax
      \expandafter\global\expandafter
        \let\csname\FancyVerbBufferLineName\FV@bufferlengthmacro\endcsname\FV@Undefined
      \expandafter\xdef\FV@bufferlengthmacro{%
        \the\numexpr\FV@bufferlengthmacro-1\relax}%
    \repeat
    \endgroup
    \expandafter\global\expandafter
      \let\csname FV@setbufferlocalscopevars\FancyVerbBufferDepth\endcsname\FV@Undefined
  \fi
  \xdef\FancyVerbBufferDepth{\the\numexpr\FancyVerbBufferDepth-1\relax}}
\def\endVerbatimBuffer{\FVE@VerbatimBuffer}
\define@key{FV}{insertenvname}{%
  \def\FV@VerbatimInsertEnvName{#1}}
\fvset{insertenvname=Verbatim}
\def\FV@Environment@InsertBuffer#1#2{%
  \def\FV@KeyValues{#1}%
  \FV@GetKeyValues{\@nameuse{FVB@#2}}}
\def\FV@Scan@InsertBuffer{%
  \FV@CatCodes
  \xdef\FV@EnvironName{\FV@VerbatimInsertEnvName}%
  \ifnum\FV@bufferlengthmacro=\z@\relax
    \PackageError{fvextra}%
     {Buffer length macro \expandafter\string\FV@bufferlengthmacro\space
      is invalid or zero}%
     {}%
    \let\FV@GetLine\relax
  \fi
  \FV@BeginScanning}%
\def\VerbatimInsertBuffer@def@FV@Line#1{%
  \FVExtraRetokenizeVArg{\def\FV@Line}{}{#1}}
\def\FancyVerbGetLine@VerbatimInsertBuffer{%
  \ifnum\FancyVerbBufferIndex>\FV@bufferlengthmacro\relax
    \global\let\FV@EnvironName\relax
    \let\next\relax
  \else
    \ifcsname\FancyVerbBufferLineName\FancyVerbBufferIndex\endcsname
      \expandafter\let\expandafter\FV@Line@Buffer
        \csname\FancyVerbBufferLineName\FancyVerbBufferIndex\endcsname
      \expandafter\VerbatimInsertBuffer@def@FV@Line\expandafter{\FV@Line@Buffer}%
      \def\next{\FV@PreProcessLine\FV@GetLine}%
      \xdef\FancyVerbBufferIndex{\the\numexpr\FancyVerbBufferIndex+1\relax}%
    \else
      \def\next{%
        \PackageError{fvextra}%
         {Buffer with line macro named
          "\FancyVerbBufferLineName\FancyVerbBufferIndex" does not exist}%
         {Check bufferlinename, bufferlengthname, and globalbuffer settings}%
      }%
    \fi
  \fi
  \next}
\newcommand{\VerbatimInsertBuffer}[1][]{%
  \begingroup
  \let\FV@Scan\FV@Scan@InsertBuffer
  \let\FV@CheckScan\relax
  \let\FV@Environment\FV@Environment@InsertBuffer
  \let\FancyVerbGetLine\FancyVerbGetLine@VerbatimInsertBuffer
  \gdef\FancyVerbBufferIndex{1}%
  \VerbatimInsertBuffer@i{#1}%
  \gdef\FancyVerbBufferIndex{0}%
  \endgroup
  \@doendpe}
\begingroup
\catcode`\^^M=\active
\gdef\VerbatimInsertBuffer@i#1{%
  \begingroup%
  \fvset{#1}%
  \global\let\FV@CurrentVerbatimInsertEnvName\FV@VerbatimInsertEnvName%
  \endgroup%
  \csname \FV@CurrentVerbatimInsertEnvName\endcsname[#1]^^M%
  \csname end\FV@CurrentVerbatimInsertEnvName\endcsname%
  \global\let\FV@CurrentVerbatimInsertEnvName\FV@Undefined}%
\endgroup
\newcommand{\VerbatimClearBuffer}[1][]{%
  \begingroup
  \def\FV@KeyValues{#1}%
  \FV@UseKeyValues
  \xdef\FancyVerbBufferIndex{\FV@bufferlengthmacro}%
  \expandafter\xdef\FV@bufferlengthmacro{0}%
  \loop\unless\ifnum\FancyVerbBufferIndex<1\relax
    \expandafter\global\expandafter\let
      \csname\FancyVerbBufferLineName\FancyVerbBufferIndex\endcsname
      \FV@Undefined
    \xdef\FancyVerbBufferIndex{\the\numexpr\FancyVerbBufferIndex-1\relax}%
  \repeat
  \gdef\FancyVerbBufferIndex{0}%
  \endgroup}
\define@key{FV}{wrapperenvname}{%
  \def\FV@WrapperEnvName{#1}%
  \ifx\FV@WrapperEnvName\@empty
    \let\FV@WrapperEnvName\relax
  \fi}
\fvset{wrapperenvname=}
\define@key{FV}{wrapperenvopt}{%
  \def\FV@WrapperEnvOpt{#1}%
  \ifx\FV@WrapperEnvOpt\@empty
    \let\FV@WrapperEnvOpt\relax
  \fi}
\fvset{wrapperenvopt=}
\define@key{FV}{wrapperenvarg}{%
  \def\FV@WrapperEnvArg{#1}%
  \ifx\FV@WrapperEnvArg\@empty
    \let\FV@WrapperEnvArg\relax
  \fi}
\fvset{wrapperenvarg=}
\newcommand{\InsertBuffer}[1][]{%
  \begingroup
  \def\FV@KeyValues{#1}%
  \FV@UseKeyValues
  \ifnum\FV@bufferlengthmacro<1
    \expandafter\endgroup\expandafter\@gobble
  \else
    \expandafter\@firstofone
  \fi
  \InsertBuffer@i}
\def\InsertBuffer@i{%
  \InsertBuffer@expandbuffer
  \expandafter\endgroup\expandafter\scantokens\expandafter{%
    \FV@expandedbuffer\noexpand}\relax}
\def\InsertBuffer@expandbuffer{%
  \edef\FV@expandedbuffer{%
    \ifx\FV@WrapperEnvName\relax
    \else
      \unexpanded\expandafter\expandafter\expandafter{%
        \expandafter\string\expandafter\begin\expandafter{\FV@WrapperEnvName}}%
      \ifx\FV@WrapperEnvOpt\relax
      \else
        \unexpanded\expandafter{\expandafter[\FV@WrapperEnvOpt]}%
      \fi
      \ifx\FV@WrapperEnvArg\relax
      \else
        \unexpanded\expandafter{\expandafter{\FV@WrapperEnvArg}}%
      \fi
      \unexpanded{^^J}%
    \fi
    \InsertBuffer@expandbufferlines{1}%
    \ifx\FV@WrapperEnvName\relax
      \unskip
    \else
      \unexpanded\expandafter\expandafter\expandafter{%
        \expandafter\string\expandafter\end\expandafter{\FV@WrapperEnvName}^^J}%
    \fi}}
\def\InsertBuffer@expandbufferlines#1{%
  \unexpanded\expandafter\expandafter\expandafter{%
    \csname\FancyVerbBufferLineName#1\endcsname^^J}%
  \ifnum\FV@bufferlengthmacro=#1
    \expandafter\@gobble
  \else
    \expandafter\@firstofone
  \fi
  {\expandafter\InsertBuffer@expandbufferlines\expandafter{\the\numexpr#1+1\relax}}}
\let\ClearBuffer\VerbatimClearBuffer
\def\BufferMdfivesum{%
  \pdf@mdfivesum{%
    \ifnum\FV@bufferlengthmacro<1
      \expandafter\@gobble
    \else
      \expandafter\@firstofone
    \fi
    {\BufferMdfivesum@i{1}}}}
\def\BufferMdfivesum@i#1{%
  \csname\FancyVerbBufferLineName#1\endcsname^^J%
  \ifnum\FV@bufferlengthmacro=#1
    \expandafter\@gobble
  \else
    \expandafter\@firstofone
  \fi
  {\expandafter\BufferMdfivesum@i\expandafter{\the\numexpr#1+1\relax}}}
\newcommand{\IterateBuffer}[2][]{%
  \if\relax\detokenize{#1}\relax
  \else
    \let\FancyVerbBufferLengthName@beforeiter\FancyVerbBufferLengthName
    \let\FV@bufferlengthmacro@beforeiter\FV@bufferlengthmacro
    \let\FancyVerbBufferLineName@beforeiter\FancyVerbBufferLineName
    \begingroup
    \def\FV@KeyValues{#1}%
    \FV@UseKeyValues
    \global\let\FancyVerbBufferLengthName@iter\FancyVerbBufferLengthName
    \global\let\FV@bufferlengthmacro@iter\FV@bufferlengthmacro
    \global\let\FancyVerbBufferLineName@iter\FancyVerbBufferLineName
    \endgroup
    \let\FancyVerbBufferLengthName\FancyVerbBufferLengthName@iter
    \let\FV@bufferlengthmacro\FV@bufferlengthmacro@iter
    \let\FancyVerbBufferLineName\FancyVerbBufferLineName@iter
    \global\let\FancyVerbBufferLengthName@iter\FV@Undefined
    \global\let\FV@bufferlengthmacro@iter\FV@Undefined
    \global\let\FancyVerbBufferLineName@iter\FV@Undefined
  \fi
  \gdef\FancyVerbBufferIndex{1}%
  \def\FV@IterateBuffer@cmd{#2}%
  \def\IterateBufferBreak{\xdef\FancyVerbBufferIndex{\FV@bufferlengthmacro}}%
  \loop\unless\ifnum\FancyVerbBufferIndex>\FV@bufferlengthmacro\relax
    \expandafter\let\expandafter\FV@IterateBuffer@line
      \csname\FancyVerbBufferLineName\FancyVerbBufferIndex\endcsname
    \expandafter\FV@IterateBuffer@cmd\expandafter{\FV@IterateBuffer@line}%
    \xdef\FancyVerbBufferIndex{\the\numexpr\FancyVerbBufferIndex+1\relax}%
  \repeat
  \gdef\FancyVerbBufferIndex{0}%
  \let\FV@IterateBuffer@cmd\FV@Undefined
  \let\IterateBufferBreak\FV@Undefined
  \let\FV@IterateBuffer@line\FV@Undefined
  \if\relax\detokenize{#1}\relax
  \else
    \let\FancyVerbBufferLengthName\FancyVerbBufferLengthName@beforeiter
    \let\FV@bufferlengthmacro\FV@bufferlengthmacro@beforeiter
    \let\FancyVerbBufferLineName\FancyVerbBufferLineName@beforeiter
    \let\FancyVerbBufferLengthName@beforeiter\FV@Undefined
    \let\FV@bufferlengthmacro@beforeiter\FV@Undefined
    \let\FancyVerbBufferLineName@beforeiter\FV@Undefined
  \fi}
\def\WriteBuffer{%
  \FV@Command{}{WriteBuffer}}
\def\FVC@WriteBuffer{%
  \@bsphack
  \begingroup
  \setcounter{FancyVerbWriteLine}{0}%
  \let\c@FancyVerbLine\c@FancyVerbWriteLine
  \FV@UseKeyValues
  \FV@DefineWhiteSpace
  \def\FV@Space{\space}%
  \FV@DefineTabOut
  \gdef\FancyVerbBufferIndex{1}%
  \loop\unless\ifnum\FancyVerbBufferIndex>\FV@bufferlengthmacro\relax
    \stepcounter{FancyVerbWriteLine}%
    \expandafter\let\expandafter\FV@WriteBuffer@line
      \csname\FancyVerbBufferLineName\FancyVerbBufferIndex\endcsname
    \expandafter\FV@Writer\expandafter{\FV@WriteBuffer@line}%
    \xdef\FancyVerbBufferIndex{\the\numexpr\FancyVerbBufferIndex+1\relax}%
  \repeat
  \gdef\FancyVerbBufferIndex{0}%
  \endgroup
  \@esphack}
\def\FV@Command#1#2{%
  \FVExtra@ifstarVArg
   {\def\FV@KeyValues{#1,showspaces,showtabs}\FV@@Command{#2}}%
   {\def\FV@KeyValues{#1}\FV@@Command{#2}}}
\def\FV@@Command#1{%
  \FVExtra@ifnextcharVArg[%
    {\FV@GetKeyValues{\@nameuse{FVC@#1}}}%
    {\@nameuse{FVC@#1}}}
\def\@CustomVerbatimCommand#1#2#3#4{%
  \begingroup\fvset{#4}\endgroup
  \@ifundefined{FVC@#3}%
   {\FV@Error{Command `\string#3' is not a FancyVerb command.}\@eha}%
   {\ifcsname Robust#3\endcsname
      \expandafter\@firstoftwo
    \else
      \expandafter\@secondoftwo
    \fi
    {\expandafter\let\expandafter\@tempa\csname #3\endcsname
     \def\@tempb##1##2##3{%
       \expandafter\def\expandafter\@tempc\expandafter{%
         \csname Robust\expandafter\@gobble\string#2\endcsname}%
       \def\@tempd####1{%
         #1{#2}{##1####1##3}}%
       \expandafter\@tempd\@tempc
       \expandafter\protected\expandafter\def\@tempc{\FV@Command{#4}{#3}}}%
     \expandafter\@tempb\@tempa}%
    {#1{#2}{\FV@Command{#4}{#3}}}}}
\def\FancyVerbSpace{%
 \makebox[0.5em]{%
   \kern.07em
   \vrule height.3ex
   \hrulefill
   \vrule height.3ex
   \kern.07em}}
\newcounter{FV@TrueTabGroupLevel}
\def\FV@@ObeyTabs#1{%
  \let\FV@Space@Orig\FV@Space
  \let\FV@Space\FV@Space@ObeyTabs
  \edef\FV@TmpCurrentGroupLevel{\the\currentgrouplevel}%
  \setcounter{FV@TrueTabGroupLevel}{\FV@TmpCurrentGroupLevel}%
  \addtocounter{FV@TrueTabGroupLevel}{1}%
  \setbox\FV@TabBox=\hbox{#1}\box\FV@TabBox
  \let\FV@Space\FV@Space@Orig}
\def\FV@TrueTab{%
  \ifnum\value{FV@TrueTabGroupLevel}=\the\currentgrouplevel\relax
    \expandafter\FV@TrueTab@NoGroup
  \else
    \expandafter\FV@TrueTab@Group
  \fi}
\let\FV@TrueTabSaveWidth\relax
\newcounter{FV@TrueTabCounter}
\def\FV@TrueTabSaveWidth@Save{%
  \expandafter\xdef\csname FV@TrueTab:Width\arabic{FV@TrueTabCounter}\endcsname{%
    \number\@tempdima}%
  \stepcounter{FV@TrueTabCounter}}
\def\FV@TrueTab@NoGroup{%
  \egroup
  \@tempdima=\FV@ObeyTabSize sp\relax
  \@tempcnta=\wd\FV@TabBox
  \advance\@tempcnta\FV@@ObeyTabSize\relax
  \divide\@tempcnta\@tempdima
  \multiply\@tempdima\@tempcnta
  \advance\@tempdima-\wd\FV@TabBox
  \FV@TrueTabSaveWidth
  \setbox\FV@TabBox=\hbox\bgroup
    \unhbox\FV@TabBox\hbox to\@tempdima{\hss\FV@TabChar}}
\newbool{FV@ObeyTabs@Whitespace@Tab}
\def\FV@TrueTab@Group{%
  \booltrue{FV@ObeyTabs@Whitespace@Tab}%
  \gdef\FV@TmpWhitespace{\FV@FVTabToken}%
  \FV@ObeyTabs@ScanWhitespace}
\def\FV@Space@ObeyTabs{%
  \ifnum\value{FV@TrueTabGroupLevel}=\the\currentgrouplevel\relax
    \expandafter\FV@Space@ObeyTabs@NoGroup
  \else
    \expandafter\FV@Space@ObeyTabs@Group
  \fi}
\def\FV@Space@ObeyTabs@NoGroup{\FV@Space@Orig}
\def\FV@Space@ObeyTabs@Group{%
  \boolfalse{FV@ObeyTabs@Whitespace@Tab}%
  \gdef\FV@TmpWhitespace{\FV@FVSpaceToken}%
  \FV@ObeyTabs@ScanWhitespace}
\def\FV@ObeyTabs@ScanWhitespace{%
  \@ifnextchar\FV@FVSpaceToken%
   {\FV@TrueTab@CaptureWhitespace@Space}%
   {\ifx\@let@token\FV@FVTabToken
      \expandafter\FV@TrueTab@CaptureWhitespace@Tab
    \else
      \expandafter\FV@ObeyTabs@ResolveWhitespace
    \fi}}
\def\FV@TrueTab@CaptureWhitespace@Space#1{%
  \g@addto@macro\FV@TmpWhitespace{\FV@FVSpaceToken}%
  \FV@ObeyTabs@ScanWhitespace}
\def\FV@TrueTab@CaptureWhitespace@Tab#1{%
  \booltrue{FV@ObeyTabs@Whitespace@Tab}%
  \g@addto@macro\FV@TmpWhitespace{\FV@FVTabToken}%
  \FV@ObeyTabs@ScanWhitespace}
\newbox\FV@TabBox@Group
\def\FV@TrueTab@Group@Expand{%
  \egroup
  \@tempdima=\FV@ObeyTabSize sp\relax
  \@tempcnta=\wd\FV@TabBox@Group
  \advance\@tempcnta\FV@@ObeyTabSize\relax
  \divide\@tempcnta\@tempdima
  \multiply\@tempdima\@tempcnta
  \advance\@tempdima-\wd\FV@TabBox@Group
  \FV@TrueTabSaveWidth
  \setbox\FV@TabBox@Group=\hbox\bgroup
    \unhbox\FV@TabBox@Group\hbox to\@tempdima{\hss\FV@TabChar}}
\def\FV@ObeyTabs@ResolveWhitespace{%
  \let\FV@Space\FV@Space@Orig
  \let\FV@Tab\FV@TrueTab@Group@Expand
  \expandafter\FV@ObeyTabs@ResolveWhitespace@i\expandafter{\FV@TmpWhitespace}%
  \let\FV@Space\FV@Space@ObeyTabs
  \let\FV@Tab\FV@TrueTab}
\def\FV@ObeyTabs@ResolveWhitespace@i#1{%
  \ifbool{FV@ObeyTabs@Whitespace@Tab}%
   {\setbox\FV@TabBox@Group=\hbox{#1}\box\FV@TabBox@Group}%
   {#1}}
\def\FancyVerbMathSpace{ }
\def\FV@SetupMathSpace{%
  \everymath\expandafter{\the\everymath\let\FV@Space\FancyVerbMathSpace}}
\g@addto@macro\FV@FormattingPrep@PreHook{\FV@SetupMathSpace}
\begingroup
\catcode`\'=\active
\catcode`\^=7
\gdef\FV@pr@m@s{%
  \ifx'\@let@token
    \expandafter\pr@@@s
  \else
    \ifx^\@let@token
      \expandafter\expandafter\expandafter\pr@@@t
    \else
      \egroup
    \fi
  \fi}
\endgroup
\def\FV@SetupMathFont{%
  \everymath\expandafter{\the\everymath\fontfamily{\familydefault}\selectfont}}
\g@addto@macro\FV@FormattingPrep@PreHook{\FV@SetupMathFont}
\def\FV@SetupMathLigs{%
  \everymath\expandafter{%
    \the\everymath
    \let\pr@m@s\FV@pr@m@s
    \begingroup\lccode`\~=`\'\lowercase{\endgroup\def~}{%
      \ifmmode\expandafter\active@math@prime\else'\fi}%
    \begingroup\lccode`\~=`\`\lowercase{\endgroup\def~}{`}%
    \begingroup\lccode`\~=`\<\lowercase{\endgroup\def~}{<}%
    \begingroup\lccode`\~=`\>\lowercase{\endgroup\def~}{>}%
    \begingroup\lccode`\~=`\,\lowercase{\endgroup\def~}{,}%
    \begingroup\lccode`\~=`\-\lowercase{\endgroup\def~}{-}%
  }%
}
\g@addto@macro\FV@FormattingPrep@PreHook{\FV@SetupMathLigs}
\def\FV@BeginListFrame@Lines{%
  \begingroup
  \lineskip\z@skip
  \FV@SingleFrameLine{\z@}%
  \kern-0.5\baselineskip\relax
  \baselineskip\z@skip
  \kern\FV@FrameSep\relax
  \penalty\@M
  \endgroup}
\define@key{FV}{rulecolor}{%
  \ifstrempty{#1}%
   {\let\FancyVerbRuleColor\relax}%
   {\ifstrequal{#1}{none}%
     {\let\FancyVerbRuleColor\relax}%
     {\def\@tempa{#1}%
      \FV@KVProcess@RuleColor#1\FV@Undefined}}}
\def\FV@KVProcess@RuleColor#1#2\FV@Undefined{%
  \ifx#1\color
  \else
    \expandafter\def\expandafter\@tempa\expandafter{%
      \expandafter\color\expandafter{\@tempa}}%
  \fi
  \let\FancyVerbRuleColor\@tempa}
\fvset{rulecolor=none}
\define@key{FV}{fillcolor}{%
  \ifstrempty{#1}%
   {\let\FancyVerbFillColor\relax}%
   {\ifstrequal{#1}{none}%
     {\let\FancyVerbFillColor\relax}%
     {\def\@tempa{#1}%
      \FV@KVProcess@FillColor#1\FV@Undefined}}}
\def\FV@KVProcess@FillColor#1#2\FV@Undefined{%
  \ifx#1\color
  \else
    \expandafter\def\expandafter\@tempa\expandafter{%
      \expandafter\color\expandafter{\@tempa}}%
  \fi
  \let\FancyVerbFillColor\@tempa}
\fvset{fillcolor=none}
\define@booleankey{FV}{linenos}%
  {\@nameuse{FV@Numbers@left}}{\@nameuse{FV@Numbers@none}}
\define@key{FV}{tab}{\def\FancyVerbTab{#1}}
\define@key{FV}{tabcolor}%
 {\ifstrempty{#1}%
   {\let\FV@TabColor\relax}%
   {\ifstrequal{#1}{none}%
     {\let\FV@TabColor\relax}%
     {\def\FV@TabColor{\textcolor{#1}}}}}
\define@booleankey{FV}{showtabs}%
 {\def\FV@TabChar{\FV@TabColor{\FancyVerbTab}}}%
 {\let\FV@TabChar\relax}
\fvset{tabcolor=none, showtabs=false}
\newbool{FV@showspaces}
\define@booleankey{FV}{showspaces}%
 {\booltrue{FV@showspaces}}%
 {\boolfalse{FV@showspaces}}
\fvset{showspaces=false}
\define@key{FV}{space}{\def\FancyVerbSpace{#1}}
\define@key{FV}{spacecolor}%
 {\ifstrempty{#1}%
   {\let\FV@SpaceColor\relax}%
   {\ifstrequal{#1}{none}%
     {\let\FV@SpaceColor\relax}%
     {\def\FV@SpaceColor{\textcolor{#1}}}}}
\fvset{spacecolor=none}
\define@key{FV}{spacebreak}{%
  \def\FancyVerbSpaceBreak{#1}}
\fvset{spacebreak=\discretionary{}{}{}}
\newbool{FV@breakcollapsespaces}
\define@booleankey{FV}{breakcollapsespaces}%
 {\booltrue{FV@breakcollapsespaces}}%
 {\boolfalse{FV@breakcollapsespaces}}%
\fvset{breakcollapsespaces=true}
\def\FV@DefFVSpace{%
  \ifbool{FV@showspaces}%
   {\ifbool{FV@breaklines}%
     {\ifcsname FV@BreakBefore@Token\FV@SpaceCatTen\endcsname
        \def\FV@Space{\FV@SpaceColor{\FancyVerbSpace}}%
      \else\ifcsname FV@BreakAfter@Token\FV@SpaceCatTen\endcsname
        \def\FV@Space{\FV@SpaceColor{\FancyVerbSpace}}%
      \else
        \def\FV@Space{\FV@SpaceColor{\FancyVerbSpace}\FancyVerbSpaceBreak}%
      \fi\fi}%
     {\def\FV@Space{\FV@SpaceColor{\FancyVerbSpace}}}}%
   {\ifbool{FV@breaklines}%
     {\ifcsname FV@BreakBefore@Token\FV@SpaceCatTen\endcsname
        \def\FV@Space{\mbox{\FV@SpaceCatTen}}%
      \else\ifcsname FV@BreakAfter@Token\FV@SpaceCatTen\endcsname
        \def\FV@Space{\mbox{\FV@SpaceCatTen}}%
      \else
        \ifbool{FV@breakcollapsespaces}%
         {\def\FV@Space{\FV@SpaceCatTen}}%
         {\def\FV@Space{\mbox{\FV@SpaceCatTen}\FancyVerbSpaceBreak}}%
      \fi\fi}%
     {\def\FV@Space{\FV@SpaceCatTen}}}}%
\AtEndOfPackage{%
  \g@addto@macro\FV@FormattingPrep@PreHook{\FV@DefFVSpace}}
\define@booleankey{FV}{mathescape}%
 {\let\FancyVerbMathEscape\FV@MathEscape}%
 {\let\FancyVerbMathEscape\relax}
\def\FV@MathEscape{\catcode`\$=3\catcode`\&=4\catcode`\^=7\catcode`\_=8\relax}
\FV@AddToHook\FV@CatCodesHook\FancyVerbMathEscape
\fvset{mathescape=false}
\define@booleankey{FV}{beameroverlays}%
 {\let\FancyVerbBeamerOverlays\FV@BeamerOverlays}%
 {\let\FancyVerbBeamerOverlays\relax}
\def\FV@BeamerOverlays{%
  \expandafter\def\expandafter\@noligs\expandafter{\@noligs
    \catcode`\<=12\catcode`\>=12\relax}}
\FV@AddToHook\FV@FormattingPrep@PreHook\FancyVerbBeamerOverlays
\fvset{beameroverlays=false}
\newbool{FV@CurlyQuotes}
\define@booleankey{FV}{curlyquotes}%
 {\booltrue{FV@CurlyQuotes}}%
 {\boolfalse{FV@CurlyQuotes}}
\def\FancyVerbCurlyQuotes{%
  \ifbool{FV@CurlyQuotes}%
   {\expandafter\def\expandafter\@noligs\expandafter{\@noligs
      \begingroup\lccode`\~=`\`\lowercase{\endgroup\def~}{`}%
      \begingroup\lccode`\~=`\'\lowercase{\endgroup\def~}{'}}}%
   {}}
\g@addto@macro\FV@FormattingPrep@PreHook{\FancyVerbCurlyQuotes}
\fvset{curlyquotes=false}
\define@key{FV}{fontencoding}%
 {\ifstrempty{#1}%
   {\let\FV@FontEncoding\relax}%
   {\ifstrequal{#1}{none}%
     {\let\FV@FontEncoding\relax}%
     {\def\FV@FontEncoding{\fontencoding{#1}}}}}
\expandafter\def\expandafter\FV@SetupFont\expandafter{%
  \expandafter\FV@FontEncoding\FV@SetupFont}
\fvset{fontencoding=none}
\def\FancyVerbFormatLine#1{#1}
\def\FancyVerbFormatText#1{#1}
\def\FV@ListProcessLine@NoBreak#1{%
  \hbox to \hsize{%
    \kern\leftmargin
    \hbox to \linewidth{%
      \FV@LeftListNumber
      \FV@LeftListFrame
      \FV@BGColor@List{%
        \FancyVerbFormatLine{%
          \FancyVerbHighlightLine{%
            \FV@ObeyTabs{\FancyVerbFormatText{#1}}}}}\hss
      \FV@RightListFrame
      \FV@RightListNumber}%
    \hss}\FV@bgcoloroverlap}
\def\FV@BProcessLine#1{%
  \hbox{\FancyVerbFormatLine{%
    \ifx\FancyVerbBackgroundColor\relax
    \else
      \expandafter\FancyVerbBackgroundColorVPhantom
    \fi
    \FancyVerbHighlightLine{%
      \FV@ObeyTabs{\FancyVerbFormatText{#1}}}}}}
\newbool{FV@NumberFirstLine}
\define@booleankey{FV}{numberfirstline}%
 {\booltrue{FV@NumberFirstLine}}%
 {\boolfalse{FV@NumberFirstLine}}
\fvset{numberfirstline=false}
\newbool{FV@StepNumberFromFirst}
\define@booleankey{FV}{stepnumberfromfirst}%
 {\booltrue{FV@StepNumberFromFirst}}%
 {\boolfalse{FV@StepNumberFromFirst}}
\fvset{stepnumberfromfirst=false}
\newbool{FV@StepNumberOffsetValues}
\define@booleankey{FV}{stepnumberoffsetvalues}%
 {\booltrue{FV@StepNumberOffsetValues}}%
 {\boolfalse{FV@StepNumberOffsetValues}}
\fvset{stepnumberoffsetvalues=false}
\def\FV@Numbers@left{%
  \let\FV@RightListNumber\relax
  \def\FV@LeftListNumber{%
    \ifx\FancyVerbStartNum\z@
      \let\FancyVerbStartNum\@ne
    \fi
    \ifbool{FV@StepNumberFromFirst}%
     {\@tempcnta=\FV@CodeLineNo
      \@tempcntb=\FancyVerbStartNum
      \advance\@tempcntb\FV@StepNumber
      \divide\@tempcntb\FV@StepNumber
      \multiply\@tempcntb\FV@StepNumber
      \advance\@tempcnta\@tempcntb
      \advance\@tempcnta-\FancyVerbStartNum
      \@tempcntb=\@tempcnta}%
     {\ifbool{FV@StepNumberOffsetValues}%
       {\@tempcnta=\FV@CodeLineNo
        \@tempcntb=\FV@CodeLineNo}%
       {\@tempcnta=\c@FancyVerbLine
        \@tempcntb=\c@FancyVerbLine}}%
    \divide\@tempcntb\FV@StepNumber
    \multiply\@tempcntb\FV@StepNumber
    \ifnum\@tempcnta=\@tempcntb
      \if@FV@NumberBlankLines
        \hbox to\z@{\hss\theFancyVerbLine\kern\FV@NumberSep}%
      \else
        \ifx\FV@Line\empty
        \else
          \hbox to\z@{\hss\theFancyVerbLine\kern\FV@NumberSep}%
        \fi
      \fi
    \else
      \ifbool{FV@NumberFirstLine}{%
        \ifnum\FV@CodeLineNo=\FancyVerbStartNum
          \hbox to\z@{\hss\theFancyVerbLine\kern\FV@NumberSep}%
        \fi}{}%
    \fi}%
}
\def\FV@Numbers@right{%
  \let\FV@LeftListNumber\relax
  \def\FV@RightListNumber{%
    \ifx\FancyVerbStartNum\z@
      \let\FancyVerbStartNum\@ne
    \fi
    \ifbool{FV@StepNumberFromFirst}%
     {\@tempcnta=\FV@CodeLineNo
      \@tempcntb=\FancyVerbStartNum
      \advance\@tempcntb\FV@StepNumber
      \divide\@tempcntb\FV@StepNumber
      \multiply\@tempcntb\FV@StepNumber
      \advance\@tempcnta\@tempcntb
      \advance\@tempcnta-\FancyVerbStartNum
      \@tempcntb=\@tempcnta}%
     {\ifbool{FV@StepNumberOffsetValues}%
       {\@tempcnta=\FV@CodeLineNo
        \@tempcntb=\FV@CodeLineNo}%
       {\@tempcnta=\c@FancyVerbLine
        \@tempcntb=\c@FancyVerbLine}}%
    \divide\@tempcntb\FV@StepNumber
    \multiply\@tempcntb\FV@StepNumber
    \ifnum\@tempcnta=\@tempcntb
      \if@FV@NumberBlankLines
        \hbox to\z@{\kern\FV@NumberSep\theFancyVerbLine\hss}%
      \else
        \ifx\FV@Line\empty
        \else
          \hbox to\z@{\kern\FV@NumberSep\theFancyVerbLine\hss}%
        \fi
      \fi
    \else
      \ifbool{FV@NumberFirstLine}{%
        \ifnum\FV@CodeLineNo=\FancyVerbStartNum
          \hbox to\z@{\hss\theFancyVerbLine\kern\FV@NumberSep}%
        \fi}{}%
    \fi}%
}
\def\FV@Numbers@both{%
  \def\FV@LeftListNumber{%
    \ifx\FancyVerbStartNum\z@
      \let\FancyVerbStartNum\@ne
    \fi
    \ifbool{FV@StepNumberFromFirst}%
     {\@tempcnta=\FV@CodeLineNo
      \@tempcntb=\FancyVerbStartNum
      \advance\@tempcntb\FV@StepNumber
      \divide\@tempcntb\FV@StepNumber
      \multiply\@tempcntb\FV@StepNumber
      \advance\@tempcnta\@tempcntb
      \advance\@tempcnta-\FancyVerbStartNum
      \@tempcntb=\@tempcnta}%
     {\ifbool{FV@StepNumberOffsetValues}%
       {\@tempcnta=\FV@CodeLineNo
        \@tempcntb=\FV@CodeLineNo}%
       {\@tempcnta=\c@FancyVerbLine
        \@tempcntb=\c@FancyVerbLine}}%
    \divide\@tempcntb\FV@StepNumber
    \multiply\@tempcntb\FV@StepNumber
    \ifnum\@tempcnta=\@tempcntb
      \if@FV@NumberBlankLines
        \hbox to\z@{\hss\theFancyVerbLine\kern\FV@NumberSep}%
      \else
        \ifx\FV@Line\empty
        \else
          \hbox to\z@{\hss\theFancyVerbLine\kern\FV@NumberSep}%
        \fi
      \fi
    \else
      \ifbool{FV@NumberFirstLine}{%
        \ifnum\FV@CodeLineNo=\FancyVerbStartNum
          \hbox to\z@{\hss\theFancyVerbLine\kern\FV@NumberSep}%
        \fi}{}%
    \fi}%
  \def\FV@RightListNumber{%
    \ifx\FancyVerbStartNum\z@
      \let\FancyVerbStartNum\@ne
    \fi
    \ifbool{FV@StepNumberFromFirst}%
     {\@tempcnta=\FV@CodeLineNo
      \@tempcntb=\FancyVerbStartNum
      \advance\@tempcntb\FV@StepNumber
      \divide\@tempcntb\FV@StepNumber
      \multiply\@tempcntb\FV@StepNumber
      \advance\@tempcnta\@tempcntb
      \advance\@tempcnta-\FancyVerbStartNum
      \@tempcntb=\@tempcnta}%
     {\ifbool{FV@StepNumberOffsetValues}%
       {\@tempcnta=\FV@CodeLineNo
        \@tempcntb=\FV@CodeLineNo}%
       {\@tempcnta=\c@FancyVerbLine
        \@tempcntb=\c@FancyVerbLine}}%
    \divide\@tempcntb\FV@StepNumber
    \multiply\@tempcntb\FV@StepNumber
    \ifnum\@tempcnta=\@tempcntb
      \if@FV@NumberBlankLines
        \hbox to\z@{\kern\FV@NumberSep\theFancyVerbLine\hss}%
      \else
        \ifx\FV@Line\empty
        \else
          \hbox to\z@{\kern\FV@NumberSep\theFancyVerbLine\hss}%
        \fi
      \fi
    \else
      \ifbool{FV@NumberFirstLine}{%
        \ifnum\FV@CodeLineNo=\FancyVerbStartNum
          \hbox to\z@{\hss\theFancyVerbLine\kern\FV@NumberSep}%
        \fi}{}%
    \fi}%
}
\define@key{FV}{backgroundcolor}{%
  \def\FancyVerbBackgroundColor{#1}%
  \ifx\FancyVerbBackgroundColor\FV@None
    \let\FancyVerbBackgroundColor\relax
  \else\ifx\FancyVerbBackgroundColor\@empty
    \let\FancyVerbBackgroundColor\relax
  \fi\fi}%
\fvset{backgroundcolor=none}
\define@key{FV}{bgcolor}{%
  \fvset{backgroundcolor=#1}}
\patchcmd{\FV@List}%
 {\FV@BeginListFrame}%
 {\ifx\FancyVerbBackgroundColor\relax
  \else
    \lineskip\z@
  \fi
  \FV@BeginListFrame}%
 {}%
 {\PackageError{fvextra}%
   {Failed to patch \string\FV@List\ for backgroundcolor}%
   {Failed to patch \string\FV@List\ for backgroundcolor}}
\define@key{FV}{backgroundcolorboxoverlap}{%
  \ifdim#1=0pt\relax
    \let\FV@backgroundcolorboxoverlap\relax
  \else
    \def\FV@backgroundcolorboxoverlap{#1}%
  \fi}
\fvset{backgroundcolorboxoverlap=0.25pt}
\define@key{FV}{bgcolorboxoverlap}{%
  \fvset{backgroundcolorboxoverlap=#1}}
\newsavebox{\FV@bgcolorstructbox}
\def\FV@bgcolorstrut{%
  \ifx\FancyVerbBackgroundColor\relax
    \FancyVerbBackgroundColorVPhantom\strut
  \else\ifx\FV@backgroundcolorboxoverlap\relax
    \FancyVerbBackgroundColorVPhantom\strut
  \else
    \savebox{\FV@bgcolorstructbox}{\hbox{\FancyVerbBackgroundColorVPhantom\strut}}%
    \vrule height \ht\FV@bgcolorstructbox
           depth \dimexpr\dp\FV@bgcolorstructbox+\FV@backgroundcolorboxoverlap\relax
           width 0pt\relax
  \fi\fi}
\def\FV@bgcoloroverlap{%
  \ifx\FV@backgroundcolorboxoverlap\relax
  \else
    \vspace{-\FV@backgroundcolorboxoverlap}%
  \fi}
\define@key{FV}{backgroundcolorvphantom}{%
  \def\FancyVerbBackgroundColorVPhantom{#1}%
  \ifx\FancyVerbBackgroundColorVPhantom\FV@None
    \let\FancyVerbBackgroundColorVPhantom\relax
  \else\ifx\FancyVerbBackgroundColorVPhantom\@empty
    \let\FancyVerbBackgroundColorVPhantom\relax
  \fi\fi}
\fvset{backgroundcolorvphantom=\vphantom{\"Apgjy}}
\define@key{FV}{bgcolorvphantom}{%
  \fvset{backgroundcolorvphantom=#1}}
\let\FancyVerbBackgroundColorPadding\relax
\def\FV@backgroundcolorpadding@none@framenotsingle{%
  \fvset{frame=none,framerule,rulecolor=none}}
\def\FV@backgroundcolorpadding@dim@framenotsingle{%
  \fvset{frame=single,framerule=0pt,rulecolor=\FancyVerbBackgroundColor}}
\define@key{FV}{backgroundcolorpadding}{%
  \def\FancyVerbBackgroundColorPadding{#1}%
  \ifx\FancyVerbBackgroundColorPadding\FV@None
    \let\FancyVerbBackgroundColorPadding\relax
  \else\ifx\FancyVerbBackgroundColorPadding\@empty
    \let\FancyVerbBackgroundColorPadding\relax
  \fi\fi
  \let\FV@Next\relax
  \ifx\FancyVerbBackgroundColorPadding\relax
    \ifx\FV@BeginListFrame\FV@BeginListFrame@Single
    \else
      \let\FV@Next\FV@backgroundcolorpadding@none@framenotsingle
    \fi
    \ifx\FV@LeftListFrame\FV@LeftListFrame@Single
    \else
      \let\FV@Next\FV@backgroundcolorpadding@none@framenotsingle
    \fi
    \ifx\FV@RightListFrame\FV@RightListFrame@Single
    \else
      \let\FV@Next\FV@backgroundcolorpadding@none@framenotsingle
    \fi
    \ifx\FV@EndListFrame\FV@EndListFrame@Single
    \else
      \let\FV@Next\FV@backgroundcolorpadding@none@framenotsingle
    \fi
    \FV@Next
    \fvset{framesep,fillcolor=none}%
  \else
    \ifx\FV@BeginListFrame\FV@BeginListFrame@Single
    \else
      \let\FV@Next\FV@backgroundcolorpadding@dim@framenotsingle
    \fi
    \ifx\FV@LeftListFrame\FV@LeftListFrame@Single
    \else
      \let\FV@Next\FV@backgroundcolorpadding@dim@framenotsingle
    \fi
    \ifx\FV@RightListFrame\FV@RightListFrame@Single
    \else
      \let\FV@Next\FV@backgroundcolorpadding@dim@framenotsingle
    \fi
    \ifx\FV@EndListFrame\FV@EndListFrame@Single
    \else
      \let\FV@Next\FV@backgroundcolorpadding@dim@framenotsingle
    \fi
    \FV@Next
    \fvset{framesep=#1,fillcolor=\FancyVerbBackgroundColor}%
  \fi}
\define@key{FV}{bgcolorpadding}{\fvset{backgroundcolorpadding=#1}}
\def\FV@BGColor@List#1{%
  \ifx\FancyVerbBackgroundColor\relax
    \expandafter\@firstoftwo
  \else
    \expandafter\@secondoftwo
  \fi
   {#1}%
   {\setlength{\FV@TmpLength}{\fboxsep}%
    \setlength{\fboxsep}{0pt}%
    \colorbox{\FancyVerbBackgroundColor}{%
      \setlength{\fboxsep}{\FV@TmpLength}%
      \rlap{\FV@bgcolorstrut#1}%
      \hspace{\linewidth}%
      \ifx\FV@RightListFrame\relax\else
        \hspace{-\FV@FrameSep}%
        \hspace{-\FV@FrameRule}%
      \fi
      \ifx\FV@LeftListFrame\relax\else
        \hspace{-\FV@FrameSep}%
        \hspace{-\FV@FrameRule}%
      \fi}%
    \hss}}
\let\FV@BVerbatimBegin@NoBGColor\FV@BVerbatimBegin
\let\FV@BVerbatimEnd@NoBGColor\FV@BVerbatimEnd
\def\FV@BVerbatimBegin{%
  \begingroup
  \FV@UseKeyValues
  \FV@FormattingPrep
  \let\FV@FormattingPrep\relax
  \FV@ObeyTabsInit
  \let\FV@ObeyTabsInit\relax
  \ifx\FancyVerbBackgroundColor\relax
    \expandafter\FV@BVerbatimBegin@NoBGColor
  \else
    \expandafter\FV@BVerbatimBegin@BGColor
  \fi}
\def\FV@BVerbatimEnd{%
  \ifx\FancyVerbBackgroundColor\relax
    \expandafter\FV@BVerbatimEnd@NoBGColor
  \else
    \expandafter\FV@BVerbatimEnd@BGColor
  \fi
  \endgroup}
\def\FV@BVerbatimBegin@BGColor{%
  \gdef\FV@TheVerbatim{}%
  \ifx\FV@boxwidth\relax
    \gdef\FV@boxwidth@tmp{0pt}%
    \def\FV@ProcessLine##1{%
      \sbox{\FV@LineBox}{\FV@BProcessLine{##1}}%
      \ifdim\wd\FV@LineBox>\FV@boxwidth@tmp\relax
        \xdef\FV@boxwidth@tmp{\the\wd\FV@LineBox}%
      \fi
      \expandafter\gdef\expandafter\FV@TheVerbatim\expandafter{%
        \FV@TheVerbatim\FV@ProcessLine{##1}}}%
  \else
    \def\FV@ProcessLine##1{%
      \expandafter\gdef\expandafter\FV@TheVerbatim\expandafter{%
        \FV@TheVerbatim\FV@ProcessLine{##1}}}%
  \fi}
\def\FV@BVerbatimEnd@BGColor{%
  \ifx\FV@boxwidth\relax
    \let\FV@boxwidth\FV@boxwidth@tmp
    \global\let\FV@boxwidth@tmp\FV@Undefined
  \fi
  \setlength{\FV@TmpLength}{\fboxsep}%
  \ifx\FancyVerbBackgroundColorPadding\relax
    \setlength{\fboxsep}{0pt}%
  \else
    \setlength{\fboxsep}{\FancyVerbBackgroundColorPadding}%
  \fi
  \colorbox{\FancyVerbBackgroundColor}{%
    \setlength{\fboxsep}{\FV@TmpLength}%
    \FV@BVerbatimBegin@NoBGColor\FV@TheVerbatim\FV@BVerbatimEnd@NoBGColor}%
  \gdef\FV@TheVerbatim{}}
\define@key{FV}{highlightlines}{\def\FV@HighlightLinesList{#1}}%
\fvset{highlightlines=}
\define@key{FV}{highlightcolor}{\def\FancyVerbHighlightColor{#1}}%
\let\FancyVerbHighlightColor\@empty
\ifcsname definecolor\endcsname
\ifx\definecolor\relax
\else
  \definecolor{FancyVerbHighlightColor}{rgb}{0.878, 1, 1}
  \fvset{highlightcolor=FancyVerbHighlightColor}
\fi\fi
\AtBeginDocument{%
  \ifx\FancyVerbHighlightColor\@empty
    \ifcsname definecolor\endcsname
    \ifx\definecolor\relax
    \else
    \definecolor{FancyVerbHighlightColor}{rgb}{0.878, 1, 1}
    \fvset{highlightcolor=FancyVerbHighlightColor}
    \fi\fi
  \fi}
\def\FancyVerbHighlightLine#1{#1}
\def\FV@HighlightLine#1{%
  \@tempcnta=\c@FancyVerbLine
  \@tempcntb=\c@FancyVerbLine
  \ifcsname FV@HighlightLine:\number\@tempcnta\endcsname
    \advance\@tempcntb\m@ne
    \ifcsname FV@HighlightLine:\number\@tempcntb\endcsname
      \advance\@tempcntb\tw@
      \ifcsname FV@HighlightLine:\number\@tempcntb\endcsname
        \let\FV@HighlightLine@Next\FancyVerbHighlightLineMiddle
      \else
        \let\FV@HighlightLine@Next\FancyVerbHighlightLineLast
      \fi
    \else
      \advance\@tempcntb\tw@
      \ifcsname FV@HighlightLine:\number\@tempcntb\endcsname
        \let\FV@HighlightLine@Next\FancyVerbHighlightLineFirst
      \else
        \let\FV@HighlightLine@Next\FancyVerbHighlightLineSingle
      \fi
    \fi
  \else
    \let\FV@HighlightLine@Next\FancyVerbHighlightLineNormal
  \fi
  \FV@HighlightLine@Next{#1}%
}
\def\FancyVerbHighlightLineNormal#1{#1}
\newlength{\FV@TmpLength}
\def\FancyVerbHighlightLineFirst#1{%
  \setlength{\FV@TmpLength}{\fboxsep}%
  \setlength{\fboxsep}{0pt}%
  \colorbox{\FancyVerbHighlightColor}{%
    \setlength{\fboxsep}{\FV@TmpLength}%
    \rlap{\strut#1}%
    \hspace{\linewidth}%
    \ifx\FV@RightListFrame\relax\else
      \hspace{-\FV@FrameSep}%
      \hspace{-\FV@FrameRule}%
    \fi
    \ifx\FV@LeftListFrame\relax\else
      \hspace{-\FV@FrameSep}%
      \hspace{-\FV@FrameRule}%
    \fi
  }%
  \hss
}
\let\FancyVerbHighlightLineMiddle\FancyVerbHighlightLineFirst
\let\FancyVerbHighlightLineLast\FancyVerbHighlightLineFirst
\let\FancyVerbHighlightLineSingle\FancyVerbHighlightLineFirst
\def\FV@HighlightLinesPrep{%
  \ifx\FV@HighlightLinesList\@empty
  \else
    \let\FancyVerbHighlightLine\FV@HighlightLine
    \expandafter\FV@HighlightLinesPrep@i
  \fi}
\def\FV@HighlightLinesPrep@i{%
  \renewcommand{\do}[1]{%
    \ifstrempty{##1}{}{\FV@HighlightLinesParse##1-\FV@Undefined}}%
  \expandafter\docsvlist\expandafter{\FV@HighlightLinesList}}
\def\FV@HighlightLinesParse#1-#2\FV@Undefined{%
  \ifstrempty{#2}%
   {\FV@HighlightLinesParse@Single{#1}}%
   {\FV@HighlightLinesParse@Range{#1}#2\relax}}
\def\FV@HighlightLinesParse@Single#1{%
  \expandafter\let\csname FV@HighlightLine:\detokenize{#1}\endcsname\relax}
\newcounter{FV@HighlightLinesStart}
\newcounter{FV@HighlightLinesStop}
\def\FV@HighlightLinesParse@Range#1#2-{%
  \setcounter{FV@HighlightLinesStart}{#1}%
  \setcounter{FV@HighlightLinesStop}{#2}%
  \stepcounter{FV@HighlightLinesStop}%
  \FV@HighlightLinesParse@Range@Loop}
\def\FV@HighlightLinesParse@Range@Loop{%
  \ifnum\value{FV@HighlightLinesStart}<\value{FV@HighlightLinesStop}\relax
    \expandafter\let\csname FV@HighlightLine:\arabic{FV@HighlightLinesStart}\endcsname\relax
    \stepcounter{FV@HighlightLinesStart}%
    \expandafter\FV@HighlightLinesParse@Range@Loop
  \fi}
\g@addto@macro\FV@FormattingPrep@PreHook{\FV@HighlightLinesPrep}
\def\FV@StepLineNo@Patch@HighlightLine{%
  \ifcsname FV@HighlightLine:\number\c@FancyVerbLine\endcsname
    \@tempcnta=\c@FancyVerbLine
    \advance\@tempcnta\@ne
    \ifcsname FV@HighlightLine:\number\@tempcnta\endcsname
    \else
      \expandafter\let
        \csname FV@HighlightLine:\number\c@FancyVerbLine\endcsname\FV@Undefined
    \fi
  \fi}
\patchcmd{\FV@StepLineNo}%
 {\ifx\FV@Line\empty}%
 {\ifx\FV@Line\empty\FV@StepLineNo@Patch@HighlightLine}%
 {}%
 {\PackageError{fvextra}%
   {Failed to patch \string\FV@StepLineNo\ to make highlightlines
    compatible with numberblanklines}%
   {Failed to patch \string\FV@StepLineNo\ to make highlightlines
    compatible with numberblanklines}}
\newcount\FV@LoopCount
\newbox\FV@NCharsBox
\def\FV@SetToWidthNChars#1#2{%
  \FV@LoopCount=#2\relax
  \ifnum\FV@LoopCount>0
    \def\FV@NChars{}%
    \loop
    \ifnum\FV@LoopCount>0
      \expandafter\def\expandafter\FV@NChars\expandafter{\FV@NChars x}%
    \fi
    \advance\FV@LoopCount by -1
    \ifnum\FV@LoopCount>0
    \repeat
    \setbox\FV@NCharsBox\hbox{\FV@NChars}%
    #1=\wd\FV@NCharsBox
  \else
    #1=0pt\relax
  \fi
}
\newbool{FV@breaklines}
\define@booleankey{FV}{breaklines}%
 {\booltrue{FV@breaklines}%
  \let\FV@ListProcessLine\FV@ListProcessLine@Break}%
 {\boolfalse{FV@breaklines}%
  \let\FV@ListProcessLine\FV@ListProcessLine@NoBreak}
\AtEndOfPackage{\fvset{breaklines=false}}
\def\FV@BreakLinesLuaTeXHook{%
   \expandafter\def\expandafter\@noligs\expandafter{\@noligs
     \begingroup\lccode`\~=`\-\lowercase{\endgroup\def~}{\leavevmode\kern\z@\mbox{-}}}}
\ifcsname directlua\endcsname
  \ifx\directlua\relax
  \else
    \FV@AddToHook\FV@FormattingPrep@PreHook\FV@BreakLinesLuaTeXHook
  \fi
\fi
\def\FV@BreakLinesIndentationHook{}
\g@addto@macro\FV@FormattingPrep@PostHook{%
  \ifFV@breaklines
    \FV@BreakLinesIndentationHook
  \fi}
\newdimen\FV@BreakIndent
\newcount\FV@BreakIndentNChars
\define@key{FV}{breakindent}{%
  \FV@BreakIndent=#1\relax
  \FV@BreakIndentNChars=0\relax}
\define@key{FV}{breakindentnchars}{\FV@BreakIndentNChars=#1\relax}
\g@addto@macro\FV@BreakLinesIndentationHook{%
  \ifnum\FV@BreakIndentNChars>0
    \FV@SetToWidthNChars{\FV@BreakIndent}{\FV@BreakIndentNChars}%
  \fi}
\fvset{breakindentnchars=0}
\newbool{FV@breakautoindent}
\define@booleankey{FV}{breakautoindent}%
  {\booltrue{FV@breakautoindent}}{\boolfalse{FV@breakautoindent}}
\fvset{breakautoindent=true}
\define@key{FV}{breaksymbolleft}{\def\FancyVerbBreakSymbolLeft{#1}}
\define@key{FV}{breaksymbol}{\fvset{breaksymbolleft=#1}}
\fvset{breaksymbolleft=\tiny\ensuremath{\hookrightarrow}}
\define@key{FV}{breaksymbolright}{\def\FancyVerbBreakSymbolRight{#1}}
\fvset{breaksymbolright={}}
\newdimen\FV@BreakSymbolSepLeft
\newcount\FV@BreakSymbolSepLeftNChars
\define@key{FV}{breaksymbolsepleft}{%
  \FV@BreakSymbolSepLeft=#1\relax
  \FV@BreakSymbolSepLeftNChars=0\relax}
\define@key{FV}{breaksymbolsep}{\fvset{breaksymbolsepleft=#1}}
\define@key{FV}{breaksymbolsepleftnchars}{\FV@BreakSymbolSepLeftNChars=#1\relax}
\define@key{FV}{breaksymbolsepnchars}{\fvset{breaksymbolsepleftnchars=#1}}
\g@addto@macro\FV@BreakLinesIndentationHook{%
  \ifnum\FV@BreakSymbolSepLeftNChars>0
    \FV@SetToWidthNChars{\FV@BreakSymbolSepLeft}{\FV@BreakSymbolSepLeftNChars}%
  \fi}
\fvset{breaksymbolsepleftnchars=2}
\newdimen\FV@BreakSymbolSepRight
\newcount\FV@BreakSymbolSepRightNChars
\define@key{FV}{breaksymbolsepright}{%
  \FV@BreakSymbolSepRight=#1\relax
  \FV@BreakSymbolSepRightNChars=0\relax}
\define@key{FV}{breaksymbolseprightnchars}{\FV@BreakSymbolSepRightNChars=#1\relax}
\g@addto@macro\FV@BreakLinesIndentationHook{%
  \ifnum\FV@BreakSymbolSepRightNChars>0
    \FV@SetToWidthNChars{\FV@BreakSymbolSepRight}{\FV@BreakSymbolSepRightNChars}%
  \fi}
\fvset{breaksymbolseprightnchars=2}
\newdimen\FV@BreakSymbolIndentLeft
\newcount\FV@BreakSymbolIndentLeftNChars
\define@key{FV}{breaksymbolindentleft}{%
  \FV@BreakSymbolIndentLeft=#1\relax
  \FV@BreakSymbolIndentLeftNChars=0\relax}
\define@key{FV}{breaksymbolindent}{\fvset{breaksymbolindentleft=#1}}
\define@key{FV}{breaksymbolindentleftnchars}{\FV@BreakSymbolIndentLeftNChars=#1\relax}
\define@key{FV}{breaksymbolindentnchars}{\fvset{breaksymbolindentleftnchars=#1}}
\g@addto@macro\FV@BreakLinesIndentationHook{%
  \ifnum\FV@BreakSymbolIndentLeftNChars>0
    \FV@SetToWidthNChars{\FV@BreakSymbolIndentLeft}{\FV@BreakSymbolIndentLeftNChars}%
  \fi}
\fvset{breaksymbolindentleftnchars=4}
\newdimen\FV@BreakSymbolIndentRight
\newcount\FV@BreakSymbolIndentRightNChars
\define@key{FV}{breaksymbolindentright}{%
  \FV@BreakSymbolIndentRight=#1\relax
  \FV@BreakSymbolIndentRightNChars=0\relax}
\define@key{FV}{breaksymbolindentrightnchars}{\FV@BreakSymbolIndentRightNChars=#1\relax}
\g@addto@macro\FV@BreakLinesIndentationHook{%
  \ifnum\FV@BreakSymbolIndentRightNChars>0
    \FV@SetToWidthNChars{\FV@BreakSymbolIndentRight}{\FV@BreakSymbolIndentRightNChars}%
  \fi}
\fvset{breaksymbolindentrightnchars=4}
\newcommand{\FancyVerbBreakSymbolLeftLogic}[1]{%
  \ifnum\value{linenumber}=1\relax\else{#1}\fi}
\newcounter{FancyVerbLineBreakLast}
\newcommand{\FV@SetLineBreakLast}{%
  \setcounter{FancyVerbLineBreakLast}{\value{linenumber}}}
\newcommand{\FancyVerbBreakSymbolRightLogic}[1]{%
  \ifnum\value{linenumber}=\value{FancyVerbLineBreakLast}\relax\else{#1}\fi}
\let\FancyVerbBreakStart\relax
\let\FancyVerbBreakStop\relax
\let\FV@Break@DefaultToken\FV@Break@NBToken
\newbool{FV@breakanywhere}
\define@booleankey{FV}{breakanywhere}%
  {\booltrue{FV@breakanywhere}%
    \let\FancyVerbBreakStart\FV@Break
    \let\FancyVerbBreakStop\FV@EndBreak
    \let\FV@Break@DefaultToken\FV@Break@AnyToken}%
  {\boolfalse{FV@breakanywhere}%
    \let\FancyVerbBreakStart\relax
    \let\FancyVerbBreakStop\relax
    \let\FV@Break@DefaultToken\FV@Break@NBToken}
\fvset{breakanywhere=false}
\define@key{FV}{breakanywhereinlinestretch}{%
  \def\FV@breakanywhereinlinestretch{#1}%
  \ifx\FV@breakanywhereinlinestretch\FV@None
    \let\FV@breakanywhereinlinestretch\relax
  \else\ifx\FV@breakanywhereinlinestretch\@empty
    \let\FV@breakanywhereinlinestretch\relax
  \fi\fi}
\fvset{breakanywhereinlinestretch=none}
\def\FV@ApplyBreakAnywhereInlineStretch{%
  \ifx\FV@breakanywhereinlinestretch\relax
  \else
    \let\FancyVerbBreakAnywhereBreak@Orig\FancyVerbBreakAnywhereBreak
    \def\FancyVerbBreakAnywhereBreak{%
      \nobreak\hspace{0pt plus \FV@breakanywhereinlinestretch}%
      \FancyVerbBreakAnywhereBreak@Orig}%
  \fi}
\define@key{FV}{breakbefore}{%
  \ifstrempty{#1}%
   {\let\FV@BreakBefore\@empty
    \let\FancyVerbBreakStart\relax
    \let\FancyVerbBreakStop\relax
    \let\FV@Break@DefaultToken\FV@Break@NBToken}%
   {\def\FV@BreakBefore{#1}%
    \let\FancyVerbBreakStart\FV@Break
    \let\FancyVerbBreakStop\FV@EndBreak
    \let\FV@Break@DefaultToken\FV@Break@BeforeAfterToken}%
}
\fvset{breakbefore={}}
\newbool{FV@breakbeforeinrun}
\define@booleankey{FV}{breakbeforeinrun}%
 {\booltrue{FV@breakbeforeinrun}}%
 {\boolfalse{FV@breakbeforeinrun}}%
\fvset{breakbeforeinrun=false}
\def\FV@BreakBeforePrep{%
  \ifx\FV@BreakBefore\@empty\relax
  \else
    \gdef\FV@BreakBefore@Def{}%
    \begingroup
    \def\FV@BreakBefore@Process##1##2\FV@Undefined{%
      \expandafter\FV@BreakBefore@Process@i\expandafter{##1}%
      \expandafter\ifx\expandafter\relax\detokenize{##2}\relax
      \else
        \FV@BreakBefore@Process##2\FV@Undefined
      \fi
    }%
    \def\FV@BreakBefore@Process@i##1{%
      \g@addto@macro\FV@BreakBefore@Def{%
        \@namedef{FV@BreakBefore@Token\detokenize{##1}}{}}%
    }%
    \FV@EscChars
    \expandafter\FV@BreakBefore@Process\FV@BreakBefore\FV@Undefined
    \endgroup
    \FV@BreakBefore@Def
    \FV@BreakBeforePrep@PygmentsHook
  \fi
}
\let\FV@BreakBeforePrep@PygmentsHook\relax
\define@key{FV}{breakafter}{%
  \ifstrempty{#1}%
   {\let\FV@BreakAfter\@empty
    \let\FancyVerbBreakStart\relax
    \let\FancyVerbBreakStop\relax
    \let\FV@Break@DefaultToken\FV@Break@NBToken}%
   {\def\FV@BreakAfter{#1}%
    \let\FancyVerbBreakStart\FV@Break
    \let\FancyVerbBreakStop\FV@EndBreak
    \let\FV@Break@DefaultToken\FV@Break@BeforeAfterToken}%
}
\fvset{breakafter={}}
\newbool{FV@breakafterinrun}
\define@booleankey{FV}{breakafterinrun}%
 {\booltrue{FV@breakafterinrun}}%
 {\boolfalse{FV@breakafterinrun}}%
\fvset{breakafterinrun=false}
\def\FV@BreakAfterPrep{%
  \ifx\FV@BreakAfter\@empty\relax
  \else
    \gdef\FV@BreakAfter@Def{}%
    \begingroup
    \def\FV@BreakAfter@Process##1##2\FV@Undefined{%
      \expandafter\FV@BreakAfter@Process@i\expandafter{##1}%
      \expandafter\ifx\expandafter\relax\detokenize{##2}\relax
      \else
        \FV@BreakAfter@Process##2\FV@Undefined
      \fi
    }%
    \def\FV@BreakAfter@Process@i##1{%
      \ifcsname FV@BreakBefore@Token\detokenize{##1}\endcsname
        \ifbool{FV@breakbeforeinrun}%
         {\ifbool{FV@breakafterinrun}%
           {}%
           {\PackageError{fvextra}%
            {Conflicting breakbeforeinrun and breakafterinrun for "\detokenize{##1}"}%
            {Conflicting breakbeforeinrun and breakafterinrun for "\detokenize{##1}"}}}%
         {\ifbool{FV@breakafterinrun}%
           {\PackageError{fvextra}%
             {Conflicting breakbeforeinrun and breakafterinrun for "\detokenize{##1}"}%
             {Conflicting breakbeforeinrun and breakafterinrun for "\detokenize{##1}"}}%
           {}}%
      \fi
      \g@addto@macro\FV@BreakAfter@Def{%
        \@namedef{FV@BreakAfter@Token\detokenize{##1}}{}}%
    }%
    \FV@EscChars
    \expandafter\FV@BreakAfter@Process\FV@BreakAfter\FV@Undefined
    \endgroup
    \FV@BreakAfter@Def
    \FV@BreakAfterPrep@PygmentsHook
  \fi
}
\let\FV@BreakAfterPrep@PygmentsHook\relax
\g@addto@macro\FV@FormattingPrep@PreHook{%
  \ifFV@pdfTeXinputenc
    \ifdefstring{\inputencodingname}{utf8}%
     {\let\FV@BreakBeforePrep\FV@BreakBeforePrep@UTF
      \let\FV@BreakAfterPrep\FV@BreakAfterPrep@UTF}%
     {}%
  \fi
  \FV@BreakBeforePrep\FV@BreakAfterPrep}
\define@key{FV}{breakanywheresymbolpre}{%
  \ifstrempty{#1}%
    {\def\FancyVerbBreakAnywhereSymbolPre{}}%
    {\def\FancyVerbBreakAnywhereSymbolPre{\hbox{#1}}}}
\fvset{breakanywheresymbolpre={\,\footnotesize\ensuremath{_\rfloor}}}
\define@key{FV}{breakanywheresymbolpost}{%
  \ifstrempty{#1}%
    {\def\FancyVerbBreakAnywhereSymbolPost{}}%
    {\def\FancyVerbBreakAnywhereSymbolPost{\hbox{#1}}}}
\fvset{breakanywheresymbolpost={}}
\define@key{FV}{breakbeforesymbolpre}{%
  \ifstrempty{#1}%
    {\def\FancyVerbBreakBeforeSymbolPre{}}%
    {\def\FancyVerbBreakBeforeSymbolPre{\hbox{#1}}}}
\fvset{breakbeforesymbolpre={\,\footnotesize\ensuremath{_\rfloor}}}
\define@key{FV}{breakbeforesymbolpost}{%
  \ifstrempty{#1}%
    {\def\FancyVerbBreakBeforeSymbolPost{}}%
    {\def\FancyVerbBreakBeforeSymbolPost{\hbox{#1}}}}
\fvset{breakbeforesymbolpost={}}
\define@key{FV}{breakaftersymbolpre}{%
  \ifstrempty{#1}%
    {\def\FancyVerbBreakAfterSymbolPre{}}%
    {\def\FancyVerbBreakAfterSymbolPre{\hbox{#1}}}}
\fvset{breakaftersymbolpre={\,\footnotesize\ensuremath{_\rfloor}}}
\define@key{FV}{breakaftersymbolpost}{%
  \ifstrempty{#1}%
    {\def\FancyVerbBreakAfterSymbolPost{}}%
    {\def\FancyVerbBreakAfterSymbolPost{\hbox{#1}}}}
\fvset{breakaftersymbolpost={}}
\newcommand{\FancyVerbBreakAnywhereBreak}{%
  \discretionary{\FancyVerbBreakAnywhereSymbolPre}%
   {\FancyVerbBreakAnywhereSymbolPost}{}}
\newcommand{\FancyVerbBreakBeforeBreak}{%
  \discretionary{\FancyVerbBreakBeforeSymbolPre}%
   {\FancyVerbBreakBeforeSymbolPost}{}}
\newcommand{\FancyVerbBreakAfterBreak}{%
  \discretionary{\FancyVerbBreakAfterSymbolPre}%
   {\FancyVerbBreakAfterSymbolPost}{}}
\newbool{FV@breaknonspaceingroup}
\define@booleankey{FV}{breaknonspaceingroup}%
 {\booltrue{FV@breaknonspaceingroup}}%
 {\boolfalse{FV@breaknonspaceingroup}}
\fvset{breaknonspaceingroup=false}
\newbool{FV@breakpreferspaces}
\booltrue{FV@breakpreferspaces}
\define@booleankey{FV}{breakpreferspaces}%
 {\booltrue{FV@breakpreferspaces}}%
 {\boolfalse{FV@breakpreferspaces}}
\def\FV@BreakHyphenation{%
  \finalhyphendemerits=0\relax
  \ifbool{FV@breakpreferspaces}{}{\linepenalty=\@M\relax}}
\g@addto@macro\FV@FormattingPrep@PreHook{\FV@BreakHyphenation}
\newsavebox{\FV@LineBox}
\newsavebox{\FV@LineIndentBox}
\let\FV@LineIndentChars\@empty
\def\FV@GetLineIndent{%
  \@ifnextchar\FV@Sentinel
   {\FV@GetLineIndent@End}%
   {\ifx\@let@token\FV@FVSpaceToken
      \let\FV@Next\FV@GetLineIndent@Whitespace
    \else\ifx\@let@token\FV@FVTabToken
      \let\FV@Next\FV@GetLineIndent@Whitespace
    \else\ifcsname FV@PYG@Redefed\endcsname
      \ifx\@let@token\FV@PYG@Redefed
        \let\FV@Next\FV@GetLineIndent@Pygments
      \else
        \let\FV@Next\FV@GetLineIndent@End
      \fi
    \else
      \let\FV@Next\FV@GetLineIndent@End
    \fi\fi\fi
    \FV@Next}}
\def\FV@GetLineIndent@End#1\FV@Sentinel{}
\def\FV@GetLineIndent@Whitespace#1{%
  \expandafter\def\expandafter\FV@LineIndentChars\expandafter{\FV@LineIndentChars#1}%
  \FV@GetLineIndent}
\def\FV@GetLineIndent@Pygments#1#2#3{%
  \FV@GetLineIndent#3}
\def\FV@TrueTab@UseWidth{%
  \@tempdima=\csname FV@TrueTab:Width\arabic{FV@TrueTabCounter}\endcsname sp\relax
  \stepcounter{FV@TrueTabCounter}%
  \hbox to\@tempdima{\hss\FV@TabChar}}
\newcounter{FV@BreakBufferDepth}
\def\FV@BreakBuffer@Append#1{%
  \expandafter\def\expandafter\FV@BreakBuffer\expandafter{\FV@BreakBuffer#1}}
\def\FV@BreakBufferStart{%
  \FV@BreakBufferStart@i}
\def\FV@BreakBufferStart@i#1{%
  \ifnum\value{FV@BreakBufferDepth}>0\relax
    \expandafter\let\csname FV@BreakBuffer\arabic{FV@BreakBufferDepth}\endcsname
      \FV@BreakBuffer
    \expandafter\let\csname FV@Break@Token\arabic{FV@BreakBufferDepth}\endcsname
      \FV@Break@Token
  \fi
  \def\FV@BreakBuffer{}%
  \let\FV@Break@Token=#1%
  \stepcounter{FV@BreakBufferDepth}%
  \let\FV@LastToken=\FV@Undefined
  \FV@Break@Scan}
\newbool{FV@UserMacroBreaks}
\def\FV@BreakBufferStop{%
  \FV@BreakBufferStop@i}
\def\FV@BreakBufferStop@i#1{%
  \addtocounter{FV@BreakBufferDepth}{-1}%
  \let\FV@LastToken=\FV@Undefined
  \ifnum\value{FV@BreakBufferDepth}<0\relax
    \PackageError{fvextra}%
     {Line break insertion error (extra \string\FancyVerbBreakStop?)}%
     {Line break insertion error (extra \string\FancyVerbBreakStop?)}%
    \def\FV@BreakBuffer{}%
  \fi
  \ifnum\value{FV@BreakBufferDepth}>0\relax
    \expandafter\@firstoftwo
  \else
    \expandafter\@secondoftwo
  \fi
   {\expandafter\FV@BreakBufferStop@ii\expandafter{\FV@BreakBuffer}{#1}}%
   {\ifbool{FV@UserMacroBreaks}%
     {\expandafter\let\expandafter\FV@BreakBuffer\expandafter\FV@Undefined\FV@BreakBuffer}%
     {}}}
\def\FV@BreakBufferStop@ii#1#2{%
  \ifstrempty{#2}%
   {\FV@BreakBufferStop@iii{#1}}%
   {\expandafter\FV@BreakBufferStop@iii\expandafter{#2{#1}}}}
\def\FV@BreakBufferStop@iii#1{%
  \expandafter\let\expandafter\FV@BreakBufferUpLevel
    \csname FV@BreakBuffer\arabic{FV@BreakBufferDepth}\endcsname
  \expandafter\def\expandafter\FV@BreakBuffer\expandafter{\FV@BreakBufferUpLevel#1}%
  \expandafter\let\expandafter\FV@Break@Token
    \csname FV@Break@Token\arabic{FV@BreakBufferDepth}\endcsname
  \FV@Break@Scan}
\def\FV@InsertBreaks#1#2{%
  \ifx\FancyVerbBreakStart\relax
    \expandafter\@firstoftwo
  \else
    \expandafter\@secondoftwo
  \fi
   {#1{#2}}%
   {\ifFV@pdfTeXinputenc
      \ifdefstring{\inputencodingname}{utf8}%
       {\ifx\FV@Break@DefaultToken\FV@Break@AnyToken
          \let\FV@Break@DefaultToken\FV@Break@AnyToken@UTF
        \else
           \ifx\FV@Break@DefaultToken\FV@Break@BeforeAfterToken
             \let\FV@Break@DefaultToken\FV@Break@BeforeAfterToken@UTF
           \fi
        \fi}%
       {}%
    \fi
    \setcounter{FV@BreakBufferDepth}{0}%
    \boolfalse{FV@UserMacroBreaks}%
    \FancyVerbBreakStart#2\FancyVerbBreakStop
    \setcounter{FV@BreakBufferDepth}{0}%
    \booltrue{FV@UserMacroBreaks}%
    \expandafter\FV@InsertBreaks@i\expandafter{\FV@BreakBuffer}{#1}}}
\def\FV@InsertBreaks@i#1#2{%
  \let\FV@BreakBuffer\FV@Undefined
  #2{#1}}
\def\FV@Break{%
  \FV@BreakBufferStart{\FV@Break@DefaultToken}}
\def\FV@EndBreak{%
  \FV@BreakBufferStop{}}
\begingroup
\catcode`\$=3
\gdef\FV@Break@Scan{%
  \@ifnextchar\FancyVerbBreakStart%
   {}%
   {\ifx\@let@token\FancyVerbBreakStop
      \let\FV@Break@Next\relax
    \else\ifx\@let@token\FV@BreakBufferStart
      \let\FV@Break@Next\relax
    \else\ifx\@let@token\FV@BreakBufferStop
      \let\FV@Break@Next\relax
    \else\ifx\@let@token$
      \let\FV@Break@Next\FV@Break@Math
    \else\ifx\@let@token\bgroup
      \let\FV@Break@Next\FV@Break@Group
    \else
      \let\FV@Break@Next\FV@Break@Token
    \fi\fi\fi\fi\fi
    \FV@Break@Next}}
\endgroup
\begingroup
\catcode`\$=3%
\gdef\FV@Break@Math$#1${%
  \FV@BreakBufferStart{\FV@Break@NBToken}#1\FV@BreakBufferStop{\FV@Break@MathTemplate}}
\gdef\FV@Break@MathTemplate#1{$#1$}
\endgroup
\def\FV@Break@Group#1{%
  \ifstrempty{#1}%
   {\FV@BreakBuffer@Append{{}}%
    \FV@Break@Scan}%
   {\ifbool{FV@breaknonspaceingroup}%
     {\FV@BreakBufferStart{\FV@Break@DefaultToken}%
        #1\FV@BreakBufferStop{\FV@Break@GroupTemplate}}%
     {\FV@BreakBufferStart{\FV@Break@NBToken}%
        #1\FV@BreakBufferStop{\FV@Break@GroupTemplate}}}}
\def\FV@Break@GroupTemplate#1{{#1}}
\def\FV@Break@NBToken#1{%
  \FV@BreakBuffer@Append{#1}%
  \let\FV@LastToken=\FV@Undefined
  \FV@Break@Scan}
\def\FV@Break@AnyToken#1{%
  \ifx\FV@FVSpaceToken#1\relax
    \expandafter\@firstoftwo
  \else
    \expandafter\@secondoftwo
  \fi
   {\let\FV@LastToken=#1\FV@BreakBuffer@Append{#1}\FV@Break@Scan}%
   {\ifx\FV@LastToken\FV@FVSpaceToken
      \expandafter\@firstoftwo
    \else
      \expandafter\@secondoftwo
    \fi
     {\let\FV@LastToken=#1%
      \FV@BreakBuffer@Append{#1}\FV@Break@Scan}%
     {\let\FV@LastToken=#1%
      \FV@BreakBuffer@Append{\FancyVerbBreakAnywhereBreak#1}\FV@Break@Scan}}}
\def\FV@Break@BeforeAfterToken#1{%
  \ifcsname FV@BreakBefore@Token\detokenize{#1}\endcsname
    \let\FV@Break@Next\FV@Break@BeforeTokenBreak
  \else
    \ifcsname FV@BreakAfter@Token\detokenize{#1}\endcsname
      \let\FV@Break@Next\FV@Break@AfterTokenBreak
    \else
      \let\FV@Break@Next\FV@Break@BeforeAfterTokenNoBreak
    \fi
  \fi
  \FV@Break@Next{#1}%
}
\def\FV@Break@BeforeAfterTokenNoBreak#1{%
  \FV@BreakBuffer@Append{#1}%
  \let\FV@LastToken=#1%
  \FV@Break@Scan}
\def\FV@Break@BeforeTokenBreak#1{%
  \ifbool{FV@breakbeforeinrun}%
   {\ifcsname FV@BreakAfter@Token\detokenize{#1}\endcsname
      \ifx#1\FV@FVSpaceToken
        \FV@BreakBuffer@Append{\FancyVerbSpaceBreak}%
      \else
        \FV@BreakBuffer@Append{\FancyVerbBreakBeforeBreak}%
      \fi
      \let\FV@Break@Next\FV@Break@BeforeTokenBreak@AfterRescan
      \def\FV@RescanToken{#1}%
    \else
      \ifx#1\FV@FVSpaceToken
        \FV@BreakBuffer@Append{\FancyVerbSpaceBreak#1}%
      \else
        \FV@BreakBuffer@Append{\FancyVerbBreakBeforeBreak#1}%
      \fi
      \let\FV@Break@Next\FV@Break@Scan
      \let\FV@LastToken=#1%
    \fi}%
   {\ifx#1\FV@LastToken\relax
      \ifcsname FV@BreakAfter@Token\detokenize{#1}\endcsname
        \let\FV@Break@Next\FV@Break@BeforeTokenBreak@AfterRescan
        \def\FV@RescanToken{#1}%
      \else
        \FV@BreakBuffer@Append{#1}%
        \let\FV@Break@Next\FV@Break@Scan
        \let\FV@LastToken=#1%
      \fi
    \else
      \ifcsname FV@BreakAfter@Token\detokenize{#1}\endcsname
        \ifx#1\FV@FVSpaceToken
          \FV@BreakBuffer@Append{\FancyVerbSpaceBreak}%
        \else
          \FV@BreakBuffer@Append{\FancyVerbBreakBeforeBreak}%
        \fi
        \let\FV@Break@Next\FV@Break@BeforeTokenBreak@AfterRescan
        \def\FV@RescanToken{#1}%
      \else
        \ifx#1\FV@FVSpaceToken
          \FV@BreakBuffer@Append{\FancyVerbSpaceBreak#1}%
        \else
          \FV@BreakBuffer@Append{\FancyVerbBreakBeforeBreak#1}%
        \fi
        \let\FV@Break@Next\FV@Break@Scan
        \let\FV@LastToken=#1%
      \fi
    \fi}%
  \FV@Break@Next}
\def\FV@Break@BeforeTokenBreak@AfterRescan{%
  \expandafter\FV@Break@AfterTokenBreak\FV@RescanToken}
\def\FV@Break@AfterTokenBreak#1{%
  \let\FV@LastToken=#1%
  \@ifnextchar\FV@FVSpaceToken%
   {\ifx#1\FV@FVSpaceToken
      \expandafter\@firstoftwo
    \else
      \expandafter\@secondoftwo
    \fi
     {\FV@Break@AfterTokenBreak@i{#1}}%
     {\FV@BreakBuffer@Append{#1}%
      \FV@Break@Scan}}%
   {\FV@Break@AfterTokenBreak@i{#1}}}
\def\FV@Break@AfterTokenBreak@i#1{%
  \ifbool{FV@breakafterinrun}%
   {\ifx#1\FV@FVSpaceToken
      \FV@BreakBuffer@Append{#1\FancyVerbSpaceBreak}%
    \else
      \FV@BreakBuffer@Append{#1\FancyVerbBreakAfterBreak}%
    \fi
    \let\FV@Break@Next\FV@Break@Scan}%
   {\ifx\@let@token#1\relax
      \FV@BreakBuffer@Append{#1}%
      \let\FV@Break@Next\FV@Break@Scan
    \else
      \expandafter\ifx\csname @let@token\endcsname\bgroup\relax
        \FV@BreakBuffer@Append{#1}%
        \let\FV@Break@Next\FV@Break@AfterTokenBreak@Group
      \else
        \ifx#1\FV@FVSpaceToken
          \FV@BreakBuffer@Append{#1\FancyVerbSpaceBreak}%
        \else
          \FV@BreakBuffer@Append{#1\FancyVerbBreakAfterBreak}%
        \fi
        \let\FV@Break@Next\FV@Break@Scan
      \fi
    \fi}%
  \FV@Break@Next
}
\def\FV@Break@AfterTokenBreak@Group#1{%
  \ifstrempty{#1}%
   {\FV@BreakBuffer@Append{{}}%
    \@ifnextchar\FV@LastToken%
     {\FV@Break@Scan}%
     {\ifx\FV@LastToken\FV@FVSpaceToken
        \FV@BreakBuffer@Append{\FancyVerbSpaceBreak}%
      \else
        \FV@BreakBuffer@Append{\FancyVerbBreakAfterBreak}%
      \fi
      \FV@Break@Scan}}%
   {\ifx\FV@LastToken\FV@FVSpaceToken
      \FV@BreakBuffer@Append{\FancyVerbSpaceBreak}%
    \else
      \FV@BreakBuffer@Append{\FancyVerbBreakAfterBreak}%
    \fi
    \FV@Break@Group{#1}}}
\ifFV@pdfTeXinputenc
\def\FV@BreakBeforePrep@UTF{%
  \ifx\FV@BreakBefore\@empty\relax
  \else
    \gdef\FV@BreakBefore@Def{}%
    \begingroup
    \def\FV@BreakBefore@Process##1{%
      \ifcsname FV@U8:\detokenize{##1}\endcsname
        \expandafter\let\expandafter\FV@Break@Next\csname FV@U8:\detokenize{##1}\endcsname
        \let\FV@UTF@octets@after\FV@BreakBefore@Process@ii
      \else
        \ifx##1\FV@Undefined
          \let\FV@Break@Next\@gobble
        \else
          \let\FV@Break@Next\FV@BreakBefore@Process@i
        \fi
      \fi
      \FV@Break@Next##1%
    }%
    \def\FV@BreakBefore@Process@i##1{%
      \expandafter\FV@BreakBefore@Process@ii\expandafter{##1}}%
    \def\FV@BreakBefore@Process@ii##1{%
      \g@addto@macro\FV@BreakBefore@Def{%
        \@namedef{FV@BreakBefore@Token\detokenize{##1}}{}}%
      \FV@BreakBefore@Process
    }%
    \FV@EscChars
    \expandafter\FV@BreakBefore@Process\FV@BreakBefore\FV@Undefined
    \endgroup
    \FV@BreakBefore@Def
    \FV@BreakBeforePrep@PygmentsHook
  \fi
}
\def\FV@BreakAfterPrep@UTF{%
  \ifx\FV@BreakAfter\@empty\relax
  \else
    \gdef\FV@BreakAfter@Def{}%
    \begingroup
    \def\FV@BreakAfter@Process##1{%
      \ifcsname FV@U8:\detokenize{##1}\endcsname
        \expandafter\let\expandafter\FV@Break@Next\csname FV@U8:\detokenize{##1}\endcsname
        \let\FV@UTF@octets@after\FV@BreakAfter@Process@ii
      \else
        \ifx##1\FV@Undefined
          \let\FV@Break@Next\@gobble
        \else
          \let\FV@Break@Next\FV@BreakAfter@Process@i
        \fi
      \fi
      \FV@Break@Next##1%
    }%
    \def\FV@BreakAfter@Process@i##1{%
      \expandafter\FV@BreakAfter@Process@ii\expandafter{##1}}%
    \def\FV@BreakAfter@Process@ii##1{%
      \ifcsname FV@BreakBefore@Token\detokenize{##1}\endcsname
        \ifbool{FV@breakbeforeinrun}%
         {\ifbool{FV@breakafterinrun}%
           {}%
           {\PackageError{fvextra}%
            {Conflicting breakbeforeinrun and breakafterinrun for "\detokenize{##1}"}%
            {Conflicting breakbeforeinrun and breakafterinrun for "\detokenize{##1}"}}}%
         {\ifbool{FV@breakafterinrun}%
           {\PackageError{fvextra}%
             {Conflicting breakbeforeinrun and breakafterinrun for "\detokenize{##1}"}%
             {Conflicting breakbeforeinrun and breakafterinrun for "\detokenize{##1}"}}%
           {}}%
      \fi
      \g@addto@macro\FV@BreakAfter@Def{%
        \@namedef{FV@BreakAfter@Token\detokenize{##1}}{}}%
      \FV@BreakAfter@Process
    }%
    \FV@EscChars
    \expandafter\FV@BreakAfter@Process\FV@BreakAfter\FV@Undefined
    \endgroup
    \FV@BreakAfter@Def
    \FV@BreakAfterPrep@PygmentsHook
  \fi
}
\def\FV@Break@AnyToken@UTF#1{%
  \ifcsname FV@U8:\detokenize{#1}\endcsname
    \expandafter\let\expandafter\FV@Break@Next\csname FV@U8:\detokenize{#1}\endcsname
    \let\FV@UTF@octets@after\FV@Break@AnyToken@UTF@i
  \else
    \let\FV@Break@Next\FV@Break@AnyToken@UTF@i
  \fi
  \FV@Break@Next{#1}%
}
\def\FV@Break@AnyToken@UTF@i#1{%
  \def\FV@CurrentToken{#1}%
  \ifx\FV@CurrentToken\FV@ActiveSpaceToken\relax
    \expandafter\@firstoftwo
  \else
    \expandafter\@secondoftwo
  \fi
   {\let\FV@LastToken\FV@CurrentToken
    \FV@BreakBuffer@Append{#1}\FV@Break@Scan}%
   {\ifx\FV@LastToken\FV@ActiveSpaceToken
      \expandafter\@firstoftwo
    \else
      \expandafter\@secondoftwo
    \fi
     {\let\FV@LastToken\FV@CurrentToken
      \FV@BreakBuffer@Append{#1}\FV@Break@Scan}%
     {\let\FV@LastToken\FV@CurrentToken
      \FV@BreakBuffer@Append{\FancyVerbBreakAnywhereBreak#1}\FV@Break@Scan}}}
\def\FV@Break@BeforeAfterToken@UTF#1{%
  \ifcsname FV@U8:\detokenize{#1}\endcsname
    \expandafter\let\expandafter\FV@Break@Next\csname FV@U8:\detokenize{#1}\endcsname
    \let\FV@UTF@octets@after\FV@Break@BeforeAfterToken@UTF@i
  \else
    \let\FV@Break@Next\FV@Break@BeforeAfterToken@UTF@i
  \fi
  \FV@Break@Next{#1}%
}
\def\FV@Break@BeforeAfterToken@UTF@i#1{%
  \ifcsname FV@BreakBefore@Token\detokenize{#1}\endcsname
    \let\FV@Break@Next\FV@Break@BeforeTokenBreak@UTF
  \else
    \ifcsname FV@BreakAfter@Token\detokenize{#1}\endcsname
      \let\FV@Break@Next\FV@Break@AfterTokenBreak@UTF
    \else
      \let\FV@Break@Next\FV@Break@BeforeAfterTokenNoBreak@UTF
    \fi
  \fi
  \FV@Break@Next{#1}%
}
\def\FV@Break@BeforeAfterTokenNoBreak@UTF#1{%
  \FV@BreakBuffer@Append{#1}%
  \def\FV@LastToken{#1}%
  \FV@Break@Scan}
\def\FV@Break@BeforeTokenBreak@UTF#1{%
  \def\FV@CurrentToken{#1}%
  \ifbool{FV@breakbeforeinrun}%
   {\ifcsname FV@BreakAfter@Token\detokenize{#1}\endcsname
      \ifx\FV@CurrentToken\FV@ActiveSpaceToken
        \FV@BreakBuffer@Append{\FancyVerbSpaceBreak}%
      \else
        \FV@BreakBuffer@Append{\FancyVerbBreakBeforeBreak}%
      \fi
      \let\FV@Break@Next\FV@Break@BeforeTokenBreak@AfterRescan@UTF
      \def\FV@RescanToken{#1}%
    \else
      \ifx\FV@CurrentToken\FV@ActiveSpaceToken
        \FV@BreakBuffer@Append{\FancyVerbSpaceBreak#1}%
      \else
        \FV@BreakBuffer@Append{\FancyVerbBreakBeforeBreak#1}%
      \fi
      \let\FV@Break@Next\FV@Break@Scan
      \def\FV@LastToken{#1}%
    \fi}%
   {\ifx\FV@CurrentToken\FV@LastToken\relax
      \ifcsname FV@BreakAfter@Token\detokenize{#1}\endcsname
        \let\FV@Break@Next\FV@Break@BeforeTokenBreak@AfterRescan@UTF
        \def\FV@RescanToken{#1}%
      \else
        \FV@BreakBuffer@Append{#1}%
        \let\FV@Break@Next\FV@Break@Scan
        \def\FV@LastToken{#1}%
      \fi
    \else
      \ifcsname FV@BreakAfter@Token\detokenize{#1}\endcsname
        \ifx\FV@CurrentToken\FV@ActiveSpaceToken
          \FV@BreakBuffer@Append{\FancyVerbSpaceBreak}%
        \else
          \FV@BreakBuffer@Append{\FancyVerbBreakBeforeBreak}%
        \fi
        \let\FV@Break@Next\FV@Break@BeforeTokenBreak@AfterRescan@UTF
        \def\FV@RescanToken{#1}%
      \else
        \ifx\FV@CurrentToken\FV@ActiveSpaceToken
          \FV@BreakBuffer@Append{\FancyVerbSpaceBreak#1}%
        \else
          \FV@BreakBuffer@Append{\FancyVerbBreakBeforeBreak#1}%
        \fi
        \let\FV@Break@Next\FV@Break@Scan
        \def\FV@LastToken{#1}%
      \fi
    \fi}%
  \FV@Break@Next}
\def\FV@Break@BeforeTokenBreak@AfterRescan@UTF{%
  \expandafter\FV@Break@AfterTokenBreak@UTF\expandafter{\FV@RescanToken}}
\def\FV@Break@AfterTokenBreak@UTF#1{%
  \def\FV@LastToken{#1}%
  \@ifnextchar\FV@FVSpaceToken%
   {\ifx\FV@LastToken\FV@ActiveSpaceToken
      \expandafter\@firstoftwo
    \else
      \expandafter\@secondoftwo
    \fi
     {\FV@Break@AfterTokenBreak@UTF@i{#1}}%
     {\FV@BreakBuffer@Append{#1}%
      \FV@Break@Scan}}%
   {\FV@Break@AfterTokenBreak@UTF@i{#1}}}
\def\FV@Break@AfterTokenBreak@UTF@i#1{%
  \ifbool{FV@breakafterinrun}%
   {\ifx\FV@LastToken\FV@ActiveSpaceToken
      \FV@BreakBuffer@Append{#1\FancyVerbSpaceBreak}%
    \else
      \FV@BreakBuffer@Append{#1\FancyVerbBreakAfterBreak}%
    \fi
    \let\FV@Break@Next\FV@Break@Scan}%
   {\FV@BreakBuffer@Append{#1}%
    \expandafter\ifx\csname @let@token\endcsname\bgroup\relax
      \let\FV@Break@Next\FV@Break@AfterTokenBreak@Group@UTF
    \else
      \let\FV@Break@Next\FV@Break@AfterTokenBreak@UTF@ii
    \fi}%
  \FV@Break@Next}
\def\FV@Break@AfterTokenBreak@UTF@ii#1{%
  \ifcsname FV@U8:\detokenize{#1}\endcsname
    \expandafter\let\expandafter\FV@Break@Next\csname FV@U8:\detokenize{#1}\endcsname
    \let\FV@UTF@octets@after\FV@Break@AfterTokenBreak@UTF@ii
  \else
    \def\FV@NextToken{#1}%
    \ifx\FV@LastToken\FV@NextToken
    \else
      \ifx\FV@LastToken\FV@ActiveSpaceToken
        \FV@BreakBuffer@Append{\FancyVerbSpaceBreak}%
      \else
        \FV@BreakBuffer@Append{\FancyVerbBreakAfterBreak}%
      \fi
    \fi
    \let\FV@Break@Next\FV@Break@Scan
  \fi
  \FV@Break@Next#1}
\def\FV@Break@AfterTokenBreak@Group@UTF#1{%
  \ifstrempty{#1}%
   {\FV@BreakBuffer@Append{{}}%
    \@ifnextchar\bgroup
     {\ifx\FV@LastToken\FV@ActiveSpaceToken
        \FV@BreakBuffer@Append{\FancyVerbSpaceBreak}%
      \else
        \FV@BreakBuffer@Append{\FancyVerbBreakAfterBreak}%
      \fi
      \FV@Break@Group}%
     {\FV@Break@AfterTokenBreak@Group@UTF@i}}%
   {\ifx\FV@LastToken\FV@ActiveSpaceToken
      \FV@BreakBuffer@Append{\FancyVerbSpaceBreak}%
    \else
      \FV@BreakBuffer@Append{\FancyVerbBreakAfterBreak}%
    \fi
    \FV@Break@Group{#1}}}
\def\FV@Break@AfterTokenBreak@Group@UTF@i#1{%
  \ifcsname FV@U8:\detokenize{#1}\endcsname
    \expandafter\let\expandafter\FV@Break@Next\csname FV@U8:\detokenize{#1}\endcsname
    \let\FV@UTF@octets@after\FV@Break@AfterTokenBreak@Group@UTF@i
  \else
    \def\FV@NextToken{#1}%
    \ifx\FV@LastToken\FV@NextToken
    \else
      \ifx\FV@LastToken\FV@ActiveSpaceToken
        \FV@BreakBuffer@Append{\FancyVerbSpaceBreak}%
      \else
        \FV@BreakBuffer@Append{\FancyVerbBreakAfterBreak}%
      \fi
    \fi
    \let\FV@Break@Next\FV@Break@Scan
  \fi
  \FV@Break@Next#1}
\fi
\def\FV@makeLineNumber{%
  \hss
  \FancyVerbBreakSymbolLeftLogic{\FancyVerbBreakSymbolLeft}%
  \hbox to \FV@BreakSymbolSepLeft{\hfill}%
  \rlap{\hskip\linewidth
    \hbox to \FV@BreakSymbolSepRight{\hfill}%
    \FancyVerbBreakSymbolRightLogic{\FancyVerbBreakSymbolRight}%
    \FV@SetLineBreakLast
  }%
}
\def\FV@RaggedRight{%
  \let\\\@centercr
  \@rightskip\@flushglue\rightskip\@rightskip\leftskip\z@skip\parindent\z@}
\newdimen\FV@LineWidth
\def\FV@SaveLineBox#1{%
  \savebox{\FV@LineBox}{%
    \advance\FV@LineWidth by -\FV@BreakIndent
    \hbox to \FV@BreakIndent{\hfill}%
    \ifbool{FV@breakautoindent}%
     {\let\FV@LineIndentChars\@empty
      \FV@GetLineIndent#1\FV@Sentinel
      \savebox{\FV@LineIndentBox}{\FV@LineIndentChars}%
      \hbox to \wd\FV@LineIndentBox{\hfill}%
      \advance\FV@LineWidth by -\wd\FV@LineIndentBox
      \setcounter{FV@TrueTabCounter}{0}}%
     {}%
    \ifdefempty{\FancyVerbBreakSymbolLeft}{}%
     {\hbox to \FV@BreakSymbolIndentLeft{\hfill}%
      \advance\FV@LineWidth by -\FV@BreakSymbolIndentLeft}%
    \ifdefempty{\FancyVerbBreakSymbolRight}{}%
     {\advance\FV@LineWidth by -\FV@BreakSymbolIndentRight}%
    \parbox[t]{\FV@LineWidth}{%
      \FV@RaggedRight
      \leftlinenumbers*
      \begin{internallinenumbers*}%
      \let\makeLineNumber\FV@makeLineNumber
      \noindent\hspace*{-\FV@BreakIndent}%
      \ifdefempty{\FancyVerbBreakSymbolLeft}{}{%
        \hspace*{-\FV@BreakSymbolIndentLeft}}%
      \ifbool{FV@breakautoindent}%
       {\hspace*{-\wd\FV@LineIndentBox}}%
       {}%
      \FV@BreakByTokenAnywhereHook
      \strut\FV@InsertBreaks{\FancyVerbFormatText}{#1}\nobreak\strut
      \end{internallinenumbers*}
    }%
    \ifdefempty{\FancyVerbBreakSymbolRight}{}%
     {\hbox to \FV@BreakSymbolIndentRight{\hfill}}%
  }%
}
\let\FV@BreakByTokenAnywhereHook\relax
\expandafter\let\expandafter\FV@iffp\csname fp_compare:nNnTF\endcsname
\def\FV@ListProcessLine@Break#1{%
  \hbox to \hsize{%
  \kern\leftmargin
  \hbox to \linewidth{%
  \FV@LineWidth\linewidth
  \ifx\FV@RightListFrame\relax\else
    \advance\FV@LineWidth by -\FV@FrameSep
    \advance\FV@LineWidth by -\FV@FrameRule
  \fi
  \ifx\FV@LeftListFrame\relax\else
    \advance\FV@LineWidth by -\FV@FrameSep
    \advance\FV@LineWidth by -\FV@FrameRule
  \fi
  \ifx\FV@Tab\FV@TrueTab
    \let\FV@TrueTabSaveWidth\FV@TrueTabSaveWidth@Save
    \setcounter{FV@TrueTabCounter}{0}%
  \fi
  \sbox{\FV@LineBox}{%
    \let\FancyVerbBreakStart\relax
    \let\FancyVerbBreakStop\relax
    \FancyVerbFormatLine{%
      %\FancyVerbHighlightLine  %<-- Default definition using \rlap breaks breaking
       {\FV@ObeyTabs{\FancyVerbFormatText{#1}}}}}%
  \ifx\FV@Tab\FV@TrueTab
    \let\FV@TrueTabSaveWidth\relax
  \fi
  \ifnum
    \FV@iffp{\the\wd\FV@LineBox}>{\FV@LineWidth}%
     {1}% width greater than line
     {\FV@iffp{\the\wd\FV@LineBox}<{0}{1}{0}}% width overflows
    >0
  \relax
    \setcounter{FancyVerbLineBreakLast}{0}%
    \ifx\FV@Tab\FV@TrueTab
      \let\FV@Tab\FV@TrueTab@UseWidth
      \setcounter{FV@TrueTabCounter}{0}%
    \fi
    \FV@SaveLineBox{#1}%
    \ifdefempty{\FancyVerbBreakSymbolRight}{}{%
      \let\FV@SetLineBreakLast\relax
      \setcounter{FV@TrueTabCounter}{0}%
      \FV@SaveLineBox{#1}}%
    \FV@LeftListNumber
    \FV@LeftListFrame
    \FV@BGColor@List{%
      \FancyVerbFormatLine{%
        \FancyVerbHighlightLine{\usebox{\FV@LineBox}}}}%
    \FV@RightListFrame
    \FV@RightListNumber
    \ifx\FV@Tab\FV@TrueTab@UseWidth
      \let\FV@Tab\FV@TrueTab
    \fi
  \else
    \let\FancyVerbBreakStart\relax
    \let\FancyVerbBreakStop\relax
    \FV@LeftListNumber
    \FV@LeftListFrame
    \FV@BGColor@List{%
      \FancyVerbFormatLine{%
        \FancyVerbHighlightLine{%
          \parbox[t]{\FV@LineWidth}{%
            \noindent\strut\FV@ObeyTabs{\FancyVerbFormatText{#1}}\strut}}}}%
    \FV@RightListFrame
    \FV@RightListNumber
  \fi}%
  \hss}\FV@bgcoloroverlap\baselineskip\z@\lineskip\z@}
\def\FV@BreakBeforePrep@Pygments#1{%
  \ifcsname FV@BreakBefore@Token\@backslashchar\endcsname
    \@namedef{FV@BreakBefore@Token#1Zbs }{}%
  \fi
  \ifcsname FV@BreakBefore@Token\FV@underscorechar\endcsname
    \@namedef{FV@BreakBefore@Token#1Zus }{}%
  \fi
  \ifcsname FV@BreakBefore@Token\@charlb\endcsname
    \@namedef{FV@BreakBefore@Token#1Zob }{}%
  \fi
  \ifcsname FV@BreakBefore@Token\@charrb\endcsname
    \@namedef{FV@BreakBefore@Token#1Zcb }{}%
  \fi
  \ifcsname FV@BreakBefore@Token\detokenize{^}\endcsname
    \@namedef{FV@BreakBefore@Token#1Zca }{}%
  \fi
  \ifcsname FV@BreakBefore@Token\FV@ampchar\endcsname
    \@namedef{FV@BreakBefore@Token#1Zam }{}%
  \fi
  \ifcsname FV@BreakBefore@Token\detokenize{<}\endcsname
    \@namedef{FV@BreakBefore@Token#1Zlt }{}%
  \fi
  \ifcsname FV@BreakBefore@Token\detokenize{>}\endcsname
    \@namedef{FV@BreakBefore@Token#1Zgt }{}%
  \fi
  \ifcsname FV@BreakBefore@Token\FV@hashchar\endcsname
    \@namedef{FV@BreakBefore@Token#1Zsh }{}%
  \fi
  \ifcsname FV@BreakBefore@Token\@percentchar\endcsname
    \@namedef{FV@BreakBefore@Token#1Zpc }{}%
  \fi
  \ifcsname FV@BreakBefore@Token\FV@dollarchar\endcsname
    \@namedef{FV@BreakBefore@Token#1Zdl }{}%
  \fi
  \ifcsname FV@BreakBefore@Token\detokenize{-}\endcsname
    \@namedef{FV@BreakBefore@Token#1Zhy }{}%
  \fi
  \ifcsname FV@BreakBefore@Token\detokenize{'}\endcsname
    \@namedef{FV@BreakBefore@Token#1Zsq }{}%
  \fi
  \ifcsname FV@BreakBefore@Token\detokenize{"}\endcsname
    \@namedef{FV@BreakBefore@Token#1Zdq }{}%
  \fi
  \ifcsname FV@BreakBefore@Token\FV@tildechar\endcsname
    \@namedef{FV@BreakBefore@Token#1Zti }{}%
  \fi
  \ifcsname FV@BreakBefore@Token\detokenize{@}\endcsname
    \@namedef{FV@BreakBefore@Token#1Zat }{}%
  \fi
  \ifcsname FV@BreakBefore@Token\detokenize{[}\endcsname
    \@namedef{FV@BreakBefore@Token#1Zlb }{}%
  \fi
  \ifcsname FV@BreakBefore@Token\detokenize{]}\endcsname
    \@namedef{FV@BreakBefore@Token#1Zrb }{}%
  \fi
}
\def\FV@BreakAfterPrep@Pygments#1{%
  \ifcsname FV@BreakAfter@Token\@backslashchar\endcsname
    \@namedef{FV@BreakAfter@Token#1Zbs }{}%
  \fi
  \ifcsname FV@BreakAfter@Token\FV@underscorechar\endcsname
    \@namedef{FV@BreakAfter@Token#1Zus }{}%
  \fi
  \ifcsname FV@BreakAfter@Token\@charlb\endcsname
    \@namedef{FV@BreakAfter@Token#1Zob }{}%
  \fi
  \ifcsname FV@BreakAfter@Token\@charrb\endcsname
    \@namedef{FV@BreakAfter@Token#1Zcb }{}%
  \fi
  \ifcsname FV@BreakAfter@Token\detokenize{^}\endcsname
    \@namedef{FV@BreakAfter@Token#1Zca }{}%
  \fi
  \ifcsname FV@BreakAfter@Token\FV@ampchar\endcsname
    \@namedef{FV@BreakAfter@Token#1Zam }{}%
  \fi
  \ifcsname FV@BreakAfter@Token\detokenize{<}\endcsname
    \@namedef{FV@BreakAfter@Token#1Zlt }{}%
  \fi
  \ifcsname FV@BreakAfter@Token\detokenize{>}\endcsname
    \@namedef{FV@BreakAfter@Token#1Zgt }{}%
  \fi
  \ifcsname FV@BreakAfter@Token\FV@hashchar\endcsname
    \@namedef{FV@BreakAfter@Token#1Zsh }{}%
  \fi
  \ifcsname FV@BreakAfter@Token\@percentchar\endcsname
    \@namedef{FV@BreakAfter@Token#1Zpc }{}%
  \fi
  \ifcsname FV@BreakAfter@Token\FV@dollarchar\endcsname
    \@namedef{FV@BreakAfter@Token#1Zdl }{}%
  \fi
  \ifcsname FV@BreakAfter@Token\detokenize{-}\endcsname
    \@namedef{FV@BreakAfter@Token#1Zhy }{}%
  \fi
  \ifcsname FV@BreakAfter@Token\detokenize{'}\endcsname
    \@namedef{FV@BreakAfter@Token#1Zsq }{}%
  \fi
  \ifcsname FV@BreakAfter@Token\detokenize{"}\endcsname
    \@namedef{FV@BreakAfter@Token#1Zdq }{}%
  \fi
  \ifcsname FV@BreakAfter@Token\FV@tildechar\endcsname
    \@namedef{FV@BreakAfter@Token#1Zti }{}%
  \fi
  \ifcsname FV@BreakAfter@Token\detokenize{@}\endcsname
    \@namedef{FV@BreakAfter@Token#1Zat }{}%
  \fi
  \ifcsname FV@BreakAfter@Token\detokenize{[}\endcsname
    \@namedef{FV@BreakAfter@Token#1Zlb }{}%
  \fi
  \ifcsname FV@BreakAfter@Token\detokenize{]}\endcsname
    \@namedef{FV@BreakAfter@Token#1Zrb }{}%
  \fi
}
\newbool{FV@breakbytoken}
\define@booleankey{FV}{breakbytoken}%
 {\booltrue{FV@breakbytoken}}%
 {\boolfalse{FV@breakbytoken}\boolfalse{FV@breakbytokenanywhere}}
\newbool{FV@breakbytokenanywhere}
\define@booleankey{FV}{breakbytokenanywhere}%
 {\booltrue{FV@breakbytokenanywhere}\booltrue{FV@breakbytoken}}%
 {\boolfalse{FV@breakbytokenanywhere}\boolfalse{FV@breakbytoken}}
\def\FancyVerbBreakByTokenAnywhereBreak{\allowbreak{}}
\def\VerbatimPygments#1#2{%
  \def\FV@PygmentsHook{\FV@VerbatimPygments{#1}{#2}}}
\def\FV@VerbatimPygments#1#2{%
  \edef\FV@PYG@Literal{\expandafter\FV@DetokMacro@StripSpace\detokenize{#1}}%
  \def\FV@BreakBeforePrep@PygmentsHook{%
    \expandafter\FV@BreakBeforePrep@Pygments\expandafter{\FV@PYG@Literal}}%
  \def\FV@BreakAfterPrep@PygmentsHook{%
    \expandafter\FV@BreakAfterPrep@Pygments\expandafter{\FV@PYG@Literal}}%
  \ifx#2\relax
    \let\FV@PYG=#1\relax
  \else
    \let\FV@PYG=#2\relax
  \fi
  \ifbool{FV@breakbytoken}%
   {\ifbool{FV@breakbytokenanywhere}%
     {\def\FV@BreakByTokenAnywhereHook{%
        \def\FV@BreakByTokenAnywhereBreak{%
          \let\FV@BreakByTokenAnywhereBreak\FancyVerbBreakByTokenAnywhereBreak}}%
      \def#1##1##2{%
        \FV@BreakByTokenAnywhereBreak
        \leavevmode\hbox{\FV@PYG{##1}{##2}}}}%
     {\def#1##1##2{%
        \leavevmode\hbox{\FV@PYG{##1}{##2}}}}}%
   {\def#1##1##2{%
     \FV@PYG{##1}{\FancyVerbBreakStart##2\FancyVerbBreakStop}}}%
  \let\FV@PYG@Redefed=#1\relax
}
\let\FV@BreakByTokenAnywhereBreak\relax
\def\FV@DetokMacro@StripSpace#1 {#1}
%% \Finale
\endinput
%%
%% End of file `fvextra.sty'.