Caml1999I037 r G.Stdlib__Digest!tA;@@@A&stringQ@@@@@@@*digest.mli]<<]<K@@@@@@A@'compareB@@@@@@@@@@@@#intA@@@@@@@@`zz `z@@1A@@%equalC@@@@@@@%@@@@@$boolE@@@@@@@@R  ?R  @@PL@@(from_hexN@Q@@@@@A@@@@@@RXeeSXe@@dM@@!SO!tT;@@@Aj@@@h@@@@h`i`@@@@zN@A@+hash_lengthUX@@@i@uc!#vc!8@@O@@'compareV@&@@@j@@k@@@@l@@mt@@@n@@o@@p@ffhff@@P@@%equalW@@@@q@@r@#@@@s@@tr@@@u@@v@@w@jj@@Q@@&stringX@@@@x@@y;@@@z@@{@m')m'A@@R@@%bytesY@p@@@|@@}O@@@~@@@puwpu@@S@@)substringZ@@@@@@@@@@@@@@@@@@s@@@@@@@@@@ss@@ T@@(subbytes[@@@@@@@@@@@@@@@@@@@@@@@@@@@@ww@@.U@@'channel\@n*in_channel@@@@@@@@@@@@@@@@@@@9{68:{6\@@KV@@$file]@L@@@@@@@@@@@MN@@_W@@&output^@+out_channel@@@@@@@@@@@k@@@@@@@@j57k5\@@|X@@%input_@*in_channel@@@@@@@@@@@@@Y@@&to_hex`@ @@@@@@@@@@@@@Z@@&of_hexa@@@@@@"@@@@@@@@[@@@@^@\@@Ӡ(BLAKE128P@^@@]@@@Ӡ(BLAKE256Q@ @@^@@@Ӡ(BLAKE512R@@@_@@@Ӡ#MD5S@@iiiw@`@@@@l:..Stdlib__Digest0#z25I*&Stdlib0t0VoS%{<F:8CamlinternalFormatBasics0|.e1R$|o@@@Caml1999T037k ?_9C.Stdlib__Digest*ocaml.text&_none_@@A Message digest. This module provides functions to compute 'digests', also known as 'hashes', of arbitrary-length strings or files. The supported hashing algorithms are BLAKE2 and MD5. *digest.mliP77T@@@@@@3@@@@@@#intA;@@#intA@@@@@;@A@$charB;@@$charA@@@@@A@A@&stringQ;@@&stringA@@@@@G@@@%bytesC;@@%bytesA@@@@@M@@@%floatD;@@%floatA@@@@@S@@@$boolE;@@%falsec@@]@$trued@@c@@@A@@@@@d@A@$unitF;@@"()e@@n@@@A@@@@@o@A@ #exnG;@@@A@@@@@s@@@#effH;@@O@A@A@@@@@@|@@@,continuationI;@@Q@@P@B,continuationA@nY@@@@@@@@@%arrayJ;@@R@A%arrayA@@@@@@@@@ $listK;@@S@A"[]f@@@"::g@@@T@@@ @@A@Y@@@@@@@@&optionL;@@V@A$Noneh@@@$Somei@@@@@A@Y@@@@@@@@)nativeintM;@@)nativeintA@@@@@@@@%int32N;@@%int32A@@@@@@@@%int64O;@@%int64A@@@@@@@@&lazy_tP;@@X@A&lazy_tA@Y@@@@@@@@ 5extension_constructorR;@@5extension_constructorA@@@@@@@@*floatarrayS;@@*floatarrayA@@@@@@@@&iarrayT;@@Y@A&iarrayA@Y@@@@@@@@ *atomic_locU;@@Z@A*atomic_locA@@@@@@ @@@ .Assert_failure`#@@@@@J@@@@@@@@[@@A!=ocaml.warn_on_literal_pattern%@&@0Division_by_zero]#@@@A+ . .@+End_of_file\#$@@@A366@'FailureY#,@'@@A<??@0Invalid_argumentX#5@0@@AE$H#H@-Match_failureV#>@@=@9@;@@a@@AV5Y4Y@)Not_foundZ#O@@@A^=a<a@-Out_of_memoryW#W@@@AfEiDi@.Stack_overflow^#_@@@AnMqLq@.Sys_blocked_io_#g@@@AvUyTy@)Sys_error[#o@j@@A^]@:Undefined_recursive_modulea#x@@w@s@u@@h@@Aon@:Continuation_already_takenb#@@@Awv@&Stdlib@A5 {1 Basic functions} VV@@@@@@  The functions in this section use the MD5 hash function to produce 128-bit digests (16 bytes). MD5 is not cryptographically secure. Hence, these functions should not be used for security-sensitive applications. The BLAKE2 functions below are cryptographically secure. X[:@@@@@@A+!tA]<A]<B@@;@@@A@@@|@@@@]<<]<K@)ocaml.docڐ ' The type of digests: 16-byte strings. ^LL^Lx@@@@@@@@@@@@@Aг&string]<E@@ 3@+;@@@A3@@@@{@@@@'$@@@A &@@(%$#@##@@@#@#@@32@'compare`z~`z@б@гP!t `z`z@@ @@@3@[U@A@@б@гa!t`z`z@@ @@@@@г#int+`z,`z@@ @@@@@@@@@@# @@@+@@ @@(.@@@=`zz@u G The comparison function for 16-byte digests, with the same specification as {!Stdlib.compare} and the implementation shared with {!String.compare}. Along with the type [t], this function [compare] allows the module [Digest] to be passed as argument to the functors {!Set.Make} and {!Map.Make}. @since 4.00 JaKf@@@@@@@cA@@"@^@@@@@@G%equalahbh@б@г!tlhmh@@ @@@3nmmnnnnn@`u8@A@@б@г!t}h~h@@ @@@@@г?$boolhh@@ @@@@@@@@@@# @@@+@@ @@(.@@@h@Ԑ 9 The equal function for 16-byte digests. @since 4.03 ij+=@@@@@@@B@@"@@@@@@@G&stringl?Cl?I@б@г&stringl?Ll?R@@ @@@3@`u8@A@@г!tl?Vl?W@@ @@@@@@@@@@ @@@l?? @ ( Return the digest of the given string. mXXmX@@@@@@@ C@@@/@@@@@@3%bytes o o@б@гנ%bytesoo@@ @@@3@La8@A@@гh!t%o&o@@ @@@@@@@@@@ @@@2o @j ? Return the digest of the given byte sequence. @since 4.02 ?p@q@@@@@@@XD@@@zS@@@@@@3)substringVsWs@б@г(&stringasbs@@ @@@3cbbccccc@La8@A@@б@гE#intrsss @@ @@@@@б@гT#ints s @@ @@@ @@гѠ!ts s @@ @@@-@@@@@@@2 @@@)@@ @@7,@@@?@@ @@<B@@@s@ݐ [Digest.substring s ofs len] returns the digest of the substring of [s] starting at index [ofs] and containing [len] characters. t  u S @@@@@@@E@@'@Ɛ@@@@@@[(subbytesw  w  @б@г%bytesw  w  @@ @@@3@t8@A@@б@г#intw  w  @@ @@@@@б@гǠ#intw  w  @@ @@@ @@гD!tw  w  @@ @@@-@@@@@@@2 @@@)@@ @@7,@@@?@@ @@<B@@@w  @P [Digest.subbytes s ofs len] returns the digest of the subsequence of [s] starting at index [ofs] and containing [len] bytes. @since 4.02 %x  &z G Y@@@@@@@>F@@'@`9@@@@@@['channel<| [ _=| [ f@б@г*in_channelG| [ iH| [ s@@ @@@3IHHIIIII@t8@A@@б@г+#intX| [ wY| [ z@@ @@@@@г!te| [ ~f| [ @@ @@@@@@@@@@# @@@+@@ @@(.@@@w| [ [@ \ If [len] is nonnegative, [Digest.channel ic len] reads [len] characters from channel [ic] and returns their digest, or raises [End_of_file] if end-of-file is reached before [len] characters are read. If [len] is negative, [Digest.channel ic len] reads all characters from [ic] until end-of-file is reached and return their digest. }  B  @@@@@@@G@@"@@@@@@@G$fileD  D  @б@гm&stringD  D  @@ @@@3@`u8@A@@г!tD  D  @@ @@@@@@@@@@ @@@D   @ 4 Return the digest of the file whose name is given. E  E  3@@@@@@@H@@@ 㐠@@@@@@3&outputG 5 9G 5 ?@б@г^+out_channelG 5 BG 5 M@@ @@@3@La8@A@@б@гE!tG 5 QG 5 R@@ @@@@@г$unitG 5 VG 5 Z@@ @@@@@@@@@@# @@@+@@ @@(.@@@!G 5 5@Y - Write a digest on the given output channel. .H [ [/H [ @@@@@@@GI@@"@iB@@@@@@G%inputEJ  FJ  @б@г*in_channelPJ  QJ  @@ @@@3RQQRRRRR@`u8@A@@г!t_J  `J  @@ @@@@@@@@@@ @@@lJ   @ - Read a digest from the given input channel. yK  zK  @@@@@@@J@@@@@@@@@3&to_hexM  M  @б@гޠ!tM  M  @@ @@@3@La8@A@@гq&stringM  M  @@ @@@@@@@@@@ @@@M   @ Return the printable hexadecimal representation of the given digest. @raise Invalid_argument if the argument is not exactly 16 bytes. N  P  @@@@@@@K@@@ؐ@@@@@@3&of_hexR  R  @б@г&stringR  R  @@ @@@3@La8@A@@г8!tR  R  @@ @@@@@@@@@@ @@@R   @: Convert a hexadecimal representation back into the corresponding digest. @raise Invalid_argument if the argument is not exactly 32 hexadecimal characters. @since 5.2 S  VRc@@@@@@@(L@@@J#@@@@@@3(from_hex&Xei'Xeq@б@г&string1Xet2Xez@@ @@@332233333@La8@A@@г!t@Xe~AXe@@ @@@@@@@@@@ @@@MXee @ 4 Same function as {!Digest.of_hex}. @since 4.00 ZY[Z@@@@@@@sM@@@n@@@@@@3|{7 {1 Generic interface} x\y\@@@@@@3wvvwwwww@EZ1@A!S.C^^@\@БA+!t B``@@;@@Af@@@@@@@``@֐6 The type of digests. aa@@@@@@@@@N@@@Aг&string`@@3@=(;@@@A0@@@@@@@@%"@@@A $@@&Ґ$#@##@@@#@#@@3@S@A21@+hash_length!c!'c!2@г#intc!5c!8@@ @@@3@lWQ@A@@@c!# @" " The length of digests, in bytes. d9=d9d@@@@@@@O@@@2 @@@@@@!'compare"fflffs@б@г!tffvffw@@ @@@3@:M8@A@@б@г!t*ff{+ff|@@ @@@@@г #int7ff8ff@@ @@@@@@@@@@# @@@+@@ @@(.@@@Iffh@ P Compare two digests, with the same specification as {!Stdlib.compare}. VgWh@@@@@@@oP@@"@j@@@@@@G%equal#mjnj@б@г䠐!txjyj@@ @@@3zyyzzzzz@`u8@A@@б@г!tjj@@ @@@@@гK$booljj@@ @@@@@@@@@@# @@@+@@ @@(.@@@j@ Test two digests for equality. kk%@@@@@@@Q@@"@ɐ@@@@@@G&string$m'-m'3@б@г&stringm'6m'<@@ @@@3@`u8@A@@гR!tm'@m'A@@ @@@@@@@@@@ @@@m') @+ ( Return the digest of the given string. nBFnBs@@@@@@@R@@@;@@@@@@3%bytes%pu{pu@б@г㠐%bytes"pu#pu@@ @@@3$##$$$$$@La8@A@@г!t1pu2pu@@ @@@@@@@@@@ @@@>puw @v / Return the digest of the given byte sequence. KqLq@@@@@@@dS@@@_@@@@@@3)substring&bscs@б@г4&stringmsns@@ @@@3onnooooo@La8@A@@б@гQ#int~ss@@ @@@@@б@г`#intss@@ @@@ @@г!tss@@ @@@-@@@@@@@2 @@@)@@ @@7,@@@?@@ @@<B@@@s@鐠 [substring s ofs len] returns the digest of the substring of [s] starting at index [ofs] and containing [len] characters. tu6@@@@@@@T@@'@Ґ@@@@@@[(subbytes'ww@б@г%bytesww@@ @@@3@t8@A@@б@гĠ#intww@@ @@@@@б@гӠ#int w w@@ @@@ @@гy!t w w@@ @@@-@@@@@@@2 @@@)@@ @@7,@@@?@@ @@<B@@@ $w@\  [subbytes s ofs len] returns the digest of the subsequence of [s] starting at index [ofs] and containing [len] bytes.  1x 2y4@@@@@@@ JU@@'@l E@@@@@@['channel( H{6< I{6C@б@г*in_channel S{6F T{6P@@ @@@3 U T T U U U U U@t8@A@@б@г 7#int d{6T e{6W@@ @@@@@гݠ!t q{6[ r{6\@@ @@@@@@@@@@# @@@+@@ @@(.@@@ {68@ u Read characters from the channel and return their digest. See {!Digest.channel} for the full specification.  |]a }@@@@@@@ V@@"@ @@@@@@G$file)  @б@г y&string  @@ @@@ 3        @`u8@A@@г-!t  @@ @@@ @@@@@ @@  @@@  @ 4 Return the digest of the file whose name is given.   3@@@@@@@ W@@@ @@@@@@3&output* 5; 5A@б@гj+out_channel 5D 5O@@ @@@ 3        @La8@A@@б@гz!t 5S 5T@@ @@@@@г $unit 5X 5\@@ @@@@@@@@@@# @@@+@@ @@(.@@@ -57@e - Write a digest on the given output channel.  :]a ;]@@@@@@@ SX@@"@u N@@@@@@G%input+ Q R@б@г*in_channel \ ]@@ @@@3 ^ ] ] ^ ^ ^ ^ ^@`u8@A@@гנ!t k l@@ @@@@@@@@@@ @@@ x @ - Read a digest from the given input channel.   @@@@@@@ Y@@@ @@@@@@3&to_hex,  @б@г!t  @@ @@@3        @La8@A@@г }&string  @@ @@@@@@@@@@ @@@  @ Return the printable hexadecimal representation of the given digest. @raise Invalid_argument if the length of the argument is not [hash_length],    @@@@@@@ Z@@@  䐠@@@@@@3&of_hex-  @б@г &string  @@ @@@3        @La8@A@@гm!t  @@ @@@@@@@@@@ @@@  @ F Convert a hexadecimal representation back into the corresponding digest. @raise Invalid_argument if the length of the argument is not [2 * hash_length], or if the arguments contains non-hexadecimal characters.   @@@@@@@ 4[@@@ V /@@@@@@3@A@[F@&@@lC@#@@i@@r@R@@@c:@@3 C B B C C C C C@Pe<@A3 F E E F F F F F@@A K^ L@@  ] The signature for a hash function that produces digests of length [hash_length] from character strings, byte arrays, and files. @since 5.2  Z [Ui@@@@@@@ ]^@@ r q= {1 Specific hash functions}  nkk ok@@@@@@3 m l l m m m m m@A@@q4@@@nE@%@c@C@@`@@@@@@ ȐCB@BB@@@B@B@?@A.(BLAKE128/D  @ ]@@Р+!S  @B@@  Ð [BLAKE128] is the BLAKE2b hash function producing 128-bit (16-byte) digests. It is cryptographically secure. However, the small size of the digests enables brute-force attacks in [2{^64}] attempts. @since 5.2   @@@@@@@ @T@(BLAKE2560E  @ ^@@РU!S  @3        @m>@6 ,+@++@@@+@+@(C@A@@ " [BLAKE256] is the BLAKE2b hash function producing 256-bit (32-byte) digests. It is cryptographically secure, and the digests are large enough to thwart brute-force attacks. @since 5.2   k~@@@@@@@ "@ #@(BLAKE5121F  @ _@@Р!S  @3        @9L@D O,+@++@@@+@+@(Q@A@@ Z 3 [BLAKE512] is the BLAKE2b hash function producing 512-bit (64-byte) digests. It is cryptographically secure, and the digests are large enough to thwart brute-force attacks. @since 5.2  0 1Tg@@@@@@@ 3"@ #@#MD52G ?ip @is@ X`@@РŠ!S Iiv Jiw@3 I H H I I I I I@9L@D ,+@++@@@+@+@(Q@A@@  k [MD5] is the MD5 hash function. It produces 128-bit (16-byte) digests and is not cryptographically secure at all. It should be used only for compatibility with earlier designs that mandate the use of MD5. @since 5.2  hxz iXk@@@@@@@ kii"@ #@@  A@ s 6@  @  @ p G@ '@e@E@@b@B@@@g>@ E1@@@@@{@@@Fd@@^@N А=<@<<@@@<@<@9b@@@3        @Xk@c=f@A@ H************************************************************************ A@@ A@L@ H  BMM BM@ H OCaml  C C@ H  D D3@ H Xavier Leroy, projet Cristal, INRIA Rocquencourt  E44 E4@ H  F F@ H Copyright 1996 Institut National de Recherche en Informatique et  G G@ H en Automatique.  H Hg@ H  Ihh Ih@ H All rights reserved. This file is distributed under the terms of  J J@ H the GNU Lesser General Public License version 2.1, with the  K KN@ H special exception on linking described in the file LICENSE.  LOO LO@ H  M M@ H************************************************************************ N N5@ * Message digest. This module provides functions to compute 'digests', also known as 'hashes', of arbitrary-length strings or files. The supported hashing algorithms are BLAKE2 and MD5.  6* {1 Basic functions}  a * The functions in this section use the MD5 hash function to produce 128-bit digests (16 bytes). MD5 is not cryptographically secure. Hence, these functions should not be used for security-sensitive applications. The BLAKE2 functions below are cryptographically secure.  S (* The type of digests: 16-byte strings.  1 H* The comparison function for 16-byte digests, with the same specification as {!Stdlib.compare} and the implementation shared with {!String.compare}. Along with the type [t], this function [compare] allows the module [Digest] to be passed as argument to the functors {!Set.Make} and {!Map.Make}. @since 4.00  :* The equal function for 16-byte digests. @since 4.03  e )* Return the digest of the given string.   @* Return the digest of the given byte sequence. @since 4.02  ՠ * [Digest.substring s ofs len] returns the digest of the substring of [s] starting at index [ofs] and containing [len] characters.  e * [Digest.subbytes s ofs len] returns the digest of the subsequence of [s] starting at index [ofs] and containing [len] bytes. @since 4.02  ]* If [len] is nonnegative, [Digest.channel ic len] reads [len] characters from channel [ic] and returns their digest, or raises [End_of_file] if end-of-file is reached before [len] characters are read. If [len] is negative, [Digest.channel ic len] reads all characters from [ic] until end-of-file is reached and return their digest.  5* Return the digest of the file whose name is given. Q .* Write a digest on the given output channel.  .* Read a digest from the given input channel.  * Return the printable hexadecimal representation of the given digest. @raise Invalid_argument if the argument is not exactly 16 bytes. e * Convert a hexadecimal representation back into the corresponding digest. @raise Invalid_argument if the argument is not exactly 32 hexadecimal characters. @since 5.2  5* Same function as {!Digest.of_hex}. @since 4.00 ՠ8* {1 Generic interface} 7* The type of digests.  #* The length of digests, in bytes. A Q* Compare two digests, with the same specification as {!Stdlib.compare}. 堠 !* Test two digests for equality.  )* Return the digest of the given string. A 0* Return the digest of the given byte sequence.  * [substring s ofs len] returns the digest of the substring of [s] starting at index [ofs] and containing [len] characters.  * [subbytes s ofs len] returns the digest of the subsequence of [s] starting at index [ofs] and containing [len] bytes.  v* Read characters from the channel and return their digest. See {!Digest.channel} for the full specification.  5* Return the digest of the file whose name is given. u .* Write a digest on the given output channel.  .* Read a digest from the given input channel. Ѡ * Return the printable hexadecimal representation of the given digest. @raise Invalid_argument if the length of the argument is not [hash_length],  * Convert a hexadecimal representation back into the corresponding digest. @raise Invalid_argument if the length of the argument is not [2 * hash_length], or if the arguments contains non-hexadecimal characters. A * The signature for a hash function that produces digests of length [hash_length] from character strings, byte arrays, and files. @since 5.2 >* {1 Specific hash functions}  * [BLAKE128] is the BLAKE2b hash function producing 128-bit (16-byte) digests. It is cryptographically secure. However, the small size of the digests enables brute-force attacks in [2{^64}] attempts. @since 5.2  * [BLAKE256] is the BLAKE2b hash function producing 256-bit (32-byte) digests. It is cryptographically secure, and the digests are large enough to thwart brute-force attacks. @since 5.2 p * [BLAKE512] is the BLAKE2b hash function producing 512-bit (64-byte) digests. It is cryptographically secure, and the digests are large enough to thwart brute-force attacks. @since 5.2 ; * [MD5] is the MD5 hash function. It produces 128-bit (16-byte) digests and is not cryptographically secure at all. It should be used only for compatibility with earlier designs that mandate the use of MD5. @since 5.2 @?)../ocamlc0-strict-sequence(-absname"-w5+a-4-9-41-42-44-45-48"-g+-warn-error"+A*-bin-annot)-nostdlib*-principal"-o2stdlib__Digest.cmi"-c { | Z/home/teraram/ci/builds/workspace/parallel-build/flambda/true/label/ocaml-manycores/stdlib @@0'7`ٓ/3        @ ~@@8CamlinternalFormatBasics0|.e1R$|o&Stdlib0t0VoS%{<F: 0#z25I*@0#z25I*Aaz@@ t @"^ΐ @@#@G@@@@@I@ʐyɰ   Ԓ @H  a g @@@y@2n@@-@ ~ @1@ A @q@@ " r@9@ؐ@ʖ@@İM@@@P@@