rustpk#rustc 1.72.0 (5680fa18f 2023-08-23) }ޱL{ :-8f88c761e33f2651ՆQ4-46a989d0e2cef827e$ɛDp>-b114db70ea0690b1rustc_std_workspace_core ūu sR-13da980d6c74fec5YnFmZܝ--649be05783c8912epWĪ9/-f002c8f83a289c4b &c~~*ĽVa-682387162b570769cfg_ifz$kdgK!--05a2cedbb78c1d4f miniz_oxidePnzn )m-9c3df673b2797081adlerA%lon  2-c6afbee8d1102512 hashbrown8*^| -356231f77d1e268arustc_std_workspace_allocL%gqG-80ed5799bf463787 std_detecta^Ʒc -1bccb7a942e1b311rustc_demanglekŗ,N/ST%L)-bc6864da821ce9a2 addr2line2Ȃ']51:.-4930b3dc482158f7gimli~2)F25˼-65bea4bb6af40828object^]UVW-919f89587cbed68dmemchrk/YO+-c6624cb4360306cdBhnge],Q-f9018f9cee1cc5ffZZZZZZ levenshteinZ ZZZZZ%Z-tests  3 Levenshtein<  3LevenshteinErrorI 3 __ccm c]           vuuu uuu           u64_to_usize  64 (      bytes read_u32_le read_u64_le write_u32_leio_write_u32_leW  write_u64_leio_write_u64_le  pack_uint  pack_uint_in   unpack_uint pack_sizeerror%%%%)%+%-%/%1sourceinner_automaton3 Automaton4State4 4is_match4 can_match4will_always_match4accept4 accept_eof4 starts_with4?=Rhs4 intersection?4 complement3B'aBBB BBBBB3LL3OOO OOO3VV3YYY YYYY3aa aaaa3StartsWithStateh hAh 3StartsWithStateKindllDonen lRunningp p 3sss ssss3 UnionState{ {{B{ { 3 3IntersectionState   3 3ComplementState  3   inner_map     KID contains_keyget streamkeys rangesearchsearch_with_stateis_emptyopas_fstinto_fstmap_dataF<'mItem into_stream MapBuilder  into_mapinsert extend_iter  extend_stream'fSfinish into_innerget_ref bytes_writtenStream      into_byte_vec into_str_vecinto_byte_keys into_str_keys into_valuesStreamWithState    Keys    Values     StreamBuilder  StreamWithStateBuilder   OpBuilder   push ? differencesymmetric_difference  extend  Union   Intersection   Difference  SymmetricDifference   StreamOutput      inner_set    contains is_disjoint   is_subset   is_superset  <'s SetBuilder  into_set      !!! 1  1 into_strs into_bytes 1 #    % 1  1 1& 1 11( 1 1 ( ?))  )  * 1 1 + 1 1 + 1 1 , 1 1 StreamZeroOutput     >     build     Builderwtr unfinishedregistrylast last_addrnew_type       insert_output compile_fromcompilecheck_last_key!! push_emptypop_root pop_freeze pop_emptyset_root_outputtop_last_freeze add_suffixfind_common_prefix  !find_common_prefix_and_set_output last_compiledadd_output_prefix< common_inputs COMMON_INPUTS COMMON_INPUTS_INV counting_writerCountingWriter?cntsummermasked_checksum !writeflushcrc32updatecrc32c_slice16 crc32_tableVersiongotFormat ChecksumMismatchHChecksumMissing  DuplicateKeyH OutOfOrderpreviousH WrongTypeHFromUtf8  __Nonexhaustive  format_bytesnode     TRANS_INDEX_THRESHOLD   transitions'n transitiontransition_addr find_input final_outputis_finaladdras_slice A compile_toAset_common_input common_input input_lenend_addrinput trans_addrANNNsizesNNoutputNA set_final_stateis_final_stateset_state_ntrans state_ntransOtotal_trans_sizetrans_index_size ntrans_lenntransLNNNL  Oset_transition_pack_sizetransition_pack_sizeset_output_pack_sizeoutput_pack_size Transitions LJ L  common_idxN pack_delta pack_delta_inpack_delta_size unpack_delta BoxedStream ( streams  ( ?))  )  * heapoutscur_slot + WWW + setkeyWW , WWW  StreamHeap rdrsW poppeek_is_duplicate  pop_if_equal pop_if_le  num_slotsrefill indexed_valueN set_input set_output   ?entry FNV_PRIME\ promoteis_noneregistry_minimal\VERSION EMPTY_ADDRESS NONE_ADDRESSFstType CompiledAddr from_iter_set from_iter_mapget_key get_key_into  verify /       /       0       fst_typerootJ as_bytes    as_inner          FstRef    data     `      b  root_addr b J   b empty_final_output%    fst aut min max                   &    e e e e                      exceeded_by   is_inclusive!            " " " " "         #    e e inp  empty_output stack end_at      seek_min   next_with           zero value is_zero prefix cat   <  Streamer     IntoStreamer            automaton  X % Fst    Io   % 3Str  string3   3   3 Subsequence  subseq3   3   3 AlwaysMatch 3 3 3 StartsWith    3  3  3*       3   3   3+       3   3   3 Complement    3  3  Map      Set      UnfinishedNodes j BuilderNodeUnfinished J ?  BuilderNode L L trans          LastTransition j   CheckSummer sum  TABLE TABLE16  Node   c        L Q O L         OneTransNext    OneTrans    AnyTrans     EmptyFinal      StateOneTransNext      StateOneTrans      StateAnyTrans      PackSizes      IndexedValue  l           Slot idx N O   Registry table  table_size mru_size  RegistryCache  cells   RegistryCell M J   RegistryEntry  Found    NotFound    Rejected   | } ~  ~    ~       ~     n   c  Meta   d    checksum  Bound Included    Excluded     Unbounded   StreamState     J u   aut_state                       Transition j  M!" #  $% &' 7777#70707072767777787879797:7:7;7;7F7G7G7H7H7I7I7J7J7K7K7R7S7S7T7T7U7U7\7]7]7^7^7_7_7`7`7c7d7d7e7e7f7f7g7g7v7w7w7x7x7y7y7z7z77777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7  7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 74 G   n   n  } <[Zd HHH HHHHHIIHIHI JxXA@  G4 C  n n3x G  n n3x 4  n n3xP  o o3F G  o o3F 4  o o3FZ   o jy["?6Gۦ4ۦ   p  3 | \£G4   *  3  3 \]Gا4ا   +  3  3 vϮG4   r  3 Lct]>NG4   s   ATt|   s   ATt|444buf040bW`(666Global 7C\ wG  n  cPo_     s   ATt| !  Țt #  $R;X #  Qtv$9G $  B %  E# &  |)8(  ~i 8(  ~i  *  @zWʶ +  L +  O+rbFM(] ,  7;#% -  B+    s   i_r   s   i_rG  1   s   i_r !  g 1 #  HN| %  >FZ i1 &  ݺNnJ18(  ڝ ) 8(  ڝ )  *  p-6O1 +  tO_=1 +  PtkB81 ,  _u\$w1 <  G  s jwS5_G  t J ?dj wVG  t L L uך$iIллллллG  u j ллE?EE__  v v5݊ŽGŽGG88 FromUtf8Error8*9*YOa  v c        L Q O Lo`    v c        L Q O Lo`  G  v c        L Q O Lo`    w    x    x    xS3NG   y   K)3#G   y   6> mNG   z   =/OFG   z   j>0w G9RJD!YF0 L  {  lFGI8(Ur M 8(Ur M  *WWWn'B  +WWW +j-W  +XYWW¡ #Q  ,WWW&&RFt0, G  | | N O7<-G  | } } },DpG  } }sy#?   ~ M JHۮ$GG   ~   ~   DPWӝ G  | };yLXLG   ~   ~   ;    ~   ?o;GG     d    ρAE8     n  cPo_    % e e e esE#"'\      & e e e eRR J   G           lT    !   $)nq      J u  aN  G   J u  aN     # e e j j j j VA         RE2ƏGI   j  MJa:,IG   Y O a B s                                                               1                                           / -  +                   4 1 <8#G$# I#G# !98      ``t     CTryFromSliceError  '՜ׁ2 2b   'w  b       C2 2b   'w  b     A"assertion failed: slice.len() >= 4""                   ! !  "#$"#$#" "%   n               N    'w      ?4         "assertion failed: slice.len() >= 8""                                                              !  !    "  # $"# $#"  " &  '  (&' ('&  %& )  * +)* +*)  )% -  .  /-. /.- ,- 0  1 201 210 0, 4  5  645 654 34 7  8 978 987 73 ;  <  =;< =<; :; >  ? @>? @?> >:   A                                                                            N   ? 8     $         , B M    'wҚ  ?nbytes Қ    _ref__nbytes  # ###,assertion failed: 1 <= nbytes && nbytes <= 8,,#      8 J;((m     Q     9          &    @    Q& "'' '' '   !c   'w,k' !' Q>''"#  #    {-P   Q l c uty'&&?    ! '"8   # # # #,assertion failed: 1 <= nbytes && nbytes <= 8,, #    V +  9NNIterNMNMN_markerMjg(+  ++ 8 Enumerate))məA3  ++ k +++ 9 ++ +  +@   k #k0#   #+++ {-P+ +k + +b@     @        @           @        (@ (  (  0@ 0 0  ]8@ 8 8  77$          ,?   err ?    .A    A 8F  5_stateF9OO ;Q {-PQ  <l   p  3 | \£l  =   *  3  3 \]   ?   +  3  3 vϮ     Ak   r  3 Lct]>Nk!!! 6!!F!;5!  !!!!;!!" 7""G!T!! !!! !!T"""  8""H"V""""" ""V# # # 9##I"f##### #"f$$$ :$$J#d$##$## #byte$#d%%%  ;%%K$j {-P%$$$$ $$j,,, ,,,  , ,  n n3x, ,,, ,,,.. ^. ..!  .N-X.-..n--X/ //R/8 {-P/ ///8000 000 00S/_0/ /000//pos//_1 1 >1 1T0N100000N 2  2 2333 V 333 ? 333  3   3+3+ ŬŬ 3+3+4 44 44  4   55 55U121 1112 23+ Ŭ3Ŭ3 {-P33 Ŭ3 44111121<<<<<;  ; ;  o o3F; ;<<<;;=>> ==.  >X=r== == subsequence= =r???\>*>>>>*?????]?U?*?? ????? ??U@@@^@;@@@@@;@AAAA_@^A*A@@@A@@ @@^AB B BBBCBB B  B  BB B B%B- B- B- CC`ABBAAAABBB%BBBBB-AAAAA AAD DۦD ۦDDDEcE(EEEE(FFFdE7EE EEE7FFFeF8FFFFF8GGGfF@GGGGF@GgG8GGGGGG8III IH  H HH HI IHHHH StartsWith III GHH HHH H   'w z*HH GGGEGEGEG EGEGEQ ! >SHHۋI ̊I̊IHHH K KLL LLL 6LLLLL 7LLL lLM MMM# lLM  M MK hMMKMvKL hhik 3 KKlnopqr 3X?7TZK5L̊LL̊L LMMKinnerLKN ǓN OOONNNNOwMNM MNM MMO ǓO P ǓPPP  8POPPPQxOPBOO֖OPĔP ̊PO OP OQ ǓQ RRRQRRRRyQQQ֖QQQ QQS SS ǓS T ǓUU UUU :UST lT U U  UU  UU U lUV  V V  V( l UW  W WW S hWW RW zRTUSR֖SSǓSTĔT U ̊UŮUĔU V WR SST  next_innerU RXXX̉XXXX XW  WWW WاW اWX̊XX XWWWWUnionXXۋXXXۋWW HWW W WWWWۋX̊XۋX ֥X֥XWWWZZZZZZZ 6ZZ* {ZZY^Y^{{| 3 3 y `ZYZ̊Z5Z֥ZYY^[[[[[[6[6[6[[Ы[[ 7[[[6[6[6Z{ [Z Z[̊[Ĕ[[֥[ Ы[Z ZZ{\\\\ \\8\8\8\\Ы\\  8\\\8\8\8[~ \[ɮ[\̊\Ĕ\\֥\\[ [[~]"]]"] 9]]T]T]T]"]Ы]"] 9]^]T]T]T\ ]\ɮ\]"̊]"Ĕ]]"֥]"]\ \\^_^^^__ Ы__ : _^k {__^^ ^^ɮ^^^̊^Ĕ_Ы_֥__^ ^^^```̉``````  ``` `` ``̊``֥````` Intersection ``ۋ```ۋ```` ` ````ۋ`̊`ۋ``֥````ccccccccc1 ccblbl 3 3 0Ubbc̊cЫc֥cbbldddddd6d6d6ddЫddǭddd6d6d6c cc cd̊dĔdd֥ddc cceeee ee8e8e8eeЫee eee8e8e8d ddde̊eĔee֥eed ddf"ff"fճffTfTfTf"fЫf"fԴfffTfTfTe feef"̊f"Ĕff"֥f"fe eehhhhhhh Ыhh hhr hhgg ggggh̊hĔhЫh֥hhg gggiiỉii  i ii ii̊iiiii Complement iiiۋiiii iiiiiۋiǎi̊iiiikkllk lkU 3 W)X#Zkkk̊kkkUllllll llall ll̊lĔll llam"mm"mճmm# mlkmmmm"̊m"Ĕmm mlknnnn nn nmknnnn̊nĔnn nmkoooooo. pnonooo̊oĔon oon                                          'w               c   'w      'w        'w          l        c                    y             #gnzyN l c uty       l c uty         builder                  B    R    'w     'w c R # # #  # # "c # " " # " Y" "c & & &  & &, '  ? ' ' &u  {-P& & &  {-P& & & Y& &u ' '  ' ' ' ' ' ' O' ' 0 0 0  0 0 ۦ0 0J !  Țtۦ0 0    !   $)nqۦ0 0 0 0J 5 5 5 5 5 5 5D #  Qtv$9G5 5 5 5 5 5D ; ; ; ; ; ; :J $  B: : ; ; : :J C C C  C C ۦC CV %  E#ۦC C   % e e e esE#"'\ۦC C C CV Q Q Q  Q P! ҂Q Pt %  E#҂P P ҂P   % e e e esE#"'\҂Q Q P eP Pt ] ] ]  ҂] ]5 ҂] \ &  |)҂\ \ ҂\   & e e e eRR J҂] ] \ e\ \ ^ ^ ^  ^ ^ ^7 ^ ^ ^ ^ ^7 _ _ _  _ _ _@ _ _ _ _ _@ n n  n n n  n n mL (  ~im m ܋n m mL o o o< o o o o< p p p; p p p p; v v v v v v  v v v v v v  v v* v  B  n  cPo_֏   s   ATt|֏ Ɛv v w u w w u    'wƐu u Џu    'wv v Џv w u u u w w  6w w- w  666Empty6 6  6w- w6 x  Cx x wc w w- w wc #y (y  y (  !Y!Y G!Y .Y  Y H )Yy y  y y  y y y  y y y y     'wy y  y y z  z z     z z  z   z  z  z  z  z  z 'z ږz '#Y#Y  #Y".Y" Yϗ  ")Yz z  z z  z z z " z z  z { &{  { &{ {  *  { %{ %{ %{  GBorrowed Owned Ym||%{ %{ !%{ %{  G! %{ %Y GlG formatterG1 2 7e %Y%Y  %Y%Y G%Y$.Y$ Yϗ$)Y{5 {5 {5 {5 " {5 "{  {5 { {5 {  { %{ ږ{ $%'Y'Y$# 'Y&.Y& Yϗ# &)Y{ { { {  { !x z x y y y y y y z z z z z  { {  {5 {5 )x x x l c utyy  .YIpiecesEEE4&w\NF!Yy y y y  {-Pz  z z z z z z ȧz ".Y#Yz z ȧ{5 $.Y%Y{ ޡ%Y %Yޫ%Y%{ %{ { %{ %{ { 'Y{ ږ{ Ğ{ ږz ږy  x x  y  y y firsty  kz  vz  z  z  {  {5 x {  { ]){ { y ږ{ ܖ{ { {  { ({ , { ){ { z Ğ{ ƞ{ { z  z , z z z ږz ܖz z y  y Map([y y x ږy ܖy y }  } |< | | e| |< ~ ~ ~8 ~ ~ ~ ~8       ۦ J       J     "  Y ̟ ??????}1 Y         L     n  cPo_   L      .   B??????}1  #gnzyN    j    'wҢ Ǣ    'w ?Ǣ j       p   ̧ ԧ    Y̧  ԧ p b ج ݬ  8ݬ ج7   98 & b   s/8X[   ӫ  ǫ b ج7 ج  ǫ             ! !    !        ! 8     "   8   -  B+1   װ  ɰ 8 "   ɰ       Ĵ A     A ص ص ߵ  ߵ  H    'wĵ  ص  H ж ж ׶  ׶ ж  <  ö  ж  ж  < ޷ ޷     I з Ʒ ޷ Ʒ I     !   $)nq    2   ? $  ̻s  !  ȚtԻ  {-P   Ի ̻s                 Y   ƾ    !   $)nq҂ƾ ;  ҂;  X 444040bW`( !  Țt҂ ƾ  X     ҂  ]    'w444040bW`(888 *&j5d9e    ]     ҂  S 444040bW`(    S     ҂  X    'w444040bW`(    X     ҂  I 444040bW`(    I    # e e j j j j VA    @   ?5 2    {-P! #  $R;X  {-P                - -   -       Y    -      !   ?   [  {-P      [        Y      )   ?   ^      ^                  ҂֏  ҂ q   ֏    bound q     ҂֏  ҂ q   ֏     q     ҂֏  ҂ q   ֏     q     ҂֏  ҂ q   ֏     q    % e e e esE#"'\      R  %  E#    R     ҂֏ ( ҂    ֏          ҂֏ ( ҂    ֏          ҂֏ ( ҂    ֏          ҂֏ ( ҂    ֏         & e e e eRR J    %  d  &  |)    d       N ܋ (Ur M N            ܋ ܋    ܋   streamable  3     &  3   -  B+,      3  3 &            E *  @zWʶ͋ ܋ċ *WWWn'B  ċ E ŗ ŗ ̗  ̗ #  a +  L ܋ +WWW +j-Wŗ ŗ  a ۥ ۥ    Х  Y +  O+rbFM(] ܋ +XYWW¡ #Qۥ ۥ  Y      2   ,  7;#%ڴ ܋Ѵ ,WWW&&RFt0,  Ѵ  Է Է  8Է Է Ʒ; Է Է Է  9ř8Է Է  Է ʷ      Է        Ʒ; ׷*    ř Է Է  {-PԷ  Է Ʒ; ʷ   it Է ʷ         Ϻ ٺ ٺ ٺ Ϻ Һ  8܋řҺ    Ź   Ź F ܋߹ řչ ܋ Ϻ Ϻ řٺ  չ  Ź       ]  {-P  &     ]       ] & ڒ    ]       ] &     ]       ] &     ]      4   ? &  }       }         !   !       ! ( ( ( ( (   (  ( (  ( ( ( ( (                c    'w޳      l    c     y  2  L             B R   'wcR _ݮY_!!!!! ۦ! J!  g ۦ ݮ !!  J((((( ۦ('V%  >FZ iۦ(ݮ(((('V222Ȃ2 2! ҂22t%  >FZ i҂2ݮ2҂2222e22t>>>>>5 ҂?=&  ݺNnJ҂>ݮ>҂>>>>e>=@ @ @@@?7?ݮ?@ ??7AAAۉA A@@@ݮ@A@@@GG GGG ݮG GGL(  ڝ )G ݮGGGGLN:NN N N& N:N  <  N3NLMݮLLN:N&NLLLU8UU U U& U8U  U1USSݮSSU8U&USSS[:\\ \ \& [:[  [3\ZZݮZZ[:\&\ZZZ]]]<] ݮ]]]<^^^;^ ^^^;dddddd d dddddƏd d*d B   s   i_r֏ d ddcddc   'wccЏcddЏddcccee 6ee&e 6666 6  6e&e/e C޳eee\޳e e&ee\"f%fږf%*Y*Y*Y).Y) Yϗ))Yffff fg g gffgfg ggg  g g   gg  g   g h h h h$hږh$,Y,Y ,Y+.Y+ Yϗ +)Yhhhh hh h!hh  hh#hږh#hh h.h.h.h.h.Y .Y.Yޡ.Y.Y.Y-.Y- Yϗ-)Yh.h.h.h. h.ih. ih.ii"iږi!"0Y0Y! 0Y/.Y/ Yϗ /)Yiiiii fh fggffggghhhh ii h.h.&f ݮffȧf).Y*Yfgg g g  g g ghhȧh+.Y,Yhhȧh.-.Y.Yhޡ.Y .Y.Y.h.hhi0Yiږiږhږhږf ff g fg g  Yg  h h  i  h.fi i])iigږiܖiih hhhgږhܖhhh h, hhgږhܖhhf fSet([fffږfܖffjjj8j ݮjjj8lllll ۦllJl  lllllJm  mm<mmemm<" ыYY֌֌݌݌ Ҍ  L޳ ֌֌L͎.Ў B2  L  Ԏ Ўj   'wɾ?j đ^    Y^9 9               c     Ĕ ϔ Д9)   {-P 9 Y   <  ֗& <ȗ  ȗ5  <֗& əA ייəA  H H < < II T!  g ҂TԤO ԤO  !Ħ ?Ħݦ[ !  g     [ʦ֦ȦӦӦȦɦYʦȦ  1 ? #Ƭϫw {-P #  HN|׫   ׫ ϫw   Y   ҂IJӱq֏ӱqʳʳѳѳ  ҂q֏ʳʳq  ҂qô֏q  ҂qݵʵ֏еʵеq  ڷ R· %  >FZ iR ( ҂˿֏ ( ҂֏ ( ҂֏ ( ҂֏ ņ % d&  ݺNnJdÈ  N N     7  * 7 <  0  77*  Ï E*  p-6O E # a+  tO_=a Ŕ  Y+  PtkB8Y2 ,  _u\$w ; ʰ    ;*  řԝ;    8ř F ř  ř  ! ? [     [Y  ! ?[     [Y  Ħ! ?[     [Y  ! ?ց[     [Áρ́́YÁ  3ƅ ?  ƅ%{ {-P   {-P   {хօօ օЅ ʅ ʅ Ѕʅ ˅хօY˅ʅ 4 4 4  I4 4 4 4  I4 4 444040bW`(4 4  I4 4  4 4 л4 4 4 4 4 4 4 4  4 4 5  5 5 5 5 5 5 5 5 6 6 6 6 6 6 6 6 6 6 6    6 6 6 6 6 6 6 6 6   6 6 6 6 6  6  6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6      @                 "   4" 0   0 9   C  m     'w0 "      m     $   C   -   C  c      'w$   c           R ɾ    ?   R " " " "  " " " $ $) $   $ $) $* $* $* $*  $* %  $$ $  $$ $* $ c$* $  ɾ$* $% $%  $% $%  $%   % % % % %   % %   c$% %  $% & &  & '&  & &  %  & & %  ' ' ' ' ' ' ' ' ' ' ! ' ' $*  $%   ! " $ $ $* $* % % $% $% ɾ! ! ! " $* $) $ $ $ $% $$ % % % % % % &  {-P& ' ?!  ! ?"  $  $*  %   $% ! $ &  (( (( (( (( ( ( (   ( ( (' (  (  (" (( ((  (( ((  (( ( ( ( ( ( (      ( (( ( c(( (   (( ) ) ' )  )   ( ' ( ( (( ((  ' ' ' (( (' ( ( ֥( ( ( ( ( ) ' bs'  (   (( ' -' -' -' -' -' -' - - . . - -& - . -! -' -' -' -' -'  . . . . . . .   . -' . c-' .  -' .  .  .. .. .. .     .) . . . . , .  .  .  .  , . . -' -' - - - - -' -& - - ֥- . . . . . . . - -  -  .   -' , 2N 2N 3 3 3 3 2N 3 3 3 3 3  3 2 3  3 3 3  3 3  3 3 3  3 3 3 3    3 3 3 3 3   3 3  3  3  c3 3  3 3  3 3 3 3 1 3  3 1 2N 37 3 3 3 3 2 1 2 3 3  {-P3 3 2N 2 3 3 3 3 3 3 3 3 1 2 3 Y2 3   3  3 1 8 8 8 9 9 9   9 8  8  8 9 9 9   9 9 9    9 9 9   9 9  9  9 9   c9 9    9 9  9  9  9 9  6 6 8 97 9 9 9 9 7 6 7 8 9  9 8 8 9 9 9 9 9 9 6 7 8 Y8 9  9   9 6 ; ; ; ; ;  ; ;  ; ; l; ; ; ; c; ; ; ; ; ; ;T ; ; ; ; ; ; ; l c uty; ; ; ; ; ;  ;  ; ;T ;= -= = -= = = =  = 4= = = 4= =  = = = =  4= = = c= =  54= =  >  = =   "= = =     'w "= =  =   =  l> > > >6 >  ">6 >  c= > Р6"= >7 >7  ">7 >7  >7  > ? >7 > ">7 > c>7 >  7">7 >8 >8 ">8 >8  >8 ? ? ?  "? ? c>8 ? 8">8 ? -? ?  ? ?   "? @ #@ $?% ?  #$"!?% ?& ?& "!!?& ?& % !?& %@ )@ @  )(!@ @ &!c?& @ &9!?& @ @ ('!@ @ * '@ *@ ,@  ,@ 4@ +'c@ @ +:!@ @ '%@ "@ /4@ @ "@ 4< @ #@ $@  @ &$@ #@ (@ )@  @ +(@ ,)@ -*@ --.@ #@ 0@ 1@ 2@ -23= /= >7 >8 ?& @ < = = = = = = > > = =  > >  >7 >7  ? ? >8 >8 ? ? @ @ ?& ?& @ @ @ @ .= < = = = = = л=  = l c uty= ݡ= = > > > = >7 >6 > > > > > >8 >7 > ? ? ? ?  ? ? ? ?& ?% @ @ @ @ @ @ @ @ @ @ @ <  =  =  root_node= d=  >  =  >  >7  ?  >8 v? ??  @ & ?&  @ + @ <  A A A A A A A  VA A B B B>  B B  B B B  > B B> B    B. C  A C  C  D& D D& D   D C C: D C: D!  D* D D  D D8  C  C  C  E E E  E H H   H 8H  H 8H 8H assertion failed: out.is_zero()8H H  H I H I H I I Ԟ I I I I I  I  I2 #I &I '  I I   CxKĮ&'%I I !cI I !I I $%I2 I  #$ "I" I  J J J J @ C:  I @ A C CR I I I I (A @ @ @ A ֥A A A B> B> B B C C C C C C: D D& D& D D E E E H H 8H H I I I I I2 I2 I I I I  @ @ @ A  prefix_lenC  C  C  I ! I @ J J J J J J J J K K K  K J" J" K  K   K K  K  K K   K L  L L L    L L  L L L L L ס L L  L  L lL M M M :M  M L L cL L  L M  :M :M &assertion failed: addr != NONE_ADDRESS&&:M M  M% M M% M  M M  M M M  J J J K L L L L J J J J J" J J K  K лK K K K L L L ݡL L L L L M M M :M M% M% M J istateJ MJ JK   L  L J J K M N N2 N] N] N] O O O  O N]  N2 N2 N2 N N N  5N N] N2 N2 N] N] O O O1 O P P # O O   #  O P  P   P  ~P P  Q Q Q  Q Q Q: Q Q Q: Q  Q5 Q; Q; Q; Q;  Q;  R R R R Q cQ; Q  ݡQ; R R$ R R$ R Q5 R  R R  ~ R !R R  ! R S "S  "S S  M O P) P Q Q Q; Q; R4 $ݡN M N N] N2 N N N O O    ~   ~   DPWӝO  O P P P P P Q Q Q; Q: Q: Q Q Q Q R R R R$ R R R R S P M JN \O  MP  start_addrP  Q  Q; cellR M O !T  T T T T T T T T  T T   T T  T  T   T T   T T T U U U  )U T(  T/ U    U T4   T\ U U U U  U U U U U U   U U V V V V V V V V V V V V Ux  U V V U  W W  5 W W "W W  8"!W W #!W: W %#W W  9%$W W & $W & W ,$W ',W W  5'(W X +X X +*X X ) *X X )T X )X X X X V  S S T W: W- -S S S S T T T T T T T T  T T/ T( U U U U U U U U U U Ux V V V V V V W W W W W  W W: W W X X X W S S  check_dupeS ?T W #W 'S Y Y Y  Y Y Y Y> Y Y Y Y Y Y> Z Z Z Z Z ZC Z Z Z Z ZC j j  j  j  j   {-Pj j  >j j  j     j& j  ?j j7 k  >k k k ji jW  j    ji  քj j j  {-Pj&  {-Pj  ߁j j j j j j Jj ji j k k j k j j j j j k j tj j j _ref__b%" + T> UQ Vd Ww X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t P u v O '  Q K J R 9 B            # $ % "  I w  x (  S  ,  0  *  +  1  .  >  =  /  E  D  :  8  7  ;  3  H  6  -  4  @  A  ?  G  C  F  M  y  N  z    {                   2 &       <     !   )  5 | } ~ L                                                                                                                            ! ! ! ! ! ! ! ! " " " " " "  " [84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 80, 117, 118, 79, 39, 30, 81, 75, 74, 82, 57, 66, 16, 12, 2, 19, 20, 21, 27, 32, 29, 35, 36, 37, 34, 24, 73, 119, 23, 120, 40, 83, 44, 48, 42, 43, 49, 46, 62, 61, 47, 69, 68, 58, 56, 55, 59, 51, 72, 54, 45, 52, 64, 65, 63, 71, 67, 70, 77, 121, 78, 122, 31, 123, 4, 25, 9, 17, 1, 26, 22, 13, 7, 50, 38, 14, 15, 10, 3, 8, 60, 6, 5, 0, 18, 33, 11, 41, 28, 53, 124, 125, 126, 76, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255]      256" " t# e# /# o# a# s# r# i# p# c# n# w# .# h# l# m# -# d# u# 0# 1# 2$ g$ =$ :$ b$ f$ 3$ y$ 5$ &$ _$ 4$ v$ 9$ 6$ 7$ 8$ k$ %$ ?$ x% C% D% A% S% F% I% B% E% j% P% T% z% R% N% M% +% L% O% q% H& G& W& U& V& ,& Y& K& J& Z& X& Q& ;& )& (& ~& [& ]& $& !& '' *' @' ' ' ' ' ' ' ' ' '  '  '  '  (  ( ( ( ( ( ( ( ( ( ( ( ( ) ) ) ) ) ) )  ) ") #) <) >) \) ^) `) {) |) }) * * * * * * * * * * * * * + + + + + + + + + + + + + , , , , , , , , , , , , , , - - - - - - - - - - - - - . . . . . . . . . . . . . . / / / / / / / / / / / / / / 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 " " ŧ" " [b't', b'e', b'/', b'o', b'a', b's', b'r', b'i', b'p', b'c', b'n', b'w', b'.', b'h', b'l', b'm', b'-', b'd', b'u', b'0', b'1', b'2', b'g', b'=', b':', b'b', b'f', b'3', b'y', b'5', b'&', b'_', b'4', b'v', b'9', b'6', b'7', b'8', b'k', b'%', b'?', b'x', b'C', b'D', b'A', b'S', b'F', b'I', b'B', b'E', b'j', b'P', b'T', b'z', b'R', b'N', b'M', b'+', b'L', b'O', b'q', b'H', b'G', b'W', b'U', b'V', b',', b'Y', b'K', b'J', b'Z', b'X', b'Q', b';', b')', b'(', b'~', b'[', b']', b'$', b'!', b'\'', b'*', b'@', b'\x00', b'\x01', b'\x02', b'\x03', b'\x04', b'\x05', b'\x06', b'\x07', b'\x08', b'\t', b'\n', b'\x0b', b'\x0c', b'\r', b'\x0e', b'\x0f', b'\x10', b'\x11', b'\x12', b'\x13', b'\x14', b'\x15', b'\x16', b'\x17', b'\x18', b'\x19', b'\x1a', b'\x1b', b'\x1c', b'\x1d', b'\x1e', b'\x1f', b' ', b'\"', b'#', b'<', b'>', b'\\', b'^', b'`', b'{', b'|', b'}', b'\x7f', b'\x80', b'\x81', b'\x82', b'\x83', b'\x84', b'\x85', b'\x86', b'\x87', b'\x88', b'\x89', b'\x8a', b'\x8b', b'\x8c', b'\x8d', b'\x8e', b'\x8f', b'\x90', b'\x91', b'\x92', b'\x93', b'\x94', b'\x95', b'\x96', b'\x97', b'\x98', b'\x99', b'\x9a', b'\x9b', b'\x9c', b'\x9d', b'\x9e', b'\x9f', b'\xa0', b'\xa1', b'\xa2', b'\xa3', b'\xa4', b'\xa5', b'\xa6', b'\xa7', b'\xa8', b'\xa9', b'\xaa', b'\xab', b'\xac', b'\xad', b'\xae', b'\xaf', b'\xb0', b'\xb1', b'\xb2', b'\xb3', b'\xb4', b'\xb5', b'\xb6', b'\xb7', b'\xb8', b'\xb9', b'\xba', b'\xbb', b'\xbc', b'\xbd', b'\xbe', b'\xbf', b'\xc0', b'\xc1', b'\xc2', b'\xc3', b'\xc4', b'\xc5', b'\xc6', b'\xc7', b'\xc8', b'\xc9', b'\xca', b'\xcb', b'\xcc', b'\xcd', b'\xce', b'\xcf', b'\xd0', b'\xd1', b'\xd2', b'\xd3', b'\xd4', b'\xd5', b'\xd6', b'\xd7', b'\xd8', b'\xd9', b'\xda', b'\xdb', b'\xdc', b'\xdd', b'\xde', b'\xdf', b'\xe0', b'\xe1', b'\xe2', b'\xe3', b'\xe4', b'\xe5', b'\xe6', b'\xe7', b'\xe8', b'\xe9', b'\xea', b'\xeb', b'\xec', b'\xed', b'\xee', b'\xef', b'\xf0', b'\xf1', b'\xf2', b'\xf3', b'\xf4', b'\xf5', b'\xf6', b'\xf7', b'\xf8', b'\xf9', b'\xfa', b'\xfb', b'\xfc', b'\xfd', b'\xfe', b'\xff']" " " " " " 256 : rrŽ?r33Ž I ŽI55   5    5  Ž               'w      l            c              O          Ž l c uty                       F     FG G  G G ŽG G G G  $+ k; p;K PZ j 5y & d Xي ۲x 8(k ; CM L( 'x $<^ o^ lD5 e4 pP sӯ%  6   h W{ Tl׉ ] v Hx& KMN ގ    ) *}3 ' šL 6i 5w d UX _K %4 Am  • 1Ō ~ I0 ʈ F9 E# y] YB Z-) ~: }QH a[ j a} bˏ  un {A  Km@ H+R   t Tg Wy sE p9 5*  l8  oQS  !h %Q YN $ ')uB M d ;=w 8  ) : q f   e] 6 ba a  `r }\ ~7T tgG    Ht Z$  Y8O \,  E, F?  Tq  $ b  @iD 9W 0R  A *  5|z 6 ݛ<  * )h/ x; {p Kc Ȧ glE d/ W _ 3 K 6 P QpC RF "e  NR Mсv i( jn  ; vz uc  3 X r ~@ >.S =E u f ! "f *8  Z ٜ+ V >=  m N & ǥ1 3V" 0۱ 2| ,, /BG  ~TI ? o Z Ύ j| o   b! \2 _ vI " Cr @ d Y g:a 1 JZJ {. xl ^  0 +[  [` ?$  O 7 i s "҈ !z gs \ =HO ># uonv U > j4 i{   ' 7y ܋ MG Nj - #FL R_ QS}  [0, 4067132163, 3778769143, 324072436, 3348797215, 904991772, 648144872, 3570033899, 2329499855, 2024987596, 1809983544, 2575936315, 1296289744, 3207089363, 2893594407, 1578318884, 274646895, 3795141740, 4049975192, 51262619, 3619967088, 632279923, 922689671, 3298075524, 2592579488, 1760304291, 2075979607, 2312596564, 1562183871, 2943781820, 3156637768, 1313733451, 549293790, 3537243613, 3246849577, 871202090, 3878099393, 357341890, 102525238, 4101499445, 2858735121, 1477399826, 1264559846, 3107202533, 1845379342, 2677391885, 2361733625, 2125378298, 820201905, 3263744690, 3520608582, 598981189, 4151959214, 85089709, 373468761, 3827903834, 3124367742, 1213305469, 1526817161, 2842354314, 2107672161, 2412447074, 2627466902, 1861252501, 1098587580, 3004210879, 2688576843, 1378610760, 2262928035, 1955203488, 1742404180, 2511436119, 3416409459, 969524848, 714683780, 3639785095, 205050476, 4266873199, 3976438427, 526918040, 1361435347, 2739821008, 2954799652, 1114974503, 2529119692, 1691668175, 2005155131, 2247081528, 3690758684, 697762079, 986182379, 3366744552, 476452099, 3993867776, 4250756596, 255256311, 1640403810, 2477592673, 2164122517, 1922457750, 2791048317, 1412925310, 1197962378, 3037525897, 3944729517, 427051182, 170179418, 4165941337, 746937522, 3740196785, 3451792453, 1070968646, 1905808397, 2213795598, 2426610938, 1657317369, 3053634322, 1147748369, 1463399397, 2773627110, 4215344322, 153784257, 444234805, 3893493558, 1021025245, 3467647198, 3722505002, 797665321, 2197175160, 1889384571, 1674398607, 2443626636, 1164749927, 3070701412, 2757221520, 1446797203, 137323447, 4198817972, 3910406976, 461344835, 3484808360, 1037989803, 781091935, 3705997148, 2460548119, 1623424788, 1939049696, 2180517859, 1429367560, 2807687179, 3020495871, 1180866812, 410100952, 3927582683, 4182430767, 186734380, 3756733383, 763408580, 1053836080, 3434856499, 2722870694, 1344288421, 1131464017, 2971354706, 1708204729, 2545590714, 2229949006, 1988219213, 680717673, 3673779818, 3383336350, 1002577565, 4010310262, 493091189, 238226049, 4233660802, 2987750089, 1082061258, 1395524158, 2705686845, 1972364758, 2279892693, 2494862625, 1725896226, 952904198, 3399985413, 3656866545, 731699698, 4283874585, 222117402, 510512622, 3959836397, 3280807620, 837199303, 582374963, 3504198960, 68661723, 4135334616, 3844915500, 390545967, 1230274059, 3141532936, 2825850620, 1510247935, 2395924756, 2091215383, 1878366691, 2644384480, 3553878443, 565732008, 854102364, 3229815391, 340358836, 3861050807, 4117890627, 119113024, 1493875044, 2875275879, 3090270611, 1247431312, 2660249211, 1828433272, 2141937292, 2378227087, 3811616794, 291187481, 34330861, 4032846830, 615137029, 3603020806, 3314634738, 939183345, 1776939221, 2609017814, 2295496738, 2058945313, 2926798794, 1545135305, 1330124605, 3173225534, 4084100981, 17165430, 307568514, 3762199681, 888469610, 3332340585, 3587147933, 665062302, 2042050490, 2346497209, 2559330125, 1793573966, 3190661285, 1279665062, 1595330642, 2910671697] 2561 ' '   k p; P  5 &! d! Xي! ۲x! 8(k! ;! CM" L(" 'x" $<^" o^" lD5" e#4# pP# sӯ%#  6# # # h$ W{$ Tl׉$ ]$ v$ Hx&$ KMN% ގ %  % )% *}3% '% šL% 6i& 5w& d& UX& _K& %4& Am'  •' 1Ō' ~' I0' ʈ' F9' E#( y(]( YB( Z-)( ~:( }QH) a[) j) a}) bˏ) ) un) {A* * Km@* H+R* *  t* Tg+ Wy+ sE+ p9+ 5*+ + l8 + oQS, , !h, %Q, YN, $, ')uB- M- d- ;=w- 8- - )- :. q. f.  . e]. 6. ba/ a/ / `r/ }\/ ~7T/ tgG/  0 0 Ht0 Z$ 0 Y8O0 \,0 1 E,1 F?1  Tq1 1 $1 b1 2 @iD2 9W2 0R2  A2 * 2 5|z3 63 ݛ<3 3 *3 )h/3 x;3 {p4 Kc4 Ȧ4 glE4 d/4 W4 _8 38 K8 6 P9 QpC9 RF9 "e9 9 NR9 Mсv: i(: jn: : ;: vz: uc:  3; X; r; ~@; >.S; =E; u< f< !< "f< *8< < Z< ٜ+= V= >= = m= N= &= ǥ1> 3V"> 0>۱> 2|> ,,> /BG>  ~TI? ?? o? Z? Ύ? j|? o@ @ @ b!@ \2@ _@ vI@ "A CrA @A d YA g:aA 1A JZJB {.B xlB ^B B 0B +[B C [`C ?$C C OC 7C iD sD "҈D !zD gsD \D =HOD >#E uonEvE UE >E j4E i{F F  'F 7yF ܋F MGF NjF -G #FLG R_G QS}G'G' GG wG 0E'H 4H aNH (]H 2QiH EmzH H [I VQI !kI dI :<I I  yJ ?J ig,J oJ Y" J ]OqJ *bK  VK 8EK 92ѢK NsK K 6K S[L L  cL |L L u{)lL XM KlKM ނ1M "M 0DMG*M  M ͸=N TN #xN fAN ٷN qPN O N@O SO m" gO tO _sO (fO C)P #:P ;ZP LIP P yP ГQ (rQ  Q ~7Q Q s^Q RQ nR اR ??R 6ؖR AzR bR ˝qS R5FES %VS `d,S +?S T S nS 7T pT kT 5T YVXT .T fU U =]U JldNU ăzU \!iU LU V  4V x='V %V q>V ٧V {W DW ܴW 4tSW CW W ~*W P:X 'No)X bSX @X GtX /gX YY LY iY |Y [Y ,-qY Y 4Z ?M"Z H1Z'Z Z vlZ e[  FK[ z X[ [ ba[ ʆ[ `R$[ %I\ R\ ˫ \ 3\ A9f\ 6uu\  A] ؑ0R] X](] ;] sh] ] x ] ^ ;C^ ^ j^ .^ JZɭ^ =k_ Y_ PJ_ .W~_ Y`m_ _k1:` 0` #` H` ` ) ` b` 'xa P`a Ha %a C\a 4B a >b r-b Wb #tDb qpb 1cb z荻b  p/c Ȝc @jc c c HBc ?!d +&d ;5d,d [~d Jhd iұ{d zVOe \e<e ve  #e d30e !]^Je VYf mmf ~f Ef 2gbf υf W'g Jg g wg 6g |;g  U(g Th eh uh 49fh NRh 9|Ah i i *>@i ]i oi o-i _j hj _{j Ghj \j fwOj #5j T&w&k ͎k2k GKk 0k ,k ޴l }l cl uMl &l ~.Dl  8Wl cm }pm O m ײm LU-m ;>m n u,n (n _Ein n mn An $o'o' oo ~Ao  RoOo s.o ޞo d6;p p idtp >Q8p p l>wp q ߚqq q ZLq }pq q /?r r |r K=Kr rRr OCHs 1Ѳs Bs <ݢs U-s +ulss XBs &'<t Dt jiDt +t g;j t _t pu  0u }u u WT|u ܗzu ;3u aGv v 3v v v 4v ԉw F{w "8w yw pW@w w [w %* x Vx (xCx Ai7x ?(x LNxx 2Gy ـey $by  y @K-y $Yy y vz 䕳z 4z b,uZz [z o~z a{ x{  H.{ uċ{ SǷ{ -o{ ^{  =]| IY)| 7X| D vf| :7| Ö| Q*} } e} gH}  } 5'^} f} {!&~ `~ )Ni~ ~ ~ M~ ڍ R Ep v1 Q {^ ᮀ ls%  a!j GVˀ 9߀ JT 4ƭ ]] #0m P2 .bs"Ձ 8n  j!    MÛ c \" Cw' =f. N%H 0 aƒ YՃ 'A TZ * Iv 7 ̄ XY -  b -  Å ^ׅ X ʫ Ӯ[e < 4* nu͆  4 rf f )  ] hKć eׇ eP$ Wcj )" Z % $LM M(Έ 3Q @zһ > 2R  s ]ĉ r؉  i D &  cΊ УU 1 U ^! p 1nŋ ϐ"؋ f]ч m k kN | 9!ό q`V BL e- 7l Sō wٍ  8 _t ![R R|; , =ώ Em ;O H?6 < nŏ ؏sُ cJ  .> t |Q yHմΐ & K t o .? BƑ Apڑ   G ^i (G 3 :В | h K2W 50 F`8 8yǓ Q ړ /Ȯ \D "V q zx  #˒Ҕ w7 zC `G;   mT Oȕ ݴ@ܕ   +{ yj ֹD4 +Ֆ'Ֆ' ߖ E #g 9"b 1"{ KgΗ rE ʸ cD ^+ g@#I fĘ Rfؘ #P q2 ,D =d !4 VΙ 8F ΀F v*O O!-  d  Ě cxeؚ ZG [} (d IG e j ϛ % 3`   7Bh  x% BqƜ `ٜ A% mwa! $ T TCC FCZН & e$ a8 A>  7&Ǟ ,c\۞ EcE >& ķ |A' P l@џ bw iO' ' ]bn "@  ~Ƞ _ܠ _v f| ք n   Moҡ -禲 <]   8?  &ɢ Jݢ s. ˄D B bD [ͥ g ԣ )9 u  V[ < 'iˤ  ޤ  ϼ w Np 5 lK|ե ơ h U¡ z ' YƸ˦ eߦ (NJ 2W  5  y§ ,է :N @Ǔ Q PH ـ* hs̨  a3 #Q B c 3é 6ש D  ŋ }!z ?ɠR̪ c  @0 ) tR M« qK֫ ٪ ay X # *1ˬ `߬  xĻ ҁf[ ; Iխ I pj Ģ M \Ő e8̮ ݒ/߮ *6   ʼn .T ݅¯  wX֯ 5: T G F# A ~ḛ Rs  ӝ k7  %±  ֱ j ll 1Ƥ O  z]̲  ~ Cu o ץG ,%ó V׳ > $< ^  ؖ `Bٵ _ % |`m `t un% LѶ MB 'b ]' d ܮ@r @kǷ ۷ 5' /b  D& c; gAY :Ѹ u HA@ qVc" & S#. (fǹ ҡD۹ j L U D !f :#7 gҺ K" 4g hE FE z~ "ǻ Ygۻ n3G ֙  x We e % aҼ! G P1 0F  sd !Sǽ {a!J۽ d BF B(''  o8 X"pվ 3H E T ag Dv  gͿ =dv E eT !"% 3 yjU m a" 3  ' cgo ϰvW ;E oT' BjEJ Tr g:v  ^  " d3 W ڹ# jk S   Kd ϋ ޳ ƾ j a 2 v> o .ߨN v Ԋ (   pd 4jt Ll < Q i M! o a    Qћ jQ7 @ sG Zb   F 6 d' ?a6 ' g  s #b* Qb {o@Z } s db %Q @ ͵6X a'` j( 9 } @oE 6  '5 \Q @ as b , U \  od Ia   я hԞ Ļ 0  d j  t1 y ,A *ۣ ʛ ra  C 6o{ ߼3 n  f ڭ^ j O.   d S  \բn V   e& k @   ū aԓ  9n }`K s %;г  #ۑ k {?  e9 gq ˺I $  F`T l  n ހ Z  ` u MS( 9= O ^ m On| km 6| ´O n^ *(P 9h r  e ( tn9   , hm |" 0`Oj ^R I O? e^ mO |w   U k(  9 Y ^a `)  B n ޔ  c ۅ ;k   | eD   '4 !  y n `6 = ɿF eЧ~ ն +  c De[ k  Xу   [B  eJz y2 Qh    Mk< - 4< n- l  yg (h_ `[ pJ/ vky h .[ J <- j-  ] 2ee ` K0 0  '[ HN 9W R7 & ?c &E MȪ pt iDq   z= , ڱ >% U or vB   b;x L · [ 04 ( 1: l S _}g FM Cn (2 7㎵ .Z t 3 @{ YK k 8! ˄  \| 7͓ aq xAH s >A  ӂu  D / ~w gG( fM &d |P L z9 5 ډ ˱  yU`> z0 J bY  3  ԩm X}K A̤ p @ /J  6!9 "  Ge+ ^ v F 0R )9?v B ꙳ ַ 8   |(  A b qu {KA ɯ| >   dH  ! }8w dSG  43 +' 2L n  \} E{MZ  2S 4?g -T   C{ ZcK: [ Bv pB j@ , + 59 6 ] D ] v" rF 3K *?̀ . E eY | 1| ZLmā ؁ 5 0 m z9 c )ẑ BJ ߂   3d P u = ƒ $<փ L '& J SO {u{ Ë́ " r ;: T ?F U L/ą csׅ C  0= |   t`Ά mŏ Ky  IT  6] diƇ ڇk r S 8O4  xψ sZtL j1D  % ަ= m ʼn ى  lBr, u)B  E ; uϊ q W ĸ Mjx THc Nj 1 ڋ :]> #6 7  Rr~KNό  7j %E^ <.''  ,hˍ Yߍ Xu   Au Ž S-N֎ .& ä+  ( 8 J΃ a;͏ MS [ nX 6]L ^$ w?9Ð Qא f /J v =+ue^p rsj͑ $–w   | [= uXUĒ -]ؒ ^ lF j H 43  ~vsϓ &Ru ~'p  s ?  Ŕ gΓnٔ y U  q C ʼ lΕ Z  H- . +? (WƖ AJږ Qm"  ˚ 4 zz + ^З "r W cT ;Q Rg )4Ƙ ֙\ژ  q ?z 0y hf|A J)љ   L6 ^  8 C +ǚ a ۚ UM   G, Yx u ^! ћ "e Μ' $ DŽG / WȜ ܜ A  m  2 N4 Z y  \Uaҝ    ı E! " '| $ɞ a~ݞ R '  9 c W~ xT  Qӟ R 2  ڜE j- Fz0ɠ +jyXݠ s| 3 n <"m dWh% {kMԡ %ˎP 8  } C o@ˢ 7EkߢF v6 v o .C R5iԣ6 ­3  0 1 K֤ hɤ Dtݤ  ' %O P Y|  ԥ @R : I5 6 3 0pʦ HmަPd ӽ = p \ )Vԧ B> ˵# K [  wnT˨ '[m<ߨ .h k >  !© fNjI֩ C t@r ,E F mO cͪ o 5:  ُ F% P_ |7ë _9*֫ :B ϕ? <   Mͬ y  1d   h TD (í ߁{׭  p 6b 1a iodf Cgή {] "5 W #{ O bLů :I(د J@ 3  ӄb k  Obΰ *ca rd :g `w [ .,ű 8Dٱ OY yL1 !I J p. ]\Fϲ ) ܖ D9 : ?[ <3Ƴ ƍ`ڳ  V  H d д O=}''  '} ̷Q m M)V 0' '  H> aڑ )  3 {* R^3 ` s $ML (U ܡ 0f 悒 - < ߓ u E5 I l Qī _ UF ]k Hax F9 )  am { 3u y& R  ' )  + 4 3 ?I w- )dR aZ H K  Rx {:a 3 a )b"k nr H RvA  3B {z|X Fo' Q  J> ń R  ^1  9 % S< 5m   -3 !  ˱i R {  3p ) ~ a@C HZ Ѯ Rɤ |P 3pXI {f ahz )8  Hdc X  +T u LK6 @/ ߖ 3; { RD z"  H $ a )е 즃 :w 67n   .i] W  "D N [ WO ŁqW O /d } C {3 < Rs Hb( k\ )g a1 h VR K  ǿ ǧx  6 a | 4!% - U O5 4 .E- f9{ 4c |@]' UL>  T  O f= .X dk . ¾ hr ߵ pA |NX p U"L A 4 |.U fఒ .6f :! O  2   ܣ *  R l3 t9 gJ k   s  ة*   C U9u |l 4O ._ fW O[Y gF f؎e  "= Y· =oF9 /X  y H 03T#ˆ .B{ֈ  ڇ l r[Ǎ  F N=͉ Լ . PUe 1]X bJ  |ŊK֊ @D0{ ?f p ^&#  2 pwdX͋nrދ $ Ry_  { # LI Ռ ~ `fF  \ = e̍ Bh = 7Y )4O Oe bÎ 4׎ A"  :tF ^{ 9% 'ߕ #Ώ +X P Ѯ c +{Đ 5#א   ד mX  `̑ %6= ; e rv   [ |MFÒ ג [o#  Ȱ E{ ya̓ g X URe   K~D=Ĕ ?Fؔ wi ip  ) G= ke 8}=ϕ YC+ P eF {M 6F IRƖ )#ٖ ӧ{ W 'k\ uX ݜϗ $kz I _ : " rY e$Ƙ 2ژd *<   4zd ϙ  t G 8 <  ZB" F! X Tzd//Ǟ Ty۞ ߮o z9Y g- T{" Jmz ;ҟ v@i ͓Y hV  ZdȠ D <ܠ v x ݂G x f Gӡ F  _P $ 1}d + *=ʢ /Qk<ޢ5 N  Y ?@" ;ӣ  !z s Y ɤ -}ݤ " z 3ޱ  )G b?ӥ i # Dd R< =l Y˦ ߦ ąa qz ]  C "ԧ qM Ԕ n  o[G  < Sv˨ M`ߨ `6d c" Ʃt SbG }(4© O֩ A< _&d ]Y m9 BYָ̪ s L O7z Q" ' ' ǫ q۫ s+ n~ 2V 'n } T\aҬ e>  O; 1 ~ @ *W! Pmȭ Y.ܭ 9_F i] J $v   Ӯ Nx   = خ d/f Aʯ Mޯ C걧 0 0s  z! P,Ӱ . `_ 4H> Oz G1 &@Qʱ ݱ n m< qa -A 9q jղ JC~ DZ z0q ^  Z ]ͳ ' .l   wJ U ;aô ״  Pg  7 # Us t͵ &X  % rF ( ϙö ׶ XH  +c ԏ #  Mη ͺ5 <>>. OO1 P@  !x¸ Pָ .S hb_ [ 1q  B5~>͹ i מnC e ah  F_ź `ٺ 5t aː <  R ӥ" Kdϻ k 8O  2 lYߥ 7ż Ўټ D/n  \*a) v ɁqTν { ~ "!!9 P Q. O_ľ >oؾ O 1D v}@ ] k,p ٟRп h#[ L4B 3& ?M Z<  fccK  l`   Q| A  s6 2? ûͺ L- "‘ qճ % ~{ V P  ) |G=  @ ( uk [ x||\    sw  Nc  _ l! ,  B u3g ǀM wr  M(  @U j. ْ~ 38  @y  n % KE g 8c W^ l $Vu p |   s d# Z]]e , )RN 3# oB3 }3 M < -/ ^f  y  : TR y   m  S?  _B t1 ƍi DBBr 3 7MY ,< p]$ c, R # '| I I s :Ib nc  l {4' '  0q1 `b P|S P  $ ,U qb A  ! K Sz /F) 7 ) # X( sp{ CJ ӈ \   | bK R:  2s _R c o0# &S2d" FP va  4 Hw  Wg1 g@ 7  7y H  Kd* 5hz+   UI ex 8  ^ D/ D tki $ Ê ` ;QG< ԓM3 L`d |U ,D 57 0`  옃 L =  c ]& mW / 3s OM | _} olL ?m . I <8 @ ϔ .o  N ~~ ?+6 Z T Ce jV Zg  x4:f 3 TB (   + {u K{ WQ  ,  +N yO Iܬ~ >- )tO X k  $ ߿ 8  hw\ X-ȏx [ 5 'f W N ? h ȼܚ X  hD= 88jn _ ,G ]v % k )G  I y;y g  밄 d KH {$ +Cw 42F ^ to g<   :›  K Z7! jP p l    ~ > N 9\ .\Hm ϧu sD  &  ?#Ɂ o_[ _* 4 |E ׀ Ԧ m' ],  PE =at Vl '] ׵ ? / , |r LS Ԡ t   { .h $$_Y tX  D; w#  hA  p e'L U=  5[޵ x  # R (q 7v@ g WT" : {  AX 0i ve F+ W &  ˮ Y l( 2@}Z  k R8 b<     o;s ӻJB C sCn #? 덇 ȓ  `p  !TC L%r A0! q  ˀ9 j cc[ PO6 `G 0կ 3' '  e80 pa HvQ H ٚ ^ ;> ٵ}   v  MT5@ (lp $! CC &%3 mb UaR _ č  x) j  P 5 I"C kqs 9" T :. 6 LJg )rXW f w ث¤ Ҁ _S :  % nF Vvʁ '݁ d&m'9 5 Wd joOT Qqт 4 է  D y Ƀ 2݃ s E Ku B$ ';z  u\  iM<҄ m =*]   R䰮 7bʅ !ޅ   zW A!iL $|† Q-Ն i OhK *P? n  =^ ۉˇ ߇  tu 6  \È 9@׈ <~O g L. t Or  w:ˉ @?k߉ %[ : { ޞ LÊ S׊ 6ݹ  y GJ #z  k+΋ hS1 Re  j9 "h fX ]-Ì 8׌ É [  uʺ ڗ nύ PI >y Nv( +N&  }j(Î Қy׎ I   3" F{T #C _śϏ g  /a n UX 0_h )9Ɛ  ِ [ >}+  z J  .5ϑ fC `^ BҘ z H2v - ǒ [ے sHk >:   Ж D. T2ϓ 1O  1 o  Az y Geǔ "]9۔ O - ӄ^ qn ? |ҕ ́ S- %| rL I, ,Ȗ \mܖ d x a@. X 0 ]ԗ fm Z< ?   q6$ @uɘ גEݘ ~ F~ J /6چ * Kՙ Z= bb YT <d u5ʚ Wݚ 2!' Wv ʅF c [i  ԛ l+ͅ 7 \ DG* ! W̜ g Цb6   " Xns =Cԝ D c|P 4&   K .(e̞ ` X R -b [3p Ѹԟ ! yp ~@ EY  aG )1ˠ ߠ   m5r } E Qá :aס VL03''  FUT   Т #Uv e # G ƣ^أ W ;d }1 V U(RΤ / S& !  S 0pׯĥ v%إ  ͭ  QMA n; (<Φ75 b2P Q V &X_  ` XXç CѠק  {Y .  x >[ ͨ J BZ E  j l **  ?k O8?̻ \1  6 2, t+ 8"= m%iļ ۱ؼ ڔ Wh N< ,l y8 9Ͻ  \9 Zm Х  gkƾ !>ھ  o  ; H  : Dnп  ׃ c %K+ ! @& =/* h(~ =2| {5( Y<  ; ) } Xź / M  6- py Sn  ; x , h . ._z   ){ |/   K EFs '   ep& 0wr  ~ fy c Td mp ]j$ ~" 8w % ݛq ! Vu  @ Xt _  u6V 3cQ K L NRE" Bv +ۺ m qw $#''  g   כ Y xT D3 sC2 U ^ tК     f 6d7 4 5 dQ ™ߘ L0 cW -V ,hK1 /oؙ .V  Ꜫ e l  m1 n6 o˞a NR T5 ǝ II wN vB uES4 tS =`  DŽ :  Z* [ XЖbY- \6 UQ RA Ϟ AYȟ @F CP B^[7 &c ! ܌ ) (y +X *d? l  ݑk ޖ= k 2 3`: 0gj 1'  c> Y ~  q  l< [ ꊦh w( p 5 {2  / |i Z k=  v E"^ Dt9 G F%i - ] Z0  m ^Ql _7  \ ]V* n . )s8 _ s|: r9] q>a p F % n A8  h? iJo jM" k 5 f \ 2{; * WM P  V(Ա WZ T~ U/G @ $ #] Ӱ M[ L OL N\+ LN  )  K `R a3ܲ b4O c} ?| H ۳ 8U { z@ yG ( xO f Λ ͜, aK :x ;W 8ķ 9J M ö P y !J  j- #m "   } zH /  _  { B ̴ ˵ E  z X q. I  v D z r Cg #& ~;A }<> | 7 9 ͪ@ 0$' d` eHs fO} g r _ Xo q I B H+% Kڸ J'6 1 , +,$ ֢C RSp Sh P QTu t uw r j  .  3   G F 4!  ) ym    p  ~u n ѓw Ҕb i %쨋 $& 'D &;# <" E !  > ?be  E1 H=C (P  %ɢ 5w̅ 9  d j8 !g  Æ , ,+ֆ 4   9$ Ǧ( Gm `U̇ JF   a R  _rĈ `B.׈ O m/ " =  u  ͉ x } xqo y| ut my[Ŋ uي `Ս ؁H ; _6 Vl R[`ϋ J   Gh3 d 9<[ 1WyŌ 4Qjٌ \ Ґ_M ,S  !^ύ  ~J sF   6 N%Ď B؎    ] Q K/ F͏ &Y +U< #L` @ . ШsŐ dHِ 6iDT  G ; Ϗ Eƒ  {ϑ Hw Pc9 n ] s* jvŒ bfْ  oe wLn AbB z!Q ,ѓ z 7 w$  oŔ wٔ bz ]L   P _ 5Е H8x Xk EU Ş ;! 72Ɩ 6;ږ .2 ? #_3 R? &Z *З һ I  " .n p} }ڏ       ǘǘǘǘ ǘ ǘ ǘ ǘ ǘǘǘǘǘǘǘǘ   ' G' o' Ֆ' ' ' ' ' ' ' ' ' ' ' ' '[[0, 4067132163, 3778769143, 324072436, 3348797215, 904991772, 648144872, 3570033899, 2329499855, 2024987596, 1809983544, 2575936315, 1296289744, 3207089363, 2893594407, 1578318884, 274646895, 3795141740, 4049975192, 51262619, 3619967088, 632279923, 922689671, 3298075524, 2592579488, 1760304291, 2075979607, 2312596564, 1562183871, 2943781820, 3156637768, 1313733451, 549293790, 3537243613, 3246849577, 871202090, 3878099393, 357341890, 102525238, 4101499445, 2858735121, 1477399826, 1264559846, 3107202533, 1845379342, 2677391885, 2361733625, 2125378298, 820201905, 3263744690, 3520608582, 598981189, 4151959214, 85089709, 373468761, 3827903834, 3124367742, 1213305469, 1526817161, 2842354314, 2107672161, 2412447074, 2627466902, 1861252501, 1098587580, 3004210879, 2688576843, 1378610760, 2262928035, 1955203488, 1742404180, 2511436119, 3416409459, 969524848, 714683780, 3639785095, 205050476, 4266873199, 3976438427, 526918040, 1361435347, 2739821008, 2954799652, 1114974503, 2529119692, 1691668175, 2005155131, 2247081528, 3690758684, 697762079, 986182379, 3366744552, 476452099, 3993867776, 4250756596, 255256311, 1640403810, 2477592673, 2164122517, 1922457750, 2791048317, 1412925310, 1197962378, 3037525897, 3944729517, 427051182, 170179418, 4165941337, 746937522, 3740196785, 3451792453, 1070968646, 1905808397, 2213795598, 2426610938, 1657317369, 3053634322, 1147748369, 1463399397, 2773627110, 4215344322, 153784257, 444234805, 3893493558, 1021025245, 3467647198, 3722505002, 797665321, 2197175160, 1889384571, 1674398607, 2443626636, 1164749927, 3070701412, 2757221520, 1446797203, 137323447, 4198817972, 3910406976, 461344835, 3484808360, 1037989803, 781091935, 3705997148, 2460548119, 1623424788, 1939049696, 2180517859, 1429367560, 2807687179, 3020495871, 1180866812, 410100952, 3927582683, 4182430767, 186734380, 3756733383, 763408580, 1053836080, 3434856499, 2722870694, 1344288421, 1131464017, 2971354706, 1708204729, 2545590714, 2229949006, 1988219213, 680717673, 3673779818, 3383336350, 1002577565, 4010310262, 493091189, 238226049, 4233660802, 2987750089, 1082061258, 1395524158, 2705686845, 1972364758, 2279892693, 2494862625, 1725896226, 952904198, 3399985413, 3656866545, 731699698, 4283874585, 222117402, 510512622, 3959836397, 3280807620, 837199303, 582374963, 3504198960, 68661723, 4135334616, 3844915500, 390545967, 1230274059, 3141532936, 2825850620, 1510247935, 2395924756, 2091215383, 1878366691, 2644384480, 3553878443, 565732008, 854102364, 3229815391, 340358836, 3861050807, 4117890627, 119113024, 1493875044, 2875275879, 3090270611, 1247431312, 2660249211, 1828433272, 2141937292, 2378227087, 3811616794, 291187481, 34330861, 4032846830, 615137029, 3603020806, 3314634738, 939183345, 1776939221, 2609017814, 2295496738, 2058945313, 2926798794, 1545135305, 1330124605, 3173225534, 4084100981, 17165430, 307568514, 3762199681, 888469610, 3332340585, 3587147933, 665062302, 2042050490, 2346497209, 2559330125, 1793573966, 3190661285, 1279665062, 1595330642, 2910671697], [0, 329422967, 658845934, 887597209, 1317691868, 1562966443, 1775194418, 2054015301, 2635383736, 2394315727, 3125932886, 2851302177, 3550388836, 3225172499, 4108030602, 3883469565, 1069937025, 744974838, 411091311, 186800408, 1901039709, 1659701290, 1443537075, 1168652484, 2731618873, 2977147470, 2241069783, 2520160928, 3965408229, 4294560658, 3407766283, 3636263804, 2139874050, 1814657909, 1489949676, 1265388443, 822182622, 581114537, 373600816, 98970183, 3802079418, 4047354061, 3319402580, 3598223395, 2887074150, 3216496913, 2337304968, 2566056447, 1078858371, 1408010996, 1728782957, 1957280282, 247755615, 493284136, 696337329, 975428550, 3713716539, 3472378188, 4196393429, 3921508770, 2479927527, 2154965136, 3029696521, 2805405822, 4279748100, 3971309171, 3629315818, 3421531805, 2979899352, 2722054063, 2530776886, 2239369025, 1644365244, 1906417099, 1162229074, 1457827109, 747201632, 1059847191, 197940366, 409914617, 3235002245, 3547377650, 3885434731, 4097154844, 2388153945, 2650459694, 2837276343, 3133144768, 1573319741, 1315204170, 2055455955, 1763794084, 323786209, 15601046, 873047311, 665533816, 2157716742, 2470362481, 2816021992, 3027996063, 3457565914, 3719617709, 3914560564, 4210158659, 495511230, 237665993, 986568272, 695160359, 1392674658, 1084235541, 1950857100, 1743073275, 3210335367, 2902150384, 2552030313, 2344516638, 4057183579, 3799067948, 3600188853, 3308527042, 575477567, 837783368, 84420561, 380288934, 1825011427, 2137386644, 1266828813, 1478549114, 4223924985, 3898696334, 3699821079, 3475264096, 3041499941, 2800419666, 2450303947, 2175677372, 1725380929, 1970643254, 1100089775, 1378914776, 677206173, 1006616810, 253257843, 482013188, 3288730488, 3617886991, 3812834198, 4041319393, 2324458148, 2569990867, 2915654218, 3194733117, 1494403264, 1253068983, 2119694382, 1844797529, 395880732, 70922603, 819829234, 595526021, 2219317755, 2548728204, 2735548693, 2964304226, 3401742375, 3647004752, 3985066185, 4263891134, 425515587, 184435252, 1041885869, 767259354, 1473690527, 1148462056, 1888717681, 1664160518, 3146639482, 2821681165, 2630408340, 2406105315, 4110911910, 3869577681, 3527588168, 3252691263, 647572418, 893105077, 31202092, 310281051, 1746094622, 2075251305, 1331067632, 1559552647, 81018109, 393651338, 596708371, 808686692, 1247698209, 1509737814, 1830514127, 2126116280, 2579562309, 2321704754, 3196440491, 2905036764, 3611991705, 3303540462, 4027559543, 3819779584, 991022460, 682841355, 475331986, 267806181, 1973136544, 1715025111, 1390320718, 1098646585, 2785349316, 3047659187, 2168471082, 2464327261, 3901714200, 4214093679, 3486146550, 3697854337, 2069880831, 1761429384, 1545269009, 1337489254, 903200291, 645342804, 311463629, 20059834, 3863682119, 4125721648, 3238931625, 3534533854, 2831252891, 3143886316, 2407812469, 2619790594, 1150955134, 1463334409, 1675566736, 1887274727, 168841122, 431151061, 760577868, 1056433979, 3650022854, 3391911345, 4274773288, 3983099231, 2533657626, 2225476717, 2957098228, 2749572227], [0, 2772537982, 1332695565, 3928932467, 2665391130, 1000289892, 3518101015, 1961911401, 944848581, 2635115707, 2000579784, 3531603638, 2794429151, 63834273, 3923822802, 1285642924, 1889697162, 3588485108, 1070411655, 2592914937, 4001159568, 1262308334, 2702412701, 72489443, 1223902031, 3987919153, 127668546, 2732426044, 3593332565, 1936487723, 2571285848, 1006839590, 3779394324, 1141205354, 2922096921, 191511399, 2140823310, 3671838064, 821366019, 2511642493, 3642082769, 2085902255, 2524616668, 859506082, 1204511179, 3800757173, 144978886, 2917507512, 2447804062, 883365088, 3733574803, 2076722925, 255337092, 2860101882, 1079472265, 3843482359, 2847389787, 217459237, 3872975446, 1134131240, 929635393, 2452131391, 2013679180, 3712474162, 3345318105, 1646531239, 2282410708, 759906474, 1505436867, 4244289213, 383022798, 3012945072, 4281646620, 1517628514, 2958814225, 354057839, 1642732038, 3299575928, 780486667, 2344934005, 3083337043, 310800173, 4171804510, 1575566624, 689527113, 2354629431, 1719012164, 3275200826, 2409022358, 718754280, 3237581211, 1706558437, 289957772, 3020551666, 1579627905, 4217808895, 639728589, 2204166579, 1766730176, 3423583166, 3103776727, 499010985, 4153445850, 1389436836, 510674184, 3140605814, 1360992005, 4099835259, 2158944530, 636449644, 3485578015, 1786782049, 1451427399, 4089615417, 434918474, 3165505076, 3361579613, 1830563875, 2268262480, 577987118, 1859270786, 3415452412, 566061711, 2231171313, 4027358360, 1431113446, 3210989205, 438459627, 2334619459, 778495293, 3293062478, 1628026672, 368694105, 2964865319, 1519812948, 4292285226, 3010873734, 372759544, 4229503883, 1498974709, 766045596, 2297004002, 1657257873, 3347459567, 4219800265, 1589942455, 3035257028, 296471226, 1700507347, 3222944941, 708115678, 2406837920, 3285464076, 1721083506, 2361091585, 704312447, 1560973334, 4165665384, 308658715, 3072610405, 1784908887, 3475119657, 621600346, 2152549412, 4106037325, 1375517235, 3151133248, 513009726, 1379054226, 4151517420, 492691615, 3088872161, 3438024328, 1772979446, 2206418053, 650303227, 448917981, 3212862371, 1437508560, 4042207662, 2216646087, 559859641, 3413116874, 1848743348, 579915544, 2278645094, 1845468437, 3367898987, 3159255810, 420477308, 4079040783, 1449175921, 1279457178, 3909314020, 53323159, 2792110057, 3533460352, 2011021822, 2649948557, 951227379, 1947453791, 3511835425, 998021970, 2654800172, 3939331397, 1334640443, 2778873672, 14921014, 1021348368, 2577471598, 1938806813, 3603843683, 2721984010, 125811828, 3981540359, 1209069177, 78755029, 2716870315, 1272899288, 4003427494, 2590970063, 1060012721, 3573564098, 1883361468, 2902854798, 138911472, 3798556291, 1193856253, 869836948, 2526624490, 2092432025, 3656804583, 2505519691, 806789173, 3661127750, 2138698296, 193566289, 2932343855, 1155974236, 3785840162, 3718541572, 2028331898, 2462786313, 931836279, 1132123422, 3862644576, 202737427, 2840860013, 3858059201, 1085595071, 2862226892, 266047410, 2066475995, 3731519909, 876919254, 2433035176], [0, 3712330424, 3211207553, 1646430521, 2065838579, 2791807819, 3292861042, 419477706, 4131677158, 721537374, 1227047015, 2489772767, 2372293141, 1344534701, 838955412, 4014267180, 3915690301, 874584965, 1443074748, 2336634884, 2454094030, 1325607542, 757179215, 4033087991, 522244827, 3261429859, 2689069402, 2097306594, 1677910824, 3108456848, 3680878761, 102787601, 3609531531, 174112307, 1749169930, 3037175218, 2886149496, 1900187584, 325060345, 3458575425, 560035693, 4230274517, 2651215084, 1128529492, 1514358430, 2265377830, 3844367647, 945934247, 1044489654, 3808694030, 2166785591, 1550003343, 1164153925, 2552643325, 4194613188, 658578812, 3355821648, 356543720, 2002970065, 2854702953, 3005740963, 1851940123, 205575202, 3506798234, 2879807463, 1994650975, 348224614, 3380926174, 3498339860, 230802604, 1877167509, 2997282605, 1575107585, 2158466745, 3800375168, 1069593912, 650120690, 4219840330, 2577870451, 1155695819, 1120071386, 2676442210, 4255501659, 551577571, 971038505, 3836048785, 2257058984, 1539462672, 3028716860, 1774397316, 199339709, 3601073157, 3483679951, 316741239, 1891868494, 2911254006, 2088979308, 2714165716, 3286526189, 513917525, 128023199, 3672428583, 3100006686, 1703146406, 2328307850, 1468170802, 899681035, 3907363251, 4058323321, 748729281, 1317157624, 2479329344, 2515008081, 1218597097, 713087440, 4156912488, 4005940130, 864051482, 1369630755, 2363966107, 1671666103, 3202757391, 3703880246, 25235598, 411150404, 3317957372, 2816904133, 2057511293, 1386268991, 2414175111, 3989301950, 813842438, 696449228, 4106703476, 2531646285, 1268806133, 2766449369, 2040594529, 461605208, 3334874080, 3754335018, 42152338, 1621211307, 3185840659, 3150215170, 1719784122, 77814659, 3655790907, 3236317681, 497279817, 2139187824, 2730803400, 1300241380, 2428875100, 4075239525, 799183581, 916597271, 3957817519, 2311391638, 1417716526, 2240142772, 1489008396, 987954741, 3886503053, 4272417863, 602031871, 1103155142, 2625987966, 1942077010, 2927891690, 3433471443, 300103531, 149131169, 3584435481, 3078925344, 1791035032, 1826712713, 2980365873, 3548794632, 247719344, 398679418, 3397842882, 2829352699, 1977734211, 2594508655, 1205904855, 633482478, 4169631318, 3783736988, 1019384868, 1591745821, 2208675749, 4177958616, 608386144, 1180808537, 2602835937, 2183440171, 1600195987, 1027835050, 3758501394, 256046398, 3523698566, 2955269823, 1835039751, 1952498893, 2837802613, 3406292812, 373444084, 274868197, 3441921373, 2936341604, 1916841692, 1799362070, 3053829294, 3559339415, 157458223, 3861267459, 996404923, 1497458562, 2214907194, 2634315248, 1078058824, 576935537, 4280745161, 774079059, 4083558635, 2437194194, 1275136874, 1426174880, 2286164248, 3932590113, 925055641, 3630686645, 86133517, 1728102964, 3125110924, 2739261510, 2113960702, 472052679, 3244775807, 3343332206, 436378070, 2015367407, 2774907479, 3160736413, 1629530149, 50471196, 3729230756, 822300808, 3964074544, 2388947721, 1394727345, 1243701627, 2539965379, 4115022586, 671344706], [0, 940666796, 1881333592, 1211347188, 3762667184, 3629437212, 2422694376, 2826309188, 3311864721, 4252394557, 3041252553, 2371140453, 623031585, 489937549, 1426090617, 1829832149, 2401395155, 3073576575, 4278238859, 3339833639, 1869078371, 1467396303, 524615739, 659845015, 1246063170, 1918109166, 979875098, 41343670, 2852181234, 2450635614, 3659664298, 3795018758, 464041303, 599382779, 1804233231, 1402668451, 4226616295, 3288097867, 2345653439, 3017718547, 3738156742, 3873362282, 2934792606, 2533101106, 1049231478, 110850010, 1319690030, 1991880834, 2492126340, 2895887144, 3836218332, 3703137392, 1959750196, 1289618840, 82687340, 1023204032, 1374543637, 1778167993, 567214157, 434008033, 2980602277, 2310606345, 3247095549, 4187738449, 928082606, 255853826, 1198765558, 2137184858, 3608466462, 4010130354, 2805336902, 2670159082, 4063650111, 3391557267, 2182397543, 3120943563, 309583759, 711110691, 1649475799, 1514172283, 3094547325, 2153931985, 3360805925, 4030774153, 1479980493, 1613224545, 672426645, 268764473, 2098462956, 1157984064, 221700020, 891793432, 2639380060, 2772488688, 3983761668, 3579973288, 754573305, 350793813, 1557856417, 1690988301, 3434897737, 4104982245, 3164519953, 2224017853, 3919500392, 3515857860, 2579237680, 2712495260, 165374680, 835323252, 2046408064, 1105779244, 2749087274, 2613760390, 3556335986, 3957853918, 1134428314, 2072997686, 868016066, 195932270, 1723643323, 1588451863, 379480803, 781124943, 2264468235, 3202901159, 4141601875, 3469392895, 1856165212, 1454619376, 511707652, 647062952, 2397531116, 3069576256, 4274369716, 3335838488, 2881871565, 2480189793, 3689349525, 3824578105, 1266704509, 1938886609, 1000521509, 62115977, 3783308431, 3650214691, 2443340759, 2847081595, 29690431, 970220947, 1911018855, 1240906443, 619167518, 485937330, 1422221382, 1825837034, 3298951598, 4239617538, 3028344566, 2358358362, 1963614219, 1293619111, 86556499, 1027199231, 2505039547, 2908664087, 3849126371, 3715919439, 2959960986, 2289828918, 3226449090, 4166966126, 1344853290, 1748613766, 537528946, 404448734, 4196925912, 3258543732, 2315968128, 2988159276, 443400040, 578605252, 1783586864, 1381896092, 1062144585, 123626981, 1332598033, 2004662973, 3742020857, 3877362517, 2938661793, 2537096205, 1509146610, 1642254430, 701587626, 297799430, 3115712834, 2175233774, 3381976602, 4052070838, 2626991203, 2760235983, 3971377979, 3567715479, 2094074579, 1153459583, 217306507, 887274023, 3604078113, 4005605773, 2800943481, 2665639637, 915693713, 243601213, 1186381769, 2124927077, 330749360, 732412444, 1670646504, 1535468868, 4092816128, 3420587180, 2211558488, 3149978612, 1113262757, 2051695881, 846845437, 174635601, 2719921173, 2584730553, 3527174989, 3928818913, 2268856628, 3207425688, 4145995372, 3473912256, 1736032132, 1600704552, 391864540, 793382768, 3447286646, 4117234906, 3176903726, 2236275586, 758961606, 355318378, 1562249886, 1695507762, 136208615, 806293323, 2017247167, 1076744211, 3898334807, 3494556155, 2558066959, 2691198627], [0, 4012927769, 3683426499, 884788186, 3002414967, 1573215342, 1769576372, 2252995757, 1611012127, 2402710278, 3146430684, 1421530053, 3539152744, 1036207217, 159354795, 3863995570, 3222024254, 792484647, 461410557, 4105239524, 1928922953, 2647223376, 2843060106, 1178979475, 2685020193, 1329218360, 2072414434, 2495013883, 318709590, 4258231375, 3379806101, 641979532, 2247366285, 1791262100, 1584969294, 2974342487, 922821114, 3627109091, 3968696633, 62777888, 3857845906, 180512139, 1048489553, 3511600456, 1460091365, 3090633468, 2357958950, 1673261631, 1173890739, 2865253802, 2658436720, 1900342633, 4144828868, 406682333, 746696967, 3283212830, 637419180, 3402519989, 4268924527, 289600886, 2534083035, 2017157826, 1283959064, 2746728961, 235166699, 3778294002, 3582524200, 985174065, 3169938588, 1405159301, 1736297567, 2286790470, 1845642228, 2167548141, 3046040375, 1522436142, 3707204739, 868687770, 125555776, 3897278297, 3456658389, 557318348, 361024278, 4206141455, 2096979106, 2479699899, 2809265249, 1212258168, 2920182730, 1094588627, 1971507977, 2595403792, 486229181, 4090179492, 3346523262, 675778407, 2347781478, 1690314367, 1350364581, 3209463484, 956660241, 3593801992, 3800685266, 230273483, 3958789497, 80100960, 813364666, 3746209443, 1493393934, 3056797975, 2190459597, 1841277396, 1274838360, 2764838465, 2423315867, 2134947458, 4178135599, 372842806, 579201772, 3451224565, 737830215, 3301576286, 4034315652, 524725917, 2567918128, 1983854889, 1115943667, 2914228714, 470333398, 4080590031, 3347322645, 682916876, 2935849121, 1104014264, 1970348130, 2587970427, 2081337289, 2470364368, 2810318602, 1219650579, 3472595134, 567014311, 360134781, 4198978404, 3691284456, 859106545, 126363435, 3904392242, 1861333151, 2176965510, 3044872284, 1515027269, 3154288631, 1395848430, 1737375540, 2294174765, 251111552, 3787965337, 3581610051, 978019162, 2583470427, 1993132610, 1114636696, 2906679937, 722048556, 3292134709, 4035262191, 531979766, 4193958212, 382390877, 578165127, 3443946142, 1259310643, 2755650858, 2424516336, 2142455273, 1508938085, 3066100348, 2189177254, 1833720511, 3943015954, 70634763, 814286545, 3753471432, 972458362, 3603358307, 3799656889, 222970528, 2332278285, 1681118484, 1351556814, 3216995799, 302836797, 4248602404, 3380628734, 649078759, 2700729162, 1338617939, 2071296905, 2487554192, 1913320482, 2637864763, 2844153057, 1186349048, 3237987157, 802138188, 460546966, 4098033807, 3523271683, 1026602778, 160201920, 3871086553, 1626729332, 2412085357, 3145288631, 1414078638, 2986787868, 1563864837, 1770677471, 2260340678, 15987563, 4022573170, 3682554792, 877607089, 2549676720, 2026410409, 1282693747, 2739155306, 621661639, 3393038046, 4269894916, 296814109, 4160676527, 416188854, 745685612, 3275893109, 1158403544, 2856042177, 2659677467, 1907826178, 1475660430, 3099894167, 2356701773, 1665663316, 3842113017, 171022048, 1049451834, 3518838307, 938660497, 3636640136, 3967709778, 55449931, 2231887334, 1782025983, 1586185509, 2981834300], [0, 1745038536, 3490077072, 3087365464, 2782971345, 3454265625, 1978047553, 501592201, 1311636819, 640602523, 2653660355, 4129851403, 3956095106, 2211320906, 1003184402, 1405636058, 2623273638, 4099462766, 1281205046, 610177022, 968572791, 1371018175, 3921503975, 2176731695, 3530950645, 3128240957, 40918629, 1785950893, 2006368804, 529919724, 2811272116, 3482564476, 1029407677, 1431875445, 3982350893, 2237593317, 2562410092, 4038617764, 1220354044, 549335860, 1937145582, 460673574, 2742036350, 3413314486, 3600202559, 3197474807, 110158511, 1855180391, 2701162779, 3372438995, 1896226955, 419761219, 81837258, 1826852866, 3571901786, 3169175954, 4012737608, 2267981952, 1059839448, 1462300944, 1254965657, 583953745, 2597001225, 4073206977, 2058815354, 313797554, 2863750890, 3266474530, 3747070635, 3075796579, 257006395, 1733474291, 882571817, 1553585889, 3835470777, 2359267185, 2440708088, 4185461552, 1098671720, 696208032, 3874291164, 2398081300, 921347148, 1592363140, 1124874253, 722408645, 2466931101, 4211690837, 2831220879, 3233950791, 2026330399, 281310679, 220317022, 1696786838, 3710360782, 3039080454, 1206682823, 804235279, 2548751703, 4293521823, 3792453910, 2316266974, 839522438, 1510552654, 163674516, 1640125788, 3653705732, 2982415564, 2887892037, 3290599565, 2082989525, 337955101, 3686235745, 3014939305, 196159473, 1672612665, 2119678896, 374642552, 2924601888, 3327315688, 2509931314, 4254707706, 1167907490, 765458026, 813319907, 1484352043, 3766230899, 2290037691, 4117630708, 2641175100, 627595108, 1298889644, 1351535397, 948824045, 2156434101, 3901472381, 3141792679, 3544244079, 1799727671, 54953727, 514012790, 1990204094, 3466948582, 2795914030, 1765143634, 20371610, 3107171778, 3509616906, 3436523907, 2765495627, 483616787, 1959806171, 655886593, 1327179209, 4145959057, 2669509721, 2197343440, 3942375448, 1392416064, 989706632, 3358952777, 2687934849, 406050009, 1882257425, 1842694296, 97936464, 3184726280, 3587194304, 2249748506, 3994770642, 1444817290, 1042089282, 603502027, 1274779907, 4093570139, 2617098387, 1416525807, 1013799719, 2221420159, 3966436023, 4052660798, 2576195318, 562621358, 1233897318, 440634044, 1916839540, 3393573676, 2722562020, 3215150957, 3617612709, 1873090301, 128334389, 2413365646, 3889833286, 1608470558, 937196758, 708430943, 1111154839, 4198471119, 2453453063, 3254056157, 2851592213, 301116749, 2045870469, 1679044876, 202841540, 3021105308, 3692119124, 327349032, 2072109024, 3280251576, 2877785712, 3059889913, 3730905649, 1717858153, 241648545, 1571753595, 900473523, 2376685547, 3853155107, 4165979050, 2420959074, 675910202, 1078640370, 2994899507, 3665929979, 1652872099, 176684907, 392318946, 2137088810, 3345225330, 2942778042, 4239357792, 2494323624, 749285104, 1151992376, 1498395313, 827104889, 2303322913, 3779774441, 786002069, 1188715613, 4276037893, 2531001805, 2335814980, 3812268428, 1530916052, 859619356, 1626639814, 150446350, 2968704086, 3639736478, 3306440727, 2903991519, 353505671, 2098281807], [0, 1228700967, 2457401934, 3678701417, 555582061, 1747058506, 3009771555, 4200137988, 1111164122, 185039357, 3494117012, 2575270835, 1663469239, 706411408, 4049501433, 3093430750, 2222328244, 3444208787, 370078714, 1597148893, 2775288793, 3965187838, 924021143, 2117012656, 3326938478, 2406576201, 1412822816, 487164423, 3880816387, 2926375460, 1965585741, 1007945834, 218129817, 1144789182, 2675482583, 3594838768, 740157428, 1696701139, 3194297786, 4149829789, 1329291587, 101129316, 3712195341, 2491409962, 1848042286, 656055817, 4234025312, 3043124295, 2306239533, 3226079498, 453940835, 1379068740, 2825645632, 3780612967, 974328846, 1932486953, 3410847991, 2188449232, 1496683193, 269086622, 3931171482, 2741802941, 2015891668, 823422451, 436259634, 1396487701, 2289578364, 3242478683, 991775071, 1914778744, 2842014481, 3763981878, 1480314856, 285717199, 3393402278, 2206156929, 2032553349, 807022754, 3948853195, 2724383468, 2658583174, 3612000161, 202258632, 1160922607, 3211477227, 4132912588, 756267685, 1680852866, 3696084572, 2507258747, 1312111634, 118047029, 4249895985, 3026991382, 1864941183, 638894936, 385920683, 1581044620, 2239255781, 3427019202, 907881670, 2132890081, 2758137480, 3982076847, 1429973617, 470275926, 3343077439, 2390699288, 1948657692, 1025135931, 3864973906, 2942480245, 2474026783, 3662338616, 17718609, 1211244662, 2993366386, 4216805461, 538173244, 1764729371, 3511526341, 2557599458, 1127569803, 168371372, 4031783336, 3110886543, 1646844902, 722773697, 872519268, 2101209923, 2792975402, 4014280973, 354161673, 1545627950, 2271538759, 3461911392, 1983550142, 1057419161, 3829557488, 2910721495, 1462178003, 505114100, 3311397533, 2355337146, 2960629712, 4182500087, 571434398, 1798510777, 2439650749, 3629539482, 51570675, 1244568276, 4065106698, 3144738349, 1614045508, 688397411, 3545307495, 2590860352, 1093264169, 135634446, 956429309, 1883082458, 2876836275, 3796202644, 404517264, 1361054903, 2321845214, 3277387513, 2067461927, 839289344, 3913420137, 2692640846, 1512535370, 320538733, 3361705732, 2170810915, 3178756681, 4098590574, 789512199, 1714650400, 2624223268, 3579184387, 236094058, 1194262349, 4283235987, 3060827060, 1832125661, 604535290, 3729882366, 2540503513, 1277789872, 85326743, 771841366, 1732059249, 3162089240, 4114995775, 253550395, 1176543772, 2640586101, 3562559570, 1815763340, 621159595, 4265780162, 3078545125, 1294457825, 68921030, 3747553711, 2523094152, 2859947234, 3813353925, 940551852, 1899221899, 2339034767, 3260459944, 420621505, 1345212902, 3897315384, 2708483359, 2050271862, 856217425, 3377582677, 2154671986, 1529423899, 303387964, 587282639, 1782400488, 2977546881, 4165320614, 35437218, 1260439429, 2422489324, 3646438859, 1631206421, 671498546, 4081239643, 3128867708, 1076346488, 152814431, 3529458742, 2606971153, 2809606523, 3997912156, 890227509, 2083763730, 2255139606, 3478572593, 336742744, 1563309183, 3846976929, 2893039750, 1999949807, 1040757448, 3293689804, 2372782827, 1445547394, 521482405], [0, 4097758792, 3985758817, 430902313, 3738157619, 720442491, 861804626, 3345010202, 3094606487, 1280124127, 1440884982, 2715614910, 1723609252, 2458052332, 2335042245, 2131967117, 1963693023, 2167752087, 2560248254, 1822728182, 2881769964, 1610254244, 1180011405, 2993380805, 3447218504, 960935680, 552188713, 3570888033, 330802043, 3884545331, 4263934234, 169389906, 3927386046, 506065398, 126287327, 4088933271, 886629773, 3236312005, 3645456364, 762833316, 1382339881, 2790916961, 3220508488, 1271650560, 2360022810, 2023080274, 1631243643, 2500074291, 2669458529, 1797415465, 1921871360, 2259925064, 1104377426, 3052249114, 2890050611, 1484552827, 661604086, 3545338046, 3405683863, 1052789471, 4188046533, 228479629, 338779812, 3759114476, 3519166861, 637333445, 1012130796, 3362600356, 252574654, 4214435318, 3801883103, 379778967, 1773259546, 2643402066, 2216694139, 1881065267, 3078490409, 1128324961, 1525666632, 2932933888, 2764679762, 1358396442, 1230532659, 3177621115, 2047240289, 2386083369, 2543301120, 1672045640, 481974469, 3901001357, 4046160548, 85284076, 3262487286, 910904510, 803487895, 3688535775, 1003822643, 3488335995, 3594830930, 578425370, 3843742720, 287574600, 143328865, 4239773737, 2208754852, 2006465260, 1849112261, 2584338573, 1567174295, 2841114847, 2969105654, 1153835710, 1323208172, 3135265700, 2739885965, 1467056581, 2417053663, 1680841111, 2105578942, 2310947830, 4138565499, 43231539, 456959258, 4009915218, 677559624, 3697044224, 3321063209, 835563873, 2791835115, 1381421987, 1274666890, 3217492418, 2024261592, 2358841744, 2503351737, 1627966449, 505149308, 3928301876, 4085919005, 129301333, 3235132751, 887808775, 759557934, 3648731494, 3546519092, 660422780, 1056066645, 3402406429, 229397511, 4187128399, 3762130534, 335763502, 1796236451, 2670637803, 2256649922, 1925146762, 3051333264, 1105293528, 1481538801, 2893064889, 1283400277, 3091330077, 2716792884, 1439706748, 2461065318, 1720596014, 2132883975, 2334125135, 4094480578, 3278474, 429722275, 3986939115, 717427441, 3741172921, 3344091280, 862723800, 963948938, 3444205506, 3571805163, 551271843, 3887821753, 327525873, 170568152, 4262756240, 2164736797, 1966708053, 1821809020, 2561167156, 1606975790, 2885048166, 2992200527, 1181191431, 2007645286, 2207574574, 2587616775, 1845833807, 2842033749, 1566255133, 1156850740, 2966090364, 3487158001, 1005000889, 575149200, 3598107352, 286657730, 3844659850, 4236760739, 146342123, 44150713, 4137646577, 4012930520, 453944208, 3698224522, 676379586, 838842347, 3317784995, 3134348590, 1324125030, 1464043343, 2742898951, 1679662877, 2418231637, 2307671420, 2108855092, 2646416344, 1770245520, 1881981369, 2215778289, 1131600363, 3075215267, 2934113162, 1524487618, 634317135, 3522182919, 3361682222, 1013048678, 4211157884, 255851828, 378597661, 3803064149, 3904276487, 478699087, 86463078, 4044981294, 913918516, 3259473020, 3689451605, 802571805, 1355119248, 2767957208, 3176440049, 1231713977, 2383067299, 2050256619, 1671127746, 2544219274], [0, 3411442597, 2470478267, 1477900830, 594376071, 3896184354, 2955801660, 2071695257, 1188752142, 2374799531, 3583666869, 516690192, 1706532489, 2934039852, 4143390514, 1033987223, 2377504284, 1189326265, 519395239, 3584240642, 2933433243, 1703860286, 1033380384, 4140718469, 3413064978, 3753655, 1479523497, 2474231564, 3892463765, 592720688, 2067974446, 2954146443, 512219849, 3587285356, 2378652530, 1183916247, 1038790478, 4139570411, 2930388725, 1711035728, 1482502599, 2466990690, 3407720572, 4967385, 2066760768, 2959491045, 3899704827, 589741662, 2469530837, 1482979184, 7507310, 3408197323, 2959046994, 2064188151, 589297897, 3897131852, 3588810715, 515808382, 1185441376, 2382241221, 4135948892, 1037298169, 1707414503, 2928896066, 1024439698, 4133080631, 2924426281, 1696157580, 509788181, 3577002928, 2367832494, 1182022155, 2077580956, 2961384761, 3902136103, 600024194, 1488464667, 2481868990, 3422071456, 11456773, 2965005198, 2079070251, 603644469, 3903625616, 2480346633, 1484877228, 9934770, 3418483735, 4133521536, 1027011365, 1696598331, 2926998174, 3574463751, 509314722, 1179483324, 2367358745, 596143963, 3906868478, 2965958368, 2073990469, 15014620, 3417530745, 2477103975, 1492377794, 1699906645, 2919563248, 4128376302, 1027898955, 1178595794, 2372504183, 3581898857, 506006476, 2923280711, 1701561058, 1031616764, 4130030425, 2370882752, 1174845285, 504384891, 3578148574, 3907473993, 598813164, 2074596338, 2968627287, 3414829006, 14441579, 1489675893, 2476531152, 2048879396, 2974355585, 3915377311, 571052346, 1500651171, 2451858694, 3392315160, 23389373, 1019576362, 4153670543, 2944729489, 1691580980, 531166637, 3573452296, 2364044310, 1203638195, 4155161912, 1023198877, 1693072515, 2948351782, 3569862847, 529642266, 1200048388, 2362520225, 2976929334, 2049322387, 573626253, 3915820072, 2451383217, 1498109972, 22913546, 3389774255, 1687728621, 2949565000, 4158140502, 1015958515, 1207288938, 2359541711, 3568649681, 534986356, 574773987, 3910410566, 2969754456, 2052366589, 19869540, 3396949185, 2456792799, 1496962426, 3912067057, 578493524, 2054022730, 2973474287, 3393196662, 18246099, 1493210061, 2455169128, 2952236287, 1688336218, 1018629444, 4158748385, 2358966648, 1204585181, 534411459, 3565945702, 1192287926, 2353440019, 3562037005, 520496296, 1685957425, 2938884244, 4147980938, 1013666095, 30029240, 3399241245, 2458563587, 1507643302, 581386303, 3924900762, 2984755588, 2058467873, 3399813290, 32731919, 1508215057, 2461266612, 3922230573, 580781704, 2055797910, 2984150835, 2357191588, 1193908225, 524247583, 3563657658, 2937230883, 1682238854, 1012012952, 4144262205, 1503069311, 2462154714, 3403122116, 25296481, 2063233528, 2980842077, 3921342531, 585927654, 525201265, 3558577364, 2349690570, 1197151599, 1008769782, 4151763283, 2942311245, 1681285352, 3559051875, 527739334, 1197626328, 2352228477, 4149192676, 1008327745, 1678714463, 2941869562, 2465741165, 1504592584, 28883158, 3404645235, 2979351786, 2059614031, 584437073, 3917723380], [0, 2540828609, 722442611, 3162402482, 1444885222, 3245262119, 2098244501, 3932249172, 2889770444, 995070477, 2268200127, 272632702, 4196489002, 1834000619, 3509505625, 1180645784, 1569766761, 3403762344, 1990140954, 3790525403, 193957775, 2633922638, 545265404, 3086082365, 4054767781, 1725902692, 3668001238, 1305523735, 2813454915, 817896834, 2361291568, 466584817, 3139533522, 743476499, 2418992033, 123671648, 3980281908, 2052046837, 3325153607, 1363158662, 387915550, 2154752223, 1007715949, 2875290028, 1090530808, 3597785657, 1779414155, 4252910410, 3870410683, 1908420730, 3451805384, 1523558665, 2964256093, 668926620, 2611047470, 214997999, 1250927223, 3724432822, 1635793668, 4143041733, 479236241, 2346805072, 933169634, 2700017187, 1940816725, 3839849620, 1486952998, 3486576103, 632402355, 2998945394, 247343296, 2580537089, 3750815385, 1222709592, 4104093674, 1676576811, 2307904639, 519971774, 2726317324, 905034445, 775831100, 3109014013, 87140175, 2453688462, 2015431898, 4015061787, 1395561897, 3294585448, 2181061616, 359771185, 2836382339, 1048458562, 3558828310, 1131323095, 4279300197, 1751189412, 3364878727, 1610485318, 3816841460, 1961989941, 2660289377, 165756064, 3047117330, 586065363, 1689361483, 4089473930, 1337853240, 3637506809, 850308781, 2782878060, 429995998, 2396045343, 2501854446, 40809263, 3188776349, 694233692, 3271587336, 1416724937, 3893358459, 2138970298, 958472482, 2924533475, 305051729, 2237616016, 1866339268, 4165985285, 1144097463, 3544218998, 3881633450, 1881993579, 3427966937, 1529047064, 2973905996, 640926605, 2588781887, 222059262, 1264804710, 3692205223, 1617754645, 4145876436, 494686592, 2316150337, 913557747, 2701279026, 3134045123, 767314946, 2445419184, 112448881, 3973220645, 2074312420, 3353153622, 1353508759, 385080847, 2172791246, 1039943548, 2861412541, 1089268969, 3617397544, 1810068890, 4237460059, 1551662200, 3406662585, 2004083979, 3758232266, 174280350, 2635250015, 560781293, 3055362092, 4030863796, 1731456629, 3679289543, 1279031046, 2791123794, 825023635, 2371007009, 438519264, 32293137, 2526885584, 719542370, 3180507043, 1475605495, 3229746230, 2096917124, 3951926597, 2916263133, 983782172, 2262646190, 296536687, 4224554555, 1824285178, 3502378824, 1202976905, 2498987519, 58880574, 3220970636, 680389453, 3270293273, 1436369112, 3923979882, 2123553195, 953016371, 2948339698, 331512128, 2226359937, 1859310293, 4188218644, 1172130726, 3534535783, 3378722966, 1578291031, 3798770149, 1964856868, 2675706480, 135134641, 3027473155, 587359426, 1700617562, 4063013531, 1314047017, 3642962920, 859991996, 2754844797, 407762639, 2403074318, 802357037, 3097692396, 81618526, 2477560223, 2043530699, 4005313034, 1388467384, 3316884345, 2213321441, 345861408, 2833449874, 1066595411, 3589515271, 1115840454, 4277940596, 1770899125, 1916944964, 3845371269, 1498274615, 3460050166, 610103458, 3006039907, 257092049, 2552438288, 3732678536, 1225642057, 4118003451, 1644316986, 2288194926, 521331375, 2741799965, 874347484], [0, 829543472, 1659086944, 1402109008, 3318173888, 4105602288, 2804218016, 2522164368, 2388842353, 3205694273, 3967909649, 3723537185, 1269139377, 2060735361, 692465617, 406322145, 422172691, 676858915, 2076864627, 1253811267, 3706620115, 3986644195, 3188531379, 2407330947, 2538278754, 2788875090, 4121470722, 3302585138, 1384931234, 1677560722, 812644290, 18752498, 844345382, 52585494, 1353717830, 1640090742, 4153729254, 3336910038, 2507622534, 2751896758, 3157354327, 2369827687, 3738357559, 4020443911, 2046179223, 1216865191, 454402039, 711216071, 729442357, 436976645, 1234813013, 2028475493, 4005378293, 3754749125, 2355007637, 3173991589, 2769862468, 2489936756, 3355121444, 4136289044, 1625288580, 1370373044, 37504996, 860722132, 1688690764, 1440134268, 105170988, 926227484, 2707435660, 2417091772, 3280181484, 4075965660, 3938826045, 3686032141, 2284199773, 3109538669, 788719613, 510866381, 1306611613, 2089851821, 2106505311, 1291807855, 527241279, 773637135, 3091851423, 2302164143, 3668590847, 3957036239, 4092358446, 3265116958, 2433730382, 2692617086, 908804078, 123399134, 1422432142, 1706640318, 1458884714, 1736770650, 873953290, 90614842, 2469626026, 2722256026, 4056950986, 3231841530, 3633710875, 3924284203, 3128274811, 2332326731, 491870171, 740328427, 2142437307, 1321413515, 1339885689, 2125257801, 759078937, 474969129, 2316982457, 3144387721, 3908694233, 3649578217, 3250577160, 4040035128, 2740746088, 2452464472, 75009992, 889805816, 1721444264, 1475015576, 3377381528, 4164883624, 2880268536, 2598157512, 210341976, 1039680616, 1852454968, 1595665416, 1194072041, 1985856473, 634371977, 348023737, 2196457257, 3013251865, 3758681929, 3514383225, 3496417419, 3776367803, 2995040491, 2213897435, 362825803, 617716859, 2000937003, 1177695259, 1577439226, 1869880266, 1021732762, 228045738, 2613223226, 2863876874, 4179703642, 3360744298, 4213010622, 3396117646, 2583615710, 2827947246, 1054482558, 262927438, 1547274270, 1833458734, 1971300303, 1141797887, 396103599, 653122463, 2964911887, 2177442623, 3529203567, 3811216223, 3795101869, 3544546461, 2161574093, 2980500733, 670300269, 377629789, 1158696973, 1952547901, 1817608156, 1562881004, 246798268, 1069810572, 2844864284, 2564881196, 3413280636, 4194521932, 2917769428, 2627237092, 3473541300, 4269530244, 1747906580, 1499407396, 181229684, 1002212420, 596342693, 318415765, 1097392069, 1880689653, 3863750501, 3611161429, 2226097925, 3051248437, 3032512711, 2243013879, 3592671399, 3880912023, 1896294407, 1081539639, 333742183, 580211799, 983740342, 198409094, 1480656854, 1764807654, 4284874614, 3457428294, 2642827030, 2901902118, 2679771378, 2932589762, 4250515602, 3425201314, 1518157874, 1795986434, 949938258, 166673506, 299419523, 547951539, 1933275107, 1112194003, 3558840131, 3849208691, 3069984547, 2274224915, 2257832161, 3085049041, 3832569985, 3573658801, 1129617441, 1915046929, 565653569, 281470065, 150019984, 964742048, 1779611632, 1533240256, 3442888528, 4232551264, 2950031152, 2661561088], [0, 819083365, 1638166730, 1366706351, 3276333460, 4087011825, 2733412702, 2453580091, 2206053849, 3014626748, 3805922579, 3524001142, 1077236813, 1894214696, 563160199, 289610978, 51846467, 868558118, 1655926153, 1382110700, 3227516119, 4035822770, 2717617181, 2435429496, 2154473626, 2964885759, 3788429392, 3508330549, 1126320398, 1945137515, 579221956, 307495329, 103692934, 922485475, 1737116236, 1465414185, 3311852306, 4122272631, 2764221400, 2484114365, 2236845919, 3045177146, 3841458069, 3559245808, 1176202955, 1992906414, 666836481, 393029220, 87631813, 904601504, 1688033039, 1414492010, 3329345105, 4137942580, 2815800987, 2533854974, 2252640796, 3063327353, 3890275030, 3610434227, 1158443912, 1977502701, 614990658, 343554855, 207385868, 1015958889, 1844970950, 1563049379, 3474232472, 4291210493, 2930828370, 2657279031, 2401353941, 3220437168, 4001738783, 3730278522, 1281958209, 2092636452, 768430475, 488597998, 256600143, 1067012138, 1861163141, 1581064416, 3422783963, 4241600958, 2913466641, 2641740148, 2352405910, 3169117683, 3985812828, 3711997241, 1333672962, 2141979751, 786058440, 503870637, 175263626, 983594991, 1809203008, 1526990629, 3376066078, 4192769659, 2828984020, 2555176625, 2299525715, 3118318134, 3903556249, 3631854332, 1246174151, 2056594338, 736324365, 456217448, 157635273, 968321708, 1757487619, 1477646950, 3391992669, 4211051320, 2877932439, 2606496754, 2316887824, 3133857653, 3955005402, 3681464255, 1229981316, 2038578913, 687109710, 405163563, 414771736, 678089341, 2031917778, 1238278839, 3689941900, 3944887273, 3126098758, 2324054819, 2613403585, 2870437796, 4200673035, 3400734574, 1485684309, 1751090736, 959041183, 167507706, 464516955, 729665342, 2047575953, 1255784436, 3639023311, 3895799466, 3108201989, 2308005472, 2563916418, 2818603751, 4185272904, 3382970925, 1536860950, 1799920499, 977195996, 183299001, 513200286, 776268027, 2134024276, 1340119089, 3722326282, 3976989039, 3162128832, 2359851429, 2649449799, 2906217762, 4233041293, 3432852968, 1587774675, 1852947638, 1057485849, 265669756, 495046109, 760477112, 2082848023, 1291289970, 3737726025, 3994752044, 3211615363, 2411685094, 2667345924, 2922266721, 4283959502, 3481940139, 1572116880, 1835442677, 1007741274, 214094143, 350527252, 607561585, 1967189982, 1167251387, 3618406016, 3883812581, 3053981258, 2262447663, 2543397581, 2806715048, 4131215879, 3337577058, 1423035225, 1677980476, 896908179, 94864374, 401834583, 656521778, 1985475229, 1183173368, 3569050563, 3832109990, 3038712585, 2244815724, 2492348302, 2757496811, 4113188676, 3321397025, 1472648730, 1729425023, 912434896, 112238261, 315270546, 572038647, 1936643416, 1136454973, 3514975238, 3780148323, 2955293900, 2163477673, 2444693579, 2707761198, 4027801729, 3233896676, 1392505311, 1647167930, 861634837, 59357552, 299743441, 554664116, 1887029275, 1085010046, 3533003077, 3796328736, 3006343567, 2212696554, 2459962632, 2725393773, 4077157826, 3285599655, 1374219420, 1631245561, 810327126, 10396723], [0, 1409766726, 2819533452, 4228513738, 1441866729, 32929455, 4261382501, 2851658787, 2883733458, 4293202580, 65858910, 1475065880, 4262683707, 2853450109, 1444794039, 35298289, 1378416981, 103787539, 4196815833, 2921399967, 131717820, 1407094778, 2950131760, 4224722294, 4190813831, 2915953601, 1371804683, 96682317, 2889588078, 4164732968, 70596578, 1345479332, 2756833962, 4032210924, 207575078, 1482165600, 4053848387, 2779218949, 1504607183, 229191305, 263435640, 1538580542, 2814189556, 4089072306, 1514313361, 239453143, 4065082397, 2789960027, 4135128063, 2726190777, 1584898419, 175174709, 2743609366, 4153376080, 193364634, 1602344924, 1570458669, 161225067, 4120241825, 2710746087, 141193156, 1550662274, 2690958664, 4100165646, 1297060773, 424199907, 3846256937, 2974182511, 415150156, 1287251210, 2964331200, 3837218694, 3870151799, 2997518641, 1319337723, 446966717, 3009214366, 3881542360, 458382610, 1330972756, 526871280, 1264598966, 3077161084, 3815675194, 1251363097, 512826463, 3801670549, 3063920339, 3028626722, 3766646884, 478906286, 1217188584, 3782479563, 3044236173, 1232774215, 494792961, 3911082255, 3172545609, 1091619715, 353869509, 3169796838, 3907524512, 350349418, 1088863532, 1123821277, 385577883, 3941764177, 3203782935, 386729268, 1124749426, 3204689848, 3942972158, 3140917338, 4013018396, 322450134, 1195337616, 4006067123, 3133206261, 1187582271, 315507833, 282386312, 1154714318, 3101324548, 3973914690, 1160117345, 287484199, 3979040493, 3106669483, 2594121546, 3466097164, 848399814, 1721161856, 3480093859, 2607370725, 1734389295, 862452585, 830300312, 1702507998, 2574502420, 3446972242, 1686913905, 814421559, 3431131645, 2558901435, 3367493151, 2628815705, 1622766739, 884875733, 2638675446, 3376523440, 893933434, 1632567868, 1666554317, 928173195, 3411751745, 2673632775, 916765220, 1654910818, 2661945512, 3400353262, 1053742560, 1791590566, 2529197932, 3267832362, 1799353865, 1060676431, 3274792069, 2536901059, 2502726194, 3240871796, 1025652926, 1764060664, 3235754459, 2497373341, 1758665559, 1020546577, 1827024053, 954300915, 3303573049, 2431636351, 957812572, 1829788186, 2434377168, 3307139222, 3338955623, 2466463265, 1862975979, 990745773, 2465548430, 3337756104, 989585922, 1862055748, 3620779247, 2211963305, 2145263203, 735660837, 2183239430, 3592864320, 707739018, 2116577484, 2083713853, 674604667, 3560724913, 2151353591, 700698836, 2110031250, 2177727064, 3586797342, 2247642554, 3523156220, 771155766, 2045882992, 3490278995, 2215525141, 2013775071, 738234777, 773458536, 2048745262, 2249498852, 3524523426, 2079009153, 804027591, 3555033869, 2279790155, 1937851973, 663098115, 3683642569, 2408102287, 644900268, 1920413930, 2390675232, 3665402470, 3630367127, 2355385553, 1886235419, 610991709, 2375164542, 3650451256, 631015666, 1906040244, 564772624, 1974397526, 2309428636, 3718267098, 1951964409, 543148479, 3696637557, 2287035187, 2320234690, 3729567108, 574968398, 1984038664, 3753564971, 2344455789, 2008314279, 598942945], [0, 1737424129, 3474848258, 2828207875, 2614592245, 4233723892, 1422555383, 860128758, 843281179, 1439534618, 4250831129, 2597352472, 2845110766, 3457813743, 1720257516, 17299181, 1686562358, 50862903, 2879069236, 3423985973, 4283524291, 2564790722, 810327745, 1472357312, 1455789357, 827025452, 2581098287, 4267086382, 3440515032, 2862410457, 34598362, 1702957275, 3373124716, 2927833453, 101725806, 1637796719, 1390038681, 894743448, 2647110811, 4199106970, 4216242039, 2629845622, 877872501, 1407039604, 1620655490, 118997123, 2944714624, 3356113537, 2911578714, 3389380443, 1654050904, 85470553, 912042159, 1372738990, 4181807789, 2664411052, 2680707393, 4165379136, 1356178243, 928734786, 69196724, 1670457013, 3405914550, 2894912695, 2549607977, 4034466600, 1491735595, 1063577898, 203451612, 1806602717, 3275593438, 2763221983, 2780077362, 3258605619, 1789486896, 220699185, 1046683591, 1508762310, 4051625413, 2532317380, 4084271135, 2499802398, 1013772829, 1541541660, 1755745002, 254310379, 2814079208, 3224735209, 3241310980, 2797372933, 237994246, 1772190727, 1525021169, 1030423792, 2516059123, 4067884786, 1593451077, 963960644, 2447890503, 4134085958, 3308101808, 2728615345, 170941106, 1841211315, 1824084318, 188197983, 2745477980, 3291108957, 4151235499, 2430611114, 947071401, 1610470568, 981255283, 1576155506, 4116790897, 2465186672, 2712356486, 3324361607, 1857469572, 154681733, 138393448, 1873889897, 3340914026, 2695671915, 2481468829, 4100376732, 1559613343, 997929630, 704883363, 1301108642, 3843969185, 2190519712, 2983471190, 3596277079, 2127155796, 424095573, 406903224, 2144216249, 3613205434, 2966675131, 2207734605, 3826886220, 1284153679, 721706062, 1317358741, 688632212, 2174269079, 3860220822, 3578973792, 3000775521, 441398370, 2109852003, 2093367182, 457753231, 3017524620, 3562354829, 3876699515, 2157920378, 671893369, 1333967480, 3809371855, 2223021006, 739482829, 1268605388, 2027545658, 525801787, 3083083320, 3494568761, 3511490004, 3066292437, 508620758, 2044596951, 1251645217, 756312608, 2240245027, 3792277538, 2273870073, 3758521848, 1217755899, 790333434, 475988492, 2077359885, 3544381454, 3033269519, 3050042338, 3527741155, 2060847584, 492369121, 773615895, 1234340886, 3774974741, 2257548820, 3186902154, 3665475979, 1927921288, 359089033, 639878783, 1101871998, 3913170045, 2393948540, 2411149201, 3896101520, 1084935571, 656683154, 341882212, 1944995941, 3682422630, 3170087527, 3648168636, 3204210621, 376395966, 1910613439, 1118117961, 623631688, 2377701963, 3929417546, 3945910695, 2361339046, 606874533, 1134745252, 1894142802, 392736339, 3220941136, 3631567953, 1962510566, 326596071, 3152311012, 3697971173, 4012771859, 2292250386, 540274705, 1203571984, 1186659325, 557057788, 2309423615, 3995729150, 3714939144, 3135472649, 309363466, 1979612683, 276786896, 2012320721, 3747779794, 3102501331, 2343103525, 3961917732, 1152718375, 591129382, 574365131, 1169350858, 3978422217, 2326731464, 3119226686, 3731186239, 1995859260, 293115965], [0, 4060876286, 3790892301, 335044851, 3322195179, 872980757, 670089702, 3590114328, 2313498407, 2078876377, 1745961514, 2585612244, 1340179404, 3186462258, 2920672961, 1545200447, 371599551, 3827967297, 4157752754, 98453580, 3491923028, 573475242, 836168025, 3285902503, 2680358808, 1842285158, 2117560981, 2352703339, 1506257779, 2882250381, 3090400894, 1245694848, 743199102, 3728759936, 3451403379, 1068773773, 3930652053, 407171179, 196907160, 4189101414, 2779348569, 1470460839, 1146950484, 3058769578, 1672336050, 2443304780, 2186919871, 1884664385, 980056513, 3362157631, 3684570316, 697440562, 4235121962, 241359060, 496678951, 4019631577, 3012515558, 1099127576, 1383807979, 2692167189, 1972107789, 2273834995, 2491389696, 1718852350, 1486398204, 2861870850, 3110916081, 1264632335, 2661027351, 1821377513, 2137547546, 2372169444, 3514666459, 594640933, 814342358, 3263556904, 393814320, 3849661646, 4136455229, 75579843, 1321110083, 3165816765, 2940921678, 1564928688, 2293900968, 2058758998, 1766738853, 2604811867, 3344672100, 894937242, 649054313, 3567502743, 23005583, 4082304113, 3769328770, 312961404, 1960113026, 2262367868, 2501942927, 1730974577, 3000000361, 1088180887, 1394881124, 2703769498, 4247903397, 255709531, 482718120, 4006198358, 993357902, 3375988144, 3670089027, 684527805, 1660083005, 2432620227, 2198255152, 1896528846, 2767615958, 1459255848, 1157765851, 3071153957, 3944215578, 421263844, 182688023, 4176450793, 756242673, 3743372559, 3437704700, 1055602690, 2972796408, 1128089606, 1355098357, 2731091211, 2000021779, 2235163885, 2529264670, 1691191776, 953445087, 3403179809, 3642755026, 724306476, 4275095092, 215796682, 522496825, 3978864327, 2803330375, 1427857593, 1189281866, 3035565492, 1628684716, 2468334674, 2162666657, 1928044895, 787628640, 3707654046, 3473289069, 1024074387, 3908497035, 452649845, 151159686, 4212035192, 2642220166, 1869683064, 2089384331, 2391110773, 1534703725, 2843063699, 3129857376, 1216469150, 345521057, 3868472927, 4117517996, 123755346, 3533477706, 546347700, 862517831, 3244619705, 2338012217, 2035757511, 1789874484, 2560842954, 1298108626, 3209927980, 2896952799, 1588064289, 46011166, 4038205152, 3813309971, 289829869, 3300573173, 917942795, 625922808, 3611483910, 3920226052, 463858426, 140347913, 4199647223, 799886319, 3718333969, 3461949154, 1012214556, 1615644707, 2453718493, 2176361774, 1941219536, 2789762248, 1413769526, 1203505605, 3048211515, 4287614907, 226738757, 511419062, 3967266632, 965436240, 3414650542, 3632205405, 712180643, 1986715804, 2221337954, 2543750545, 1704099951, 2960018551, 1113735561, 1369055610, 2744528004, 3320166010, 938064772, 605150071, 3592279689, 65084049, 4058847087, 3793057692, 270105186, 1275107677, 3188495523, 2918511696, 1610152366, 2315531702, 2013804616, 1810913467, 2583450949, 3552812741, 567251771, 842527688, 3225157174, 365376046, 3888857040, 4097007395, 104813277, 1512485346, 2821372956, 3151158511, 1239339281, 2619481353, 1848512759, 2111205380, 2413460986]] 256 16+ ++I++++I (((32`` `````````  v c        L Q O Lo`` ```    0 xRJD!YF0 J;((m  x"  " {,{, 9( out of bounds {," "w##t" "t"t"assertion failed: i == 0t"#  # #  # ##  #$ $$    $#    $$ x%%v$ $ v$v$assertion failed: i == 0v$%  % %  % % %%  % & &&  &%  &&x''' '''' ''''  '&  (( "$& """#t"#  # #$$$$%v$%  % %%&&&' '''''{, " $  &  )  ) ,,, out of bounds ,) *w**|* *|*|*assertion failed: i == 0|****  *+ x+ +~+  + ~+~+assertion failed: i == 0 ~++  ++   +,x,,,  ,,)*m*i++) ))****|**+++~++,,,)) * +  ,) .  . 1 1 . /w/ // ///w/ // / / / x/ /  / /  /  /x0 00 0 0 0 x0  00    01..7/30+. ...//// //// 00.. / / / /  0 .232F2222F4 44<4444<6 656555567 7776?767 66?8 87=7 777=8 88  888898F8888 8888F9  9;;EF;9 ::OTN:::OT:::AT:;99 9:99)< )< < (< < '< < )< <<< 5'<<<<  < < < )assertion failed: node.trans.len() <= 256)) '< = ==  '= =] =]=]=== '= =]  =2 =2=2 = =2 =2 =] =2 =] =]= A >>>'>>&>&>&> >&>&>&>&>)>>>'> ('>'? ? ?  ?'? ?>?>?>? ? ? ?'? ?>???>???'? ?>?>@)@@(@@@ "@ @ "@!%@ @ !?8(?8?8? © %?8@(@? @)@@'@@#@ &@ @ &@%#@ @ $%@0'@0@0@ ©#$#@0@'@? A;@#'@''"@'@('$A!A)!&>' ;*<©;; <<< <<<< =]=2=== ==>&>>> ©>?>?? ? ? ??ܴ? ? ©@@ܴ@ @ ©@@ ܴ@ @ @@A?;?; M<J<;B)B  B)BABAAA BA?A?A MBACC CCCCC CCCDD DDDDDDEE EEEEEEFF FFFFFFKK KKKK KK KK   KK KL >L K L L LLLL   LLL LL L LL cLLLLLL  L L LL  LLL LL L L LLcLLLLLLJLL JKLLLLLLLLJJJJK K KKKŬKKLLLL LLLLLLLL L L LLL?JNJ K  L L L LJM  M MMLMMLNN N NN  N?NN= NMxNM NNNNM NNMxOO O ?O"O  O"ONWŬO OOOONWPP PPPPP PPPPYPPPYPOOOPPŬPOOQ QQQQQQQ  Q Q!Q!Q!QPZQQQQQ QQQ!QcQPZRR RR  R RRRyR RSRSRR R  R  R  R R RySQR RQQŬRR RRR RRRQQQJQjRQSSTSTSTSbS SSSSSJSSb,U UU%UUUVVU; V V VV   %VV V  ԛ %V V  V  V lV U; V V cV V '%V VV V&V   %V&V'V' %V'V' V' V'lWW %WVcV' V(%V'W1 W W1 W %W&W4 W4 W %W)X% X #X X #"%XX ! "X !X  X% X %X!X& X&%X&X& $ X& $X X &%XX %cX&X%)%X&Y!(&Y )Y!Y ()'%YY-&YY  -,%YY+,YY+*%Y Y*Y0Y 4Y 3 4Y 23Y 12YY 01/%YYY/.%YY5 .Y5Z6.cYZ6*%YZ9Z=&Z < =Z ;<Z :;ZZ 9:8%ZZZ87 %ZZ> 7Z>!"Z Z$Z?7cZZ?+%ZZ$ZZ&TV #V' #X&#Y#Z#TUUVVV V VVVV'V' WX X X& X&X ZZYYZZZZ@UTTTUU UUl c utyV ԛVVVVVV V'ԛV&VV VVV'WW1 W1WW4W4X&X%X%XXXX XXX X  Y! Y!Y YYŬYYYYYY Y Y Y ZZZZZZ Z Z ZZZ?TMTuTURU V  V trans_pack_sizeV V V'  pack_sizesW  X % X& X & Z6 Y Z? ZT[  [ [ZDZ ZD[[ [ \\ \?\[= \[x[[ [[[\[ N[[x\\ ] ?\"\ \"]\WŬ\ \\\\\W]] ]]]]] ]^^]Y^^]Y^]]]]]Ŭ]]]_ _______  _ _! _! _! _% __% __% _ _  _  _ __  __^^W^ ^^^_!__ ___!_%___^c^^^ ` ` `` `` ``  ` `)  `)  `) `5 ``5 ``5 ```  ``i `i `iaaa a```a_`__``i`5`)`` ```)`5```iaa`_c_O`_bb bb  b bbbyb bbbbbb b  b  b  b b bycab aaaŬbb bbb bbbaaaJajba ccccdd dd  dd!d!dde  ee  e e- e-  e- eA eeA eeA eef ef ef een en  enf f ff ffff f0f # f0e=e  e=fccddcccccddd!defeAe-e ee-eAeefeenf0ffff fccJcosizectsizeddcg!g!ggg gg  g g-  g-  g- gA hgA hgA h gf  gf  gf h h hhhhhhh.h  h.hfggf ffgg!ggAg-g gg-gAhgfhhhhhffJfggf}jjjpjjjj  j j j )assertion failed: node.trans.len() <= 256))pj j jj jk pkj+j pj+kkkpk k k k k  8pk k kk k k  9NNNMNMNMjg(+ pk k  k  kܴl lll  plk mm%pml.l pl.k6 l ll lplllpll0lǨpl0l8 m! m!m mmm$mm$#pm m'  km" #m "mm& m&n&(%n) n&n()'rpnn"+%n"n+n*spno*-%o. o*o-.,pooo /poo$1/p 2o$o 120pop.4/p7pp76ppp56p.p 453pp(p8 p81p 9p 9% q<q>qq>=!pqr? qq <=?;"pqqq;:#pqq@ :q@%$ rA:cq rAtpqrGrr GF&prrEFrr VED'prrr ;DC(prrr 8Rev0Nпd]CB)prrHBrv *r JHr r 9JI+prr K Ir K1, r LIܴs Os QLs  sQP-pss R r3 rOPRN.pr3r4 r4NM/pr4r4 S Mr4 S*0 s TMcr4sTupr4sZssZY2pssXYssƳXW3psssWV4psssVU5pss[Usg6s][ss]\7pss^ \s^98 s_\ܴtbtc_td s,s  bcda:ps,tlttlk=pts-s-a`;ps-s-e `s-e6< tf`cs-tfvps-tjkttƳji>ptttih?pttthg@pttmgtRAtomttonBpttp ntpDC tqnܴtttxqtw xtvwtuvtt tusEptu}uu}|HputtsrFptty rtyAG tzrcttzwptu({|uu({VIw ~xxxxJpxxxxƳKpxxx  9Lpx xx 8))məA3MpxxxlNxxx 9Opxx xQP xܴxܴx x x xx x Rpyy~yyy Spyx ~xlNyyTpyy yVU ycy"yxpyy%y%yyWpyy yyy%y Xpy!y&y&Ypy&y& y&Z[ y/yy  \pyycy&&yypy&yyz]pz yi^zzz_pzz`d|||||| ap|||bp|| |ic |c|*|zp||(|||ep||| |||(| fp|$|)|)gp|)|) |)ih |c|).|{p|)}}/}  } } }} jp}}}kp}} }lm } }o}c}2}|p}}o}}qin&n"q nr4ns-ntny"ny&&n|*n|).n}2n5ijjkkkmorrqq rvrU s sr4 r4sgsFtts-s-tRt1ttttwxlx@yy!yy#yy%y&y&'||)||+||-|)|)/}}1}}3iiiij jjjj j j jjk kkk k k  {-Pܴk  k kܴkl.llll0lll lmmmmmmmn&n&nn"n"o*o*oo o$ o$p p.p.ppppp qqqqqrrrrrr  rrrrr rrvܴr r4r3ss ssss ssssssssssgܴss-s,tttttttttttttttRܴttttttttttu(uuŧw xxxxxxx {-Px xxlxܴxxxxxyyyy ŧyyyy&y%y%yyyyyyyyyŬyyzz|||||||)|(|(||||||||}}}} } } }}}|&?iMiJij  j  any_outsk  k ۇkm% o / rA q r Hۇr L sT r4s[ۇs_ tf s-tmۇtq tz tw ~xx ۇx  y! y# y% y&' |) |+ |- |)/ }1 }3iu| |||o|||xxxxxx256~  ~ ~}D} }D~  @~5~n~~ ~~ yes~~n  @# @TTՀڀ ?Հ  # ҀPȀ Հ   ? K˂ KwŬց ́́ Ãȃ  ȃ " " " & ׃& ׃&        X " Ã"&c& !  ' ' ' ۅ0 ۅ0 ۅ0   ۅ=  ۅ=  ۅ= „؄ ۅ0''ۅ0 ۅ= „O؄Q index_size  .......lއއlƆ͆ۆ. Ɔ ͆Qۆ ˆˆ ڈڈYYŬ  ։ ։ۉ ω    Ċ  Ċ      ݊݊܌" Ŭ։ۉ cۉ $ $$$Ǝˎ  ˎ$Ŏ  $ $  Ï  Ï 33 3HH H-  ( АƐƐƐ    ˑ#  Ƒ Ƒ #"Ƒ ő !"ґ%ґ $%,!$ ,9  9&Íݍ$ŎƎH3 3H-ƐАƐ,ő Ƒ ˑґ ґ cOÍQݍat Γӓ ӓ͓  ͓ ʓ.ʓ.   ***66 6 Д-Քڝ Ք({ {  {         ՕȒ ͓Γ{6* *6Д-{  cOȒQ final_osize   !assertion failed: i < node.ntrans!!! !    ///DؗDؗD  0+                   %"  %"!  !#$ܙ/ܙ  #$ܙ/Ֆ&  ٖ!D/ /D0     Jٖ       /  /   / D D D   Λ0ӛ ӛ+  Ĝ Ĝ Ĝ Ĝ Ĝ Ĝ לӚƚD/ /DΛ0  Ĝ Ĝ Jƚ Ɲ8888˝ ˝#ٝ888     6 6  6 R ڞR ڞR   0+    ۟۟ ӟ ӟ  ӟɟ4ɟ4ɟɟ ɟ5ɟ5ɟ&   e͠ e ! " 6#!"6#!"6 #R$ ݡR$ ݡR$ %&%&%& ()()(') 6 , ' 6,+*+ */%./ 1 0  1% :.0-32   3B ?-2ףԢ}7 8 ˝#˝ R6 6R0  şɟӟ۟ ۟ӟɟɟ R6 6R  آ %%   J  ş 'inputsآ*ٝ    b2    ţţƣ  J _ref__node¤¤    ʥϥ  ϥ / /  / D D D    <ڝ7            ! !    ϧ1ϧ ϧ1ç>ç ç>"D/ ʥ/D<     ϧ1 J    2 2   Ϫ: ٪٪Ϫ:ʫ--  assertion failed: size <= 8 Ȭ ׬  ׬   ׬ ׬   ׬  - ޫ   ׬ ׬ ׬   ޫ  ʭ ʭ ʭ&ۭ^^  assertion failed: size <= 8̮ˮ ծ ®&   ˮ̮    ֯SS۲۲ 9    ۲2 ?҄߄ k {-P ۲ ۲ k    _ref__self  ŧ       $* * * 2 22 28Ը Ը Ѹ7Ѹ7۷2*$ŧ *2Ը Ne ۷ ŧĺ aŧ   %%%%%޺+ a Ŭ %ŧ  %%|ŧ   & & Լ1Լ   Լ1Լ2Լ2 Լ2Լ2 Լ2     Լ2 cԼ2 ԛ   Լ2  Լ2}Լ2Լ2 ԛʻ  Լ2Լ1? node_addrʻ N    Լ2       ɾ׾ ɾ  ƾhƾhȿ ȿȿͿ  Ϳ  3Й 3  ȽԽ   ɾȿͿͿ ?ȽԽ N  delta_addr ׾     hh ##     N    00        h       h        delta       I I ¬        Less~Greater0^α¬¬α               α       {-Pα   ¬¬       4Box  l*     K 444040bW`( K   1   1 5$ 1 1  l*      4  x  ZZW(2$ 444040bW`(  {-P" """   # " ##!!""""  #"! + ++ ++++  4+ +++   4 ,  , , ,,,    +  ,,,, *,444040bW`(  l*   ,  *+ +*++++ ,,  ,*+*5 444   5 4 55444445  544 77777;77777 7788  8 7888 7877;8* 77 ř7777ԝ77;787 7777::::::È:: ;;;: ; 8ř; ;;;9;;9:F: ř::: : ř;;::9h h hh hhhhhhh  hhh h h hYgh _ref__keyj jjj jjjjjj jjj jjjj j jjjj jYjjn nnnnnnnn n n n nnnnn n nn  nnnnnnn nn  nnnnn n n  n n n nn n n nnnnnnn n n t t t ttαt ααtαtordttл л    л   % %  % 1099511628211   л   2   7 72  2cJ2  3&& &0%% %1[ [ [  [ [[[ [Z  Z ZZZ[  [ [ [ZZ [ [ [[\ \ \  \  ]  {-P]]  ][   [ [ [[[ ¬[ [[\ ¬\ \ \ ] ][[a a a a a a bbbb6b6bbbbb 8bbb6bbb 98bb bb b bb   bbb bb  bb b  b cbb  bbbbbbb b b bbbbbbbbb`bbbb`ab6b(bbbbaaa bbb {-Pb bb6bbb bbbbbbbaa bb  b b`h h h h h h hhhhAhAhhhhhhhhAhhhhh hh h މh hi   i hi hh  hh h i chi hiiiiii i i iiiiiiiiigiiiighhAh.iihhggh hhh {-PމhԄhhAhhhhhiiiiiigh hh h  i hg.o o o ,oo o oo$op  p   o#  o*p,po/ *s s] ss ] ,ss s!s! s!s!s sss! s!s!  t t2 tt9t ,ts\ *tu ut t  ,t t ttĕ ,tu u uu u u u u  uv$v (v '(v)'vv)'v,v&)v% &vv$%#,vv"#v-v "!,v-v ,v +,v-+vv-+v,v*-v/!v. /v! *.uuuw3w6ww6w,w56w 4 5ww342,ww12wwĕ17,ww&w 70,w&x;x>xx>x,x=>x < =xx;<:,xx9:x xĕ9?,xx' x ?8,x'D  CD CB  .̈́B ΄$҄. @B AB  H0 GH : G#$p Epp "  N0 ONA ONA&,p E)': F:: %  K  JK IJ@: FI: %p F ! MOɅ  QɅ  PQ& LMPp ELp "  U  TU# S T* SR(,/ R*dž W І  X0ۆ Y߆ Z8. V  WXYZ \ [  V\ [++-n nostuuuvwZwx]_ ^onoo oo o o*o#p p sss!ssst9t2ttt t tuuuuu uu u uuvvvvvv v vvv v vvvv wwww wwwwxxxx xxx  . p:   & Ʌ Ʌ *#   džІ ۆ߆scno s  tuρuρu!dv 0?w1w8last2x 9 empty_total  @ addr_offset  A Vns t      kk̈   c  c혐A1غ   ֥ Yk (  ĊĊ (  ҊӊҊssֺ(غ   ֥ Ys ێێ     "  "  iЏ i ׎ێ"lYێ &&  xē˓דֺ&غ ēl˓Yדxڕ ߕߕǕ.Ǖ ۦۦǕ.Ǖ<   o Ǖ.غڕ o .ۦ.ȗgߗ՗غ ՗ȗgڙ ڙ ڙ ڙ ڙ ߙߙǙ&Ǚ ҂Ǚ&yy҂غڙ ҂ey     ĜĜΜΜΜ/ ҂/؜לל ۛ҂غ ҂Μלۛe ƝƝϝ ϝڝ >ֺغ >ў ֞֞ўўߞ ߞ  Gžֺўغў Gߟ ߟߟ  @ϟşֺߟغߟ ş@  !ҥ ҥΥ" ڦ<        ,,   ,- ڦ<  5 ҧƧƧ  ) 05   غ ҥҥŽ ڦ<ڦ<-,Ƨҧ0)  E HÈ   ˫L߫ իի˫L ٯ5 ٯ5ٯ5 ٯ5ٯ ޯ  ޯ  ٯ    ٯ$  ٯ+ٯ+ٯ5ٯ5 >        ٯ5ٯ+ٯ+ٯ$ٯٯ ֳֳֳֳ߳ ߳ ߳$ A       Դ  ݴԴ  ݴ Դ  A           ҳ~ƴ#ֳ߳߳    Դ  ֳ ѸѸѸѸڸ ߸߸ڸ ڸÏA       ȹ  ѹȹ  ѹ ȹ  A           ͸~#Ѹڸڸ    ȹ  Ѹ ׼ ܼܼ׼׼   Jżֺ׼غ׼ Jݽ ݽݽ  Cʽֺݽغݽ CϿ ԿԿϿϿݿ ݿ  [ֺϿغϿ M[   Fֺغ F    Hֺغ H 5   `غ `  66  77     Џ ֏ Џ֏ Џ  .ۦ.<   o .غ o                            p  ؑ" p }ֺYJ ۇ                "    -ֺYJ      # #        ¬[  9   &s 9ܽܽ TakeWhile߽3flag3 predicate3 IҢ           ֺ ܅[##¬ l YJu ۇ ¬  ܴ ¬ۇl¬ _ref__value   4ֺ4   =ֺ =΁  =ֺ=   :ֺ: G ֺG    FֺF΁ 3  3 rֺMr΁  DֺD  8ֺ8    f f ֺb      ҂ غ҂ee*** **** * ֏  *          ҂    ֏* ֏*** **** * *          ҂    ֏**** **** * *          ҂    ֏**** **** * *          ҂    ֏*غ3  3 i غi      ҂ غ҂ee*** **** * *          ҂    ֏**** **** * *          ҂    ֏**** **** * *          ҂    ֏**** **** * *          ҂    ֏*غ< < {غ{ǀ  ΁΁΁ǀ           ۀ!" ۀj   ǂт ӂ 5ӂ   ȃ &&ǂǂ  ܃܃Ј(Ј ҂Ј(Ɉ0  ҂  غ҂  # e e j j j j VA҂Ј(eeee   4               Ƌ ȋ ȋ     5    ϋ      9 Ê        Ƌ vs   4      ɏ ˏ ˏ * 2Տ B  ݏ  Տ33    'w 33 3  3 l333  3 c   'w3 Ě 3  5    ߎyk33 ܒ  l c utyĚ32   'wɏ Ě3    3    4       ϒג ْ ْϒҒ 5  Ғ ő ϒ ő,  ۑ ܒ  ϒ ϒג ۑő   4       Ȗ ʖ ʖ 2Ԗ ܖ  Ԗ33 33 3  3l333   5 3 cĚ3 Ě  3   ޕl^33 ܒ  32Ȗ Ě3      3    4  Ƙ Ƙ ˘˘      5   ݗ  ݗ~Ҙ+ Ƙ ܒƘ    ݗ     ͺ8Κ ?  Κ |  {-P |̚ ƚʚ ͺƚ ǚƚԚٚ   Қ ҚӚ ԚٚYԚٚҚ   ̠ ̠ ̠  ̠ ݠ  ݠ ݠ   ݠ        J u  aN   ̠ ̠ ݠ  ݠ  StreamState nodeۋ  trans    ۋ̠  ̠ out̠  ̠   ۋݠ  ݠ  aut_state ݠ ݠ ݠ ۋ H    ۋ ۋ  ̠ ۋ̠ ̠ ݠ ۋݠ  ݠ ݠ      4   J u  aN҂5  ߣߣߣ   ҂     ҂        غ҂ˡۡ҂444040bW`( ߣ eeˡeۡerdrHst < ǧǧ˧  <˧ǧغ <1ħh" " "" w  <"" غC  Cک҂ک 6҂ C˨   wUniqueEO+7NonNull#CC8f  xw  y x z  {z  | y{ }|  }zyD     :  <  DZZ*Z(internal error: entered unreachable code((<DZ     غ<ͯͯ <ͯ!҂! <s 8"B#" %#%$B& $&r$'r )Ű *'  )*(B V 5VU+B  + ( + F Hϸ/ Mϸ/  ML&B ߰ ,( .  .,-B   s   t   /  1҂  2/ 3'  :҂1230 @۱  s۱ ۱  0 5 6' 564!@² 8 : <, <,"@ ;< =  t   >/Ҳ 9  :;=>² Ͳ 5897#@Ͳ @ A- ؑ@A?$@  ?ʹ Cغ۴ D-ʹ ִCDB%@ִ ƴ B t ϸd KL  O'  N  ҂ Oϸd  : ҂KNJ'B۹  Q۹  QP(Bϸ ѹ  >JPI)Bѹ R  s   S  G  HIRS FGE*Bs:T UT8,Y̻ 5YX-B̻ZXԻZXԻ.BWZ  2/  \  \W[0B ][ ][1B [] _  5_^EB  b  bWa3B `a eeWd4Bcdʽg.jغm` oc oc5B no mnl6Bkl.jki7B%p s  q ڽh  i;pqʽսghfFBսs9>s;;= 9< /B tB? <s T  n   D  5 D ֏? ҂ D҂  7҂C m ҂֏ғm     ғ C    ?D D 5 D   :r NXXX$"҂#$  8҂"#!NXX% !X X& &%N(غ ('N )$%')$++*N >*)ON<D"- ." -.,N 0 1,ؑ01/N,3҂4 5,,3452N#q7 928 9786Lp;҂ <2Ԗ;<:B>غ ?,>?= B A  B, AB@!B D= DC"B  C'#  F҂  G2    ;҂FGE$B o H E H%I  o   IE K҂  LI ԖKLJ&A( :J IIB@ N  Q RQ RQ(B PR/ r// O  P@ NOM)B5 T  V= W/  q   X2 U  VWX TUS*B" Z  ]   ]\+B   [\"  Z[Y,B" Y/- _ _^.B  = b= ba3B   `   2 c:  `c  2  `84  a01  g   gf5B   ef i/ k=  kj6B! ؑijh7B p l6 d ehl d =69Lpqr  ;D @r p>Jpqr?@ IB6L DE o ' oFH EFB s E sGF6>L2NqNKDrDM    Q t {-Pؿ ғ  ֏  ғ  {-P X %$$)ֺŬ"    , ֏Һ    ֺ   {-P      @@/   ""       !֏ ؿ    u,/ next_state 2ۇ6 : next_node  = eof_state  I    %      s$  s      Э ¬   ᬬ             ¬¬       66    11 00  88    VoV      J  J(  ((&BUG: underflow subtraction not allowed&&j >0   j(( ܴ    I  ܴ    ܴ               ܴ ܴ        >    i i   33,, ,.,,,,.                                H  H HHHHH  H HHHHI( hI(iI(I(ǓI(I(I( hI(iI(I(ǓI(I(J lJqJǓJJJJ lJqJǓJJJW  W WاWWWWW  W WاWWWWX1 {X1|X1X1X1ЫX1X1X1 {X1|X1X1X1ЫX1X1`  ` ``````  ` `````a8 a8a8a8a8Ыa8a8a8 a8a8a8a8Ыa8a8i  i iiiii  i iiiij( j(j(j(j(j(j( j(j(j(j(j(                            & ҂& & & & & & ҂& & & & & / ҂/ / #  $R;X҂/ / / / ҂/ / / / /                         - ҂- - - - - - ҂- - - - - 6 ҂6 6 6 6 6 6 ҂6 6 6 6 6    ܋      ܋                  ڒ      ڒ               " " " " " " " " " " " "     -  B+ȗ ȗ   ȗ   ȗ                      џ& ҂џ&џ&џ&џ&џ&џ& ҂џ&џ&џ&џ&џ&٩/ ҂٩/٩/#  HN|҂٩/٩/٩/٩/ ҂٩/٩/٩/٩/٩/- ҂------ ҂-----6 ҂666666 ҂66666        " """""" """"" ȗ<  ȗȗ ȗȗ  C   C  C C C C C   C  C C C C C  C CCCCC  C CCCCC  C CCCCC  C CCCCD  D DDDDD  D DDDDE  E EEEEE  E EEEEF  F FFFFF  F FFFFϩ  ϩ ϩϩϩϩϩ  ϩ ϩϩϩϩ                  ~   ~   ;                            1  ҂1 11111  ҂1 1111      %3  [ 4 [ [)s[  [   s\   2\   m\  l\ o Crate `fst` is a library for efficiently storing and searching ordered sets or maps where the keys are byte strings. A key design goal of this crate is to support storing and searching *very large* sets or maps (i.e., billions). This means that much effort has gone in to making sure that all operations are memory efficient. Sets and maps are represented by a finite state machine, which acts as a form of compression on common prefixes and suffixes in the keys. Additionally, finite state machines can be efficiently queried with automata (like regular expressions or Levenshtein distance for fuzzy queries) or lexicographic ranges. To read more about the mechanics of finite state transducers, including a bibliography for algorithms used in this crate, see the docs for the [`raw::Fst`](raw/struct.Fst.html) type. # Installation Simply add a corresponding entry to your `Cargo.toml` dependency list: ```plain [dependencies] fst = "0.4" ``` The examples in this documentation will show the rest. # Overview of types and modules This crate provides the high level abstractions---namely sets and maps---in the top-level module. The `set` and `map` sub-modules contain types specific to sets and maps, such as range queries and streams. The `raw` module permits direct interaction with finite state transducers. Namely, the states and transitions of a transducer can be directly accessed with the `raw` module.  B # Example: stream to a file and memory map it for searching This shows how to create a `MapBuilder` that will stream construction of the map to a file. Notably, this will never store the entire transducer in memory. Instead, only constant memory is required during construction. For the search phase, we use the [`memmap`](https://crates.io/memmap) crate to make the file available as a `&[u8]` without necessarily reading it all into memory (the operating system will automatically handle that for you). ```rust,no_run # fn example() -> Result<(), fst::Error> { use std::fs::File; use std::io; use fst::{IntoStreamer, Streamer, Map, MapBuilder}; use memmap::Mmap; // This is where we'll write our map to. let mut wtr = io::BufWriter::new(File::create("map.fst")?); // Create a builder that can be used to insert new key-value pairs. let mut build = MapBuilder::new(wtr)?; build.insert("bruce", 1).unwrap(); build.insert("clarence", 2).unwrap(); build.insert("stevie", 3).unwrap(); // Finish construction of the map and flush its contents to disk. build.finish()?; // At this point, the map has been constructed. Now we'd like to search it. // This creates a memory map, which enables searching the map without loading // all of it into memory. let mmap = unsafe { Mmap::map(&File::open("map.fst")?)? }; let map = Map::new(mmap)?; // Query for keys that are greater than or equal to clarence. let mut stream = map.range().ge("clarence").into_stream(); let kvs = stream.into_str_vec()?; assert_eq!(kvs, vec![ ("clarence".to_owned(), 2), ("stevie".to_owned(), 3), ]); # Ok(()) # } # example().unwrap(); ``` # Example: case insensitive search We can perform case insensitive search on a set using a regular expression. We can use the [`regex-automata`](https://docs.rs/regex-automata) crate to compile a regular expression into an automaton: ```ignore use fst::{IntoStreamer, Set}; use regex_automata::dense; // regex-automata crate with 'transducer' feature fn main() -> Result<(), Box> { let set = Set::from_iter(&["FoO", "Foo", "fOO", "foo"])?; let pattern = r"(?i)foo"; // Setting 'anchored' is important, otherwise the regex can match anywhere // in the key. This would cause the regex to iterate over every key in the // FST set. let dfa = dense::Builder::new().anchored(true).build(pattern).unwrap(); let keys = set.search(&dfa).into_stream().into_strs()?; assert_eq!(keys, vec!["FoO", "Foo", "fOO", "foo"]); println!("{:?}", keys); Ok(()) } ``` Note that for this to work, the `regex-automata` crate must be compiled with the `transducer` feature enabled: ```toml [dependencies] fst = "0.4" regex-automata = { version = "0.1.9", features = ["transducer"] } ``` # Example: searching multiple sets efficiently Since queries can search a transducer without reading the entire data structure into memory, it is possible to search *many* transducers very quickly. This crate provides efficient set/map operations that allow one to combine multiple streams of search results. Each operation only uses memory proportional to the number of streams. The example below shows how to find all keys that start with `B` or `G`. The example below uses sets, but the same operations are available on maps too. ```rust use fst::automaton::{Automaton, Str}; use fst::set; use fst::{IntoStreamer, Set, Streamer}; # fn main() { example().unwrap(); } fn example() -> Result<(), Box> { let set1 = Set::from_iter(&["AC/DC", "Aerosmith"])?; let set2 = Set::from_iter(&["Bob Seger", "Bruce Springsteen"])?; let set3 = Set::from_iter(&["George Thorogood", "Golden Earring"])?; let set4 = Set::from_iter(&["Kansas"])?; let set5 = Set::from_iter(&["Metallica"])?; // Create the matcher. We can reuse it to search all of the sets. let matcher = Str::new("B") .starts_with() .union(Str::new("G").starts_with()); // Build a set operation. All we need to do is add a search result stream // for each set and ask for the union. (Other operations, like intersection // and difference are also available.) let mut stream = set::OpBuilder::new() .add(set1.search(&matcher)) .add(set2.search(&matcher)) .add(set3.search(&matcher)) .add(set4.search(&matcher)) .add(set5.search(&matcher)) .union(); // Now collect all of the keys. Alternatively, you could build another set // here using `SetBuilder::extend_stream`. let mut keys = vec![]; while let Some(key) = stream.next() { keys.push(String::from_utf8(key.to_vec())?); } assert_eq!(keys, vec![ "Bob Seger", "Bruce Springsteen", "George Thorogood", "Golden Earring", ]); Ok(()) } ``` # Memory usage An important advantage of using finite state transducers to represent sets and maps is that they can compress very well depending on the distribution of keys. The smaller your set/map is, the more likely it is that it will fit into memory. If it's in memory, then searching it is faster. Therefore, it is important to do what we can to limit what actually needs to be in memory. This is where automata shine, because they can be queried in their compressed state without loading the entire data structure into memory. This means that one can store a set/map created by this crate on disk and search it without actually reading the entire set/map into memory. This use case is served well by *memory maps*, which lets one assign the entire contents of a file to a contiguous region of virtual memory. Indeed, this crate encourages this mode of operation. Both sets and maps can be constructed from anything that provides an `AsRef<[u8]>` implementation, which any memory map should. This is particularly important for long running processes that use this crate, since it enables the operating system to determine which regions of your finite state transducers are actually in memory. Of course, there are downsides to this approach. Namely, navigating a transducer during a key lookup or a search will likely follow a pattern approximating random access. Supporting random access when reading from disk can be very slow because of how often `seek` must be called (or, in the case of memory maps, page faults). This is somewhat mitigated by the prevalence of solid state drives where seek time is eliminated. Nevertheless, solid state drives are not ubiquitous and it is possible that the OS will not be smart enough to keep your memory mapped transducers in the page cache. In that case, it is advisable to load the entire transducer into your process's memory (e.g., calling `Set::new` with a `Vec`). # Streams Searching a set or a map needs to provide some way to iterate over the search results. Idiomatic Rust calls for something satisfying the `Iterator` trait to be used here. Unfortunately, this is not possible to do efficiently because the `Iterator` trait does not permit values emitted by the iterator to borrow from the iterator. Borrowing from the iterator is required in our case because keys and values are constructed *during iteration*. Namely, if we were to use iterators, then every key would need its own allocation, which could be quite costly. Instead, this crate provides a `Streamer`, which can be thought of as a streaming iterator. Namely, a stream in this crate maintains a single key buffer and lends it out on each iteration. For more details, including important limitations, see the `Streamer` trait. # Quirks There's no doubt about it, finite state transducers are a specialty data structure. They have a host of restrictions that don't apply to other similar data structures found in the standard library, such as `BTreeSet` and `BTreeMap`. Here are some of them: 1. Sets can only contain keys that are byte strings. 2. Maps can also only contain keys that are byte strings, and its values are limited to unsigned 64 bit integers. (The restriction on values may be relaxed some day.) 3. Creating a set or a map requires inserting keys in lexicographic order. Often, keys are not already sorted, which can make constructing large sets or maps tricky. One way to do it is to sort pieces of the data and build a set/map for each piece. This can be parallelized trivially. Once done, they can be merged together into one big set/map if desired. A somewhat simplistic example of this procedure can be seen in `fst-bin/src/merge.rs` from the root of this crate's repository. B%3  [ 4 [ [)s[  [   s\   2\   m\  l\ [[ [[[[[[[[[ [ [\\\ \ \'\ \ \\\ \ #$io$$'  7  7 '  7  7ĕ -  7  7 J  ? -  7  7    J    ?  @ ԛ  ?Қf !! Й?  3  7  7  \ \)   %%& %'>' %(    ' f 5 A `Result` type alias for this crate's `Error` type.-8 o **v    'wv v  ,  ++ ,  .!  -- .  08   7 7 7  7  7GGGEGEGEG EGEGEQ ! >S 7/ / 0   2>   7  7 {-P  71 1 2 \\\\automaton/mod.rs\\\4hil{| = Automaton describes types that behave as a finite automaton.@I All implementors of this trait are represented by *byte based* automata.LK Stated differently, all transitions in the automata correspond to a singleN byte in the input.> This implementation choice is important for a couple reasons:AI 1. The set of possible transitions in each node is small, which may makeL" efficient memory usage easier.%I 2. The finite state transducers in this crate are all byte based, so anyL2 automata used on them must also be byte based.5F In practice, this does present somewhat of a problem, for example, ifIL you're storing UTF-8 encoded strings in a finite state transducer. ConsiderOJ using a `Levenshtein` automaton, which accepts a query string and an editMH distance. The edit distance should apply to some notion of *character*,KJ which could be represented by at least 1-4 bytes in a UTF-8 encoding (forMJ some definition of "character"). Therefore, the automaton must have UTF-8MI decoding built into it. This can be tricky to implement, so you may find LH the [`utf8-ranges`](https://crates.io/crates/utf8-ranges) crate useful. K 44456789:;<=?A56789:;<=?A  - The type of the state used in the automaton. 0 44 1 Returns a single start state for this automaton. 4 9 This method should always return the same value for each < implementation.   7  74 4 6  06 Returns true if and only if `state` is a match state. 9  7 7  7  74 4 7  1H Returns true if and only if `state` can lead to a match in zero or more K steps. D If this returns `false`, then no sequence of inputs from this stateGG should ever produce a match. If this does not follow, then those matchJH states may never be reached. In other words, behavior may be incorrect.KE If this returns `true` even when no match is possible, then behaviorHB will be correct, but callers may be forced to do additional work.E  7 7  7  744 89E Returns true if and only if `state` matches and must match no matterH what steps are taken.F If this returns `true`, then every sequence of inputs from this stateIG produces a match. If this does not follow, then those match states mayJ= never be reached. In other words, behavior may be incorrect.@H If this returns `false` even when every sequence of inputs will lead toKH a match, then behavior will be correct, but callers may be forced to doK additional work. 7 7  7  744 9?2 Return the next state given `state` and an input.5 7 7  7  744 : <D If applicable, return the next state when the end of a key is seen.G  7 7  7  744 ;GH Returns an automaton that matches the strings that start with somethingK this automaton matches. 44 <[H Returns an automaton that matches the strings matched by either this orK the other automaton.4>>44  = iG Returns an automaton that matches the strings matched by both this andJ 4@@4  ? FB Returns an automaton that matches the strings not matched by thisE automaton. 44  A *CDDC 4 EFGHIJK      BB!! 7  7B!B FC!!,! 7 7  7  7B!B GC! !"-"  7 7  7  7B"B HC" ""5# 7 7  7  7B#B IC# ##8# 7 7  7  7B#B JC# #$$@$  7 7  7  75 {-PB$B KC$ $-MM  n n3xMN---&3 Constructs automaton that matches an exact string.-6- MLL NMn-.PPQRSTU... .OO/ / 7  7O/O RP//// 7 7  7  7O/O SP//000  7 7  7  7O0O TP001@1 7 7  7  7O1O UP111<WW  o o3FWX<<=37 Constructs automaton that matches input containing the<: specified subsequence.<= WVV XW= >&ZZ[\]^_`>>> >YY>> 7  7Y>Y \Z>?*? 7 7  7  7Y?Y ]Z?@&@  7 7  7  7Y@Y ^Z@@3@ 7 7  7  7Y@Y _Z@A3A 7 7  7  7YAY `ZAADۦbcdefgD DaaEE 7  7ۦaEa cEE"E 7 7  7ۦ  7aEa dEF#F  7 7  7ۦ  7aFa eFF+F 7 7  7ۦ  7aGa fGG%G 7 7  7ۦ  7aGa gGI(+ The `Automaton` state for `StartsWith`.I.IjjI4I ikǓI(I3Ǔhh iIIII3hhǓJ&J3mmJJ ǓX?7TZnopqoqrǓJJJJ3llǓJJ3llǓJJ3ll pJJ3Ǔll qJJ3llJ.ttJJ uvwxyzJJK KssK%K 7  7sKs vKM6M 7 7  7  7sMs wM MO7O  7 7  7  7sOs xO OQ?Q 7 7  7  7sQs yQ QRkR 7 7  7  7sRs zR SSX1) The `Automaton` state for `Union`.X,X }~}~XXX 4X y `|ЫX1X 3Ы{{ |XXXXXX3{{YY3{{ЫY:YYY Y اYYYYY YY#Y7 7اY ZZ4Z77 7ا 7Z Z Z[5[ 77 7ا 7[ [ [\=\77 7ا 7\ \ \^H^77 7ا 7^ ^ ^^a80 The `Automaton` state for `Intersection`.`3aaaa a 0UЫa8a3Ы aaaaaa3aa3ЫaAaaa a aaaab bb*b7 7b bc;c77 7 7c c cd<d 77 7 7d d deDe77 7 7e e egug77 7 7g g ggj(+ The `Automaton` state for `Complement`.i.jjj W)X#Zj(j3 jjjj3j.jj jjk kk%k7 7k kl6l77 7 7l l ll7m 77 7 7m m mm?m77 7 7n n nnkn77 7 7n n oo] ]]]map.rs]]]    % + %1 8oX   oX   e 4 >| {  m  l   )     + $ 1 1 E* X X e e u |   '         B Create a `Map` from an iterator of lexicographically ordered byteE  strings and associated values."  H If the iterator does not yield unique keys in lexicographic order, thenK  an error is returned.  C Note that this is a convenience function to build a map in memory.F = To build a map that streams to an arbitrary `io::Write`, use@  `MapBuilder`.     8 8މ           % > Creates a map from its representation as a raw byte sequence.A  F This accepts anything that can be cheaply converted to a `&[u8]`. TheI E caller is responsible for guaranteeing that the given bytes refer toH H a valid FST. While memory safety will not be violated by invalid input,K 8 a panic could occur while reading the FST at any point.;   # Example   ```no_run  use fst::Map;  6 // File written from a build script using MapBuilder.9 $ # const IGNORE: &str = stringify! {' J static FST: &[u8] = include_bytes!(concat!(env!("OUT_DIR"), "/map.fst"));M  # };  # static FST: &[u8] = &[];  " let map = Map::new(FST).unwrap();%  ```   c ": & Tests the membership of a single key. )       ```rust     G let map = Map::from_iter(vec![("a", 1), ("b", 2), ("c", 3)]).unwrap();!J ! ) assert_eq!(map.contains_key("b"), true);!, * assert_eq!(map.contains_key("z"), false);"- Ǡ" " 7 7" " " " Y" " " &8 + Retrieves the value associated with a key.#. # 4 If the key does not exist, then `None` is returned.#7 $ $ $ $ $ $ $J % # assert_eq!(map.get("b"), Some(2));%&  assert_eq!(map.get("z"), None);%# Ǡ& & 7 7& ͥ& & & Y& & & ' ݡ0" D Return a lexicographically ordered stream of all key-value pairs in'G  this map.' ( G While this is a stream, it does require heap space proportional to the(J  longest key in the map.( ) C If the map is memory mapped, then no further heap space is needed.)F @ Note though that your operating system may fill your page cache)C D (which will cause the resident memory usage of the process to go up*G  correspondingly).* + + + F Since streams are not iterators, the traditional `for` loop cannot be+I % used. `while let` is useful instead:+( , , ( use fst::{IntoStreamer, Streamer, Map};,+ , ,J  let mut stream = map.stream();-" -  let mut kvs = vec![];- ) while let Some((k, v)) = stream.next() {.,  kvs.push((k.to_vec(), v));."  }.  assert_eq!(kvs, vec![.  (b"a".to_vec(), 1),/  (b"b".to_vec(), 2),/  (b"c".to_vec(), 3),/  ]);/ Ǡ/ 0 7 7!  Țt7ۦ0 ՘0 5 C Return a lexicographically ordered stream of all keys in this map.0F 1 @ Memory requirements are the same as described on `Map::stream`.1C 1 2 2 2 2+ 2 2J  let mut stream = map.keys();3 3  let mut keys = vec![];3 $ while let Some(k) = stream.next() {4'  keys.push(k.to_vec());4 4 * assert_eq!(keys, vec![b"a", b"b", b"c"]);4- Ǡ5 5 7 7#  Qtv$9G75  5 :" D Return a stream of all values in this map ordered lexicographically5G # by each value's corresponding key.6& 6 ִ6C 7 7 7 7 7+ 8 8J  let mut stream = map.values();8" 9  let mut values = vec![];9 $ while let Some(v) = stream.next() {9'  values.push(v);9 : # assert_eq!(values, vec![1, 2, 3]);:& Ǡ: : 7 7$  B7:  : C( $ Return a builder for range queries.;' ; C A range query returns a subset of key-value pairs in this map in a;F $ range given in lexicographic order.<' < ִ > > 5 Returns only the key-value pairs in the range given.>8 > > >+ ?  let map = Map::from_iter(vec![?" 6 ("a", 1), ("b", 2), ("c", 3), ("d", 4), ("e", 5),?9  ]).unwrap();@ < let mut stream = map.range().ge("b").lt("e").into_stream();@? @ @ ҰA, A" A A B B  (b"d".to_vec(), 4),B βB ǠB C 7 7%  E#7ۦC  C PB / Executes an automaton on the keys of this map.C2 D ? Note that this returns a `StreamBuilder`, which can be used toDB : add a range query to the search (see the `range` method).D= E ִEC F F F F An implementation of regular expressions for `Automaton` is availableFI E in the `regex-automata` crate with the `fst1` feature enabled, whichFH  can be used to search maps.G G G H D An implementation of subsequence search for `Automaton` can be usedHG  to search maps:H H H ! use fst::automaton::Subsequence;I$ I+ I $ # fn main() { example().unwrap(); }I' 9 fn example() -> Result<(), Box> {J< # let map = Map::from_iter(vec![J&  ("a foo bar", 1),K  ("foo", 2),K  ("foo1", 3),K  ("foo2", 4),K  ("foo3", 5),K  ("foobar", 6),L  ]).unwrap();L L + let matcher = Subsequence::new("for");L. 9 let mut stream = map.search(&matcher).into_stream();M< M  let mut kvs = vec![];M - while let Some((k, v)) = stream.next() {M0 7 kvs.push((String::from_utf8(k.to_vec())?, v));N:  }N  assert_eq!(kvs, vec![N A ("a foo bar".to_string(), 1), ("foobar".to_string(), 6),OD  ]);O O  Ok(())O P ǠP P 7 7҂%  E#7҂P ҂P 4҂P ҂P eP P P \m B Executes an automaton on the keys of this map and yields matchingQE ? keys along with the corresponding matching states in the givenQB R R H Note that this returns a `StreamWithStateBuilder`, which can be used toRK S= S ִSC T \ 7 7҂&  |)7҂\ \ \ ҂\ e\ \ \ ^ , Returns the number of elements in this map.]/ ^ 7 7^  ^ _ / Returns true if and only if this map is empty.^2 _ 7 7_  _ m! 7 Creates a new map operation with this map added to it._: ` ? The `OpBuilder` type can be used to add additional map streams`B D and perform set operations like union, intersection, difference and`G G symmetric difference on the keys of the map. These set operations alsoaJ F allow one to specify how conflicting values are merged in the stream.bI b b b G This example demonstrates a union on multiple map streams. Notice thatbJ B the stream returned from the union is not a sequence of key-valuecE A pairs, but rather a sequence of keys associated with one or moredD D values. Namely, a key is associated with each value associated withdG ) that same key in the all of the streams.e, e e  use fst::{Streamer, Map};e  use fst::map::IndexedValue;f f  let map1 = Map::from_iter(vec![f# " ("a", 1), ("b", 2), ("c", 3),f% g  let map2 = Map::from_iter(vec![g# % ("a", 10), ("y", 11), ("z", 12),g( h h . let mut union = map1.op().add(&map2).union();h1 h h ) while let Some((k, vs)) = union.next() {h, ) kvs.push((k.to_vec(), vs.to_vec()));i, i i  (b"a".to_vec(), vec![j - IndexedValue { index: 0, value: 1 },j0 . IndexedValue { index: 1, value: 10 },j1  ]),k @ (b"b".to_vec(), vec![IndexedValue { index: 0, value: 2 }]),kC @ (b"c".to_vec(), vec![IndexedValue { index: 0, value: 3 }]),kC A (b"y".to_vec(), vec![IndexedValue { index: 1, value: 11 }]),lD A (b"z".to_vec(), vec![IndexedValue { index: 1, value: 12 }]),lD βm Ǡm m 7 7(  ~i7m  m o$ C Returns a reference to the underlying raw finite state transducer.nF o 7 7 7o  o p$ 4 Returns the underlying raw finite state transducer.o7 p p uo > Maps the underlying data of the fst Map to another data type.pA q q q D This example shows that you can map an fst Map based on a `Vec`qG @ into an fst Map based on a `Cow<[u8]>`, it can also work with arC + reference counted type (e.g. `Arc`, `Rc`).r. s Ǡs  use std::borrow::Cow;s s s s ( let map: Map> = Map::from_iter(s+ 4 [("hello", 12), ("world", 42)].iter().cloned(),t7  ).unwrap();t t D let map_on_cow: Map> = map.map_data(Cow::Owned).unwrap();tG Ǡu u ЏЏu ֏u Џv Џ֏v ֏v Џ֏u u u u u u w w w  x* x x x x x8 x 777 7 7GGGEGEGEG EGEGEQ ! >S7x  x x |1 | | | | |# |  e| }2 0 Returns the underlying finite state transducer.}3 } } } } ~ ~ 7 7 7~  ~ ~< ~ ~ ~ ~ ~ ~ ~ ~      !  Țtۦ"      A builder for creating a map.! Ԁ J This is not your average everyday builder. It has two important qualities؀M 6 that make it a bit unique from what you might expect:9  L 1. All keys must be added in lexicographic order. Adding a key out of orderO K will result in an error. Additionally, adding a duplicate key will alsoN G result in an error. That is, once a key is associated with a value,J 6 that association can never be modified or deleted.΃9 I 2. The representation of a map is streamed to *any* `io::Write` as it isL D built. For an in memory representation, this can be a `Vec`.ՄG  E Point (2) is especially important because it means that a map can beH I constructed *without storing the entire map in memory*. Namely, since itL C works with any `io::Write`, it can be streamed directly to a file.F  K With that said, the builder does use memory, but **memory usage is boundedN D to a constant size**. The amount of memory used trades off with theчG K compression ratio. Currently, the implementation hard codes this trade offN J which can result in about 5-20MB of heap usage during construction. (N.B.M I Guaranteeing a maximal compression ratio requires memory proportional toL D the size of the map, which defeats some of the benefit of streamingG C it to disk. In practice, a small bounded amount of memory achievesˊF & close-to-minimal compression ratios.))  J The algorithmic complexity of map construction is `O(n)` where `n` is theM % number of elements added to the map.(   # Example: build in memory ڌ J This shows how to use the builder to construct a map in memory. Note thatތM I `Map::from_iter` provides a convenience function that achieves this sameL 5 goal without needing to explicitly use `MapBuilder`.8   4 use fst::{IntoStreamer, Streamer, Map, MapBuilder};Ž7  & let mut build = MapBuilder::memory();) # build.insert("bruce", 1).unwrap();& & build.insert("clarence", 2).unwrap();Ϗ) $ build.insert("stevie", 3).unwrap();'  L // You could also call `finish()` here, but since we're building the map inO < // memory, there would be no way to get the `Vec` back.? ) let bytes = build.into_inner().unwrap();,  K // At this point, the map has been constructed, but here's how to read it.N $ let map = Map::new(bytes).unwrap();' $ let mut stream = map.into_stream();ݒ'  Ұ, ̓"    (b"bruce".to_vec(), 1),  (b"clarence".to_vec(), 2),"  (b"stevie".to_vec(), 3),Ҕ β Ǡ   # Example: stream to file  = This shows how to do stream construction of a map to a file.@   ```rust,no_run  use std::fs::File;  use std::io;  7  D let mut wtr = io::BufWriter::new(File::create("map.fst").unwrap());G / let mut build = MapBuilder::new(wtr).unwrap();2 & ) ɏ' ݘ H // If you want the writer back, then call `into_inner`. Otherwise, thisK . // will finish construction and call `flush`.1  build.finish().unwrap();ߙ  N F // NOTE: Normally, one would memory map a file instead of reading itsϚI # // entire contents on to the heap.& @ let map = Map::new(std::fs::read("map.fst").unwrap()).unwrap();C '  ҰƜ, "    ֝"  β Ǡ   #gnzyN    Þ Þ ֞ & . Create a builder that builds a map in memory.1  % 5 Finishes the construction of the map and returns it.8         + ? Create a builder that builds a map by writing it to `wtr` in aڡB  streaming fashion. â  ?Ǣ H * Insert a new key-value pair into the map.- ޣ H Keys must be convertible to byte strings. Values must be a `u64`, whichK ? is a restriction of the current implementation of finite stateB > transducers. (Values may one day be expanded to other types.)A å D If a key is inserted that is less than or equal to any previous key˥G D added, then an error is returned. Similarly, if there was a problemG 8 writing to the underlying writer, an error is returned.;  7 7 ͥ  Ƨ Y̧  ԧ    + Calls insert on each item in the iterator.. ̨ D If an error occurred while adding an element, processing is stoppedԨG  and the error is returned. é ѥ˩G G ;  7 7 ͥ   8 8  ǫ      ݡ ) Calls insert on each item in the stream., ׭ D Note that unlike `extend_iter`, this is not generic on the items in߭G  the stream.  ѥǮG G ߯;  7 7      :         ñ,   ر  ð ɰ         DZ DZ ! @ Finishes the construction of the map and flushes the underlyingòC D writer. After completion, the data written to `W` may be read usingG $ one of `Map`'s constructor methods.׳'    $ B Just like `finish`, except it returns the underlying writer afterʴE  flushing it.     + Gets a reference to the underlying writer..  7 7 7   " = Returns the number of bytes written to the underlying writer@  7 7Ʒ  Ƿ & B A lexicographically ordered stream of key-value pairs from a map.E ĸ F The `A` type parameter corresponds to an optional automaton to filterȸI . the stream. By default, no filtering is done.1 Ĺ J The `'m` lifetime parameter refers to the lifetime of the underlying map.ȹM   ޺ !  Țt҂Țt   !   $)nq҂&   ҂    ۦ  9  4          ̻0 ϻ   {-P ܻ  ݡü$ ̼ ϼ !  Țt҂ȼ ȼ ̼ ̼ 1 ? Convert this stream into a vector of byte strings and outputs.B  E Note that this creates a new allocation for every key in the stream.H   ҂ 7 B Convert this stream into a vector of Unicode strings and outputs.E  G If any key is not valid UTF-8, then iteration on the stream is stoppedJ ( and a UTF-8 decoding error is returned.+  H   ҂ + 3 Convert this stream into a vector of byte strings.6  H   ҂ 1 6 Convert this stream into a vector of Unicode strings.9  J +  H   ҂ $ . Convert this stream into a vector of outputs.1   ҂ / I A lexicographically ordered stream of key-value-state triples from a mapL  and an automaton.  I The key-values are from the map while the states are from the automaton.L  ںI 1  M    #  $R;X҂$R;X  # e e j j j j VA҂/   ҂    ۦ  G              :    {-P   ݡ 7 A lexicographically ordered stream of keys from a map.:  M  #  Qtv$9GQtv$9G   !   $)nqۦ       &        )    {-P   ݡ I A stream of values from a map, lexicographically ordered by each value'sL  corresponding key.  M  $  BB   !   $)nqۦ       (       $      ݡ- 5 A builder for constructing range queries on streams.8  @ Once all bounds are set, one should call `into_stream` to get aC  `Stream`.  F Bounds are not additive. That is, if `ge` is called twice on the sameI ' builder, then the second setting wins.*  ںI 1  M   %  E#҂E#  % e e e esE#"'\҂-   ҂    ۦ  +   %  E#҂    A * Specify a greater-than-or-equal-to bound.-  ֏  ҂֏    A  Specify a greater-than bound.!  ֏  ҂֏    A ' Specify a less-than-or-equal-to bound.*  ֏  ҂֏    A  Specify a less-than bound.  ֏  ҂֏    D   Ǯ           !  Țt%  Ǯ  6 K A builder for constructing range queries on streams that include automatonN  states.  K In general, one should use `StreamBuilder` unless you have a specific needN K for accessing the states of the underlying automaton that is being used toN  filter this stream.  C   I *  ںI 1  M   &  |)҂|)  & e e e eRR J҂6   ҂    ۦ" " 4   &  |)҂    a -  ֏  ҂֏    a !  ֏  ҂֏    a *  ֏  ҂֏    a   ֏  ҂֏    V                #  $R;X.     H A builder for collecting map streams on which to perform set operationsK  on the keys of maps.  E Set operations include intersection, union, difference and symmetricH K difference. The result of each set operation is itself a stream that emitsN C pairs of keys and a sequence of each occurrence of that key in theF B participating streams. This information allows one to perform setE L operations on maps and customize how conflicting output values are handled.O  > All set operations work efficiently on an arbitrary number ofA ; streams with memory proportional to the number of streams.>  L The algorithmic complexity of all set operations is `O(n1 + n2 + n3 + ...)`O E where `n1, n2, n3, ...` correspond to the number of elements in eachH  stream.  J The `'m` lifetime parameter refers to the lifetime of the underlying set.M  (  ~i~i(Ur M        (  ~i   $ Create a new set operation builder.'  ڏ  $ Add a stream to this set operation.'  3 This is useful for a chaining style pattern, e.g.,6 - `builder.add(stream1).add(stream2).union()`.0  G The stream must emit a lexicographically ordered sequence of key-valueJ  pairs.  ڏڏ    :        ,               '  J ’  7 7ڏ     :      Е  ,               @ Performs a union operation on all streams that have been added.C  C Note that this returns a stream of `(&[u8], &[IndexedValue])`. TheF F first element of the tuple is the byte string key. The second elementI G of the tuple is a list of all occurrences of that key in participatingJ G streams. The `IndexedValue` contains an index and the value associatedJ A with that key in that stream. The index uniquely identifies eachD C stream, which is an integer that is auto-incremented when a streamF . is added to this operation (starting at `0`).ς1     +   # %  # % ("a", 11), ("y", 12), ("z", 13),( υ  1   Ȇ, ,   ҇ 0 . IndexedValue { index: 1, value: 11 },1 ߈ C C A (b"y".to_vec(), vec![IndexedValue { index: 1, value: 12 }]),D A (b"z".to_vec(), vec![IndexedValue { index: 1, value: 13 }]),ȊD β Ǡ  ڏ*  @zWʶ ċ - H Performs an intersection operation on all streams that have been added.K Ҍ ͛ڌF I J ĝŽJ D ڏF 1 ې    +   # %  В# (   < let mut intersection = map1.op().add(&map2).intersection();“?   0 while let Some((k, vs)) = intersection.next() {3 ,    ߕ0 ͢1 ʖ βږ Ǡ  ڏ+  L  ) H Performs a difference operation with respect to the first stream added.K C That is, this returns a stream of all elements in the first streamF : that don't exist in any other stream that has been added.= ę ̙͛F I J ĝJ D ̜F 1 ͝ J While the interface is the same for all the operations combining multiple՝M I maps, due to the nature of `difference` there's exactly one `IndexValue`L  for each yielded value.     ʟ   # %  # ( ԡ  8 let mut difference = map1.op().add(&map2).difference();;   . while let Some((k, vs)) = difference.next() {ע1 ,  ȣ C C β Ǡ  ڏ+  O+rbFM(]  < E Performs a symmetric difference operation on all of the streams thatH  have been added.Ȧ  F When there are only two streams, then the keys returned correspond toI : keys that are in either stream but *not* in both streams.=  E More generally, for any number of streams, keys that occur in an oddH  number of streams are returned.Ψ#  ͛F ɩI J ĝJ D F ɬ1     +   # % ߮ # ( ɯ ޯ F let mut sym_difference = map1.op().add(&map2).symmetric_difference();I   2 while let Some((k, vs)) = sym_difference.next() {ڰ5 , ű ϱ C C D ƳD β Ǡ  ڏ,  7;#% Ѵ *          Ͷ  ĵ    ,  : ׯ    ĵ ĵ     K  7 7ׯř ř 8ř ř8  ř    0                ,  ɸ:       ͸ ͸   ŹT ȹ řҹ    řչ ҹ ҹ  H A stream of set union over multiple map streams in lexicographic order.K  »M  *  @zWʶ@zWʶ*WWWn'B       ' װ        ?   װ {-P   H A stream of set intersection over multiple map streams in lexicographicK  order.Ѿ ܾ M  +  LL+WWW +j-W   ƿ ƿ ʿ ʿ .         ?    {-P   F A stream of set difference over multiple map streams in lexicographicI   K The difference operation is taken with respect to the first stream and theN H rest of the streams. i.e., All elements in the first stream that do notK  appear in any other streams.  M  +  O+rbFM(]O+rbFM(]+XYWW¡ #Q       , ߱        ?   ߱ {-P  " B A stream of set symmetric difference over multiple map streams inE  lexicographic order.  M  ,  7;#% 7;#%,WWW&&RFt0,"       5         ?    {-P     ȗ B+ȗ  ȗ ȗ    ȗ,     $        8    {-P   ݡ] ]]%]set.rs]]]   %+%1 8oX   oX   e 4 >|m  l ) +$1 1 E*X X e e u |'    ޳ |B Create a `Set` from an iterator of lexicographically ordered byte E strings.  F If the iterator does not yield values in lexicographic order, then an I error is returned.  C Note that this is a convenience function to build a set in memory. F= To build a set that streams to an arbitrary `io::Write`, use @ `SetBuilder`.      8        %> Creates a set from its representation as a raw byte sequence.AIHK; ӝ  use fst::Set;6 // File written from a build script using SetBuilder.9О'J static FST: &[u8] = include_bytes!(concat!(env!("OUT_DIR"), "/set.fst"));M֟" let set = Set::new(FST).unwrap();%Ǡ c6)  5 let set = Set::from_iter(&["a", "b", "c"]).unwrap();8% assert_eq!(set.contains("b"), true);(& assert_eq!(set.contains("z"), false);)Ǡ7 7ͥ  Y "C Return a lexicographically ordered stream of all keys in this set.FJ longest key in the set.C If the set is memory mapped, then no further heap space is needed.FCGҭ I( ( use fst::{IntoStreamer, Streamer, Set};+8 let mut stream = set.stream();"& while let Some(key) = stream.next() {) keys.push(key.to_vec());   -Ǡ  7 7!  g 7ۦ  '(!'!G A range query returns a subset of keys in this set in a range given in!J""@ Memory requirements are the same as described on `Set::stream`."CͿ#H# ## $* Returns only the keys in the range given.$-$$ $+%? let set = Set::from_iter(&["a", "b", "c", "d", "e"]).unwrap();%B< let mut stream = set.range().ge("b").lt("e").into_stream();%?&&&)& '* assert_eq!(keys, vec![b"b", b"c", b"d"]);'-Ǡ''7 7%  >FZ i7ۦ( (2B/ Executes an automaton on the keys of this set.(2))B)=**C** ++G to search sets:+++ ,$,+,,'-< let set = Set::from_iter(&[-#> "a foo bar", "foo", "foo1", "foo2", "foo3", "foobar",-A....9 let mut stream = set.search(&matcher).into_stream();/</ let mut keys = vec![];/* while let Some(key) = stream.next() {0-5 keys.push(String::from_utf8(key.to_vec())?);080  assert_eq!(keys, vec![1 "a foo bar", "foobar",1"1 111Ǡ127 7҂%  >FZ i7҂222  ҂2e222=mD Executes an automaton on the values of this set and yields matching3GA values along with the corresponding matching states in the given3D444K5=5ִ5C6=7 7҂&  ݺNnJ7҂>=>  ҂>e>==?, Returns the number of elements in this set.?/?7 7? ?@/ Returns true if and only if this set is empty.@2@7 7@ @G!7 Creates a new set operation with this set added to it.A:A? The `OpBuilder` type can be used to add additional set streamsABBG symmetric difference.CCC CC C+D6 let set1 = Set::from_iter(&["a", "b", "c"]).unwrap();D96 let set2 = Set::from_iter(&["a", "y", "z"]).unwrap();D9E. let mut union = set1.op().add(&set2).union();E1EE% while let Some(key) = union.next() {E(F F6 assert_eq!(keys, vec![b"a", b"b", b"c", b"y", b"z"]);F9ǠGG7 7(  ڝ )7G GLD Returns true if and only if the `self` set is disjoint with the setGG `stream`.H HG `stream` must be a lexicographically ordered sequence of byte strings.HJII II I+JJ96 let set2 = Set::from_iter(&["x", "y", "z"]).unwrap();J9K+ assert_eq!(set1.is_disjoint(&set2), true);K.K1 let set3 = Set::from_iter(&["a", "c"]).unwrap();K4L, assert_eq!(set1.is_disjoint(&set3), false);L/ǠLL 7 7  LLL M3 M M M M% M  LLLLLLLLMMMMSD Returns true if and only if the `self` set is a subset of `stream`.NGOOJPP PP PPP9Q9Q* assert_eq!(set1.is_subset(&set2), false);Q-RR4R* assert_eq!(set1.is_subset(&set3), false);R-) assert_eq!(set3.is_subset(&set1), true);S,ǠSS 7 7  SSS T3 T T T T% T  SSSSSSSSTTTTZF Returns true if and only if the `self` set is a superset of `stream`.UIVVJVV WW WWW9W9X, assert_eq!(set1.is_superset(&set2), false);X/XX4Y+ assert_eq!(set1.is_superset(&set3), true);Y., assert_eq!(set3.is_superset(&set1), false);Y/ǠZZ 7 7  ZZZ Z3 [ [ [ [% [  ZZZZZZZZZZ[[]$\F]7 7 7] ]^$]7^^co> Maps the underlying data of the fst Set to another data type.^A__ _D This example shows that you can map an fst Set based on a `Vec`_G@ into an fst Set based on a `Cow<[u8]>`, it can also work with a`C`.aǠaaaaa( let set: Set> = Set::from_iter(a+ &["hello", "world"],bbbD let set_on_cow: Set> = set.map_data(Cow::Owned).unwrap();bGǠccЏccd dd  Џ֏ccccccd޳ee޳ e*ff fff8f777 7 7GGGEGEGEG EGEGEQ ! >S7f ffi2i3ij iij j7 7 7j jj<1kk kkkkkkk k k k!  g 1ۦl"l  1ll1lm llm#m em A builder for creating a set.n!nnMn9ooO will result in an error.pI 2. The representation of a set is streamed to *any* `io::Write` as it ispLpGqE Point (2) is especially important because it means that a set can beqHI constructed *without storing the entire set in memory*. Namely, since itrLrFssNޅsGtNuMއuLH the size of the set, which defeats the benefit of streaming it to disk.vKH In practice, a small bounded amount of memory achieves close-to-minimalvK compression ratios.)wwJ The algorithmic complexity of set construction is `O(n)` where `n` is thewM% number of elements added to the set.x(xxxJ This shows how to use the builder to construct a set in memory. Note thatxMI `Set::from_iter` provides a convenience function that achieves this sameyL5 goal without needing to explicitly use `SetBuilder`.z8zz 4 use fst::{IntoStreamer, Streamer, Set, SetBuilder};z7{& let mut build = SetBuilder::memory();{) build.insert("bruce").unwrap();{## build.insert("clarence").unwrap();{&! build.insert("stevie").unwrap();|$|L // You could also call `finish()` here, but since we're building the set in|Oߐ|?},}K // At this point, the set has been constructed, but here's how to read it.}N$ let set = Set::new(bytes).unwrap();~'$ let mut stream = set.into_stream();~')  assert_eq!(keys, vec![D "bruce".as_bytes(), "clarence".as_bytes(), "stevie".as_bytes(),Gβ݀Ǡ: This shows how to stream construction of a set to a file.=сՁ֖7̂D let mut wtr = io::BufWriter::new(File::create("set.fst").unwrap());ЂG/ let mut build = SetBuilder::new(wtr).unwrap();2˃#&$٘K1څޅNI&@ let set = Set::new(std::fs::read("set.fst").unwrap()).unwrap();C')ψ GβىǠ L  &. Create a builder that builds a set in memory.1%5 Finishes the construction of the set and returns it.׋8޳   +? Create a builder that builds a set by writing it to `wtr` in aB ?> Insert a new key into the set."D If a key is inserted that is less than any previous key added, thenGC an error is returned. Similarly, if there was a problem writing toF- the underlying writer, an error is returned.07 7ͥ  Yʑ.Gђ 7 7ē ܓ8 ֭֔,Gە 7 7   ǖ3    %   ˖˖ə!@ Finishes the construction of the set and flushes the underlyingCјG$ one of `Set`'s constructor methods.'Й י$Eɶښ  .7 7 7 "Ӹ@ 7 7 џ&7 A lexicographically ordered stream of keys from a set.ĝ:ںI͞1J The `'s` lifetime parameter refers to the lifetime of the underlying set.Mܟ1 !  g 1҂g    !   $)nq1҂џ&ܟ 1҂ۦ$1 !  g 1҂-Р9J+H  1҂Ԥ'ģ6Hۤ  1҂91   )  {-P 1Ȧ ݡ٩/E A lexicographically ordered stream of key-state pairs from a set andH an automaton.C The keys are from the set while the states are from the automaton.FںIը1‹M #  HN|҂HN|  # e e j j j j VA҂٩/ ҂ۦG̪ϪԪ ŵĪĪȪȪ̪̪  ϫ5ҫ ŵ {-P ߫ݡ-ʬ8C˭ ٭ݭI*Үں֮I1ү֯M 1%  >FZ i1҂>FZ i  % e e e esE#"'\1҂ - с  1҂ۦҰҰс +1 %  >FZ i1҂ӱA-ڱ ֏ ݱ  1҂֏ݱݱAʲ! ֏   1҂֏A* ֏   1҂֏A ֏   1҂֏ʵеD1    !  g 1%   16Nϸ ۸߸NNCݺ I*ںI1M1ܽ&  ݺNnJ1҂ݺNnJ  & e e e eRR J1҂ҏ 6 ҏ  1҂ؽؽܽܽۦ"" 41 &  ݺNnJ1҂aվ- ֏   1҂֏a! ֏   1҂֏a* ֏   1҂֏a ֏   1҂֏V1 ն   #  HN|1. ն  1I A builder for collecting set streams on which to perform set operations.LHN keys in lexicographic order. ׈A>OϊH M 1(  ڝ )1ڝ )(Ur M1  Ÿ  1Ÿ 1(  ڝ )1'  1'60B The stream must emit a lexicographically ordered sequence of byteE     3  1 %  1 ' E 7 7   3  Υ  %  1 C  +991і( 9Ǡ *  p-6O1 1-K  +99< let mut intersection = set1.op().add(&set2).intersection();?, while let Some(key) = intersection.next() {/  assert_eq!(keys, vec![b"a"]);!Ǡ  +  tO_=1 1)KF=  +998 let mut difference = set1.op().add(&set2).difference();;* while let Some(key) = difference.next() {- $ assert_eq!(keys, vec![b"b", b"c"]);'Ǡ  +  PtkB81 1<HϵI̶=H#  +99F let mut sym_difference = set1.op().add(&set2).symmetric_difference();I. while let Some(key) = sym_difference.next() {1 0 assert_eq!(keys, vec![b"b", b"c", b"y", b"z"]);3Ǡ ,  _u\$w1 1*       % 3K7 7ř  ř0       % 3ܷT řܷ  řD A stream of set union over multiple streams in lexicographic order.GM1*  p-6O1 p-6O*WWWn'B1   1 '1  )  {-P  1 ݡK A stream of set intersection over multiple streams in lexicographic order.NM 1+  tO_=1tO_=+WWW +j-W1    1 .1߸  ) ߸ {-P  1 ݡI A stream of set difference over multiple streams in lexicographic order.LNK M 1+  PtkB81PtkB8+XYWW¡ #Q1    1 ,1  )  {-P  1 ݡ"L A stream of set symmetric difference over multiple streams in lexicographicO M1,  _u\$w1_u\$w,WWW&&RFt0,1 "  1 51Ҁ ׀ )  {-P  1 ݡ  ȗȗ ȗȗ>   ̈́ ҄ 7  {-P  ʅݡ]  Operations on raw finite state transducers. This sub-module exposes the guts of a finite state transducer. Many parts of it, such as construction and traversal, are mirrored in the `set` and `map` sub-modules. Other parts of it, such as direct access to nodes and transitions in the transducer, do not have any analog. # Overview of types `Fst` is a read only interface to pre-constructed finite state transducers. `Node` is a read only interface to a single node in a transducer. `Builder` is used to create new finite state transducers. (Once a transducer is created, it can never be modified.) `Stream` is a stream of all inputs and outputs in a transducer. `StreamBuilder` builds range queries. `OpBuilder` collects streams and executes set operations like `union` or `intersection` on them with the option of specifying a merge strategy for output values. Most of the rest of the types are streams from set operations. ] %o   o    4 )m  l ? v  R + {  + ( , * *     '    %     k                  2 )E[  |  ~  ^ n  ^       ^ ^ ^ m  l      $ 2 >+ [ o  /     m                 '      2 A builder for creating a finite state transducer.5  M 9  O I will result in an error. Additionally, adding a duplicate key with anL E output value will also result in an error. That is, once a key isH F associated with a value, that association can never be modified orI  deleted. J 2. The representation of an fst is streamed to *any* `io::Write` as it isM G  F Point (2) is especially important because it means that an fst can beI I constructed *without storing the entire fst in memory*. Namely, since it L  F    N ޅ G  N  M އ L D the size of the fst, which defeats some of the benefit of streaming G  F Չ)  J The algorithmic complexity of fst construction is `O(n)` where `n` is theM % number of elements added to the fst.(   }1               # / Create a builder that builds an fst in memory.2  % 1 Finishes construction of the FST and returns it.4        ( @ Create a builder that builds an fst by writing it to `wtr` in aC   ɾ ?  !: B The same as `new`, except it sets the type of the fst to the type E  given.! ! ɾ?!  ! 'O 9 Adds a byte string to this FST with a zero output value.'< ' 7 7' ' ( ' ' ' ' ,\ * Insert a new key-value pair into the fst.)- ) ٣)K *B *A + ѥ+G +G ,; - 7 7- - !- - -  - - - 1 .. / /G / / ѥ0G 0G 1; 1 7 71 1 1 2 2 82 1 2 1 1 1 1 6 ֭3, 4 4G 4 4 ѥ5G 5G 6; 6 7 7  6 6 6  7=  7   7  7  8/   8  6 7 6 6 6 6 6 6 7 7 8 8 ;! @ Finishes the construction of the fst and flushes the underlying9C :G $ one of `Fst`'s constructor methods.:' ; ; <(  An error that occurred while using a finite state transducer.WA@ This enum is non-exhaustive. New variants may be added to it inC compatible releases.xXA@  E A version mismatch occurred while reading a finite state transducer.HC This occurs when the API version (of the crate) does not match theF0 version encoded in the finite state transducer.3C When this error is encountered, there are only two ways to fix it:FD 1. Change the version of the library to one that is compatible withG& the given finite state transducer.)( 2. Rebuild the finite state transducer.+ C The expected version, which is hard-coded into the current versionF of this crate.3 The version read from the finite state transducer.6 F An unexpected error occurred while reading a finite state transducer.IE Usually this occurs because the data is corrupted or is not actuallyH6 a finite state transducer serialized by this library.9  2 The number of bytes given to the FST constructor. 5  G An error that is returned if verification of an FST fails because of a J checksum mismatch.    The checksum that was expected. #  ) The checksum that was actually computed. ,  B An error that is returned if the caller attempts to verify an FST EE that does not have a checksum, as is the case for all FSTs generated H$ by this crate before version `0.4`. '    F A duplicate key was inserted into a finite state transducer, which is I not allowed.   The duplicate key. @ A key was inserted out of order into a finite state transducer.C5 Keys must always be inserted in lexicographic order.8 $ The last key successfully inserted.' ) The key that caused this error to occur., = A finite state transducer with an unexpected type was found.@B This is not currently used in this crate, but callers may wish toEE employ its use for alternative data structures implemented on top ofH finite state transducers. + The expected finite state transducer type.. . The type read from a finite state transducer.1? An error that occurred when trying to decode a UTF-8 byte key.B    3 Hints that destructuring should not be exhaustive.6C This enum may grow additional variants, so this makes sure clientsFE don't count on exhaustive matching. (Otherwise, adding a new variantH could break existing code.)O 8777 7 7GGGEGEGEG EGEGEQ ! >S7 ((8(777 7 7GGGEGEGEG EGEGEQ ! >S7( (() )>)7 7 {-P 7) )*"+$+ +-'- 7 7- -    %%7Jth  D  E   ^     ^    %-7C JUh y=  R        "  8777 7 7GGGEGEGEG EGEGEQ ! >S7      v c        L Q O Lo`    k 7 7  v c        L Q O Lo`7    M c 7G Returns an iterator over all transitions in this node in lexicographicJ  L L!RJD!YF0 L  0% Returns the transition at index `i`.( 7 7!  )78 Returns the transition address of the `i`th transition.(;)7 7!)  )).0B Finds the `i`th transition corresponding to the given input byte.,E-@ If no transition for this byte exists, then `None` is returned.-C. 7 7!.  ..2$B If this node is final and has a terminal output value, then it is1E0 returned. Otherwise, a zero output is returned.132 7 7!2  24H Returns true if and only if this node corresponds to a final or "match"3K& state in the finite state transducer.3)47 7!4  450 Returns the number of transitions in this node.435* The maximum number of transitions is 256.5-57 7!5  56< Returns true if and only if this node has zero transitions.6?67 7!6  67"! Return the address of this node.7$77 7!7  7888W88 8887 7! 78  89#99W99 9997 7! 9  9;;7© 7л<©;©;   ©?;?; M<J<;;AлAA 7 7лAAA  A?A?A MBAAF F0F7 7F cFMGIJqJJJ  ?JNJJJMMM)M7 7MƽNNNN$N 7 7ŬOOOO 7 7OOP(P77 7 7Q QcQQ&Q777 7 7  v c        L Q O Lo`7QQJQS5S 777 7 7  v c        L Q O Lo`7SSJSTT|TTT  ?TMTuTTTZZ[)[7 7[[N[\$\ 7 7Ŭ\\]] 7 7]]^)^77 7 7^ ^c^_:_77 7 7_ _c_O`a&a777 7 7  v c        L Q O Lo`7aaJac+c777 7 7  v c        L Q O Lo`7ccJcf5f 777 7 7  v c        L Q O Lo`7ffJfhi}i7 7лiii  ?iMiJiiix}}~(~7 7~Į~~ 7 7%7 7ѯ$ 7 7Ŭ́́)77 7 7 cy7 7ڝ „O؄Q@7 7Ɔdž ͆Qۆ 7 7&77 7 7 c 77 7 7  cOÍQݍ77 7 7  cOȒQ? 777 7 7  v c        L Q O Lo`7J0777 7 7  v c        L Q O Lo`7Jƚ= 777 7 7  v c        L Q O Lo`7Jݡݡ5777 7 7  v c        L Q O Lo`7JϪҪ٪7 7ޫ07 7 '7 7,7 7 #7 7, An iterator over all transitions in a node.گ/G `'f` is the lifetime of the underlying fst and `'n` is the lifetime ofJ the underlying `Node`.ٰ  L LRJD!YF0 LD!YF0 L  v c        L Q O Lo` ɱ- Lααұұ (7 7܅  Lݡ۷'޷ Ne& Ŭ|w ԛ  ?ʻ N   Ǖ?ȽԽ N K N f 7 7      `$ ? 8^ ^ mz  l  $ 4? R^j'z z     l*    H A builder for collecting fst streams on which to perform set operationsK on the keys of fsts.HNӆ F EL operations on fsts and customize how conflicting output values are handled. O ׈ A >  Oϊ H  J The `'f` lifetime parameter refers to the lifetime of the underlying set. M  (Ur M r M444040bW`(  l*    (Ur M '"  '60J’ ""  =     /    'J’ 7 7"  =   " /    C͛FIJĝJDF1"*WWWn'B   !-K͛FIJĝJ D F!1! "+WWW +j-W   "*-#K$F$=%͛%F%I&Jĝ'J'D(F(1)H The interface is the same for all the operations, but due to the nature)KI of `difference`, each yielded key contains exactly one `IndexValue` with)L `index` set to 0.** "+XYWW¡ #Q   +4<,Hϵ---I̶.=..H/#/͛/F0I1Jĝ1J2D2F314",WWW&&RFt0,   45*   6  6  655 6 6/ 6=55555566667K77 7ř7777  ř777780   9  9  988 9 9/ 8=88888888999T9 ř:::  ř:::<H A stream of set union over multiple fst streams in lexicographic order.;K;J The `'f` lifetime parameter refers to the lifetime of the underlying map.;M< *WWWn'B n'B<<<<ZZW(2$ <<===' ===== =  >?>  {-P"  >DH A stream of set intersection over multiple fst streams in lexicographicCKC DJ The `'f` lifetime parameter refers to the lifetime of the underlying fst.DMD  +WWW +j-W +j-WDDDDZZW(2$ EEEEE. EEEEF F  F?F  {-P"  FPF A stream of set difference over multiple fst streams in lexicographicMIN NNNOKO O"PMP  +XYWW¡ #Q ¡ #QPPPP  l*   Q QQQZZW(2$ QQQ, QQQQR R  R?R  {-P"  RZ"B A stream of set symmetric difference over multiple fst streams inXEYY"YMZ ,WWW&&RFt0, &&RFt0,ZZZZZZW(2$ ZZZZ[5 [[[[[ [  \?\  {-P"  \dd  ZZW(2$ (2$dddd444040bW`(  l*   dd`c2Hd ZZW(2$ dde7e444040bW`(  l*   "  Ueg!g7 7"g  gg/g77 7" 7g  gYghݡh6h 77 7" 7h  hYhi3i 77 7" 7j  jYjjݡkk 7 7"k  kl$l7 7"l  lslotln nn rdr_idxnp'p 7 7p pqq7 7 7qqq%q 77 7 7q qNqr(r 7 7r rOrss<s 77 7 7s sstݡtu,u77 7 7αu uu   t  ^5 ^C   ((5 5 C C  :} }G7  7л   ~   ~   DPWӝJ + 77 7 7л   J     } }sy#?;7# 7л   ~   ~   DPWӝ Jݡ#7 7#  7 7,7 7M   Entryt  ^ ,   ; }  _lru_size H7  7л   ~   ~   ; bnode  , 7 7   M  The API version of this crate. " K This version number is written to every finite state transducer created by NJ this crate. When a finite state transducer is read, its version number is M checked against this value.  J Currently, any version mismatch results in an error. Fixing this requires MK regenerating the finite state transducer or switching to a version of thisNI crate that is compatible with the serialized transducer. This particularL, behavior may be relaxed in future versions./!   D FstType is a convention used to indicate the type of the underlyingG transducer.I This crate reserves the range 0-255 (inclusive) but currently leaves theL meaning of 0-255 unspecified.!A CompiledAddr is the type used to address nodes in a finite stateD٠#K It is most useful as a pointer to nodes. It can be used in the `Fst::node`N method to resolve the pointer." ]`D Create a new FST from an iterator of lexicographically ordered byte]G* strings. Every key's value is set to `0`.^-^^I__D Note that this is a convenience function to build an FST in memory._G> To build an FST that streams to an arbitrary `io::Write`, use`A `raw::Builder`.`` ``a a8a a````g#cGH strings. The iterator should consist of tuples, where the first elementcKF is the byte string and the second element is its corresponding value.dIddKee#eG#fA#fg ggg gh gggggiii  iin%E Creates a transducer from its representation as a raw byte sequence.iHjB This operation is intentionally very cheap (no allocations and nojE@ copies). In particular, no verification on the integrity of thekC@ FST is performed. Callers may opt into integrity checks via thekC7 [`Fst::verify`](struct.Fst.html#method.verify) method.l:l> The fst must have been written with a compatible finite statelAF transducer builder (`Builder` qualifies). If the format is invalid ormIG if there is a mismatch between the API version of this library and themJ fst, then an error is returned.n#ncn;.͇Շ77 7!  Y:: Returns true if and only if the given key is in this FST.= 7 7!  Y43 Retrieves the key associated with the given value.ي6D This is like `get_key_into`, but will return the key itself withoutG, allowing the caller to reuse an allocation./< If the given value does not exist, then `None` is returned.?D The values in this FST are not monotonically increasing when sortedGF lexicographically by key, then this routine has unspecified behavior.I7 7 lA#6E If the given value does not exist, then `false` is returned. In thisH- case, the contents of `key` are unspecified.0A The given buffer is not clearer before the key is written to it.D#G#ԒI 77 7 7ēœl˓Yד"G this fst. 7 7   !   $)nq7ۦȗ('C A range query returns a subset of key-value pairs in this fst in aÖF'ϗ7 7  % e e e esE#"'\7ۦ՗֗B/ Executes an automaton on the keys of this FST.27 7҂  % e e e esE#"'\7҂   ȂemB Executes an automaton on the keys of this FST and yields matchingEÚB7 7҂  & e e e eRR J7҂  ۛěǛ ܛeěě( Returns the number of keys in this fst.ޜ+7 72 Returns true if and only if this fst has no keys.57 7ۉ. Returns the number of bytes used by this fst.17 7ş Ɵ"7 Attempts to verify this FST by computing its checksum.:D This will scan over all of the bytes in the underlying FST, so thisƠG@ may be an expensive operation depending on the size of the FST.Cڡ$ This returns an error in two cases:'H 1. When a checksum does not exist, which is the case for FSTs that wereK5 produced by the `fst` crate before version `0.4`.8E 2. When the checksum in the FST does not match the computed checksumH performed by this procedure.#7 7 פ ˫!7 Creates a new fst operation with this fst added to it.ƨ:? The `OpBuilder` type can be used to add additional fst streamsBԩGG symmetric difference on the keys of the fst. These set operations alsoJIҫ7 7(Ur M7ի֫D Returns true if and only if the `self` fst is disjoint with the fstGϙ F `stream` must be a lexicographically ordered sequence of byte stringsI with associated values.ѭ 7 7         ˮ=             /         ϮϮB Returns true if and only if the `self` fst is a subset of the fstEϙ #I#̱ 7 7         IJ=   ݲ          /         ȲȲD Returns true if and only if the `self` fst is a superset of the fstGϙݵ #I#Ŷ 7 7         =   ط          /         ÷÷!) Returns the underlying type of this fst.,#G٠#E This crate reserves the range 0-255 (inclusive) but currently leavesH" the meaning of 0-255 unspecified.%7 7 # Returns the root node of this fst.&7 7  v c        L Q O Lo`7 2' Returns the node at the given address.*H Node addresses can be obtained by reading transitions on `Node` values.K7 7  v c        L Q O Lo`7 M3 Returns a copy of the binary contents of this FST.67 7 ) Returns the binary contents of this FST.,7 7 77 7  c  c혐A17   > Returns the underlying data which constitutes the FST itself.A   J Returns a borrow to the underlying data which constitutes the FST itself.M7 7 7  s: Maps the underlying data of the fst to another data type.=Џ        Ə<                 !   $)nq  ۦ" #         c  c혐A1  혐A1           c  c혐A1  +77 7# 7    Y* 77 7# 7    YA 77 7# 7    lY   ݡ   7 7#    7 7#    7 7#    7 7#    # 7 7#    7 7#  v c        L Q O Lo`      .7 7#$    M7 7#    7 7#      .7 7#    -8C I*ںI1"M      % e e e esE#"'\  ҂sE#"'\ ۦ    c  c혐A1    ҂      +       % e e e esE#"'\  ҂ 7  c  c혐A1  ҂$    ҂eeE-$֏$        ҂֏E!$֏$        ҂֏E*$֏$        ҂֏E$֏$        ҂֏D                  !   $)nq  % $     6N NNC I*ںI1"M     & e e e eRR J  ҂RR J ۦ    c  c혐A1    ҂      4      & e e e eRR J  ҂ @  c  c혐A1  ҂$    ҂eee-$֏$        ҂֏e!$֏$        ҂֏e*$֏$        ҂֏e$֏$        ҂֏V                  # e e j j j j VA  . $       ) 77 7 7  j7 7  ܃߃ 7 7  1C A lexicographically ordered stream of key-value pairs from an fst.FںI1"M       !   $)nq  ҂$)nq   # e e j j j j VA  ҂$1ǯ$$    ҂ۦ  ǯ$ˇ$   ԇׇ    !   $)nq  ҂ ЇЇԇԇH  c  c혐A1  ҂$    ҂eeee5B̉ԉH $    ҂;EŌJ+č̍H $    ҂ő/6H̑$    ҂ߑ59“ʓJ+ɔєH $    ҂ݗ(1 $    ҂9       ҙ י   3  {-P$    ƚ   ݡ   ͺҚ   ݡ   /J A lexicographically ordered stream of key-value-state triples from an fstMśۛJ The key-values are from the underyling FSTP while the states are from theߛMںI1M   ˞   # e e j j j j VA  ҂ VA ۦܞܞ    c  c혐A1    ҂      %  444040bW`(   J u  aN  ܟ ܟ  -       # e e j j j j VA  ҂ x  c  c혐A1  ҂$    ҂eeˡeۡe"7 7$    ҂e   ݡ   t¿ 7 7$ғ {-P 7֏  Ւ ؿ ̿ғ7ғ 77ғ$֏   ҂֏ғݿ̿̿G              =  {-P$        ݡ     " Create a new output from a `u64`.%   Create a zero output.  ' Retrieve the value inside this output.*  ' Returns true if this is a zero output.*  (+ Returns the prefix of this output and `o`..  %2 Returns the concatenation of this output and `o`.5  ؑ%1 Returns the subtraction of `o` from this output.4$ This function panics if `self < o`.'      8777 7 7GGGEGEGEG EGEGEQ ! >S7     # ] ] $+ Streamer describes a "streaming iterator."./F It provides a mechanism for writing code that is generic over streams3I produced by this crate.}H Note that this is strictly less useful than `Iterator` because the itemKK associated type is bound to a specific lifetime. However, this does permitNF us to write *some* generic code over streams that produce values tiedI to the lifetime of the stream."F Some form of stream abstraction is inherently required for this crateIJ because elements in a finite state transducer are produced *by iterating*MH over the structure. The alternative would be to create a new allocationKH for each element iterated over, which would be prohibitively expensive.K # Usage & motivationH Streams are hard to use because they don't fit into Rust's current typeKL system very well. They are so hard to use that this author loathes having aOK publically defined trait for it. Nevertheless, they do just barely provideNK a means for composing multiple stream abstractions with different concreteNF types. For example, one might want to take the union of a range queryIK stream with a stream that has been filtered by a regex. These streams haveNJ different concrete types. A `Streamer` trait allows us to write code that ME is generic over these concrete types. (All of the set operations are H implemented this way.)  F A problem with streams is that the trait is itself parameterized by a IK lifetime. In practice, this makes them very unergonomic because specifying NK a `Streamer` bound generally requires a higher-ranked trait bound. This is NH necessary because the lifetime can't actually be named in the enclosing KI function; instead, the lifetime is local to iteration itself. Therefore, LG one must assert that the bound is valid for *any particular* lifetime.J1 This is the essence of higher-rank trait bounds.4G Because of this, you might expect to see lots of bounds that look likeJ this:  ```ignore  fn takes_stream(s: S)* where S: for<'a> Streamer<'a, Item=T>- {Ǡ< There are *three* different problems with this declaration:?H 1. `S` is not bound by any particular lifetime itself, and most streamsKJ probably contain a reference to an underlying finite state transducer.MB 2. It is often convenient to separate the notion of "stream" withEF "stream constructor." This represents a similar split found in theIE standard library for `Iterator` and `IntoIterator`, respectively.HC 3. The `Item=T` is invalid because `Streamer`'s associated type isFF parameterized by a lifetime and there is no way to parameterize anIA arbitrary type constructor. (In this context, `T` is the typeDH constructor, because it will invariably require a lifetime to becomeK a concrete type.)G With that said, we must revise our possibly-workable bounds to a giantJ scary monster:$  fn takes_stream<'f, I, S>(s: I)#H where I: for<'a> IntoStreamer<'a, Into=S, Item=(&'a [u8], Output)>,K@ S: 'f + for<'a> Streamer<'a, Item=(&'a [u8], Output)>C$Ǡ/ We addressed the above points correspondingly:2I 1. `S` is now bound by `'f`, which corresponds to the lifetime (possiblyL) `'static`) of the underlying stream.,K 2. The `I` type parameter has been added to refer to a type that knows howNG to build a stream. Notice that neither of the bounds for `I` or `S`JK share a lifetime parameter. This is because the higher rank trait boundN5 specifies it works for *any* particular lifetime.8G 3. `T` has been replaced with specific concrete types. Note that theseJ? concrete types are duplicated. With iterators, we could useBL `Item=S::Item` in the bound for `I`, but one cannot access an associatedOJ type through a higher-ranked trait bound. Therefore, we must duplicateM the item type.J As you can see, streams offer little flexibility, little ergonomics and aMC lot of hard to read trait bounds. The situation is lamentable, butFG nevertheless, without them, we would not be able to compose streams by J leveraging the type system.!!J A redeemable quality is that these *same exact* trait bounds (modulo some!MJ tweaks in the `Item` associated type) appear in many places in this crate!MI without much variation. Therefore, once you grok it, it's mostly easy to"LB pattern match it with "oh I need a stream." My hope is that clear#EG documentation and examples make these complex bounds easier to burden.#J$K Stretching this abstraction further with Rust's current type system is not$N advised.$ %        %% %%%% - The type of the item emitted by this stream.%0%  ',H Emits the next element in this stream, or `None` to indicate the stream%K has been exhausted.&&H It is not specified what a stream does after `None` is emitted. In most&K: cases, `None` should be emitted on every subsequent call.'='  {-P%   ')? IntoStreamer describes types that can be converted to streams.(B(@ This is analogous to the `IntoIterator` trait for `Iterator` in(C `std::iter`.))         *% *  *+ % *%  %*))* , The type of the item emitted by the stream.)/*  *** The type of the stream to be constructed.*-*  +# Construct a stream from `Self`.+#+ %   ++0   +  +  ++++, ,    , ,  ,,    ,_8 Automaton implementations for finite state transducers.];^G This module defines a trait, `Automaton`, with several implementations^JC including, but not limited to, union, intersection and complement.^F_ [ 4 oX   oX   Ih X { a j n,  o;   pI   *X  +`   ri   _f 8 Map operations implemented by finite state transducers._;`C This API provided by this sub-module is close in spirit to the API`F provided byag [`std::collections::BTreeMap`](https://doc.rust-lang.org/stable/std/collections/struct.BTreeMap.html).aja # Overview of typesbbH `Map` is a read only interface to pre-constructed sets. `MapBuilder` isbKL used to create new sets. (Once a set is created, it can never be modified.)bOF `Stream`, `Keys` and `Values` are streams that originated from a map.cIL `StreamBuilder` builds range queries. `OpBuilder` collects a set of streamsdOL and executes set operations like `union` or `intersection` on them with thedOJ option of specifying a merge strategy for a map's values. The rest of theeM& types are streams for set operations.e)fs[  [  !  #  #  $  %  &  (  *  +  +  ,  {   fo 8 Set operations implemented by finite state transducers.f;g%gF%gg [`std::collections::BTreeSet`](https://doc.rust-lang.org/stable/std/collections/struct.BTreeSet.html).gjI The principle difference, as with everything else in this crate, is thathLG operations are performed on streams of byte strings instead of genericiJI iterators. Another difference is that most of the set operations (union,iLL intersection, difference and symmetric difference) work on multiple sets atjO the same time, instead of two.k"k%kkH `Set` is a read only interface to pre-constructed sets. `SetBuilder` iskK%lOK `Stream` is a stream of values that originated from a set (analogous to anlNL iterator). `StreamBuilder` builds range queries. `OpBuilder` collects a setmOI of streams and executes set operations like `union` or `intersection` onnL< them. The rest of the types are streams for set operations.n?os\  2\  !ܟ # %  & (  * +  +  , o > An error that encapsulates all possible errors in this crate.A  }    ? An error that occurred while reading or writing a finite stateB ٠#             C An IO error that occurred while writing a finite state transducer.F                   l   777 7 7GGGEGEGEG EGEGEQ ! >S7       ,D An automaton that matches if the input equals to a specific string.%G&D It can be used in combination with [`StartsWith`] to search strings&G starting with a given prefix.&!&&  extern crate fst;''3 use fst::{Automaton, IntoStreamer, Streamer, Set};'6 use fst::automaton::Str;''''(<N let paths = vec!["/home/projects/bar", "/home/projects/foo", "/tmp/foo"];(Q& let set = Set::from_iter(paths)?;))) // Build our prefix query.)"2 let prefix = Str::new("/home").starts_with();*5*, // Apply our query to the set we built.*/7 let mut stream = set.search(prefix).into_stream();*:+' let matches = stream.into_strs()?;+*K assert_eq!(matches, vec!["/home/projects/bar", "/home/projects/foo"]);+N,,Ǡ, ,    n n3x x ,,,,3  ,,,,o   ,,,,7 7 ,  ,,,,,p  Ѥ ,,,,777 7Ѥ 7GGGEGEGEG EGEGEQ ! >S7 ,  ,,;H An automaton that matches if the input contains a specific subsequence.5K5/ It can be used to build a simple fuzzy-finder.5266 %666+6$77'7<%7Qµ%8)8 // Build our fuzzy query.8!* let subseq = Subsequence::new("hpf");9-92 // Apply our fuzzy query to the set we built.957 let mut stream = set.search(subseq).into_stream();:::%:*5 assert_eq!(matches, vec!["/home/projects/foo"]);:8;;Ǡ; ;     o o3F F ;;<<3  ;;;ߢ;q   ;;;;7 7 ;  ;;;;;r   ;;;;777 7 7GGGEGEGEG EGEGEQ ! >S7 ;  ;;D" An automaton that always matches.C%CJ This is useful in a generic context as a way to express that no automatonCM should be used.D D ۦjy["?6 DD   ۦDDDDsۦ DD7 7ۦۦ D DDDD£Dtۦ DD777 7ۦ 7GGGEGEGEG EGEGEQ ! >S7 D DDHG An automaton that matches a string that begins with something that theGJ wrapped automaton matches.H I   I| \£ HI 3  IIII3  HHHHu  IH IIHH7 7 H HHHHHv  IGH IIHH777 7 7GGGEGEGEG EGEGEQ ! >S7 H HHWD An automaton that matches when one of its component automata match.WG X   XXا\] اWX3ا  XXXXXX3  XX3  WWW̤Ww   XX%WWا XXXXWW7 7اا W WWWWWx   XX%WGWا XXXXWW777 7ا 7GGGEGEGEG EGEGEQ ! >S7 W WW`E An automaton that matches when both of its component automata match._H`     ``vϮ `` 3  ``````3  ``3  ```˥`y   ``%`%` ``````7 7 ` `````z   ``%`%` ``````777 7 7GGGEGEGEG EGEGEQ ! >S7 ` ``iH An automaton that matches exactly when the automaton it wraps does not.hKi   iLct]>N ii 3  iiii3  iiiƦi{  i%i iiii7 7 i iiiii|  i%i iiii777 7 7GGGEGEGEG EGEGEQ ! >S7 i ii F Map is a lexicographically ordered map from byte strings to integers.I  J A `Map` is constructed with the `MapBuilder` type. Alternatively, a `Map`M G can be constructed in memory from a lexicographically ordered iteratorJ ' of key-value pairs (`Map::from_iter`).*  K A key feature of `Map` is that it can be serialized to disk compactly. ItsN L underlying representation is built such that the `Map` can be memory mappedO E and searched without necessarily loading the entire map into memory.H  E It supports most common operations associated with maps, such as keyH J lookup and search. It also supports set operations on its keys along withM H the ability to specify how conflicting values are merged together. MapsK G also support range queries and automata based searches (e.g. a regularJ  expression).  L Maps are represented by a finite state transducer where inputs are the keysO I and outputs are the values. As such, maps have the following invariants:L   4 1. Once constructed, a `Map` can never be modified. 7 K 2. Maps must be constructed with lexicographically ordered byte sequences. N 6 There is no restricting on the ordering of values. 9    # Differences with sets    I Maps and sets are represented by the same underlying data structure: the L G finite state transducer. The principal difference between them is that J K sets always have their output values set to `0`. This has an impact on the N I representation size and is reflected in the type system for convenience. L F A secondary but subtle difference is that duplicate keys can be added I I to a set, but it is an error to do so with maps. That is, a set can haveL 2 the same key added sequentially, but a map can't.5   # The future  I It is regrettable that the output value is fixed to `u64`. Indeed, it isL H not necessary, but it was a major simplification in the implementation.K L In the future, the value type may become generic to an extent (outputs mustO  satisfy a basic algebra).  I Keys will always be byte strings; however, we may grow more conveniencesL H around dealing with them (such as a serialization/deserialization step,K 9 although it isn't clear where exactly this should live).<     ATt|               }         7 7    8 Set is a lexicographically ordered set of byte strings.;J A `Set` is constructed with the `SetBuilder` type. Alternatively, a `Set`M%J$ of byte strings (`Set::from_iter`).'K A key feature of `Set` is that it can be serialized to disk compactly. ItsNL underlying representation is built such that the `Set` can be memory mappedOE and searched without necessarily loading the entire set into memory.HA It supports most common operations associated with sets, such asDH membership, union, intersection, subset/superset, etc. It also supportsKG range queries and automata based searches (e.g. a regular expression).JJ Sets are represented by a finite state transducer where output values areM: always zero. As such, sets have the following invariants:=4 1. Once constructed, a `Set` can never be modified.7K 2. Sets must be constructed with lexicographically ordered byte sequences.N     i_r           ( ( ( (    &(   ( ( 7 7 (     wS5_ !    444040bW`(1 1 1 1  1 1 777 7 7GGGEGEGEG EGEGEQ ! >S7 1   1   dj wV     л    ߁2 2 2 2  2 2 777 7 7GGGEGEGEG EGEGEQ ! >S7 2   2   лך$i             3 3 3 3 л 3 3 777 7л 7GGGEGEGEG EGEGEQ ! >S7 3   3 4 4 4 ک4 л 4 4 77 7л 7   4  4 I4   4 4 4 5 5 5 5 л5 5 5 5 л 5 5 5 5 5  5 5 5 5 5 5 7 7л 5   6 6 6 Ҫ6 л6 6 6 ڪ6 л 6 6 77 7л 7л 6   6            7 7 7 7  7 7 777 7 7GGGEGEGEG EGEGEQ ! >S7 7   7  % Ž5݊     G G G G Ž G G 7 7ŽŽ G   H H H ͬH ŽI I I լI Ž I I 777 7Ž 7GGGEGEGEG EGEGEQ ! >S7 I   I   #= Node represents a single state in a finite state transducer.@K Nodes are very cheap to construct. Notably, they satisfy the `Copy` trait.N0    v c        L Q O Lo`  o`                         ````   ``7 7 `   aaaa  C ACS3N     C AC   C C   CC  CAC  CC  C C   CAC  CC  C C   D AD   D D   CCCC CC7 7 C CCCCCCCCC CC777 7 7GGGEGEGEG EGEGEQ ! >S7 C CCDBDK)3# DD  EE  DDDD DD7 7 D DDDDDDDDD DD777 7 7GGGEGEGEG EGEGEQ ! >S7 D DDECE 6> mN EE   EE  EEEE EE7 7 E EEEEEEEEE EE777 7 7GGGEGEGEG EGEGEQ ! >S7 E EEFDF =/OF FF   FF  FFFF FF7 7 F FFFFFFFFF FF777 7 7GGGEGEGEG EGEGEQ ! >S7 F FFϩG֩ j>0w  ϩ֩      7 7  ǩǩǩǩ ǩǩ777 7 7GGGEGEGEG EGEGEQ ! >S7 ǩ ǩǩ A value indexed by a stream. F Indexed values are used to indicate the presence of a key in multipleIL streams during a set operation. Namely, the index corresponds to the streamOG (by the order in which it was added to the operation, starting at `0`)JH and the value corresponds to the value associated with a particular keyK in that stream.J F D The index of the stream that produced this value (starting at `0`).G   The value.   7 7   777 7 7GGGEGEGEG EGEGEQ ! >S7    7 7   77 7 7    ћ&&   77 7 7α             77 7 7           77 7 7    n Qn7<- n n  nn  nn  mmmm mm777 7 7GGGEGEGEG EGEGEQ ! >S7 m mmnnnnnnnn nnnnn nnnnnn7 7 n nn n n n n n n n  n n 77 7 7 n n n dRo,Dp ~~  444040bW`(     \\\\ \\777 7 7GGGEGEGEG EGEGEQ ! >S7 \ \\S     } }sy#? sy#?       777 7 7GGGEGEGEG EGEGEQ ! >S7   T Hۮ$     л 7 7   777 7 7GGGEGEGEG EGEGEQ ! >S7  U      ~   ~   DPWӝ DPWӝ  &  & U   &       U   &&     &U  &  &   777 7 7GGGEGEGEG EGEGEQ ! >S7   X;yLXL )  base:QFл<< RandomState<k0<k1~% 777 7 7GGGEGEGEG EGEGEQ ! >S7  Y      ~   ~   ; ;  &  & Y   &       Y   &&     &Y  &  &   777 7 7GGGEGEGEG EGEGEQ ! >S7   Z ?o;         7 7   777 7 7GGGEGEGEG EGEGEQ ! >S7  Z2 An acyclic deterministic finite state transducer.5 # How does it work?F The short answer: it's just like a prefix trie, which compresses keysIF based only on their prefixes, except that a automaton/transducer alsoI compresses suffixes.F The longer answer is that keys in an automaton are stored only in theIH transitions from one state to another. A key can be acquired by tracingKK a path from the root of the automaton to any match state. The inputs alongNE each transition are concatenated. Once a match state is reached, theHI concatenation of inputs up until that point corresponds to a single key.LJ But why is it called a transducer instead of an automaton? A finite stateML transducer is just like a finite state automaton, except that it has outputOK transitions in addition to input transitions. Namely, the value associatedNI with any particular key is determined by summing the outputs along everyLD input transition that leads to the key's corresponding match state.GH This is best demonstrated with a couple images. First, let's ignore theK4 "transducer" aspect and focus on a plain automaton.7G Consider that your keys are abbreviations of some of the months in theJ Gregorian calendar: ```plain  jan feb mar may jun  jul Ǡ  H The corresponding automaton that stores all of these as keys looks like K$  G ![finite state automaton](https://burntsushi.net/stuff/months-set.png) J!E Notice here how the prefix and suffix of `jan` and `jun` are shared.!HG Similarly, the prefixes of `jun` and `jul` are shared and the prefixes"J of `mar` and `may` are shared.""#G All of the keys from this automaton can be enumerated in lexicographic#JD order by following every transition from each node in lexicographic#G: order. Since it is acyclic, the procedure will terminate.$=$K A key can be found by tracing it through the transitions in the automaton.$NG For example, the key `aug` is known not to be in the automaton by only%JJ visiting the root state (because there is no `a` transition). For another%MG example, the key `jax` is known not to be in the set only after moving&JI through the transitions for `j` and `a`. Namely, after those transitions'L0 are followed, there are no transitions for `x`.'3(H Notice here that looking up a key is proportional the length of the key(KI itself. Namely, lookup time is not affected by the number of keys in the(L automaton!))I Additionally, notice that the automaton exploits the fact that many keys)LE share common prefixes and suffixes. For example, `jun` and `jul` are*HK represented with no more states than would be required to represent either*NL one on its own. Instead, the only change is a single extra transition. This+OK is a form of compression and is key to how the automatons produced by this+N crate are so small.,,I Let's move on to finite state transducers. Consider the same set of keys,L7 as above, but let's assign their numeric month values:-:-'-  jan,1-  feb,2.  mar,3.  may,5.  jun,6.  jul,7. Ǡ..H The corresponding transducer looks very similar to the automaton above,.K; except outputs have been added to some of the transitions:/>/H ![finite state transducer](https://burntsushi.net/stuff/months-map.png)/K0H All of the operations with a transducer are the same as described above0KH for automatons. Additionally, the same compression techniques are used:0K4 common prefixes and suffixes in keys are exploited.171G The key difference is that some transitions have been given an output.1JC As one follows input transitions, one must sum the outputs as they2FI are seen. (A transition with no output represents the additive identity,3LI or `0` in this case.) For example, when looking up `feb`, the transition3LJ `f` has output `2`, the transition `e` has output `0`, and the transition4MG `b` also has output `0`. The sum of these is `2`, which is exactly the4J value we associated with `feb`.5#5I For another more interesting example, consider `jul`. The `j` transition5LI has output `1`, the `u` transition has output `5` and the `l` transition6LG has output `1`. Summing these together gets us `7`, which is again the6JI correct value associated with `jul`. Notice that if we instead looked up7LH the `jun` key, then the `n` transition would be followed instead of the8KE `l` transition, which has no output. Therefore, the `jun` key equals8H `1+5+0=6`.99H The trick to transducers is that there exists a unique path through the9KI transducer for every key, and its outputs are stored appropriately along:LK this path such that the correct value is returned when they are all summed:NL together. This process also enables the data that makes up each value to be;OI shared across many values in the transducer in exactly the same way that;L: keys are shared. This is yet another form of compression!<=< # Bonus: a billion strings<=F The amount of compression one can get from automata can be absolutely=IH ridiuclous. Consider the particular case of storing all billion strings=K, in the range `0000000001-1000000000`, e.g.,>/>'>  0000000001> 0000000002? ...? 0000000100? 0000000101?'? 0999999999? 1000000000?Ǡ??- The corresponding automaton looks like this:?0@^ ![finite state automaton - one billion strings](https://burntsushi.net/stuff/one-billion.png)@aAD Indeed, the on disk size of this automaton is a mere **251 bytes**.AGAH Of course, this is a bit of a pathological best case, but it does serveAK9 to show how good compression can be in the optimal case.B<B Also, check out theBM [corresponding transducer](https://burntsushi.net/stuff/one-billion-map.svg)BPI that maps each string to its integer value. It's a bit bigger, but stillCLE only takes up **896 bytes** of space on disk. This demonstrates thatDH% output values are also compressible.D(E/ # Does this crate produce minimal transducers?E2EK For any non-trivial sized set of keys, it is unlikely that this crate willENJ produce a minimal transducer. As far as this author knows, guaranteeing aFMI minimal transducer requires working memory proportional to the number ofFLL states. This can be quite costly and is anathema to the main design goal ofGOK this crate: provide the ability to work with gigantic sets of strings withHN constant memory overhead.HHC Instead, construction of a finite state transducer uses a cache ofHFJ states. More frequently used states are cached and reused, which providesIMJ reasonably good compression ratios. (No comprehensive benchmarks exist toJM back up this claim.)JJE It is possible that this crate may expose a way to guarantee minimalJH@ construction of transducers at the expense of exorbitant memoryKC requirements.KL # BibliographyLLE I initially got the idea to use finite state tranducers to representLH ordered sets/maps fromL [MichaelM \ McCandless'](http://blog.mikemccandless.com/2010/12/using-finite-state-transducers-in.html)M_- work on incorporating transducers in Lucene.M0NI However, my work would also not have been possible without the hard workNL of many academics, especiallyN!W [Jan Daciuk](http://galaxy.eti.pg.gda.pl/katedry/kiw/pracownicy/Jan.Daciuk/personal/).OZO * [Incremental construction of minimal acyclic finite-state automata](https://www.mitpressjournals.org/doi/pdfplus/10.1162/089120100561601)OK (Section 3 provides a decent overview of the algorithm used to constructQN< transducers in this crate, assuming all outputs are `0`.)Q? * [Direct Construction of Minimal Acyclic Subsequential Transducers](https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.24.3698&rep=rep1&type=pdf)RJ (The whole thing. The proof is dense but illuminating. The algorithm atSME the end is the money shot, namely, it incorporates output values.)TH * [Experiments with Automata Compression](https://www.researchgate.net/profile/Jiri-Dvorsky/publication/221568039_Word_Random_Access_Compression/links/0c96052c095630d5b3000000/Word-Random-Access-Compression.pdf#page=116), [Smaller Representation of Finite State Automata](https://www.cs.put.poznan.pl/dweiss/site/publications/download/fsacomp.pdf)TG (various compression techniques for representing states/transitions)WJI * [Jan Daciuk's dissertation](http://www.pg.gda.pl/~jandac/thesis.ps.gz)WL$ (excellent for in depth overview)X' * [Comparison of Construction Algorithms for Minimal, Acyclic, Deterministic, Finite-State Automata from Sets of Strings](https://www.cs.mun.ca/~harold/Courses/Old/CS4750/Diary/q3p2qx4lv71m5vew.pdf)X) (excellent for surface level overview)Z,[[  [Po_ [[[ [  [[  ZZZZ  [&Z [[ZZ7 7 Z Z[ \[AE8 [ [  [[   \ \  \ \  ]]  [[[[ [[777 7 7GGGEGEGEG EGEGEQ ! >S7 [ [[[[[[ [[7 7 [ [ ^lT    ^      ^       ^        777 7 7GGGEGEGEG EGEGEQ ! >S7  d       J u  aN  aN     v c        L Q O Lo`     ̠ ̠  ݠ ݠ        7 7        G 777 7 7GGGEGEGEG EGEGEQ ! >S7    E An output is a value that is associated with a key in a finite stateH٠#L Note that outputs must satisfy an algebra. Namely, it must have an additiveO@ identity and the following binary operations defined: `prefix`,CD `concatenation` and `subtraction`. `prefix` and `concatenation` areGI commutative while `subtraction` is not. `subtraction` is only defined onLJ pairs of operands where the first operand is greater than or equal to theM second operand.L Currently, output values must be `u64`. However, in theory, an output valueOJ can be anything that satisfies the above algebra. Future versions of thisM0 crate may make outputs generic on this algebra.3hRE2Ə      7 7   777 7 7GGGEGEGEG EGEGEQ ! >S7   77 7 7    ћ&&    7 7   77 7 7α             77 7 7           77 7 7    ' A transition from one note to another.*i Ja:,  0 The byte input associated with this transition.3  , The output associated with this transition./  8 The address of the node that this transition points to.;   7 7   77 7 7    ћ&&    7 7             77 7 7            !!!""###$$$///0011>??@@@AAAEEEFFGGGGKMMOOQQRSYZZ[[\]^^bccddeeggkllmmnnno" & 0 5 : C P \ ^ _ m o x x x ~     Ʒ    (2>?@GLSZ]fffj' - 1 6 @ J M N S S Y Z \ \ ^ _ a b c e e i i k l r t w x x         ((()- ).2456789<AFMOOQQQQRSSS[\]^^__aaacccfffi~́Ɔ7ggghhjjklpqqqrssuu   ēܓ՗ۛşիؿ      ,,,,;;;;DDDDHHHHWWWW````iiii ( 1 1 1 2 2 2 3 3 3 4 4 5 6 6 7 7 7 G I I I `CCCCDDDDEEEEFFFFǩǩǩmmmnnn\\\Z[[[[   LV     Ehttps://doc.rust-lang.org/stable/std/collections/struct.BTreeMap.htmlraw/struct.Fst.htmlhttps://docs.rs/regex-automataEhttps://doc.rust-lang.org/stable/std/collections/struct.BTreeSet.html(https://crates.io/memmap(((((((((Dhttps://www.mitpressjournals.org/doi/pdfplus/10.1162/089120100561601struct.Fst.htmlhttps://www.researchgate.net/profile/Jiri-Dvorsky/publication/221568039_Word_Random_Access_Compression/links/0c96052c095630d5b3000000/Word-Random-Access-Compression.pdfMhttp://blog.mikemccandless.com/2010/12/using-finite-state-transducers-in.html)http://www.pg.gda.pl/~jandac/thesis.ps.gz0https://burntsushi.net/stuff/one-billion-map.svg޸(Jhttps://www.cs.put.poznan.pl/dweiss/site/publications/download/fsacomp.pdfGhttp://galaxy.eti.pg.gda.pl/katedry/kiw/pracownicy/Jan.Daciuk/personal/(Khttps://www.cs.mun.ca/~harold/Courses/Old/CS4750/Diary/q3p2qx4lv71m5vew.pdfShttps://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.24.3698&rep=rep1&type=pdf((޷((((ӵ(ӵ(((޷(((޸((((($https://crates.io/crates/utf8-rangesp ϼ(pϼ(p 5 P}XrQ5 P}m'<5 P}:#5 P}nh5 P}-(AY;5 P}'ȣ5 P}g(5 P}? 55 P}!4DF5 P}l<5 P}b8?d5 P}NJ Ͼ5 P}l5 P}ն;5 P}?_ai5 P}I$@5 P}"¯i5 P}=*"5 P}vFAsVK5 P}[I5 P}@_!i5 P}ǥ=45 P}15 P})o295 P}am5 P}QqDc5 P}[oE5 P}gюE5 P}5e=5 P}v@5 P}ɗvn5 P}[5 P}nyC.~5 P}-AŜD25 P}[T5 P}1X5 P}] RD5 P}mE95 P}˳5 P}$<5 P}v#5 P}^ Ht`=5 P}gRS퇬5 P}tHn5 P}Vs*f/65 P}}"X5 P}/M`+5 P}x !O+5 P}i^.&5 P};;%Mc5 P}C@c05 P}o,}5 P}ALJ6ժ5 P}ض?5 P}x5 P}Zg5 P} m.a5 P}Z/ڼX5 P}nE_5 P}K(b5 P},75 P}Qg5 P}pYو65 P}ۘ`&E 5 P}LUd5 P}:5 P}$/i5 P}\5 P}R>$״5 P})5 P} yB՘5 P}?R*5 P}pdK5 P}7\55 P}ZqtW5 P}Al.x5#5 P}+*b5 P}ܲoi5 P}ͬ]5 P}v5=:5 P}6;R5 P}ɗMa9'q5 P}b縷5 P}fBh5 P}z!Aw5 P}rD"xo5 P}-N=(s5 P} TY}X5 P} XF5 P}pn 5 P}. e75 P}<=^S5 P}+5 P}[Ro=5 P}0\((5 P}6 `j5 P}d =5 P}Yߝ/s:=5 P}ºC>5 P}4IݗT5 P}ElIV5 P}UQ5 P}},oAvh(5 P}¥o5 P}$D5 P}T>xi5 P}CV5 P}a45 P}U=2jK5 P}$!oD5 P}GY5 P}l͢R<5 P}W\lP5 P}*cc<[5 P}L5 P}0J%]5 P}?oc45 P} <5 P}S5 P}b Ɓ5 P}J(~65 P}[j"uu5 P} eX5 P}ڦ,axA5 P}X5 P}o85 P}>5 P}f^5 P}a 5 P}5!5 P}1/5 P}!5 P}?b^5 P}Kwz VA5 P}6cb5 P}񓣉7\N5 P}f@iL!:5 P}P|v]5 P}U65 P}>yH5 P}kJmٲ5 P}Nџt#5 P}Zs[\5 P}sci5 P}8zYX5 P}YkM#H5 P}"Y2 .5 P}Gg)(5 P}}ǬDwve5 P}8WO<5 P}Nym$5 P} ;Z5 P}ɴ r5 P}@b,ݯ5 P} G25 P}Vb5 P}ooAf5 P}{,O5 P}& t5 P}r~ѾM5 P}TmK?5 P}Q35 P} )5 P}A`)Ҷ5 P}]#f5 P})K8w5 P}J7V# 5 P}P'5 P}brsZ5 P}25 P}Mh%<5 P}Z45 P}9A5 P}iӱq5 P}ˠ#_>5 P}T5 P}x^D@a5 P}vQr;>5 P}Rx=v5 P}lal[o5 P}_r5 P})ٕ?5 P}eԄ~85 P}7Zb5 P}w%55 P}~)F3'5 P}@b;|O5 P}A 5 P}Tnp|rr5 P}PD1l5 P}Qc 5 P}*o5 P}Z?5 P}LB[5 P} [(5 P}B5 P}0E%:=5 P},MK5 P}e1w5 P}XOE5 P}}-Jrn5 P} "޷5 P}IOd<5 P}{Aa`5 P}ý}oD5 P}4pk5 P}#B5 P}\Lq.5 P}-\:Z5 P}zTقl?5 P}7W5 P}OEcŵ5 P}&[l!5 P}& ][E5 P}iڬ5 P}T?L5 P}بw5 P}ν@5 P}96D<5 P}=8h75 P}E tLn5 P}/wA5 P}7_5 P}cP5 P}_ 75 P}8"҉%~5 P}Jo:5 P}9)d[5 P}$dE5 P}r+~5 P}%Df` 5 P}{G5 P}pOYR5 P}Jx5 P}Ý/Ll5 P}W]~5 P}dGXMV-5 P}XLX 5 P}vtp5 P}C?5 P}"!/5 P}W5 P}Dϫ5 P}nD6Q˄o=5 P}[店`5 P}>W)i5 P}ɱÒR3p5 P}o, a5 P}d &dmW5 P}c{ST5 P}Q۵5 P}d*5 P}I 8[ŝ5 P}F5 P}#QL'5 P}Uq5 P}eOD <5 P}DH*05 P}j5 P}04vc[5 P}dG5 P}]},s5 P}鳷Y5 P}޸y@5 P} ?5 P}G|A]+5 P}[[J5 P}Kz5 P}*ɱ)y[5 P}%Rmq_5 P}B0Fug5 P}s^Nt/5 P} Xv5 P}$u$05 P}kH5 P}k5 P}S5 P},V`"5 P}Hʹ5 P}*oq;5 P}tж5 P}LX5 P}Mi 5 P}K뽀5 P}?媦S5 P}kr|5 P}Kqe5 P}VT!;w5 P}Yk8eM5 P}5 P}^(]5 P}]\A$5 P}ruщ5 P}U5 P}*~>Y5 P}ntͯ5 P}_*15 P}FV̊5 P}d L5 P}a3z45 P}u.#څB5 P}V=y5 P}N5 P}~w5 P}&5 P}[5 P}.LRh:5 P}ms}`5 P}B,$35 P}Z75 P}wz^@/5 P}(,d5 P}`eHUjG5 P}jiHi5 P}X Z[5 P}vO3ّ5 P}(بz5 P}b8,fA5 P}&Im\5 P}<5 P}C:5 P}?I1)5 P}5 P}rv95 P}~y 65 P}sUA0 j5 P}$m(ri5 P}m}>K5 P}tO5 P} !5 P}K\Z5 P}I8z75 P}ۚmk/5 P}SdRE5 P}9t/5 P}@̞,n3v5 P}oBkk5 P}H=*|>5 P}.ex&5 P}C2ZI5 P}͚Gm^5 P}zk!Rw5 P}5 P})&u1c5 P}{75 P}eu5 P}y*A5 P}jCEe6l5 P}ː4Ϣ5 P}57'5 P}zHK5 P}#Я5 P}h5 P}pi/5 P}\WA85 P}5sEC5 P}ǚCz5 P}/N*|5 P}vnB0`5 P}JG5 P}*B5 P}~!X5 P}X." 5 P}k {5 P},:Įr5 P} 9D5 P}Nĵ0Fc5 P}}Q?%5 P}Ja5 P}s"5 P}ȬYA35 P}vƩx&Uk5 P}V!G5 P}ުr5 P}+&G5 P}ȣ5 P}HB5 P}Gs5 P}5ݻy5 P}3S$5 P}p{;R5 P}hZt8<5 P}-^m5 P}>jwK5 P}4GkY5 P}N Y35 P}>5 P}xcˆ5 P}ӁY5 P}ˮd5 P}q^U5 P}5 P}ɻF5 P}0P]5 P})o{}~5 P}Nr{5 P}L%6r~5 P}A1{5 P},-@r5 P}ɗh|5 P}~w¸7S5 P}Ue2`?5 P}7_5 P} ܛc m5 P}ަs5 P}- r5 P}&DF<5 P}F@Kh5 P}ۼ5 P}.W65 P}͊7 5 P}_j5 P}U5 P}E$}"5 P}tq& 5 P}޺R5 P}A"⍍5 P}OXPG5 P}e5 P}{5 P}3 [^=5 P}aZ .5 P}%D5 P} 5 P}?f ?5 P},;koS5 P}Oϐ υ5 P}J:-45 P} G/_ 5 P}gnagc5 P}M.2Y5 P}?R\";5 P}j[^5 P}IJM5 P}Hu5 P}=`45 P}@HiP5 P}d-, 5 P}>jp5 P}3,RIoX~5 P}x$'E2'5 P}J-l5 P}S[(ڪ5 P}tg-5 P}{Ha5 P}Pœ5 P}.+ab5 P} 5 P}ORh5 P}Q5 P}W`D5Z5 P} 5 P}AK5 P}pQ~mT5 P}/IRNp5 P}pIՅ5 P}':b;5 P}=g5 P},Mm5 P}~#5 P}],SIcBK5 P} Z:!ƿ5 P}c Eq*5 P}7zDl5 P}R( 5 P}H9ZN5 P}$p G@5 P}Pt1i 5 P}\ԏN5 P}.5 P}]iF;h5 P}*-n,5 P}KiT5 P};cΘ5 P}ݜM5 P}|#5 P}BWȢ95 P}~ q5 P} ٮS5 P}ftS5 P}G8^5 P}6߯85 P}+ld5 P}!DfL5 P}N׏X^5 P}[cJ015 P}#z5 P}ם55 P}P;5 P}u5 P}xoZ L5 P}x4-5 P};;j5 P}c[h5 P}SG5 P}Lw5 P}*Ei5 P}^5 P}!\ER5 P}5 P}I' R5 P}Ɓj5 P}!a{B|5 P}KNe15 P}g(A65 P}ۄ5 P}Um5 P}-I O35 P},>W5 P}%Ϭ5 P}p3$4F5 P}g'=5 P}/SBDl5 P}pOdn5 P}WX&ì5 P}TGq5 P}sXF5 P}.Efn5 P}M85 P}]J5 P} 9 }5 P}"!)r:5 P}|65 P}d)TU5 P}:H5 P}HCl9xb45 P}ۊm@d5 P}715 P}9@ q5 P}gf|5 P}wRC,aZ5 P}̮*/?Me5 P}X\;C5 P}͜Z?5 P}/&[5 P}.ƘVy5 P}ՙ)5 P} NAV45 P}f3qqV5 P}/ք4t`5 P}n;uD5 P}Ի5 P}]x5 P}i5 P}6j+~5 P}4ًP5 P}q5 P}mP'Cw˔5 P}v `5 P}W~ʄ5 P}%5 P} A cۃ5 P}`Kl7[%x5 P} Fey5 P}I5}Z5 P}&n^*W5 P} xRb'5 P}-+b5 P}!t5 P}$k@5 P}/5 P}-\CQb5 P}3s 5 P}%G:D5 P}ӷ-b+5 P}O0O}5 P}5 P}08]OV$5 P}iM05 P}}r5 P}@Lg`5 P}zMQbQ5 P}ni5 P}n'e5 P}DS5 P}ԝ[c5 P}. ͦxE5 P},U7 Hv5 P}=475 P}5b5 P} m75 P}ٛ?5 P}FSS=5 P}J rw.5 P}Zi)l5 P}O,W5 P}i5 P}IT5 P}]C[5 P}fQ#5 P}{_95 P}յ3Mi5 P}l OʻM5 P}hv5 P}m TK5 P}▰Y`9=5 P}@KCc 5 P}^d#T5 P}îK=i߹5 P}. ϛ&h5 P}ٺg5 P}uZ;5 P} 2t 5 P}U<1G6F5 P}ɠh{Вw5 P}kwW5 P}- J]5 P}5V5 P}H5 P}+7ڽ5 P}>i5 P}(p:5 P} Tųv5 P}Ȋw5 P}*dVA{5 P}bfK=V."5 P}bq5 P}7<#5 P}{U5 P}0D5 P}0B5 P}@r V5 P}X,Au" 5 P} >r,[X5 P}J~y5 P}!7LO5 P})g5 P}Ӳ*5 P})l5 P}A0L5 P}7|U5 P}Ԡ5 P}B[^(=5 P}ls'5 P}c _5 P}!gϊ5 P}zD5 P}৛fGeP5 P}MM >5 P}W+5 P}DؚӁ5 P}23a5 P}o'5X5 P}!:0Nr5 P}^}5 P}a75U5 P}rsOwi 5 P}$qv5 P}}95 P}8(Jl-'5 P}as"5 P} 2 N{5 P}wAm5 P}F5 P}oqf:5 P}+,5 P}M(65 P}B\ޣ#5 P}kU8 5 P}e/t5 P}Xib5 P}t5 P}=bҒu5 P}@d5 P}{3185 P} 5 P}X5 P}.h$w5 P}]~k?5 P}YpP5 P}@gtb5 P}p~a+5 P}QOp38 5 P}5j;5 P}sk >5 P}#a1V5 P}~S`a5 P}sY)/^,5 P}Fh-5 P}E5D5 P}괙B95 P}M6?5 P}~MjA5 P}3]l5 P}I Fe5 P}gH <5 P}Q?5 P}տby5 P}b1E$,5 P}M3q(5 P}C?}٧5 P},U5 P}ch5 P}/ݶ\O5 P}Jsf5 P}@%U٦ 5 P}>-5 P}z`65 P},5 P})5 P}mhǐr5 P}5eBd5 P}x{K 5 P}$r 6L5 P}V5 P} _d95 P}q=5 P}{X%5 P}cT5O_5 P}X!K25 P} NJ^ 5 P}Y t<5 P}*/EW5 P}5oC5 P}c5 P}gt5 P}=@Kj*5 P}8I`5 P}2Z MX@5 P}WÐp{5 P}md5 P}]5 P}}(C"/5 P}:e5 P}G)5 P},M!>5 P}sR0 5 P}09|tw5 P}hԗ5 P}U۸q5 P}; zR5 P} l9hM5 P}*mh) 5 P}@t5 P} 壮5 P}iϬ25 P}tRY5 P}q 2Q5 P}-|~5 P}$655 P}1p5 P} ӫ5* 5 P}W.5 P},K]v|5 P}c-05 P}.(y5 P} )?5 P}%`H5 P}gw85 P}OZIդ5 P}j5 P}gGb`>5 P}+cG5 P}V'bn5 P}e:1 5 P}I{5 P}ti s5 P}xi2[T5 P}cΫ85 P}IU5 P} =P/5 P}I#lI5 P}Μ(Ֆ5 P}}}5 P}5 P}[[>O5 P}5fN^ 5 P}u5 P}I<5 P}545 P}+yK4_ 5 P}WZq5 P}yò5 P}xB05 P}S-}D5 P}lQڴ5 P}Ԁ5 P}ރ uD5 P}}BG^kG5 P}0!y~:5 P}%"M5 P}aR&=5 P}eUL(5 P}[q5 P}\5 P},5a5 P}~Ƴ'<#5 P}V `5 P}? R5 P}C1ք5 P}dމR5 P}{헯75 P}Khq5 P}v_5 P} $=5 P}v'G8֥5 P}dbD;G5 P}'|5 P}tx ľ5 P}*GQ5~g5 P}j9=ihu5 P}[ NrQ}5 P}${Έ5 P}(1Lx9c5 P}(@5 P}7*5 P}i5 P}Zf 5 P}.:t5 P}= w5 P}*-nLш5 P}{Ƌ5 P}db~5 P}Tw//+5 P}:7j_5 P}?5 P};W5 P}nl5 P}=es5 P}D5 P}T8OA95 P}V5 P}Ź~5 P}_@x5 P}5 P}dp5 P}kV r5 P}|=5 P}F5 P}E~~K5 P}cVjy5Z5 P}[45 P}05 P}3]wAb5 P}Xo՛5 P}βn5 P}DlJ5 P}n̆FC5 P}dHB. 5 P}K5 P}5ҢE#l5 P}v5 P}yڂ5 P}u44q=5 P}!!BC 5 P}u/yhJ!5 P}M3Z5 P}Ml̶5 P}5-5 P}%5 P}3+'Z.5 P}SE5 P}t5 P}}@zC5 P}Hנx5 P}؟ƨ5 P}EnL\5 P}85 P}l1:B5 P}\"wA15 P}%l2"75 P}7 ~;5 P}:L+45 P}/c! 5 P}=\Np5 P}hhg5 P}/WFbaS5 P}cx(#<5 P}Mh5 P}GSj5 P}$f=5 P}).75 P}U 5 P}!4;U5 P}ӠL*Z5 P}(z[?5 P}SgB 5 P}C/ED5 P} R,5 P}Pp)3M05 P}L7 5 P}YY5 P}NYJ/5 P}*;f45 P}.d[5 P}M7Hab5 P}@6]5 P}8c5 P}Mn6${5 P}(״5 P}oSL5 P}ӝ $<5 P} \5%֋5 P}RsrF4.5 P}C_Ƨ5 P}x"$+(5 P}ee+5 P}Pq#_5 P}șhr 5 P}ˣHͥU5 P}?z85 P}B9IH5 P}+B5 P}D5PR5 P}/rs5 P}͋15 P}_rc5 P}4q/5 P}55 P}tbZ@5 P}d$k$5 P}Fל 5 P}:K%?;5 P}>ВJ5 P}vEѼ5 P}K?ɮq5 P}NgLZ{5 P}1:Bs5 P}ok5 P}bA׳5 P}D)/5 P}u5 P}Ix,S,5 P}#`AS5 P}?opa5 P}b게n*5 P}ǫӃe5 P}y̦v5 P}-5 P}㹭'5 P}Ux5 P}Hꞷ 5 P}!25 P}_BXv5 P}/h5 P}e@Bx5 P}@,<7z5 P}TPF5 P}#5 P}g:j"5 P}xT5 P}[CYʒ'5 P}">.Pu5 P}.xas 5 P}S7>5 P}Q6 t5 P}F@5 P}:w"$5 P}pyh5 P}v3i5 P}S-Li5 P},ok5 P}ZG]5 P}|T'[45 P}=8ql5 P}ziQmK5 P}DG5 P}~9j*5 P}Rj" 5 P}!Wo5 P}3d5 P}{5 P}/k5 P}5 P}R-zSX@5 P}R/!,u5 P}ݛc˟5 P}3 5 P}$kX4"5 P}Y5 P}-:_5 P}M2[A5 P}n:5 P}r5 P}PdM5 P}t5 P}6rRp5 P}*N`5 P}`%5 P}3H/5 P}Sa\5 P}&5,5 P}Ҙ5 P} -CP5 P}kF5 P} 065 P}/:Juqz5 P}S|(;5 P}g5 P},̛o*5 P}(H5 P}ٙ.H5 P}~N5 P}#Tj|y85 P}Oqp?W5 P}VBȵS5 P}|j"5 P}5 P}e@B5 P} oqj5 P}ܰΈ5 P}׳}5 P}:PHA5 P}N[H'5 P}.5 P}O"3e5 P}#e<`5 P}=܉eh5 P};t5 P}N6E5 P}G_ťW@5 P})UEk5 P}.5 P}.u 5 P}T WL5 P}fK1 5 P}Aj5 P}TȄ[(V5 P}@q5 P}{ri7\5 P}nk ;5 P}KV<5 P}S.wKK5 P} Oy5 P}vVb>o5 P}V?'z}5 P}D2Q5 P}x}&5 P}/u5 P}D)5 P}=Gq7\5 P}5 P}"wsa`25 P}>[5 P}$eyB+$5 P}&m}U5 P};hU35 P}/f5 P}&75 P} gW5 P}TNmg5 P}¨ 5 P}֓2Ҕ5 P} 5G5 P}*5 P}}05 P}\b/A .5 P}]l*~eT5 P}"{8f5 P}cM-}<5 P} N5 P}vh:5 P}a5 P}/}j-5 P}-Pzkl5 P}=/4Nj5 P}hn}5 P}A8N5 P}o~ 5 P}E~W5 P}T>5 P}L[ba5 P}( x\5 P}^KhzNY5 P}5A5 P}z>+;rI5 P}\u@5 P}}Yd^}0B5 P}ӕ~q5 P}y 5 P}nq1me5 P}pn 5 P}Z5 P}YG>+5 P}"x5 P},&,5 P}@VG5 P}'V5 P}eG@Y5 P}mDS5 P}-k/5 P}W5 P}춤T|5 P}-ⒿU\n5 P}g9'5 P}eh15 P}o>V5 P}IJ 5 P}7)yP5 P}z(~'5 P}%L5 P}mUPo5 P}ТQ!%V5 P}*aNg25 P}\5 P}ɇ{ Z5 P}.]"G5 P}1h7N55 P}JWς5 P}C:D5 P}aw5 P}K= V95 P}^y`5 P}3J&دR5 P}8ijt5 P}!W7!H5 P},iܖ5 P}\X05 P}S4N[5 P}2^5 P} Bl.5 P}HOڷh5 P}dA5 P}$ #3_C5 P}z`0s5 P}05 P}'{m;S5 P}EK5 P}U٨^f5 P}QP45 P}}.o]5 P}925 P}ZR5 P}G5 P}<& 5 P}+쳩5 P}+ɸ 5 P}ydFP5 P}'.MC 5 P}{:Uo5 P}bXUD5 P}mSz5 P}rzA?5 P}nJqzE\35 P}A5 P}t}p܊5 P}lAQk/x5 P}fIц”5 P}$*5 P}'5 P}zRN5 P}[D ^5 P}^" 5 P}f5 P}UJ5 P}a7 x25 P}t{ne5 P}($0l<5 P}_6%5 P}[[5 P}v+5 P}B{5 P}_ #)5 P}U5 P}x}ٔC5 P}xmzP5 P}uC<5 P}w\5 P}gV _Y5 P}POEF͐a5 P}N>I5 P}k}O`05 P}b$?5 P}vo5 P}-ȁ }Q5 P}tz5 P}FM=&5 P}Ӈˊ5 P}F_mMe+5 P}d2{b5 P}YJ+5 P}>"5 P}44okK5 P},%B05 P}@#l5 P}fU-5 P}'" 5 P}i1kG*j5 P} (ڴ嚬5 P}^rA5 P}W: [5 P}dwT5 P},P&ގ5 P}%Jw v5 P}tzx5 P}!M85 P}!x`/.5 P}5YmWN5 P}@HC5 P}GA05 P}O45 P} ƣ̡5 P}Ol#5 P}[i;5 P}Uah?5 P}ʙM 5 P}Jr`9r5 P}'&5 P}L-2n5 P}I{}5 P}DOd5 P}d-fID5 P}IU$vr5 P}2( ѕy5 P}]}'5 P}9;{w5 P} U\5 P}D5 P}^t"5 P}i%K5 P}t#h75 P}ǛO5 P}vMOn5 P}˅`@[5 P}UFv5 P}SBl<5 P}CaگyC5 P}"d5 P}ES| 5 P}?xw+5 P} 7.;R5 P}D |5 P}Nҟ4X˼5 P}3Go5 P}%#H5 P}+T͑5 P}3ЧD<5 P}n ?5 P}{E q&5 P}QcM5 P}.RL@q5 P}%$5 P}ؙy{-5 P}zЎN5 P}hG5 P}''oS5 P}oƫ5 P}1=%5 P}G[ˏg5 P}q) h5 P}5 P}~5 P}T<5 P}Ӣ0Fu5 P}|LK5 P}кOx\5 P}ETtn_5 P}%"ҽn75 P}5]^5 P}9*]5 P}.BH5 P}G]5 P}t{#c5 P}[ 5 P}5 P}Vu5 P} Y*5 P}vv5 P}@nr}5 P}zh5 P}瑚TUP5 P}Jh5 P} "FI@M5 P}&8Y7V 5 P}s}g4Q5 P} P5 P}&6a>5 P};j%,5 P}C=c n5 P}ZyxJ5 P} m5 P}t!5 P}^5 P} q5 P}a ^25 P}#iZ5 P}P 5 P}l5 P}%NO+B5 P}vŪB.F5 P}2Y5 P}^`q5 P}g!Gx5 P}u5 P}qLg5 P}5d!5 P}c 'CC=D5 P}'!4395 P}g+!5 P}'Hi5 P}ߘ~Ub5 P}Z ;e0#5 P}$s5 P}fr@=d5 P}l.T5 P}϶[ݮ5 P} B5 P}/G5 P}7/AOv5 P}ZF8E;p#5 P}$Թ5 P}!sEm5 P} B5 P}0n 5 P}rYb5 P}&< nw5 P}HsJ]5 P}u}75 P}hzU<+5 P}H%~5 P}!J5 P}!Bd5 P}?K M15 P}';5 P}%tCmm5 P}z(85 P};O6@lz5 P} {hDƠ5 P}j'a,15 P}l 5 P}7 e&5 P}[P 5 P}g(fk5 P}ϢA[5 P}H&\{5 P}#C5 P}{M]5 P}d\J@5 P}-)`5 P}PK5 P}]À3Q5 P}0Qo@p5 P}0'?]5 P}+G5 P}.05 P}ȘA hZ˺5 P}CF`5 P}eJ5 P}ُ5 P}ӐK w&5 P} .Om\5 P}ە(ͽ5 P}w7 5 P}>ɟL!5 P}Vd5 P}t;6V(5 P}Wj5 P}i_5 P}pq<5 P}LAm5 P}`5 P}4q/5 P}zH5 P}Y85 P} c(5 P}"zq2!"5 P}5 P}Y'm5 P}XHDt[85 P}̲[5 P}?"@5 P}KuYkP5 P}L5 P}kԃ5 P}Zp(S[l5 P}1/;5 P}cs5 P}XfOt 5 P} 0}[5 P}Y2C(5 P}ʣF5 P}i-O5 P}l֨ú5 P}5)M05 P}50 CM5 P}36g#15 P}3e-5 P}iLJ#65 P}p~ qZ5 P}Wl:5 P}`B(hr5 P}$5 P}R5 P}e˝H5 P}3<'IF5 P}i4$5 P}]O<5 P}If5 P}j5 P}"IPe5 P} PSڞ5 P}}zbCa5 P}׈5 P}0|H5 P}vwfY5 P}:X5 P}X&x05 P}May)5 P}3a'5 P}'S:(w5 P}̝DZ^ 5 P}8n( 5 P}5 P}*hwi5 P}^~Y5 P} ,Y5 P}/Uꨱ5 P}řPnZd5 P}T^5 P}2=H&5 P}~ !5 P}̴+S 5 P}dAu]5 P}޿eS5 P}iv>5 P}r>y5 P}GD5 P}޹ky5 P}jBk%x.5 P}ѤҮJ5 P}+LɟG5 P}P'|tT5 P}Hj5 P})5 P}uV\D5 P}o~85 P}6 5 P}ec5 P}.g=L5 P}NLrw5 P}/o5 P}W{!5 P} S6ɹ%5 P}/WS5 P}GF 4g5 P}r7 Gjj5 P};'5 P}QO^l5 P}5>l5 P}q/5 P}o,BFb5 P}h\ p5 P})g5 P}PbhLf5 P}@8|5 P}w]8,5 P}^FMR5 P}Øzp5 P} |$"E5 P}L,5 P}K˧5 P}< s5 P}< w5 P}h\LR5 P}QO5 P} [\85 P}ZbtH5 P}\15 P}n .+5 P}6(~t5 P}ƛPJa(I5 P}*H`5 P}95 P}kz5 P}Ee5 P}æ5 P}э5 P}ڢn5 P}Fjg5 P}2~5 P}DBC5 P}غyj5 P}g"v5 P}Jp>%5 P}jD"Kk5 P}I%ZQ5 P}y@5 P}vS5 P}D!65 P}aMe5 P}p6.s5 P})JQ5 P}ۭ;5 P}9xU͞5 P}7i5 P} DT%5 P}7kdP5 P}jO$ظ5 P};yJD5 P}]xlC5 P}qvջ5 P}~5 P}.4{5 P}궋ob5 P}`[L5 P}by.KD};[5 P}WE[)D5 P}FwS45 P}轭|m5 P}D#B25 P}@л~ 5 P}h$t~d5 P}؃.@5 P}lv5 P}xK%5 P}F]5 P}<]35 P}"m5 P}H9xR5 P}005 P}@&U{5 P}a s"c 5 P}A7 5 P}T5 P}+J05 P};OY 5 P}O\c-5 P}+#5 P}ީ%5 P}?(O5 P}@cGA5 P}˜p^X5 P}$t5 P} Za5 P}5 P}8fe5 P}5ˆ.5 P} m5 P}xtn@5 P}5c$%5 P}Du5 P}H=%}5 P}GV?25 P}nBד!*5 P}]H-5 P}b tQ5 P}jq5 P}W#f5 P}HQ]05 P}J%. 5 P}Ň`G5 P}t81G5 P}:I]5 P}u?VZ"5 P}㪕Eǔ5 P}=5 P}!p"y5 P}*J/5 P}<ʶC5 P}EwT."5 P}"v5 P}T|g5 P}bU}T5 P}rQx5 P}!-P5 P}]6Sj5 P}h5 P}&qbN5 P}HxOY75 P}@|P5 P}mX5 P}RG5 P} 8vX`5 P}ΫXBJ5 P}kjT8]5 P}"5 P}tȚZ55 P}žn5 P} rI5 P}8 V,5 P}#K5 P}^!h/P05 P}[j[\*5 P}Ljj5 P}T$5 P}2P;C5 P}kVyVO5 P}{i5 P}B )v5 P}Sg 95 P}K5 P}T15 P}C$5 P} ߏ(Aq5 P} ɽg5 P}-15 P}m5 P}#i&n&,5 P}MlB45 P}Ho65 P}Ê1’K5 P}6B5 P})ʗ5 P}#RuSD5 P}U ؜5 P}_GZ#5 P}BxBOH5 P} y5 P}4?i5 P}dE55 P}#ȷ<5 P}5 P}SAt~5 P}pI5 P}w5 P}}ֳ.5 P}cZ5 P}^Ovaw5 P}eK^5 P} L5 P}7 5 P};cɊ95 P}b36ωK5 P}QD%\5 P}mts5 P}k+5 P}$ 5 P}:f>Y5 P}k05 P}k P&5 P};tchv5 P}|]EBn5 P}-l5 P}ɟ'5 P}͆W 5 P}l5 P}I5 P}\w5 P}{ujxD5 P}Qνjl5 P}ϒvVa5 P}875 P}Z2i5 P}MDע 5 P}z0Ի5 P}ݺu7x5 P}\#4uT5 P}KeBC5 P},h|%55 P}afFa5 P}Zt5 P}-<5 P}Edd5 P}m|>gw5 P}| ,I5 P} 2Lm_5 P} an!@5 P}_(y5 P}$ic"5 P}뾹5 P}iur 5 P}m5 P}TD5 P}`URsT5 P}ҀDa$5 P}MCU5 P}p%kՐ5 P}825 P}0](5 P}Pqx5 P}v0X5 P}EqC5 P}_5 P}~c@5 P}zdg5 P} _:V_5 P}#c5 P}%fccQK5 P}vpw5 P}0<5V[5 P}jY]W5 P}hkz$5 P}h3Ƶr5 P}Z5 P}JY@5 P}zģ5 P}E 5 P}u5 P}v5 P};u]5 P} 2!;35 P}3cW5 P}8-4%25 P}2j5 P}cd5 P}>p\5 P}GRz5 P}ޔwR5 P}55 P} @v5 P}>@Ʈ@5 P}6X5 P}==kd5 P}?LY5 P}bF)5 P}]b)m5 P}%6{$5 P}U#fa5 P}YH+ǎ5 P}S:a5 P}?Hw5 P}0]U5 P}E5 P}>$hW25 P}LWҧf5 P}˜co5 P}栩2I{5 P}$fʷe5 P};5 P}S印(5 P}`׆5 P} b'b5 P}A^4Л5 P}pLy(#C xF F (  b V ` p    T v ^ N       z  H X L  h }  f d  {  R    \  j t P  (G  T5 8ITXZ0mhZJ O uT vlnw:|,C"9^UZ  Ur prK5gai{)*F vWQo=-ywQq%D((!@      "/* 4,,b-+555o6:,:c::;;4<<+===K>>_AOdOOOxPPQ tTVVYZ[P\\__c``:aa9b7cd7eff ?ibijNjjEkll&mQmmCnopVpvpp(q t:ttuvjw6xxxMyy|}}r~$;mŁ#@(Eq($(z+Dv$Ǧe٨9\0SޯCf!G33K ȷ5` 9$\ /]|W{nU#~Y(C<E X|^gqD %H)  (K]Q|2~O   e    R  m?cTz!""##$G$$9%&&:'e'(W("*E***d++O-r---..//A0w01c17:>?(?I?j????4@@AAkBgC DFHQIIZJJ:KK0LLLLQMMNuNN4OOPPP0QQQ5RRRSSSSST z  r,S t_CloU;Ic U      e  = `   p   q #  e K   g     7   M    k   a   2 U   :  Z  `     d { ! @! ! " " # $ m$ % & & u' ' ' \( ( ,) ) ,* * + + + + , t- - `lC C uE G rG G AH H H I `I iK @P hU  V V V W W W X  ] J] ] ] P^ <_ Ob yb b .c c kd te e f >f g Ih ih h Bi i j k k l l 6m m n p 2p Rp p `q  r r s t t t Zu Av +  ؆ k ʇ V  q Ɖ   6 S r ʋ    Ҏ  B - f H x ё + b  | ߓ d Е  / O p  G   z  ~ / ǚ  c   Y  {  S  (  B }   A  " c L   è  ; թ  3  2 ,   ׮ R ɯ (  I  H   8 j ó  <  Ƶ  = ]    V ;   7 ݻ ̼ н  "  W F  y   I j  d  @ } c  h U x  y   3 V   7 x c  j     {   z  ;   \   B     *  8 y   D2 y57SGTXZZ\ mV ~- C lF ZJ O uT U  ¹ < # <2 P,F=  $::;<=NtOP^$`bPhillAo/pJ!"#&'k)o*,-*/0>?@L QRSTUxWY \)\0\<\A\H\Q\]\r\ijk^lLop {|} 4iG%[9`ܷù 5A/@qG.  9 $  c n  C   ? " X& ' + + C rF H U U W  ] ] <^ ;b b kc Ae e 6f g h i Sk l m o p q s lt =)0ZWw$EvAWYWw+X<<d'T.$ h|yJ"@)g+,-45B69@::<<==_>NOHOOHP]QS|UWZu[[\Q^@__j``bJdde`fghFi#jcjkqll-mfmnoo]pprst4uvvwxxby{||}~GBtځ܆$h| Yd5}9S$l(@7J(\w,b{k% 7]  mUG(x,>/2Xr $     g sjat!"g###$\$%&&A'z')))***=,-V--..S//H0057>> ?.?O?p??@@A2BBD/EF$IIInJJNKKQLL MeMM$NNNHOO0PDQQIRR$SSSSTDTTTU:UUV\VVVW*X}X YUYY"Z|ZZ[^ _h_m``\aaabcccdd""J: 3 = G N X b i s }        _ u    "**,.,,\-/55i699:&:]:::;;;.<<<%======E>>N"O:O]OxOOqPPPQTTlTLVdV|VVzYYYYYYZ[I\\$_q____(`6`D`\``3aa bb2b0cd0e ffhii8i[iiiijGjj>kUllllmmmJmm 8PBPhuWy`6DRj=A"!D>V$2Ju+N\w" 0 H     F ^        K  zXf)7 %@N\M!$!*s****]++,:-H-k-----..7/z///0"0:0p01]16777"7.7:7F7N7Z7f7r7~77777777777999999999: ::$:0:<:H:T:`:h:t::>>?"?C?d????.@@AAAeBKCaCDDEEF.H:HPHiHuHHKII>JTJJ4KK*LLLLKMM NoNN.OOPPP*QQQ/RRR SSSSSS T%T6TvTTTTTU.UOUUUUBVVV?W|WWXoXXXXXXY;YYZnZZZZ[[[r\^_z_``oaa bb)cccddOeff6ggggjiiijjkkHl`lllpnznnnnnnnnnnnnnoo)oNoZoFpqq rs ssrtuuv]w=xxwy zz{{{V|l|||}}}}A~~~mki-dȂ"{zxwuI_viӉ12'ˍڎI͒Loؔ5g͗ۗnF˙pӚE",3=I6BwѠ̤͢hū۫ ά+AZfrMY԰)5Ayamdz =IU-ht10иɹչ/Pq@sE?K+C !5O[DPe*^fr~d  #8Nd "8d|[sk%Ljx_m Say !<JX<}Me4BPhN4B\ | N      ^    6 Y |  C Q i    R j   * 8 F ^ D  `    m {  0   |  . F   t     d   Z      + N     3  S  Y        ] K Y t ! 9! ! " " " " # $ f$ % % \& j& x& & & n' ' ' U( ( %) ) %* * + + + + , n- - ZC fC C oE G G lG G ;H H H H H I ZI [K cK 2P :P ZU bU V V V V MW W W W X ] ] D] ] ] ] >^ J^ 6_ =b Ib sb b b (c mc yc ed Ae ne e f 8f g g -h Ch ch h h u Tu ;v  ~ ҆ O e ć P k  0 M l ċ ߌ ݍ  ̎  <  ' ` B r ˑ % \ w ȓ ٓ R ^ ʕ ) I j і ݖ A  8 t  < x ( " ] }  R u  L !  F ޡ ; v ڣ  9 z ۤ  [ F  4 Ω , + Ь % ܭ  Ю L ï !  B  A | 3 e ݳ 6    7 W x  O 5  A κ  1 R ʻ ֻ Ƽ ɽ  H D P @ }  r - C d ^  9 v \ a  N q  r W e } j x , N / p [ H b s   r  4   U   :      "  0 q      ( 0 8 @ H P X ` h p x    ( 0 8 @ H P X ` h p x    ( 0 8 @ H P X ` h p x    ( 0 8 @ H P Y b k t }    ! * 3 < E N V ^ f n v ~     & . 6 > F N V ^ f n v ~                     & . 6 > F N V ^ f n v ~                     & . 6 > F O X a j s |                   ' 0 9 B K T ] f n v ~                     & . 6 > F N V _ h q z                   % . 7 @ I R [ d m v                  ' 0 8 @ H P X ` h p x                      ( 0 8 @ H P X ` h p x                     ' 0 9 B K T ] f o x                   ' 0 9 B K S [ c l u ~                   ) 2 ; D N X b l v                  * 4 > |Walnw~w<g~.C$9*;'iV")$t prM7[gak*})*F v;Qq?b-yCXnS%;Qq%D((P !@8 B L S ] g n x         e {   The6",)*S+,l,-45.6999:,:e:::;;;r<<<-======K>NN)OAOfOO3PzPPHQS[TgUSVkVWYYYYYZ`[[\J^+_x____/`=`K`c``ab!bb5ddeKfghi$i?idiiijjNjk\llll mm&mQmnooop:pHpVpvprssstJXndv#V*~>X@'?IWo2l=KYq %J) (MEk+9Q|Uc~) 7 ]     M s        R _{^"0u,GUUL_V!+!C!^!l!z! ""R####$$$G$%p&&&&',':'e'()*"*G*z****6,,A-O-t-----.>////0)0A0w056777(747@7L7T7`7l7x777777777777999999999:::*:6:B:N:Z:f:n:z:}>>>?(?I?j????q@@AuABBQCDDEEF|F4H@HVHoH{HIkIIDJZJJ:KK=LLLLQMMNuNN4OOP0QQQ5RRRSSSSST>T{TTTTTU4UWUUUUHVVVGWWWXwXXXXXX YAYYZvZZZ[ [[[|^_b_g``Vaaabcccdd6epffggggQipiiijjkkPlfllmunnnnnnnnnnnnnn oo1oTo`oNpqqprsWs tuvwwxyy`zz{{{\|t|||}}}}G~~~sqq3j΂(~}}O|pډ89 /ҍԒ Svߔ–nƗԗĘMҙwښM '18COО<H}/Ӣ7Ҥ |ߩp˫֬%1G`lxϯS_ڰ/;GgsͳCO[޵nz76KϹ۹5Vyú#H%yK'EQ3I' !;UaJVk0dlx >Tu(@fkbUq#TfZh?(CQJTTR;IWoW=I U          = `   J X p    Y  1 1 ? M e 1  g    t   E     5 [   {     k   a      2 W         b      ~ R ` { ! @! ! " " " " # m$ % % c& q& & & & ' ( ( ( `) ) k* 7+ + + + + 6- v- B `C C D 2F G VG G G CH H H H H I SJ aK O 8P nT `U U gV V V 2W SW W W W \ ] ] l] ] ] !^ D^ P^ a Cb Ob b b b Pc sc c e Ge e e (f >f g g 3h Ih h h h di i i j kk k k k k Al l l l Xm m m m (o o o o p 2p tp p p p q q q r Ls s s s ;t tt t u Du Zu W B 0 † ؆  U k ̇ y s Ɖ  6 S r ʋ ό ύ  w , B P f J x ё N | X d Е  / O p ז j  > z  B ~ ™  /  ( c D  } < S ֟  (  L Ρ h  j K c o $ ; թ   2 ׬  , έ ׮ T ɯ  ( 4 o n : j ó & <    = ] ? V =   G Ժ  9 X л ݻ μ н  $ N ' J W H   3 I j  f  f } j  U z  y ^ l  q  3  ` x P W      q  ;   * B       " a y       & . 6 > F N V ^ f n v ~     & . 6 > F N V ^ f n v ~     & . 6 > F N V ^ f n v ~     & . 6 > F N W ` i r {    ( 1 : C L T \ d l t |     $ , 4 < D L T \ d l t |                     $ , 4 < D L T \ d l t |                     $ , 4 < D M V _ h q z                   % . 7 @ I R [ d l t |                     $ , 4 < D L T ] f o x                   # , 5 > G P Y b k t }                 % . 6 > F N V ^ f n v ~                     & . 6 > F N V ^ f n v ~                    % . 7 @ I R [ d m v                   % . 7 @ I Q Y a j s |                   ' 0 9 B L V ` j t ~                 ( 2 < F P YG;%s7-K@|1]dNNGM aKw97[ }i:\9)Hb0P oVJre{^^ 2Hc6 |2pj  r    GPi")*++,,F-55Y6N99 ::S:}::v;;;<<<=_===>x>NO7OUOoOO^PPPtQTiTUaVyVV+XYYZ[2\\w^Z____Y`u` azaa/bcbdeexfgh2iSiij.jj6kklll8mm4nnoo*phppqrs t+tatt_uu.vvw`ww,xjxxxy{y{||}9}}~h~~r$~.M51X 0HƒWΞ'e}šzNi=y3M^4DxU9W3%>1,CŻ S&A_#v2w_C 7e0|QPu3"V&5Me}^@ @@g9| <rGS]GcE7qE   O   [   K     ":1Z 9!Q!!""###.$$*%%&&'L''H())6*j**8++S,'-c---e../l////70S00U1>>>?;?\?}???&@@@AAKBC^CYDDEEFFMHcH;IIJQJJKKLLLL;MMMVNNOyOOtPP"QQQR{RRRfSSSST T2TTTU'UGUoUUU2VVV/W_WWWYXX3YYYPZ[^_s_x``gaabb!cccddGeff/ggggbiiivjjpkk6lYlll%oGo"pdpqrsNtbuZvBw"xx\yzz"{{{|i|}|||X}}}(~~~RRPzځ*\kڃV_^\ \oY eďԐA9^$&֖I7+ l[5}ʢߤMثiˬ >Tr̰ X4l )J׷gHiԺq6 ^}O=0p;<~*f6 ] rIKa5X)y pF;9gHe v6l7bVe%v"S,` 2    d  B 4   Q t   f  [  g  q [ w  ^  {        7   C   3      ?     % F |  x   3  9      U  n ! 1! T! " 9" " ]# # ^$ ,% % & & & E' ' ' B( ( ) ) * * e+ + + + , ^- C C PE [F gG G H hH H H I ;I U xV V V CW }W W W X \ 2] ] ] 7^ _ a ab b c fc Ad &e fe e e 1f f g h @h [h h h &i |i i ~j #k k k k k l hl l l m m m m n Vo o o p $p Dp p p p @q q q r r js s s t St t t #u Qu v u ۀ  Z ݁ N φ 4 b ܇  P ى   G d ، K ؍  5 ʏ  Y ' X đ  W \ ē Փ w •  # B b ʖ & . j  2 n ! s Ǜ S v  M Y  E ߟ   w ס ) q } 2 s Ȥ  T ( -  ǩ % ܫ $  ׭  w ɮ 0 d ܯ  = x / w  G | ֳ / =   P p H  Y . q ) J x û ܼ  ½ Ӿ  5 y =  V  `  @ \ } H v  1 o @  ~  D i  + 0 z C _ " G  i =  _ U   T     M   3   N     + j   CL3'}l 0&B1m"wGNEv?8>O 9n*(mRnZ1wM* AYz'G`G;i^tNN\+AYy,xosr(s`Z  k    u(1Y")*+$,,6- 55O6&99::I:g::f;;; <t<<</====n>NO0OKOhOOTP|PPjQSbTUZVrVVWYYZ[!\\T^P____R`k`aHaa(bcXdeenfgh+iIifij$jjkklll.mmnnoo p^ppprst!t>ttFuuvvvYww%x:xxxxqy{|||}}}a~~Y w'Cu!'Dz)AەMĞ^vߠ~iۣfDU3oC`T :WK 2Mj)7 ̷%9 L1Oo+<O!^ f!F_,@y.F^vT/6`y R/L2O.LD@Y"-j>   6   T       v 3'X:2!J!!""v###$$$$%&&&B''()),*I**.+r+?,-Y-v--[...b////00I00#1>>>?1?R?s???@@@ AAABBWC:DDSEEFFFH\H1IIIJJJ KK LoLLL+MMMFNNOiOOdPPP|QQRkRRRVSSSSTT+TTTTU=UYUUU"VzVVWIWWWIXX)YrYYCZ[^ _i_n``]aaabcccdd=ewff%ggggXiiifjj`kk&lRlllo3opPpqrs>tRuJv2wxxLyyz{{{{b|v|||?}}}~{~~BB@s#R[ʃFONLUeIqTیÐ^r/M̖x80uٙ~X؞Q!Uâ٢nؤCrѫJĬج7Mׯh°N|ֳb@S>_{ʺg,Jm? )f+5n#\&+b9DZ.B ri5*x~V7)ow/} [![.^wb? qO !  s  S  1    G j   _  B   `  X T m  ;  q      l     <         .      < Y  n   )  / d     #  g ! '! J! ! " " S# # ,$ $ % % & & ;' ' ' 8( ( ) ) ) * [+ + + + , W- B C FE 9F ]G G H EH H H H 1I U nV V V 9W sW W W X \ (] n] ] #^ _ a Wb b b Rc 1d e \e e e *f f g h 9h Qh h h i fi i nj j k k k k l Cl l l m Zm m m n 1o o o p p :p vp p p 0q q q q r Ts s s t =t zt t u Ju v _ р  D ́ 8 Ȇ  [ Շ  { @ | ω ъ = Z y { ь , э  . Ï  R  Q  P L Γ m ٕ  8 X y  l $ `  ( d ٙ  b I l F H ۞ > ؟  ڠ  m С  j l  ( l  M  v & n  ˫  z ެ  t Э f ®  ] ү  ڰ 6 q  p  @ r ̳ ( ) ϶  F f A  E $ g  @ n ռ  + o ) O  O 9 R s 7 o  ' h / t : _  s M  = b + X C   B   y  C   , v  -     $ c   C jF R[]Q'9/D5\RKQ$cM{=;_m>`=-f4T$sZNvCcch;#7uo I  vin")+,K-55^69!:X::{;;<<=== >}>NOZOqOOcPPyQ*T(VVMYZ[7\\^____!`z`aaacgdee}fgh4iXii3jj;kklll=mm9nnoo,pmppqrs t0tytzuIv!wwxx yy{||}Q})~~?R76ZĊ˒\Ӟ=Bۢ|SkB~5RĬc6 IzZ\8ò*@H޻ ""Fd,dzM5gU5'n+cEXE/>Abx hR<s j       6!!"###3$$/%%&&'Q''M());*l**=++U,,-h---j../q// 0X00Z1>>?@?a????+@@@APB,CrDEH@II JJ KKLLLL@MMM[NNO~OOyPP'QQQRRRRkSSSS T"T4TT U,ULUUU7VVV4WuWW^XX8YYYRZ[^_x_}``laa bb&cccddLeff4gggggiii{jjukk;l[lll'oIo'pfpqrsStgu_vGw'xxay zzM{{*||||q}}-~~~WWU|ap߃[dca%t^%jɏِF>c”)BۖN9C"n`7àRخwѰ"]6q.OٷiMnٺv;` TB2u@>,k;b%wN"nD;K@TlM& q D+*x'U!1e 7    i  G A   V y    v ( ! | k  $       R   k     D     ' K  }   8  >     Z  p ! 6! Y! " Q" b# # c$ % U& & J' ' ' G( ( ) ) * * j+ + + + , `- UE !H H H I @I U }V V V HW W W W X \ 7] ] ] 9^ _ a fb b c hc Fd (e ke e e 3f g g $h `h h +i i j 9k k k l l m m n lo o )p Ip p Eq q r vs s t it t 9u !v  y Z J އ  U މ   L i ڌ v ڍ  7 ̏  $ [ , Z Ƒ  Y a Ɠ ד | Ǖ  ( G g ̖ + 3 o  7 s # x ̛ X { O ^ G  ! | ١ . s  7 u ͤ  V - / ɩ ' & ٭  | ˮ 5 f  ? z 4 y  I ۳ 1  ?   U u  J  [ 3 v  . O } Ż ޼  Ľ վ  : ~ ? X  e  a M x  6 q E  I n  8 R e d ' L ! k B + Z   Y     R   5   k    - l  %.%XN<~k7>9 v?>*[y&GxBYZY==fU/% i}zK"A)h+,-45C69A::<<`>NOOIP^QS}UWZv[[\R^C_`bKddeafghdjktlgmnoprs5uvvwcy{|}~Hہ ߆i}Ze8:T')]-c|l& 8^ nVH)?3  s %   h tkbu!"j#]$%&{'))*>,-..V/0>@@A3BBD0EF%IIIqJJQKKRLLMhMM'NNNKOO3PGQQLRR%SSTUV]VVVW+X!YVYY%Z[^n`]abccdwfggXiiijk{lluo*qrlst2u,vwwx/yyuzz{|/}}}^~~J?ʇʈ.PϊQƋ#G%kȓ1ܘ&eמDL'֯KRӽ־< b\h^<PxmG!{k 9jU`j2h aa3   m   5     1   G  9  [    q   y         " 4  # # $ & .( ( ) v) ) * M+ + , N- D H $I U nV V 9W hW W \ ] e^ a b c e \e e Sf g  h h i j k l m /o o q r Ss s t ou ^ ŀ  7   Շ | 5 ߋ  W Ï { Q   $ U ט ( Y ٙ E  ? ל ў i >  c Т z Q H B 6 ] >  ֲ @ Q ( 2  ҷ l D $ \  @ m  ռ  ֿ + c  m O 2   o t / '      p    y Y    %.&XN=l9@:" w@?+[yC/[[???gV0& j ~{L"C)j+,-45D69A::<<c>NOOIP_QSUWZw[[\^E_`bMddecfRhhgjlulimCoop>ss8uvvwfy||}~Kށl~^ˤ9<(+ְ_.e}p' ; pYI7+8BO 6"v (   k @wlcv!"k#_$&&}'m))*,-.,/W/0@@A4BBD3EF&IIIrJJRKKSLLMhMM'NNNKOO3PGQQLRR%SSUV^VVVW,X!YVYY%Z_\gijk{llvo+qrms t3u-vwwx0yyvzz{|0}}}^~~J?ˇʈ.PϊQƋ#G%kȓ1ܘ&fGO+MԽ׾= c\h^<PxnG!|l :k Yak3i b4  n   6    4  J   ^   t   y  E  !     $ 7 # # $ & .( ( ) v) ) * M+ + , N- D H &I U V U hW W ] f^ b c e Sf g h h i Wk k l n o o q !r s s t pu ƀ v 5 ߋ W { ֗ U ט Y E   ? ל ў i > < c Т У z Q I B 6 >  ֲ Q 3 ҷ l ع ] R ׿ f d n s 2   9 N / '  p    Y    rt}I?-o\(/*vxg0/L|h3I  J..VF  Znk<"2)Y+r, -454692::;<Q>NO:POQSnUVWZg[[\2_`:ab+ + + =- D G I V YW W ] V^ b c Me e Df g h i qk l m o q r s t `u q & Ћ } H l ב D Ƙ H ș 6 . Ȝ Z / R k B ܩ 9 3 ' ޮ / Dz B # ÷ ] M ں ^ ׽ ǿ T ^ #   _    J    iPPtQ|QQRRSLSSS4TsT UUQU]UUU:V~VV WRWWWXZXXXYYYYYYY@ZZZ[W[[[\b\\]]]~^^^^_abcAcccGde e`gghhi4kA`CDEFOHeHSJTUW{k|},^̢ګͬ@VMc!7{rx 8dg h  i  ]     E   *   s " % & H Bh h i k k l l m m o p p p q r s t Su ц d B | a   4pryt#{}Rb TBiۨ| ʪkBe(m3avD 84yoz"|U}A"%0dZP1<  T97 CH *"#%%&' C(*-+,-. 0߂0H34766789:;<W$>/?:@EAPB-CiDEGYHIJ&LNPɈQReTS3T=U%W]C^_`a!bBccd{ef h?iijvlmbyyz{{|}~e͍<ƈ .    U;<=>?#;Nڥy[ƪSI }`&s1m2233]4/8[ry~{|Ç/ pt\=4xƾ Usxa ILq $0 1293::;=>@_AC5DpGI1M+P'R]^_acdihikmosu|/ӢUڨȰWMC(y+Lv@oT ]Pu7_ 6%)GH:ddXjj>kkUlnmnuvwkw)xgx"1{2 }~qM5VV 8JzחS˚~J9TcUUWvY[p q_tOѝߞwyz`*x!ʢe$fgrguhUiWppr*sk}Gzz|n~tzL†b0̊̋d8>X& 1y-u]xx%y_wxJy{}HԀG9XYx yx6m)pCŠ.rwt!{i}PE`@g٨z Ȫi@c&k1_eB62 zz 0|Sm~? K.bXN/:  7 AF ("#%%&'A(s*++},-.00yF34K566789:;<">-?8@CANBCgDEGWHIJ$LNPaQ/RRSˊTˋ;UTV]A^_`ab@ccdyef h=iijtlm[wyz{c{|}~c:7Ĉ =,   9:;<=9WLإ%wĪ}QG {}^$ k2233[4-88y|- nrZ;2vľSqv_ GJo $012H91::;~=>@]AC&DnGI/M)P%RT^_acdghikmnp]tw-ѢSبưUKA& wJt>mR [Ns5^] 4v)GHZcdej,.?9@DAOBChDEGXHIJ%LNPȈQRdSS2T4iijulm\wyz{̍{|}~d;ň - ~  T ":;<=>:M٥xZZŪ~RH |~_% 1r1l2233\4.88yIz|‡. os[<3wžTrw` HKp $0 12I92::;=>@^AC4DoGI0M*P&RT^_acdhhikmop^tuwx$yy.ҢT٨ǰVLB' x*Ku?nS \Ot6ɢ^ 5w)GH[cdej=kkTlmmnVpvwjw(xxuy|}!6$$W F9XYx yqy}{֗Rʚ}N9bUUWuY [] qsuНޞ_\xz|)!%#fgqgthTiWjpr)su}Kj4(h1@zuxyyK Yyhy}Po9(m1Ezux!yyKYymyU^eT* L=db[a4&IGkydA{bVpp~xV vw"),,T-'55a69]:;%<=>OhPQ7T9VgYZ[@\\*a'cyd'effjmpu_v7wxy?~~U ڊْj\£zqղQ +/OmFm>p,4 /lNW4x*"  2   D!$'T+.1.@@ASB9CDEHCII#JJ#KK"LLLCMMN^NNOOO|PQRRSpSSU:VVV7WWgX;YYYWZjzk@lll5pq ssatuumvUw5xxoyzz_{3||z}}0~~~\ZXds`gfd.a( ȍܐAfŔ,e<F%Ѡ `%ȸb zCn>*zS/QHNCWo V@)t E/? s  E    w  U   >   ;   h    G     *  J  P  t# $ % e' J( ( ) ) * * o+ + , c- gE 3H RI X ] %_  c Td e  g 4i j (m n Rq r t *v   Z    Ď  1  f 9 } ћ  c   3  Ҥ 2       :  9 !    #   . j  V J    v & G 4  _ ^    t    C ]F   #+ 56789:;5678:56789:56789:56789:56789:56789:56789: #  =>?9:9:9:9:=>?=>?ob9:9:9:9:9: # =>? 9:9:=>?=>?ob9:9:9:9:9:   ##+  #ob9:9:9:9:3 , =>?=>?=>?9:9: #=>?###########$  ######## $,  3 #  ###########$ ,  3 $  :|,"(rK5i{o=Q  :c:;p<+=NdOxPH^_agbiklnpr:t6x{}@[J\Sfo3ȷb~T(<HK T"#%&(E*4,r-./57{>?@LQRSSU;  /     U ` | " % ' + + t- B 0F AH QJ N lT U eV 0W W \ j] ^ a b Nc e e &f g h bi j ?l Vm &o rp q Js 9t u U @ .  ʇ v q   ̌ ̍  ) M H K g    A | { 9 ӟ  ˡ e g H ! ު    ˭  R  1 l k 8 #  < ;  7 ̼ " $ F  d c h x   | ]    o  '     ^ "2N^Ehl6o1s |ywxɰ*+B3"&`),/>T\,?SX 8 7 U ] 3b 7e g Hk {o s i # ۏ i 8 0 ģ  u X } , 9 g ! !  &N^9hk*o%s{mkl6'"&T),/>T[ 3GL , + U \ 'b +e g FKU]eqy#8BJS[cq .BXm $,1?DLTYaiqy~ "*2:X]emuz%*2:BJRZbnv~#+3;CKX]emrz $,GLT\aiqy  %*2:BGOWgow #+>FNV^fnv~"'/7<DTYaiqy ,>CKS[ckpx} !)19AFNV^fnv~ %-2:BGOW_gow (08@HMU]bjrz"*27?GOW\ty "'49>CHMRW\afkpuz     # + ; C K S [ c k s { !!!!&!.!@!P!b!s!!!!!!!"""3"8"@"H"M"T"i"~"""""""""""#####5#=#E#J#R#_#l#y#~################ $$$-$5$M$U$]$t$y$$$$$$$$$$$$%%%&%+%3%8%@%E%M%a%m%r%w%|%%%%%%%%%%%%%%%%%%%%&&.&E&W&k&{&&&&&&&&&&&&&&&'' '4'E'U'b't'y'''''''''''''''''(+(C(W(_(w((((((((((((((()&)B)^)v)))))))))))))))**$*;*O*W*\*a*f*k*p*u*z***************+ +++!+(+0+8+@+E+M+U+]+e+m+u+}++++++++++++++++,,,,',/,7,?,D,L,T,\,d,l,t,,,,,,,,,,,,,,,,,,- --&-2-:-?-G-O-Z-s-x-----------... .%.-.5.:.?.D.I.N.V.c.k.s................/////$/,/;/P/d/s//////////////0 00.060>0F0N0V0^0f0n0v000000000000000001 111!111=1E1M1]1e1j1r1z11111111111111122222&2+232;2C2K2\2d2l2t2|222222222222223333'3/373<3D3L3T3\3d3l3t3|3333333333333333344444&4.464;4N4V4j4r4w44444444444444444455 555#5+535>5R5_5m5r5z5555555555555555666-686@6E6L6Q6Y6a6h6x66666666666666677 7777%70757=7G7L7T7X7`7j7r77777777777777777 88888'888=8E8M8Q8Y8a8e8m8u8|88888888888888888889 999!9%9-959=9N9S9[9c9g9o9w9{99999999999999999 :::!:>:F:N:S:[:n:v:~:::::::::::::::::;;";';/;4;9;A;N;S;b;g;l;x;;;;;;;;;;;;;;;;;< <<#<(<0<@<E<M<_<d<i<q<v<{<<<<<<<<<<<<<<<<= ==#=+=0=8===B=J=[=`=h=m=u=z===================>>>>>)>4><>D>I>Q>V>[>c>h>m>u>>>>>>>>>>>>???$?)?1?6?>?S?[?h?m?u??????????????????@ @@@ @%@-@5@=@B@J@O@W@\@a@i@q@y@@@@@@@@@@@@@@@@AAAA.A3A;ALAQAVA^AqAyAAAAAAAAAAAAAAAAAAB BBBB%B-B2B7B?BDBLBQBVB^BcBkB}BBBBBBBBBBBBBBBBBBBBBC CCCC"C(C.C4C:C@CFCLCRCXC^CdCjCpCvC|CCCCCCCCCCCCCCCCCCCCCCDD DDDD$D*D0D6DGEGLGSGZGaGhGoGvG}GGGGGGGGGGGGGGGGGGGH HHHH%H,H3H:HAHHHOHVH]HdHkHrHyHHHHHHHHHHHHHHHHHHHHI III!I(I/I6I=IDIKIRIYI`IgInIuI|IIIIIIIIIIIIIIIIIIIJJJJJ$J+J2J9J@JGJNJUJ\JcJjJqJxJJJJJJJJJJJJJJJJJJJJK KKK K'K.K5KT\$\+\4\<\C\L\U\j\/BV[ ; : U U ] 6b 9e g Kk ~o s l % ݏ k ; ̗  2 ƣ  w Z . ι  H \ { i $ / D Y   M  544NNNMNMNMjg(+NeverShortCircuit лMM6M)M44ќ=44ќ=Zipa3333a_len3U`qќ=9߽ܽܽ3ե33 IҢ= ք3=ք= ====3 ք== =l c uty== 44D59  Location@@col@heMD  l*>>Custom>>nsʗҷ  ==99==л &&&߁IIIIллٯٯF&J3wлFܴFќ=FFNNNMNMNMjg(+ ք===Os Simple  SimpleMessage Ť= g=  l* ##RawVec&'cap(ܜ 4=л ##̮=&'=(ܜ 4Repr   /Q33 SetLenOnDrop333 local_len3+-&444040bW`(= ##̮=&'=(ܜ 4##̮=&'=(ܜ 4&&##̮=&'=(ܜ 4HoleceltVc##̮=&'=(ܜ 4  l*="=59=:ܴܴL = =l c uty·=99 &9=9==:==3333=3U`q:=·====:=3 ք==ޡ===944ќ=4 VVVVVLLNLL?%   ????αα???>>>>>>α>>>>>B=CB#CC8f AllocError _/G88TryReserveError8~E`T ==  bb߇grE3B=888CapacityOverflow8=8layout8c%/Z ==B= LayoutError ډRS9}=S ==& ((   L20     "%==;4445555555555544455=QT==S=Z=7777<<<<<<<LLLLLLKKKKKKBBBB???3  88ī=88Ƭ=888ќ=8 6666     5   666666     ===555LLLӷ=  MMMMXXXXXX  =D5ײײز _@z/555555л&   л99 л55==66M o= = = =77}]O&:a~=-s@44z##Et**aaHcpII11wL ;''..et55{N$l `v+q22x~!!P((bGG>/u66K|8:%%F|{ ,,Ir 33y M"_)``oHH00vfJ<|core_intrinsicsII5 P}|(NEb5 P}rE  5 P}[&5 P}xGF  5 P}b&h-nRM Ygeneric_assert_internals&5 P}k)N؊4V   5 P}^rz   5 P}í)3w5 P}n>Ep =fmt_helpers_for_deriveGG5 P}6@   5 P}Tk=t/h  5 P}lL h+Y=&5 P}rVv? #5 P}Zt  5 P}ºBri H%d=derive_clone_copy5 P}Oب\=(   5 P} lŧOpAC==GG5 P}[7rQǧ5 P}3-I$crate::panic::unreachable_2015gЫZA@5 P}0haY  5 P} A:   liballoc_internals5 P}JE  5 P}m~/Z85 P}/xrJ" 5 P}[S/`Y)5 P}p7&NpS==GG5 P}tk?"5 P},s{,Njj Y=&5 P}3yY 5 P}cTzG6xl5 P}E"Wpi==GG5 P}W8!9 !F 3   5 P}'ƩiDF%d==5 P}-:-2#5 P}lvh =\= 5 P}Lk5 P}hn/ cY)5 P}/6:h  5 P}3#Լ2  5 P}&O\.gQ   5 P}gK Y)5 P}]߻iZ%d==5 P}IJ5 P}h!   =5 P}!3fQ>&5 P}tS9W&OU5 P}*E$crate::format_args)YY fmt_internals5 P}Mvy5 P}i۬=   5 P}lM|iJ%d==5 P}~$)r  5 P}?jJ6m  5 P}VnYD% Y)5 P}<;p^==GG5 P}E(bwL  5 P}b[@Y)5 P}tNkoQ}  5 P}d Fc  <|=II5 P} 4:?&   5 P}>X>4hA5 P}>Jjy '#Y=&5 P} kF$Y=&5 P}ℴpms5 P}cp ;==GG5 P}퐑z$%   5 P}:"$crate::panic::panic_2015?,,libstd_sys_internals &&5 P}Z}  5 P}^nRSpd==GG5 P}Qz]?X&  5 P}<'{%Y)5 P}41P9Է 5 P}>bc8$5 P}}~sp% ==GG5 P}$fXjI   5 P}7 DY)5 P}_ĻS}QnO \= derive_eq 5 P}+vu 5 P}MG/DY)5 P}rW0k 5 P}%Tt  5 P}ط MϬi`%d==5 P}ĩ弧G3 5 P}KJ^iCE%d==5 P}]=XNW   5 P}VLHi5 P}kD(h<|=II5 P}j#]5 P}ڢ.ߨ   =5 P}SمIZ>g  5 P};<5 P}۹OEp$:M 5 P}s {5 P};K!Fz Y5 P}zj0_~+5 P}&ЯݰY=&5 P}FR3+5 P}5y  5 P}GۀvÅ>$YY>5 P}(ʤH;   5 P}fAq   5 P}*] V5 P}'R$kJ \=5 P}zl# #5 P}{ 4Or4  5 P}|3S^i ,%d==5 P}EgYV  5 P} @m{5   5 P}*?L3.5 P}׶!A 5 P}|7Zi  5 P}(k5 P}}6q?tR5 P}:HNp H==GG5 P}l:и/#-'   5 P}.ֱLM)hiBD%d==5 P}0'^c 5 P}}~mh==5 P}0Lz?{Z  5 P}?Sk*Y)5 P}evO)  5 P}7C?p 5 P}ReK 5 P}Cұ/iY)5 P}RH#Sv PYiT%d==5 P}f2m Ƨ5 P} cCt"5 P}߫8м 5 P}ox5 P}ς RZi %d==5 P}]#NjLVY=&5 P}bc{߱mDF==5 P}'&^: 5 P}*2ZQh \=5 P}1,Kk 5 P}%|| ã  =5 P}c~h  5 P}Fӌ>g  5 P}:ϷT 5 P}.T5 P} \mZ==5 P}ك! ?>5 P}HB "  =5 P};R^   5 P} 2(Wz5 P}۲}PFxkÅ>+YY>5 P}.nj0=   5 P}HfڻlFfY5 P}1nAVpJ==GG5 P}{{rv5 P}[& \]Jp ==GG5 P}SyL  5 P}?=g  Y)5 P}R<P5 P}'%Y)5 P}kXz 5 P}P,  5 P}袨]T@   5 P}aШJh5 P}AY#Y=&5 P} h3l'  5 P}O0i D%d==5 P}{y0l'%   5 P}y2iAC%d==5 P} XX  5 P}YFZY)5 P}w͓5 P}:&nhI   5 P}P 2\M 5 P}0~HY)5 P} aVRQn =\= 5 P}!Z6)-KEY)5 P}x 5 P}t  5 P}ٹ7kp`==GG5 P}VSxbmCE==5 P}1p   5 P}t:D 5 P}U }hO \=> 5 P}FXzd 5 P}'o)k   =5 P},sF,ݘԸ 5 P}]h`rN] 5 P}d5 P}^2ȗpX==GG5 P};_Z Km< 5 P}*=cCY)5 P}AABNB5 P}=ܲ1y&  5 P} Ϣk/Å>&YY>5 P}K";   5 P}$t-F{4 Y5 P}:os"֤pGǩ==GG5 P}Fe(^|"5 P}*MkB}iO \=> 5 P}Gp 5 P}?mA+Y)5 P}id5 P}3N5M7;5 P}Rhl) Y)5 P}Q/i\[%d==5 P}ὑ{B5 P}haLmY)5 P} 7L  5 P} L#xy   5 P}Ky+np ==GG5 P}H;o|  5 P}geY=&5 P}u9J =\= 5 P}Y]W>8   5 P}nwtpb  5 P}LQ5 P}Zw_s  5 P} t.pByJp ,==GG5 P}bͼr$*   5 P}bV'  5 P}$O`Y)5 P}DCV{   5 P}SEvG5 P}Yi% %d==5 P}'lN5E 5 P}|MrI{,Y)5 P}~Rj0o5 P}ve< Y=&5 P}F k+5 P}U%9t5 P}0mli W%d==5 P}̿>W.   5 P}缤8 1mBD==5 P}Ւ5 P}eXih%d==5 P}щnZ  5 P}g3Jo   =5 P}QHQ۰  5 P}rz2 5 P}H(`L   5 P}tԡ[ Y)5 P}YpT==GG5 P}{ v$5 P}1Y)5 P} 3) 5 P}E mÅ> YY>5 P}z9   5 P}~OhpDF==GG5 P}w\V4X5 P}/Q#$mi==5 P}K  ƨ  =5 P}t\uu|h.  5 P}w^)ɾ5 P}NåUi0%d==5 P}.JyQU 5 P}E6HFhY5 P}}^]xpZ==GG5 P}ǪGC5 P}7o>B ,  =5 P}IJIh   5 P} !lҔ |  5 P}`RÅ>-YY>5 P}+Xb *>   5 P}A# b65 P}?$}JO \=> 5 P}SS>N;I5 P}~MJr5 P}/93M;5 P} vsH Y=&5 P}ȒV\z3  5 P}j0~E_U5 P}7vqUY)5 P}eRWz   5 P}89XZՀ5 P}Z=#1 =\= 5 P}&u@   5 P}[sW Y)5 P}X%*Y=&5 P}"N  5 P}ij&wnys-  5 P}/sc}`p D==GG5 P}  !((   5 P}2b\MmAC==5 P}ɨ9OXA^ Y)5 P}oKö5 P}Τb !Y5 P}Y>Yl[Y)5 P}>~<7  5 P}qْp{5 P}WY)5 P}&pR\==GG5 P}&/'p5 P}{'@i %d==5 P}ķl=   5 P}rީpmJ==5 P})\FTH 5 P}!j$i =\= 5 P}MBq  5 P}gG 875 P}L3WN~d Y)5 P}7+r5 P}.*\@~L  5 P}|/)'USY)5 P}%y,y   5 P}>zk}  5 P}50?;p ==GG5 P}9?   5 P}k[ Tb  5 P}ubrJ \=5 P}IRAs Y=&5 P}, …"Y=&5 P}3:} 5 P}@1LSsg5 P}ߎhYi ;%d==5 P}gI}Y+$   5 P}A>:W> &&5 P}ędgI3  5 P}JG#kBid%d==5 P}\.Zw?V  5 P}PbY)5 P}ز~Ʒ; 5 P}PmB I5 P}y6c3Am% ==5 P} Dͤ 8H 5 P}ȑ ;Y)5 P}8r_61opQm==GG5 P}!G̓s!5 P}xe(LPBY)5 P}'ɻp W==GG5 P}HLAx2N 5 P}DJpBD==GG5 P}֨ ȏ)ph==GG5 P}]w[3Z  5 P}-dtu   =5 P}"5 Nb.f  5 P}sbG435 P}xVjOL   5 P}JV CEFy Y5 P}1Eh5pU==GG5 P}B쉘O`|*5 P}SJ3$iY=&5 P}J*B 5 P}[vGިy  5 P}@FļÅ>"YY>5 P}鴧9   5 P}\(ViG%d==5 P}ntY)5 P}B_?_1ii%d==5 P}AI^)5 P}%#em5 P}eΩ;i  5 P}hB~5 P}$sm0==5 P}]kC{WW IW: 5 P}fiCvFh-Y5 P}l Yi[Z%d==5 P}> dK5 P}dŴ ,  =5 P}Bl>j   5 P}p,|  5 P}7{A\Å>/YY>5 P}Tz0>7   5 P}s5?g<,  5 P}^C (  5 P}gcA[R; ЫY5 P}$U|3ZlZpnBvpsxrxoRs,wmqnuuy pswOn*rulp"t%xnrpv"mptxEo%svmvq>uMyosyw'nquwlbpwuyoxao_vp;vm!u+\wnuy0psw~nZr-vlp\t^xov'qt,y}owqbuiypswCnru|pxrmt9osvmjq2uAyouklNpswnxrJvlqtxrnmto5wmq~y3Xn3rvlp=t@xnrzv=mqtxsw1nrujptxnrlp}tx'osvmOquyodsJwnqupswlnHrvlItLxnrvImtxko7s wmq`yoswrulsptxnrgvmtxsvmaq)u8yovsgwnquy~ފDݕJ;*8|ّbHϾ˟IP|Ι{LߺԪvІ##M}>^VȲg!5c5߬z[0o_ݓd dӡT8}J&ǀXɠMz'գ̸Vr|z%6Jk/gA<j4G{~i~)٧) IuӍDLrzfUc}#-stVɗ{ͷ={+pDϛ~r)zSX$& ΋ޖ)Tح{(cN}̒uż K|<Y'R|Iaߜ(nZ+eAgۄYl{އ~NO/iͳu4:h`)za|VťCy0~z¹yr}dIGөƿ յODHT 5 P}.! .:$5 P}1Mݣ5 P}n5 P}l͢R<5 P} N5 P}HYEջ 5 P}8I`5 P}iڬ-5 P}L7 5 P}tz)5 P}a 5 P}HuU5 P}r>yq5 P}_j>5 P}=/4Nj5 P}sk >5 P}05 P} !Ӡ5 P}'" 45 P}S[(ڪ]5 P}3H/5 P}vnB0`5 P}/`u5 P}Q35 P}.4{5 P}kU8 5 P}Y85 P}io<`D5 P}*~>Y}5 P}v?0g5 P}xB05 P}(C3r5 P}}zbCaO5 P}*Ei5 P},U7 Hv5 P}[cJ015 P}/M`+35 P}b tQ5 P}6;R5 P}x R0o 5 P}JY@5 P}LB[5 P}"wsa`2E5 P}gGb`>5 P}C@c075 P}~c@z5 P}Z ;e0#5 P}%Df` =5 P}@Lg`5 P} l9hM5 P}h0i^5 P}g:j"5 P}%#Gg0H*5 P}Xׅl#x5 P}ۊm@d5 P}k0F5 P}?opa5 P}q5 P}(Yq4?'5 P}/ք4t`5 P})&u1c5 P}xmzP5 P}ɠh{ВwV5 P}&ymq5 P}F@5 P}o,BFb5 P}SEg5 P}Nˊ5 P}4ًP5 P}DŽˊ$<5 P}RL |c5 P}fr@=d5 P}[P 5 P}+Ԣ\pK755 P} B5 P} 8vX`5 P}9sб=5 P}d L݁5 P}8 V,5 P}Ep@hT5 P}[店`K5 P}dZ;P5 P}e˝HG5 P}+J05 P}+#5 P}I{5 P}(@85 P}#K5 P}v@5 P}.)5 P}| ,Ig5 P}dpM5 P}fU-35 P}t}p܊ 5 P}޺RB5 P}=\Npt5 P}C2ZI5 P}=8h725 P}23a5 P}6 `j5 P}F@Kh:5 P}U۸q5 P}@t5 P}P'|tTw5 P}*J/5 P},-@r15 P}mhǐr5 P}>p\5 P}Hꞷ 5 P}5)M05 P}Ԁ5 P}k P&G5 P}بw/5 P}@|P 5 P}ԯnC5 P}TPF5 P}pp=z5 P}[+怖Ì5 P}87S5 P}!"5 P}Nĵ0Fc5 P}lQڴ5 P}-ŸV{~5 P}j{(sݦ5 P}q/5 P}ch5 P} [(5 P}c Eq*q5 P}#`AS5 P}ooAf5 P}Z45 P}49BaV5 P}2( ѕyO5 P}{E q&h5 P}"5 P}*mh) 5 P}{3185 P}-5 P}iGAK!5 P}>ВJŬ5 P}ǫӃe5 P}Ս;5 P}.OfW 5 P}^65 P}!Wo5 P}G5 P}O0O}5 P}3 rj5 P}gV _Y"5 P}J7V# 5 P}`EWo$Qw5 P}$ D5 P}&Ƈ5 P}V'bn5 P}v+5 P}wRC,aZ5 P} m.a5 P}OK.D!5 P}"zq2!"5 P}+yK4_ 5 P}5!5 P}35 P}:w"$5 P}Rj" 5 P}3S$ 5 P}$b 5 P} |$"EӒ5 P}|T'[45 P}"!)r:5 P}+*b5 P}-+b5 P}%NO+B5 P}>-5 P}"bZ.r5 P}!25 P}UH65 P}Z75 P}kjT8]5 P}n:5 P}Z5 P}$k@5 P}LAm5 P}:eIBrlV5 P}DBC5 P}x$'E2'[5 P}Er 5 P}r7 Gjj5 P}t81G5 P}QcMi5 P}08]OV$5 P}?R\";R5 P}^" 5 P}.+aba5 P}=bҒu5 P}&qbN 5 P}SdRE5 P}jCEe6l5 P}Ue2`?45 P}Wdr[+5 P}SgB 5 P}ܲoi5 P}[j"uu5 P}Ɓj猘5 P}3zTg_i5 P}MlB4(5 P}!p"y5 P}ުr5 P}rǃtbdZ5 P}rv95 P}vB5 P},K]v|5 P}$eyB+$G5 P}w85 P}aex"^5 P}XO} 5 P}6Vg5 P}-k/5 P}V `'5 P}82t5 P}2=5 P}G[ˏgr5 P}2P;C5 P})bۓ5 P}LXp5 P}he#75 P}K(b5 P}0Bf5 P}/WFbaSv5 P}D2Q?5 P}kX{(5 P}>@Ʈ@5 P} 9D5 P}?ɟҳ[5 P} NAV45 P}'ȣ5 P}"Y2 .5 P}5 P}HZ5 P})L=¸r5 P}hvK5 P}=܉eh,5 P}*Q5 P},%B015 P}vŪB.F5 P}3a'V5 P}H%~¹5 P}$]2~[5 P}&5 P}h3Ƶr5 P}I<5 P}~w¸7S35 P}c2A5 P}޿eSo5 P}O"RG5 P}U?5 P}D#B25 P}Bݬ5 P})o295 P}X." 5 P}IJMT5 P}{qrn 5 P}BWȢ95 P}/rs5 P}0]Uߠ5 P}1p5 P}ː4Ϣ5 P}̵2g55 P}T{R '5 P}u5 P}zTقl?(5 P}6(~t5 P}+ ,5 P}!Bd5 P}v0Xw5 P}B5 P}fBh5 P}/SBDl5 P}r5 P}KeBCY5 P}]#f5 P}@21-D5 P}ҥ5 P}55 P}dE535 P}545 P}»U5 P}'5 P}w95 P}.pR&I5 P}P;5 P}T5 P}kG1x5 P} A cۃ5 P}]C[F5 P}kV rN5 P}f JHq5 P}׳}&5 P}\wO5 P}tO5 P}vFAsVK5 P}3 5 P}Q 5 P}O"3e*5 P}"!/G5 P}OEcŵ*5 P}G !5 P}a s"c 5 P}$ #3_C5 P}QD%\A5 P}<& 5 P}%z'35 P}Zp(S[l5 P}&+3&5 P}w;,r5 P}Yߝ/s:=5 P}z`0s5 P}3cW5 P}'!4395 P}7\55 P}177 5 P})K8w5 P}{9ù5 P}:7j_B5 P}X\;Cٷ5 P}~9j*5 P}|9 5 P}H9xR5 P},h|%jpY5 P}@nr}5 P}iur m5 P}Nџt#5 P}5˳+5 P})5 P}gt5 P}{Fg5 P}S4N[5 P}50 CM5 P}I:5 P}<]35 P}R~5 P}Qzcע5 P}N/5 P}$s5 P}\$5 P}%fccQK~5 P},V`"l5 P}# a5 P}ocg5 P}Tnp|rr5 P}PD1l5 P}O\c-5 P}_Eٔ5 P}brsZ5 P}Rז5 P}˜co5 P}g'=5 P}ȣ5 P}5ݻy 5 P}MӅė5 P}̴+S m5 P}βnW5 P}i-O5 P}dwT95 P}?Z5 P}^}ߔ5 P}/ \5 P}o85 P}WZq5 P}DG5 P}T>5 P}^t"T5 P}t5 P} ;5 P}$t5 P}=`4V5 P}M6?5 P}ՄDB5 P}SI_^5 P}S-}D5 P},:Įr5 P}f5 P}cx(#O 5 P}.x5 P}g(5 P}pOdn5 P},MK5 P}hZt8<5 P}3&D%5 P}㪕Eǔ5 P}nD6Q˄o=J5 P}]J5 P}T$5 P}7W)5 P}ˮd5 P}֓2ҔO5 P}ۄ5 P}ydFP5 P}0'?]5 P}m TKL5 P}+T͑e5 P}qgd "5 P}T.Pu5 P}"IPeM5 P} DT%5 P}h^E 5 P}1^Y5 P}5 P}F_mMe+,5 P}N@ho5 P}ш h5 P}'FWiEA 5 P}jBk%x.t5 P}.Hkž5 P}Umߝ5 P}EnL\l5 P}t{ne5 P}ߎv5Vw5 P}$qvڗ5 P}. ͦxE5 P}Zw52 5 P}nJqzE\3 5 P}c{STP5 P}]l*~eT5 P}~u&5 P},>W5 P}C/EDʁ5 P}B{5 P}@d؃B5 P};u]5 P} P5 P}${Έ65 P}[ U"5 P}*5 P}'S:(wW5 P}6 |5 P}օ>e@B#5 P},5a%5 P}a$ 5 P}ٛ?5 P}]%J5 P}ߘ~Ub5 P}ΫXBJ5 P} śB&5 P}~u5 P}(بz5 P}Mh%<5 P} e>5 P}i%KU5 P}"d]5 P}U5 P}ީ%5 P}=esF5 P}(״֍5 P} $=.5 P}UqV5 P} Tųv^5 P}h\ p5 P}U|5 P}ރ uD5 P}|]EBnI5 P}G_ťW@/5 P}%%n:s5 P}H=%}5 P}3eq`5 P}EwT."5 P}aMe5 P}$655 P} \5%֋5 P}55 P}%e5 P})ٕ? 5 P}!4DF5 P}:K%?;5 P};5 P}_╁|5 P}xi2[T5 P}(5gj5 P}Sr#'5 P}-54J5 P}~#n5 P}d>u@5 P}R%uSv5 P}{:Uo5 P}&Ru;5 P}.05 P}Jsf5 P}nE_5 P})!Uŵ5 P}'&I5 P},U5 P}UJ5 P}8fe5 P}lM5 P}fMϰ5 P}%6{$5 P}~y 65 P}& BI5 P}$r 6L5 P}mn5 P}),^5 P}<5 P}C1ք)5 P}S>x5 P}C_Ƨɒ5 P}hGn5 P}6&5 P}ETtn_z5 P}x5 P}g{~fؖ5 P}H9fՙ5 P}Kwz VA5 P} B5 P}.]"G5 P}z(u_/5 P}+,5 P}@b,ݯ5 P}l.T5 P}&5,5 P}J(~65 P}?:B5 P}VT!;wv5 P}X<& 5 P}]>< w5 P}o>V5 P}C?F5 P}m|>gwf5 P}},oAvh(5 P}]\A$z5 P}.EfnѨ5 P}2=H&k5 P}X!K25 P}XfOt 5 P},P&ގ:5 P}6rRp5 P}^#W>5 P}X Z[5 P}DK^vo(5 P}7_55 P}f^*5 P}~S`a5 P}cSg6s5 P}6Pi<5 P}l< 5 P}lal[o 5 P} nV~) 5 P}p/x5 P}WÐp{5 P}Oqp?W5 P}Ӣ0Fuw5 P}2u#95 P}}ǬDwve5 P}vƩx&Uk5 P}vwfYR5 P}"v5 P}kVyVO5 P}xu|Vf5 P}^Ovaw;5 P}z(~'5 P}cPy5 P}Y$5 P}U65 P}̲[5 P}>"/5 P}gюE5 P}v#-5 P}b8,fA5 P}qb6Lt5 P}Q6 t5 P}W+5 P}R/!,u5 P};t-5 P}0+%+5 P}K= V95 P}뾹l5 P}bF)5 P}V=y5 P}. ϛ&hQ5 P}Mn6${5 P}:H5 P}؟ƨk5 P}pDV/u5 P}[vG]5 P}ɗvn5 P}I Fe5 P}Oϐ υM5 P}afFab5 P}$ic"k5 P}?媦Ss5 P}c5 P} rI5 P} 壮5 P}FC5 P}KV<:5 P}䟲VvY5 P}KuYkP5 P}*5 P}= w=5 P}am5 P}WX&ì5 P} {hDƠ5 P}h\LR5 P}l45 P}c _5 P}+&G5 P}%L5 P}g(fk5 P}ElIV5 P}fIц” 5 P}`U%Af5 P}R-zSX@5 P}IU$vrN5 P}0|HQ5 P}qvջ5 P}`׆5 P} ,Yg5 P}oqf:5 P}1)W|m5 P}괙B95 P}_BXv5 P}iv>p5 P}t;6V(5 P}?b^5 P}{5 P}w%55 P}!DfL5 P}UQ5 P}#a1Vٳ5 P}gf|5 P}ZR5 P}IfK5 P}aR&=!5 P}^FMR5 P}dG[5 P};WD5 P}W~ʄ5 P}DS5 P}[ۊGc25 P}Ћ775 P}gnagcP5 P}m&5 P} 7W_5 P}Jx@5 P} &['5 P}񓣉7\N5 P}R>$״5 P}w uG"5 P},75 P}]},s\5 P}vciA5 P}aw5 P}lv5 P}W#f5 P}^(]y5 P}ТQ!%V5 P}$dE;5 P}.(y5 P}A`)Ҷ5 P}KNe15 P}_6%5 P}7*95 P}A7 5 P}ɗMa9'q5 P}2\9U5 P}@,<7z5 P}N>I$5 P}Uah?F5 P}_@xK5 P},jA7K5 P}9l:@*/5 P}mP'Cw˔5 P}c 'CC=D5 P}N6E.5 P}EqCx5 P}G]5 P}N[H'(5 P}PK5 P}69Kwn5 P},Mmm5 P}xK%5 P}k}O`0%5 P}vMOnX5 P}S!5 P}!4;U}5 P}!W7!H5 P}v'ZgVq5 P}`Kl7[%x5 P}ZG]5 P}U٨^f5 P} b'b5 P}*hwie5 P}{ri7\85 P}>jwK5 P}Z2iT5 P}-lJ5 P} m75 P}>$hW25 P},ok5 P}p~ qZ5 P}șhr ϖ5 P}sOW5 P}ZqtW5 P}HsJ]5 P}mtsB5 P}\LCq`5 P}*GQ5~g35 P}OXPGD5 P}D5 P}%Ϭ5 P}#5 P}mDS5 P}@VG5 P} Y*5 P}jL5 P}1X#5 P}e1w5 P}L5 P}{G>5 P}ަs75 P}¨ N5 P}G m5 P}ݛc˟5 P}zJ[65 P}RG 5 P}?'Up5 P}715 P}!7LO5 P}V5 P}\5 P}IܺI,5 P};'5 P}ν@05 P}]}'P5 P}%"ҽn7{5 P}gw85 P} 5GP5 P}bA׳5 P} ɽg$5 P}5e=5 P}~ q5 P}!7b5 P}57'5 P}g!Gx5 P}因-5 P}!\ER5 P}rYb5 P}4IݗT5 P}cpUݗ5 P}5YmWN?5 P}("}15 P}ӠL*Z~5 P} q5 P}l5 P}5oC5 P}gRS퇬/5 P}0T5 P}ǥ5 P}SBl<[5 P}i5 P}vpw5 P}3Goc5 P}oƫp5 P}s"5 P}{i5 P}Z?5 P}%$k5 P}N?h 5 P}^~Yf5 P}tHn05 P}Al.x5#5 P}!P?zw5 P}-N=(s5 P}`B(hrD5 P}VBȵS5 P}:XS5 P}]x5 P}DG5 P}\ʚ5 P}궋ob5 P}a75U5 P}Kzb5 P}^\.L5 P}V!G5 P}rD"xoŬ5 P}t$T75 P}3J&دR5 P}8n( Y5 P}G)H)5 P}ĵ*Ȧn5 P} >r,[X5 P}J:-4N5 P}.h$w5 P}~)F3'5 P}xy4i@&5 P}Nҟ4X˼b5 P}t5$5 P}ݺu7xW5 P}HCl9xb45 P} {:h_I#5 P}]iF;hy5 P}aT>5a5 P}T?L.5 P}@8|5 P}ebAXE}5 P}Y2C(5 P}-DŠ5 P}ҀDa$q5 P}Fh-5 P}v'G8֥/5 P}h Fx5 P}ZbtH뼤5 P}Khq,5 P}XLX D5 P}R( s5 P}Vb5 P}Wj5 P}u?VZ"5 P}AY]5 P}8zYX5 P}pOYR?5 P}0\((5 P}c[h5 P}ޣY95 P} NJ^ 5 P}2^5 P}uV\Dz5 P}PbhLf5 P}hqg@F@5 P}Aj55 P}Y'm5 P}3,RIoX~Z5 P}M3q(5 P}P|v]5 P}u/yhJ!a5 P}A1{05 P}o~8{5 P}S印(5 P}vh:ɇ5 P}h5 P}_:;RP5 P}'Hi5 P}eh15 P}N׏X^5 P}XOE5 P}ى;ߑl5 P}.d[5 P}/h5 P}pyh5 P} <5 P}ە(ͽ5 P}׈P5 P}*H`5 P}Ux5 P}2j5 P}7"v~5 P}t#h7V5 P} ߏ(Aq#5 P}oSL5 P}v (Ah5 P}R5 P}7 >5 P}Τ(s@5 P}ɻF+5 P}Mhx5 P}[I5 P}T5 P})Sh5 P}Bu孮/{5 P}iϬ25 P}cs5 P}"x5 P}jO$ظ5 P}Kqeu5 P}!J5 P}*$Qn5 P}5ˆ.5 P}M(65 P}8m5 P}Sa\5 P}+ɸ 5 P}FwS45 P}QO5 P}&7K5 P}¥o5 P}vO3ّ5 P} L=5 P}ds( 5 P}+`܈V5 P}ppx p5 P}^HƢ{5 P}ɗh|25 P}э꿮5 P} Xvg5 P}h5 P}hԗ5 P}Μ(Ֆ 5 P}S|(;5 P}{X%5 P}dA5 P}}r5 P}2Y5 P}hhgu5 P}J5 P}ti s5 P}eu5 P}5 P}mX 5 P} b5 P}F5 P})5 P}7hD*9 5 P}Sg 95 P} y15 P} ٮS5 P}A 5 P}nM -5 P}ӁY5 P}WE[)D5 P}B )v5 P},氈b!5 P}J rw.5 P}sYR5 P}i:5 P}޸y@^5 P}D)B5 P}!-P5 P}v5 P}:#5 P}_ #)5 P}& t5 P}3<'IFH5 P},&,5 P}nyC.~ 5 P}e/t5 P}sUA0 j5 P}1/5 P}|yw35 P}=475 P}i4$I5 P} 9 }5 P}j9=ihu45 P}? 55 P}eG@Y5 P}˅`@[Y5 P}D9&O}5 P}7zDlr5 P}{-D5 P}jiHi5 P}JG5 P}pLy(5 P}\ԏNw5 P}HxOY7 5 P}M JQc5 P}ښSI 5 P}@%U٦ 5 P}Xib5 P}\5 P}:@_yfi5 P}`O5 P}▰Y`9=M5 P}q_ic5 P}cVjy5ZR5 P}7kdP5 P}]xlC5 P}rsOwi 5 P}׽yi^k5 P}C?}٧5 P}4~ 05 P}N}n5 P}S-Li5 P}x}ٔC5 P}Ol#D5 P}t5 P}May)U5 P}+LɟGv5 P}Gᆉ{K5 P}NUi 5 P};cɊ9?5 P}+G5 P}\Lq.&5 P}?C5 P}kJmٲ5 P}ՙ)5 P}}A)c5 P}VI5 P}Ҙ5 P}?LY5 P}TDo5 P}0 =A5 P}^2+;5 P}U5 P}5VY5 P}gH <5 P}I#lI 5 P}}95 P}i_^5 P}#ȷ<45 P}Xڼ5 P}SG5 P}k {5 P}ºC>5 P}J~yƀ5 P}#iZ5 P}>yH5 P}غyj5 P}ɟ'K5 P}tѥ5 P} &7п 5 P}:5 P}(H5 P}g9'5 P}$/i5 P}jY$5 P})5 P} S6ɹ%5 P}Hʹm5 P}Z˹ `5 P}*ɱ)y[c5 P}9xU͞5 P}@HiPW5 P}pYو65 P}+Yw'25 P}îK=i߹P5 P})JQ㉽5 P}$Թ5 P}b36ωK@5 P}H)5 P}Jsשa5 P}>W)iL5 P}#B%5 P}){ 5 P}1=%q5 P}-)`5 P};OY 5 P}H)2R5 P}pI75 P}K?ɮq5 P}n25 P}>i\5 P}kԃ5 P}]H-5 P}L5 P}~ل5 P}-(AY;5 P}IU5 P}u}75 P}*/EW5 P}Nym$5 P}t5 P}%tCmm5 P} c*5 P}栩2I{ѥ5 P}V+.Iȏa5 P}xoZ L5 P}nk ;95 P}% B\!5 P}7M<5 P} -CP5 P}# c5 P}տby5 P}@b;|O5 P}+cG5 P})g5 P}rzA?5 P}LUd5 P}(z[?5 P}}} 5 P}-^m5 P}hkz$5 P}u.#څB5 P}%#Hd5 P}%5 P}V?'z}>5 P}Q:)$5 P}GA0A5 P} ӫ5* 5 P}NB 5 P}BxBOH05 P}Ee5 P}i1kG*j55 P}DH*0X5 P}IJ:5 P}?Hw5 P}Mi q5 P}sR0 5 P} PSڞN5 P}ȬYA35 P}[CYʒ'5 P}br-[Ji5 P}-\:Z'5 P}\zt 5 P}&n^*W5 P}7_55 P}B[^(=5 P}?_ai5 P}5fN^ 5 P}d*R5 P}Vs*f/615 P}Zf ;5 P}.LRh:낉5 P}ȘA hZ˺5 P}$fʷe5 P}.xas 5 P}tжo5 P}~w5 P}?uwz5 P}?xw+_5 P}tzx<5 P}{Ud5 P}7|U5 P}}0R5 P}/}j-5 P}f}5 P}ӕ~q5 P}z(85 P}Vą=A5 P}kr|t5 P}xT5 P}Jژ5 P}ն; 5 P}ǚCz5 P}FSS=5 P}C:D5 P}Ztc5 P}Fל 5 P}vv5 P}u5 P}5b5 P}##"|5 P}GY5 P}E 5 P}DzzCok5 P}/N*|5 P}O5 P}Ӳ*5 P}>5 P}jq5 P}3׸a5 P}':b;k5 P}r`i@5 P}E5Dڷ5 P}uZ;S5 P}y*A5 P};J 5 P}!gϊՋ5 P}$E5 P}T>xi5 P}Ah 5 P}w7 5 P} m5 P}kޅjdt5 P} S7Kh>5 P}Zg5 P}ec}5 P}/Uꨱh5 P}+;rI5 P}J%. 5 P}*{/$5 P}d2{b-5 P}3]l5 P}KX?4;5 P}͊7 =5 P}I 8[ŝS5 P} _d95 P}9;{wQ5 P}m}>K5 P}=@Kj*5 P}mE9%5 P}4GkY5 P}wKC5 P}|LKx5 P}ݜM}5 P} 2 N{5 P}jY]W5 P}_GZ#/5 P}g[{B{5 P}^5 P}ӷ-b+5 P}pdK5 P}9)d[:5 P}ETA'f35 P}Edde5 P}Jh5 P}[i;E5 P}cd5 P}k+C5 P}TmK?5 P}.yny5 P}Ao5 P}n ?g5 P}Nr{.5 P}}s++5 P}XHDt[85 P}S.wKK;5 P}ؙy{-l5 P}x{K 5 P}7 ~;q5 P}~ !l5 P}*B5 P}TȄ[(V65 P}+ld5 P}ruщ{5 P}eK^<5 P}\X05 P}۹iB5 P}$kX4"5 P}Ê1’K*5 P}H9ZNt5 P}hʚ5 P}7+G5 P}iM05 P}@pb5 P}DS5 P}nOF5 P}w\!5 P}t{#c5 P}n .+Ħ5 P} xdk,m5 P}ZF8E;p#5 P}Ml̶c5 P}ɇ{ Z5 P}ok5 P}C;#r5 P}YJ+.5 P}kz5 P}tx ľ25 P}HOڷh5 P}6kZR%5 P}xcˆ5 P}l1:Bn5 P}uQø5 P}jD"Kk5 P}{Ƌ?5 P}][~u5 P}ǛOW5 P}d =5 P} [\85 P}_ 775 P}[j[\*5 P}6B+5 P}Ի5 P}z0ԻV5 P}ee+5 P}۪F%5 P}]~k?5 P}1/;5 P}͚Gm^5 P}S[LרD5 P}4>ITE5 P}[[5 P}[5 P}!,g5 P}Z5 P}tRY5 P}oBkk5 P})o{}~-5 P}{F5 P}~!X5 P}5 P}44okK05 P}?t;r 5 P} ;Z5 P}EK5 P}}-Jrn5 P}+B5 P}kF5 P}l 5 P}E~W5 P}1\p5 P}|=O5 P}%Jw v;5 P}=A8H 5 P}n <5 P}ۡI M5 P}w]8,5 P}y 5 P}*-nLш>5 P} f5 P} 5 P}$<,5 P}g5 P}*o5 P}Y t<5 P}|65 P} R,5 P}n*b 85 P}>A .5 P}~7v,75 P}- r85 P}J~$!nR5 P}%"M 5 P}W5 P}@#l25 P}l5 P} jl%٭5 P}~Ƴ'<#&5 P}7cg<>d5 P}Zi)l5 P}H=*|>5 P}$*5 P}#MlF;5 P}ٙ.H5 P}\b/l5 P};O6@lz5 P}g(A65 P}!a{B|5 P}X($C15 P}3]wAbU5 P}DlJX5 P}e})Hqc5 P}:PHA'5 P}8(Jl-'5 P}*)UlWy5 P} U\R5 P}£W5 P}2Z MX@5 P}Y>Wl:C5 P}Zs[\5 P}Ja5 P}p~a+5 P}_rc5 P}IOdYE5 P}l 5 P}_wR:5 P}.15 P}@Nw]5 P}>Au" ~5 P}t!5 P}5 P}9A5 P}MDע U5 P}o,}85 P})y5 P}NLrw5 P}T WL35 P}GŮ._5 P}S7>5 P}Ȫ%\q5 P}/fJ5 P}+쳩5 P}b8?d 5 P}MCUr5 P}u[F5 P}}Yd^}0B5 P}Jr`9rH5 P}`aav?5 P} gWL5 P}i_5 P},;koSL5 P}Z\lh5 P}pq<5 P}]7~Qruo5 P}ms}`5 P}09|tw5 P}#y{F5 P}YE{턖5 P}轭|m5 P}hn}5 P}pQ~mTh5 P} )5 P}d~M&5 P}8c5 P}]5 P}'{m;S5 P}dGXMV-C5 P}< s5 P}Z::L@5 P}.BH~5 P}?3Ҍmaw5 P}A"⍍C5 P}M,&#=(5 P}Hsm 5 P}Rx=v 5 P}I5}Z5 P}`%5 P}ڦ,axA5 P}Ӈˊ+5 P}c-05 P}0P],5 P}ˣHͥUڗ5 P}D)/5 P}"m5 P}ם5؊5 P}$f=z5 P}㹭'5 P}9*]}5 P}z`65 P}r~ѾM5 P}0](u5 P}_%'5 P}$ M5 P}D |a5 P}@6]Ԋ5 P}J-l\5 P}-1%5 P}@_!i5 P}nq1me5 P}U ؜.5 P}QνjlQ5 P} =P/5 P}+7ڽ[5 P}U |5 P} w^J5 P}ۭ;5 P}F]5 P}.W6<5 P}GDr5 P}& ][E,5 P}FP5 P}ɴ r5 P}uܴ5 P}ӐK w&5 P} .Om\5 P}p{;R 5 P}zHK5 P}v3i5 P}qOFm T5 P}!g-s5 P}m>s 5 P}<QX5 P}\ 5 P}[D ^5 P}mUPo5 P}ڢnׯ5 P}{Ha_5 P})ʗ,5 P}˜p^X5 P}b게n*5 P}5;^E(5 P}eE5 P}C=c nِ5 P}!5 P}Jp>%5 P}|#~5 P}#i&n&,'5 P}).7{5 P}=*"5 P}-^ln5 P}Yu.ڃ5 P}sY)/^,5 P}OsZ4^X5 P}4~5 P}X?4ni05 P}&8Y7V 5 P}.RL@qj5 P}?"@5 P}dHB. Z5 P}YG>+5 P}UME\5 P}ʙM G5 P}QO^l5 P}řPnZdi5 P}/IRNpi5 P}FV̊5 P}bfK=V."a5 P}3+'Z.f5 P}3 [^=G5 P}ZKUpZb45 P}ZN^nU#5 P};cΘ|5 P}f^5 P}Fjg5 P}zh5 P}Hjx5 P}d &dmWO5 P}Øzp5 P}L%6r~/5 P}rN 5 P}y̦v5 P}ZyxJˑ5 P}YyNM{5 P}^KhzNYד5 P}7)yP5 P}W{!5 P}x}[DW5 P}f~̤H5 P} 0}[5 P}L-2nJ5 P}%*5 P}%$5 P}W]~B5 P}sÅ5 P}~5 P}Ź~J5 P}Qq<~b5 P}Й5 P} an!@i5 P}wz^@/5 P}TNmgM5 P}}ֳ.95 P}<@F5 P}~MjA5 P}Xo՛V5 P}HhB5 P}~N5 P} tNY5 P}^y`5 P}`5 P}[ 5 P}CV5 P}žn5 P}}BG^kG5 P} Bl.5 P}j[^S5 P}5 P}7nl5 P}/uA5 P}vEѼ5 P}vVb>o=5 P}o~ 5 P}&6a>ގ5 P}N˅5 P}55 P}@л~ 5 P}kwWW5 P}؃.@5 P}5 P}E~~KQ5 P}|j"5 P}#C5 P}ܰΈ%5 P}G^j5 P}5]^|5 P}_*15 P},M!>5 P}pn 5 P}^ko,5 P}oO5 P}-Pzkl5 P}3̈T\5 P}U=2jK5 P}i^.&55 P} "޷ 5 P}ES| ^5 P}; zR5 P}QOp38 5 P}5 P}23A05 P}0!y~:5 P}dމR*5 P}S5 P}[q#5 P}r+~<5 P}a5 P}( x\5 P}&< nw5 P}Qc 5 P}X5 P}ni5 P}A 5 P}+5 P}3]tQ5 P}-I O35 P}''oSo5 P}f_p`5 P}0Qo@p5 P}2~5 P}y@ظ5 P}_y5 P}u5 P}?(O5 P}5 P}ˠ#_>5 P}$m(ri5 P} )?5 P}g+!5 P}cM-}<5 P}}.o]5 P} G/_ O5 P}̮*/?Me5 P}!:0Nr5 P}Tw//+A5 P}=8ql5 P}X,5 P} "FI@M5 P}BBO5 P}uC< 5 P}&DF<95 P}0De5 P}DOdL5 P}d-fIDM5 P}fK1 45 P}cT5O_5 P}ɱÒR3pM5 P}U1ie5 P}GV?25 P} XFޯ5 P}Y5 P}͜Z?5 P}ԝ[c5 P}tbZ@5 P}NgLZ{5 P}a ^25 P}`[L5 P}%`H5 P}!x`/.>5 P}tȚZ55 P}cZ:5 P}6X5 P}T|g5 P}j5 P}lAQk/x 5 P}Ljj5 P}a m\5 P}0n γ5 P}xtn@5 P}4pk$5 P}%Rmq_d5 P}gNrrH5 P}Gs 5 P}YpP5 P}Du5 P}Fj']5 P}(1Lx9c75 P}K뽀r5 P}4?i25 P}Ý/LlA5 P}A8N5 P}G)5 P}{헯7+5 P}x !O+45 P}nh5 P}56aN5 P}wlb5 P}?f ?K5 P}v]5 P}]V3:?H15 P}b縷5 P}4q/5 P}25 P}pi/5 P}pn 5 P}ۼ;5 P}?oc45 P}Q۵Q5 P}ڧߦ5 P}DؚӁ5 P} 35 P}zD5 P}NYJ/5 P}y8_(5 P}_r 5 P}ٺgR5 P}zH5 P}\15 P};;j5 P}"¯i5 P}N*-5 P}am%25 P}Z5 P}ͬ]5 P}4V5 P}>ɟL!5 P}ntͯ~5 P}=gl5 P}vtpE5 P}#Я5 P}sci5 P}L5 P}*;f45 P}9t/5 P}{_9H5 P}}sҿ_5 P}[Ro=5 P}[oE5 P} 8:M-5 P}ض?:5 P}\WA85 P}ɲIU5 P}Ň`G5 P}ORhc5 P}/c! s5 P}JWς5 P}^!h/P05 P} 2!;35 P}_{5 P}/k5 P}<=^S5 P}ʣFQa ]HV=h:tO5eiU0C}}"slm0Z;t@uKRH_xX^K&I$I2q0B1;8 1k|rH12x B[n*|($|a=~nwU$EXY$0V4M*99.Vwxqu!]aK|1n=n`)3+<mh by7 >C,];qc7 - dYrE; 1R8j.$mX__S;Evp{spn*J8x %;(WBn ]=g%*".p(<PdN#Z3is_L:=Bu01Yb_ 5[`J3DcG|z-v/Jk(fIP:(#&"k@`SYKjcP|]'w0`~af "Uro[WYq@i?A }UpB@.<-h6+!t5F[a: N6-r:FBd{p2vKr m+O0Gd3 I,s^)O }[a]} yCk#agOtN)V)*VG&{9o:g2Xw46}wga VV$mAJ]$>sW% 2Zic!GO6U|+q` ;H/l)R^ r{MJwrRqi$X`4 r{d l;0v>psd6{i%_dTE fl)^6Q RHF$dPm D-F$VkMqZ%L039CJ O7u1w"|'dKhl%a+Wq(.cHn*SUSp5L T" |S6Vq3}k]RE[7{Mlq(a8KEp#]*3O{)7h3/b\%26gx!&m/ cKb)WKB"11x+jM'[a 9]sv3.+"<[`zAA*r$EIrJ"I.z{7|_e}$+{ PRS^8yL]n){jNE3#R}?xkd(vP/"Sa^D~_;WKKGCW93O9rrmK]K)wo, ;Y) P(~wUW#g}:w  :L-'6#s_qVW 3BS-(@/|M}!fe#% #n 1omsdB|+O Mm#ic-k5Uh@EV{-O(\DF%RxrjgOf)q8fAW}Kg]+Ge61hG&.d(h<'L32r6 !XWcAQsJ$25fUdG-dni4s A]2][K<*  `8a[m B" :s>v7KiPJyu4m AjKy[6_43HXo+ |sDp&"m+v; _;TU3T2Yp5t?8N5Umews rc nWsLK.yO o/1eiEzT(dM )f)?0-0oK;(, !9;+)4~0zBKmHU 1 )9 0Cr{} h\Umq{lK RRI>jbD2N6nq%ANs"r9nv)K4_cN{o7kiKkuo|lkaAkB48kMcm628Eri1*yVt n[? ue=k("R-yOr{Uu\h 3c# al},0m|#EMCY ^Boetp lrPsQ^%9}njc5OTGC}@6*%g)p){lOy\Lm4p(?)08?lwwJ4j.N296yiM^MKz C84 oi@ ]P&DLbmQi}5qg 5D$[(G1NF6'rR0@EH H~y]KI@L"}c}3a5PSXmsrM4UIm&D^#4=i)#Qa ]HV=h:W/home/steffen/.cargo/registry/src/index.crates.io-6f17d22bba15001f/fst-0.4.7/src/lib.rs - /2roOLOJNJMPJE(G  7 PNKL NLGO+O(!$92H%+24$8 8HP5L<MO?!%MO+ 4)<D'#&$BLN;>;"  #OP( M6>OOL<8 M" B/PGKD'ML&($99EI-0F -NP+$$$$$O/*5 OPIIJNMLNK%MLOI1FHMMNLKOP& NLONO4G)HJ+M INF#5MJKIKLFBD.'%'''1  <KG'<GkLPJPPN*!<GkMKMP#LPOPM@!JTEN\` Y/home/steffen/.cargo/registry/src/index.crates.io-6f17d22bba15001f/fst-0.4.7/src/bytes.rs tN>ǕsXkoo N5 *7N5 *7M5 0!O/ MM5 0!O/ MPO C1NK? #)#- P6$ 6)A)H !        * !3:!4 O/`B'ٽ$Pa/home/steffen/.cargo/registry/src/index.crates.io-6f17d22bba15001f/fst-0.4.7/src/automaton/mod.rs (m z, ,edʙ؉ʙ < AMOBM&M6JPNLNNML59A$>5PLOPMJ8 MNOEPP@:DLC P - PA OO  J, -"3 4!<)?$G"HH" 7(=R*#60;+O;-*! '6(7G0"M=%& H L3 ,%(=R*".6;+9?:7) 1#- :#:( 6&N! ) * 2 , K/B) 1%,()*4 =/6 >/P F/6 $(D9=2.= H-G=#*3;?,F$$7vN^\-BڊW/home/steffen/.cargo/registry/src/index.crates.io-6f17d22bba15001f/fst-0.4.7/src/set.rs Yhaf;ϨLeċ %0-<NK(OPIELKN>8O JNKE< #0$(FNMP@>,R #* ,%.=-. =!KO KHLN-0='.% 2 ) ,OHM20GD.% 2 /&7GBHL)0,A(F3A#2=#' I*LIPBH! I!($9#-B-6P()( ,)>4!7%?GL0>>6-% > (#LO0>>394 ; @7CLO>>2921 9 @7ANO>>4934 ; @7CK+<+FLH3 0!L 8 3 #8-?(."< 45'?) '4*"N:P MHIMGOHONMLLN)NM9 8*$'%P@-O((*!H>8H3$'%L2OJ'D(*!H+6-+=,#G27'LK5E3L#? # 1LG @7EHL,(J+3"E);J2N;'>O0M4;M. <0*IGJ2NMH&<:9DJ+J2NJ.2H(&H(/H(#H(G,%O OODJ+J2N8(72)1&)1/)1#)11&&(5.MIO!B?PI N.,$),;5J? @7 ,J0 @7AH0>>6-% > &P0>>D4% & 4,PKB0>>@2% , 0(MNBM(0>>N6% 8 C;+<3# # 1<3, #' HN&*0*ON410*MOL!N0/0*P NB80*K%PJA(><   4" 1"8-$!% *!N," ;:bxq-Vkug/home/steffen/.cargo/registry/src/index.crates.io-6f17d22bba15001f/fst-0.4.7/src/raw/counting_writer.rs \w?;THm F $> '..CKJ!HPM++@#3"5;!&,  3+$JQK!Qf\/home/steffen/.cargo/registry/src/index.crates.io-6f17d22bba15001f/fst-0.4.7/src/raw/node.rs vTPtBl ѵ   $CCNK )AO#?-2A39C9(&) 13,(*&$ ).(.!+%-2$.+!2%2$.+-!C2P O>9-7GMPE(!().$!()./'(-: @>(!#$!#9: JH7E,A(9' J8+P.%82!D%))&*-((' !*!+ ;4PIA %!2 %331 7#& '?74 2',& $$'0G++#+ /*-1& <%%IG/;>0.+,* $ #0G++#+ 07#A'#-1& 23# 7#!!F<7#!7*E9DF5 /40 4..8%//F +; +& 6OOO9*:1$ 0,)OO.&; $ #/# ',,1 +& 08#AFG< $+ -/3LO .2# %"A56B.J8,&F"7%"D)D<87%"D(DF#,)L<"#,)1+1O <3# %"P76G2+F$77./30*(0K!0/;LMNNJIO *H L ) 4  98 6 8 N6 ( B*%  .( J!D 3.)'($-,/ 8H$>K#$ (6D=) :I #+D#%"   %+$ .E,"/C#8&3) /1#!&<(=;9';I !&J(=;9'>JF, &4D0*8H4 K; N3 $00   $21 H  N- '#" ( +00 4 +21 * /! ' $30& 7 %! " HF"N$ )0& *{]CL.*BE>=? 'B#+70,.*,99,9''31#8K@/7+1G$< *''  J "3 G(*/*J 0-L J"@M "BI  +"* , +"* 3 +"*%% 3I 2%% 2%%  +O4L4. )8888 >,,,,,,,,,,,,,,,,!lj[/home/steffen/.cargo/registry/src/index.crates.io-6f17d22bba15001f/fst-0.4.7/src/raw/mod.rs PX_S2f` ,MLO+LOOLOL9?0-$"/L     #ON NOM0<'8D&HM"EO#6JJJLOIMNPOMHL8K L KIK#KH>OKNKM4LMMIOPOM; L?LLL8KGMMNK$MMKMLILMOPM>JL0 1bHL=QMI)3ONMPOGNNIDI `1M"[O@NI`KM(- LL2NLF@ #- LPNPLF@ *-# MJHH?FNO(,#D JJIN(2/J 20 J. *3 ,4 PMMMKL$ NOLOG LKMK' KP)<F6 D C3<B(BA1;L4DLN;0 ;M5ILNH/L)E,K,/77I/JG,)80!:%!6"?LH,P=M(),;?( -F# >?GLON(#LN ; JA>JN 9 JA;( LN ; JA4( 1LM*(!+%/P9!;&1&!!>F#R#B< '?$)E2$&.%0*& / 1$.&? H$/8!&,%& !$*!$5<"!%5 & 9DJ+J2N0 .>## 2L? &L? /L? #L? G$,<O OODJ+J2N9 7G!## 2)? &)? /)? #)? 1&.(5E  0/0' !44& %) GJ2NK'O9GM</. JO0MB/I% ;M6/! >O0M</I 6// <$:ANNJ2N0 "+0 "()   MLKK)$C,'%- +650 LJKLM*(&.'00A&2&/*2JJJO#2$+54# $-- 24.J -&6.$*+6 3/9?-<0K&?7&&L>N*!'4)$27 H.D.IPDHMNPN4D*#/ /#3/&:,9,,"C +,84@!G!? ?"""  $# )#$HGC  )LRxͩY/home/steffen/.cargo/registry/src/index.crates.io-6f17d22bba15001f/fst-0.4.7/src/error.rs J zsf*uiə1 94BGK!'"(?54 #E.- T_D+uns5W/home/steffen/.cargo/registry/src/index.crates.io-6f17d22bba15001f/fst-0.4.7/src/map.rs d[z#Ǫq3ى ى %0"-JNK+OPIINLKPM8O:MKOMJM6MLPML= J'PKE< *0$(FNMP@>,R #* ,%.O12 A!3<O+( ?5LO KHLN-0O'1'  ) KH0O%,# 2 %L+H0O'!, + ) ,K,HM=0'>D1'  /&7GBHNM$L)0,A+"3A"5?"I I*JGPBH! I!($9#-B0:P+,+ ,)>4!7%?GLONOJIL1"$(*(-611 "56HHII (#K+<+FLH3 0<L 8 3 #?-?(1"C '4*45'?!) "N:POK:MHIMGOHONMHG*N)NM9 8*'*(P@-O((-# #!A8H3'*(L2OJ'D(-# #!+6-+=,#G272PGFLL@O 3L#LL@? *E 1LLL@G G>AHL,(J+3"E)FJ2N;;M2 >O0M86+MMJ2NMH+AI;N&)0*MN(++29DJ+J2NJ.2H(&H(/H(#H(G!,%O OODJ+J2N8(72)1&)1/)1#)11&+(5.LIOGFPB?PI N.,$),;5O? G> ,O0 G>=HKNOOIK60$(*(-611 "56HHII &PKNOOIK60$(*(-D81 "56 4,PKBKNOOIK6RQ "$(*(-@61 HH 0(MNBM(KNOOIK60$(*(-N:1 HHII C;+C:# # 1C:, #' LN&*0FL N410FJ OL!N0/0FFNB80FM*PJ--)?=ڋd hf ޹]/home/steffen/.cargo/registry/src/index.crates.io-6f17d22bba15001f/fst-0.4.7/src/raw/build.rs **^@bZ  15C9-6N:PMIJNHJMGOHONMHG*N)7''GK!!LJM/GJM/"'"&  7*B9,6 H/"JA0MIL40/00% A2 2%2PGFLL@? 173L#LL@? -!, 1LLL@G JA/5, HL,(J/43AB.-0M FL 9GE $JGGM:$ (<>%31,1)+ /H%+ & 08 ;E?7) N0-M/-&+ 3"E)"P&/0F ,(/'B8(-4,1,/8=.7 =2J4.L ;,H*A78 7WS*<-|t/home/steffen/klaralv/src/git/code_browser/generator_rust/target/debug/build/fst-dba3fd5327a8bafa/out/crc32_table.rs `8ycJ =^ދsx"ދs (                )gnseP1G]/home/steffen/.cargo/registry/src/index.crates.io-6f17d22bba15001f/fst-0.4.7/src/raw/error.rs *Xfd_ڤk   BDMK8KL.0O?NM> >O,5JM,NH=05EJM"7:G;KM$?48BNPJ.HOAO.L78$CP#%):86 ?##E3 %+M O%*"*𗊿X{\ Ḉh/home/steffen/.cargo/registry/src/index.crates.io-6f17d22bba15001f/fst-0.4.7/src/raw/registry_minimal.rs 'y:H}.5MMOMJ2$/$'B?O0C"C 37#X/Z/home/steffen/.cargo/registry/src/index.crates.io-6f17d22bba15001f/fst-0.4.7/src/stream.rs =weDB'/JLOJ#JNLLLPOOJONIJOOLMK5K  .@LNFJIGJELK$LD3M-OKO9KCPNNGK NNMFKO 5PPB1CD420((3 'ϝH(PC;P\t-/0B398*9=@BMN[TVZZl!nox86_64-unknown-linux-gnu|E/Wߙe-e64fe6920c1635e95 P}E ?& Е SЕ