sig
  module It_IO :
    sig
      type +'a m
      val return : '-> 'It_type.IT.It_IO.m
      val bind :
        ('-> 'It_type.IT.It_IO.m) ->
        'It_type.IT.It_IO.m -> 'It_type.IT.It_IO.m
      val bind_rev :
        'It_type.IT.It_IO.m ->
        ('-> 'It_type.IT.It_IO.m) -> 'It_type.IT.It_IO.m
      val error : exn -> 'It_type.IT.It_IO.m
      val catch :
        (unit -> 'It_type.IT.It_IO.m) ->
        (exn -> 'It_type.IT.It_IO.m) -> 'It_type.IT.It_IO.m
      type output_channel
      val stdout : It_type.IT.It_IO.output_channel
      val write :
        It_type.IT.It_IO.output_channel -> string -> unit It_type.IT.It_IO.m
      type input_channel
      val open_in :
        string -> It_type.IT.It_IO.input_channel It_type.IT.It_IO.m
      val close_in :
        It_type.IT.It_IO.input_channel -> unit It_type.IT.It_IO.m
      val read_into :
        It_type.IT.It_IO.input_channel ->
        string -> int -> int -> int It_type.IT.It_IO.m
      val runIO : 'It_type.IT.It_IO.m -> [ `Error of exn | `Ok of 'a ]
    end
  module Subarray :
    sig
      module C :
        sig
          type 'a t = private { arr : 'a array; ofs : int; len : int; }
          val empty : 'It_type.IT.Subarray.C.t
          val mk :
            arr:'a array -> ofs:int -> len:int -> 'It_type.IT.Subarray.C.t
        end
      type 'a t =
        'It_type.IT.Subarray.C.t = private {
        arr : 'a array;
        ofs : int;
        len : int;
      }
      val length : 'It_type.IT.Subarray.t -> int
      val get : 'It_type.IT.Subarray.t -> int -> 'a
      val empty : 'It_type.IT.Subarray.C.t
      val replace_with_substring :
        char array -> string -> int -> int -> char It_type.IT.Subarray.C.t
      val of_string : string -> char It_type.IT.Subarray.C.t
      val of_array : 'a array -> 'It_type.IT.Subarray.C.t
      val of_array_sub : 'a array -> int -> int -> 'It_type.IT.Subarray.C.t
      val of_list : 'a list -> 'It_type.IT.Subarray.C.t
      val of_elem : '-> 'It_type.IT.Subarray.C.t
      type dir = Subarray.dir = L | R
      val fold :
        It_type.IT.Subarray.dir ->
        ('-> '-> 'a) -> '-> 'It_type.IT.Subarray.C.t -> 'a
      val iter : ('-> unit) -> 'It_type.IT.Subarray.C.t -> unit
      val to_list : 'It_type.IT.Subarray.C.t -> 'a list
      val to_string : char It_type.IT.Subarray.C.t -> string
      val append_to_list_rev :
        'It_type.IT.Subarray.C.t -> 'a list -> 'a list
      val get_first_item : 'It_type.IT.Subarray.C.t -> 'a option
      val destruct_first_item :
        'It_type.IT.Subarray.C.t ->
        ('a * 'It_type.IT.Subarray.C.t) option
      val sub :
        'It_type.IT.Subarray.C.t ->
        ofs:int -> len:int -> 'It_type.IT.Subarray.C.t
      val split_at :
        int ->
        'It_type.IT.Subarray.C.t ->
        'It_type.IT.Subarray.C.t * 'It_type.IT.Subarray.C.t
      val drop :
        int -> 'It_type.IT.Subarray.C.t -> 'It_type.IT.Subarray.C.t
      val break :
        ('-> bool) ->
        'It_type.IT.Subarray.C.t ->
        'It_type.IT.Subarray.C.t * 'It_type.IT.Subarray.C.t
      val break_limit :
        limit:int ->
        ('-> bool) ->
        'It_type.IT.Subarray.C.t ->
        [> `Found of 'It_type.IT.Subarray.C.t * 'It_type.IT.Subarray.C.t
         | `Hit_end
         | `Hit_limit ]
      val drop_while :
        ('-> bool) ->
        'It_type.IT.Subarray.C.t -> 'It_type.IT.Subarray.C.t
      val is_empty : 'It_type.IT.Subarray.C.t -> bool
      val buffer_add : Buffer.t -> char It_type.IT.Subarray.C.t -> unit
      val map :
        ('-> 'b) ->
        'It_type.IT.Subarray.C.t -> 'It_type.IT.Subarray.C.t
      val copy : 'It_type.IT.Subarray.C.t -> 'It_type.IT.Subarray.C.t
      val concat_splitted :
        'It_type.IT.Subarray.C.t ->
        'It_type.IT.Subarray.C.t -> 'It_type.IT.Subarray.C.t
    end
  module S :
    sig
      module C :
        sig
          type 'a t =
            'It_type.IT.Subarray.C.t = private {
            arr : 'a array;
            ofs : int;
            len : int;
          }
          val empty : 'It_type.IT.S.C.t
          val mk : arr:'a array -> ofs:int -> len:int -> 'It_type.IT.S.C.t
        end
      type 'a t =
        'It_type.IT.Subarray.C.t = private {
        arr : 'a array;
        ofs : int;
        len : int;
      }
      val length : 'It_type.IT.S.t -> int
      val get : 'It_type.IT.S.t -> int -> 'a
      val empty : 'It_type.IT.S.C.t
      val replace_with_substring :
        char array -> string -> int -> int -> char It_type.IT.S.C.t
      val of_string : string -> char It_type.IT.S.C.t
      val of_array : 'a array -> 'It_type.IT.S.C.t
      val of_array_sub : 'a array -> int -> int -> 'It_type.IT.S.C.t
      val of_list : 'a list -> 'It_type.IT.S.C.t
      val of_elem : '-> 'It_type.IT.S.C.t
      type dir = It_type.IT.Subarray.dir = L | R
      val fold :
        It_type.IT.S.dir ->
        ('-> '-> 'a) -> '-> 'It_type.IT.S.C.t -> 'a
      val iter : ('-> unit) -> 'It_type.IT.S.C.t -> unit
      val to_list : 'It_type.IT.S.C.t -> 'a list
      val to_string : char It_type.IT.S.C.t -> string
      val append_to_list_rev : 'It_type.IT.S.C.t -> 'a list -> 'a list
      val get_first_item : 'It_type.IT.S.C.t -> 'a option
      val destruct_first_item :
        'It_type.IT.S.C.t -> ('a * 'It_type.IT.S.C.t) option
      val sub :
        'It_type.IT.S.C.t -> ofs:int -> len:int -> 'It_type.IT.S.C.t
      val split_at :
        int ->
        'It_type.IT.S.C.t -> 'It_type.IT.S.C.t * 'It_type.IT.S.C.t
      val drop : int -> 'It_type.IT.S.C.t -> 'It_type.IT.S.C.t
      val break :
        ('-> bool) ->
        'It_type.IT.S.C.t -> 'It_type.IT.S.C.t * 'It_type.IT.S.C.t
      val break_limit :
        limit:int ->
        ('-> bool) ->
        'It_type.IT.S.C.t ->
        [> `Found of 'It_type.IT.S.C.t * 'It_type.IT.S.C.t
         | `Hit_end
         | `Hit_limit ]
      val drop_while :
        ('-> bool) -> 'It_type.IT.S.C.t -> 'It_type.IT.S.C.t
      val is_empty : 'It_type.IT.S.C.t -> bool
      val buffer_add : Buffer.t -> char It_type.IT.S.C.t -> unit
      val map : ('-> 'b) -> 'It_type.IT.S.C.t -> 'It_type.IT.S.C.t
      val copy : 'It_type.IT.S.C.t -> 'It_type.IT.S.C.t
      val concat_splitted :
        'It_type.IT.S.C.t -> 'It_type.IT.S.C.t -> 'It_type.IT.S.C.t
    end
  type err_msg = exn
  exception EIO of (exn * It_Types.place)
  exception Iteratees_err_msg of It_type.IT.err_msg
  exception Divergent_iteratee of It_Types.place
  val ierr_of_merr : It_type.IT.err_msg -> It_type.IT.err_msg
  type 'a stream =
      EOF of It_type.IT.err_msg option
    | Chunk of 'It_type.IT.Subarray.t
  val chunk_of : '-> 'It_type.IT.stream
  val dbgstream : ?addon:string -> 'It_type.IT.stream -> string
  val dbgstream_char : ?body:int -> char It_type.IT.stream -> string
  val ( >>% ) :
    'It_type.IT.It_IO.m ->
    ('-> 'It_type.IT.It_IO.m) -> 'It_type.IT.It_IO.m
  val ( %<< ) :
    ('-> 'It_type.IT.It_IO.m) ->
    'It_type.IT.It_IO.m -> 'It_type.IT.It_IO.m
  module Sl :
    sig
      type 'a sl
      val empty : 'It_type.IT.Sl.sl
      val destr_head :
        'It_type.IT.Sl.sl ->
        ('It_type.IT.stream * 'It_type.IT.Sl.sl) option
      val cons :
        'It_type.IT.stream -> 'It_type.IT.Sl.sl -> 'It_type.IT.Sl.sl
      val get_one_opt : 'It_type.IT.Sl.sl -> 'It_type.IT.stream option
      val one : 'It_type.IT.stream -> 'It_type.IT.Sl.sl
      val dbgsl : 'It_type.IT.Sl.sl -> string
    end
  type 'a sl = 'It_type.IT.Sl.sl
  type ('a, 'b) iteratee =
      IE_done of 'b
    | IE_cont of It_type.IT.err_msg option *
        ('It_type.IT.stream ->
         (('a, 'b) It_type.IT.iteratee * 'It_type.IT.sl) It_type.IT.It_IO.m)
  val return : '-> ('b, 'a) It_type.IT.iteratee
  val bindI :
    ('-> ('b, 'c) It_type.IT.iteratee) ->
    ('b, 'a) It_type.IT.iteratee -> ('b, 'c) It_type.IT.iteratee
  val ( =<< ) :
    ('-> ('b, 'c) It_type.IT.iteratee) ->
    ('b, 'a) It_type.IT.iteratee -> ('b, 'c) It_type.IT.iteratee
  val ( >>= ) :
    ('a, 'b) It_type.IT.iteratee ->
    ('-> ('a, 'c) It_type.IT.iteratee) -> ('a, 'c) It_type.IT.iteratee
  val lift : 'It_type.IT.It_IO.m -> ('b, 'a) It_type.IT.iteratee
  val throw_err : It_type.IT.err_msg -> ('a, 'b) It_type.IT.iteratee
  val throw_err_cont :
    It_type.IT.err_msg ->
    'It_type.IT.stream ->
    (('a, 'b) It_type.IT.iteratee * 'It_type.IT.sl) It_type.IT.It_IO.m
  val throw_recoverable_err :
    It_type.IT.err_msg ->
    ('It_type.IT.stream ->
     (('a, 'b) It_type.IT.iteratee * 'It_type.IT.sl) It_type.IT.It_IO.m) ->
    ('a, 'b) It_type.IT.iteratee
  val set_eof : 'It_type.IT.stream -> It_type.IT.err_msg
  val empty_stream : 'It_type.IT.stream
  val ie_doneM :
    '->
    'It_type.IT.stream ->
    (('b, 'a) It_type.IT.iteratee * 'It_type.IT.sl) It_type.IT.It_IO.m
  val ie_contM :
    ('It_type.IT.stream ->
     (('a, 'b) It_type.IT.iteratee * 'It_type.IT.sl) It_type.IT.It_IO.m) ->
    (('a, 'b) It_type.IT.iteratee * 'It_type.IT.Sl.sl) It_type.IT.It_IO.m
  val ie_doneMsl :
    '-> '-> (('c, 'a) It_type.IT.iteratee * 'b) It_type.IT.It_IO.m
  val ie_errorMsl :
    It_type.IT.err_msg ->
    'It_type.IT.sl ->
    (('a, 'b) It_type.IT.iteratee * 'It_type.IT.sl) It_type.IT.It_IO.m
  val ie_cont :
    ('It_type.IT.stream ->
     (('a, 'b) It_type.IT.iteratee * 'It_type.IT.sl) It_type.IT.It_IO.m) ->
    ('a, 'b) It_type.IT.iteratee
  val liftI :
    ('a, 'b) It_type.IT.iteratee It_type.IT.It_IO.m ->
    ('a, 'b) It_type.IT.iteratee
  val merr_of_ierr : It_type.IT.err_msg -> 'It_type.IT.It_IO.m
  val joinI :
    ('a, ('b, 'c) It_type.IT.iteratee) It_type.IT.iteratee ->
    ('a, 'c) It_type.IT.iteratee
  val run : ('a, 'b) It_type.IT.iteratee -> 'It_type.IT.It_IO.m
  val stream2list : ('a, 'a list) It_type.IT.iteratee
  val get_stream_eof :
    ('a, It_type.IT.err_msg option option) It_type.IT.iteratee
  val is_stream_finished :
    ('a, It_type.IT.err_msg option) It_type.IT.iteratee
  val break_fold :
    ('-> bool) -> ('-> '-> 'b) -> '-> ('a, 'b) It_type.IT.iteratee
  val mapI :
    ('-> 'b) ->
    ('c, 'a) It_type.IT.iteratee -> ('c, 'b) It_type.IT.iteratee
  val break : ('-> bool) -> ('a, 'a list) It_type.IT.iteratee
  val prepend :
    (unit -> 'a) ->
    ('-> ('b, 'c) It_type.IT.iteratee) -> ('b, 'c) It_type.IT.iteratee
  val break_chars : (char -> bool) -> (char, string) It_type.IT.iteratee
  val drop_while : ('-> bool) -> ('a, unit) It_type.IT.iteratee
  val peek : ('a, 'a option) It_type.IT.iteratee
  val head : ('a, 'a) It_type.IT.iteratee
  val pervasives_eq : '-> '-> bool
  val heads :
    ?eq:('-> '-> bool) -> 'a list -> ('a, int) It_type.IT.iteratee
  val skip_till_eof : ('a, unit) It_type.IT.iteratee
  val drop_step :
    int ->
    'It_type.IT.stream ->
    (('a, unit) It_type.IT.iteratee * 'It_type.IT.sl) It_type.IT.It_IO.m
  val drop : int -> ('a, unit) It_type.IT.iteratee
  val io_iter :
    ('-> unit It_type.IT.It_IO.m) -> 'a list -> unit It_type.IT.It_IO.m
  val print_line : string -> unit It_type.IT.It_IO.m
  type ('a, 'b) enumerator =
      ('a, 'b) It_type.IT.iteratee ->
      ('a, 'b) It_type.IT.iteratee It_type.IT.It_IO.m
  val enum_eof : ('a, 'b) It_type.IT.enumerator
  val enum_err : It_type.IT.err_msg -> ('a, 'b) It_type.IT.enumerator
  val ( >>> ) :
    ('a, 'b) It_type.IT.enumerator ->
    ('a, 'b) It_type.IT.enumerator -> ('a, 'b) It_type.IT.enumerator
  val enum_pure_1chunk : 'a list -> ('a, 'b) It_type.IT.enumerator
  val enum_pure_nchunk : 'a list -> int -> ('a, 'b) It_type.IT.enumerator
  val enum_string :
    ?chunk_size:int -> string -> (char, 'a) It_type.IT.enumerator
  val mprintf :
    ('a, unit, string, unit It_type.IT.It_IO.m) Pervasives.format4 -> 'a
  val mres : 'It_type.IT.It_IO.m -> 'It_Types.res It_type.IT.It_IO.m
  val _munres : 'It_Types.res -> 'It_type.IT.It_IO.m
  val enum_readchars :
    buffer_size:int ->
    read_func:('-> string -> int -> int -> int It_type.IT.It_IO.m) ->
    '-> (char, 'b) It_type.IT.enumerator
  val enum_fd :
    It_type.IT.It_IO.input_channel -> (char, 'a) It_type.IT.enumerator
  val enum_file : string -> (char, 'a) It_type.IT.enumerator
  type ('a, 'b, 'c) enumeratee =
      ('b, 'c) It_type.IT.iteratee ->
      ('a, ('b, 'c) It_type.IT.iteratee) It_type.IT.iteratee
  val take_gen :
    [ `Drop | `Fail ] -> int -> ('a, 'a, 'b) It_type.IT.enumeratee
  val take :
    int ->
    ('a, 'b) It_type.IT.iteratee ->
    ('a, ('a, 'b) It_type.IT.iteratee) It_type.IT.iteratee
  val take_or_fail :
    int ->
    ('a, 'b) It_type.IT.iteratee ->
    ('a, ('a, 'b) It_type.IT.iteratee) It_type.IT.iteratee
  val map_stream : ('-> 'b) -> ('a, 'b, 'c) It_type.IT.enumeratee
  val sequence_stream :
    ('a, 'b) It_type.IT.iteratee -> ('a, 'b, 'c) It_type.IT.enumeratee
  val enum_words : (char, string, 'a) It_type.IT.enumeratee
  val array_ensure_size :
    default:'-> 'a array Pervasives.ref -> int -> 'a array
  module SC :
    sig
      type 'a t = 'Subarray_cat.t
      val make : 'It_type.IT.Subarray.t list -> 'It_type.IT.SC.t
      val length : 'It_type.IT.SC.t -> int
      val get : 'It_type.IT.SC.t -> int -> 'a
      val sub_copy_out :
        ?ofs:int ->
        ?len:int -> 'It_type.IT.SC.t -> 'It_type.IT.Subarray.t
      val append :
        'It_type.IT.SC.t -> 'It_type.IT.Subarray.t -> 'It_type.IT.SC.t
    end
  type uchar = int
  module UTF8 :
    sig
      val utf8_of_char : (char, It_type.IT.uchar, 'a) It_type.IT.enumeratee
    end
  val break_copy :
    cpred:(char -> bool) ->
    outch:It_type.IT.It_IO.output_channel -> (char, unit) It_type.IT.iteratee
  val break_limit :
    pred:('-> bool) ->
    limit:int ->
    ('a, [ `Found | `Hit_eof | `Hit_limit ] * 'It_type.IT.Subarray.t)
    It_type.IT.iteratee
  val limit : int -> ('a, 'a, 'b) It_type.IT.enumeratee
  val catchk :
    (unit -> ('a, 'b) It_type.IT.iteratee) ->
    (It_type.IT.err_msg ->
     ('It_type.IT.stream ->
      (('a, 'b) It_type.IT.iteratee * 'It_type.IT.sl) It_type.IT.It_IO.m) ->
     ('a, 'b) It_type.IT.iteratee) ->
    ('a, 'b) It_type.IT.iteratee
  val catch :
    (unit -> ('a, 'b) It_type.IT.iteratee) ->
    (It_type.IT.err_msg -> ('a, 'b) It_type.IT.iteratee) ->
    ('a, 'b) It_type.IT.iteratee
  val printf :
    ('a, unit, string, ('b, unit) It_type.IT.iteratee) Pervasives.format4 ->
    'a
  val gather_to_string : (char, string) It_type.IT.iteratee
  module Ops :
    sig
      val ( %<< ) :
        ('-> 'It_type.IT.It_IO.m) ->
        'It_type.IT.It_IO.m -> 'It_type.IT.It_IO.m
      val ( >>% ) :
        'It_type.IT.It_IO.m ->
        ('-> 'It_type.IT.It_IO.m) -> 'It_type.IT.It_IO.m
      val ( =<< ) :
        ('-> ('b, 'c) It_type.IT.iteratee) ->
        ('b, 'a) It_type.IT.iteratee -> ('b, 'c) It_type.IT.iteratee
      val ( >>= ) :
        ('a, 'b) It_type.IT.iteratee ->
        ('-> ('a, 'c) It_type.IT.iteratee) -> ('a, 'c) It_type.IT.iteratee
      val ( >>> ) :
        ('a, 'b) It_type.IT.enumerator ->
        ('a, 'b) It_type.IT.enumerator -> ('a, 'b) It_type.IT.enumerator
    end
  val feedI :
    ('It_type.IT.stream ->
     (('a, 'b) It_type.IT.iteratee * 'It_type.IT.sl) It_type.IT.It_IO.m) ->
    'It_type.IT.stream -> ('a, 'b) It_type.IT.iteratee It_type.IT.It_IO.m
  val feed_it :
    ('a, 'b) It_type.IT.iteratee ->
    'It_type.IT.stream -> ('a, 'b) It_type.IT.iteratee
  exception Itlist_empty
  module Anyresult_lasterror :
    sig
      val itlist_step_firstresult_lasterror :
        ('a, 'b) It_type.IT.iteratee list ->
        'It_type.IT.stream ->
        [ `Cont of ('a, 'b) It_type.IT.iteratee list
        | `First_result of ('a, 'b) It_type.IT.iteratee * 'It_type.IT.sl
        | `Last_error of It_type.IT.err_msg ] It_type.IT.It_IO.m
      val get_any_done :
        ('a, 'b) It_type.IT.iteratee list ->
        ('c, 'b) It_type.IT.iteratee option
      val itlist_anyresult_lasterror :
        ('a, 'b) It_type.IT.iteratee list -> ('a, 'b) It_type.IT.iteratee
    end
  val itlist_anyresult_lasterror :
    ('a, 'b) It_type.IT.iteratee list -> ('a, 'b) It_type.IT.iteratee
  val junk : ('a, unit) It_type.IT.iteratee
  exception SInt_overflow
  exception SInt_not_a_number of string
  module Reading_ints :
    sig
      val read_uint : (char, int) It_type.IT.iteratee
      val read_uint_nz : (char, int) It_type.IT.iteratee
      val read_int : (char, int) It_type.IT.iteratee
      val read_int_nz : (char, int) It_type.IT.iteratee
      val read_uint32 : (char, int32) It_type.IT.iteratee
      val read_uint32_nz : (char, int32) It_type.IT.iteratee
      val read_int32 : (char, int32) It_type.IT.iteratee
      val read_int32_nz : (char, int32) It_type.IT.iteratee
      val read_uint64 : (char, int64) It_type.IT.iteratee
      val read_uint64_nz : (char, int64) It_type.IT.iteratee
      val read_int64 : (char, int64) It_type.IT.iteratee
      val read_int64_nz : (char, int64) It_type.IT.iteratee
    end
  val read_uint : (char, int) It_type.IT.iteratee
  val read_uint_nz : (char, int) It_type.IT.iteratee
  val read_int : (char, int) It_type.IT.iteratee
  val read_int_nz : (char, int) It_type.IT.iteratee
  val read_uint32 : (char, int32) It_type.IT.iteratee
  val read_uint32_nz : (char, int32) It_type.IT.iteratee
  val read_int32 : (char, int32) It_type.IT.iteratee
  val read_int32_nz : (char, int32) It_type.IT.iteratee
  val read_uint64 : (char, int64) It_type.IT.iteratee
  val read_uint64_nz : (char, int64) It_type.IT.iteratee
  val read_int64 : (char, int64) It_type.IT.iteratee
  val read_int64_nz : (char, int64) It_type.IT.iteratee
  module type NUM =
    sig
      type num
      val num_of_int : int -> It_type.IT.NUM.num
      val mult_num :
        It_type.IT.NUM.num -> It_type.IT.NUM.num -> It_type.IT.NUM.num
      val power_num :
        It_type.IT.NUM.num -> It_type.IT.NUM.num -> It_type.IT.NUM.num
      val num_of_string : string -> It_type.IT.NUM.num
    end
  module Reading_num :
    functor (Num : NUM->
      sig
        val num_fix_unsigned : (char, Num.num) It_type.IT.iteratee
        val num_fix : (char, Num.num) It_type.IT.iteratee
        val num_of_string_fix : string -> Num.num It_type.IT.It_IO.m
      end
  module Base64 :
    sig
      val base64_conv_table : string
      exception Bad_encoding
      val base64_decode_char : char -> int
      val base64_decode_piece :
        ibuf:int array -> arr_to:char array -> arr_ofs:int -> unit
      val base64_decode :
        s_from:char It_type.IT.S.t ->
        arr_to:char array ->
        ibuf:int array -> ipos:int Pervasives.ref -> int * bool * bool
      val base64_decode_last :
        arr_to:char array -> ibuf:int array -> ipos_val:int -> int * bool
      val enee_cont :
        ('a, 'b) It_type.IT.iteratee ->
        (('It_type.IT.stream ->
          (('a, 'b) It_type.IT.iteratee * 'It_type.IT.sl)
          It_type.IT.It_IO.m) ->
         ('c, ('a, 'b) It_type.IT.iteratee) It_type.IT.iteratee) ->
        ('c, ('a, 'b) It_type.IT.iteratee) It_type.IT.iteratee
      val enee_cont_io :
        ('a, 'b) It_type.IT.iteratee ->
        (('It_type.IT.stream ->
          (('a, 'b) It_type.IT.iteratee * 'It_type.IT.sl)
          It_type.IT.It_IO.m) ->
         (('c, ('a, 'b) It_type.IT.iteratee) It_type.IT.iteratee *
          'It_type.IT.sl)
         It_type.IT.It_IO.m) ->
        (('c, ('a, 'b) It_type.IT.iteratee) It_type.IT.iteratee *
         'It_type.IT.sl)
        It_type.IT.It_IO.m
      val enee_base64_decode :
        (char, 'a) It_type.IT.iteratee ->
        (char, (char, 'a) It_type.IT.iteratee) It_type.IT.iteratee
      val step :
        int array ->
        int Pervasives.ref ->
        char array Pervasives.ref ->
        (char It_type.IT.stream ->
         ((char, 'a) It_type.IT.iteratee * char It_type.IT.sl)
         It_type.IT.It_IO.m) ->
        char It_type.IT.stream ->
        ((char, (char, 'a) It_type.IT.iteratee) It_type.IT.iteratee *
         char It_type.IT.sl)
        It_type.IT.It_IO.m
      val finish :
        obuf:char array Pervasives.ref ->
        ibuf:int array ->
        ipos:int Pervasives.ref ->
        opt_err:It_type.IT.err_msg option ->
        (char It_type.IT.stream ->
         ((char, 'a) It_type.IT.iteratee * char It_type.IT.sl)
         It_type.IT.It_IO.m) ->
        ((char, (char, 'a) It_type.IT.iteratee) It_type.IT.iteratee *
         char It_type.IT.sl)
        It_type.IT.It_IO.m
      val pass_obuf :
        written:int ->
        arr_to:char array ->
        (char It_type.IT.stream ->
         ((char, 'a) It_type.IT.iteratee * char It_type.IT.sl)
         It_type.IT.It_IO.m) ->
        (char, 'a) It_type.IT.iteratee It_type.IT.It_IO.m
      val ret :
        opt_err:It_type.IT.err_msg option ->
        (char It_type.IT.stream ->
         ((char, 'a) It_type.IT.iteratee * char It_type.IT.sl)
         It_type.IT.It_IO.m) ->
        ((char, (char, 'a) It_type.IT.iteratee) It_type.IT.iteratee *
         char It_type.IT.sl)
        It_type.IT.It_IO.m
    end
  val base64_decode :
    (char, 'a) It_type.IT.iteratee ->
    (char, (char, 'a) It_type.IT.iteratee) It_type.IT.iteratee
  module Deque_stream :
    sig
      type 'a t
      val empty : 'It_type.IT.Deque_stream.t
      val cons :
        int ->
        'It_type.IT.stream ->
        'It_type.IT.Deque_stream.t -> 'It_type.IT.Deque_stream.t
      val cons_sl :
        'It_type.IT.sl ->
        'It_type.IT.Deque_stream.t -> 'It_type.IT.Deque_stream.t
      val snoc :
        'It_type.IT.Deque_stream.t ->
        int -> 'It_type.IT.stream -> 'It_type.IT.Deque_stream.t
      val concat : 'It_type.IT.Deque_stream.t -> 'It_type.IT.sl
      val destr_head :
        'It_type.IT.Deque_stream.t ->
        ((int * 'It_type.IT.stream) * 'It_type.IT.Deque_stream.t) option
      val is_empty : 'It_type.IT.Deque_stream.t -> bool
    end
  val fdbg : ('a, unit, string, unit) Pervasives.format4 -> 'a
  val break_subsequence :
    ('It_type.IT.S.t ->
     int ->
     (('a, 'b) It_type.IT.iteratee * 'It_type.IT.sl) It_type.IT.It_IO.m
     option) ->
    ('a, 'c) It_type.IT.iteratee ->
    ('a, 'b option * ('a, 'c) It_type.IT.iteratee) It_type.IT.iteratee
  val it_ignore : ('a, unit) It_type.IT.iteratee
  val it_ignore_step :
    'It_type.IT.stream ->
    (('a, unit) It_type.IT.iteratee * 'It_type.IT.sl) It_type.IT.It_IO.m
  val map_ready :
    ('a, 'b) It_type.IT.iteratee -> ('c, 'b) It_type.IT.iteratee
  val eof_to_res :
    ('a, 'b) It_type.IT.iteratee ->
    It_type.IT.err_msg option ->
    ('c, [ `Error of It_type.IT.err_msg | `Ok of 'b ]) It_type.IT.iteratee
  val probe_string :
    string ->
    char It_type.IT.S.t ->
    int ->
    ((char, unit) It_type.IT.iteratee * char It_type.IT.sl)
    It_type.IT.It_IO.m option
  val it_last : int -> ('a, 'a list) It_type.IT.iteratee
  type ('a, 'b) enumpart =
      'It_type.IT.sl ->
      ('a, 'b) It_type.IT.iteratee -> ('a, 'b) It_type.IT.enumpart_ret
  and ('a, 'b) enumpart_ret =
      (('a, 'b) It_type.IT.iteratee * 'It_type.IT.sl Lazy.t *
       'It_type.IT.opt_enumpart)
      It_type.IT.It_IO.m
  and 'a opt_enumpart = EP_None | EP_Some of 'It_type.IT.enumpart_poly
  and 'a enumpart_poly = {
    enumpart_poly : 'b. ('a, 'b) It_type.IT.enumpart;
  }
  val enumpart_readchars :
    buffer_size:int ->
    read_func:('-> string -> int -> int -> int It_type.IT.It_IO.m) ->
    '-> (char, 'b) It_type.IT.enumpart
  type it_exact = [ `Done | `Eof of int * It_type.IT.err_msg option ]
  val take_exact :
    int ->
    ('a, 'b) It_type.IT.iteratee ->
    ('a, It_type.IT.it_exact * ('a, 'b) It_type.IT.iteratee)
    It_type.IT.iteratee
end