diff --git a/Cargo.toml b/Cargo.toml index 4e06422..d81affa 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -23,4 +23,8 @@ members = [ "pasta", "halo2", "weierstrass-curves", + "ovn", + "auction", + "concordium", + "concordium-derive", ] diff --git a/aes/proofs/coq/extraction/Hacspec_aes.v b/aes/proofs/coq/extraction/Hacspec_aes.v new file mode 100644 index 0000000..83c0697 --- /dev/null +++ b/aes/proofs/coq/extraction/Hacspec_aes.v @@ -0,0 +1,547 @@ +(* File automatically generated by Hacspec *) +From Hacspec Require Import Hacspec_Lib MachineIntegers. +From Coq Require Import ZArith. +Import List.ListNotations. +Open Scope Z_scope. +Open Scope bool_scope. + +Require Import Hacspec_lib. + +(*Not implemented yet? todo(item)*) + +Definition v_BLOCKSIZE : uint_size := + (@repr WORDSIZE32 16). + +Definition v_INVALID_KEY_EXPANSION_INDEX : int8 := + (@repr WORDSIZE8 1). + +Definition v_ITERATIONS : uint_size := + (@repr WORDSIZE32 40). + +Definition v_IVSIZE : uint_size := + (@repr WORDSIZE32 12). + +Definition v_KEY_LENGTH : uint_size := + (@repr WORDSIZE32 4). + +Definition v_KEY_SCHEDULE_LENGTH : uint_size := + (@repr WORDSIZE32 176). + +Definition v_ROUNDS : uint_size := + (@repr WORDSIZE32 10). + +Notation AesNonce_t := (nseq int8 IVSIZE). +Definition AesNonce : AesNonce_t -> AesNonce_t := + id. + +Notation Block_t := (nseq int8 BLOCKSIZE). +Definition Block : Block_t -> Block_t := + id. + +Notation t_BlockResult_t := (t_Result_t (t_Block_t) (int8)). + +Notation Bytes144_t := (nseq int8 144). +Definition Bytes144 : Bytes144_t -> Bytes144_t := + id. + +Notation Bytes176_t := (nseq int8 KEY_SCHEDULE_LENGTH). +Definition Bytes176 : Bytes176_t -> Bytes176_t := + id. + +Notation Key128_t := (nseq int8 BLOCKSIZE). +Definition Key128 : Key128_t -> Key128_t := + id. + +Notation RCon_t := (nseq int8 15). +Definition RCon : RCon_t -> RCon_t := + id. + +Notation RoundKey_t := (nseq int8 BLOCKSIZE). +Definition RoundKey : RoundKey_t -> RoundKey_t := + id. + +Notation SBox_t := (nseq int8 256). +Definition SBox : SBox_t -> SBox_t := + id. + +Notation Word_t := (nseq int8 KEY_LENGTH). +Definition Word : Word_t -> Word_t := + id. + +Notation t_WordResult_t := (t_Result_t (t_Word_t) (int8)). + +Notation t_ByteSeqResult_t := (t_Result_t (t_Seq_t t_U8_t) (int8)). + +Definition add_round_key (state : t_Block_t) (key : t_RoundKey_t) : t_Block_t := + let out := (state) : t_Block_t in + let out := (f_fold (f_into_iter (Build_Range (@repr WORDSIZE32 0)v_BLOCKSIZE)) out (fun out i => + update_at_usize out i ((out.[i]).^(key.[i])))) : t_Block_t in + out. + +Definition rotate_word (w : t_Word_t) : t_Word_t := + Word (array_from_list [w.[(@repr WORDSIZE32 1)]; + w.[(@repr WORDSIZE32 2)]; + w.[(@repr WORDSIZE32 3)]; + w.[(@repr WORDSIZE32 0)]]). + +Definition shift_row (i : uint_size) (shift : uint_size) (state : t_Block_t) : t_Block_t := + let out := (state) : t_Block_t in + let out := (update_at_usize out i (state.[(i.+((@repr WORDSIZE32 4).*(shift.%(@repr WORDSIZE32 4))))])) : t_Block_t in + let out := (update_at_usize out (i.+(@repr WORDSIZE32 4)) (state.[(i.+((@repr WORDSIZE32 4).*((shift.+(@repr WORDSIZE32 1)).%(@repr WORDSIZE32 4))))])) : t_Block_t in + let out := (update_at_usize out (i.+(@repr WORDSIZE32 8)) (state.[(i.+((@repr WORDSIZE32 4).*((shift.+(@repr WORDSIZE32 2)).%(@repr WORDSIZE32 4))))])) : t_Block_t in + let out := (update_at_usize out (i.+(@repr WORDSIZE32 12)) (state.[(i.+((@repr WORDSIZE32 4).*((shift.+(@repr WORDSIZE32 3)).%(@repr WORDSIZE32 4))))])) : t_Block_t in + out. + +Definition shift_rows (state : t_Block_t) : t_Block_t := + let state := (shift_row (@repr WORDSIZE32 1) (@repr WORDSIZE32 1) state) : t_Block_t in + let state := (shift_row (@repr WORDSIZE32 2) (@repr WORDSIZE32 2) state) : t_Block_t in + shift_row (@repr WORDSIZE32 3) (@repr WORDSIZE32 3) state. + +Definition xor_block (block : t_Block_t) (key_block : t_Block_t) : t_Block_t := + let out := (block) : t_Block_t in + let out := (f_fold (f_into_iter (Build_Range (@repr WORDSIZE32 0)v_BLOCKSIZE)) out (fun out i => + update_at_usize out i ((out.[i]).^(key_block.[i])))) : t_Block_t in + out. + +Definition v_RCON : t_RCon_t := + RCon (array_from_list [U8 (@repr WORDSIZE8 141); + U8 (@repr WORDSIZE8 1); + U8 (@repr WORDSIZE8 2); + U8 (@repr WORDSIZE8 4); + U8 (@repr WORDSIZE8 8); + U8 (@repr WORDSIZE8 16); + U8 (@repr WORDSIZE8 32); + U8 (@repr WORDSIZE8 64); + U8 (@repr WORDSIZE8 128); + U8 (@repr WORDSIZE8 27); + U8 (@repr WORDSIZE8 54); + U8 (@repr WORDSIZE8 108); + U8 (@repr WORDSIZE8 216); + U8 (@repr WORDSIZE8 171); + U8 (@repr WORDSIZE8 77)]). + +Definition v_SBOX : t_SBox_t := + SBox (array_from_list [U8 (@repr WORDSIZE8 99); + U8 (@repr WORDSIZE8 124); + U8 (@repr WORDSIZE8 119); + U8 (@repr WORDSIZE8 123); + U8 (@repr WORDSIZE8 242); + U8 (@repr WORDSIZE8 107); + U8 (@repr WORDSIZE8 111); + U8 (@repr WORDSIZE8 197); + U8 (@repr WORDSIZE8 48); + U8 (@repr WORDSIZE8 1); + U8 (@repr WORDSIZE8 103); + U8 (@repr WORDSIZE8 43); + U8 (@repr WORDSIZE8 254); + U8 (@repr WORDSIZE8 215); + U8 (@repr WORDSIZE8 171); + U8 (@repr WORDSIZE8 118); + U8 (@repr WORDSIZE8 202); + U8 (@repr WORDSIZE8 130); + U8 (@repr WORDSIZE8 201); + U8 (@repr WORDSIZE8 125); + U8 (@repr WORDSIZE8 250); + U8 (@repr WORDSIZE8 89); + U8 (@repr WORDSIZE8 71); + U8 (@repr WORDSIZE8 240); + U8 (@repr WORDSIZE8 173); + U8 (@repr WORDSIZE8 212); + U8 (@repr WORDSIZE8 162); + U8 (@repr WORDSIZE8 175); + U8 (@repr WORDSIZE8 156); + U8 (@repr WORDSIZE8 164); + U8 (@repr WORDSIZE8 114); + U8 (@repr WORDSIZE8 192); + U8 (@repr WORDSIZE8 183); + U8 (@repr WORDSIZE8 253); + U8 (@repr WORDSIZE8 147); + U8 (@repr WORDSIZE8 38); + U8 (@repr WORDSIZE8 54); + U8 (@repr WORDSIZE8 63); + U8 (@repr WORDSIZE8 247); + U8 (@repr WORDSIZE8 204); + U8 (@repr WORDSIZE8 52); + U8 (@repr WORDSIZE8 165); + U8 (@repr WORDSIZE8 229); + U8 (@repr WORDSIZE8 241); + U8 (@repr WORDSIZE8 113); + U8 (@repr WORDSIZE8 216); + U8 (@repr WORDSIZE8 49); + U8 (@repr WORDSIZE8 21); + U8 (@repr WORDSIZE8 4); + U8 (@repr WORDSIZE8 199); + U8 (@repr WORDSIZE8 35); + U8 (@repr WORDSIZE8 195); + U8 (@repr WORDSIZE8 24); + U8 (@repr WORDSIZE8 150); + U8 (@repr WORDSIZE8 5); + U8 (@repr WORDSIZE8 154); + U8 (@repr WORDSIZE8 7); + U8 (@repr WORDSIZE8 18); + U8 (@repr WORDSIZE8 128); + U8 (@repr WORDSIZE8 226); + U8 (@repr WORDSIZE8 235); + U8 (@repr WORDSIZE8 39); + U8 (@repr WORDSIZE8 178); + U8 (@repr WORDSIZE8 117); + U8 (@repr WORDSIZE8 9); + U8 (@repr WORDSIZE8 131); + U8 (@repr WORDSIZE8 44); + U8 (@repr WORDSIZE8 26); + U8 (@repr WORDSIZE8 27); + U8 (@repr WORDSIZE8 110); + U8 (@repr WORDSIZE8 90); + U8 (@repr WORDSIZE8 160); + U8 (@repr WORDSIZE8 82); + U8 (@repr WORDSIZE8 59); + U8 (@repr WORDSIZE8 214); + U8 (@repr WORDSIZE8 179); + U8 (@repr WORDSIZE8 41); + U8 (@repr WORDSIZE8 227); + U8 (@repr WORDSIZE8 47); + U8 (@repr WORDSIZE8 132); + U8 (@repr WORDSIZE8 83); + U8 (@repr WORDSIZE8 209); + U8 (@repr WORDSIZE8 0); + U8 (@repr WORDSIZE8 237); + U8 (@repr WORDSIZE8 32); + U8 (@repr WORDSIZE8 252); + U8 (@repr WORDSIZE8 177); + U8 (@repr WORDSIZE8 91); + U8 (@repr WORDSIZE8 106); + U8 (@repr WORDSIZE8 203); + U8 (@repr WORDSIZE8 190); + U8 (@repr WORDSIZE8 57); + U8 (@repr WORDSIZE8 74); + U8 (@repr WORDSIZE8 76); + U8 (@repr WORDSIZE8 88); + U8 (@repr WORDSIZE8 207); + U8 (@repr WORDSIZE8 208); + U8 (@repr WORDSIZE8 239); + U8 (@repr WORDSIZE8 170); + U8 (@repr WORDSIZE8 251); + U8 (@repr WORDSIZE8 67); + U8 (@repr WORDSIZE8 77); + U8 (@repr WORDSIZE8 51); + U8 (@repr WORDSIZE8 133); + U8 (@repr WORDSIZE8 69); + U8 (@repr WORDSIZE8 249); + U8 (@repr WORDSIZE8 2); + U8 (@repr WORDSIZE8 127); + U8 (@repr WORDSIZE8 80); + U8 (@repr WORDSIZE8 60); + U8 (@repr WORDSIZE8 159); + U8 (@repr WORDSIZE8 168); + U8 (@repr WORDSIZE8 81); + U8 (@repr WORDSIZE8 163); + U8 (@repr WORDSIZE8 64); + U8 (@repr WORDSIZE8 143); + U8 (@repr WORDSIZE8 146); + U8 (@repr WORDSIZE8 157); + U8 (@repr WORDSIZE8 56); + U8 (@repr WORDSIZE8 245); + U8 (@repr WORDSIZE8 188); + U8 (@repr WORDSIZE8 182); + U8 (@repr WORDSIZE8 218); + U8 (@repr WORDSIZE8 33); + U8 (@repr WORDSIZE8 16); + U8 (@repr WORDSIZE8 255); + U8 (@repr WORDSIZE8 243); + U8 (@repr WORDSIZE8 210); + U8 (@repr WORDSIZE8 205); + U8 (@repr WORDSIZE8 12); + U8 (@repr WORDSIZE8 19); + U8 (@repr WORDSIZE8 236); + U8 (@repr WORDSIZE8 95); + U8 (@repr WORDSIZE8 151); + U8 (@repr WORDSIZE8 68); + U8 (@repr WORDSIZE8 23); + U8 (@repr WORDSIZE8 196); + U8 (@repr WORDSIZE8 167); + U8 (@repr WORDSIZE8 126); + U8 (@repr WORDSIZE8 61); + U8 (@repr WORDSIZE8 100); + U8 (@repr WORDSIZE8 93); + U8 (@repr WORDSIZE8 25); + U8 (@repr WORDSIZE8 115); + U8 (@repr WORDSIZE8 96); + U8 (@repr WORDSIZE8 129); + U8 (@repr WORDSIZE8 79); + U8 (@repr WORDSIZE8 220); + U8 (@repr WORDSIZE8 34); + U8 (@repr WORDSIZE8 42); + U8 (@repr WORDSIZE8 144); + U8 (@repr WORDSIZE8 136); + U8 (@repr WORDSIZE8 70); + U8 (@repr WORDSIZE8 238); + U8 (@repr WORDSIZE8 184); + U8 (@repr WORDSIZE8 20); + U8 (@repr WORDSIZE8 222); + U8 (@repr WORDSIZE8 94); + U8 (@repr WORDSIZE8 11); + U8 (@repr WORDSIZE8 219); + U8 (@repr WORDSIZE8 224); + U8 (@repr WORDSIZE8 50); + U8 (@repr WORDSIZE8 58); + U8 (@repr WORDSIZE8 10); + U8 (@repr WORDSIZE8 73); + U8 (@repr WORDSIZE8 6); + U8 (@repr WORDSIZE8 36); + U8 (@repr WORDSIZE8 92); + U8 (@repr WORDSIZE8 194); + U8 (@repr WORDSIZE8 211); + U8 (@repr WORDSIZE8 172); + U8 (@repr WORDSIZE8 98); + U8 (@repr WORDSIZE8 145); + U8 (@repr WORDSIZE8 149); + U8 (@repr WORDSIZE8 228); + U8 (@repr WORDSIZE8 121); + U8 (@repr WORDSIZE8 231); + U8 (@repr WORDSIZE8 200); + U8 (@repr WORDSIZE8 55); + U8 (@repr WORDSIZE8 109); + U8 (@repr WORDSIZE8 141); + U8 (@repr WORDSIZE8 213); + U8 (@repr WORDSIZE8 78); + U8 (@repr WORDSIZE8 169); + U8 (@repr WORDSIZE8 108); + U8 (@repr WORDSIZE8 86); + U8 (@repr WORDSIZE8 244); + U8 (@repr WORDSIZE8 234); + U8 (@repr WORDSIZE8 101); + U8 (@repr WORDSIZE8 122); + U8 (@repr WORDSIZE8 174); + U8 (@repr WORDSIZE8 8); + U8 (@repr WORDSIZE8 186); + U8 (@repr WORDSIZE8 120); + U8 (@repr WORDSIZE8 37); + U8 (@repr WORDSIZE8 46); + U8 (@repr WORDSIZE8 28); + U8 (@repr WORDSIZE8 166); + U8 (@repr WORDSIZE8 180); + U8 (@repr WORDSIZE8 198); + U8 (@repr WORDSIZE8 232); + U8 (@repr WORDSIZE8 221); + U8 (@repr WORDSIZE8 116); + U8 (@repr WORDSIZE8 31); + U8 (@repr WORDSIZE8 75); + U8 (@repr WORDSIZE8 189); + U8 (@repr WORDSIZE8 139); + U8 (@repr WORDSIZE8 138); + U8 (@repr WORDSIZE8 112); + U8 (@repr WORDSIZE8 62); + U8 (@repr WORDSIZE8 181); + U8 (@repr WORDSIZE8 102); + U8 (@repr WORDSIZE8 72); + U8 (@repr WORDSIZE8 3); + U8 (@repr WORDSIZE8 246); + U8 (@repr WORDSIZE8 14); + U8 (@repr WORDSIZE8 97); + U8 (@repr WORDSIZE8 53); + U8 (@repr WORDSIZE8 87); + U8 (@repr WORDSIZE8 185); + U8 (@repr WORDSIZE8 134); + U8 (@repr WORDSIZE8 193); + U8 (@repr WORDSIZE8 29); + U8 (@repr WORDSIZE8 158); + U8 (@repr WORDSIZE8 225); + U8 (@repr WORDSIZE8 248); + U8 (@repr WORDSIZE8 152); + U8 (@repr WORDSIZE8 17); + U8 (@repr WORDSIZE8 105); + U8 (@repr WORDSIZE8 217); + U8 (@repr WORDSIZE8 142); + U8 (@repr WORDSIZE8 148); + U8 (@repr WORDSIZE8 155); + U8 (@repr WORDSIZE8 30); + U8 (@repr WORDSIZE8 135); + U8 (@repr WORDSIZE8 233); + U8 (@repr WORDSIZE8 206); + U8 (@repr WORDSIZE8 85); + U8 (@repr WORDSIZE8 40); + U8 (@repr WORDSIZE8 223); + U8 (@repr WORDSIZE8 140); + U8 (@repr WORDSIZE8 161); + U8 (@repr WORDSIZE8 137); + U8 (@repr WORDSIZE8 13); + U8 (@repr WORDSIZE8 191); + U8 (@repr WORDSIZE8 230); + U8 (@repr WORDSIZE8 66); + U8 (@repr WORDSIZE8 104); + U8 (@repr WORDSIZE8 65); + U8 (@repr WORDSIZE8 153); + U8 (@repr WORDSIZE8 45); + U8 (@repr WORDSIZE8 15); + U8 (@repr WORDSIZE8 176); + U8 (@repr WORDSIZE8 84); + U8 (@repr WORDSIZE8 187); + U8 (@repr WORDSIZE8 22)]). + +Definition sub_bytes (state : t_Block_t) : t_Block_t := + let st := (state) : t_Block_t in + let st := (f_fold (f_into_iter (Build_Range (@repr WORDSIZE32 0)v_BLOCKSIZE)) st (fun st i => + update_at_usize st i (v_SBOX.[(impl__U8__declassify (state.[i]))]))) : t_Block_t in + st. + +Definition aes_enc_last (state : t_Block_t) (round_key : t_RoundKey_t) : t_Block_t := + let state := (sub_bytes state) : t_Block_t in + let state := (shift_rows state) : t_Block_t in + add_round_key state round_key. + +Definition xtime (x : t_U8_t) : t_U8_t := + let x1 := (x shift_left (@repr WORDSIZE32 1)) : t_U8_t in + let x7 := (x shift_right (@repr WORDSIZE32 7)) : t_U8_t in + let x71 := (x7.&(U8 (@repr WORDSIZE8 1))) : t_U8_t in + let x711b := (x71.*(U8 (@repr WORDSIZE8 27))) : t_U8_t in + x1.^x711b. + +Definition mix_column (c : uint_size) (state : t_Block_t) : t_Block_t := + let i0 := ((@repr WORDSIZE32 4).*c) : uint_size in + let s0 := (state.[i0]) : t_U8_t in + let s1 := (state.[(i0.+(@repr WORDSIZE32 1))]) : t_U8_t in + let s2 := (state.[(i0.+(@repr WORDSIZE32 2))]) : t_U8_t in + let s3 := (state.[(i0.+(@repr WORDSIZE32 3))]) : t_U8_t in + let st := (state) : t_Block_t in + let tmp := (((s0.^s1).^s2).^s3) : t_U8_t in + let st := (update_at_usize st i0 ((s0.^tmp).^(xtime (s0.^s1)))) : t_Block_t in + let st := (update_at_usize st (i0.+(@repr WORDSIZE32 1)) ((s1.^tmp).^(xtime (s1.^s2)))) : t_Block_t in + let st := (update_at_usize st (i0.+(@repr WORDSIZE32 2)) ((s2.^tmp).^(xtime (s2.^s3)))) : t_Block_t in + let st := (update_at_usize st (i0.+(@repr WORDSIZE32 3)) ((s3.^tmp).^(xtime (s3.^s0)))) : t_Block_t in + st. + +Definition mix_columns (state : t_Block_t) : t_Block_t := + let state := (mix_column (@repr WORDSIZE32 0) state) : t_Block_t in + let state := (mix_column (@repr WORDSIZE32 1) state) : t_Block_t in + let state := (mix_column (@repr WORDSIZE32 2) state) : t_Block_t in + mix_column (@repr WORDSIZE32 3) state. + +Definition aes_enc (state : t_Block_t) (round_key : t_RoundKey_t) : t_Block_t := + let state := (sub_bytes state) : t_Block_t in + let state := (shift_rows state) : t_Block_t in + let state := (mix_columns state) : t_Block_t in + add_round_key state round_key. + +Definition rounds_aes (state : t_Block_t) (key : t_Seq_t t_U8_t) : t_Block_t := + let out := (state) : t_Block_t in + let out := (f_fold (f_into_iter (Build_Range (@repr WORDSIZE32 0)(impl_41__num_chunks key v_BLOCKSIZE))) out (fun out i => + let '(_,key_block) := (impl_41__get_chunk key v_BLOCKSIZE i) : (uint_size × t_Seq_t t_U8_t) in + let out := (aes_enc out (impl__RoundKey__from_seq key_block)) : t_Block_t in + out)) : t_Block_t in + out. + +Definition block_cipher_aes (input : t_Block_t) (key : t_Seq_t t_U8_t) (nr : uint_size) : t_Block_t := + let k0 := (impl__RoundKey__from_slice_range key (Build_Range (@repr WORDSIZE32 0)(@repr WORDSIZE32 16))) : t_RoundKey_t in + let k := (impl_41__from_slice_range key (Build_Range (@repr WORDSIZE32 16)(nr.*(@repr WORDSIZE32 16)))) : t_Seq_t t_U8_t in + let kn := (impl__RoundKey__from_slice key (nr.*(@repr WORDSIZE32 16)) (@repr WORDSIZE32 16)) : t_RoundKey_t in + let state := (add_round_key input k0) : t_Block_t in + let state := (rounds_aes state k) : t_Block_t in + aes_enc_last state kn. + +Definition slice_word (w : t_Word_t) : t_Word_t := + Word (array_from_list [v_SBOX.[(declassify_usize_from_U8 (w.[(@repr WORDSIZE32 0)]))]; + v_SBOX.[(declassify_usize_from_U8 (w.[(@repr WORDSIZE32 1)]))]; + v_SBOX.[(declassify_usize_from_U8 (w.[(@repr WORDSIZE32 2)]))]; + v_SBOX.[(declassify_usize_from_U8 (w.[(@repr WORDSIZE32 3)]))]]). + +Definition aes_keygen_assist (w : t_Word_t) (rcon : t_U8_t) : t_Word_t := + let k := (rotate_word w) : t_Word_t in + let k := (slice_word k) : t_Word_t in + let k := (update_at k (@repr WORDSIZE32 0) ((k.[(@repr WORDSIZE32 0)]).^rcon)) : t_Word_t in + k. + +Definition key_expansion_word (w0 : t_Word_t) (w1 : t_Word_t) (i : uint_size) (nk : uint_size) (nr : uint_size) : t_Result_t (t_Word_t) (int8) := + let k := (w1) : t_Word_t in + let result := (v_Err v_INVALID_KEY_EXPANSION_INDEX) : t_Result_t (t_Word_t) (int8) in + let '(k,result) := (if + i<.?((@repr WORDSIZE32 4).*(nr.+(@repr WORDSIZE32 1))) + then + let k := (if + (i.%nk)=.?(@repr WORDSIZE32 0) + then + let k := (aes_keygen_assist k (v_RCON.[(i./nk)])) : t_Word_t in + k + else + if + andb (nk>.?(@repr WORDSIZE32 6)) ((i.%nk)=.?(@repr WORDSIZE32 4)) + then + let k := (slice_word k) : t_Word_t in + k + else + k) : t_Word_t in + let k := (f_fold (f_into_iter (Build_Range (@repr WORDSIZE32 0)(@repr WORDSIZE32 4))) k (fun k i => + update_at k i ((k.[i]).^(w0.[i])))) : t_Word_t in + let result := (v_Ok k) : t_Result_t (t_Word_t) (int8) in + (k,result) + else + (k,result)) : (t_Word_t × t_Result_t (t_Word_t) (int8)) in + result. + +Definition key_expansion_aes (key : t_Seq_t t_U8_t) (nk : uint_size) (nr : uint_size) (key_schedule_length : uint_size) (key_length : uint_size) (iterations : uint_size) : t_Result_t (t_Seq_t t_U8_t) (int8) := + let key_ex := (impl_41__new key_schedule_length) : t_Seq_t t_U8_t in + let key_ex := (f_update_start key_ex key) : t_Seq_t t_U8_t in + let word_size := (key_length) : uint_size in + let key_ex := (f_fold (f_into_iter (Build_Range (@repr WORDSIZE32 0)iterations)) key_ex (fun key_ex j => + let i := (j.+word_size) : uint_size in + let word := (match f_branch (key_expansion_word (impl__Word__from_slice key_ex ((@repr WORDSIZE32 4).*(i.-word_size)) (@repr WORDSIZE32 4)) (impl__Word__from_slice key_ex (((@repr WORDSIZE32 4).*i).-(@repr WORDSIZE32 4)) (@repr WORDSIZE32 4)) i nk nr) with + | ControlFlow_Break residual => let hoist1 := (v_Break (f_from_residual residual)) : t_Never_t in + ControlFlow_Continue (never_to_any hoist1) + | ControlFlow_Continue val => ControlFlow_Continue val + end) : t_Word_t in + ControlFlow_Continue (let key_ex := (f_update key_ex ((@repr WORDSIZE32 4).*i) word) : t_Seq_t t_U8_t in + key_ex))) : t_Seq_t t_U8_t in + v_Ok key_ex. + +Definition aes_encrypt_block (k : t_Seq_t t_U8_t) (input : t_Block_t) (nk : uint_size) (nr : uint_size) (key_schedule_length : uint_size) (key_length : uint_size) (iterations : uint_size) : t_Result_t (t_Block_t) (int8) := + run (let key_ex := (match f_branch (key_expansion_aes k nk nr key_schedule_length key_length iterations) with + | ControlFlow_Break residual => let hoist2 := (v_Break (f_from_residual residual)) : t_Never_t in + ControlFlow_Continue (never_to_any hoist2) + | ControlFlow_Continue val => ControlFlow_Continue val + end) : t_Seq_t t_U8_t in + ControlFlow_Continue (v_Ok (block_cipher_aes input key_ex nr))). + +Definition aes128_encrypt_block (k : t_Key128_t) (input : t_Block_t) : t_Block_t := + impl__unwrap (aes_encrypt_block (impl_52__from_seq k) input v_KEY_LENGTH v_ROUNDS v_KEY_SCHEDULE_LENGTH v_KEY_LENGTH v_ITERATIONS). + +Definition aes_ctr_key_block (k : t_Seq_t t_U8_t) (n : t_AesNonce_t) (c : t_U32_t) (nk : uint_size) (nr : uint_size) (key_schedule_length : uint_size) (key_length : uint_size) (iterations : uint_size) : t_Result_t (t_Block_t) (int8) := + let input := (impl__Block__new) : t_Block_t in + let input := (f_update input (@repr WORDSIZE32 0) n) : t_Block_t in + let input := (f_update input (@repr WORDSIZE32 12) (v_U32_to_be_bytes c)) : t_Block_t in + aes_encrypt_block k input nk nr key_schedule_length key_length iterations. + +Definition aes_counter_mode (key : t_Seq_t t_U8_t) (nonce : t_AesNonce_t) (counter : t_U32_t) (msg : t_Seq_t t_U8_t) (nk : uint_size) (nr : uint_size) (key_schedule_length : uint_size) (key_length : uint_size) (iterations : uint_size) : t_Result_t (t_Seq_t t_U8_t) (int8) := + run (let ctr := (counter) : t_U32_t in + let blocks_out := (impl_41__new (impl_41__len msg)) : t_Seq_t t_U8_t in + let n_blocks := (impl_41__num_exact_chunks msg v_BLOCKSIZE) : uint_size in + let '(blocks_out,ctr) := (f_fold (f_into_iter (Build_Range (@repr WORDSIZE32 0)n_blocks)) (blocks_out,ctr) (fun '(blocks_out,ctr) i => + let msg_block := (impl_41__get_exact_chunk msg v_BLOCKSIZE i) : t_Seq_t t_U8_t in + let key_block := (match f_branch (aes_ctr_key_block key nonce ctr nk nr key_schedule_length key_length iterations) with + | ControlFlow_Break residual => let hoist3 := (v_Break (f_from_residual residual)) : t_Never_t in + ControlFlow_Continue (never_to_any hoist3) + | ControlFlow_Continue val => ControlFlow_Continue val + end) : t_Block_t in + ControlFlow_Continue (let blocks_out := (impl_41__set_chunk blocks_out v_BLOCKSIZE i (xor_block (impl__Block__from_seq msg_block) key_block)) : t_Seq_t t_U8_t in + let ctr := (ctr.+(U32 (@repr WORDSIZE32 1))) : t_U32_t in + (blocks_out,ctr)))) : (t_Seq_t t_U8_t × t_U32_t) in + let last_block := (impl_41__get_remainder_chunk msg v_BLOCKSIZE) : t_Seq_t t_U8_t in + let last_block_len := (impl_41__len last_block) : uint_size in + let blocks_out := (if + last_block_len<>(@repr WORDSIZE32 0) + then + let last_block := (f_update_start impl__Block__new last_block) : t_Block_t in + let key_block := (match f_branch (aes_ctr_key_block key nonce ctr nk nr key_schedule_length key_length iterations) with + | ControlFlow_Break residual => let hoist4 := (v_Break (f_from_residual residual)) : t_Never_t in + ControlFlow_Continue (never_to_any hoist4) + | ControlFlow_Continue val => ControlFlow_Continue val + end) : t_Block_t in + ControlFlow_Continue (let blocks_out := (impl_41__set_chunk blocks_out v_BLOCKSIZE n_blocks (impl__Block__slice_range (xor_block last_block key_block) (Build_Range (@repr WORDSIZE32 0)last_block_len))) : t_Seq_t t_U8_t in + blocks_out) + else + ControlFlow_Continue blocks_out) : t_Seq_t t_U8_t in + ControlFlow_Continue (v_Ok blocks_out)). + +Definition aes128_decrypt (key : t_Key128_t) (nonce : t_AesNonce_t) (counter : t_U32_t) (ctxt : t_Seq_t t_U8_t) : t_Seq_t t_U8_t := + impl__unwrap (aes_counter_mode (impl_52__from_seq key) nonce counter ctxt v_KEY_LENGTH v_ROUNDS v_KEY_SCHEDULE_LENGTH v_KEY_LENGTH v_ITERATIONS). + +Definition aes128_encrypt (key : t_Key128_t) (nonce : t_AesNonce_t) (counter : t_U32_t) (msg : t_Seq_t t_U8_t) : t_Seq_t t_U8_t := + impl__unwrap (aes_counter_mode (impl_52__from_seq key) nonce counter msg v_KEY_LENGTH v_ROUNDS v_KEY_SCHEDULE_LENGTH v_KEY_LENGTH v_ITERATIONS). diff --git a/aes/proofs/ssprove/extraction/Hacspec_aes.v b/aes/proofs/ssprove/extraction/Hacspec_aes.v new file mode 100644 index 0000000..63d2104 --- /dev/null +++ b/aes/proofs/ssprove/extraction/Hacspec_aes.v @@ -0,0 +1,603 @@ +(* File automatically generated by Hacspec *) +Set Warnings "-notation-overridden,-ambiguous-paths". +From Crypt Require Import choice_type Package Prelude. +Import PackageNotation. +From extructures Require Import ord fset. +From mathcomp Require Import word_ssrZ word. +(* From Jasmin Require Import word. *) + +From Coq Require Import ZArith. +From Coq Require Import Strings.String. +Import List.ListNotations. +Open Scope list_scope. +Open Scope Z_scope. +Open Scope bool_scope. + +From Hacspec Require Import ChoiceEquality. +From Hacspec Require Import LocationUtility. +From Hacspec Require Import Hacspec_Lib_Comparable. +From Hacspec Require Import Hacspec_Lib_Pre. +From Hacspec Require Import Hacspec_Lib. + +Open Scope hacspec_scope. +Import choice.Choice.Exports. + +Obligation Tactic := (* try timeout 8 *) solve_ssprove_obligations. + +Require Import Hacspec_lib. +Export Hacspec_lib. + +(*Not implemented yet? todo(item)*) + +Equations v_BLOCKSIZE : both uint_size := + v_BLOCKSIZE := + solve_lift (ret_both (16 : uint_size)) : both uint_size. +Fail Next Obligation. + +Equations v_INVALID_KEY_EXPANSION_INDEX : both int8 := + v_INVALID_KEY_EXPANSION_INDEX := + solve_lift (ret_both (1 : int8)) : both int8. +Fail Next Obligation. + +Equations v_ITERATIONS : both uint_size := + v_ITERATIONS := + solve_lift (ret_both (40 : uint_size)) : both uint_size. +Fail Next Obligation. + +Equations v_IVSIZE : both uint_size := + v_IVSIZE := + solve_lift (ret_both (12 : uint_size)) : both uint_size. +Fail Next Obligation. + +Equations v_KEY_LENGTH : both uint_size := + v_KEY_LENGTH := + solve_lift (ret_both (4 : uint_size)) : both uint_size. +Fail Next Obligation. + +Equations v_KEY_SCHEDULE_LENGTH : both uint_size := + v_KEY_SCHEDULE_LENGTH := + solve_lift (ret_both (176 : uint_size)) : both uint_size. +Fail Next Obligation. + +Equations v_ROUNDS : both uint_size := + v_ROUNDS := + solve_lift (ret_both (10 : uint_size)) : both uint_size. +Fail Next Obligation. + +Notation "'t_AesNonce'" := (nseq int8 IVSIZE). +Definition AesNonce : both t_AesNonce -> both t_AesNonce := + id. + +Notation "'t_Block'" := (nseq int8 BLOCKSIZE). +Definition Block : both t_Block -> both t_Block := + id. + +Notation "'t_BlockResult'" := (t_Result t_Block int8). + +Notation "'t_Bytes144'" := (nseq int8 144). +Definition Bytes144 : both t_Bytes144 -> both t_Bytes144 := + id. + +Notation "'t_Bytes176'" := (nseq int8 KEY_SCHEDULE_LENGTH). +Definition Bytes176 : both t_Bytes176 -> both t_Bytes176 := + id. + +Notation "'t_Key128'" := (nseq int8 BLOCKSIZE). +Definition Key128 : both t_Key128 -> both t_Key128 := + id. + +Notation "'t_RCon'" := (nseq int8 15). +Definition RCon : both t_RCon -> both t_RCon := + id. + +Notation "'t_RoundKey'" := (nseq int8 BLOCKSIZE). +Definition RoundKey : both t_RoundKey -> both t_RoundKey := + id. + +Notation "'t_SBox'" := (nseq int8 256). +Definition SBox : both t_SBox -> both t_SBox := + id. + +Notation "'t_Word'" := (nseq int8 KEY_LENGTH). +Definition Word : both t_Word -> both t_Word := + id. + +Notation "'t_WordResult'" := (t_Result t_Word int8). + +Notation "'t_ByteSeqResult'" := (t_Result (t_Seq t_U8) int8). + +Equations add_round_key (state : both t_Block) (key : both t_RoundKey) : both t_Block := + add_round_key state key := + letb out := state in + letb out := f_fold (f_into_iter (Build_t_Range (f_start := ret_both (0 : uint_size)) (f_end := v_BLOCKSIZE))) out (fun out => fun i => + update_at_usize out i ((out.a[i]) .^ (key.a[i]))) in + solve_lift out : both t_Block. +Fail Next Obligation. + +Equations rotate_word (w : both t_Word) : both t_Word := + rotate_word w := + Word (array_from_list [solve_lift (w.a[(ret_both (1 : int32))]); + solve_lift (w.a[(ret_both (2 : int32))]); + solve_lift (w.a[(ret_both (3 : int32))]); + solve_lift (w.a[(ret_both (0 : int32))])]) : both t_Word. +Fail Next Obligation. + +Equations shift_row (i : both uint_size) (shift : both uint_size) (state : both t_Block) : both t_Block := + shift_row i shift state := + letb out := state in + letb out := update_at_usize out i (state.a[(i .+ ((ret_both (4 : uint_size)) .* (shift .% (ret_both (4 : uint_size)))))]) in + letb out := update_at_usize out (i .+ (ret_both (4 : uint_size))) (state.a[(i .+ ((ret_both (4 : uint_size)) .* ((shift .+ (ret_both (1 : uint_size))) .% (ret_both (4 : uint_size)))))]) in + letb out := update_at_usize out (i .+ (ret_both (8 : uint_size))) (state.a[(i .+ ((ret_both (4 : uint_size)) .* ((shift .+ (ret_both (2 : uint_size))) .% (ret_both (4 : uint_size)))))]) in + letb out := update_at_usize out (i .+ (ret_both (12 : uint_size))) (state.a[(i .+ ((ret_both (4 : uint_size)) .* ((shift .+ (ret_both (3 : uint_size))) .% (ret_both (4 : uint_size)))))]) in + solve_lift out : both t_Block. +Fail Next Obligation. + +Equations shift_rows (state : both t_Block) : both t_Block := + shift_rows state := + letb state := shift_row (ret_both (1 : uint_size)) (ret_both (1 : uint_size)) state in + letb state := shift_row (ret_both (2 : uint_size)) (ret_both (2 : uint_size)) state in + solve_lift (shift_row (ret_both (3 : uint_size)) (ret_both (3 : uint_size)) state) : both t_Block. +Fail Next Obligation. + +Equations xor_block (block : both t_Block) (key_block : both t_Block) : both t_Block := + xor_block block key_block := + letb out := block in + letb out := f_fold (f_into_iter (Build_t_Range (f_start := ret_both (0 : uint_size)) (f_end := v_BLOCKSIZE))) out (fun out => fun i => + update_at_usize out i ((out.a[i]) .^ (key_block.a[i]))) in + solve_lift out : both t_Block. +Fail Next Obligation. + +Equations v_RCON : both t_RCon := + v_RCON := + RCon (array_from_list [U8 (solve_lift (ret_both (141 : int8))); + U8 (solve_lift (ret_both (1 : int8))); + U8 (solve_lift (ret_both (2 : int8))); + U8 (solve_lift (ret_both (4 : int8))); + U8 (solve_lift (ret_both (8 : int8))); + U8 (solve_lift (ret_both (16 : int8))); + U8 (solve_lift (ret_both (32 : int8))); + U8 (solve_lift (ret_both (64 : int8))); + U8 (solve_lift (ret_both (128 : int8))); + U8 (solve_lift (ret_both (27 : int8))); + U8 (solve_lift (ret_both (54 : int8))); + U8 (solve_lift (ret_both (108 : int8))); + U8 (solve_lift (ret_both (216 : int8))); + U8 (solve_lift (ret_both (171 : int8))); + U8 (solve_lift (ret_both (77 : int8)))]) : both t_RCon. +Fail Next Obligation. + +Equations v_SBOX : both t_SBox := + v_SBOX := + SBox (array_from_list [U8 (solve_lift (ret_both (99 : int8))); + U8 (solve_lift (ret_both (124 : int8))); + U8 (solve_lift (ret_both (119 : int8))); + U8 (solve_lift (ret_both (123 : int8))); + U8 (solve_lift (ret_both (242 : int8))); + U8 (solve_lift (ret_both (107 : int8))); + U8 (solve_lift (ret_both (111 : int8))); + U8 (solve_lift (ret_both (197 : int8))); + U8 (solve_lift (ret_both (48 : int8))); + U8 (solve_lift (ret_both (1 : int8))); + U8 (solve_lift (ret_both (103 : int8))); + U8 (solve_lift (ret_both (43 : int8))); + U8 (solve_lift (ret_both (254 : int8))); + U8 (solve_lift (ret_both (215 : int8))); + U8 (solve_lift (ret_both (171 : int8))); + U8 (solve_lift (ret_both (118 : int8))); + U8 (solve_lift (ret_both (202 : int8))); + U8 (solve_lift (ret_both (130 : int8))); + U8 (solve_lift (ret_both (201 : int8))); + U8 (solve_lift (ret_both (125 : int8))); + U8 (solve_lift (ret_both (250 : int8))); + U8 (solve_lift (ret_both (89 : int8))); + U8 (solve_lift (ret_both (71 : int8))); + U8 (solve_lift (ret_both (240 : int8))); + U8 (solve_lift (ret_both (173 : int8))); + U8 (solve_lift (ret_both (212 : int8))); + U8 (solve_lift (ret_both (162 : int8))); + U8 (solve_lift (ret_both (175 : int8))); + U8 (solve_lift (ret_both (156 : int8))); + U8 (solve_lift (ret_both (164 : int8))); + U8 (solve_lift (ret_both (114 : int8))); + U8 (solve_lift (ret_both (192 : int8))); + U8 (solve_lift (ret_both (183 : int8))); + U8 (solve_lift (ret_both (253 : int8))); + U8 (solve_lift (ret_both (147 : int8))); + U8 (solve_lift (ret_both (38 : int8))); + U8 (solve_lift (ret_both (54 : int8))); + U8 (solve_lift (ret_both (63 : int8))); + U8 (solve_lift (ret_both (247 : int8))); + U8 (solve_lift (ret_both (204 : int8))); + U8 (solve_lift (ret_both (52 : int8))); + U8 (solve_lift (ret_both (165 : int8))); + U8 (solve_lift (ret_both (229 : int8))); + U8 (solve_lift (ret_both (241 : int8))); + U8 (solve_lift (ret_both (113 : int8))); + U8 (solve_lift (ret_both (216 : int8))); + U8 (solve_lift (ret_both (49 : int8))); + U8 (solve_lift (ret_both (21 : int8))); + U8 (solve_lift (ret_both (4 : int8))); + U8 (solve_lift (ret_both (199 : int8))); + U8 (solve_lift (ret_both (35 : int8))); + U8 (solve_lift (ret_both (195 : int8))); + U8 (solve_lift (ret_both (24 : int8))); + U8 (solve_lift (ret_both (150 : int8))); + U8 (solve_lift (ret_both (5 : int8))); + U8 (solve_lift (ret_both (154 : int8))); + U8 (solve_lift (ret_both (7 : int8))); + U8 (solve_lift (ret_both (18 : int8))); + U8 (solve_lift (ret_both (128 : int8))); + U8 (solve_lift (ret_both (226 : int8))); + U8 (solve_lift (ret_both (235 : int8))); + U8 (solve_lift (ret_both (39 : int8))); + U8 (solve_lift (ret_both (178 : int8))); + U8 (solve_lift (ret_both (117 : int8))); + U8 (solve_lift (ret_both (9 : int8))); + U8 (solve_lift (ret_both (131 : int8))); + U8 (solve_lift (ret_both (44 : int8))); + U8 (solve_lift (ret_both (26 : int8))); + U8 (solve_lift (ret_both (27 : int8))); + U8 (solve_lift (ret_both (110 : int8))); + U8 (solve_lift (ret_both (90 : int8))); + U8 (solve_lift (ret_both (160 : int8))); + U8 (solve_lift (ret_both (82 : int8))); + U8 (solve_lift (ret_both (59 : int8))); + U8 (solve_lift (ret_both (214 : int8))); + U8 (solve_lift (ret_both (179 : int8))); + U8 (solve_lift (ret_both (41 : int8))); + U8 (solve_lift (ret_both (227 : int8))); + U8 (solve_lift (ret_both (47 : int8))); + U8 (solve_lift (ret_both (132 : int8))); + U8 (solve_lift (ret_both (83 : int8))); + U8 (solve_lift (ret_both (209 : int8))); + U8 (solve_lift (ret_both (0 : int8))); + U8 (solve_lift (ret_both (237 : int8))); + U8 (solve_lift (ret_both (32 : int8))); + U8 (solve_lift (ret_both (252 : int8))); + U8 (solve_lift (ret_both (177 : int8))); + U8 (solve_lift (ret_both (91 : int8))); + U8 (solve_lift (ret_both (106 : int8))); + U8 (solve_lift (ret_both (203 : int8))); + U8 (solve_lift (ret_both (190 : int8))); + U8 (solve_lift (ret_both (57 : int8))); + U8 (solve_lift (ret_both (74 : int8))); + U8 (solve_lift (ret_both (76 : int8))); + U8 (solve_lift (ret_both (88 : int8))); + U8 (solve_lift (ret_both (207 : int8))); + U8 (solve_lift (ret_both (208 : int8))); + U8 (solve_lift (ret_both (239 : int8))); + U8 (solve_lift (ret_both (170 : int8))); + U8 (solve_lift (ret_both (251 : int8))); + U8 (solve_lift (ret_both (67 : int8))); + U8 (solve_lift (ret_both (77 : int8))); + U8 (solve_lift (ret_both (51 : int8))); + U8 (solve_lift (ret_both (133 : int8))); + U8 (solve_lift (ret_both (69 : int8))); + U8 (solve_lift (ret_both (249 : int8))); + U8 (solve_lift (ret_both (2 : int8))); + U8 (solve_lift (ret_both (127 : int8))); + U8 (solve_lift (ret_both (80 : int8))); + U8 (solve_lift (ret_both (60 : int8))); + U8 (solve_lift (ret_both (159 : int8))); + U8 (solve_lift (ret_both (168 : int8))); + U8 (solve_lift (ret_both (81 : int8))); + U8 (solve_lift (ret_both (163 : int8))); + U8 (solve_lift (ret_both (64 : int8))); + U8 (solve_lift (ret_both (143 : int8))); + U8 (solve_lift (ret_both (146 : int8))); + U8 (solve_lift (ret_both (157 : int8))); + U8 (solve_lift (ret_both (56 : int8))); + U8 (solve_lift (ret_both (245 : int8))); + U8 (solve_lift (ret_both (188 : int8))); + U8 (solve_lift (ret_both (182 : int8))); + U8 (solve_lift (ret_both (218 : int8))); + U8 (solve_lift (ret_both (33 : int8))); + U8 (solve_lift (ret_both (16 : int8))); + U8 (solve_lift (ret_both (255 : int8))); + U8 (solve_lift (ret_both (243 : int8))); + U8 (solve_lift (ret_both (210 : int8))); + U8 (solve_lift (ret_both (205 : int8))); + U8 (solve_lift (ret_both (12 : int8))); + U8 (solve_lift (ret_both (19 : int8))); + U8 (solve_lift (ret_both (236 : int8))); + U8 (solve_lift (ret_both (95 : int8))); + U8 (solve_lift (ret_both (151 : int8))); + U8 (solve_lift (ret_both (68 : int8))); + U8 (solve_lift (ret_both (23 : int8))); + U8 (solve_lift (ret_both (196 : int8))); + U8 (solve_lift (ret_both (167 : int8))); + U8 (solve_lift (ret_both (126 : int8))); + U8 (solve_lift (ret_both (61 : int8))); + U8 (solve_lift (ret_both (100 : int8))); + U8 (solve_lift (ret_both (93 : int8))); + U8 (solve_lift (ret_both (25 : int8))); + U8 (solve_lift (ret_both (115 : int8))); + U8 (solve_lift (ret_both (96 : int8))); + U8 (solve_lift (ret_both (129 : int8))); + U8 (solve_lift (ret_both (79 : int8))); + U8 (solve_lift (ret_both (220 : int8))); + U8 (solve_lift (ret_both (34 : int8))); + U8 (solve_lift (ret_both (42 : int8))); + U8 (solve_lift (ret_both (144 : int8))); + U8 (solve_lift (ret_both (136 : int8))); + U8 (solve_lift (ret_both (70 : int8))); + U8 (solve_lift (ret_both (238 : int8))); + U8 (solve_lift (ret_both (184 : int8))); + U8 (solve_lift (ret_both (20 : int8))); + U8 (solve_lift (ret_both (222 : int8))); + U8 (solve_lift (ret_both (94 : int8))); + U8 (solve_lift (ret_both (11 : int8))); + U8 (solve_lift (ret_both (219 : int8))); + U8 (solve_lift (ret_both (224 : int8))); + U8 (solve_lift (ret_both (50 : int8))); + U8 (solve_lift (ret_both (58 : int8))); + U8 (solve_lift (ret_both (10 : int8))); + U8 (solve_lift (ret_both (73 : int8))); + U8 (solve_lift (ret_both (6 : int8))); + U8 (solve_lift (ret_both (36 : int8))); + U8 (solve_lift (ret_both (92 : int8))); + U8 (solve_lift (ret_both (194 : int8))); + U8 (solve_lift (ret_both (211 : int8))); + U8 (solve_lift (ret_both (172 : int8))); + U8 (solve_lift (ret_both (98 : int8))); + U8 (solve_lift (ret_both (145 : int8))); + U8 (solve_lift (ret_both (149 : int8))); + U8 (solve_lift (ret_both (228 : int8))); + U8 (solve_lift (ret_both (121 : int8))); + U8 (solve_lift (ret_both (231 : int8))); + U8 (solve_lift (ret_both (200 : int8))); + U8 (solve_lift (ret_both (55 : int8))); + U8 (solve_lift (ret_both (109 : int8))); + U8 (solve_lift (ret_both (141 : int8))); + U8 (solve_lift (ret_both (213 : int8))); + U8 (solve_lift (ret_both (78 : int8))); + U8 (solve_lift (ret_both (169 : int8))); + U8 (solve_lift (ret_both (108 : int8))); + U8 (solve_lift (ret_both (86 : int8))); + U8 (solve_lift (ret_both (244 : int8))); + U8 (solve_lift (ret_both (234 : int8))); + U8 (solve_lift (ret_both (101 : int8))); + U8 (solve_lift (ret_both (122 : int8))); + U8 (solve_lift (ret_both (174 : int8))); + U8 (solve_lift (ret_both (8 : int8))); + U8 (solve_lift (ret_both (186 : int8))); + U8 (solve_lift (ret_both (120 : int8))); + U8 (solve_lift (ret_both (37 : int8))); + U8 (solve_lift (ret_both (46 : int8))); + U8 (solve_lift (ret_both (28 : int8))); + U8 (solve_lift (ret_both (166 : int8))); + U8 (solve_lift (ret_both (180 : int8))); + U8 (solve_lift (ret_both (198 : int8))); + U8 (solve_lift (ret_both (232 : int8))); + U8 (solve_lift (ret_both (221 : int8))); + U8 (solve_lift (ret_both (116 : int8))); + U8 (solve_lift (ret_both (31 : int8))); + U8 (solve_lift (ret_both (75 : int8))); + U8 (solve_lift (ret_both (189 : int8))); + U8 (solve_lift (ret_both (139 : int8))); + U8 (solve_lift (ret_both (138 : int8))); + U8 (solve_lift (ret_both (112 : int8))); + U8 (solve_lift (ret_both (62 : int8))); + U8 (solve_lift (ret_both (181 : int8))); + U8 (solve_lift (ret_both (102 : int8))); + U8 (solve_lift (ret_both (72 : int8))); + U8 (solve_lift (ret_both (3 : int8))); + U8 (solve_lift (ret_both (246 : int8))); + U8 (solve_lift (ret_both (14 : int8))); + U8 (solve_lift (ret_both (97 : int8))); + U8 (solve_lift (ret_both (53 : int8))); + U8 (solve_lift (ret_both (87 : int8))); + U8 (solve_lift (ret_both (185 : int8))); + U8 (solve_lift (ret_both (134 : int8))); + U8 (solve_lift (ret_both (193 : int8))); + U8 (solve_lift (ret_both (29 : int8))); + U8 (solve_lift (ret_both (158 : int8))); + U8 (solve_lift (ret_both (225 : int8))); + U8 (solve_lift (ret_both (248 : int8))); + U8 (solve_lift (ret_both (152 : int8))); + U8 (solve_lift (ret_both (17 : int8))); + U8 (solve_lift (ret_both (105 : int8))); + U8 (solve_lift (ret_both (217 : int8))); + U8 (solve_lift (ret_both (142 : int8))); + U8 (solve_lift (ret_both (148 : int8))); + U8 (solve_lift (ret_both (155 : int8))); + U8 (solve_lift (ret_both (30 : int8))); + U8 (solve_lift (ret_both (135 : int8))); + U8 (solve_lift (ret_both (233 : int8))); + U8 (solve_lift (ret_both (206 : int8))); + U8 (solve_lift (ret_both (85 : int8))); + U8 (solve_lift (ret_both (40 : int8))); + U8 (solve_lift (ret_both (223 : int8))); + U8 (solve_lift (ret_both (140 : int8))); + U8 (solve_lift (ret_both (161 : int8))); + U8 (solve_lift (ret_both (137 : int8))); + U8 (solve_lift (ret_both (13 : int8))); + U8 (solve_lift (ret_both (191 : int8))); + U8 (solve_lift (ret_both (230 : int8))); + U8 (solve_lift (ret_both (66 : int8))); + U8 (solve_lift (ret_both (104 : int8))); + U8 (solve_lift (ret_both (65 : int8))); + U8 (solve_lift (ret_both (153 : int8))); + U8 (solve_lift (ret_both (45 : int8))); + U8 (solve_lift (ret_both (15 : int8))); + U8 (solve_lift (ret_both (176 : int8))); + U8 (solve_lift (ret_both (84 : int8))); + U8 (solve_lift (ret_both (187 : int8))); + U8 (solve_lift (ret_both (22 : int8)))]) : both t_SBox. +Fail Next Obligation. + +Equations sub_bytes (state : both t_Block) : both t_Block := + sub_bytes state := + letb st := state in + letb st := f_fold (f_into_iter (Build_t_Range (f_start := ret_both (0 : uint_size)) (f_end := v_BLOCKSIZE))) st (fun st => fun i => + update_at_usize st i (v_SBOX.a[(impl__U8__declassify (state.a[i]))])) in + solve_lift st : both t_Block. +Fail Next Obligation. + +Equations aes_enc_last (state : both t_Block) (round_key : both t_RoundKey) : both t_Block := + aes_enc_last state round_key := + letb state := sub_bytes state in + letb state := shift_rows state in + solve_lift (add_round_key state round_key) : both t_Block. +Fail Next Obligation. + +Equations xtime (x : both t_U8) : both t_U8 := + xtime x := + letb x1 := x shift_left (ret_both (1 : uint_size)) in + letb x7 := x shift_right (ret_both (7 : uint_size)) in + letb x71 := x7 .& (U8 (ret_both (1 : int8))) in + letb x711b := x71 .* (U8 (ret_both (27 : int8))) in + solve_lift (x1 .^ x711b) : both t_U8. +Fail Next Obligation. + +Equations mix_column (c : both uint_size) (state : both t_Block) : both t_Block := + mix_column c state := + letb i0 := (ret_both (4 : uint_size)) .* c in + letb s0 := state.a[i0] in + letb s1 := state.a[(i0 .+ (ret_both (1 : uint_size)))] in + letb s2 := state.a[(i0 .+ (ret_both (2 : uint_size)))] in + letb s3 := state.a[(i0 .+ (ret_both (3 : uint_size)))] in + letb st := state in + letb tmp := ((s0 .^ s1) .^ s2) .^ s3 in + letb st := update_at_usize st i0 ((s0 .^ tmp) .^ (xtime (s0 .^ s1))) in + letb st := update_at_usize st (i0 .+ (ret_both (1 : uint_size))) ((s1 .^ tmp) .^ (xtime (s1 .^ s2))) in + letb st := update_at_usize st (i0 .+ (ret_both (2 : uint_size))) ((s2 .^ tmp) .^ (xtime (s2 .^ s3))) in + letb st := update_at_usize st (i0 .+ (ret_both (3 : uint_size))) ((s3 .^ tmp) .^ (xtime (s3 .^ s0))) in + solve_lift st : both t_Block. +Fail Next Obligation. + +Equations mix_columns (state : both t_Block) : both t_Block := + mix_columns state := + letb state := mix_column (ret_both (0 : uint_size)) state in + letb state := mix_column (ret_both (1 : uint_size)) state in + letb state := mix_column (ret_both (2 : uint_size)) state in + solve_lift (mix_column (ret_both (3 : uint_size)) state) : both t_Block. +Fail Next Obligation. + +Equations aes_enc (state : both t_Block) (round_key : both t_RoundKey) : both t_Block := + aes_enc state round_key := + letb state := sub_bytes state in + letb state := shift_rows state in + letb state := mix_columns state in + solve_lift (add_round_key state round_key) : both t_Block. +Fail Next Obligation. + +Equations rounds_aes (state : both t_Block) (key : both (t_Seq t_U8)) : both t_Block := + rounds_aes state key := + letb out := state in + letb out := f_fold (f_into_iter (Build_t_Range (f_start := ret_both (0 : uint_size)) (f_end := impl_41__num_chunks key v_BLOCKSIZE))) out (fun out => fun i => + letb '(_,key_block) := impl_41__get_chunk key v_BLOCKSIZE i in + letb out := aes_enc out (impl__RoundKey__from_seq key_block) in + out) in + solve_lift out : both t_Block. +Fail Next Obligation. + +Equations block_cipher_aes (input : both t_Block) (key : both (t_Seq t_U8)) (nr : both uint_size) : both t_Block := + block_cipher_aes input key nr := + letb k0 := impl__RoundKey__from_slice_range key (Build_t_Range (f_start := ret_both (0 : uint_size)) (f_end := ret_both (16 : uint_size))) in + letb k := impl_41__from_slice_range key (Build_t_Range (f_start := ret_both (16 : uint_size)) (f_end := nr .* (ret_both (16 : uint_size)))) in + letb kn := impl__RoundKey__from_slice key (nr .* (ret_both (16 : uint_size))) (ret_both (16 : uint_size)) in + letb state := add_round_key input k0 in + letb state := rounds_aes state k in + solve_lift (aes_enc_last state kn) : both t_Block. +Fail Next Obligation. + +Equations slice_word (w : both t_Word) : both t_Word := + slice_word w := + Word (array_from_list [solve_lift (v_SBOX.a[(declassify_usize_from_U8 (w.a[(ret_both (0 : int32))]))]); + solve_lift (v_SBOX.a[(declassify_usize_from_U8 (w.a[(ret_both (1 : int32))]))]); + solve_lift (v_SBOX.a[(declassify_usize_from_U8 (w.a[(ret_both (2 : int32))]))]); + solve_lift (v_SBOX.a[(declassify_usize_from_U8 (w.a[(ret_both (3 : int32))]))])]) : both t_Word. +Fail Next Obligation. + +Equations aes_keygen_assist (w : both t_Word) (rcon : both t_U8) : both t_Word := + aes_keygen_assist w rcon := + letb k := rotate_word w in + letb k := slice_word k in + letb k := update_at k (ret_both (0 : int32)) ((k.a[(ret_both (0 : int32))]) .^ rcon) in + solve_lift k : both t_Word. +Fail Next Obligation. + +Equations key_expansion_word (w0 : both t_Word) (w1 : both t_Word) (i : both uint_size) (nk : both uint_size) (nr : both uint_size) : both (t_Result t_Word int8) := + key_expansion_word w0 w1 i nk nr := + letb k := w1 in + letb result := v_Err v_INVALID_KEY_EXPANSION_INDEX in + letb '(k,result) := ifb i <.? ((ret_both (4 : uint_size)) .* (nr .+ (ret_both (1 : uint_size)))) + then letb k := ifb (i .% nk) =.? (ret_both (0 : uint_size)) + then letb k := aes_keygen_assist k (v_RCON.a[(i ./ nk)]) in + k + else ifb andb (nk >.? (ret_both (6 : uint_size))) ((i .% nk) =.? (ret_both (4 : uint_size))) + then letb k := slice_word k in + k + else k in + letb k := f_fold (f_into_iter (Build_t_Range (f_start := ret_both (0 : int32)) (f_end := ret_both (4 : int32)))) k (fun k => fun i => + update_at k i ((k.a[i]) .^ (w0.a[i]))) in + letb result := v_Ok k in + prod_b (k,result) + else prod_b (k,result) in + solve_lift result : both (t_Result t_Word int8). +Fail Next Obligation. + +Equations key_expansion_aes (key : both (t_Seq t_U8)) (nk : both uint_size) (nr : both uint_size) (key_schedule_length : both uint_size) (key_length : both uint_size) (iterations : both uint_size) : both (t_Result (t_Seq t_U8) int8) := + key_expansion_aes key nk nr key_schedule_length key_length iterations := + letb key_ex := impl_41__new key_schedule_length in + letb key_ex := f_update_start key_ex key in + letb word_size := key_length in + letb key_ex := f_fold (f_into_iter (Build_t_Range (f_start := ret_both (0 : uint_size)) (f_end := iterations))) key_ex (fun key_ex => fun j => + letb i := j .+ word_size in + letm[choice_typeMonad.result_bind_code int8] word := impl__map_err (key_expansion_word (impl__Word__from_slice key_ex ((ret_both (4 : uint_size)) .* (i .- word_size)) (ret_both (4 : uint_size))) (impl__Word__from_slice key_ex (((ret_both (4 : uint_size)) .* i) .- (ret_both (4 : uint_size))) (ret_both (4 : uint_size))) i nk nr) f_from in + Result_Ok (letb key_ex := f_update key_ex ((ret_both (4 : uint_size)) .* i) word in + key_ex)) in + solve_lift (v_Ok key_ex) : both (t_Result (t_Seq t_U8) int8). +Fail Next Obligation. + +Equations aes_encrypt_block (k : both (t_Seq t_U8)) (input : both t_Block) (nk : both uint_size) (nr : both uint_size) (key_schedule_length : both uint_size) (key_length : both uint_size) (iterations : both uint_size) : both (t_Result t_Block int8) := + aes_encrypt_block k input nk nr key_schedule_length key_length iterations := + solve_lift (run (letm[choice_typeMonad.result_bind_code int8] key_ex := impl__map_err (key_expansion_aes k nk nr key_schedule_length key_length iterations) f_from in + Result_Ok (v_Ok (block_cipher_aes input key_ex nr)))) : both (t_Result t_Block int8). +Fail Next Obligation. + +Equations aes128_encrypt_block (k : both t_Key128) (input : both t_Block) : both t_Block := + aes128_encrypt_block k input := + solve_lift (impl__unwrap (aes_encrypt_block (impl_52__from_seq k) input v_KEY_LENGTH v_ROUNDS v_KEY_SCHEDULE_LENGTH v_KEY_LENGTH v_ITERATIONS)) : both t_Block. +Fail Next Obligation. + +Equations aes_ctr_key_block (k : both (t_Seq t_U8)) (n : both t_AesNonce) (c : both t_U32) (nk : both uint_size) (nr : both uint_size) (key_schedule_length : both uint_size) (key_length : both uint_size) (iterations : both uint_size) : both (t_Result t_Block int8) := + aes_ctr_key_block k n c nk nr key_schedule_length key_length iterations := + letb input := impl__Block__new (ret_both (tt : 'unit)) in + letb input := f_update input (ret_both (0 : uint_size)) n in + letb input := f_update input (ret_both (12 : uint_size)) (v_U32_to_be_bytes c) in + solve_lift (aes_encrypt_block k input nk nr key_schedule_length key_length iterations) : both (t_Result t_Block int8). +Fail Next Obligation. + +Equations aes_counter_mode (key : both (t_Seq t_U8)) (nonce : both t_AesNonce) (counter : both t_U32) (msg : both (t_Seq t_U8)) (nk : both uint_size) (nr : both uint_size) (key_schedule_length : both uint_size) (key_length : both uint_size) (iterations : both uint_size) : both (t_Result (t_Seq t_U8) int8) := + aes_counter_mode key nonce counter msg nk nr key_schedule_length key_length iterations := + solve_lift (run (letb ctr := counter in + letb blocks_out := impl_41__new (impl_41__len msg) in + letb n_blocks := impl_41__num_exact_chunks msg v_BLOCKSIZE in + letb '(blocks_out,ctr) := f_fold (f_into_iter (Build_t_Range (f_start := ret_both (0 : uint_size)) (f_end := n_blocks))) (prod_b (blocks_out,ctr)) (fun '(blocks_out,ctr) => fun i => + letb msg_block := impl_41__get_exact_chunk msg v_BLOCKSIZE i in + letm[choice_typeMonad.result_bind_code int8] key_block := impl__map_err (aes_ctr_key_block key nonce ctr nk nr key_schedule_length key_length iterations) f_from in + Result_Ok (letb blocks_out := impl_41__set_chunk blocks_out v_BLOCKSIZE i (xor_block (impl__Block__from_seq msg_block) key_block) in + letb ctr := ctr .+ (U32 (ret_both (1 : int32))) in + prod_b (blocks_out,ctr))) in + letb last_block := impl_41__get_remainder_chunk msg v_BLOCKSIZE in + letb last_block_len := impl_41__len last_block in + letm[choice_typeMonad.result_bind_code int8] blocks_out := ifb last_block_len <> (ret_both (0 : uint_size)) + then letb last_block := f_update_start (impl__Block__new (ret_both (tt : 'unit))) last_block in + letm[choice_typeMonad.result_bind_code int8] key_block := impl__map_err (aes_ctr_key_block key nonce ctr nk nr key_schedule_length key_length iterations) f_from in + Result_Ok (letb blocks_out := impl_41__set_chunk blocks_out v_BLOCKSIZE n_blocks (impl__Block__slice_range (xor_block last_block key_block) (Build_t_Range (f_start := ret_both (0 : uint_size)) (f_end := last_block_len))) in + blocks_out) + else Result_Ok blocks_out in + Result_Ok (v_Ok blocks_out))) : both (t_Result (t_Seq t_U8) int8). +Fail Next Obligation. + +Equations aes128_decrypt (key : both t_Key128) (nonce : both t_AesNonce) (counter : both t_U32) (ctxt : both (t_Seq t_U8)) : both (t_Seq t_U8) := + aes128_decrypt key nonce counter ctxt := + solve_lift (impl__unwrap (aes_counter_mode (impl_52__from_seq key) nonce counter ctxt v_KEY_LENGTH v_ROUNDS v_KEY_SCHEDULE_LENGTH v_KEY_LENGTH v_ITERATIONS)) : both (t_Seq t_U8). +Fail Next Obligation. + +Equations aes128_encrypt (key : both t_Key128) (nonce : both t_AesNonce) (counter : both t_U32) (msg : both (t_Seq t_U8)) : both (t_Seq t_U8) := + aes128_encrypt key nonce counter msg := + solve_lift (impl__unwrap (aes_counter_mode (impl_52__from_seq key) nonce counter msg v_KEY_LENGTH v_ROUNDS v_KEY_SCHEDULE_LENGTH v_KEY_LENGTH v_ITERATIONS)) : both (t_Seq t_U8). +Fail Next Obligation. diff --git a/aes_jazz/proofs/coq/extraction/Hacspec_aes_jazz.v b/aes_jazz/proofs/coq/extraction/Hacspec_aes_jazz.v new file mode 100644 index 0000000..12fa93a --- /dev/null +++ b/aes_jazz/proofs/coq/extraction/Hacspec_aes_jazz.v @@ -0,0 +1,417 @@ +(* File automatically generated by Hacspec *) +From Hacspec Require Import Hacspec_Lib. +From Coq Require Import ZArith. +Import List.ListNotations. +Require Import Coq.Strings.String. +Open Scope Z_scope. +Open Scope bool_scope. +Open Scope hacspec_scope. + +Require Import Hacspec_lib. +Export Hacspec_lib. + +(*Not implemented yet? todo(item)*) + +Definition v_RCON : nseq t_u8 TODO: Int.to_string length := + array_from_list [(Int8.repr 141); + (Int8.repr 1); + (Int8.repr 2); + (Int8.repr 4); + (Int8.repr 8); + (Int8.repr 16); + (Int8.repr 32); + (Int8.repr 64); + (Int8.repr 128); + (Int8.repr 27); + (Int8.repr 54); + (Int8.repr 108); + (Int8.repr 216); + (Int8.repr 171); + (Int8.repr 77)]. + +Definition v_SBOX : nseq t_u8 TODO: Int.to_string length := + array_from_list [(Int8.repr 99); + (Int8.repr 124); + (Int8.repr 119); + (Int8.repr 123); + (Int8.repr 242); + (Int8.repr 107); + (Int8.repr 111); + (Int8.repr 197); + (Int8.repr 48); + (Int8.repr 1); + (Int8.repr 103); + (Int8.repr 43); + (Int8.repr 254); + (Int8.repr 215); + (Int8.repr 171); + (Int8.repr 118); + (Int8.repr 202); + (Int8.repr 130); + (Int8.repr 201); + (Int8.repr 125); + (Int8.repr 250); + (Int8.repr 89); + (Int8.repr 71); + (Int8.repr 240); + (Int8.repr 173); + (Int8.repr 212); + (Int8.repr 162); + (Int8.repr 175); + (Int8.repr 156); + (Int8.repr 164); + (Int8.repr 114); + (Int8.repr 192); + (Int8.repr 183); + (Int8.repr 253); + (Int8.repr 147); + (Int8.repr 38); + (Int8.repr 54); + (Int8.repr 63); + (Int8.repr 247); + (Int8.repr 204); + (Int8.repr 52); + (Int8.repr 165); + (Int8.repr 229); + (Int8.repr 241); + (Int8.repr 113); + (Int8.repr 216); + (Int8.repr 49); + (Int8.repr 21); + (Int8.repr 4); + (Int8.repr 199); + (Int8.repr 35); + (Int8.repr 195); + (Int8.repr 24); + (Int8.repr 150); + (Int8.repr 5); + (Int8.repr 154); + (Int8.repr 7); + (Int8.repr 18); + (Int8.repr 128); + (Int8.repr 226); + (Int8.repr 235); + (Int8.repr 39); + (Int8.repr 178); + (Int8.repr 117); + (Int8.repr 9); + (Int8.repr 131); + (Int8.repr 44); + (Int8.repr 26); + (Int8.repr 27); + (Int8.repr 110); + (Int8.repr 90); + (Int8.repr 160); + (Int8.repr 82); + (Int8.repr 59); + (Int8.repr 214); + (Int8.repr 179); + (Int8.repr 41); + (Int8.repr 227); + (Int8.repr 47); + (Int8.repr 132); + (Int8.repr 83); + (Int8.repr 209); + (Int8.repr 0); + (Int8.repr 237); + (Int8.repr 32); + (Int8.repr 252); + (Int8.repr 177); + (Int8.repr 91); + (Int8.repr 106); + (Int8.repr 203); + (Int8.repr 190); + (Int8.repr 57); + (Int8.repr 74); + (Int8.repr 76); + (Int8.repr 88); + (Int8.repr 207); + (Int8.repr 208); + (Int8.repr 239); + (Int8.repr 170); + (Int8.repr 251); + (Int8.repr 67); + (Int8.repr 77); + (Int8.repr 51); + (Int8.repr 133); + (Int8.repr 69); + (Int8.repr 249); + (Int8.repr 2); + (Int8.repr 127); + (Int8.repr 80); + (Int8.repr 60); + (Int8.repr 159); + (Int8.repr 168); + (Int8.repr 81); + (Int8.repr 163); + (Int8.repr 64); + (Int8.repr 143); + (Int8.repr 146); + (Int8.repr 157); + (Int8.repr 56); + (Int8.repr 245); + (Int8.repr 188); + (Int8.repr 182); + (Int8.repr 218); + (Int8.repr 33); + (Int8.repr 16); + (Int8.repr 255); + (Int8.repr 243); + (Int8.repr 210); + (Int8.repr 205); + (Int8.repr 12); + (Int8.repr 19); + (Int8.repr 236); + (Int8.repr 95); + (Int8.repr 151); + (Int8.repr 68); + (Int8.repr 23); + (Int8.repr 196); + (Int8.repr 167); + (Int8.repr 126); + (Int8.repr 61); + (Int8.repr 100); + (Int8.repr 93); + (Int8.repr 25); + (Int8.repr 115); + (Int8.repr 96); + (Int8.repr 129); + (Int8.repr 79); + (Int8.repr 220); + (Int8.repr 34); + (Int8.repr 42); + (Int8.repr 144); + (Int8.repr 136); + (Int8.repr 70); + (Int8.repr 238); + (Int8.repr 184); + (Int8.repr 20); + (Int8.repr 222); + (Int8.repr 94); + (Int8.repr 11); + (Int8.repr 219); + (Int8.repr 224); + (Int8.repr 50); + (Int8.repr 58); + (Int8.repr 10); + (Int8.repr 73); + (Int8.repr 6); + (Int8.repr 36); + (Int8.repr 92); + (Int8.repr 194); + (Int8.repr 211); + (Int8.repr 172); + (Int8.repr 98); + (Int8.repr 145); + (Int8.repr 149); + (Int8.repr 228); + (Int8.repr 121); + (Int8.repr 231); + (Int8.repr 200); + (Int8.repr 55); + (Int8.repr 109); + (Int8.repr 141); + (Int8.repr 213); + (Int8.repr 78); + (Int8.repr 169); + (Int8.repr 108); + (Int8.repr 86); + (Int8.repr 244); + (Int8.repr 234); + (Int8.repr 101); + (Int8.repr 122); + (Int8.repr 174); + (Int8.repr 8); + (Int8.repr 186); + (Int8.repr 120); + (Int8.repr 37); + (Int8.repr 46); + (Int8.repr 28); + (Int8.repr 166); + (Int8.repr 180); + (Int8.repr 198); + (Int8.repr 232); + (Int8.repr 221); + (Int8.repr 116); + (Int8.repr 31); + (Int8.repr 75); + (Int8.repr 189); + (Int8.repr 139); + (Int8.repr 138); + (Int8.repr 112); + (Int8.repr 62); + (Int8.repr 181); + (Int8.repr 102); + (Int8.repr 72); + (Int8.repr 3); + (Int8.repr 246); + (Int8.repr 14); + (Int8.repr 97); + (Int8.repr 53); + (Int8.repr 87); + (Int8.repr 185); + (Int8.repr 134); + (Int8.repr 193); + (Int8.repr 29); + (Int8.repr 158); + (Int8.repr 225); + (Int8.repr 248); + (Int8.repr 152); + (Int8.repr 17); + (Int8.repr 105); + (Int8.repr 217); + (Int8.repr 142); + (Int8.repr 148); + (Int8.repr 155); + (Int8.repr 30); + (Int8.repr 135); + (Int8.repr 233); + (Int8.repr 206); + (Int8.repr 85); + (Int8.repr 40); + (Int8.repr 223); + (Int8.repr 140); + (Int8.repr 161); + (Int8.repr 137); + (Int8.repr 13); + (Int8.repr 191); + (Int8.repr 230); + (Int8.repr 66); + (Int8.repr 104); + (Int8.repr 65); + (Int8.repr 153); + (Int8.repr 45); + (Int8.repr 15); + (Int8.repr 176); + (Int8.repr 84); + (Int8.repr 187); + (Int8.repr 22)]. + +Definition index_u32 (s : t_u128) (i : t_usize) : t_u32 := + cast ((s shift_right (i.*(Int32.repr 32))).%((Int128.repr 1) shift_left (Int32.repr 32)) : t_u128) : t_u32. + +Definition index_u8 (s : t_u32) (i : t_usize) : t_u8 := + cast ((s shift_right (i.*(Int32.repr 8))).%((Int32.repr 1) shift_left (Int32.repr 8)) : t_u32) : t_u8. + +Definition matrix_index (s : t_u128) (i : t_usize) (j : t_usize) : t_u8 := + index_u8 (index_u32 (s : t_u128) (j : t_usize) : t_u32) (i : t_usize) : t_u8. + +Definition rebuild_u128 (s0 : t_u32) (s1 : t_u32) (s2 : t_u32) (s3 : t_u32) : t_u128 := + (cast (s0 : t_u32) : t_u128).|(((cast (s1 : t_u32) : t_u128) shift_left (Int32.repr 32)).|(((cast (s2 : t_u32) : t_u128) shift_left (Int32.repr 64)).|((cast (s3 : t_u32) : t_u128) shift_left (Int32.repr 96)))). + +Definition rebuild_u32 (s0 : t_u8) (s1 : t_u8) (s2 : t_u8) (s3 : t_u8) : t_u32 := + (cast (s0 : t_u8) : t_u32).|(((cast (s1 : t_u8) : t_u32) shift_left (Int32.repr 8)).|(((cast (s2 : t_u8) : t_u32) shift_left (Int32.repr 16)).|((cast (s3 : t_u8) : t_u32) shift_left (Int32.repr 24)))). + +Definition rotword (v : t_u32) : t_u32 := + rebuild_u32 (index_u8 (v : t_u32) ((Int32.repr 1) : t_usize) : t_u8) (index_u8 (v : t_u32) ((Int32.repr 2) : t_usize) : t_u8) (index_u8 (v : t_u32) ((Int32.repr 3) : t_usize) : t_u8) (index_u8 (v : t_u32) ((Int32.repr 0) : t_usize) : t_u8) : t_u32. + +Definition shiftrows (s : t_u128) : t_u128 := + rebuild_u128 (rebuild_u32 (matrix_index (s : t_u128) ((Int32.repr 0) : t_usize) ((Int32.repr 0) : t_usize) : t_u8) (matrix_index (s : t_u128) ((Int32.repr 1) : t_usize) ((Int32.repr 1) : t_usize) : t_u8) (matrix_index (s : t_u128) ((Int32.repr 2) : t_usize) ((Int32.repr 2) : t_usize) : t_u8) (matrix_index (s : t_u128) ((Int32.repr 3) : t_usize) ((Int32.repr 3) : t_usize) : t_u8) : t_u32) (rebuild_u32 (matrix_index (s : t_u128) ((Int32.repr 0) : t_usize) ((Int32.repr 1) : t_usize) : t_u8) (matrix_index (s : t_u128) ((Int32.repr 1) : t_usize) ((Int32.repr 2) : t_usize) : t_u8) (matrix_index (s : t_u128) ((Int32.repr 2) : t_usize) ((Int32.repr 3) : t_usize) : t_u8) (matrix_index (s : t_u128) ((Int32.repr 3) : t_usize) ((Int32.repr 0) : t_usize) : t_u8) : t_u32) (rebuild_u32 (matrix_index (s : t_u128) ((Int32.repr 0) : t_usize) ((Int32.repr 2) : t_usize) : t_u8) (matrix_index (s : t_u128) ((Int32.repr 1) : t_usize) ((Int32.repr 3) : t_usize) : t_u8) (matrix_index (s : t_u128) ((Int32.repr 2) : t_usize) ((Int32.repr 0) : t_usize) : t_u8) (matrix_index (s : t_u128) ((Int32.repr 3) : t_usize) ((Int32.repr 1) : t_usize) : t_u8) : t_u32) (rebuild_u32 (matrix_index (s : t_u128) ((Int32.repr 0) : t_usize) ((Int32.repr 3) : t_usize) : t_u8) (matrix_index (s : t_u128) ((Int32.repr 1) : t_usize) ((Int32.repr 0) : t_usize) : t_u8) (matrix_index (s : t_u128) ((Int32.repr 2) : t_usize) ((Int32.repr 1) : t_usize) : t_u8) (matrix_index (s : t_u128) ((Int32.repr 3) : t_usize) ((Int32.repr 2) : t_usize) : t_u8) : t_u32) : t_u128. + +Definition subword (v : t_u32) : t_u32 := + rebuild_u32 (v_SBOX.[(cast (index_u8 (v : t_u32) ((Int32.repr 0) : t_usize) : t_u8) : t_usize)] : t_u8) (v_SBOX.[(cast (index_u8 (v : t_u32) ((Int32.repr 1) : t_usize) : t_u8) : t_usize)] : t_u8) (v_SBOX.[(cast (index_u8 (v : t_u32) ((Int32.repr 2) : t_usize) : t_u8) : t_usize)] : t_u8) (v_SBOX.[(cast (index_u8 (v : t_u32) ((Int32.repr 3) : t_usize) : t_u8) : t_usize)] : t_u8) : t_u32. + +Definition aeskeygenassist (v1 : t_u128) (v2 : t_u8) : t_u128 := + let x1 := index_u32 (v1 : t_u128) ((Int32.repr 1) : t_usize) : t_u32 : t_u32 in + let x3 := index_u32 (v1 : t_u128) ((Int32.repr 3) : t_usize) : t_u32 : t_u32 in + let y0 := subword (x1 : t_u32) : t_u32 : t_u32 in + let y1 := (rotword (y0 : t_u32) : t_u32).^(cast (v2 : t_u8) : t_u32) : t_u32 in + let y2 := subword (x3 : t_u32) : t_u32 : t_u32 in + let y3 := (rotword (y2 : t_u32) : t_u32).^(cast (v2 : t_u8) : t_u32) : t_u32 in + rebuild_u128 (y0 : t_u32) (y1 : t_u32) (y2 : t_u32) (y3 : t_u32) : t_u128. + +Definition subbytes (s : t_u128) : t_u128 := + rebuild_u128 (subword (index_u32 (s : t_u128) ((Int32.repr 0) : t_usize) : t_u32) : t_u32) (subword (index_u32 (s : t_u128) ((Int32.repr 1) : t_usize) : t_u32) : t_u32) (subword (index_u32 (s : t_u128) ((Int32.repr 2) : t_usize) : t_u32) : t_u32) (subword (index_u32 (s : t_u128) ((Int32.repr 3) : t_usize) : t_u32) : t_u32) : t_u128. + +Definition aesenclast (state : t_u128) (rkey : t_u128) : t_u128 := + let state := shiftrows (state : t_u128) : t_u128 : t_u128 in + let state := subbytes (state : t_u128) : t_u128 : t_u128 in + state.^rkey. + +Definition vpshufd1 (s : t_u128) (o : t_u8) (i : t_usize) : t_u32 := + index_u32 (s shift_right ((Int32.repr 32).*(cast ((o shift_right ((Int32.repr 2).*i)).%(Int8.repr 4) : t_u8) : t_usize)) : t_u128) ((Int32.repr 0) : t_usize) : t_u32. + +Definition vpshufd (s : t_u128) (o : t_u8) : t_u128 := + let d1 := vpshufd1 (s : t_u128) (o : t_u8) ((Int32.repr 0) : t_usize) : t_u32 : t_u32 in + let d2 := vpshufd1 (s : t_u128) (o : t_u8) ((Int32.repr 1) : t_usize) : t_u32 : t_u32 in + let d3 := vpshufd1 (s : t_u128) (o : t_u8) ((Int32.repr 2) : t_usize) : t_u32 : t_u32 in + let d4 := vpshufd1 (s : t_u128) (o : t_u8) ((Int32.repr 3) : t_usize) : t_u32 : t_u32 in + rebuild_u128 (d1 : t_u32) (d2 : t_u32) (d3 : t_u32) (d4 : t_u32) : t_u128. + +Definition vshufps (s1 : t_u128) (s2 : t_u128) (o : t_u8) : t_u128 := + let d1 := vpshufd1 (s1 : t_u128) (o : t_u8) ((Int32.repr 0) : t_usize) : t_u32 : t_u32 in + let d2 := vpshufd1 (s1 : t_u128) (o : t_u8) ((Int32.repr 1) : t_usize) : t_u32 : t_u32 in + let d3 := vpshufd1 (s2 : t_u128) (o : t_u8) ((Int32.repr 2) : t_usize) : t_u32 : t_u32 in + let d4 := vpshufd1 (s2 : t_u128) (o : t_u8) ((Int32.repr 3) : t_usize) : t_u32 : t_u32 in + rebuild_u128 (d1 : t_u32) (d2 : t_u32) (d3 : t_u32) (d4 : t_u32) : t_u128. + +Definition key_combine (rkey : t_u128) (temp1 : t_u128) (temp2 : t_u128) : t_u128 * t_u128 := + let temp1 := vpshufd (temp1 : t_u128) ((Int8.repr 255) : t_u8) : t_u128 : t_u128 in + let temp2 := vshufps (temp2 : t_u128) (rkey : t_u128) ((Int8.repr 16) : t_u8) : t_u128 : t_u128 in + let rkey := rkey.^temp2 : t_u128 in + let temp2 := vshufps (temp2 : t_u128) (rkey : t_u128) ((Int8.repr 140) : t_u8) : t_u128 : t_u128 in + let rkey := rkey.^temp2 : t_u128 in + let rkey := rkey.^temp1 : t_u128 in + (rkey,temp2). + +Definition key_expand (rcon : t_u8) (rkey : t_u128) (temp2 : t_u128) : t_u128 * t_u128 := + let temp1 := aeskeygenassist (rkey : t_u128) (rcon : t_u8) : t_u128 : t_u128 in + key_combine (rkey : t_u128) (temp1 : t_u128) (temp2 : t_u128) : (t_u128 * t_u128). + +Definition xtime (x : t_u8) : t_u8 := + let x1 := x shift_left (Int32.repr 1) : t_u8 in + let x7 := x shift_right (Int32.repr 7) : t_u8 in + let x71 := x7.&(Int8.repr 1) : t_u8 in + let x711b := x71.*(Int8.repr 27) : t_u8 in + x1.^x711b. + +Definition mixcolumn (c : t_usize) (state : t_u128) : t_u32 := + let s0 := matrix_index (state : t_u128) ((Int32.repr 0) : t_usize) (c : t_usize) : t_u8 : t_u8 in + let s1 := matrix_index (state : t_u128) ((Int32.repr 1) : t_usize) (c : t_usize) : t_u8 : t_u8 in + let s2 := matrix_index (state : t_u128) ((Int32.repr 2) : t_usize) (c : t_usize) : t_u8 : t_u8 in + let s3 := matrix_index (state : t_u128) ((Int32.repr 3) : t_usize) (c : t_usize) : t_u8 : t_u8 in + let tmp := ((s0.^s1).^s2).^s3 : t_u8 in + let r0 := (s0.^tmp).^(xtime (s0.^s1 : t_u8) : t_u8) : t_u8 in + let r1 := (s1.^tmp).^(xtime (s1.^s2 : t_u8) : t_u8) : t_u8 in + let r2 := (s2.^tmp).^(xtime (s2.^s3 : t_u8) : t_u8) : t_u8 in + let r3 := (s3.^tmp).^(xtime (s3.^s0 : t_u8) : t_u8) : t_u8 in + rebuild_u32 (r0 : t_u8) (r1 : t_u8) (r2 : t_u8) (r3 : t_u8) : t_u32. + +Definition mixcolumns (state : t_u128) : t_u128 := + let c0 := mixcolumn ((Int32.repr 0) : t_usize) (state : t_u128) : t_u32 : t_u32 in + let c1 := mixcolumn ((Int32.repr 1) : t_usize) (state : t_u128) : t_u32 : t_u32 in + let c2 := mixcolumn ((Int32.repr 2) : t_usize) (state : t_u128) : t_u32 : t_u32 in + let c3 := mixcolumn ((Int32.repr 3) : t_usize) (state : t_u128) : t_u32 : t_u32 in + rebuild_u128 (c0 : t_u32) (c1 : t_u32) (c2 : t_u32) (c3 : t_u32) : t_u128. + +Definition aesenc (state : t_u128) (rkey : t_u128) : t_u128 := + let state := shiftrows (state : t_u128) : t_u128 : t_u128 in + let state := subbytes (state : t_u128) : t_u128 : t_u128 in + let state := mixcolumns (state : t_u128) : t_u128 : t_u128 in + state.^rkey. + +Definition aes_rounds (rkeys : nseq t_u128 TODO: Int.to_string length) (inp : t_u128) : t_u128 := + let state := inp.^(rkeys.[(Int32.repr 0)]) : t_u128 in + let state := fold_range ((Int32.repr 1) : t_usize) ((Int32.repr 10) : t_usize) (fun state => fun _ => + true : (t_u128 -> t_usize -> bool)) (state : t_u128) (fun state => fun round => + aesenc (state : t_u128) (rkeys.[round] : t_u128) : t_u128 : (t_u128 -> t_usize -> t_u128)) : t_u128 : t_u128 in + aesenclast (state : t_u128) (rkeys.[(Int32.repr 10)] : t_u128) : t_u128. + +Definition keys_expand (key : t_u128) : nseq t_u128 TODO: Int.to_string length := + let rkeys := repeat ((Int128.repr 0) : t_u128) ((Int32.repr 12) : t_usize) : (nseq t_u128 TODO: Int.to_string length) : nseq t_u128 TODO: Int.to_string length in + let key := key : t_u128 in + let rkeys := update_at_usize (rkeys : (nseq t_u128 TODO: Int.to_string length)) ((Int32.repr 0) : t_usize) (key : t_u128) : (nseq t_u128 TODO: Int.to_string length) : nseq t_u128 TODO: Int.to_string length in + let temp2 := (Int128.repr 0) : t_u128 in + let '(key,rkeys,temp2) := fold_range ((Int32.repr 1) : t_usize) ((Int32.repr 11) : t_usize) (fun '(key,rkeys,temp2) => fun _ => + true : (t_u128 * nseq t_u128 TODO: Int.to_string length * t_u128 -> t_usize -> bool)) ((key,rkeys,temp2) : (t_u128 * nseq t_u128 TODO: Int.to_string length * t_u128)) (fun '(key,rkeys,temp2) => fun round => + let rcon := v_RCON.[round] : t_u8 in + let '(key_temp,temp2_temp) := key_expand (rcon : t_u8) (key : t_u128) (temp2 : t_u128) : (t_u128 * t_u128) : t_u128 * t_u128 in + let key := key_temp : t_u128 in + let temp2 := temp2_temp : t_u128 in + let rkeys := update_at_usize (rkeys : (nseq t_u128 TODO: Int.to_string length)) (round : t_usize) (key : t_u128) : (nseq t_u128 TODO: Int.to_string length) : nseq t_u128 TODO: Int.to_string length in + (key,rkeys,temp2) : (t_u128 * nseq t_u128 TODO: Int.to_string length * t_u128 -> t_usize -> t_u128 * nseq t_u128 TODO: Int.to_string length * t_u128)) : (t_u128 * nseq t_u128 TODO: Int.to_string length * t_u128) : t_u128 * nseq t_u128 TODO: Int.to_string length * t_u128 in + rkeys. + +Definition aes (key : t_u128) (inp : t_u128) : t_u128 := + let rkeys := keys_expand (key : t_u128) : (nseq t_u128 TODO: Int.to_string length) : nseq t_u128 TODO: Int.to_string length in + aes_rounds (rkeys : (nseq t_u128 TODO: Int.to_string length)) (inp : t_u128) : t_u128. diff --git a/aes_jazz/proofs/fstar/extraction/Hacspec_aes_jazz.fst b/aes_jazz/proofs/fstar/extraction/Hacspec_aes_jazz.fst new file mode 100644 index 0000000..0667d66 --- /dev/null +++ b/aes_jazz/proofs/fstar/extraction/Hacspec_aes_jazz.fst @@ -0,0 +1,238 @@ +module Hacspec_aes_jazz +#set-options "--fuel 0 --ifuel 1 --z3rlimit 15" +open Core +open FStar.Mul + +let v_RCON: t_Array u8 (sz 15) = + let list = + [141uy; 1uy; 2uy; 4uy; 8uy; 16uy; 32uy; 64uy; 128uy; 27uy; 54uy; 108uy; 216uy; 171uy; 77uy] + in + FStar.Pervasives.assert_norm (Prims.eq2 (List.Tot.length list) 15); + Rust_primitives.Hax.array_of_list 15 list + +let v_SBOX: t_Array u8 (sz 256) = + let list = + [ + 99uy; 124uy; 119uy; 123uy; 242uy; 107uy; 111uy; 197uy; 48uy; 1uy; 103uy; 43uy; 254uy; 215uy; + 171uy; 118uy; 202uy; 130uy; 201uy; 125uy; 250uy; 89uy; 71uy; 240uy; 173uy; 212uy; 162uy; 175uy; + 156uy; 164uy; 114uy; 192uy; 183uy; 253uy; 147uy; 38uy; 54uy; 63uy; 247uy; 204uy; 52uy; 165uy; + 229uy; 241uy; 113uy; 216uy; 49uy; 21uy; 4uy; 199uy; 35uy; 195uy; 24uy; 150uy; 5uy; 154uy; 7uy; + 18uy; 128uy; 226uy; 235uy; 39uy; 178uy; 117uy; 9uy; 131uy; 44uy; 26uy; 27uy; 110uy; 90uy; + 160uy; 82uy; 59uy; 214uy; 179uy; 41uy; 227uy; 47uy; 132uy; 83uy; 209uy; 0uy; 237uy; 32uy; + 252uy; 177uy; 91uy; 106uy; 203uy; 190uy; 57uy; 74uy; 76uy; 88uy; 207uy; 208uy; 239uy; 170uy; + 251uy; 67uy; 77uy; 51uy; 133uy; 69uy; 249uy; 2uy; 127uy; 80uy; 60uy; 159uy; 168uy; 81uy; 163uy; + 64uy; 143uy; 146uy; 157uy; 56uy; 245uy; 188uy; 182uy; 218uy; 33uy; 16uy; 255uy; 243uy; 210uy; + 205uy; 12uy; 19uy; 236uy; 95uy; 151uy; 68uy; 23uy; 196uy; 167uy; 126uy; 61uy; 100uy; 93uy; + 25uy; 115uy; 96uy; 129uy; 79uy; 220uy; 34uy; 42uy; 144uy; 136uy; 70uy; 238uy; 184uy; 20uy; + 222uy; 94uy; 11uy; 219uy; 224uy; 50uy; 58uy; 10uy; 73uy; 6uy; 36uy; 92uy; 194uy; 211uy; 172uy; + 98uy; 145uy; 149uy; 228uy; 121uy; 231uy; 200uy; 55uy; 109uy; 141uy; 213uy; 78uy; 169uy; 108uy; + 86uy; 244uy; 234uy; 101uy; 122uy; 174uy; 8uy; 186uy; 120uy; 37uy; 46uy; 28uy; 166uy; 180uy; + 198uy; 232uy; 221uy; 116uy; 31uy; 75uy; 189uy; 139uy; 138uy; 112uy; 62uy; 181uy; 102uy; 72uy; + 3uy; 246uy; 14uy; 97uy; 53uy; 87uy; 185uy; 134uy; 193uy; 29uy; 158uy; 225uy; 248uy; 152uy; + 17uy; 105uy; 217uy; 142uy; 148uy; 155uy; 30uy; 135uy; 233uy; 206uy; 85uy; 40uy; 223uy; 140uy; + 161uy; 137uy; 13uy; 191uy; 230uy; 66uy; 104uy; 65uy; 153uy; 45uy; 15uy; 176uy; 84uy; 187uy; + 22uy + ] + in + FStar.Pervasives.assert_norm (Prims.eq2 (List.Tot.length list) 256); + Rust_primitives.Hax.array_of_list 256 list + +let index_u32 (s: u128) (i: usize) : u32 = + cast ((s >>! (i *! sz 32 <: usize) <: u128) %! (pub_u128 1 <>! (i *! sz 8 <: usize) <: u32) %! (1ul <>! + (sz 32 *! (cast ((o >>! (sz 2 *! i <: usize) <: u8) %! 4uy <: u8) <: usize) <: usize) + <: + u128) + (sz 0) + +let vpshufd (s: u128) (o: u8) : u128 = + let (d1: u32):u32 = vpshufd1 s o (sz 0) in + let (d2: u32):u32 = vpshufd1 s o (sz 1) in + let (d3: u32):u32 = vpshufd1 s o (sz 2) in + let (d4: u32):u32 = vpshufd1 s o (sz 3) in + rebuild_u128 d1 d2 d3 d4 + +let vshufps (s1 s2: u128) (o: u8) : u128 = + let (d1: u32):u32 = vpshufd1 s1 o (sz 0) in + let (d2: u32):u32 = vpshufd1 s1 o (sz 1) in + let (d3: u32):u32 = vpshufd1 s2 o (sz 2) in + let (d4: u32):u32 = vpshufd1 s2 o (sz 3) in + rebuild_u128 d1 d2 d3 d4 + +let key_combine (rkey temp1 temp2: u128) : (u128 & u128) = + let temp1:u128 = vpshufd temp1 255uy in + let temp2:u128 = vshufps temp2 rkey 16uy in + let rkey:u128 = rkey ^. temp2 in + let temp2:u128 = vshufps temp2 rkey 140uy in + let rkey:u128 = rkey ^. temp2 in + let rkey:u128 = rkey ^. temp1 in + rkey, temp2 <: (u128 & u128) + +let key_expand (rcon: u8) (rkey temp2: u128) : (u128 & u128) = + let temp1:u128 = aeskeygenassist rkey rcon in + key_combine rkey temp1 temp2 + +let xtime (x: u8) : u8 = + let x1:u8 = x <>! 7l in + let x71:u8 = x7 &. 1uy in + let x711b:u8 = x71 *! 27uy in + x1 ^. x711b + +let mixcolumn (c: usize) (state: u128) : u32 = + let s0:u8 = matrix_index state (sz 0) c in + let s1:u8 = matrix_index state (sz 1) c in + let s2:u8 = matrix_index state (sz 2) c in + let s3:u8 = matrix_index state (sz 3) c in + let tmp:u8 = ((s0 ^. s1 <: u8) ^. s2 <: u8) ^. s3 in + let r0:u8 = (s0 ^. tmp <: u8) ^. (xtime (s0 ^. s1 <: u8) <: u8) in + let r1:u8 = (s1 ^. tmp <: u8) ^. (xtime (s1 ^. s2 <: u8) <: u8) in + let r2:u8 = (s2 ^. tmp <: u8) ^. (xtime (s2 ^. s3 <: u8) <: u8) in + let r3:u8 = (s3 ^. tmp <: u8) ^. (xtime (s3 ^. s0 <: u8) <: u8) in + rebuild_u32 r0 r1 r2 r3 + +let mixcolumns (state: u128) : u128 = + let c0:u32 = mixcolumn (sz 0) state in + let c1:u32 = mixcolumn (sz 1) state in + let c2:u32 = mixcolumn (sz 2) state in + let c3:u32 = mixcolumn (sz 3) state in + rebuild_u128 c0 c1 c2 c3 + +let aesenc (state rkey: u128) : u128 = + let state:u128 = shiftrows state in + let state:u128 = subbytes state in + let state:u128 = mixcolumns state in + state ^. rkey + +let aes_rounds (rkeys: t_Array u128 (sz 12)) (inp: u128) : u128 = + let (state: u128):u128 = inp ^. (rkeys.[ sz 0 ] <: u128) in + let state:u128 = + Rust_primitives.Hax.Folds.fold_range (sz 1) + (sz 10) + (fun state temp_1_ -> + let state:u128 = state in + let _:usize = temp_1_ in + true) + state + (fun state round -> + let state:u128 = state in + let round:usize = round in + aesenc state (rkeys.[ round ] <: u128) <: u128) + in + aesenclast state (rkeys.[ sz 10 ] <: u128) + +let keys_expand (key: u128) : t_Array u128 (sz 12) = + let (rkeys: t_Array u128 (sz 12)):t_Array u128 (sz 12) = + Rust_primitives.Hax.repeat (pub_u128 0) (sz 12) + in + let key:u128 = key in + let rkeys:t_Array u128 (sz 12) = + Rust_primitives.Hax.Monomorphized_update_at.update_at_usize rkeys (sz 0) key + in + let (temp2: u128):u128 = pub_u128 0 in + let key, rkeys, temp2:(u128 & t_Array u128 (sz 12) & u128) = + Rust_primitives.Hax.Folds.fold_range (sz 1) + (sz 11) + (fun temp_0_ temp_1_ -> + let key, rkeys, temp2:(u128 & t_Array u128 (sz 12) & u128) = temp_0_ in + let _:usize = temp_1_ in + true) + (key, rkeys, temp2 <: (u128 & t_Array u128 (sz 12) & u128)) + (fun temp_0_ round -> + let key, rkeys, temp2:(u128 & t_Array u128 (sz 12) & u128) = temp_0_ in + let round:usize = round in + let rcon:u8 = v_RCON.[ round ] in + let key_temp, temp2_temp:(u128 & u128) = key_expand rcon key temp2 in + let key:u128 = key_temp in + let temp2:u128 = temp2_temp in + let rkeys:t_Array u128 (sz 12) = + Rust_primitives.Hax.Monomorphized_update_at.update_at_usize rkeys round key + in + key, rkeys, temp2 <: (u128 & t_Array u128 (sz 12) & u128)) + in + rkeys + +let aes (key inp: u128) : u128 = + let rkeys:t_Array u128 (sz 12) = keys_expand key in + aes_rounds rkeys inp diff --git a/aes_jazz/proofs/fstar/extraction/Hax_base.Int.BaseImpl.fst b/aes_jazz/proofs/fstar/extraction/Hax_base.Int.BaseImpl.fst new file mode 100644 index 0000000..ae848f1 --- /dev/null +++ b/aes_jazz/proofs/fstar/extraction/Hax_base.Int.BaseImpl.fst @@ -0,0 +1,471 @@ +module Hax_base.Int.BaseImpl +#set-options "--fuel 0 --ifuel 1 --z3rlimit 15" +// open Core +open FStar.Mul + +let impl__double (self: Hax_base.Int.t_HaxInt) : Hax_base.Int.t_HaxInt = + match Hax_base.Int.BaseSpec.impl_1__match_pos self with + | Hax_base.Int.POS_ZERO -> Hax_base.Int.BaseSpec.impl_2__ZERO + | Hax_base.Int.POS_POS p -> Hax_base.Int.BaseSpec.impl_1__xO p + +let impl__double_mask (self: Hax_base.Int.t_HaxInt) : Hax_base.Int.t_HaxInt = + match Hax_base.Int.BaseSpec.impl_1__match_pos self with + | Hax_base.Int.POS_ZERO -> Hax_base.Int.BaseSpec.impl_2__ZERO + | Hax_base.Int.POS_POS p -> Hax_base.Int.BaseSpec.impl_1__xO p + +let impl__succ_double (self: Hax_base.Int.t_HaxInt) : Hax_base.Int.t_HaxInt = + match Hax_base.Int.BaseSpec.impl_1__match_pos self with + | Hax_base.Int.POS_ZERO -> Hax_base.Int.BaseSpec.impl_1__xH + | Hax_base.Int.POS_POS p -> Hax_base.Int.BaseSpec.impl_1__xI p + +let impl__succ_double_mask (self: Hax_base.Int.t_HaxInt) : Hax_base.Int.t_HaxInt = + match Hax_base.Int.BaseSpec.impl_1__match_pos self with + | Hax_base.Int.POS_ZERO -> Hax_base.Int.BaseSpec.impl_1__xH + | Hax_base.Int.POS_POS p -> Hax_base.Int.BaseSpec.impl_1__xI p + +let impl__half (self: Hax_base.Int.t_HaxInt) : Hax_base.Int.t_HaxInt = + match Hax_base.Int.BaseSpec.impl_1__match_pos self with + | Hax_base.Int.POS_ZERO -> Hax_base.Int.BaseSpec.impl_2__ZERO + | Hax_base.Int.POS_POS n -> + match Hax_base.Int.BaseSpec.impl_1__match_positive n with + | Hax_base.Int.POSITIVE_XH -> Hax_base.Int.BaseSpec.impl_2__ZERO + | Hax_base.Int.POSITIVE_XO p -> p + | Hax_base.Int.POSITIVE_XI p -> p + +let rec impl__add_binary (self rhs: Hax_base.Int.t_HaxInt) + : Prims.Pure Hax_base.Int.t_HaxInt + (requires + not (Hax_base.Int.BaseSpec.impl_2__is_zero self <: bool) && + not (Hax_base.Int.BaseSpec.impl_2__is_zero rhs <: bool)) + (fun _ -> Prims.l_True) = + match Hax_base.Int.BaseSpec.impl_1__match_positive self with + | Hax_base.Int.POSITIVE_XH -> + (match Hax_base.Int.BaseSpec.impl_1__match_positive rhs with + | Hax_base.Int.POSITIVE_XH -> + Hax_base.Int.BaseSpec.impl_1__xO Hax_base.Int.BaseSpec.impl_1__xH + | Hax_base.Int.POSITIVE_XO q -> Hax_base.Int.BaseSpec.impl_1__xI q + | Hax_base.Int.POSITIVE_XI q -> + Hax_base.Int.BaseSpec.impl_1__xO (Hax_base.Int.BaseSpec.impl_2__succ q + <: + Hax_base.Int.t_HaxInt)) + | Hax_base.Int.POSITIVE_XO p -> + (match Hax_base.Int.BaseSpec.impl_1__match_positive rhs with + | Hax_base.Int.POSITIVE_XH -> Hax_base.Int.BaseSpec.impl_1__xI p + | Hax_base.Int.POSITIVE_XO q -> + Hax_base.Int.BaseSpec.impl_1__xO (impl__add_binary p q <: Hax_base.Int.t_HaxInt) + | Hax_base.Int.POSITIVE_XI q -> + Hax_base.Int.BaseSpec.impl_1__xI (impl__add_binary p q <: Hax_base.Int.t_HaxInt)) + | Hax_base.Int.POSITIVE_XI p -> + match Hax_base.Int.BaseSpec.impl_1__match_positive rhs with + | Hax_base.Int.POSITIVE_XH -> + Hax_base.Int.BaseSpec.impl_1__xO (Hax_base.Int.BaseSpec.impl_2__succ p + <: + Hax_base.Int.t_HaxInt) + | Hax_base.Int.POSITIVE_XO q -> + Hax_base.Int.BaseSpec.impl_1__xI (impl__add_binary p q <: Hax_base.Int.t_HaxInt) + | Hax_base.Int.POSITIVE_XI q -> + Hax_base.Int.BaseSpec.impl_1__xO (impl__add_carry p q <: Hax_base.Int.t_HaxInt) + +and impl__add_carry (self rhs: Hax_base.Int.t_HaxInt) + : Prims.Pure Hax_base.Int.t_HaxInt + (requires + not (Hax_base.Int.BaseSpec.impl_2__is_zero self <: bool) && + not (Hax_base.Int.BaseSpec.impl_2__is_zero rhs <: bool)) + (fun _ -> Prims.l_True) = + match Hax_base.Int.BaseSpec.impl_1__match_positive self with + | Hax_base.Int.POSITIVE_XH -> + (match Hax_base.Int.BaseSpec.impl_1__match_positive rhs with + | Hax_base.Int.POSITIVE_XH -> + Hax_base.Int.BaseSpec.impl_1__xI Hax_base.Int.BaseSpec.impl_1__xH + | Hax_base.Int.POSITIVE_XO q -> + Hax_base.Int.BaseSpec.impl_1__xO (Hax_base.Int.BaseSpec.impl_2__succ q + <: + Hax_base.Int.t_HaxInt) + | Hax_base.Int.POSITIVE_XI q -> + Hax_base.Int.BaseSpec.impl_1__xI (Hax_base.Int.BaseSpec.impl_2__succ q + <: + Hax_base.Int.t_HaxInt)) + | Hax_base.Int.POSITIVE_XO p -> + (match Hax_base.Int.BaseSpec.impl_1__match_positive rhs with + | Hax_base.Int.POSITIVE_XH -> + Hax_base.Int.BaseSpec.impl_1__xO (Hax_base.Int.BaseSpec.impl_2__succ p + <: + Hax_base.Int.t_HaxInt) + | Hax_base.Int.POSITIVE_XO q -> + Hax_base.Int.BaseSpec.impl_1__xI (impl__add_binary p q <: Hax_base.Int.t_HaxInt) + | Hax_base.Int.POSITIVE_XI q -> + Hax_base.Int.BaseSpec.impl_1__xO (impl__add_carry p q <: Hax_base.Int.t_HaxInt)) + | Hax_base.Int.POSITIVE_XI p -> + match Hax_base.Int.BaseSpec.impl_1__match_positive rhs with + | Hax_base.Int.POSITIVE_XH -> + Hax_base.Int.BaseSpec.impl_1__xI (Hax_base.Int.BaseSpec.impl_2__succ p + <: + Hax_base.Int.t_HaxInt) + | Hax_base.Int.POSITIVE_XO q -> + Hax_base.Int.BaseSpec.impl_1__xO (impl__add_carry p q <: Hax_base.Int.t_HaxInt) + | Hax_base.Int.POSITIVE_XI q -> + Hax_base.Int.BaseSpec.impl_1__xI (impl__add_carry p q <: Hax_base.Int.t_HaxInt) + +let impl__add (self rhs: Hax_base.Int.t_HaxInt) : Hax_base.Int.t_HaxInt = + match Hax_base.Int.BaseSpec.impl_1__match_pos self with + | Hax_base.Int.POS_ZERO -> rhs + | Hax_base.Int.POS_POS p -> + match Hax_base.Int.BaseSpec.impl_1__match_pos rhs with + | Hax_base.Int.POS_ZERO -> p + | Hax_base.Int.POS_POS q -> impl__add_binary p q + +let rec impl__add_unary (self rhs: Hax_base.Int.t_HaxInt) : Hax_base.Int.t_HaxInt = + match + Hax_base.Int.BaseSpec.impl_2__match_unary (Hax_base.Int.BaseSpec.impl__clone self + <: + Hax_base.Int.t_HaxInt) + with + | Hax_base.Int.UNARY_ZERO -> + let _:Prims.unit = Hax_base.Int.BaseSpec.impl__dealloc self in + Hax_base.Int.BaseSpec.impl_2__ZERO + | Hax_base.Int.UNARY_SUCC x -> + impl__add_unary x (Hax_base.Int.BaseSpec.impl_2__succ rhs <: Hax_base.Int.t_HaxInt) + +let rec impl__cmp_binary_cont (x y: Hax_base.Int.t_HaxInt) (r: Hax_base.Int.t_CMP) + : Prims.Pure Hax_base.Int.t_CMP + (requires + not (Hax_base.Int.BaseSpec.impl_2__is_zero x <: bool) && + not (Hax_base.Int.BaseSpec.impl_2__is_zero y <: bool)) + (fun _ -> Prims.l_True) = + match Hax_base.Int.BaseSpec.impl_1__match_positive x with + | Hax_base.Int.POSITIVE_XH -> + (match Hax_base.Int.BaseSpec.impl_1__match_positive y with + | Hax_base.Int.POSITIVE_XH -> r + | Hax_base.Int.POSITIVE_XO q + | Hax_base.Int.POSITIVE_XI q -> + let _:Prims.unit = Hax_base.Int.BaseSpec.impl__dealloc q in + Hax_base.Int.CMP_LESS <: Hax_base.Int.t_CMP) + | Hax_base.Int.POSITIVE_XO p -> + (match Hax_base.Int.BaseSpec.impl_1__match_positive y with + | Hax_base.Int.POSITIVE_XH -> + let _:Prims.unit = Hax_base.Int.BaseSpec.impl__dealloc p in + Hax_base.Int.CMP_GREATER <: Hax_base.Int.t_CMP + | Hax_base.Int.POSITIVE_XO q -> impl__cmp_binary_cont p q r + | Hax_base.Int.POSITIVE_XI q -> + impl__cmp_binary_cont p q (Hax_base.Int.CMP_LESS <: Hax_base.Int.t_CMP)) + | Hax_base.Int.POSITIVE_XI p -> + match Hax_base.Int.BaseSpec.impl_1__match_positive y with + | Hax_base.Int.POSITIVE_XH -> + let _:Prims.unit = Hax_base.Int.BaseSpec.impl__dealloc p in + Hax_base.Int.CMP_GREATER <: Hax_base.Int.t_CMP + | Hax_base.Int.POSITIVE_XO q -> + impl__cmp_binary_cont p q (Hax_base.Int.CMP_GREATER <: Hax_base.Int.t_CMP) + | Hax_base.Int.POSITIVE_XI q -> impl__cmp_binary_cont p q r + +let impl__cmp_binary (self rhs: Hax_base.Int.t_HaxInt) + : Prims.Pure Hax_base.Int.t_CMP + (requires + not (Hax_base.Int.BaseSpec.impl_2__is_zero self <: bool) && + not (Hax_base.Int.BaseSpec.impl_2__is_zero rhs <: bool)) + (fun _ -> Prims.l_True) = + impl__cmp_binary_cont self rhs (Hax_base.Int.CMP_EQ <: Hax_base.Int.t_CMP) + +let impl__cmp (self rhs: Hax_base.Int.t_HaxInt) : Hax_base.Int.t_CMP = + match Hax_base.Int.BaseSpec.impl_1__match_pos self with + | Hax_base.Int.POS_ZERO -> + (match Hax_base.Int.BaseSpec.impl_1__match_pos rhs with + | Hax_base.Int.POS_ZERO -> Hax_base.Int.CMP_EQ <: Hax_base.Int.t_CMP + | Hax_base.Int.POS_POS q -> + let _:Prims.unit = Hax_base.Int.BaseSpec.impl__dealloc q in + Hax_base.Int.CMP_LESS <: Hax_base.Int.t_CMP) + | Hax_base.Int.POS_POS p -> + match Hax_base.Int.BaseSpec.impl_1__match_pos rhs with + | Hax_base.Int.POS_ZERO -> + let _:Prims.unit = Hax_base.Int.BaseSpec.impl__dealloc p in + Hax_base.Int.CMP_GREATER <: Hax_base.Int.t_CMP + | Hax_base.Int.POS_POS q -> impl__cmp_binary p q + +let impl__cmp_unary (self rhs: Hax_base.Int.t_HaxInt) : Hax_base.Int.t_CMP = + if + Hax_base.Int.BaseSpec.impl_2__is_zero (Hax_base.Int.BaseSpec.impl__clone self + <: + Hax_base.Int.t_HaxInt) || + Hax_base.Int.BaseSpec.impl_2__is_zero (Hax_base.Int.BaseSpec.impl__clone rhs + <: + Hax_base.Int.t_HaxInt) + then + if + Hax_base.Int.BaseSpec.impl_2__is_zero (Hax_base.Int.BaseSpec.impl__clone self + <: + Hax_base.Int.t_HaxInt) && + Hax_base.Int.BaseSpec.impl_2__is_zero (Hax_base.Int.BaseSpec.impl__clone rhs + <: + Hax_base.Int.t_HaxInt) + then + let _:Prims.unit = Hax_base.Int.BaseSpec.impl__dealloc self in + let _:Prims.unit = Hax_base.Int.BaseSpec.impl__dealloc rhs in + Hax_base.Int.CMP_EQ <: Hax_base.Int.t_CMP + else + if Hax_base.Int.BaseSpec.impl_2__is_zero self + then + let _:Prims.unit = Hax_base.Int.BaseSpec.impl__dealloc rhs in + Hax_base.Int.CMP_LESS <: Hax_base.Int.t_CMP + else + let _:Prims.unit = Hax_base.Int.BaseSpec.impl__dealloc rhs in + Hax_base.Int.CMP_GREATER <: Hax_base.Int.t_CMP + else + impl__cmp (Hax_base.Int.BaseSpec.impl_2__pred self <: Hax_base.Int.t_HaxInt) + (Hax_base.Int.BaseSpec.impl_2__pred rhs <: Hax_base.Int.t_HaxInt) + +let rec impl__divmod_unary (x y q u: Hax_base.Int.t_HaxInt) + : (Hax_base.Int.t_HaxInt & Hax_base.Int.t_HaxInt) = + if + Hax_base.Int.BaseSpec.impl_2__is_zero (Hax_base.Int.BaseSpec.impl__clone x + <: + Hax_base.Int.t_HaxInt) + then + let _:Prims.unit = Hax_base.Int.BaseSpec.impl__dealloc x in + q, u <: (Hax_base.Int.t_HaxInt & Hax_base.Int.t_HaxInt) + else + if + Hax_base.Int.BaseSpec.impl_2__is_zero (Hax_base.Int.BaseSpec.impl__clone u + <: + Hax_base.Int.t_HaxInt) + then + let _:Prims.unit = Hax_base.Int.BaseSpec.impl__dealloc u in + impl__divmod_unary (Hax_base.Int.BaseSpec.impl_2__pred x <: Hax_base.Int.t_HaxInt) + (Hax_base.Int.BaseSpec.impl__clone y <: Hax_base.Int.t_HaxInt) + (Hax_base.Int.BaseSpec.impl_2__succ q <: Hax_base.Int.t_HaxInt) + y + else + impl__divmod_unary (Hax_base.Int.BaseSpec.impl_2__pred x <: Hax_base.Int.t_HaxInt) + y + (Hax_base.Int.BaseSpec.impl_2__succ q <: Hax_base.Int.t_HaxInt) + (Hax_base.Int.BaseSpec.impl_2__pred u <: Hax_base.Int.t_HaxInt) + +let impl__eq (self rhs: Hax_base.Int.t_HaxInt) : bool = + Hax_base.Int.impl__CMP__eq (impl__cmp self rhs <: Hax_base.Int.t_CMP) + (Hax_base.Int.CMP_EQ <: Hax_base.Int.t_CMP) + +let impl__gt (self rhs: Hax_base.Int.t_HaxInt) : bool = + Hax_base.Int.impl__CMP__eq (impl__cmp self rhs <: Hax_base.Int.t_CMP) + (Hax_base.Int.CMP_GREATER <: Hax_base.Int.t_CMP) + +let impl__le (self rhs: Hax_base.Int.t_HaxInt) : bool = not (impl__gt self rhs <: bool) + +let impl__lt (self rhs: Hax_base.Int.t_HaxInt) : bool = + Hax_base.Int.impl__CMP__eq (impl__cmp self rhs <: Hax_base.Int.t_CMP) + (Hax_base.Int.CMP_LESS <: Hax_base.Int.t_CMP) + +let impl__ge (self rhs: Hax_base.Int.t_HaxInt) : bool = not (impl__lt self rhs <: bool) + +let rec impl__power_of_two (self: Hax_base.Int.t_HaxInt) : Hax_base.Int.t_HaxInt = + match Hax_base.Int.BaseSpec.impl_2__match_unary self with + | Hax_base.Int.UNARY_ZERO -> Hax_base.Int.BaseSpec.impl_1__xH + | Hax_base.Int.UNARY_SUCC x -> + Hax_base.Int.BaseSpec.impl_1__xO (impl__power_of_two x <: Hax_base.Int.t_HaxInt) + +let rec impl__pred_double (self: Hax_base.Int.t_HaxInt) + : Prims.Pure Hax_base.Int.t_HaxInt + (requires not (Hax_base.Int.BaseSpec.impl_2__is_zero self <: bool)) + (fun _ -> Prims.l_True) = + match Hax_base.Int.BaseSpec.impl_1__match_positive self with + | Hax_base.Int.POSITIVE_XH -> Hax_base.Int.BaseSpec.impl_1__xH + | Hax_base.Int.POSITIVE_XO p -> + Hax_base.Int.BaseSpec.impl_1__xI (impl__pred_double p <: Hax_base.Int.t_HaxInt) + | Hax_base.Int.POSITIVE_XI p -> + Hax_base.Int.BaseSpec.impl_1__xI (Hax_base.Int.BaseSpec.impl_1__xO p <: Hax_base.Int.t_HaxInt) + +let impl__double_pred_mask (self: Hax_base.Int.t_HaxInt) + : Prims.Pure Hax_base.Int.t_HaxInt + (requires not (Hax_base.Int.BaseSpec.impl_2__is_zero self <: bool)) + (fun _ -> Prims.l_True) = + match Hax_base.Int.BaseSpec.impl_1__match_positive self with + | Hax_base.Int.POSITIVE_XH -> Hax_base.Int.BaseSpec.impl_2__ZERO + | Hax_base.Int.POSITIVE_XO p -> + Hax_base.Int.BaseSpec.impl_1__xO (impl__pred_double p <: Hax_base.Int.t_HaxInt) + | Hax_base.Int.POSITIVE_XI p -> + Hax_base.Int.BaseSpec.impl_1__xO (Hax_base.Int.BaseSpec.impl_1__xO p <: Hax_base.Int.t_HaxInt) + +let rec impl__shl_helper (rhs lhs: Hax_base.Int.t_HaxInt) : Hax_base.Int.t_HaxInt = + if + Hax_base.Int.BaseSpec.impl_2__is_zero (Hax_base.Int.BaseSpec.impl__clone lhs + <: + Hax_base.Int.t_HaxInt) || + Hax_base.Int.BaseSpec.impl_2__is_zero (Hax_base.Int.BaseSpec.impl__clone rhs + <: + Hax_base.Int.t_HaxInt) + then + let _:Prims.unit = Hax_base.Int.BaseSpec.impl__dealloc rhs in + lhs + else + impl__shl_helper (Hax_base.Int.BaseSpec.impl_2__pred rhs <: Hax_base.Int.t_HaxInt) + (impl__double lhs <: Hax_base.Int.t_HaxInt) + +let impl__shl (self rhs: Hax_base.Int.t_HaxInt) : Hax_base.Int.t_HaxInt = impl__shl_helper rhs self + +let rec impl__shr_helper (rhs lhs: Hax_base.Int.t_HaxInt) : Hax_base.Int.t_HaxInt = + if + Hax_base.Int.BaseSpec.impl_2__is_zero (Hax_base.Int.BaseSpec.impl__clone lhs + <: + Hax_base.Int.t_HaxInt) || + Hax_base.Int.BaseSpec.impl_2__is_zero (Hax_base.Int.BaseSpec.impl__clone rhs + <: + Hax_base.Int.t_HaxInt) + then + let _:Prims.unit = Hax_base.Int.BaseSpec.impl__dealloc rhs in + lhs + else + impl__shr_helper (Hax_base.Int.BaseSpec.impl_2__pred rhs <: Hax_base.Int.t_HaxInt) + (impl__half lhs <: Hax_base.Int.t_HaxInt) + +let impl__shr (self rhs: Hax_base.Int.t_HaxInt) : Hax_base.Int.t_HaxInt = impl__shr_helper rhs self + +let rec impl__sub_unary (self rhs: Hax_base.Int.t_HaxInt) : Hax_base.Int.t_HaxInt = + match Hax_base.Int.BaseSpec.impl_2__match_unary self with + | Hax_base.Int.UNARY_ZERO -> Hax_base.Int.BaseSpec.impl_2__ZERO + | Hax_base.Int.UNARY_SUCC n -> + match Hax_base.Int.BaseSpec.impl_2__match_unary rhs with + | Hax_base.Int.UNARY_ZERO -> Hax_base.Int.BaseSpec.impl_2__succ n + | Hax_base.Int.UNARY_SUCC m -> impl__sub_unary n m + +let rec impl__mul_binary (self rhs: Hax_base.Int.t_HaxInt) + : Prims.Pure Hax_base.Int.t_HaxInt + (requires + not (Hax_base.Int.BaseSpec.impl_2__is_zero self <: bool) && + not (Hax_base.Int.BaseSpec.impl_2__is_zero rhs <: bool)) + (fun _ -> Prims.l_True) = + match Hax_base.Int.BaseSpec.impl_1__match_positive self with + | Hax_base.Int.POSITIVE_XH -> rhs + | Hax_base.Int.POSITIVE_XO p -> + Hax_base.Int.BaseSpec.impl_1__xO (impl__mul_binary p rhs <: Hax_base.Int.t_HaxInt) + | Hax_base.Int.POSITIVE_XI p -> + impl__add (Hax_base.Int.BaseSpec.impl__clone rhs <: Hax_base.Int.t_HaxInt) + (Hax_base.Int.BaseSpec.impl_1__xO (impl__mul_binary p rhs <: Hax_base.Int.t_HaxInt) + <: + Hax_base.Int.t_HaxInt) + +let impl__mul (self rhs: Hax_base.Int.t_HaxInt) : Hax_base.Int.t_HaxInt = + match Hax_base.Int.BaseSpec.impl_1__match_pos self with + | Hax_base.Int.POS_ZERO -> Hax_base.Int.BaseSpec.impl_2__ZERO + | Hax_base.Int.POS_POS p -> + match Hax_base.Int.BaseSpec.impl_1__match_pos rhs with + | Hax_base.Int.POS_ZERO -> Hax_base.Int.BaseSpec.impl_2__ZERO + | Hax_base.Int.POS_POS q -> impl__mul_binary p q + +let rec impl__sub_binary (self rhs: Hax_base.Int.t_HaxInt) + : Prims.Pure Hax_base.Int.t_HaxInt + (requires + not (Hax_base.Int.BaseSpec.impl_2__is_zero self <: bool) && + not (Hax_base.Int.BaseSpec.impl_2__is_zero rhs <: bool)) + (fun _ -> Prims.l_True) = + match Hax_base.Int.BaseSpec.impl_1__match_positive self with + | Hax_base.Int.POSITIVE_XH -> Hax_base.Int.BaseSpec.impl_2__ZERO + | Hax_base.Int.POSITIVE_XO p -> + (match Hax_base.Int.BaseSpec.impl_1__match_positive rhs with + | Hax_base.Int.POSITIVE_XH -> impl__pred_double p + | Hax_base.Int.POSITIVE_XO q -> + impl__double_mask (impl__sub_binary p q <: Hax_base.Int.t_HaxInt) + | Hax_base.Int.POSITIVE_XI q -> + impl__succ_double_mask (impl__sub_carry p q <: Hax_base.Int.t_HaxInt)) + | Hax_base.Int.POSITIVE_XI p -> + match Hax_base.Int.BaseSpec.impl_1__match_positive rhs with + | Hax_base.Int.POSITIVE_XH -> Hax_base.Int.BaseSpec.impl_1__xO p + | Hax_base.Int.POSITIVE_XO q -> + impl__succ_double_mask (impl__sub_binary p q <: Hax_base.Int.t_HaxInt) + | Hax_base.Int.POSITIVE_XI q -> + impl__double_mask (impl__sub_binary p q <: Hax_base.Int.t_HaxInt) + +and impl__sub_carry (self rhs: Hax_base.Int.t_HaxInt) + : Prims.Pure Hax_base.Int.t_HaxInt + (requires + not (Hax_base.Int.BaseSpec.impl_2__is_zero self <: bool) && + not (Hax_base.Int.BaseSpec.impl_2__is_zero rhs <: bool)) + (fun _ -> Prims.l_True) = + match Hax_base.Int.BaseSpec.impl_1__match_positive self with + | Hax_base.Int.POSITIVE_XH -> Hax_base.Int.BaseSpec.impl_2__ZERO + | Hax_base.Int.POSITIVE_XO p -> + (match Hax_base.Int.BaseSpec.impl_1__match_positive rhs with + | Hax_base.Int.POSITIVE_XH -> impl__double_pred_mask p + | Hax_base.Int.POSITIVE_XO q -> + impl__succ_double_mask (impl__sub_carry p q <: Hax_base.Int.t_HaxInt) + | Hax_base.Int.POSITIVE_XI q -> + impl__double_mask (impl__sub_carry p q <: Hax_base.Int.t_HaxInt)) + | Hax_base.Int.POSITIVE_XI p -> + match Hax_base.Int.BaseSpec.impl_1__match_positive rhs with + | Hax_base.Int.POSITIVE_XH -> impl__pred_double p + | Hax_base.Int.POSITIVE_XO q -> + impl__double_mask (impl__sub_binary p q <: Hax_base.Int.t_HaxInt) + | Hax_base.Int.POSITIVE_XI q -> + impl__succ_double_mask (impl__sub_carry p q <: Hax_base.Int.t_HaxInt) + +let impl__sub (self rhs: Hax_base.Int.t_HaxInt) : Hax_base.Int.t_HaxInt = + match Hax_base.Int.BaseSpec.impl_1__match_pos self with + | Hax_base.Int.POS_ZERO -> Hax_base.Int.BaseSpec.impl_2__ZERO + | Hax_base.Int.POS_POS p -> + match Hax_base.Int.BaseSpec.impl_1__match_pos rhs with + | Hax_base.Int.POS_ZERO -> p + | Hax_base.Int.POS_POS q -> impl__sub_binary p q + +let rec impl__divmod_binary (a b: Hax_base.Int.t_HaxInt) + : Prims.Pure (Hax_base.Int.t_HaxInt & Hax_base.Int.t_HaxInt) + (requires + not (Hax_base.Int.BaseSpec.impl_2__is_zero a <: bool) && + not (Hax_base.Int.BaseSpec.impl_2__is_zero b <: bool)) + (fun _ -> Prims.l_True) = + match Hax_base.Int.BaseSpec.impl_1__match_positive a with + | Hax_base.Int.POSITIVE_XH -> + (match Hax_base.Int.BaseSpec.impl_1__match_positive b with + | Hax_base.Int.POSITIVE_XH -> + Hax_base.Int.BaseSpec.impl_1__xH, Hax_base.Int.BaseSpec.impl_2__ZERO + <: + (Hax_base.Int.t_HaxInt & Hax_base.Int.t_HaxInt) + | Hax_base.Int.POSITIVE_XO q + | Hax_base.Int.POSITIVE_XI q -> + let _:Prims.unit = Hax_base.Int.BaseSpec.impl__dealloc q in + Hax_base.Int.BaseSpec.impl_2__ZERO, Hax_base.Int.BaseSpec.impl_1__xH + <: + (Hax_base.Int.t_HaxInt & Hax_base.Int.t_HaxInt)) + | Hax_base.Int.POSITIVE_XO a___ -> + let q, r:(Hax_base.Int.t_HaxInt & Hax_base.Int.t_HaxInt) = + impl__divmod_binary a___ (Hax_base.Int.BaseSpec.impl__clone b <: Hax_base.Int.t_HaxInt) + in + let r___:Hax_base.Int.t_HaxInt = impl__double r in + if + impl__le (Hax_base.Int.BaseSpec.impl__clone b <: Hax_base.Int.t_HaxInt) + (Hax_base.Int.BaseSpec.impl__clone r___ <: Hax_base.Int.t_HaxInt) + then impl__succ_double q, impl__sub r___ b <: (Hax_base.Int.t_HaxInt & Hax_base.Int.t_HaxInt) + else + let _:Prims.unit = Hax_base.Int.BaseSpec.impl__dealloc b in + impl__double q, r___ <: (Hax_base.Int.t_HaxInt & Hax_base.Int.t_HaxInt) + | Hax_base.Int.POSITIVE_XI a___ -> + let q, r:(Hax_base.Int.t_HaxInt & Hax_base.Int.t_HaxInt) = + impl__divmod_binary a___ (Hax_base.Int.BaseSpec.impl__clone b <: Hax_base.Int.t_HaxInt) + in + let r___:Hax_base.Int.t_HaxInt = impl__succ_double r in + if + impl__le (Hax_base.Int.BaseSpec.impl__clone b <: Hax_base.Int.t_HaxInt) + (Hax_base.Int.BaseSpec.impl__clone r___ <: Hax_base.Int.t_HaxInt) + then impl__succ_double q, impl__sub r___ b <: (Hax_base.Int.t_HaxInt & Hax_base.Int.t_HaxInt) + else + let _:Prims.unit = Hax_base.Int.BaseSpec.impl__dealloc b in + impl__double q, r___ <: (Hax_base.Int.t_HaxInt & Hax_base.Int.t_HaxInt) + +let impl__divmod (a b: Hax_base.Int.t_HaxInt) : (Hax_base.Int.t_HaxInt & Hax_base.Int.t_HaxInt) = + if + Hax_base.Int.BaseSpec.impl_2__is_zero (Hax_base.Int.BaseSpec.impl__clone a + <: + Hax_base.Int.t_HaxInt) || + Hax_base.Int.BaseSpec.impl_2__is_zero (Hax_base.Int.BaseSpec.impl__clone b + <: + Hax_base.Int.t_HaxInt) + then + let _:Prims.unit = Hax_base.Int.BaseSpec.impl__dealloc b in + Hax_base.Int.BaseSpec.impl_2__ZERO, a <: (Hax_base.Int.t_HaxInt & Hax_base.Int.t_HaxInt) + else impl__divmod_binary a b + +let impl__div (self rhs: Hax_base.Int.t_HaxInt) : Hax_base.Int.t_HaxInt = + let q, r:(Hax_base.Int.t_HaxInt & Hax_base.Int.t_HaxInt) = impl__divmod self rhs in + let _:Prims.unit = Hax_base.Int.BaseSpec.impl__dealloc r in + q + +let impl__rem (self rhs: Hax_base.Int.t_HaxInt) : Hax_base.Int.t_HaxInt = + let q, r:(Hax_base.Int.t_HaxInt & Hax_base.Int.t_HaxInt) = impl__divmod self rhs in + let _:Prims.unit = Hax_base.Int.BaseSpec.impl__dealloc q in + r + diff --git a/aes_jazz/proofs/fstar/extraction/Hax_base.Int.BaseSpec.fst b/aes_jazz/proofs/fstar/extraction/Hax_base.Int.BaseSpec.fst new file mode 100644 index 0000000..a39e816 --- /dev/null +++ b/aes_jazz/proofs/fstar/extraction/Hax_base.Int.BaseSpec.fst @@ -0,0 +1,81 @@ +module Hax_base.Int.BaseSpec +#set-options "--fuel 0 --ifuel 1 --z3rlimit 15" +// open Core +open FStar.Mul + +let impl__clone (self: Hax_base.Int.t_HaxInt) : Hax_base.Int.t_HaxInt = self + +let impl__dealloc (self: Hax_base.Int.t_HaxInt) : Prims.unit = + () + +let impl_1__xH: Hax_base.Int.t_HaxInt = 1 + +let impl_1__xI (self: Hax_base.Int.t_HaxInt) : Hax_base.Int.t_HaxInt = self * 2 + 1 + +let impl_1__xO (self: Hax_base.Int.t_HaxInt) : Hax_base.Int.t_HaxInt = self * 2 + +let impl_2__ZERO: Hax_base.Int.t_HaxInt = 0 + +let impl__normalize (self: Hax_base.Int.t_HaxInt) : Hax_base.Int.t_HaxInt = self + +let impl_1__div2 (self: Hax_base.Int.t_HaxInt) : Hax_base.Int.t_HaxInt = self / 2 + +let impl_1__is_xH (self: Hax_base.Int.t_HaxInt) : bool = self = 1 + +let impl_1__is_xI (self: Hax_base.Int.t_HaxInt) : bool = self > 1 && self % 2 = 1 + +let impl_1__is_xO (self: Hax_base.Int.t_HaxInt) : bool = self > 1 && self % 2 = 0 + +let impl_2__is_zero (self: Hax_base.Int.t_HaxInt) : bool = self = 0 + +let impl_2__pred (self: Hax_base.Int.t_HaxInt) + : Prims.Pure Hax_base.Int.t_HaxInt + (requires not (impl_2__is_zero self <: bool)) + (fun _ -> Prims.l_True) = + self - 1 + +let impl_2__succ (self: Hax_base.Int.t_HaxInt) : Hax_base.Int.t_HaxInt = self + 1 + +let v_WORDSIZE_128_: Hax_base.Int.t_HaxInt = pow2 128 + +let v_WORDSIZE_128_SUB_1_: Hax_base.Int.t_HaxInt = v_WORDSIZE_128_ - 1 + +let v_WORDSIZE_16_: Hax_base.Int.t_HaxInt = pow2 16 + +let v_WORDSIZE_16_SUB_1_: Hax_base.Int.t_HaxInt = v_WORDSIZE_16_ - 1 + +let v_WORDSIZE_32_: Hax_base.Int.t_HaxInt = pow2 32 + +let v_WORDSIZE_32_SUB_1_: Hax_base.Int.t_HaxInt = v_WORDSIZE_32_ - 1 + +let v_WORDSIZE_64_: Hax_base.Int.t_HaxInt = pow2 64 + +let v_WORDSIZE_64_SUB_1_: Hax_base.Int.t_HaxInt = v_WORDSIZE_64_ - 1 + +let v_WORDSIZE_8_: Hax_base.Int.t_HaxInt = pow2 8 + +let v_WORDSIZE_8_SUB_1_: Hax_base.Int.t_HaxInt = v_WORDSIZE_8_ - 1 + +let impl_1__match_pos (self: Hax_base.Int.t_HaxInt) : Hax_base.Int.t_POS = + if impl_2__is_zero (impl__clone self <: Hax_base.Int.t_HaxInt) + then + let _:Prims.unit = impl__dealloc self in + Hax_base.Int.POS_ZERO <: Hax_base.Int.t_POS + else Hax_base.Int.POS_POS self <: Hax_base.Int.t_POS + +let impl_1__match_positive (self: Hax_base.Int.t_HaxInt) : Hax_base.Int.t_POSITIVE = + if impl_1__is_xH (impl__clone self <: Hax_base.Int.t_HaxInt) + then + let _:Prims.unit = impl__dealloc self in + Hax_base.Int.POSITIVE_XH <: Hax_base.Int.t_POSITIVE + else + if impl_1__is_xO (impl__clone self <: Hax_base.Int.t_HaxInt) + then Hax_base.Int.POSITIVE_XO (impl_1__div2 self) <: Hax_base.Int.t_POSITIVE + else Hax_base.Int.POSITIVE_XI (impl_1__div2 self) <: Hax_base.Int.t_POSITIVE + +let impl_2__match_unary (self: Hax_base.Int.t_HaxInt) : Hax_base.Int.t_UNARY = + if impl_2__is_zero (impl__clone self <: Hax_base.Int.t_HaxInt) + then + let _:Prims.unit = impl__dealloc self in + Hax_base.Int.UNARY_ZERO <: Hax_base.Int.t_UNARY + else Hax_base.Int.UNARY_SUCC (impl_2__pred self) <: Hax_base.Int.t_UNARY diff --git a/aes_jazz/proofs/fstar/extraction/Hax_base.Int.fst b/aes_jazz/proofs/fstar/extraction/Hax_base.Int.fst new file mode 100644 index 0000000..d64b0e4 --- /dev/null +++ b/aes_jazz/proofs/fstar/extraction/Hax_base.Int.fst @@ -0,0 +1,47 @@ +module Hax_base.Int +#set-options "--fuel 0 --ifuel 1 --z3rlimit 15" +// open Core +open FStar.Mul + +let discriminant_CMP_EQ = 0 + +let discriminant_CMP_GREATER = 1 + +type t_CMP = + | CMP_LESS : t_CMP + | CMP_EQ : t_CMP + | CMP_GREATER : t_CMP + +let impl__CMP__clone (self: t_CMP) : t_CMP = + match self with + | CMP_LESS -> CMP_LESS <: t_CMP + | CMP_EQ -> CMP_EQ <: t_CMP + | CMP_GREATER -> CMP_GREATER <: t_CMP + +let impl__CMP__eq (self rhs: t_CMP) : bool = + match self, rhs <: (t_CMP & t_CMP) with + | CMP_LESS , CMP_LESS | CMP_EQ , CMP_EQ | CMP_GREATER , CMP_GREATER -> true + | _ -> false + +let discriminant_CMP_LESS = (-1) + +let t_CMP_cast_to_repr (x: t_CMP) = + match x with + | CMP_LESS -> discriminant_CMP_LESS + | CMP_EQ -> discriminant_CMP_EQ + | CMP_GREATER -> discriminant_CMP_GREATER + +type t_HaxInt = Prims.nat + +type t_POS = + | POS_ZERO : t_POS + | POS_POS : t_HaxInt -> t_POS + +type t_POSITIVE = + | POSITIVE_XH : t_POSITIVE + | POSITIVE_XO : t_HaxInt -> t_POSITIVE + | POSITIVE_XI : t_HaxInt -> t_POSITIVE + +type t_UNARY = + | UNARY_ZERO : t_UNARY + | UNARY_SUCC : t_HaxInt -> t_UNARY diff --git a/aes_jazz/proofs/fstar/extraction/Hax_core.Coerce.fst b/aes_jazz/proofs/fstar/extraction/Hax_core.Coerce.fst new file mode 100644 index 0000000..ded11f0 --- /dev/null +++ b/aes_jazz/proofs/fstar/extraction/Hax_core.Coerce.fst @@ -0,0 +1,19 @@ +module Hax_core.Coerce +#set-options "--fuel 0 --ifuel 1 --z3rlimit 15" +// open Core +open FStar.Mul + +class t_Abstraction (v_Self: Type0) = { + f_AbstractType:Type0; + f_lift_pre:v_Self -> Type0; + f_lift_post:v_Self -> f_AbstractType -> Type0; + f_lift:x0: v_Self + -> Prims.Pure f_AbstractType (f_lift_pre x0) (fun result -> f_lift_post x0 result) +} + +class t_Concretization (v_Self: Type0) (v_T: Type0) = { + f_concretize_pre:v_Self -> Type0; + f_concretize_post:v_Self -> v_T -> Type0; + f_concretize:x0: v_Self + -> Prims.Pure v_T (f_concretize_pre x0) (fun result -> f_concretize_post x0 result) +} diff --git a/aes_jazz/proofs/fstar/extraction/Hax_core.Int.fst b/aes_jazz/proofs/fstar/extraction/Hax_core.Int.fst new file mode 100644 index 0000000..209a18b --- /dev/null +++ b/aes_jazz/proofs/fstar/extraction/Hax_core.Int.fst @@ -0,0 +1,2877 @@ +module Hax_core.Int +#set-options "--fuel 0 --ifuel 1 --z3rlimit 15" +// open Core +open FStar.Mul + +let _ = + (* This module has implicit dependencies, here we make them explicit. *) + (* The implicit dependencies arise from typeclasses instances. *) + let open Hax_base.Int in + () + +class t_Constants (v_Self: Type0) = { + f_ZERO:v_Self; + f_ONE:v_Self; + f_MIN:v_Self; + f_MAX:v_Self +} + +type t_U128 = { f_v:Hax_base.Int.t_HaxInt } + +[@@ FStar.Tactics.Typeclasses.tcinstance] +let impl_108: t_Constants t_U128 = + { + f_ZERO = { f_v = Hax_base.Int.BaseSpec.impl_2__ZERO } <: t_U128; + f_ONE = { f_v = Hax_base.Int.BaseSpec.impl_1__xH } <: t_U128; + f_MIN = { f_v = Hax_base.Int.BaseSpec.impl_2__ZERO } <: t_U128; // f_ZERO; + f_MAX = { f_v = Hax_base.Int.BaseSpec.v_WORDSIZE_128_SUB_1_ } <: t_U128 + } + +[@@ FStar.Tactics.Typeclasses.tcinstance] +let impl_110: Hax_core.Coerce.t_Concretization Hax_base.Int.t_HaxInt t_U128 = + { + f_concretize_pre = (fun (self: Hax_base.Int.t_HaxInt) -> true); + f_concretize_post = (fun (self: Hax_base.Int.t_HaxInt) (out: t_U128) -> true); + f_concretize + = + fun (self: Hax_base.Int.t_HaxInt) -> + { f_v = Hax_base.Int.BaseImpl.impl__rem self Hax_base.Int.BaseSpec.v_WORDSIZE_128_ } <: t_U128 + } + +let impl_111__checked_concretize (x: Hax_base.Int.t_HaxInt) : option // Core.Option.t_Option + t_U128 = + if + Hax_base.Int.BaseImpl.impl__lt (// Core.Clone.f_clone #Hax_base.Int.t_HaxInt + // #FStar.Tactics.Typeclasses.solve + x + <: + Hax_base.Int.t_HaxInt) + Hax_base.Int.BaseSpec.v_WORDSIZE_128_ + then // Core.Option.Option_Some + Some + ({ f_v = x } <: t_U128) <: // Core.Option.t_Option + option + t_U128 + else // Core.Option.Option_None + None + <: // Core.Option.t_Option + option t_U128 + +let impl_111__wrapping_concretize (x: Hax_base.Int.t_HaxInt) : t_U128 = + { f_v = Hax_base.Int.BaseImpl.impl__rem x Hax_base.Int.BaseSpec.v_WORDSIZE_128_ } <: t_U128 + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_115: // Core.Clone.t_Clone +// t_U128 = +// { +// f_clone_pre = (fun (self: t_U128) -> true); +// f_clone_post = (fun (self: t_U128) (out: t_U128) -> true); +// f_clone +// = +// fun (self: t_U128) -> +// { f_v = // +// self.f_v } +// <: +// t_U128 +// } + +type t_U16 = { f_v:Hax_base.Int.t_HaxInt } + +[@@ FStar.Tactics.Typeclasses.tcinstance] +let impl_27: t_Constants t_U16 = + { + f_ZERO = { f_v = Hax_base.Int.BaseSpec.impl_2__ZERO } <: t_U16; + f_ONE = { f_v = Hax_base.Int.BaseSpec.impl_1__xH } <: t_U16; + f_MIN = { f_v = Hax_base.Int.BaseSpec.impl_2__ZERO } <: t_U16; // f_ZERO; + f_MAX = { f_v = Hax_base.Int.BaseSpec.v_WORDSIZE_16_SUB_1_ } <: t_U16 + } + +[@@ FStar.Tactics.Typeclasses.tcinstance] +let impl_29: Hax_core.Coerce.t_Concretization Hax_base.Int.t_HaxInt t_U16 = + { + f_concretize_pre = (fun (self: Hax_base.Int.t_HaxInt) -> true); + f_concretize_post = (fun (self: Hax_base.Int.t_HaxInt) (out: t_U16) -> true); + f_concretize + = + fun (self: Hax_base.Int.t_HaxInt) -> + { f_v = Hax_base.Int.BaseImpl.impl__rem self Hax_base.Int.BaseSpec.v_WORDSIZE_16_ } <: t_U16 + } + +let impl_30__checked_concretize (x: Hax_base.Int.t_HaxInt) : // Core.Option.t_Option + option t_U16 = + if + Hax_base.Int.BaseImpl.impl__lt ( + // Core.Clone.f_clone #Hax_base.Int.t_HaxInt + // #FStar.Tactics.Typeclasses.solve + x + <: + Hax_base.Int.t_HaxInt) + Hax_base.Int.BaseSpec.v_WORDSIZE_16_ + then // Core.Option.Option_Some + Some ({ f_v = x } <: t_U16) <: // Core.Option.t_Option + option t_U16 + else // Core.Option.Option_None + None <: // Core.Option.t_Option + option t_U16 + +let impl_30__wrapping_concretize (x: Hax_base.Int.t_HaxInt) : t_U16 = + { f_v = Hax_base.Int.BaseImpl.impl__rem x Hax_base.Int.BaseSpec.v_WORDSIZE_16_ } <: t_U16 + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_34: Core.Clone.t_Clone t_U16 = +// { +// f_clone_pre = (fun (self: t_U16) -> true); +// f_clone_post = (fun (self: t_U16) (out: t_U16) -> true); +// f_clone +// = +// fun (self: t_U16) -> +// { f_v = self.f_v } +// <: +// t_U16 +// } + +type t_U32 = { f_v:Hax_base.Int.t_HaxInt } + +[@@ FStar.Tactics.Typeclasses.tcinstance] +let impl_54: t_Constants t_U32 = + { + f_ZERO = { f_v = Hax_base.Int.BaseSpec.impl_2__ZERO } <: t_U32; + f_ONE = { f_v = Hax_base.Int.BaseSpec.impl_1__xH } <: t_U32; + f_MIN = { f_v = Hax_base.Int.BaseSpec.impl_2__ZERO } ; // f_ZERO; + f_MAX = { f_v = Hax_base.Int.BaseSpec.v_WORDSIZE_32_SUB_1_ } <: t_U32 + } + +[@@ FStar.Tactics.Typeclasses.tcinstance] +let impl_56: Hax_core.Coerce.t_Concretization Hax_base.Int.t_HaxInt t_U32 = + { + f_concretize_pre = (fun (self: Hax_base.Int.t_HaxInt) -> true); + f_concretize_post = (fun (self: Hax_base.Int.t_HaxInt) (out: t_U32) -> true); + f_concretize + = + fun (self: Hax_base.Int.t_HaxInt) -> + { f_v = Hax_base.Int.BaseImpl.impl__rem self Hax_base.Int.BaseSpec.v_WORDSIZE_32_ } <: t_U32 + } + +let impl_57__checked_concretize (x: Hax_base.Int.t_HaxInt) : // Core.Option.t_Option + option t_U32 = + if + Hax_base.Int.BaseImpl.impl__lt ( + x + <: + Hax_base.Int.t_HaxInt) + Hax_base.Int.BaseSpec.v_WORDSIZE_32_ + then // Core.Option.Option_Some + Some ({ f_v = x } <: t_U32) <: // Core.Option.t_Option + option t_U32 + else // Core.Option.Option_None + None <: // Core.Option.t_Option + option t_U32 + +let impl_57__wrapping_concretize (x: Hax_base.Int.t_HaxInt) : t_U32 = + { f_v = Hax_base.Int.BaseImpl.impl__rem x Hax_base.Int.BaseSpec.v_WORDSIZE_32_ } <: t_U32 + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_61: t_U32 = +// { +// f_clone_pre = (fun (self: t_U32) -> true); +// f_clone_post = (fun (self: t_U32) (out: t_U32) -> true); +// f_clone +// = +// fun (self: t_U32) -> +// { f_v = self.f_v } +// <: +// t_U32 +// } + +type t_U64 = { f_v:Hax_base.Int.t_HaxInt } + +[@@ FStar.Tactics.Typeclasses.tcinstance] +let impl_81: t_Constants t_U64 = + { + f_ZERO = { f_v = Hax_base.Int.BaseSpec.impl_2__ZERO } <: t_U64; + f_ONE = { f_v = Hax_base.Int.BaseSpec.impl_1__xH } <: t_U64; + f_MIN = { f_v = Hax_base.Int.BaseSpec.impl_2__ZERO }; // f_ZERO; + f_MAX = { f_v = Hax_base.Int.BaseSpec.v_WORDSIZE_64_SUB_1_ } <: t_U64 + } + +[@@ FStar.Tactics.Typeclasses.tcinstance] +let impl_83: Hax_core.Coerce.t_Concretization Hax_base.Int.t_HaxInt t_U64 = + { + f_concretize_pre = (fun (self: Hax_base.Int.t_HaxInt) -> true); + f_concretize_post = (fun (self: Hax_base.Int.t_HaxInt) (out: t_U64) -> true); + f_concretize + = + fun (self: Hax_base.Int.t_HaxInt) -> + { f_v = Hax_base.Int.BaseImpl.impl__rem self Hax_base.Int.BaseSpec.v_WORDSIZE_64_ } <: t_U64 + } + +let impl_84__checked_concretize (x: Hax_base.Int.t_HaxInt) : // Core.Option.t_Option + option t_U64 = + if + Hax_base.Int.BaseImpl.impl__lt ( + x + <: + Hax_base.Int.t_HaxInt) + Hax_base.Int.BaseSpec.v_WORDSIZE_64_ + then // Core.Option.Option_Some + Some ({ f_v + = x } <: t_U64) <: // Core.Option.t_Option + option t_U64 + else // Core.Option.Option_None + None <: // Core.Option.t_Option + option t_U64 + +let impl_84__wrapping_concretize (x: Hax_base.Int.t_HaxInt) : t_U64 = + { f_v = Hax_base.Int.BaseImpl.impl__rem x Hax_base.Int.BaseSpec.v_WORDSIZE_64_ } <: t_U64 + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_88: t_U64 = +// { +// f_clone_pre = (fun (self: t_U64) -> true); +// f_clone_post = (fun (self: t_U64) (out: t_U64) -> true); +// f_clone +// = +// fun (self: t_U64) -> +// { f_v = self.f_v } +// <: +// t_U64 +// } + +type t_U8 = { f_v:Hax_base.Int.t_HaxInt } + +[@@ FStar.Tactics.Typeclasses.tcinstance] +let impl: t_Constants t_U8 = + { + f_ZERO = { f_v = Hax_base.Int.BaseSpec.impl_2__ZERO } <: t_U8; + f_ONE = { f_v = Hax_base.Int.BaseSpec.impl_1__xH } <: t_U8; + f_MIN = { f_v = Hax_base.Int.BaseSpec.impl_2__ZERO }; + f_MAX = { f_v = Hax_base.Int.BaseSpec.v_WORDSIZE_8_SUB_1_ } <: t_U8 + } + +[@@ FStar.Tactics.Typeclasses.tcinstance] +let impl_2: Hax_core.Coerce.t_Concretization Hax_base.Int.t_HaxInt t_U8 = + { + f_concretize_pre = (fun (self: Hax_base.Int.t_HaxInt) -> true); + f_concretize_post = (fun (self: Hax_base.Int.t_HaxInt) (out: t_U8) -> true); + f_concretize + = + fun (self: Hax_base.Int.t_HaxInt) -> + { f_v = Hax_base.Int.BaseImpl.impl__rem self Hax_base.Int.BaseSpec.v_WORDSIZE_8_ } <: t_U8 + } + +let impl_3__checked_concretize (x: Hax_base.Int.t_HaxInt) : // Core.Option.t_Option + option t_U8 = + if + Hax_base.Int.BaseImpl.impl__lt ( + x + <: + Hax_base.Int.t_HaxInt) + Hax_base.Int.BaseSpec.v_WORDSIZE_8_ + then Some // Core.Option.Option_Some + ({ f_v + = x } <: t_U8) <: // Core.Option.t_Option + option t_U8 + else // Core.Option.Option_None + None <: // Core.Option.t_Option + option t_U8 + +let impl_3__wrapping_concretize (x: Hax_base.Int.t_HaxInt) : t_U8 = + { f_v = Hax_base.Int.BaseImpl.impl__rem x Hax_base.Int.BaseSpec.v_WORDSIZE_8_ } <: t_U8 + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_7: Core.Clone.t_Clone t_U8 = +// { +// f_clone_pre = (fun (self: t_U8) -> true); +// f_clone_post = (fun (self: t_U8) (out: t_U8) -> true); +// f_clone +// = +// fun (self: t_U8) -> +// { f_v = self.f_v } +// <: +// t_U8 +// } + +[@@ FStar.Tactics.Typeclasses.tcinstance] +let impl_1: Hax_core.Coerce.t_Abstraction t_U8 = + { + f_AbstractType = Hax_base.Int.t_HaxInt; + f_lift_pre = (fun (self: t_U8) -> true); + f_lift_post = (fun (self: t_U8) (out: Hax_base.Int.t_HaxInt) -> true); + f_lift = fun (self: t_U8) -> self.f_v + } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_8: Core.Cmp.t_PartialEq t_U8 t_U8 = +// { +// f_eq_pre = (fun (self: t_U8) (rhs: t_U8) -> true); +// f_eq_post = (fun (self: t_U8) (rhs: t_U8) (out: bool) -> true); +// f_eq +// = +// fun (self: t_U8) (rhs: t_U8) -> +// Hax_base.Int.BaseImpl.impl__eq (Hax_core.Coerce.f_lift #t_U8 +// #FStar.Tactics.Typeclasses.solve +// (self <: t_U8) +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U8 +// #FStar.Tactics.Typeclasses.solve +// (rhs <: t_U8) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_9: Core.Cmp.t_PartialOrd t_U8 t_U8 = +// { +// _super_9014672428308350468 = FStar.Tactics.Typeclasses.solve; +// f_partial_cmp_pre = (fun (self: t_U8) (rhs: t_U8) -> true); +// f_partial_cmp_post +// = +// (fun (self: t_U8) (rhs: t_U8) (out: // Core.Option.t_Option +// option Core.Cmp.t_Ordering) -> true); +// f_partial_cmp +// = +// fun (self: t_U8) (rhs: t_U8) -> +// Core.Option.// Option_Some +// (match +// Hax +// Some _base.Int.BaseImpl.impl__cmp (Hax_core.Coerce.f_lift #t_U8 +// #FStar.Tactics.Typeclasses.solve +// (Core.Clone.f_clone #t_U8 #FStar.Tactics.Typeclasses.solve self <: t_U8) +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U8 +// #FStar.Tactics.Typeclasses.solve +// (Core.Clone.f_clone #t_U8 #FStar.Tactics.Typeclasses.solve rhs <: t_U8) +// <: +// Hax_base.Int.t_HaxInt) +// with +// | Hax_base.Int.CMP_LESS -> Core.Cmp.Ordering_Less <: Core.Cmp.t_Ordering +// | Hax_base.Int.CMP_EQ -> Core.Cmp.Ordering_Equal <: Core.Cmp.t_Ordering +// | Hax_base.Int.CMP_GREATER -> Core.Cmp.Ordering_Greater <: Core.Cmp.t_Ordering) +// <: +// // Core.Option.t_Option +// option Core.Cmp.t_Ordering +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_28: Hax_core.Coerce.t_Abstraction t_U16 = +// { +// f_AbstractType = Hax_base.Int.t_HaxInt; +// f_lift_pre = (fun (self: t_U16) -> true); +// f_lift_post = (fun (self: t_U16) (out: Hax_base.Int.t_HaxInt) -> true); +// f_lift = fun (self: t_U16) -> self.f_v +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_35: Core.Cmp.t_PartialEq t_U16 t_U16 = +// { +// f_eq_pre = (fun (self: t_U16) (rhs: t_U16) -> true); +// f_eq_post = (fun (self: t_U16) (rhs: t_U16) (out: bool) -> true); +// f_eq +// = +// fun (self: t_U16) (rhs: t_U16) -> +// Hax_base.Int.BaseImpl.impl__eq (Hax_core.Coerce.f_lift #t_U16 +// #FStar.Tactics.Typeclasses.solve +// (Core.Clone.f_clone #t_U16 #FStar.Tactics.Typeclasses.solve self <: t_U16) +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U16 +// #FStar.Tactics.Typeclasses.solve +// (Core.Clone.f_clone #t_U16 #FStar.Tactics.Typeclasses.solve rhs <: t_U16) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_36: Core.Cmp.t_PartialOrd t_U16 t_U16 = +// { +// _super_9014672428308350468 = FStar.Tactics.Typeclasses.solve; +// f_partial_cmp_pre = (fun (self: t_U16) (rhs: t_U16) -> true); +// f_partial_cmp_post +// = +// (fun (self: t_U16) (rhs: t_U16) (out: // Core.Option.t_Option +// option Core.Cmp.t_Ordering) -> true); +// f_partial_cmp +// = +// fun (self: t_U16) (rhs: t_U16) -> +// Core.Option.// Option_Some +// (match +// Hax +// Some _base.Int.BaseImpl.impl__cmp (Hax_core.Coerce.f_lift #t_U16 +// #FStar.Tactics.Typeclasses.solve +// (Core.Clone.f_clone #t_U16 #FStar.Tactics.Typeclasses.solve self <: t_U16) +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U16 +// #FStar.Tactics.Typeclasses.solve +// (Core.Clone.f_clone #t_U16 #FStar.Tactics.Typeclasses.solve rhs <: t_U16) +// <: +// Hax_base.Int.t_HaxInt) +// with +// | Hax_base.Int.CMP_LESS -> Core.Cmp.Ordering_Less <: Core.Cmp.t_Ordering +// | Hax_base.Int.CMP_EQ -> Core.Cmp.Ordering_Equal <: Core.Cmp.t_Ordering +// | Hax_base.Int.CMP_GREATER -> Core.Cmp.Ordering_Greater <: Core.Cmp.t_Ordering) +// <: +// // Core.Option.t_Option +// option Core.Cmp.t_Ordering +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_55: Hax_core.Coerce.t_Abstraction t_U32 = +// { +// f_AbstractType = Hax_base.Int.t_HaxInt; +// f_lift_pre = (fun (self: t_U32) -> true); +// f_lift_post = (fun (self: t_U32) (out: Hax_base.Int.t_HaxInt) -> true); +// f_lift = fun (self: t_U32) -> self.f_v +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_62: Core.Cmp.t_PartialEq t_U32 t_U32 = +// { +// f_eq_pre = (fun (self: t_U32) (rhs: t_U32) -> true); +// f_eq_post = (fun (self: t_U32) (rhs: t_U32) (out: bool) -> true); +// f_eq +// = +// fun (self: t_U32) (rhs: t_U32) -> +// Hax_base.Int.BaseImpl.impl__eq (Hax_core.Coerce.f_lift #t_U32 +// #FStar.Tactics.Typeclasses.solve +// (Core.Clone.f_clone #t_U32 #FStar.Tactics.Typeclasses.solve self <: t_U32) +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U32 +// #FStar.Tactics.Typeclasses.solve +// (Core.Clone.f_clone #t_U32 #FStar.Tactics.Typeclasses.solve rhs <: t_U32) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_63: Core.Cmp.t_PartialOrd t_U32 t_U32 = +// { +// _super_9014672428308350468 = FStar.Tactics.Typeclasses.solve; +// f_partial_cmp_pre = (fun (self: t_U32) (rhs: t_U32) -> true); +// f_partial_cmp_post +// = +// (fun (self: t_U32) (rhs: t_U32) (out: // Core.Option.t_Option +// option Core.Cmp.t_Ordering) -> true); +// f_partial_cmp +// = +// fun (self: t_U32) (rhs: t_U32) -> +// Core.Option.// Option_Some +// (match +// Hax +// Some _base.Int.BaseImpl.impl__cmp (Hax_core.Coerce.f_lift #t_U32 +// #FStar.Tactics.Typeclasses.solve +// (Core.Clone.f_clone #t_U32 #FStar.Tactics.Typeclasses.solve self <: t_U32) +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U32 +// #FStar.Tactics.Typeclasses.solve +// (Core.Clone.f_clone #t_U32 #FStar.Tactics.Typeclasses.solve rhs <: t_U32) +// <: +// Hax_base.Int.t_HaxInt) +// with +// | Hax_base.Int.CMP_LESS -> Core.Cmp.Ordering_Less <: Core.Cmp.t_Ordering +// | Hax_base.Int.CMP_EQ -> Core.Cmp.Ordering_Equal <: Core.Cmp.t_Ordering +// | Hax_base.Int.CMP_GREATER -> Core.Cmp.Ordering_Greater <: Core.Cmp.t_Ordering) +// <: +// // Core.Option.t_Option +// option Core.Cmp.t_Ordering +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_82: Hax_core.Coerce.t_Abstraction t_U64 = +// { +// f_AbstractType = Hax_base.Int.t_HaxInt; +// f_lift_pre = (fun (self: t_U64) -> true); +// f_lift_post = (fun (self: t_U64) (out: Hax_base.Int.t_HaxInt) -> true); +// f_lift = fun (self: t_U64) -> self.f_v +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_89: Core.Cmp.t_PartialEq t_U64 t_U64 = +// { +// f_eq_pre = (fun (self: t_U64) (rhs: t_U64) -> true); +// f_eq_post = (fun (self: t_U64) (rhs: t_U64) (out: bool) -> true); +// f_eq +// = +// fun (self: t_U64) (rhs: t_U64) -> +// Hax_base.Int.BaseImpl.impl__eq (Hax_core.Coerce.f_lift #t_U64 +// #FStar.Tactics.Typeclasses.solve +// (Core.Clone.f_clone #t_U64 #FStar.Tactics.Typeclasses.solve self <: t_U64) +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U64 +// #FStar.Tactics.Typeclasses.solve +// (Core.Clone.f_clone #t_U64 #FStar.Tactics.Typeclasses.solve rhs <: t_U64) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_90: Core.Cmp.t_PartialOrd t_U64 t_U64 = +// { +// _super_9014672428308350468 = FStar.Tactics.Typeclasses.solve; +// f_partial_cmp_pre = (fun (self: t_U64) (rhs: t_U64) -> true); +// f_partial_cmp_post +// = +// (fun (self: t_U64) (rhs: t_U64) (out: // Core.Option.t_Option +// option Core.Cmp.t_Ordering) -> true); +// f_partial_cmp +// = +// fun (self: t_U64) (rhs: t_U64) -> +// Core.Option.// Option_Some +// (match +// Hax +// Some _base.Int.BaseImpl.impl__cmp (Hax_core.Coerce.f_lift #t_U64 +// #FStar.Tactics.Typeclasses.solve +// (Core.Clone.f_clone #t_U64 #FStar.Tactics.Typeclasses.solve self <: t_U64) +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U64 +// #FStar.Tactics.Typeclasses.solve +// (Core.Clone.f_clone #t_U64 #FStar.Tactics.Typeclasses.solve rhs <: t_U64) +// <: +// Hax_base.Int.t_HaxInt) +// with +// | Hax_base.Int.CMP_LESS -> Core.Cmp.Ordering_Less <: Core.Cmp.t_Ordering +// | Hax_base.Int.CMP_EQ -> Core.Cmp.Ordering_Equal <: Core.Cmp.t_Ordering +// | Hax_base.Int.CMP_GREATER -> Core.Cmp.Ordering_Greater <: Core.Cmp.t_Ordering) +// <: +// // Core.Option.t_Option +// option Core.Cmp.t_Ordering +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_109: Hax_core.Coerce.t_Abstraction t_U128 = +// { +// f_AbstractType = Hax_base.Int.t_HaxInt; +// f_lift_pre = (fun (self: t_U128) -> true); +// f_lift_post = (fun (self: t_U128) (out: Hax_base.Int.t_HaxInt) -> true); +// f_lift = fun (self: t_U128) -> self.f_v +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_116: Core.Cmp.t_PartialEq t_U128 t_U128 = +// { +// f_eq_pre = (fun (self: t_U128) (rhs: t_U128) -> true); +// f_eq_post = (fun (self: t_U128) (rhs: t_U128) (out: bool) -> true); +// f_eq +// = +// fun (self: t_U128) (rhs: t_U128) -> +// Hax_base.Int.BaseImpl.impl__eq (Hax_core.Coerce.f_lift #t_U128 +// #FStar.Tactics.Typeclasses.solve +// (Core.Clone.f_clone #t_U128 #FStar.Tactics.Typeclasses.solve self <: t_U128) +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U128 +// #FStar.Tactics.Typeclasses.solve +// (Core.Clone.f_clone #t_U128 #FStar.Tactics.Typeclasses.solve rhs <: t_U128) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_117: Core.Cmp.t_PartialOrd t_U128 t_U128 = +// { +// _super_9014672428308350468 = FStar.Tactics.Typeclasses.solve; +// f_partial_cmp_pre = (fun (self: t_U128) (rhs: t_U128) -> true); +// f_partial_cmp_post +// = +// (fun (self: t_U128) (rhs: t_U128) (out: // Core.Option.t_Option +// option Core.Cmp.t_Ordering) -> true); +// f_partial_cmp +// = +// fun (self: t_U128) (rhs: t_U128) -> +// // Core.Option.Option_Some +// Some +// (match +// Hax_base.Int.BaseImpl.impl__cmp (Hax_core.Coerce.f_lift #t_U128 +// #FStar.Tactics.Typeclasses.solve +// (Core.Clone.f_clone #t_U128 #FStar.Tactics.Typeclasses.solve self <: t_U128) +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U128 +// #FStar.Tactics.Typeclasses.solve +// (Core.Clone.f_clone #t_U128 #FStar.Tactics.Typeclasses.solve rhs <: t_U128) +// <: +// Hax_base.Int.t_HaxInt) +// with +// | Hax_base.Int.CMP_LESS -> Core.Cmp.Ordering_Less <: Core.Cmp.t_Ordering +// | Hax_base.Int.CMP_EQ -> Core.Cmp.Ordering_Equal <: Core.Cmp.t_Ordering +// | Hax_base.Int.CMP_GREATER -> Core.Cmp.Ordering_Greater <: Core.Cmp.t_Ordering) +// <: +// // Core.Option.t_Option +// option // Core.Cmp.t_Ordering +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_4: Core.Ops.Arith.t_Neg t_U8 = +// { +// f_Output = t_U8; +// f_neg_pre = (fun (self: t_U8) -> true); +// f_neg_post = (fun (self: t_U8) (out: t_U8) -> true); +// f_neg +// = +// fun (self: t_U8) -> +// Hax_core.Coerce.f_concretize #Hax_base.Int.t_HaxInt +// #t_U8 +// #FStar.Tactics.Typeclasses.solve +// (Hax_base.Int.BaseImpl.impl__sub Hax_base.Int.BaseSpec.v_WORDSIZE_8_ +// (Hax_base.Int.BaseImpl.impl__rem (Hax_core.Coerce.f_lift #t_U8 +// #FStar.Tactics.Typeclasses.solve +// self +// <: +// Hax_base.Int.t_HaxInt) +// Hax_base.Int.BaseSpec.v_WORDSIZE_8_ +// <: +// Hax_base.Int.t_HaxInt) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_10: Core.Ops.Arith.t_Mul t_U8 t_U8 = +// { +// f_Output = t_U8; +// f_mul_pre = (fun (self: t_U8) (rhs: t_U8) -> true); +// f_mul_post = (fun (self: t_U8) (rhs: t_U8) (out: t_U8) -> true); +// f_mul +// = +// fun (self: t_U8) (rhs: t_U8) -> +// Hax_core.Coerce.f_concretize #Hax_base.Int.t_HaxInt +// #t_U8 +// #FStar.Tactics.Typeclasses.solve +// (Hax_base.Int.BaseImpl.impl__mul (Hax_core.Coerce.f_lift #t_U8 +// #FStar.Tactics.Typeclasses.solve +// self +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U8 #FStar.Tactics.Typeclasses.solve rhs +// <: +// Hax_base.Int.t_HaxInt) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_11: Core.Ops.Arith.t_Rem t_U8 t_U8 = +// { +// f_Output = t_U8; +// f_rem_pre = (fun (self: t_U8) (rhs: t_U8) -> true); +// f_rem_post = (fun (self: t_U8) (rhs: t_U8) (out: t_U8) -> true); +// f_rem +// = +// fun (self: t_U8) (rhs: t_U8) -> +// Hax_core.Coerce.f_concretize #Hax_base.Int.t_HaxInt +// #t_U8 +// #FStar.Tactics.Typeclasses.solve +// (Hax_base.Int.BaseImpl.impl__rem (Hax_core.Coerce.f_lift #t_U8 +// #FStar.Tactics.Typeclasses.solve +// self +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U8 #FStar.Tactics.Typeclasses.solve rhs +// <: +// Hax_base.Int.t_HaxInt) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_12: Core.Ops.Arith.t_Add t_U8 t_U8 = +// { +// f_Output = t_U8; +// f_add_pre = (fun (self: t_U8) (rhs: t_U8) -> true); +// f_add_post = (fun (self: t_U8) (rhs: t_U8) (out: t_U8) -> true); +// f_add +// = +// fun (self: t_U8) (rhs: t_U8) -> +// Hax_core.Coerce.f_concretize #Hax_base.Int.t_HaxInt +// #t_U8 +// #FStar.Tactics.Typeclasses.solve +// (Hax_base.Int.BaseImpl.impl__add (Hax_core.Coerce.f_lift #t_U8 +// #FStar.Tactics.Typeclasses.solve +// self +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U8 #FStar.Tactics.Typeclasses.solve rhs +// <: +// Hax_base.Int.t_HaxInt) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_13: Core.Ops.Arith.t_Div t_U8 t_U8 = +// { +// f_Output = t_U8; +// f_div_pre = (fun (self: t_U8) (rhs: t_U8) -> true); +// f_div_post = (fun (self: t_U8) (rhs: t_U8) (out: t_U8) -> true); +// f_div +// = +// fun (self: t_U8) (rhs: t_U8) -> +// Hax_core.Coerce.f_concretize #Hax_base.Int.t_HaxInt +// #t_U8 +// #FStar.Tactics.Typeclasses.solve +// (Hax_base.Int.BaseImpl.impl__div (Hax_core.Coerce.f_lift #t_U8 +// #FStar.Tactics.Typeclasses.solve +// self +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U8 #FStar.Tactics.Typeclasses.solve rhs +// <: +// Hax_base.Int.t_HaxInt) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_14: Core.Ops.Bit.t_Shl t_U8 t_U8 = +// { +// f_Output = t_U8; +// f_shl_pre = (fun (self: t_U8) (rhs: t_U8) -> true); +// f_shl_post = (fun (self: t_U8) (rhs: t_U8) (out: t_U8) -> true); +// f_shl +// = +// fun (self: t_U8) (rhs: t_U8) -> +// Hax_core.Coerce.f_concretize #Hax_base.Int.t_HaxInt +// #t_U8 +// #FStar.Tactics.Typeclasses.solve +// (Hax_base.Int.BaseImpl.impl__shl (Hax_core.Coerce.f_lift #t_U8 +// #FStar.Tactics.Typeclasses.solve +// self +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U8 #FStar.Tactics.Typeclasses.solve rhs +// <: +// Hax_base.Int.t_HaxInt) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_15: Core.Ops.Bit.t_Shl t_U8 t_U16 = +// { +// f_Output = t_U8; +// f_shl_pre = (fun (self: t_U8) (rhs: t_U16) -> true); +// f_shl_post = (fun (self: t_U8) (rhs: t_U16) (out: t_U8) -> true); +// f_shl +// = +// fun (self: t_U8) (rhs: t_U16) -> +// Hax_core.Coerce.f_concretize #Hax_base.Int.t_HaxInt +// #t_U8 +// #FStar.Tactics.Typeclasses.solve +// (Hax_base.Int.BaseImpl.impl__shl (Hax_core.Coerce.f_lift #t_U8 +// #FStar.Tactics.Typeclasses.solve +// self +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U16 #FStar.Tactics.Typeclasses.solve rhs +// <: +// Hax_base.Int.t_HaxInt) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_16: Core.Ops.Bit.t_Shl t_U8 t_U32 = +// { +// f_Output = t_U8; +// f_shl_pre = (fun (self: t_U8) (rhs: t_U32) -> true); +// f_shl_post = (fun (self: t_U8) (rhs: t_U32) (out: t_U8) -> true); +// f_shl +// = +// fun (self: t_U8) (rhs: t_U32) -> +// Hax_core.Coerce.f_concretize #Hax_base.Int.t_HaxInt +// #t_U8 +// #FStar.Tactics.Typeclasses.solve +// (Hax_base.Int.BaseImpl.impl__shl (Hax_core.Coerce.f_lift #t_U8 +// #FStar.Tactics.Typeclasses.solve +// self +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U32 #FStar.Tactics.Typeclasses.solve rhs +// <: +// Hax_base.Int.t_HaxInt) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_17: Core.Ops.Bit.t_Shl t_U8 t_U64 = +// { +// f_Output = t_U8; +// f_shl_pre = (fun (self: t_U8) (rhs: t_U64) -> true); +// f_shl_post = (fun (self: t_U8) (rhs: t_U64) (out: t_U8) -> true); +// f_shl +// = +// fun (self: t_U8) (rhs: t_U64) -> +// Hax_core.Coerce.f_concretize #Hax_base.Int.t_HaxInt +// #t_U8 +// #FStar.Tactics.Typeclasses.solve +// (Hax_base.Int.BaseImpl.impl__shl (Hax_core.Coerce.f_lift #t_U8 +// #FStar.Tactics.Typeclasses.solve +// self +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U64 #FStar.Tactics.Typeclasses.solve rhs +// <: +// Hax_base.Int.t_HaxInt) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_18: Core.Ops.Bit.t_Shl t_U8 t_U128 = +// { +// f_Output = t_U8; +// f_shl_pre = (fun (self: t_U8) (rhs: t_U128) -> true); +// f_shl_post = (fun (self: t_U8) (rhs: t_U128) (out: t_U8) -> true); +// f_shl +// = +// fun (self: t_U8) (rhs: t_U128) -> +// Hax_core.Coerce.f_concretize #Hax_base.Int.t_HaxInt +// #t_U8 +// #FStar.Tactics.Typeclasses.solve +// (Hax_base.Int.BaseImpl.impl__shl (Hax_core.Coerce.f_lift #t_U8 +// #FStar.Tactics.Typeclasses.solve +// self +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U128 #FStar.Tactics.Typeclasses.solve rhs +// <: +// Hax_base.Int.t_HaxInt) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_19: Core.Ops.Bit.t_Shr t_U8 t_U8 = +// { +// f_Output = t_U8; +// f_shr_pre = (fun (self: t_U8) (rhs: t_U8) -> true); +// f_shr_post = (fun (self: t_U8) (rhs: t_U8) (out: t_U8) -> true); +// f_shr +// = +// fun (self: t_U8) (rhs: t_U8) -> +// Hax_core.Coerce.f_concretize #Hax_base.Int.t_HaxInt +// #t_U8 +// #FStar.Tactics.Typeclasses.solve +// (Hax_base.Int.BaseImpl.impl__shr (Hax_core.Coerce.f_lift #t_U8 +// #FStar.Tactics.Typeclasses.solve +// self +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U8 #FStar.Tactics.Typeclasses.solve rhs +// <: +// Hax_base.Int.t_HaxInt) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_20: Core.Ops.Bit.t_Shr t_U8 t_U16 = +// { +// f_Output = t_U8; +// f_shr_pre = (fun (self: t_U8) (rhs: t_U16) -> true); +// f_shr_post = (fun (self: t_U8) (rhs: t_U16) (out: t_U8) -> true); +// f_shr +// = +// fun (self: t_U8) (rhs: t_U16) -> +// Hax_core.Coerce.f_concretize #Hax_base.Int.t_HaxInt +// #t_U8 +// #FStar.Tactics.Typeclasses.solve +// (Hax_base.Int.BaseImpl.impl__shr (Hax_core.Coerce.f_lift #t_U8 +// #FStar.Tactics.Typeclasses.solve +// self +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U16 #FStar.Tactics.Typeclasses.solve rhs +// <: +// Hax_base.Int.t_HaxInt) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_21: Core.Ops.Bit.t_Shr t_U8 t_U32 = +// { +// f_Output = t_U8; +// f_shr_pre = (fun (self: t_U8) (rhs: t_U32) -> true); +// f_shr_post = (fun (self: t_U8) (rhs: t_U32) (out: t_U8) -> true); +// f_shr +// = +// fun (self: t_U8) (rhs: t_U32) -> +// Hax_core.Coerce.f_concretize #Hax_base.Int.t_HaxInt +// #t_U8 +// #FStar.Tactics.Typeclasses.solve +// (Hax_base.Int.BaseImpl.impl__shr (Hax_core.Coerce.f_lift #t_U8 +// #FStar.Tactics.Typeclasses.solve +// self +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U32 #FStar.Tactics.Typeclasses.solve rhs +// <: +// Hax_base.Int.t_HaxInt) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_22: Core.Ops.Bit.t_Shr t_U8 t_U64 = +// { +// f_Output = t_U8; +// f_shr_pre = (fun (self: t_U8) (rhs: t_U64) -> true); +// f_shr_post = (fun (self: t_U8) (rhs: t_U64) (out: t_U8) -> true); +// f_shr +// = +// fun (self: t_U8) (rhs: t_U64) -> +// Hax_core.Coerce.f_concretize #Hax_base.Int.t_HaxInt +// #t_U8 +// #FStar.Tactics.Typeclasses.solve +// (Hax_base.Int.BaseImpl.impl__shr (Hax_core.Coerce.f_lift #t_U8 +// #FStar.Tactics.Typeclasses.solve +// self +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U64 #FStar.Tactics.Typeclasses.solve rhs +// <: +// Hax_base.Int.t_HaxInt) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_23: Core.Ops.Bit.t_Shr t_U8 t_U128 = +// { +// f_Output = t_U8; +// f_shr_pre = (fun (self: t_U8) (rhs: t_U128) -> true); +// f_shr_post = (fun (self: t_U8) (rhs: t_U128) (out: t_U8) -> true); +// f_shr +// = +// fun (self: t_U8) (rhs: t_U128) -> +// Hax_core.Coerce.f_concretize #Hax_base.Int.t_HaxInt +// #t_U8 +// #FStar.Tactics.Typeclasses.solve +// (Hax_base.Int.BaseImpl.impl__shr (Hax_core.Coerce.f_lift #t_U8 +// #FStar.Tactics.Typeclasses.solve +// self +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U128 #FStar.Tactics.Typeclasses.solve rhs +// <: +// Hax_base.Int.t_HaxInt) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_24: Core.Ops.Bit.t_BitXor t_U8 t_U8 = +// { +// f_Output = t_U8; +// f_bitxor_pre = (fun (self: t_U8) (rhs: t_U8) -> true); +// f_bitxor_post = (fun (self: t_U8) (rhs: t_U8) (out: t_U8) -> true); +// f_bitxor +// = +// fun (self: t_U8) (rhs: t_U8) -> +// Hax_core.Coerce.f_concretize #Hax_base.Int.t_HaxInt +// #t_U8 +// #FStar.Tactics.Typeclasses.solve +// (Hax_base.Int.BaseImpl.impl__bitxor (Hax_core.Coerce.f_lift #t_U8 +// #FStar.Tactics.Typeclasses.solve +// self +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U8 #FStar.Tactics.Typeclasses.solve rhs +// <: +// Hax_base.Int.t_HaxInt) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_25: Core.Ops.Bit.t_BitAnd t_U8 t_U8 = +// { +// f_Output = t_U8; +// f_bitand_pre = (fun (self: t_U8) (rhs: t_U8) -> true); +// f_bitand_post = (fun (self: t_U8) (rhs: t_U8) (out: t_U8) -> true); +// f_bitand +// = +// fun (self: t_U8) (rhs: t_U8) -> +// Hax_core.Coerce.f_concretize #Hax_base.Int.t_HaxInt +// #t_U8 +// #FStar.Tactics.Typeclasses.solve +// (Hax_base.Int.BaseImpl.impl__bitand (Hax_core.Coerce.f_lift #t_U8 +// #FStar.Tactics.Typeclasses.solve +// self +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U8 #FStar.Tactics.Typeclasses.solve rhs +// <: +// Hax_base.Int.t_HaxInt) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_26: Core.Ops.Bit.t_BitOr t_U8 t_U8 = +// { +// f_Output = t_U8; +// f_bitor_pre = (fun (self: t_U8) (rhs: t_U8) -> true); +// f_bitor_post = (fun (self: t_U8) (rhs: t_U8) (out: t_U8) -> true); +// f_bitor +// = +// fun (self: t_U8) (rhs: t_U8) -> +// Hax_core.Coerce.f_concretize #Hax_base.Int.t_HaxInt +// #t_U8 +// #FStar.Tactics.Typeclasses.solve +// (Hax_base.Int.BaseImpl.impl__bitor (Hax_core.Coerce.f_lift #t_U8 +// #FStar.Tactics.Typeclasses.solve +// self +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U8 #FStar.Tactics.Typeclasses.solve rhs +// <: +// Hax_base.Int.t_HaxInt) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_31: Core.Ops.Arith.t_Neg t_U16 = +// { +// f_Output = t_U16; +// f_neg_pre = (fun (self: t_U16) -> true); +// f_neg_post = (fun (self: t_U16) (out: t_U16) -> true); +// f_neg +// = +// fun (self: t_U16) -> +// Hax_core.Coerce.f_concretize #Hax_base.Int.t_HaxInt +// #t_U16 +// #FStar.Tactics.Typeclasses.solve +// (Hax_base.Int.BaseImpl.impl__sub Hax_base.Int.BaseSpec.v_WORDSIZE_16_ +// (Hax_base.Int.BaseImpl.impl__rem (Hax_core.Coerce.f_lift #t_U16 +// #FStar.Tactics.Typeclasses.solve +// self +// <: +// Hax_base.Int.t_HaxInt) +// Hax_base.Int.BaseSpec.v_WORDSIZE_16_ +// <: +// Hax_base.Int.t_HaxInt) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_37: Core.Ops.Arith.t_Mul t_U16 t_U16 = +// { +// f_Output = t_U16; +// f_mul_pre = (fun (self: t_U16) (rhs: t_U16) -> true); +// f_mul_post = (fun (self: t_U16) (rhs: t_U16) (out: t_U16) -> true); +// f_mul +// = +// fun (self: t_U16) (rhs: t_U16) -> +// Hax_core.Coerce.f_concretize #Hax_base.Int.t_HaxInt +// #t_U16 +// #FStar.Tactics.Typeclasses.solve +// (Hax_base.Int.BaseImpl.impl__mul (Hax_core.Coerce.f_lift #t_U16 +// #FStar.Tactics.Typeclasses.solve +// self +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U16 #FStar.Tactics.Typeclasses.solve rhs +// <: +// Hax_base.Int.t_HaxInt) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_38: Core.Ops.Arith.t_Rem t_U16 t_U16 = +// { +// f_Output = t_U16; +// f_rem_pre = (fun (self: t_U16) (rhs: t_U16) -> true); +// f_rem_post = (fun (self: t_U16) (rhs: t_U16) (out: t_U16) -> true); +// f_rem +// = +// fun (self: t_U16) (rhs: t_U16) -> +// Hax_core.Coerce.f_concretize #Hax_base.Int.t_HaxInt +// #t_U16 +// #FStar.Tactics.Typeclasses.solve +// (Hax_base.Int.BaseImpl.impl__rem (Hax_core.Coerce.f_lift #t_U16 +// #FStar.Tactics.Typeclasses.solve +// self +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U16 #FStar.Tactics.Typeclasses.solve rhs +// <: +// Hax_base.Int.t_HaxInt) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_39: Core.Ops.Arith.t_Add t_U16 t_U16 = +// { +// f_Output = t_U16; +// f_add_pre = (fun (self: t_U16) (rhs: t_U16) -> true); +// f_add_post = (fun (self: t_U16) (rhs: t_U16) (out: t_U16) -> true); +// f_add +// = +// fun (self: t_U16) (rhs: t_U16) -> +// Hax_core.Coerce.f_concretize #Hax_base.Int.t_HaxInt +// #t_U16 +// #FStar.Tactics.Typeclasses.solve +// (Hax_base.Int.BaseImpl.impl__add (Hax_core.Coerce.f_lift #t_U16 +// #FStar.Tactics.Typeclasses.solve +// self +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U16 #FStar.Tactics.Typeclasses.solve rhs +// <: +// Hax_base.Int.t_HaxInt) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_40: Core.Ops.Arith.t_Div t_U16 t_U16 = +// { +// f_Output = t_U16; +// f_div_pre = (fun (self: t_U16) (rhs: t_U16) -> true); +// f_div_post = (fun (self: t_U16) (rhs: t_U16) (out: t_U16) -> true); +// f_div +// = +// fun (self: t_U16) (rhs: t_U16) -> +// Hax_core.Coerce.f_concretize #Hax_base.Int.t_HaxInt +// #t_U16 +// #FStar.Tactics.Typeclasses.solve +// (Hax_base.Int.BaseImpl.impl__div (Hax_core.Coerce.f_lift #t_U16 +// #FStar.Tactics.Typeclasses.solve +// self +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U16 #FStar.Tactics.Typeclasses.solve rhs +// <: +// Hax_base.Int.t_HaxInt) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_41: Core.Ops.Bit.t_Shl t_U16 t_U8 = +// { +// f_Output = t_U16; +// f_shl_pre = (fun (self: t_U16) (rhs: t_U8) -> true); +// f_shl_post = (fun (self: t_U16) (rhs: t_U8) (out: t_U16) -> true); +// f_shl +// = +// fun (self: t_U16) (rhs: t_U8) -> +// Hax_core.Coerce.f_concretize #Hax_base.Int.t_HaxInt +// #t_U16 +// #FStar.Tactics.Typeclasses.solve +// (Hax_base.Int.BaseImpl.impl__shl (Hax_core.Coerce.f_lift #t_U16 +// #FStar.Tactics.Typeclasses.solve +// self +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U8 #FStar.Tactics.Typeclasses.solve rhs +// <: +// Hax_base.Int.t_HaxInt) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_42: Core.Ops.Bit.t_Shl t_U16 t_U16 = +// { +// f_Output = t_U16; +// f_shl_pre = (fun (self: t_U16) (rhs: t_U16) -> true); +// f_shl_post = (fun (self: t_U16) (rhs: t_U16) (out: t_U16) -> true); +// f_shl +// = +// fun (self: t_U16) (rhs: t_U16) -> +// Hax_core.Coerce.f_concretize #Hax_base.Int.t_HaxInt +// #t_U16 +// #FStar.Tactics.Typeclasses.solve +// (Hax_base.Int.BaseImpl.impl__shl (Hax_core.Coerce.f_lift #t_U16 +// #FStar.Tactics.Typeclasses.solve +// self +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U16 #FStar.Tactics.Typeclasses.solve rhs +// <: +// Hax_base.Int.t_HaxInt) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_43: Core.Ops.Bit.t_Shl t_U16 t_U32 = +// { +// f_Output = t_U16; +// f_shl_pre = (fun (self: t_U16) (rhs: t_U32) -> true); +// f_shl_post = (fun (self: t_U16) (rhs: t_U32) (out: t_U16) -> true); +// f_shl +// = +// fun (self: t_U16) (rhs: t_U32) -> +// Hax_core.Coerce.f_concretize #Hax_base.Int.t_HaxInt +// #t_U16 +// #FStar.Tactics.Typeclasses.solve +// (Hax_base.Int.BaseImpl.impl__shl (Hax_core.Coerce.f_lift #t_U16 +// #FStar.Tactics.Typeclasses.solve +// self +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U32 #FStar.Tactics.Typeclasses.solve rhs +// <: +// Hax_base.Int.t_HaxInt) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_44: Core.Ops.Bit.t_Shl t_U16 t_U64 = +// { +// f_Output = t_U16; +// f_shl_pre = (fun (self: t_U16) (rhs: t_U64) -> true); +// f_shl_post = (fun (self: t_U16) (rhs: t_U64) (out: t_U16) -> true); +// f_shl +// = +// fun (self: t_U16) (rhs: t_U64) -> +// Hax_core.Coerce.f_concretize #Hax_base.Int.t_HaxInt +// #t_U16 +// #FStar.Tactics.Typeclasses.solve +// (Hax_base.Int.BaseImpl.impl__shl (Hax_core.Coerce.f_lift #t_U16 +// #FStar.Tactics.Typeclasses.solve +// self +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U64 #FStar.Tactics.Typeclasses.solve rhs +// <: +// Hax_base.Int.t_HaxInt) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_45: Core.Ops.Bit.t_Shl t_U16 t_U128 = +// { +// f_Output = t_U16; +// f_shl_pre = (fun (self: t_U16) (rhs: t_U128) -> true); +// f_shl_post = (fun (self: t_U16) (rhs: t_U128) (out: t_U16) -> true); +// f_shl +// = +// fun (self: t_U16) (rhs: t_U128) -> +// Hax_core.Coerce.f_concretize #Hax_base.Int.t_HaxInt +// #t_U16 +// #FStar.Tactics.Typeclasses.solve +// (Hax_base.Int.BaseImpl.impl__shl (Hax_core.Coerce.f_lift #t_U16 +// #FStar.Tactics.Typeclasses.solve +// self +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U128 #FStar.Tactics.Typeclasses.solve rhs +// <: +// Hax_base.Int.t_HaxInt) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_46: Core.Ops.Bit.t_Shr t_U16 t_U8 = +// { +// f_Output = t_U16; +// f_shr_pre = (fun (self: t_U16) (rhs: t_U8) -> true); +// f_shr_post = (fun (self: t_U16) (rhs: t_U8) (out: t_U16) -> true); +// f_shr +// = +// fun (self: t_U16) (rhs: t_U8) -> +// Hax_core.Coerce.f_concretize #Hax_base.Int.t_HaxInt +// #t_U16 +// #FStar.Tactics.Typeclasses.solve +// (Hax_base.Int.BaseImpl.impl__shr (Hax_core.Coerce.f_lift #t_U16 +// #FStar.Tactics.Typeclasses.solve +// self +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U8 #FStar.Tactics.Typeclasses.solve rhs +// <: +// Hax_base.Int.t_HaxInt) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_47: Core.Ops.Bit.t_Shr t_U16 t_U16 = +// { +// f_Output = t_U16; +// f_shr_pre = (fun (self: t_U16) (rhs: t_U16) -> true); +// f_shr_post = (fun (self: t_U16) (rhs: t_U16) (out: t_U16) -> true); +// f_shr +// = +// fun (self: t_U16) (rhs: t_U16) -> +// Hax_core.Coerce.f_concretize #Hax_base.Int.t_HaxInt +// #t_U16 +// #FStar.Tactics.Typeclasses.solve +// (Hax_base.Int.BaseImpl.impl__shr (Hax_core.Coerce.f_lift #t_U16 +// #FStar.Tactics.Typeclasses.solve +// self +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U16 #FStar.Tactics.Typeclasses.solve rhs +// <: +// Hax_base.Int.t_HaxInt) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_48: Core.Ops.Bit.t_Shr t_U16 t_U32 = +// { +// f_Output = t_U16; +// f_shr_pre = (fun (self: t_U16) (rhs: t_U32) -> true); +// f_shr_post = (fun (self: t_U16) (rhs: t_U32) (out: t_U16) -> true); +// f_shr +// = +// fun (self: t_U16) (rhs: t_U32) -> +// Hax_core.Coerce.f_concretize #Hax_base.Int.t_HaxInt +// #t_U16 +// #FStar.Tactics.Typeclasses.solve +// (Hax_base.Int.BaseImpl.impl__shr (Hax_core.Coerce.f_lift #t_U16 +// #FStar.Tactics.Typeclasses.solve +// self +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U32 #FStar.Tactics.Typeclasses.solve rhs +// <: +// Hax_base.Int.t_HaxInt) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_49: Core.Ops.Bit.t_Shr t_U16 t_U64 = +// { +// f_Output = t_U16; +// f_shr_pre = (fun (self: t_U16) (rhs: t_U64) -> true); +// f_shr_post = (fun (self: t_U16) (rhs: t_U64) (out: t_U16) -> true); +// f_shr +// = +// fun (self: t_U16) (rhs: t_U64) -> +// Hax_core.Coerce.f_concretize #Hax_base.Int.t_HaxInt +// #t_U16 +// #FStar.Tactics.Typeclasses.solve +// (Hax_base.Int.BaseImpl.impl__shr (Hax_core.Coerce.f_lift #t_U16 +// #FStar.Tactics.Typeclasses.solve +// self +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U64 #FStar.Tactics.Typeclasses.solve rhs +// <: +// Hax_base.Int.t_HaxInt) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_50: Core.Ops.Bit.t_Shr t_U16 t_U128 = +// { +// f_Output = t_U16; +// f_shr_pre = (fun (self: t_U16) (rhs: t_U128) -> true); +// f_shr_post = (fun (self: t_U16) (rhs: t_U128) (out: t_U16) -> true); +// f_shr +// = +// fun (self: t_U16) (rhs: t_U128) -> +// Hax_core.Coerce.f_concretize #Hax_base.Int.t_HaxInt +// #t_U16 +// #FStar.Tactics.Typeclasses.solve +// (Hax_base.Int.BaseImpl.impl__shr (Hax_core.Coerce.f_lift #t_U16 +// #FStar.Tactics.Typeclasses.solve +// self +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U128 #FStar.Tactics.Typeclasses.solve rhs +// <: +// Hax_base.Int.t_HaxInt) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_51: Core.Ops.Bit.t_BitXor t_U16 t_U16 = +// { +// f_Output = t_U16; +// f_bitxor_pre = (fun (self: t_U16) (rhs: t_U16) -> true); +// f_bitxor_post = (fun (self: t_U16) (rhs: t_U16) (out: t_U16) -> true); +// f_bitxor +// = +// fun (self: t_U16) (rhs: t_U16) -> +// Hax_core.Coerce.f_concretize #Hax_base.Int.t_HaxInt +// #t_U16 +// #FStar.Tactics.Typeclasses.solve +// (Hax_base.Int.BaseImpl.impl__bitxor (Hax_core.Coerce.f_lift #t_U16 +// #FStar.Tactics.Typeclasses.solve +// self +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U16 #FStar.Tactics.Typeclasses.solve rhs +// <: +// Hax_base.Int.t_HaxInt) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_52: Core.Ops.Bit.t_BitAnd t_U16 t_U16 = +// { +// f_Output = t_U16; +// f_bitand_pre = (fun (self: t_U16) (rhs: t_U16) -> true); +// f_bitand_post = (fun (self: t_U16) (rhs: t_U16) (out: t_U16) -> true); +// f_bitand +// = +// fun (self: t_U16) (rhs: t_U16) -> +// Hax_core.Coerce.f_concretize #Hax_base.Int.t_HaxInt +// #t_U16 +// #FStar.Tactics.Typeclasses.solve +// (Hax_base.Int.BaseImpl.impl__bitand (Hax_core.Coerce.f_lift #t_U16 +// #FStar.Tactics.Typeclasses.solve +// self +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U16 #FStar.Tactics.Typeclasses.solve rhs +// <: +// Hax_base.Int.t_HaxInt) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_53: Core.Ops.Bit.t_BitOr t_U16 t_U16 = +// { +// f_Output = t_U16; +// f_bitor_pre = (fun (self: t_U16) (rhs: t_U16) -> true); +// f_bitor_post = (fun (self: t_U16) (rhs: t_U16) (out: t_U16) -> true); +// f_bitor +// = +// fun (self: t_U16) (rhs: t_U16) -> +// Hax_core.Coerce.f_concretize #Hax_base.Int.t_HaxInt +// #t_U16 +// #FStar.Tactics.Typeclasses.solve +// (Hax_base.Int.BaseImpl.impl__bitor (Hax_core.Coerce.f_lift #t_U16 +// #FStar.Tactics.Typeclasses.solve +// self +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U16 #FStar.Tactics.Typeclasses.solve rhs +// <: +// Hax_base.Int.t_HaxInt) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_58: Core.Ops.Arith.t_Neg t_U32 = +// { +// f_Output = t_U32; +// f_neg_pre = (fun (self: t_U32) -> true); +// f_neg_post = (fun (self: t_U32) (out: t_U32) -> true); +// f_neg +// = +// fun (self: t_U32) -> +// Hax_core.Coerce.f_concretize #Hax_base.Int.t_HaxInt +// #t_U32 +// #FStar.Tactics.Typeclasses.solve +// (Hax_base.Int.BaseImpl.impl__sub Hax_base.Int.BaseSpec.v_WORDSIZE_32_ +// (Hax_base.Int.BaseImpl.impl__rem (Hax_core.Coerce.f_lift #t_U32 +// #FStar.Tactics.Typeclasses.solve +// self +// <: +// Hax_base.Int.t_HaxInt) +// Hax_base.Int.BaseSpec.v_WORDSIZE_32_ +// <: +// Hax_base.Int.t_HaxInt) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_64: Core.Ops.Arith.t_Mul t_U32 t_U32 = +// { +// f_Output = t_U32; +// f_mul_pre = (fun (self: t_U32) (rhs: t_U32) -> true); +// f_mul_post = (fun (self: t_U32) (rhs: t_U32) (out: t_U32) -> true); +// f_mul +// = +// fun (self: t_U32) (rhs: t_U32) -> +// Hax_core.Coerce.f_concretize #Hax_base.Int.t_HaxInt +// #t_U32 +// #FStar.Tactics.Typeclasses.solve +// (Hax_base.Int.BaseImpl.impl__mul (Hax_core.Coerce.f_lift #t_U32 +// #FStar.Tactics.Typeclasses.solve +// self +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U32 #FStar.Tactics.Typeclasses.solve rhs +// <: +// Hax_base.Int.t_HaxInt) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_65: Core.Ops.Arith.t_Rem t_U32 t_U32 = +// { +// f_Output = t_U32; +// f_rem_pre = (fun (self: t_U32) (rhs: t_U32) -> true); +// f_rem_post = (fun (self: t_U32) (rhs: t_U32) (out: t_U32) -> true); +// f_rem +// = +// fun (self: t_U32) (rhs: t_U32) -> +// Hax_core.Coerce.f_concretize #Hax_base.Int.t_HaxInt +// #t_U32 +// #FStar.Tactics.Typeclasses.solve +// (Hax_base.Int.BaseImpl.impl__rem (Hax_core.Coerce.f_lift #t_U32 +// #FStar.Tactics.Typeclasses.solve +// self +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U32 #FStar.Tactics.Typeclasses.solve rhs +// <: +// Hax_base.Int.t_HaxInt) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_66: Core.Ops.Arith.t_Add t_U32 t_U32 = +// { +// f_Output = t_U32; +// f_add_pre = (fun (self: t_U32) (rhs: t_U32) -> true); +// f_add_post = (fun (self: t_U32) (rhs: t_U32) (out: t_U32) -> true); +// f_add +// = +// fun (self: t_U32) (rhs: t_U32) -> +// Hax_core.Coerce.f_concretize #Hax_base.Int.t_HaxInt +// #t_U32 +// #FStar.Tactics.Typeclasses.solve +// (Hax_base.Int.BaseImpl.impl__add (Hax_core.Coerce.f_lift #t_U32 +// #FStar.Tactics.Typeclasses.solve +// self +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U32 #FStar.Tactics.Typeclasses.solve rhs +// <: +// Hax_base.Int.t_HaxInt) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_67: Core.Ops.Arith.t_Div t_U32 t_U32 = +// { +// f_Output = t_U32; +// f_div_pre = (fun (self: t_U32) (rhs: t_U32) -> true); +// f_div_post = (fun (self: t_U32) (rhs: t_U32) (out: t_U32) -> true); +// f_div +// = +// fun (self: t_U32) (rhs: t_U32) -> +// Hax_core.Coerce.f_concretize #Hax_base.Int.t_HaxInt +// #t_U32 +// #FStar.Tactics.Typeclasses.solve +// (Hax_base.Int.BaseImpl.impl__div (Hax_core.Coerce.f_lift #t_U32 +// #FStar.Tactics.Typeclasses.solve +// self +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U32 #FStar.Tactics.Typeclasses.solve rhs +// <: +// Hax_base.Int.t_HaxInt) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_68: Core.Ops.Bit.t_Shl t_U32 t_U8 = +// { +// f_Output = t_U32; +// f_shl_pre = (fun (self: t_U32) (rhs: t_U8) -> true); +// f_shl_post = (fun (self: t_U32) (rhs: t_U8) (out: t_U32) -> true); +// f_shl +// = +// fun (self: t_U32) (rhs: t_U8) -> +// Hax_core.Coerce.f_concretize #Hax_base.Int.t_HaxInt +// #t_U32 +// #FStar.Tactics.Typeclasses.solve +// (Hax_base.Int.BaseImpl.impl__shl (Hax_core.Coerce.f_lift #t_U32 +// #FStar.Tactics.Typeclasses.solve +// self +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U8 #FStar.Tactics.Typeclasses.solve rhs +// <: +// Hax_base.Int.t_HaxInt) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_69: Core.Ops.Bit.t_Shl t_U32 t_U16 = +// { +// f_Output = t_U32; +// f_shl_pre = (fun (self: t_U32) (rhs: t_U16) -> true); +// f_shl_post = (fun (self: t_U32) (rhs: t_U16) (out: t_U32) -> true); +// f_shl +// = +// fun (self: t_U32) (rhs: t_U16) -> +// Hax_core.Coerce.f_concretize #Hax_base.Int.t_HaxInt +// #t_U32 +// #FStar.Tactics.Typeclasses.solve +// (Hax_base.Int.BaseImpl.impl__shl (Hax_core.Coerce.f_lift #t_U32 +// #FStar.Tactics.Typeclasses.solve +// self +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U16 #FStar.Tactics.Typeclasses.solve rhs +// <: +// Hax_base.Int.t_HaxInt) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_70: Core.Ops.Bit.t_Shl t_U32 t_U32 = +// { +// f_Output = t_U32; +// f_shl_pre = (fun (self: t_U32) (rhs: t_U32) -> true); +// f_shl_post = (fun (self: t_U32) (rhs: t_U32) (out: t_U32) -> true); +// f_shl +// = +// fun (self: t_U32) (rhs: t_U32) -> +// Hax_core.Coerce.f_concretize #Hax_base.Int.t_HaxInt +// #t_U32 +// #FStar.Tactics.Typeclasses.solve +// (Hax_base.Int.BaseImpl.impl__shl (Hax_core.Coerce.f_lift #t_U32 +// #FStar.Tactics.Typeclasses.solve +// self +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U32 #FStar.Tactics.Typeclasses.solve rhs +// <: +// Hax_base.Int.t_HaxInt) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_71: Core.Ops.Bit.t_Shl t_U32 t_U64 = +// { +// f_Output = t_U32; +// f_shl_pre = (fun (self: t_U32) (rhs: t_U64) -> true); +// f_shl_post = (fun (self: t_U32) (rhs: t_U64) (out: t_U32) -> true); +// f_shl +// = +// fun (self: t_U32) (rhs: t_U64) -> +// Hax_core.Coerce.f_concretize #Hax_base.Int.t_HaxInt +// #t_U32 +// #FStar.Tactics.Typeclasses.solve +// (Hax_base.Int.BaseImpl.impl__shl (Hax_core.Coerce.f_lift #t_U32 +// #FStar.Tactics.Typeclasses.solve +// self +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U64 #FStar.Tactics.Typeclasses.solve rhs +// <: +// Hax_base.Int.t_HaxInt) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_72: Core.Ops.Bit.t_Shl t_U32 t_U128 = +// { +// f_Output = t_U32; +// f_shl_pre = (fun (self: t_U32) (rhs: t_U128) -> true); +// f_shl_post = (fun (self: t_U32) (rhs: t_U128) (out: t_U32) -> true); +// f_shl +// = +// fun (self: t_U32) (rhs: t_U128) -> +// Hax_core.Coerce.f_concretize #Hax_base.Int.t_HaxInt +// #t_U32 +// #FStar.Tactics.Typeclasses.solve +// (Hax_base.Int.BaseImpl.impl__shl (Hax_core.Coerce.f_lift #t_U32 +// #FStar.Tactics.Typeclasses.solve +// self +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U128 #FStar.Tactics.Typeclasses.solve rhs +// <: +// Hax_base.Int.t_HaxInt) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_73: Core.Ops.Bit.t_Shr t_U32 t_U8 = +// { +// f_Output = t_U32; +// f_shr_pre = (fun (self: t_U32) (rhs: t_U8) -> true); +// f_shr_post = (fun (self: t_U32) (rhs: t_U8) (out: t_U32) -> true); +// f_shr +// = +// fun (self: t_U32) (rhs: t_U8) -> +// Hax_core.Coerce.f_concretize #Hax_base.Int.t_HaxInt +// #t_U32 +// #FStar.Tactics.Typeclasses.solve +// (Hax_base.Int.BaseImpl.impl__shr (Hax_core.Coerce.f_lift #t_U32 +// #FStar.Tactics.Typeclasses.solve +// self +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U8 #FStar.Tactics.Typeclasses.solve rhs +// <: +// Hax_base.Int.t_HaxInt) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_74: Core.Ops.Bit.t_Shr t_U32 t_U16 = +// { +// f_Output = t_U32; +// f_shr_pre = (fun (self: t_U32) (rhs: t_U16) -> true); +// f_shr_post = (fun (self: t_U32) (rhs: t_U16) (out: t_U32) -> true); +// f_shr +// = +// fun (self: t_U32) (rhs: t_U16) -> +// Hax_core.Coerce.f_concretize #Hax_base.Int.t_HaxInt +// #t_U32 +// #FStar.Tactics.Typeclasses.solve +// (Hax_base.Int.BaseImpl.impl__shr (Hax_core.Coerce.f_lift #t_U32 +// #FStar.Tactics.Typeclasses.solve +// self +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U16 #FStar.Tactics.Typeclasses.solve rhs +// <: +// Hax_base.Int.t_HaxInt) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_75: Core.Ops.Bit.t_Shr t_U32 t_U32 = +// { +// f_Output = t_U32; +// f_shr_pre = (fun (self: t_U32) (rhs: t_U32) -> true); +// f_shr_post = (fun (self: t_U32) (rhs: t_U32) (out: t_U32) -> true); +// f_shr +// = +// fun (self: t_U32) (rhs: t_U32) -> +// Hax_core.Coerce.f_concretize #Hax_base.Int.t_HaxInt +// #t_U32 +// #FStar.Tactics.Typeclasses.solve +// (Hax_base.Int.BaseImpl.impl__shr (Hax_core.Coerce.f_lift #t_U32 +// #FStar.Tactics.Typeclasses.solve +// self +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U32 #FStar.Tactics.Typeclasses.solve rhs +// <: +// Hax_base.Int.t_HaxInt) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_76: Core.Ops.Bit.t_Shr t_U32 t_U64 = +// { +// f_Output = t_U32; +// f_shr_pre = (fun (self: t_U32) (rhs: t_U64) -> true); +// f_shr_post = (fun (self: t_U32) (rhs: t_U64) (out: t_U32) -> true); +// f_shr +// = +// fun (self: t_U32) (rhs: t_U64) -> +// Hax_core.Coerce.f_concretize #Hax_base.Int.t_HaxInt +// #t_U32 +// #FStar.Tactics.Typeclasses.solve +// (Hax_base.Int.BaseImpl.impl__shr (Hax_core.Coerce.f_lift #t_U32 +// #FStar.Tactics.Typeclasses.solve +// self +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U64 #FStar.Tactics.Typeclasses.solve rhs +// <: +// Hax_base.Int.t_HaxInt) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_77: Core.Ops.Bit.t_Shr t_U32 t_U128 = +// { +// f_Output = t_U32; +// f_shr_pre = (fun (self: t_U32) (rhs: t_U128) -> true); +// f_shr_post = (fun (self: t_U32) (rhs: t_U128) (out: t_U32) -> true); +// f_shr +// = +// fun (self: t_U32) (rhs: t_U128) -> +// Hax_core.Coerce.f_concretize #Hax_base.Int.t_HaxInt +// #t_U32 +// #FStar.Tactics.Typeclasses.solve +// (Hax_base.Int.BaseImpl.impl__shr (Hax_core.Coerce.f_lift #t_U32 +// #FStar.Tactics.Typeclasses.solve +// self +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U128 #FStar.Tactics.Typeclasses.solve rhs +// <: +// Hax_base.Int.t_HaxInt) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_78: Core.Ops.Bit.t_BitXor t_U32 t_U32 = +// { +// f_Output = t_U32; +// f_bitxor_pre = (fun (self: t_U32) (rhs: t_U32) -> true); +// f_bitxor_post = (fun (self: t_U32) (rhs: t_U32) (out: t_U32) -> true); +// f_bitxor +// = +// fun (self: t_U32) (rhs: t_U32) -> +// Hax_core.Coerce.f_concretize #Hax_base.Int.t_HaxInt +// #t_U32 +// #FStar.Tactics.Typeclasses.solve +// (Hax_base.Int.BaseImpl.impl__bitxor (Hax_core.Coerce.f_lift #t_U32 +// #FStar.Tactics.Typeclasses.solve +// self +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U32 #FStar.Tactics.Typeclasses.solve rhs +// <: +// Hax_base.Int.t_HaxInt) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_79: Core.Ops.Bit.t_BitAnd t_U32 t_U32 = +// { +// f_Output = t_U32; +// f_bitand_pre = (fun (self: t_U32) (rhs: t_U32) -> true); +// f_bitand_post = (fun (self: t_U32) (rhs: t_U32) (out: t_U32) -> true); +// f_bitand +// = +// fun (self: t_U32) (rhs: t_U32) -> +// Hax_core.Coerce.f_concretize #Hax_base.Int.t_HaxInt +// #t_U32 +// #FStar.Tactics.Typeclasses.solve +// (Hax_base.Int.BaseImpl.impl__bitand (Hax_core.Coerce.f_lift #t_U32 +// #FStar.Tactics.Typeclasses.solve +// self +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U32 #FStar.Tactics.Typeclasses.solve rhs +// <: +// Hax_base.Int.t_HaxInt) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_80: Core.Ops.Bit.t_BitOr t_U32 t_U32 = +// { +// f_Output = t_U32; +// f_bitor_pre = (fun (self: t_U32) (rhs: t_U32) -> true); +// f_bitor_post = (fun (self: t_U32) (rhs: t_U32) (out: t_U32) -> true); +// f_bitor +// = +// fun (self: t_U32) (rhs: t_U32) -> +// Hax_core.Coerce.f_concretize #Hax_base.Int.t_HaxInt +// #t_U32 +// #FStar.Tactics.Typeclasses.solve +// (Hax_base.Int.BaseImpl.impl__bitor (Hax_core.Coerce.f_lift #t_U32 +// #FStar.Tactics.Typeclasses.solve +// self +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U32 #FStar.Tactics.Typeclasses.solve rhs +// <: +// Hax_base.Int.t_HaxInt) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_85: Core.Ops.Arith.t_Neg t_U64 = +// { +// f_Output = t_U64; +// f_neg_pre = (fun (self: t_U64) -> true); +// f_neg_post = (fun (self: t_U64) (out: t_U64) -> true); +// f_neg +// = +// fun (self: t_U64) -> +// Hax_core.Coerce.f_concretize #Hax_base.Int.t_HaxInt +// #t_U64 +// #FStar.Tactics.Typeclasses.solve +// (Hax_base.Int.BaseImpl.impl__sub Hax_base.Int.BaseSpec.v_WORDSIZE_64_ +// (Hax_base.Int.BaseImpl.impl__rem (Hax_core.Coerce.f_lift #t_U64 +// #FStar.Tactics.Typeclasses.solve +// self +// <: +// Hax_base.Int.t_HaxInt) +// Hax_base.Int.BaseSpec.v_WORDSIZE_64_ +// <: +// Hax_base.Int.t_HaxInt) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_91: Core.Ops.Arith.t_Mul t_U64 t_U64 = +// { +// f_Output = t_U64; +// f_mul_pre = (fun (self: t_U64) (rhs: t_U64) -> true); +// f_mul_post = (fun (self: t_U64) (rhs: t_U64) (out: t_U64) -> true); +// f_mul +// = +// fun (self: t_U64) (rhs: t_U64) -> +// Hax_core.Coerce.f_concretize #Hax_base.Int.t_HaxInt +// #t_U64 +// #FStar.Tactics.Typeclasses.solve +// (Hax_base.Int.BaseImpl.impl__mul (Hax_core.Coerce.f_lift #t_U64 +// #FStar.Tactics.Typeclasses.solve +// self +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U64 #FStar.Tactics.Typeclasses.solve rhs +// <: +// Hax_base.Int.t_HaxInt) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_92: Core.Ops.Arith.t_Rem t_U64 t_U64 = +// { +// f_Output = t_U64; +// f_rem_pre = (fun (self: t_U64) (rhs: t_U64) -> true); +// f_rem_post = (fun (self: t_U64) (rhs: t_U64) (out: t_U64) -> true); +// f_rem +// = +// fun (self: t_U64) (rhs: t_U64) -> +// Hax_core.Coerce.f_concretize #Hax_base.Int.t_HaxInt +// #t_U64 +// #FStar.Tactics.Typeclasses.solve +// (Hax_base.Int.BaseImpl.impl__rem (Hax_core.Coerce.f_lift #t_U64 +// #FStar.Tactics.Typeclasses.solve +// self +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U64 #FStar.Tactics.Typeclasses.solve rhs +// <: +// Hax_base.Int.t_HaxInt) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_93: Core.Ops.Arith.t_Add t_U64 t_U64 = +// { +// f_Output = t_U64; +// f_add_pre = (fun (self: t_U64) (rhs: t_U64) -> true); +// f_add_post = (fun (self: t_U64) (rhs: t_U64) (out: t_U64) -> true); +// f_add +// = +// fun (self: t_U64) (rhs: t_U64) -> +// Hax_core.Coerce.f_concretize #Hax_base.Int.t_HaxInt +// #t_U64 +// #FStar.Tactics.Typeclasses.solve +// (Hax_base.Int.BaseImpl.impl__add (Hax_core.Coerce.f_lift #t_U64 +// #FStar.Tactics.Typeclasses.solve +// self +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U64 #FStar.Tactics.Typeclasses.solve rhs +// <: +// Hax_base.Int.t_HaxInt) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_94: Core.Ops.Arith.t_Div t_U64 t_U64 = +// { +// f_Output = t_U64; +// f_div_pre = (fun (self: t_U64) (rhs: t_U64) -> true); +// f_div_post = (fun (self: t_U64) (rhs: t_U64) (out: t_U64) -> true); +// f_div +// = +// fun (self: t_U64) (rhs: t_U64) -> +// Hax_core.Coerce.f_concretize #Hax_base.Int.t_HaxInt +// #t_U64 +// #FStar.Tactics.Typeclasses.solve +// (Hax_base.Int.BaseImpl.impl__div (Hax_core.Coerce.f_lift #t_U64 +// #FStar.Tactics.Typeclasses.solve +// self +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U64 #FStar.Tactics.Typeclasses.solve rhs +// <: +// Hax_base.Int.t_HaxInt) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_95: Core.Ops.Bit.t_Shl t_U64 t_U8 = +// { +// f_Output = t_U64; +// f_shl_pre = (fun (self: t_U64) (rhs: t_U8) -> true); +// f_shl_post = (fun (self: t_U64) (rhs: t_U8) (out: t_U64) -> true); +// f_shl +// = +// fun (self: t_U64) (rhs: t_U8) -> +// Hax_core.Coerce.f_concretize #Hax_base.Int.t_HaxInt +// #t_U64 +// #FStar.Tactics.Typeclasses.solve +// (Hax_base.Int.BaseImpl.impl__shl (Hax_core.Coerce.f_lift #t_U64 +// #FStar.Tactics.Typeclasses.solve +// self +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U8 #FStar.Tactics.Typeclasses.solve rhs +// <: +// Hax_base.Int.t_HaxInt) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_96: Core.Ops.Bit.t_Shl t_U64 t_U16 = +// { +// f_Output = t_U64; +// f_shl_pre = (fun (self: t_U64) (rhs: t_U16) -> true); +// f_shl_post = (fun (self: t_U64) (rhs: t_U16) (out: t_U64) -> true); +// f_shl +// = +// fun (self: t_U64) (rhs: t_U16) -> +// Hax_core.Coerce.f_concretize #Hax_base.Int.t_HaxInt +// #t_U64 +// #FStar.Tactics.Typeclasses.solve +// (Hax_base.Int.BaseImpl.impl__shl (Hax_core.Coerce.f_lift #t_U64 +// #FStar.Tactics.Typeclasses.solve +// self +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U16 #FStar.Tactics.Typeclasses.solve rhs +// <: +// Hax_base.Int.t_HaxInt) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_97: Core.Ops.Bit.t_Shl t_U64 t_U32 = +// { +// f_Output = t_U64; +// f_shl_pre = (fun (self: t_U64) (rhs: t_U32) -> true); +// f_shl_post = (fun (self: t_U64) (rhs: t_U32) (out: t_U64) -> true); +// f_shl +// = +// fun (self: t_U64) (rhs: t_U32) -> +// Hax_core.Coerce.f_concretize #Hax_base.Int.t_HaxInt +// #t_U64 +// #FStar.Tactics.Typeclasses.solve +// (Hax_base.Int.BaseImpl.impl__shl (Hax_core.Coerce.f_lift #t_U64 +// #FStar.Tactics.Typeclasses.solve +// self +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U32 #FStar.Tactics.Typeclasses.solve rhs +// <: +// Hax_base.Int.t_HaxInt) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_98: Core.Ops.Bit.t_Shl t_U64 t_U64 = +// { +// f_Output = t_U64; +// f_shl_pre = (fun (self: t_U64) (rhs: t_U64) -> true); +// f_shl_post = (fun (self: t_U64) (rhs: t_U64) (out: t_U64) -> true); +// f_shl +// = +// fun (self: t_U64) (rhs: t_U64) -> +// Hax_core.Coerce.f_concretize #Hax_base.Int.t_HaxInt +// #t_U64 +// #FStar.Tactics.Typeclasses.solve +// (Hax_base.Int.BaseImpl.impl__shl (Hax_core.Coerce.f_lift #t_U64 +// #FStar.Tactics.Typeclasses.solve +// self +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U64 #FStar.Tactics.Typeclasses.solve rhs +// <: +// Hax_base.Int.t_HaxInt) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_99: Core.Ops.Bit.t_Shl t_U64 t_U128 = +// { +// f_Output = t_U64; +// f_shl_pre = (fun (self: t_U64) (rhs: t_U128) -> true); +// f_shl_post = (fun (self: t_U64) (rhs: t_U128) (out: t_U64) -> true); +// f_shl +// = +// fun (self: t_U64) (rhs: t_U128) -> +// Hax_core.Coerce.f_concretize #Hax_base.Int.t_HaxInt +// #t_U64 +// #FStar.Tactics.Typeclasses.solve +// (Hax_base.Int.BaseImpl.impl__shl (Hax_core.Coerce.f_lift #t_U64 +// #FStar.Tactics.Typeclasses.solve +// self +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U128 #FStar.Tactics.Typeclasses.solve rhs +// <: +// Hax_base.Int.t_HaxInt) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_100: Core.Ops.Bit.t_Shr t_U64 t_U8 = +// { +// f_Output = t_U64; +// f_shr_pre = (fun (self: t_U64) (rhs: t_U8) -> true); +// f_shr_post = (fun (self: t_U64) (rhs: t_U8) (out: t_U64) -> true); +// f_shr +// = +// fun (self: t_U64) (rhs: t_U8) -> +// Hax_core.Coerce.f_concretize #Hax_base.Int.t_HaxInt +// #t_U64 +// #FStar.Tactics.Typeclasses.solve +// (Hax_base.Int.BaseImpl.impl__shr (Hax_core.Coerce.f_lift #t_U64 +// #FStar.Tactics.Typeclasses.solve +// self +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U8 #FStar.Tactics.Typeclasses.solve rhs +// <: +// Hax_base.Int.t_HaxInt) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_101: Core.Ops.Bit.t_Shr t_U64 t_U16 = +// { +// f_Output = t_U64; +// f_shr_pre = (fun (self: t_U64) (rhs: t_U16) -> true); +// f_shr_post = (fun (self: t_U64) (rhs: t_U16) (out: t_U64) -> true); +// f_shr +// = +// fun (self: t_U64) (rhs: t_U16) -> +// Hax_core.Coerce.f_concretize #Hax_base.Int.t_HaxInt +// #t_U64 +// #FStar.Tactics.Typeclasses.solve +// (Hax_base.Int.BaseImpl.impl__shr (Hax_core.Coerce.f_lift #t_U64 +// #FStar.Tactics.Typeclasses.solve +// self +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U16 #FStar.Tactics.Typeclasses.solve rhs +// <: +// Hax_base.Int.t_HaxInt) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_102: Core.Ops.Bit.t_Shr t_U64 t_U32 = +// { +// f_Output = t_U64; +// f_shr_pre = (fun (self: t_U64) (rhs: t_U32) -> true); +// f_shr_post = (fun (self: t_U64) (rhs: t_U32) (out: t_U64) -> true); +// f_shr +// = +// fun (self: t_U64) (rhs: t_U32) -> +// Hax_core.Coerce.f_concretize #Hax_base.Int.t_HaxInt +// #t_U64 +// #FStar.Tactics.Typeclasses.solve +// (Hax_base.Int.BaseImpl.impl__shr (Hax_core.Coerce.f_lift #t_U64 +// #FStar.Tactics.Typeclasses.solve +// self +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U32 #FStar.Tactics.Typeclasses.solve rhs +// <: +// Hax_base.Int.t_HaxInt) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_103: Core.Ops.Bit.t_Shr t_U64 t_U64 = +// { +// f_Output = t_U64; +// f_shr_pre = (fun (self: t_U64) (rhs: t_U64) -> true); +// f_shr_post = (fun (self: t_U64) (rhs: t_U64) (out: t_U64) -> true); +// f_shr +// = +// fun (self: t_U64) (rhs: t_U64) -> +// Hax_core.Coerce.f_concretize #Hax_base.Int.t_HaxInt +// #t_U64 +// #FStar.Tactics.Typeclasses.solve +// (Hax_base.Int.BaseImpl.impl__shr (Hax_core.Coerce.f_lift #t_U64 +// #FStar.Tactics.Typeclasses.solve +// self +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U64 #FStar.Tactics.Typeclasses.solve rhs +// <: +// Hax_base.Int.t_HaxInt) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_104: Core.Ops.Bit.t_Shr t_U64 t_U128 = +// { +// f_Output = t_U64; +// f_shr_pre = (fun (self: t_U64) (rhs: t_U128) -> true); +// f_shr_post = (fun (self: t_U64) (rhs: t_U128) (out: t_U64) -> true); +// f_shr +// = +// fun (self: t_U64) (rhs: t_U128) -> +// Hax_core.Coerce.f_concretize #Hax_base.Int.t_HaxInt +// #t_U64 +// #FStar.Tactics.Typeclasses.solve +// (Hax_base.Int.BaseImpl.impl__shr (Hax_core.Coerce.f_lift #t_U64 +// #FStar.Tactics.Typeclasses.solve +// self +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U128 #FStar.Tactics.Typeclasses.solve rhs +// <: +// Hax_base.Int.t_HaxInt) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_105: Core.Ops.Bit.t_BitXor t_U64 t_U64 = +// { +// f_Output = t_U64; +// f_bitxor_pre = (fun (self: t_U64) (rhs: t_U64) -> true); +// f_bitxor_post = (fun (self: t_U64) (rhs: t_U64) (out: t_U64) -> true); +// f_bitxor +// = +// fun (self: t_U64) (rhs: t_U64) -> +// Hax_core.Coerce.f_concretize #Hax_base.Int.t_HaxInt +// #t_U64 +// #FStar.Tactics.Typeclasses.solve +// (Hax_base.Int.BaseImpl.impl__bitxor (Hax_core.Coerce.f_lift #t_U64 +// #FStar.Tactics.Typeclasses.solve +// self +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U64 #FStar.Tactics.Typeclasses.solve rhs +// <: +// Hax_base.Int.t_HaxInt) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_106: Core.Ops.Bit.t_BitAnd t_U64 t_U64 = +// { +// f_Output = t_U64; +// f_bitand_pre = (fun (self: t_U64) (rhs: t_U64) -> true); +// f_bitand_post = (fun (self: t_U64) (rhs: t_U64) (out: t_U64) -> true); +// f_bitand +// = +// fun (self: t_U64) (rhs: t_U64) -> +// Hax_core.Coerce.f_concretize #Hax_base.Int.t_HaxInt +// #t_U64 +// #FStar.Tactics.Typeclasses.solve +// (Hax_base.Int.BaseImpl.impl__bitand (Hax_core.Coerce.f_lift #t_U64 +// #FStar.Tactics.Typeclasses.solve +// self +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U64 #FStar.Tactics.Typeclasses.solve rhs +// <: +// Hax_base.Int.t_HaxInt) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_107: Core.Ops.Bit.t_BitOr t_U64 t_U64 = +// { +// f_Output = t_U64; +// f_bitor_pre = (fun (self: t_U64) (rhs: t_U64) -> true); +// f_bitor_post = (fun (self: t_U64) (rhs: t_U64) (out: t_U64) -> true); +// f_bitor +// = +// fun (self: t_U64) (rhs: t_U64) -> +// Hax_core.Coerce.f_concretize #Hax_base.Int.t_HaxInt +// #t_U64 +// #FStar.Tactics.Typeclasses.solve +// (Hax_base.Int.BaseImpl.impl__bitor (Hax_core.Coerce.f_lift #t_U64 +// #FStar.Tactics.Typeclasses.solve +// self +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U64 #FStar.Tactics.Typeclasses.solve rhs +// <: +// Hax_base.Int.t_HaxInt) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_112: Core.Ops.Arith.t_Neg t_U128 = +// { +// f_Output = t_U128; +// f_neg_pre = (fun (self: t_U128) -> true); +// f_neg_post = (fun (self: t_U128) (out: t_U128) -> true); +// f_neg +// = +// fun (self: t_U128) -> +// Hax_core.Coerce.f_concretize #Hax_base.Int.t_HaxInt +// #t_U128 +// #FStar.Tactics.Typeclasses.solve +// (Hax_base.Int.BaseImpl.impl__sub Hax_base.Int.BaseSpec.v_WORDSIZE_128_ +// (Hax_base.Int.BaseImpl.impl__rem (Hax_core.Coerce.f_lift #t_U128 +// #FStar.Tactics.Typeclasses.solve +// self +// <: +// Hax_base.Int.t_HaxInt) +// Hax_base.Int.BaseSpec.v_WORDSIZE_128_ +// <: +// Hax_base.Int.t_HaxInt) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_118: Core.Ops.Arith.t_Mul t_U128 t_U128 = +// { +// f_Output = t_U128; +// f_mul_pre = (fun (self: t_U128) (rhs: t_U128) -> true); +// f_mul_post = (fun (self: t_U128) (rhs: t_U128) (out: t_U128) -> true); +// f_mul +// = +// fun (self: t_U128) (rhs: t_U128) -> +// Hax_core.Coerce.f_concretize #Hax_base.Int.t_HaxInt +// #t_U128 +// #FStar.Tactics.Typeclasses.solve +// (Hax_base.Int.BaseImpl.impl__mul (Hax_core.Coerce.f_lift #t_U128 +// #FStar.Tactics.Typeclasses.solve +// self +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U128 #FStar.Tactics.Typeclasses.solve rhs +// <: +// Hax_base.Int.t_HaxInt) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_119: Core.Ops.Arith.t_Rem t_U128 t_U128 = +// { +// f_Output = t_U128; +// f_rem_pre = (fun (self: t_U128) (rhs: t_U128) -> true); +// f_rem_post = (fun (self: t_U128) (rhs: t_U128) (out: t_U128) -> true); +// f_rem +// = +// fun (self: t_U128) (rhs: t_U128) -> +// Hax_core.Coerce.f_concretize #Hax_base.Int.t_HaxInt +// #t_U128 +// #FStar.Tactics.Typeclasses.solve +// (Hax_base.Int.BaseImpl.impl__rem (Hax_core.Coerce.f_lift #t_U128 +// #FStar.Tactics.Typeclasses.solve +// self +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U128 #FStar.Tactics.Typeclasses.solve rhs +// <: +// Hax_base.Int.t_HaxInt) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_120: Core.Ops.Arith.t_Add t_U128 t_U128 = +// { +// f_Output = t_U128; +// f_add_pre = (fun (self: t_U128) (rhs: t_U128) -> true); +// f_add_post = (fun (self: t_U128) (rhs: t_U128) (out: t_U128) -> true); +// f_add +// = +// fun (self: t_U128) (rhs: t_U128) -> +// Hax_core.Coerce.f_concretize #Hax_base.Int.t_HaxInt +// #t_U128 +// #FStar.Tactics.Typeclasses.solve +// (Hax_base.Int.BaseImpl.impl__add (Hax_core.Coerce.f_lift #t_U128 +// #FStar.Tactics.Typeclasses.solve +// self +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U128 #FStar.Tactics.Typeclasses.solve rhs +// <: +// Hax_base.Int.t_HaxInt) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_121: Core.Ops.Arith.t_Div t_U128 t_U128 = +// { +// f_Output = t_U128; +// f_div_pre = (fun (self: t_U128) (rhs: t_U128) -> true); +// f_div_post = (fun (self: t_U128) (rhs: t_U128) (out: t_U128) -> true); +// f_div +// = +// fun (self: t_U128) (rhs: t_U128) -> +// Hax_core.Coerce.f_concretize #Hax_base.Int.t_HaxInt +// #t_U128 +// #FStar.Tactics.Typeclasses.solve +// (Hax_base.Int.BaseImpl.impl__div (Hax_core.Coerce.f_lift #t_U128 +// #FStar.Tactics.Typeclasses.solve +// self +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U128 #FStar.Tactics.Typeclasses.solve rhs +// <: +// Hax_base.Int.t_HaxInt) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_122: Core.Ops.Bit.t_Shl t_U128 t_U8 = +// { +// f_Output = t_U128; +// f_shl_pre = (fun (self: t_U128) (rhs: t_U8) -> true); +// f_shl_post = (fun (self: t_U128) (rhs: t_U8) (out: t_U128) -> true); +// f_shl +// = +// fun (self: t_U128) (rhs: t_U8) -> +// Hax_core.Coerce.f_concretize #Hax_base.Int.t_HaxInt +// #t_U128 +// #FStar.Tactics.Typeclasses.solve +// (Hax_base.Int.BaseImpl.impl__shl (Hax_core.Coerce.f_lift #t_U128 +// #FStar.Tactics.Typeclasses.solve +// self +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U8 #FStar.Tactics.Typeclasses.solve rhs +// <: +// Hax_base.Int.t_HaxInt) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_123: Core.Ops.Bit.t_Shl t_U128 t_U16 = +// { +// f_Output = t_U128; +// f_shl_pre = (fun (self: t_U128) (rhs: t_U16) -> true); +// f_shl_post = (fun (self: t_U128) (rhs: t_U16) (out: t_U128) -> true); +// f_shl +// = +// fun (self: t_U128) (rhs: t_U16) -> +// Hax_core.Coerce.f_concretize #Hax_base.Int.t_HaxInt +// #t_U128 +// #FStar.Tactics.Typeclasses.solve +// (Hax_base.Int.BaseImpl.impl__shl (Hax_core.Coerce.f_lift #t_U128 +// #FStar.Tactics.Typeclasses.solve +// self +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U16 #FStar.Tactics.Typeclasses.solve rhs +// <: +// Hax_base.Int.t_HaxInt) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_124: Core.Ops.Bit.t_Shl t_U128 t_U32 = +// { +// f_Output = t_U128; +// f_shl_pre = (fun (self: t_U128) (rhs: t_U32) -> true); +// f_shl_post = (fun (self: t_U128) (rhs: t_U32) (out: t_U128) -> true); +// f_shl +// = +// fun (self: t_U128) (rhs: t_U32) -> +// Hax_core.Coerce.f_concretize #Hax_base.Int.t_HaxInt +// #t_U128 +// #FStar.Tactics.Typeclasses.solve +// (Hax_base.Int.BaseImpl.impl__shl (Hax_core.Coerce.f_lift #t_U128 +// #FStar.Tactics.Typeclasses.solve +// self +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U32 #FStar.Tactics.Typeclasses.solve rhs +// <: +// Hax_base.Int.t_HaxInt) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_125: Core.Ops.Bit.t_Shl t_U128 t_U64 = +// { +// f_Output = t_U128; +// f_shl_pre = (fun (self: t_U128) (rhs: t_U64) -> true); +// f_shl_post = (fun (self: t_U128) (rhs: t_U64) (out: t_U128) -> true); +// f_shl +// = +// fun (self: t_U128) (rhs: t_U64) -> +// Hax_core.Coerce.f_concretize #Hax_base.Int.t_HaxInt +// #t_U128 +// #FStar.Tactics.Typeclasses.solve +// (Hax_base.Int.BaseImpl.impl__shl (Hax_core.Coerce.f_lift #t_U128 +// #FStar.Tactics.Typeclasses.solve +// self +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U64 #FStar.Tactics.Typeclasses.solve rhs +// <: +// Hax_base.Int.t_HaxInt) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_126: Core.Ops.Bit.t_Shl t_U128 t_U128 = +// { +// f_Output = t_U128; +// f_shl_pre = (fun (self: t_U128) (rhs: t_U128) -> true); +// f_shl_post = (fun (self: t_U128) (rhs: t_U128) (out: t_U128) -> true); +// f_shl +// = +// fun (self: t_U128) (rhs: t_U128) -> +// Hax_core.Coerce.f_concretize #Hax_base.Int.t_HaxInt +// #t_U128 +// #FStar.Tactics.Typeclasses.solve +// (Hax_base.Int.BaseImpl.impl__shl (Hax_core.Coerce.f_lift #t_U128 +// #FStar.Tactics.Typeclasses.solve +// self +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U128 #FStar.Tactics.Typeclasses.solve rhs +// <: +// Hax_base.Int.t_HaxInt) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_127: Core.Ops.Bit.t_Shr t_U128 t_U8 = +// { +// f_Output = t_U128; +// f_shr_pre = (fun (self: t_U128) (rhs: t_U8) -> true); +// f_shr_post = (fun (self: t_U128) (rhs: t_U8) (out: t_U128) -> true); +// f_shr +// = +// fun (self: t_U128) (rhs: t_U8) -> +// Hax_core.Coerce.f_concretize #Hax_base.Int.t_HaxInt +// #t_U128 +// #FStar.Tactics.Typeclasses.solve +// (Hax_base.Int.BaseImpl.impl__shr (Hax_core.Coerce.f_lift #t_U128 +// #FStar.Tactics.Typeclasses.solve +// self +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U8 #FStar.Tactics.Typeclasses.solve rhs +// <: +// Hax_base.Int.t_HaxInt) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_128: Core.Ops.Bit.t_Shr t_U128 t_U16 = +// { +// f_Output = t_U128; +// f_shr_pre = (fun (self: t_U128) (rhs: t_U16) -> true); +// f_shr_post = (fun (self: t_U128) (rhs: t_U16) (out: t_U128) -> true); +// f_shr +// = +// fun (self: t_U128) (rhs: t_U16) -> +// Hax_core.Coerce.f_concretize #Hax_base.Int.t_HaxInt +// #t_U128 +// #FStar.Tactics.Typeclasses.solve +// (Hax_base.Int.BaseImpl.impl__shr (Hax_core.Coerce.f_lift #t_U128 +// #FStar.Tactics.Typeclasses.solve +// self +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U16 #FStar.Tactics.Typeclasses.solve rhs +// <: +// Hax_base.Int.t_HaxInt) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_129: Core.Ops.Bit.t_Shr t_U128 t_U32 = +// { +// f_Output = t_U128; +// f_shr_pre = (fun (self: t_U128) (rhs: t_U32) -> true); +// f_shr_post = (fun (self: t_U128) (rhs: t_U32) (out: t_U128) -> true); +// f_shr +// = +// fun (self: t_U128) (rhs: t_U32) -> +// Hax_core.Coerce.f_concretize #Hax_base.Int.t_HaxInt +// #t_U128 +// #FStar.Tactics.Typeclasses.solve +// (Hax_base.Int.BaseImpl.impl__shr (Hax_core.Coerce.f_lift #t_U128 +// #FStar.Tactics.Typeclasses.solve +// self +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U32 #FStar.Tactics.Typeclasses.solve rhs +// <: +// Hax_base.Int.t_HaxInt) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_130: Core.Ops.Bit.t_Shr t_U128 t_U64 = +// { +// f_Output = t_U128; +// f_shr_pre = (fun (self: t_U128) (rhs: t_U64) -> true); +// f_shr_post = (fun (self: t_U128) (rhs: t_U64) (out: t_U128) -> true); +// f_shr +// = +// fun (self: t_U128) (rhs: t_U64) -> +// Hax_core.Coerce.f_concretize #Hax_base.Int.t_HaxInt +// #t_U128 +// #FStar.Tactics.Typeclasses.solve +// (Hax_base.Int.BaseImpl.impl__shr (Hax_core.Coerce.f_lift #t_U128 +// #FStar.Tactics.Typeclasses.solve +// self +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U64 #FStar.Tactics.Typeclasses.solve rhs +// <: +// Hax_base.Int.t_HaxInt) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_131: Core.Ops.Bit.t_Shr t_U128 t_U128 = +// { +// f_Output = t_U128; +// f_shr_pre = (fun (self: t_U128) (rhs: t_U128) -> true); +// f_shr_post = (fun (self: t_U128) (rhs: t_U128) (out: t_U128) -> true); +// f_shr +// = +// fun (self: t_U128) (rhs: t_U128) -> +// Hax_core.Coerce.f_concretize #Hax_base.Int.t_HaxInt +// #t_U128 +// #FStar.Tactics.Typeclasses.solve +// (Hax_base.Int.BaseImpl.impl__shr (Hax_core.Coerce.f_lift #t_U128 +// #FStar.Tactics.Typeclasses.solve +// self +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U128 #FStar.Tactics.Typeclasses.solve rhs +// <: +// Hax_base.Int.t_HaxInt) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_132: Core.Ops.Bit.t_BitXor t_U128 t_U128 = +// { +// f_Output = t_U128; +// f_bitxor_pre = (fun (self: t_U128) (rhs: t_U128) -> true); +// f_bitxor_post = (fun (self: t_U128) (rhs: t_U128) (out: t_U128) -> true); +// f_bitxor +// = +// fun (self: t_U128) (rhs: t_U128) -> +// Hax_core.Coerce.f_concretize #Hax_base.Int.t_HaxInt +// #t_U128 +// #FStar.Tactics.Typeclasses.solve +// (Hax_base.Int.BaseImpl.impl__bitxor (Hax_core.Coerce.f_lift #t_U128 +// #FStar.Tactics.Typeclasses.solve +// self +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U128 #FStar.Tactics.Typeclasses.solve rhs +// <: +// Hax_base.Int.t_HaxInt) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_133: Core.Ops.Bit.t_BitAnd t_U128 t_U128 = +// { +// f_Output = t_U128; +// f_bitand_pre = (fun (self: t_U128) (rhs: t_U128) -> true); +// f_bitand_post = (fun (self: t_U128) (rhs: t_U128) (out: t_U128) -> true); +// f_bitand +// = +// fun (self: t_U128) (rhs: t_U128) -> +// Hax_core.Coerce.f_concretize #Hax_base.Int.t_HaxInt +// #t_U128 +// #FStar.Tactics.Typeclasses.solve +// (Hax_base.Int.BaseImpl.impl__bitand (Hax_core.Coerce.f_lift #t_U128 +// #FStar.Tactics.Typeclasses.solve +// self +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U128 #FStar.Tactics.Typeclasses.solve rhs +// <: +// Hax_base.Int.t_HaxInt) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_134: Core.Ops.Bit.t_BitOr t_U128 t_U128 = +// { +// f_Output = t_U128; +// f_bitor_pre = (fun (self: t_U128) (rhs: t_U128) -> true); +// f_bitor_post = (fun (self: t_U128) (rhs: t_U128) (out: t_U128) -> true); +// f_bitor +// = +// fun (self: t_U128) (rhs: t_U128) -> +// Hax_core.Coerce.f_concretize #Hax_base.Int.t_HaxInt +// #t_U128 +// #FStar.Tactics.Typeclasses.solve +// (Hax_base.Int.BaseImpl.impl__bitor (Hax_core.Coerce.f_lift #t_U128 +// #FStar.Tactics.Typeclasses.solve +// self +// <: +// Hax_base.Int.t_HaxInt) +// (Hax_core.Coerce.f_lift #t_U128 #FStar.Tactics.Typeclasses.solve rhs +// <: +// Hax_base.Int.t_HaxInt) +// <: +// Hax_base.Int.t_HaxInt) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_5: Core.Ops.Arith.t_Sub t_U8 t_U8 = +// { +// f_Output = t_U8; +// f_sub_pre = (fun (self: t_U8) (rhs: t_U8) -> true); +// f_sub_post = (fun (self: t_U8) (rhs: t_U8) (out: t_U8) -> true); +// f_sub +// = +// fun (self: t_U8) (rhs: t_U8) -> +// self +! (Core.Ops.Arith.f_neg #t_U8 #FStar.Tactics.Typeclasses.solve rhs <: t_U8) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_6: Core.Ops.Bit.t_Not t_U8 = +// { +// f_Output = t_U8; +// f_not_pre = (fun (self: t_U8) -> true); +// f_not_post = (fun (self: t_U8) (out: t_U8) -> true); +// f_not = fun (self: t_U8) -> self ^. Hax_core.Num.impl__MAX +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_32: Core.Ops.Arith.t_Sub t_U16 t_U16 = +// { +// f_Output = t_U16; +// f_sub_pre = (fun (self: t_U16) (rhs: t_U16) -> true); +// f_sub_post = (fun (self: t_U16) (rhs: t_U16) (out: t_U16) -> true); +// f_sub +// = +// fun (self: t_U16) (rhs: t_U16) -> +// self +! (Core.Ops.Arith.f_neg #t_U16 #FStar.Tactics.Typeclasses.solve rhs <: t_U16) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_33: Core.Ops.Bit.t_Not t_U16 = +// { +// f_Output = t_U16; +// f_not_pre = (fun (self: t_U16) -> true); +// f_not_post = (fun (self: t_U16) (out: t_U16) -> true); +// f_not = fun (self: t_U16) -> self ^. f_MAX +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_59: Core.Ops.Arith.t_Sub t_U32 t_U32 = +// { +// f_Output = t_U32; +// f_sub_pre = (fun (self: t_U32) (rhs: t_U32) -> true); +// f_sub_post = (fun (self: t_U32) (rhs: t_U32) (out: t_U32) -> true); +// f_sub +// = +// fun (self: t_U32) (rhs: t_U32) -> +// self +! (Core.Ops.Arith.f_neg #t_U32 #FStar.Tactics.Typeclasses.solve rhs <: t_U32) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_60: Core.Ops.Bit.t_Not t_U32 = +// { +// f_Output = t_U32; +// f_not_pre = (fun (self: t_U32) -> true); +// f_not_post = (fun (self: t_U32) (out: t_U32) -> true); +// f_not = fun (self: t_U32) -> self ^. f_MAX +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_86: Core.Ops.Arith.t_Sub t_U64 t_U64 = +// { +// f_Output = t_U64; +// f_sub_pre = (fun (self: t_U64) (rhs: t_U64) -> true); +// f_sub_post = (fun (self: t_U64) (rhs: t_U64) (out: t_U64) -> true); +// f_sub +// = +// fun (self: t_U64) (rhs: t_U64) -> +// self +! (Core.Ops.Arith.f_neg #t_U64 #FStar.Tactics.Typeclasses.solve rhs <: t_U64) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_87: Core.Ops.Bit.t_Not t_U64 = +// { +// f_Output = t_U64; +// f_not_pre = (fun (self: t_U64) -> true); +// f_not_post = (fun (self: t_U64) (out: t_U64) -> true); +// f_not = fun (self: t_U64) -> self ^. f_MAX +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_113: Core.Ops.Arith.t_Sub t_U128 t_U128 = +// { +// f_Output = t_U128; +// f_sub_pre = (fun (self: t_U128) (rhs: t_U128) -> true); +// f_sub_post = (fun (self: t_U128) (rhs: t_U128) (out: t_U128) -> true); +// f_sub +// = +// fun (self: t_U128) (rhs: t_U128) -> +// self +! (Core.Ops.Arith.f_neg #t_U128 #FStar.Tactics.Typeclasses.solve rhs <: t_U128) +// } + +// [@@ FStar.Tactics.Typeclasses.tcinstance] +// let impl_114: Core.Ops.Bit.t_Not t_U128 = +// { +// f_Output = t_U128; +// f_not_pre = (fun (self: t_U128) -> true); +// f_not_post = (fun (self: t_U128) (out: t_U128) -> true); +// f_not = fun (self: t_U128) -> self ^. f_MAX +// } diff --git a/aes_jazz/src/aes_jazz.rs b/aes_jazz/src/aes_jazz.rs index c8981d5..4580173 100644 --- a/aes_jazz/src/aes_jazz.rs +++ b/aes_jazz/src/aes_jazz.rs @@ -1,10 +1,11 @@ use hacspec_lib::*; -public_bytes!(SBox, 256); -public_bytes!(RCon, 15); +type SBox = [u8; 256]; +type RCon = [u8; 15]; -public_bytes!(PBytes256, 256); -const SBOX: SBox = SBox([ +type PBytes256 = [u8; 256]; + +const SBOX: SBox = [ 0x63u8, 0x7Cu8, 0x77u8, 0x7Bu8, 0xF2u8, 0x6Bu8, 0x6Fu8, 0xC5u8, 0x30u8, 0x01u8, 0x67u8, 0x2Bu8, 0xFEu8, 0xD7u8, 0xABu8, 0x76u8, 0xCAu8, 0x82u8, 0xC9u8, 0x7Du8, 0xFAu8, 0x59u8, 0x47u8, 0xF0u8, 0xADu8, 0xD4u8, 0xA2u8, 0xAFu8, 0x9Cu8, 0xA4u8, 0x72u8, 0xC0u8, 0xB7u8, 0xFDu8, 0x93u8, 0x26u8, @@ -27,12 +28,12 @@ const SBOX: SBox = SBox([ 0x69u8, 0xD9u8, 0x8Eu8, 0x94u8, 0x9Bu8, 0x1Eu8, 0x87u8, 0xE9u8, 0xCEu8, 0x55u8, 0x28u8, 0xDFu8, 0x8Cu8, 0xA1u8, 0x89u8, 0x0Du8, 0xBFu8, 0xE6u8, 0x42u8, 0x68u8, 0x41u8, 0x99u8, 0x2Du8, 0x0Fu8, 0xB0u8, 0x54u8, 0xBBu8, 0x16u8 -]); +]; -const RCON: RCon = RCon([ +const RCON: RCon = [ 0x8du8, 0x01u8, 0x02u8, 0x04u8, 0x08u8, 0x10u8, 0x20u8, 0x40u8, 0x80u8, 0x1bu8, 0x36u8, 0x6cu8, 0xd8u8, 0xabu8, 0x4du8 -]); +]; fn index_u32 (s : u128, i : usize) -> u32 { ((s >> i * 32) % (1_u128 << 32)) as u32 @@ -49,10 +50,10 @@ fn rebuild_u128(s0 : u32, s1 : u32, s2 : u32, s3 : u32) -> u128 { } fn subword(v : u32) -> u32 { - rebuild_u32(SBOX[index_u8(v, 0)], - SBOX[index_u8(v, 1)], - SBOX[index_u8(v, 2)], - SBOX[index_u8(v, 3)]) + rebuild_u32(SBOX[index_u8(v, 0) as usize], + SBOX[index_u8(v, 1) as usize], + SBOX[index_u8(v, 2) as usize], + SBOX[index_u8(v, 3) as usize]) } fn rotword(v: u32) -> u32 { @@ -114,19 +115,19 @@ fn key_expand(rcon: u8, rkey: u128, temp2: u128) -> (u128, u128) { (rkey, temp2) } -type KeyList = Seq; +type KeyList = [u128;12]; fn keys_expand(key : u128) -> KeyList { - let mut rkeys : KeyList = KeyList::new(0); + let mut rkeys : KeyList = [0;12]; let mut key = key; - rkeys = rkeys.push(&key); + rkeys[0] = key; let mut temp2 : u128 = 0; for round in 1 .. 11 { let rcon = RCON[round]; let (key_temp, temp2_temp) = key_expand(rcon, key, temp2); key = key_temp; temp2 = temp2_temp; - rkeys = rkeys.push(&key); + rkeys[round] = key; } rkeys } diff --git a/auction/Cargo.toml b/auction/Cargo.toml new file mode 100644 index 0000000..a390bcd --- /dev/null +++ b/auction/Cargo.toml @@ -0,0 +1,23 @@ +[package] +name = "hacspec-auction" +version = "0.1.0" +authors = ["Lasse Letager Hanse "] +edition = "2018" + +[lib] +path = "src/auction.rs" + +[dependencies] +hax-lib-macros = { path = "../../hax/hax-lib-macros/" } +hacspec-concordium = { path = "../concordium" } +hacspec-concordium-derive = { path = "../concordium-derive" } + +quickcheck = "1" +quickcheck_macros = "1" + +[dev-dependencies] +criterion = "0.4" +rand = "0.8" + +[features] +hax_compilation = [] diff --git a/auction/proofs/coq/extraction/Hacspec_auction.v b/auction/proofs/coq/extraction/Hacspec_auction.v new file mode 100644 index 0000000..c4a9ef0 --- /dev/null +++ b/auction/proofs/coq/extraction/Hacspec_auction.v @@ -0,0 +1,63 @@ +(* File automatically generated by Hacspec *) +From Hacspec Require Import Hacspec_Lib MachineIntegers. +From Coq Require Import ZArith. +Import List.ListNotations. +Open Scope Z_scope. +Open Scope bool_scope. + +Inductive t_AuctionState: Type := +| AuctionState_NotSoldYet : t_AuctionState +| AuctionState_Sold : t_AccountAddress_t -> t_AuctionState. + +Inductive t_BidError: Type := +| BidError_ContractSender : t_BidError +| BidError_BidTooLow : t_BidError +| BidError_BidsOverWaitingForAuctionFinalization : t_BidError +| BidError_AuctionFinalized : t_BidError. + +Inductive t_FinalizeError: Type := +| FinalizeError_BidMapError : t_FinalizeError +| FinalizeError_AuctionStillActive : t_FinalizeError +| FinalizeError_AuctionFinalized : t_FinalizeError. + +(*Not implemented yet? todo(item)*) + +(*Not implemented yet? todo(item)*) + +Definition auction_init (_ : unit) : t_Never_t := + failure (AST import) Fatal error: something we considered as impossible occurred! Please report this by submitting an issue on GitHub! +Details: [import_thir:literal] got an error literal: this means the Rust compiler or Hax's frontend probably reported errors above. + { Types.attributes = []; + contents = + Types.Literal { + lit = + { Types.node = Types.Err; + span = + { Types.filename = + (Types.Real (Types.LocalPath "auction/src/auction.rs")); + hi = { Types.col = "0"; line = "1" }; + lo = { Types.col = "0"; line = "1" } } + }; + neg = false}; + hir_id = None; + span = + { Types.filename = (Types.Real (Types.LocalPath "auction/src/auction.rs")); + hi = { Types.col = "63"; line = "115" }; + lo = { Types.col = "0"; line = "115" } }; + ty = Types.Never }. + +Record t_InitParameter : Type :={ + f_item : t_Vec_t (int8) (t_Global_t); + f_expiry : t_Timestamp_t; +}. + +Record t_State : Type :={ + f_auction_state : t_AuctionState_t; + f_highest_bid : t_Amount_t; + f_item : t_Vec_t (int8) (t_Global_t); + f_expiry : t_Timestamp_t; + f_bids : t_BTreeMap_t (t_AccountAddress_t) (t_Amount_t) (t_Global_t); +}. + +Definition fresh_state (itm : t_Vec_t (int8) (t_Global_t)) (exp : t_Timestamp_t) : t_State_t := + Build_State (f_auction_state := AuctionState_NotSoldYett_AuctionState_t) (f_highest_bid := impl__Amount__zero tt) (f_item := itm) (f_expiry := exp) (f_bids := impl_18__new tt). diff --git a/auction/proofs/coq/extraction/Hacspec_auction_Export_auction_bid.v b/auction/proofs/coq/extraction/Hacspec_auction_Export_auction_bid.v new file mode 100644 index 0000000..ec798ba --- /dev/null +++ b/auction/proofs/coq/extraction/Hacspec_auction_Export_auction_bid.v @@ -0,0 +1,21 @@ +(* File automatically generated by Hacspec *) +From Hacspec Require Import Hacspec_Lib MachineIntegers. +From Coq Require Import ZArith. +Import List.ListNotations. +Open Scope Z_scope. +Open Scope bool_scope. + +Require Import Hacspec_concordium. +Export Hacspec_concordium. + +Require Import SeekFrom. +Export SeekFrom. + +Require Import ContractState. +Export ContractState. + +Require Import Logger. +Export Logger. + +Require Import trap. +Export trap. diff --git a/auction/proofs/coq/extraction/Hacspec_auction_Export_auction_finalize.v b/auction/proofs/coq/extraction/Hacspec_auction_Export_auction_finalize.v new file mode 100644 index 0000000..ec798ba --- /dev/null +++ b/auction/proofs/coq/extraction/Hacspec_auction_Export_auction_finalize.v @@ -0,0 +1,21 @@ +(* File automatically generated by Hacspec *) +From Hacspec Require Import Hacspec_Lib MachineIntegers. +From Coq Require Import ZArith. +Import List.ListNotations. +Open Scope Z_scope. +Open Scope bool_scope. + +Require Import Hacspec_concordium. +Export Hacspec_concordium. + +Require Import SeekFrom. +Export SeekFrom. + +Require Import ContractState. +Export ContractState. + +Require Import Logger. +Export Logger. + +Require Import trap. +Export trap. diff --git a/auction/proofs/coq/extraction/Hacspec_auction_Export_auction_init.v b/auction/proofs/coq/extraction/Hacspec_auction_Export_auction_init.v new file mode 100644 index 0000000..dcd29d9 --- /dev/null +++ b/auction/proofs/coq/extraction/Hacspec_auction_Export_auction_init.v @@ -0,0 +1,21 @@ +(* File automatically generated by Hacspec *) +From Hacspec Require Import Hacspec_Lib MachineIntegers. +From Coq Require Import ZArith. +Import List.ListNotations. +Open Scope Z_scope. +Open Scope bool_scope. + +Require Import Hacspec_concordium. +Export Hacspec_concordium. + +Require Import trap. +Export trap. + +Require Import ExternContext. +Export ExternContext. + +Require Import InitContextExtern. +Export InitContextExtern. + +Require Import ContractState. +Export ContractState. diff --git a/auction/proofs/coq/extraction/Hacspec_auction_Export_view.v b/auction/proofs/coq/extraction/Hacspec_auction_Export_view.v new file mode 100644 index 0000000..ec798ba --- /dev/null +++ b/auction/proofs/coq/extraction/Hacspec_auction_Export_view.v @@ -0,0 +1,21 @@ +(* File automatically generated by Hacspec *) +From Hacspec Require Import Hacspec_Lib MachineIntegers. +From Coq Require Import ZArith. +Import List.ListNotations. +Open Scope Z_scope. +Open Scope bool_scope. + +Require Import Hacspec_concordium. +Export Hacspec_concordium. + +Require Import SeekFrom. +Export SeekFrom. + +Require Import ContractState. +Export ContractState. + +Require Import Logger. +Export Logger. + +Require Import trap. +Export trap. diff --git a/auction/proofs/coq/extraction/Hacspec_auction_Export_view_highest_bid.v b/auction/proofs/coq/extraction/Hacspec_auction_Export_view_highest_bid.v new file mode 100644 index 0000000..ec798ba --- /dev/null +++ b/auction/proofs/coq/extraction/Hacspec_auction_Export_view_highest_bid.v @@ -0,0 +1,21 @@ +(* File automatically generated by Hacspec *) +From Hacspec Require Import Hacspec_Lib MachineIntegers. +From Coq Require Import ZArith. +Import List.ListNotations. +Open Scope Z_scope. +Open Scope bool_scope. + +Require Import Hacspec_concordium. +Export Hacspec_concordium. + +Require Import SeekFrom. +Export SeekFrom. + +Require Import ContractState. +Export ContractState. + +Require Import Logger. +Export Logger. + +Require Import trap. +Export trap. diff --git a/auction/proofs/ssprove/extraction/Hacspec_auction.v b/auction/proofs/ssprove/extraction/Hacspec_auction.v new file mode 100644 index 0000000..e9f0221 --- /dev/null +++ b/auction/proofs/ssprove/extraction/Hacspec_auction.v @@ -0,0 +1,339 @@ +(* File automatically generated by Hacspec *) +Set Warnings "-notation-overridden,-ambiguous-paths". +From Crypt Require Import choice_type Package Prelude. +Import PackageNotation. +From extructures Require Import ord fset. +From mathcomp Require Import word_ssrZ word. +From Jasmin Require Import word. + +From Coq Require Import ZArith. +From Coq Require Import Strings.String. +Import List.ListNotations. +Open Scope list_scope. +Open Scope Z_scope. +Open Scope bool_scope. + +From Hacspec Require Import ChoiceEquality. +From Hacspec Require Import LocationUtility. +From Hacspec Require Import Hacspec_Lib_Comparable. +From Hacspec Require Import Hacspec_Lib_Pre. +From Hacspec Require Import Hacspec_Lib. + +Open Scope hacspec_scope. +Import choice.Choice.Exports. + +Obligation Tactic := (* try timeout 8 *) solve_ssprove_obligations. + +Definition t_Amount := int64. +Equations f_micro_ccd {L : {fset Location}} {I : Interface} (s : both L I (t_Amount)) : both L I int64 := + f_micro_ccd s := + bind_both s (fun x => + solve_lift (ret_both x)) : both L I int64. +Fail Next Obligation. +Equations Build_t_Amount {L0 : {fset Location}} {I0 : Interface} {f_micro_ccd : both L0 I0 int64} : both (L0) (I0) (t_Amount) := + Build_t_Amount := + bind_both f_micro_ccd (fun f_micro_ccd => + solve_lift (ret_both ((f_micro_ccd) : (t_Amount)))) : both (L0) (I0) (t_Amount). +Fail Next Obligation. + +Definition t_Timestamp := int32. +Definition t_BTreeMap (A B : choice_type) (C : vec_typ) := int32. +Equations impl_20__contains_key {L I A B C} (x : both L I (t_BTreeMap A B C)) (y : both L I A) : both L I 'bool := + impl_20__contains_key x y := solve_lift ret_both (true : 'bool). +Fail Next Obligation. +Equations f_slot_time {L I A} (x : both L I A) : both L I int64 := + f_slot_time x := solve_lift ret_both 3. +Fail Next Obligation. +Definition f_metadata {A} (x : A) := x. +Definition t_Address : choice_type := int64 ∐ int64. +Definition t_AccountAddress : choice_type := int64. +Definition Address_Contract_case (addr : int64) : t_Address := inl addr. +Definition Address_Account_case (addr : t_AccountAddress) : t_Address := inr addr. +Equations f_sender {L I A} (ctx : both L I A) : both L I t_Address := + f_sender ctx := solve_lift ret_both (Address_Account_case 0). +Fail Next Obligation. + + +Definition t_AuctionState : choice_type := + ('unit ∐ t_AccountAddress). +Notation "'AuctionState_NotSoldYet_case'" := (inl tt) (at level 100). +Equations AuctionState_NotSoldYet {L : {fset Location}} {I : Interface} : both L I (t_AuctionState) := + AuctionState_NotSoldYet := + solve_lift (ret_both (inl (tt : 'unit) : t_AuctionState)) : both L I (t_AuctionState). +Fail Next Obligation. +Notation "'AuctionState_Sold_case' x" := (inr x) (at level 100). +Equations AuctionState_Sold {L : {fset Location}} {I : Interface} (x : both L I (t_AccountAddress)) : both L I (t_AuctionState) := + AuctionState_Sold x := + bind_both x (fun x => + solve_lift (ret_both (inr x : t_AuctionState))) : both L I (t_AuctionState). +Fail Next Obligation. + +Definition t_BidError : choice_type := + ('unit ∐ 'unit ∐ 'unit ∐ 'unit). +Notation "'BidError_ContractSender_case'" := (inl (inl (inl tt))) (at level 100). +Equations BidError_ContractSender {L : {fset Location}} {I : Interface} : both L I (t_BidError) := + BidError_ContractSender := + solve_lift (ret_both (inl (inl (inl (tt : 'unit))) : t_BidError)) : both L I (t_BidError). +Fail Next Obligation. +Notation "'BidError_BidTooLow_case'" := (inl (inl (inr tt))) (at level 100). +Equations BidError_BidTooLow {L : {fset Location}} {I : Interface} : both L I (t_BidError) := + BidError_BidTooLow := + solve_lift (ret_both (inl (inl (inr (tt : 'unit))) : t_BidError)) : both L I (t_BidError). +Fail Next Obligation. +Notation "'BidError_BidsOverWaitingForAuctionFinalization_case'" := (inl (inr tt)) (at level 100). +Equations BidError_BidsOverWaitingForAuctionFinalization {L : {fset Location}} {I : Interface} : both L I (t_BidError) := + BidError_BidsOverWaitingForAuctionFinalization := + solve_lift (ret_both (inl (inr (tt : 'unit)) : t_BidError)) : both L I (t_BidError). +Fail Next Obligation. +Notation "'BidError_AuctionFinalized_case'" := (inr tt) (at level 100). +Equations BidError_AuctionFinalized {L : {fset Location}} {I : Interface} : both L I (t_BidError) := + BidError_AuctionFinalized := + solve_lift (ret_both (inr (tt : 'unit) : t_BidError)) : both L I (t_BidError). +Fail Next Obligation. + +Definition t_FinalizeError : choice_type := + ('unit ∐ 'unit ∐ 'unit). +Notation "'FinalizeError_BidMapError_case'" := (inl (inl tt)) (at level 100). +Equations FinalizeError_BidMapError {L : {fset Location}} {I : Interface} : both L I (t_FinalizeError) := + FinalizeError_BidMapError := + solve_lift (ret_both (inl (inl (tt : 'unit)) : t_FinalizeError)) : both L I (t_FinalizeError). +Fail Next Obligation. +Notation "'FinalizeError_AuctionStillActive_case'" := (inl (inr tt)) (at level 100). +Equations FinalizeError_AuctionStillActive {L : {fset Location}} {I : Interface} : both L I (t_FinalizeError) := + FinalizeError_AuctionStillActive := + solve_lift (ret_both (inl (inr (tt : 'unit)) : t_FinalizeError)) : both L I (t_FinalizeError). +Fail Next Obligation. +Notation "'FinalizeError_AuctionFinalized_case'" := (inr tt) (at level 100). +Equations FinalizeError_AuctionFinalized {L : {fset Location}} {I : Interface} : both L I (t_FinalizeError) := + FinalizeError_AuctionFinalized := + solve_lift (ret_both (inr (tt : 'unit) : t_FinalizeError)) : both L I (t_FinalizeError). +Fail Next Obligation. + +(*Not implemented yet? todo(item)*) + +(*Not implemented yet? todo(item)*) + +Definition t_InitParameter : choice_type := + (t_Vec (int8) (t_Global) × t_Timestamp). +Equations f_init_parameter_item {L : {fset Location}} {I : Interface} (s : both L I (t_InitParameter)) : both L I (t_Vec (int8) (t_Global)) := + f_init_parameter_item s := + bind_both s (fun x => + solve_lift (ret_both (fst x : t_Vec (int8) (t_Global)))) : both L I (t_Vec (int8) (t_Global)). +Fail Next Obligation. +Equations f_init_parameter_expiry {L : {fset Location}} {I : Interface} (s : both L I (t_InitParameter)) : both L I (t_Timestamp) := + f_init_parameter_expiry s := + bind_both s (fun x => + solve_lift (ret_both (snd x : t_Timestamp))) : both L I (t_Timestamp). +Fail Next Obligation. +Equations Build_t_InitParameter {L0 : {fset Location}} {L1 : {fset Location}} {I0 : Interface} {I1 : Interface} {f_init_parameter_item : both L0 I0 (t_Vec (int8) (t_Global))} {f_init_parameter_expiry : both L1 I1 (t_Timestamp)} : both (L0:|:L1) (I0:|:I1) (t_InitParameter) := + Build_t_InitParameter := + bind_both f_init_parameter_expiry (fun f_init_parameter_expiry => + bind_both f_init_parameter_item (fun f_init_parameter_item => + solve_lift (ret_both ((f_init_parameter_item,f_init_parameter_expiry) : (t_InitParameter))))) : both (L0:|:L1) (I0:|:I1) (t_InitParameter). +Fail Next Obligation. +Notation "'Build_t_InitParameter' '[' x ']' '(' 'f_init_parameter_item' ':=' y ')'" := (Build_t_InitParameter (f_init_parameter_item := y) (f_init_parameter_expiry := f_init_parameter_expiry x)). +Notation "'Build_t_InitParameter' '[' x ']' '(' 'f_init_parameter_expiry' ':=' y ')'" := (Build_t_InitParameter (f_init_parameter_item := f_init_parameter_item x) (f_init_parameter_expiry := y)). + +Definition t_State : choice_type := + (t_AuctionState × t_Amount × t_Vec (int8) (t_Global) × t_Timestamp × t_BTreeMap (t_AccountAddress) (t_Amount) (t_Global)). +Equations f_auction_state {L : {fset Location}} {I : Interface} (s : both L I (t_State)) : both L I (t_AuctionState) := + f_auction_state s := + bind_both s (fun x => + solve_lift (ret_both (fst (fst (fst (fst x))) : t_AuctionState))) : both L I (t_AuctionState). +Fail Next Obligation. +Equations f_highest_bid {L : {fset Location}} {I : Interface} (s : both L I (t_State)) : both L I (t_Amount) := + f_highest_bid s := + bind_both s (fun x => + solve_lift (ret_both (snd (fst (fst (fst x))) : t_Amount))) : both L I (t_Amount). +Fail Next Obligation. +Equations f_item {L : {fset Location}} {I : Interface} (s : both L I (t_State)) : both L I (t_Vec (int8) (t_Global)) := + f_item s := + bind_both s (fun x => + solve_lift (ret_both (snd (fst (fst x)) : t_Vec (int8) (t_Global)))) : both L I (t_Vec (int8) (t_Global)). +Fail Next Obligation. +Equations f_expiry {L : {fset Location}} {I : Interface} (s : both L I (t_State)) : both L I (t_Timestamp) := + f_expiry s := + bind_both s (fun x => + solve_lift (ret_both (snd (fst x) : t_Timestamp))) : both L I (t_Timestamp). +Fail Next Obligation. +Equations f_bids {L : {fset Location}} {I : Interface} (s : both L I (t_State)) : both L I (t_BTreeMap (t_AccountAddress) (t_Amount) (t_Global)) := + f_bids s := + bind_both s (fun x => + solve_lift (ret_both (snd x : t_BTreeMap (t_AccountAddress) (t_Amount) (t_Global)))) : both L I (t_BTreeMap (t_AccountAddress) (t_Amount) (t_Global)). +Fail Next Obligation. +Equations Build_t_State {L0 : {fset Location}} {L1 : {fset Location}} {L2 : {fset Location}} {L3 : {fset Location}} {L4 : {fset Location}} {I0 : Interface} {I1 : Interface} {I2 : Interface} {I3 : Interface} {I4 : Interface} {f_auction_state : both L0 I0 (t_AuctionState)} {f_highest_bid : both L1 I1 (t_Amount)} {f_item : both L2 I2 (t_Vec (int8) (t_Global))} {f_expiry : both L3 I3 (t_Timestamp)} {f_bids : both L4 I4 (t_BTreeMap (t_AccountAddress) (t_Amount) (t_Global))} : both (L0:|:L1:|:L2:|:L3:|:L4) (I0:|:I1:|:I2:|:I3:|:I4) (t_State) := + Build_t_State := + bind_both f_bids (fun f_bids => + bind_both f_expiry (fun f_expiry => + bind_both f_item (fun f_item => + bind_both f_highest_bid (fun f_highest_bid => + bind_both f_auction_state (fun f_auction_state => + solve_lift (ret_both ((f_auction_state,f_highest_bid,f_item,f_expiry,f_bids) : (t_State)))))))) : both (L0:|:L1:|:L2:|:L3:|:L4) (I0:|:I1:|:I2:|:I3:|:I4) (t_State). +Fail Next Obligation. +Notation "'Build_t_State' '[' x ']' '(' 'f_auction_state' ':=' y ')'" := (Build_t_State (f_auction_state := y) (f_highest_bid := f_highest_bid x) (f_item := f_item x) (f_expiry := f_expiry x) (f_bids := f_bids x)). +Notation "'Build_t_State' '[' x ']' '(' 'f_highest_bid' ':=' y ')'" := (Build_t_State (f_auction_state := f_auction_state x) (f_highest_bid := y) (f_item := f_item x) (f_expiry := f_expiry x) (f_bids := f_bids x)). +Notation "'Build_t_State' '[' x ']' '(' 'f_item' ':=' y ')'" := (Build_t_State (f_auction_state := f_auction_state x) (f_highest_bid := f_highest_bid x) (f_item := y) (f_expiry := f_expiry x) (f_bids := f_bids x)). +Notation "'Build_t_State' '[' x ']' '(' 'f_expiry' ':=' y ')'" := (Build_t_State (f_auction_state := f_auction_state x) (f_highest_bid := f_highest_bid x) (f_item := f_item x) (f_expiry := y) (f_bids := f_bids x)). +Notation "'Build_t_State' '[' x ']' '(' 'f_bids' ':=' y ')'" := (Build_t_State (f_auction_state := f_auction_state x) (f_highest_bid := f_highest_bid x) (f_item := f_item x) (f_expiry := f_expiry x) (f_bids := y)). +Fail Next Obligation. + +Equations auction_bid {L1 : {fset Location}} {L2 : {fset Location}} {L3 : {fset Location}} {I1 : Interface} {I2 : Interface} {I3 : Interface} {v_A : _} {impl_574521470_ : _} `{ t_Sized (v_A)} `{ t_Sized (impl_574521470_)} `{ t_HasActions (v_A)} `{ t_HasReceiveContext (impl_574521470_) ('unit)} (ctx : both L1 I1 (impl_574521470_)) (amount : both L2 I2 (t_Amount)) (state : both L3 I3 (t_State)) : both (L1 :|: L2 :|: L3) (I1 :|: I2 :|: I3) (t_Result ((v_A × t_State)) (t_BidError)) := + auction_bid ctx amount state := + solve_lift (run ((* letb slot_time := f_slot_time (f_metadata ctx) in *) + letm[choice_typeMonad.result_bind_code (t_Result ((v_A × t_State)) (t_BidError))] sender_address := matchb f_sender ctx with + | inl _ => + (* letb _ := ret_both tt in *) + letm[choice_typeMonad.result_bind_code (t_Result ((v_A × t_State)) (t_BidError))] hoist1 := v_Break (Result_Err BidError_ContractSender) in + ControlFlow_Continue (solve_lift (never_to_any hoist1)) + | inr account_address => + letb account_address := ret_both ((account_address) : (t_AccountAddress)) in + ControlFlow_Continue (solve_lift account_address) + end in + (* letb (bid_to_update:both _ _ int64) := ifb impl_20__contains_key (f_bids state) sender_address *) + (* then f_micro_ccd ((f_bids state).a[sender_address]) *) + (* else ret_both (0 : int64) in *) + (* letb bid_to_update := bid_to_update .+ (f_micro_ccd amount) in *) + (* letm[choice_typeMonad.result_bind_code (t_Result ((v_A × t_State)) (t_BidError))] _ := ifb negb (bid_to_update >.? (f_micro_ccd (f_highest_bid state))) *) + (* then letm[choice_typeMonad.result_bind_code (t_Result ((v_A × t_State)) (t_BidError))] hoist2 := v_Break (Result_Err BidError_BidTooLow) in *) + (* ControlFlow_Continue (never_to_any hoist2) *) + (* else ControlFlow_Continue (ret_both (tt : 'unit)) in *) + ControlFlow_Continue (letb state := Build_t_State[state] (f_highest_bid := Build_t_Amount (f_micro_ccd := ret_both 3 (* bid_to_update *))) in + Result_Ok (prod_b (f_accept (* (ret_both (tt : 'unit)) *),state))))) : both (L1 :|: L2 :|: L3) (I1 :|: I2 :|: I3) (t_Result ((v_A × t_State)) (t_BidError)). +Next Obligation. + +Fail Next Obligation. + +Definition remaining_bid_loc {v_A : _} {impl_574521470_ : _} `{ t_Sized (v_A)} `{ t_Sized (impl_574521470_)} `{ t_HasActions (v_A)} `{ t_HasReceiveContext (impl_574521470_) ('unit)} : Location := + (t_Option ((t_AccountAddress × t_Amount));0%nat). +Definition return_action_loc {v_A : _} {impl_574521470_ : _} `{ t_Sized (v_A)} `{ t_Sized (impl_574521470_)} `{ t_HasActions (v_A)} `{ t_HasReceiveContext (impl_574521470_) ('unit)} : Location := + (v_A;1%nat). +Equations auction_finalize {L1 : {fset Location}} {L2 : {fset Location}} {I1 : Interface} {I2 : Interface} {v_A : _} {impl_574521470_ : _} `{ t_Sized (v_A)} `{ t_Sized (impl_574521470_)} `{ t_HasActions (v_A)} `{ t_HasReceiveContext (impl_574521470_) ('unit)} (ctx : both L1 I1 (impl_574521470_)) (state : both L2 I2 (t_State)) : both (L1 :|: L2 :|: fset [remaining_bid_loc;return_action_loc]) (I1 :|: I2) ((t_State × t_Result (v_A) (t_FinalizeError))) := + auction_finalize ctx state := + solve_lift (run (letm[choice_typeMonad.result_bind_code ((t_State × t_Result (v_A) (t_FinalizeError)))] _ := ifb not ((f_auction_state state) =.? AuctionState_NotSoldYet) + then letm[choice_typeMonad.result_bind_code ((t_State × t_Result (v_A) (t_FinalizeError)))] hoist3 := v_Break (prod_b (state,Result_Err FinalizeError_AuctionFinalized)) in + ControlFlow_Continue (never_to_any hoist3) + else ControlFlow_Continue (ret_both (tt : 'unit)) in + letb slot_time := f_slot_time (f_metadata ctx) in + letm[choice_typeMonad.result_bind_code ((t_State × t_Result (v_A) (t_FinalizeError)))] _ := ifb not (slot_time >.? (f_expiry state)) + then letm[choice_typeMonad.result_bind_code ((t_State × t_Result (v_A) (t_FinalizeError)))] hoist4 := v_Break (prod_b (state,Result_Err FinalizeError_AuctionStillActive)) in + ControlFlow_Continue (never_to_any hoist4) + else ControlFlow_Continue (ret_both (tt : 'unit)) in + letb owner := f_owner ctx in + letb balance := f_self_balance ctx in + letm[choice_typeMonad.result_bind_code ((t_State × t_Result (v_A) (t_FinalizeError)))] '(state,hax_temp_output) := ifb balance =.? (impl__Amount__zero (ret_both (tt : 'unit))) + then ControlFlow_Continue (prod_b (state,Result_Ok (f_accept (ret_both (tt : 'unit))))) + else letb return_action loc(return_action_loc) := f_simple_transfer owner (f_highest_bid state) in + letb remaining_bid loc(remaining_bid_loc) := Option_None in + letb '(remaining_bid,return_action,state) := foldi_both_list (f_into_iter (impl_91__iter (f_bids state))) (fun '(addr,amnt) => + ssp (fun '(remaining_bid,return_action,state) => + solve_lift (ifb amnt <.? (f_highest_bid state) + then ControlFlow_Continue (letb return_action := f_and_then return_action (f_simple_transfer addr amnt) in + prod_b (remaining_bid,return_action,state)) + else letm[choice_typeMonad.result_bind_code ((t_State × t_Result (v_A) (t_FinalizeError)))] _ := ifb not (impl__is_none remaining_bid) + then letm[choice_typeMonad.result_bind_code ((t_State × t_Result (v_A) (t_FinalizeError)))] hoist5 := v_Break (prod_b (state,Result_Err FinalizeError_BidMapError)) in + ControlFlow_Continue (never_to_any hoist5) + else ControlFlow_Continue (ret_both (tt : 'unit)) in + ControlFlow_Continue (letb state := Build_t_State[state] (f_auction_state := AuctionState_Sold addr) in + letb remaining_bid := Option_Some (prod_b (addr,amnt)) in + prod_b (remaining_bid,return_action,state))) : both (*4*)(L1:|:L2:|:L2:|:L1:|:L2:|:fset [remaining_bid_loc;return_action_loc;remaining_bid_loc;return_action_loc]) (I1:|:I2:|:I2:|:I1:|:I2) (t_ControlFlow ((t_State × t_Result (v_A) (t_FinalizeError))) ((t_Option ((t_AccountAddress × t_Amount)) × v_A × t_State))))) (prod_b (remaining_bid,return_action,state)) in + matchb remaining_bid with + | Option_Some_case (_,amount) => + letb amount := ret_both (((amount)) : ((t_AccountAddress × t_Amount))) in + letm[choice_typeMonad.result_bind_code ((t_State × t_Result (v_A) (t_FinalizeError)))] _ := ifb not (amount =.? (f_highest_bid state)) + then letm[choice_typeMonad.result_bind_code ((t_State × t_Result (v_A) (t_FinalizeError)))] hoist6 := v_Break (prod_b (state,Result_Err FinalizeError_BidMapError)) in + ControlFlow_Continue (never_to_any hoist6) + else ControlFlow_Continue (ret_both (tt : 'unit)) in + ControlFlow_Continue (solve_lift (prod_b (state,Result_Ok return_action))) + | Option_None_case => + letm[choice_typeMonad.result_bind_code ((t_State × t_Result (v_A) (t_FinalizeError)))] hoist7 := v_Break (prod_b (state,Result_Err FinalizeError_BidMapError)) in + ControlFlow_Continue (solve_lift (prod_b (state,never_to_any hoist7))) + end in + ControlFlow_Continue (prod_b (state,hax_temp_output)))) : both (L1 :|: L2 :|: fset [remaining_bid_loc;return_action_loc]) (I1 :|: I2) ((t_State × t_Result (v_A) (t_FinalizeError))). +Fail Next Obligation. + +Equations fresh_state {L1 : {fset Location}} {L2 : {fset Location}} {I1 : Interface} {I2 : Interface} (itm : both L1 I1 (t_Vec (int8) (t_Global))) (exp : both L2 I2 (t_Timestamp)) : both (L1 :|: L2) (I1 :|: I2) (t_State) := + fresh_state itm exp := + solve_lift (Build_t_State (f_auction_state := AuctionState_NotSoldYet) (f_highest_bid := impl__Amount__zero (ret_both (tt : 'unit))) (f_item := itm) (f_expiry := exp) (f_bids := impl_18__new (ret_both (tt : 'unit)))) : both (L1 :|: L2) (I1 :|: I2) (t_State). +Fail Next Obligation. + +Equations auction_init {L1 : {fset Location}} {I1 : Interface} {impl_108907986_ : _} `{ t_Sized (impl_108907986_)} `{ t_HasInitContext (impl_108907986_) ('unit)} (ctx : both L1 I1 (impl_108907986_)) : both L1 I1 (t_Result (t_State) (t_Reject)) := + auction_init ctx := + solve_lift (run (letb '(_,out) := f_get (f_parameter_cursor ctx) in + letm[choice_typeMonad.result_bind_code (t_Result (t_State) (t_Reject))] (parameter:t_InitParameter) := matchb f_branch out with + | ControlFlow_Break_case residual => + letb residual := ret_both ((residual) : (t_Result (t_Infallible) (t_ParseError))) in + letm[choice_typeMonad.result_bind_code (t_Result (t_State) (t_Reject))] hoist8 := v_Break (f_from_residual residual) in + ControlFlow_Continue (solve_lift (never_to_any hoist8)) + | ControlFlow_Continue_case val => + letb val := ret_both ((val) : (t_InitParameter)) in + ControlFlow_Continue (solve_lift val) + end in + ControlFlow_Continue (Result_Ok (fresh_state (f_init_parameter_item parameter) (f_init_parameter_expiry parameter))))) : both L1 I1 (t_Result (t_State) (t_Reject)). +Fail Next Obligation. + +(** Concert lib part **) +From ConCert.Utils Require Import Extras. +Export Extras. +From ConCert.Utils Require Import Automation. +Export Automation. +From ConCert.Execution Require Import Serializable. +Export Serializable. +From ConCert.Execution Require Import Blockchain. +Export Blockchain. +From ConCert.Execution Require Import ContractCommon. +Export ContractCommon. +From ConCert.Execution Require Import Serializable. +Export Serializable. +Require Import ConCertLib. +Export ConCertLib. + +Definition state_auction : choice_type := + t_State. + +Definition receive_auction_bid {v_A : _} {impl_574521470_ : _} `{ t_Sized (v_A)} `{ t_Sized (impl_574521470_)} `{ t_HasActions (v_A)} `{ t_HasReceiveContext (impl_574521470_) ('unit)} {L0 : {fset Location}} {I0 : Interface} (st : both L0 I0 (state_auction)) : both _ _ (t_Result ((v_A × state_auction)) (t_ParseError)) := + auction_bid st. + +Definition receive_auction_finalize {v_A : _} {impl_574521470_ : _} `{ t_Sized (v_A)} `{ t_Sized (impl_574521470_)} `{ t_HasActions (v_A)} `{ t_HasReceiveContext (impl_574521470_) ('unit)} {L0 : {fset Location}} {I0 : Interface} (st : both L0 I0 (state_auction)) : both _ _ (t_Result ((v_A × state_auction)) (t_ParseError)) := + auction_finalize st. + +Definition init_auction (chain : Chain) (ctx : ContractCallContext) (st : state_auction) : ResultMonad.result (state_auction) (t_ParseError) := + ResultMonad.Ok st. + +Inductive Msg_auction: Type := +| msg_auction_bid : Msg_auction +| msg_auction_finalize : Msg_auction. +#[global] Program Instance state_auction_t_HasReceiveContext : t_HasReceiveContext state_auction 'unit := + {| f_get := (fun (Ctx : _) {L : {fset Location}} {I : Interface} => (solve_lift (@ret_both (t_ParamType × t_Result Ctx t_ParseError)) (tt, inr tt)) : _)|}. +Fail Next Obligation. +#[global] Program Instance state_auction_t_Sized : t_Sized state_auction := + fun x => + x. +Fail Next Obligation. +#[global] Program Instance state_auction_t_HasActions : t_HasActions state_auction := + Admitted. +Fail Next Obligation. +Equations receive_auction (chain : Chain) (ctx : ContractCallContext) (st : state_auction) (msg : Datatypes.option Msg_auction) : ResultMonad.result (state_auction * list ActionBody) t_ParseError := + receive_auction chain ctx st msg := + match msg with + | Some msg_auction_bid => + match (is_pure (both_prog (receive_auction_bid (ret_both st)))) with + | inl x => ResultMonad.Ok ((fst x), []) + | inr x => ResultMonad.Err x + end + | Some msg_auction_finalize => + match (is_pure (both_prog (receive_auction_finalize (ret_both st)))) with + | inl x => ResultMonad.Ok ((fst x), []) + | inr x => ResultMonad.Err x + end + | _ => + ResultMonad.Err tt + end : ResultMonad.result (state_auction * list ActionBody) t_ParseError. +Fail Next Obligation. +#[global] Program Instance state_auction_Serializable : Serializable state_auction := + _. +Fail Next Obligation. +#[global] Program Instance Msg_auction_Serializable : Serializable Msg_auction := + Derive Serializable Msg_OVN_rect. +Fail Next Obligation. +Definition contract_auction : Contract (state_auction) (Msg_auction) (state_auction) (t_ParseError) := + build_contract init_auction receive_auction. diff --git a/auction/proofs/ssprove/extraction/Hacspec_auction_Export_auction_finalize.v b/auction/proofs/ssprove/extraction/Hacspec_auction_Export_auction_finalize.v new file mode 100644 index 0000000..4c8ece1 --- /dev/null +++ b/auction/proofs/ssprove/extraction/Hacspec_auction_Export_auction_finalize.v @@ -0,0 +1,40 @@ +(* File automatically generated by Hacspec *) +Set Warnings "-notation-overridden,-ambiguous-paths". +From Crypt Require Import choice_type Package Prelude. +Import PackageNotation. +From extructures Require Import ord fset. +From mathcomp Require Import word_ssrZ word. +From Jasmin Require Import word. + +From Coq Require Import ZArith. +From Coq Require Import Strings.String. +Import List.ListNotations. +Open Scope list_scope. +Open Scope Z_scope. +Open Scope bool_scope. + +From Hacspec Require Import ChoiceEquality. +From Hacspec Require Import LocationUtility. +From Hacspec Require Import Hacspec_Lib_Comparable. +From Hacspec Require Import Hacspec_Lib_Pre. +From Hacspec Require Import Hacspec_Lib. + +Open Scope hacspec_scope. +Import choice.Choice.Exports. + +Obligation Tactic := (* try timeout 8 *) solve_ssprove_obligations. + +Require Import Hacspec_concordium. +Export Hacspec_concordium. + +Require Import SeekFrom. +Export SeekFrom. + +Require Import ContractState. +Export ContractState. + +Require Import Logger. +Export Logger. + +Require Import trap. +Export trap. diff --git a/auction/src/auction.rs b/auction/src/auction.rs new file mode 100644 index 0000000..706e85a --- /dev/null +++ b/auction/src/auction.rs @@ -0,0 +1,423 @@ +#![no_std] +#![feature(register_tool)] +#![register_tool(hax)] + +#[hax_lib_macros::exclude] +extern crate hax_lib_macros; +#[hax_lib_macros::exclude] +use hax_lib_macros::*; + +// #[exclude] +// use creusot_contracts::{ensures, requires}; + +#[exclude] +use hacspec_concordium::*; +#[exclude] +use hacspec_concordium::{collections::BTreeMap}; + +// #[cfg(feature = "hacspec")] +// use concert_lib::*; + +/// # Implementation of an auction smart contract +/// +/// To bid, participants send GTU using the bid function. +/// The participant with the highest bid wins the auction. +/// Bids are to be placed before the auction end. After that, bids are refused. +/// Only bids that exceed the highest bid are accepted. +/// Bids are placed incrementally, i.e., an account's bid is considered +/// to be the **sum** of all bids. +/// +/// Example: if Alice first bid 1 GTU and then bid 2 GTU, her total +/// bid is 3 GTU. The bidding will only go through if 3 GTU is higher than +/// the currently highest bid. +/// +/// After the auction end, any account can finalize the auction. +/// The auction can be finalized only once. +/// When the auction is finalized, every participant except the +/// winner gets their money back. + +/// The state in which an auction can be. +#[derive(Debug, Serialize, SchemaType, Eq, PartialEq, PartialOrd)] +pub enum AuctionState { + /// The auction is either + /// - still accepting bids or + /// - not accepting bids because it's past the auction end, but nobody has + /// finalized the auction yet. + NotSoldYet, + /// The auction is over and the item has been sold to the indicated address. + Sold(AccountAddress), // winning account's address +} + +/// The state of the smart contract. +/// This is the state that will be shown when the contract is queried using +/// `concordium-client contract show`. +#[hax::contract_state(contract = "auction")] +#[derive(Debug, Serialize, SchemaType, Eq, PartialEq)] +pub struct State { + /// Has the item been sold? + auction_state: AuctionState, + /// The highest bid so far (stored explicitly so that bidders can quickly + /// see it) + highest_bid: Amount, + /// The sold item (to be displayed to the auction participants), encoded in + /// ASCII + item: Vec, + /// Expiration time of the auction at which bids will be closed (to be + /// displayed to the auction participants) + expiry: Timestamp, + /// Keeping track of which account bid how much money + // #[concordium(map_size_length = 2)] + bids: BTreeMap, +} + +/// A helper function to create a state for a new auction. +fn fresh_state(itm: Vec, exp: Timestamp) -> State { + State { + auction_state: AuctionState::NotSoldYet, + highest_bid: Amount::zero(), + item: itm, + expiry: exp, + bids: BTreeMap::new(), + } +} + +/// Type of the parameter to the `init` function. +#[derive(Serialize, SchemaType)] +struct InitParameter { + /// The item to be sold, as a sequence of ASCII codes. + init_parameter_item: Vec, + /// Time of the auction end in the RFC 3339 format (https://tools.ietf.org/html/rfc3339) + init_parameter_expiry: Timestamp, +} + +/// For errors in which the `bid` function can result +#[derive(Debug, PartialEq, Eq, Clone, Reject)] +enum BidError { + ContractSender, // raised if a contract, as opposed to account, tries to bid + BidTooLow, /* { bid: Amount, highest_bid: Amount } */ + // raised if bid is lower than highest amount + BidsOverWaitingForAuctionFinalization, // raised if bid is placed after auction expiry time + AuctionFinalized, /* raised if bid is placed after auction has been + * finalized */ +} + +/// For errors in which the `finalize` function can result +#[derive(Debug, PartialEq, Eq, Clone, Reject)] +enum FinalizeError { + BidMapError, /* raised if there is a mistake in the bid map that keeps track of all + * accounts' bids */ + AuctionStillActive, // raised if there is an attempt to finalize the auction before its expiry + AuctionFinalized, // raised if there is an attempt to finalize an already finalized auction +} + +/// Init function that creates a new auction +#[hax::init(contract = "auction", parameter = "InitParameter")] +fn auction_init(ctx: &impl HasInitContext) -> InitResult { + let parameter: InitParameter = ctx.parameter_cursor().get()?; + Ok(fresh_state(parameter.init_parameter_item, parameter.init_parameter_expiry)) +} + +/// Receive function in which accounts can bid before the auction end time +#[hax::receive(contract = "auction", name = "bid", payable)] +fn auction_bid( + ctx: &impl HasReceiveContext, + amount: Amount, + state: State, +) -> Result<(A, State), BidError> { + // ensure!(state.auction_state == AuctionState::NotSoldYet, BidError::AuctionFinalized); + + let slot_time = ctx.metadata().slot_time(); + // ensure!(slot_time <= state.expiry, BidError::BidsOverWaitingForAuctionFinalization); + + let sender_address = match ctx.sender() { + Address::Contract(_) => bail!(BidError::ContractSender), + Address::Account(account_address) => account_address, + }; + // state.bids.entry(sender_address).or_insert_with(Amount::zero); + let bid_to_update : u64 = + if state.bids.contains_key(&sender_address) { + state.bids[&sender_address].micro_ccd + } else { + 0 + }; + + bid_to_update += amount.micro_ccd; + // Ensure that the new bid exceeds the highest bid so far + ensure!( + bid_to_update > state.highest_bid.micro_ccd, + BidError::BidTooLow /* { bid: amount, highest_bid: state.highest_bid } */ + ); + state.highest_bid = Amount {micro_ccd: bid_to_update }; + + Ok((A::accept(), state)) +} + +/// Receive function used to finalize the auction, returning all bids to their +/// senders, except for the winning bid +#[hax::receive(contract = "auction", name = "finalize")] +fn auction_finalize( + ctx: &impl HasReceiveContext, + state: &mut State, +) -> Result { + ensure!(state.auction_state == AuctionState::NotSoldYet, FinalizeError::AuctionFinalized); + + let slot_time = ctx.metadata().slot_time(); + ensure!(slot_time > state.expiry, FinalizeError::AuctionStillActive); + + let owner = ctx.owner(); + + let balance = ctx.self_balance(); + if balance == Amount::zero() { + Ok(A::accept()) + } else { + let mut return_action = A::simple_transfer(&owner, state.highest_bid); + let mut remaining_bid = None; + // Return bids that are smaller than highest + for (addr, &amnt) in state.bids.iter() { + if amnt < state.highest_bid { + return_action = return_action.and_then(A::simple_transfer(addr, amnt)); + } else { + ensure!(remaining_bid.is_none(), FinalizeError::BidMapError); + state.auction_state = AuctionState::Sold(*addr); + remaining_bid = Some((addr, amnt)); + } + } + // Ensure that the only bidder left in the map is the one with the highest bid + match remaining_bid { + Some((_, amount)) => { + ensure!(amount == state.highest_bid, FinalizeError::BidMapError); + Ok(return_action) + } + None => bail!(FinalizeError::BidMapError), + } + } +} + +#[cfg(test)] +mod tests { + use super::*; + use std::sync::atomic::{AtomicU8, Ordering}; + use test_infrastructure::*; + + // A counter for generating new account addresses + static ADDRESS_COUNTER: AtomicU8 = AtomicU8::new(0); + const AUCTION_END: u64 = 1; + const ITEM: &str = "Starry night by Van Gogh"; + + fn dummy_fresh_state() -> State { dummy_active_state(Amount::zero(), BTreeMap::new()) } + + fn dummy_active_state(highest: Amount, bids: BTreeMap) -> State { + State { + auction_state: AuctionState::NotSoldYet, + highest_bid: highest, + item: ITEM.as_bytes().to_vec(), + expiry: Timestamp::from_timestamp_millis(AUCTION_END), + bids, + } + } + + fn expect_error(expr: Result, err: E, msg: &str) + where + E: Eq + Debug, + T: Debug, { + let actual = expr.expect_err(msg); + assert_eq!(actual, err); + } + + fn item_expiry_parameter() -> InitParameter { + InitParameter { + item: ITEM.as_bytes().to_vec(), + expiry: Timestamp::from_timestamp_millis(AUCTION_END), + } + } + + fn create_parameter_bytes(parameter: &InitParameter) -> Vec { to_bytes(parameter) } + + fn parametrized_init_ctx<'a>(parameter_bytes: &'a Vec) -> InitContextTest<'a> { + let mut ctx = InitContextTest::empty(); + ctx.set_parameter(parameter_bytes); + ctx + } + + fn new_account() -> AccountAddress { + let account = AccountAddress([ADDRESS_COUNTER.load(Ordering::SeqCst); 32]); + ADDRESS_COUNTER.fetch_add(1, Ordering::SeqCst); + account + } + + fn new_account_ctx<'a>() -> (AccountAddress, ReceiveContextTest<'a>) { + let account = new_account(); + let ctx = new_ctx(account, account, AUCTION_END); + (account, ctx) + } + + fn new_ctx<'a>( + owner: AccountAddress, + sender: AccountAddress, + slot_time: u64, + ) -> ReceiveContextTest<'a> { + let mut ctx = ReceiveContextTest::empty(); + ctx.set_sender(Address::Account(sender)); + ctx.set_owner(owner); + ctx.set_metadata_slot_time(Timestamp::from_timestamp_millis(slot_time)); + ctx + } + + #[test] + /// Test that the smart-contract initialization sets the state correctly + /// (no bids, active state, indicated auction-end time and item name). + fn test_init() { + let parameter_bytes = create_parameter_bytes(&item_expiry_parameter()); + let ctx = parametrized_init_ctx(¶meter_bytes); + + let state_result = auction_init(&ctx); + let state = state_result.expect("Contract initialization results in error"); + assert_eq!(state, dummy_fresh_state(), "Auction state should be new after initialization"); + } + + #[test] + /// Test a sequence of bids and finalizations: + /// 0. Auction is initialized. + /// 1. Alice successfully bids 0.1 GTU. + /// 2. Alice successfully bids another 0.1 GTU, highest bid becomes 0.2 GTU + /// (the sum of her two bids). 3. Bob successfully bids 0.3 GTU, highest + /// bid becomes 0.3 GTU. 4. Someone tries to finalize the auction before + /// its end time. Attempt fails. 5. Dave successfully finalizes the + /// auction after its end time. Alice gets her money back, while + /// Carol (the owner of the contract) collects the highest bid amount. + /// 6. Attempts to subsequently bid or finalize fail. + fn test_auction_bid_and_finalize() { + let parameter_bytes = create_parameter_bytes(&item_expiry_parameter()); + let ctx0 = parametrized_init_ctx(¶meter_bytes); + + let amount = Amount::from_micro_gtu(100); + let winning_amount = Amount::from_micro_gtu(300); + let big_amount = Amount::from_micro_gtu(500); + + let mut bid_map = BTreeMap::new(); + + // initializing auction + let mut state = auction_init(&ctx0).expect("Initialization should pass"); + + // 1st bid: account1 bids amount1 + let (alice, alice_ctx) = new_account_ctx(); + verify_bid(&mut state, alice, &alice_ctx, amount, &mut bid_map, amount); + + // 2nd bid: account1 bids `amount` again + // should work even though it's the same amount because account1 simply + // increases their bid + verify_bid(&mut state, alice, &alice_ctx, amount, &mut bid_map, amount + amount); + + // 3rd bid: second account + let (bob, bob_ctx) = new_account_ctx(); + verify_bid(&mut state, bob, &bob_ctx, winning_amount, &mut bid_map, winning_amount); + + // trying to finalize auction that is still active + // (specifically, the bid is submitted at the last moment, at the AUCTION_END + // time) + let mut ctx4 = ReceiveContextTest::empty(); + ctx4.set_metadata_slot_time(Timestamp::from_timestamp_millis(AUCTION_END)); + let finres: Result = auction_finalize(&ctx4, &mut state); + expect_error( + finres, + FinalizeError::AuctionStillActive, + "Finalizing auction should fail when it's before auction-end time", + ); + + // finalizing auction + let carol = new_account(); + let dave = new_account(); + let mut ctx5 = new_ctx(carol, dave, AUCTION_END + 1); + ctx5.set_self_balance(winning_amount); + let finres2: Result = auction_finalize(&ctx5, &mut state); + let actions = finres2.expect("Finalizing auction should work"); + assert_eq!( + actions, + ActionsTree::simple_transfer(&carol, winning_amount) + .and_then(ActionsTree::simple_transfer(&alice, amount + amount)) + ); + assert_eq!(state, State { + auction_state: AuctionState::Sold(bob), + highest_bid: winning_amount, + item: ITEM.as_bytes().to_vec(), + expiry: Timestamp::from_timestamp_millis(AUCTION_END), + bids: bid_map, + }); + + // attempting to finalize auction again should fail + let finres3: Result = auction_finalize(&ctx5, &mut state); + expect_error( + finres3, + FinalizeError::AuctionFinalized, + "Finalizing auction a second time should fail", + ); + + // attempting to bid again should fail + let res4: Result = auction_bid(&bob_ctx, big_amount, &mut state); + expect_error( + res4, + BidError::AuctionFinalized, + "Bidding should fail because the auction is finalized", + ); + } + + fn verify_bid( + mut state: &mut State, + account: AccountAddress, + ctx: &ContextTest, + amount: Amount, + bid_map: &mut BTreeMap, + highest_bid: Amount, + ) { + let res: Result = auction_bid(ctx, amount, &mut state); + res.expect("Bidding should pass"); + bid_map.insert(account, highest_bid); + assert_eq!(*state, dummy_active_state(highest_bid, bid_map.clone())); + } + + #[test] + /// Bids for amounts lower or equal to the highest bid should be rejected. + fn test_auction_bid_repeated_bid() { + let (account1, ctx1) = new_account_ctx(); + let ctx2 = new_account_ctx().1; + + let parameter_bytes = create_parameter_bytes(&item_expiry_parameter()); + let ctx0 = parametrized_init_ctx(¶meter_bytes); + + let amount = Amount::from_micro_gtu(100); + + let mut bid_map = BTreeMap::new(); + + // initializing auction + let mut state = auction_init(&ctx0).expect("Init results in error"); + + // 1st bid: account1 bids amount1 + verify_bid(&mut state, account1, &ctx1, amount, &mut bid_map, amount); + + // 2nd bid: account2 bids amount1 + // should fail because amount is equal to highest bid + let res2: Result = auction_bid(&ctx2, amount, &mut state); + expect_error( + res2, + BidError::BidTooLow, /* { bid: amount, highest_bid: amount } */ + "Bidding 2 should fail because bid amount must be higher than highest bid", + ); + } + + #[test] + /// Bids for 0 GTU should be rejected. + fn test_auction_bid_zero() { + let ctx1 = new_account_ctx().1; + let parameter_bytes = create_parameter_bytes(&item_expiry_parameter()); + let ctx = parametrized_init_ctx(¶meter_bytes); + + let mut state = auction_init(&ctx).expect("Init results in error"); + + let res: Result = auction_bid(&ctx1, Amount::zero(), &mut state); + expect_error( + res, + BidError::BidTooLow, /* { bid: Amount::zero(), highest_bid: Amount::zero()} */ + "Bidding zero should fail", + ); + } +} diff --git a/basic/proofs/coq/extraction/Example.v b/basic/proofs/coq/extraction/Example.v new file mode 100644 index 0000000..e4fbf27 --- /dev/null +++ b/basic/proofs/coq/extraction/Example.v @@ -0,0 +1,14 @@ +(* File automatically generated by Hacspec *) +From Hacspec Require Import Hacspec_Lib MachineIntegers. +From Coq Require Import ZArith. +Import List.ListNotations. +Open Scope Z_scope. +Open Scope bool_scope. + +(*Not implemented yet? todo(item)*) + +Definition test : int8 := + let acc := ((@repr WORDSIZE8 0)) : int8 in + let acc := (f_fold (f_into_iter (Build_Range (@repr WORDSIZE8 1)(@repr WORDSIZE8 10))) acc (fun acc i => + acc.+i)) : int8 in + acc.+(@repr WORDSIZE8 1). diff --git a/basic/proofs/ssprove/extraction/Example.v b/basic/proofs/ssprove/extraction/Example.v new file mode 100644 index 0000000..7ada48b --- /dev/null +++ b/basic/proofs/ssprove/extraction/Example.v @@ -0,0 +1,35 @@ +(* File automatically generated by Hacspec *) +Set Warnings "-notation-overridden,-ambiguous-paths". +From Crypt Require Import choice_type Package Prelude. +Import PackageNotation. +From extructures Require Import ord fset. +From mathcomp Require Import word_ssrZ word. +(* From Jasmin Require Import word. *) + +From Coq Require Import ZArith. +From Coq Require Import Strings.String. +Import List.ListNotations. +Open Scope list_scope. +Open Scope Z_scope. +Open Scope bool_scope. + +From Hacspec Require Import ChoiceEquality. +From Hacspec Require Import LocationUtility. +From Hacspec Require Import Hacspec_Lib_Comparable. +From Hacspec Require Import Hacspec_Lib_Pre. +From Hacspec Require Import Hacspec_Lib. + +Open Scope hacspec_scope. +Import choice.Choice.Exports. + +Obligation Tactic := (* try timeout 8 *) solve_ssprove_obligations. + +(*Not implemented yet? todo(item)*) + +Equations test (_ : both 'unit) : both int8 := + test _ := + letb acc := ret_both (0 : int8) in + letb acc := f_fold (f_into_iter (Build_t_Range (f_start := ret_both (1 : int8)) (f_end := ret_both (10 : int8)))) acc (fun acc => fun i => + acc .+ i) in + solve_lift (acc .+ (ret_both (1 : int8))) : both int8. +Fail Next Obligation. diff --git a/bip-340/Cargo.toml b/bip-340/Cargo.toml index fd7e685..8960405 100644 --- a/bip-340/Cargo.toml +++ b/bip-340/Cargo.toml @@ -12,6 +12,11 @@ path = "src/bip-340.rs" hacspec-lib = { git = "https://github.com/hacspec/hacspec.git" } hacspec-sha256 = { path = "../sha256" } +group = "0.13" +ff = "0.13" +subtle = "*" +rand_core = "0.6" + [dev-dependencies] quickcheck = "1" quickcheck_macros = "1" diff --git a/bip-340/src/bip-340.rs b/bip-340/src/bip-340.rs index 27997e1..a9a8a87 100644 --- a/bip-340/src/bip-340.rs +++ b/bip-340/src/bip-340.rs @@ -33,7 +33,7 @@ pub type AffinePoint = (FieldElement, FieldElement); public_bytes!(PBytes32, 32); -#[derive(Debug, Copy, Clone)] +#[derive(Debug, Copy, Clone, PartialEq, Eq)] pub enum Point { Affine(AffinePoint), AtInfinity, @@ -318,3 +318,464 @@ pub fn verify(msg: Message, pubkey: PublicKey, sig: Signature) -> VerificationRe VerificationResult::Ok(()) } } + +///////////////// +// Group trait // +///////////////// + +pub mod GroupTrait { + use super::*; + use group::*; + use hacspec_lib::*; + + use core::iter::{Product, Sum}; + use core::ops::{Add, AddAssign, Mul, MulAssign, Neg, Sub, SubAssign}; + use ff::{Field, PrimeField}; + use group::*; + use rand_core::RngCore; + use subtle::{Choice, ConditionallySelectable, ConstantTimeEq, CtOption}; + + impl Sum for Point { + fn sum>(iter: I) -> Self { + let mut accum = Point::AtInfinity; + for x in iter { + accum = accum + x; + } + accum + } + } + + impl<'b> Sum<&'b Point> for Point { + fn sum>(iter: I) -> Self { + let mut accum = Point::AtInfinity; + for x in iter { + accum = accum + x; + } + accum + } + } + + impl Neg for Point { + type Output = Point; + + fn neg(self) -> Self::Output { + match self { + Point::AtInfinity => Point::AtInfinity, + Point::Affine((x, y)) => Point::Affine((x, FieldElement::from_literal(0u128) - y)), + } + } + } + + impl Add for Point { + type Output = Point; + #[inline] + fn add(self, rhs: Point) -> Self::Output { + point_add(self, rhs) + } + } + + impl<'b> Add<&'b Point> for Point { + type Output = Point; + #[inline] + fn add(self, rhs: &'b Point) -> Self::Output { + self + *rhs + } + } + + impl Sub for Point { + type Output = Point; + #[inline] + fn sub(self, rhs: Point) -> Self::Output { + self + (-rhs) + } + } + + impl<'b> Sub<&'b Point> for Point { + type Output = Point; + #[inline] + fn sub(self, rhs: &'b Point) -> Self::Output { + self - *rhs + } + } + + impl Mul for Point { + type Output = Point; + #[inline] + fn mul(self, rhs: Scalar) -> Self::Output { + point_mul(rhs, self) + } + } + + impl<'b> Mul<&'b Scalar> for Point { + type Output = Point; + #[inline] + fn mul(self, rhs: &'b Scalar) -> Self::Output { + self * *rhs + } + } + + impl SubAssign for Point { + #[inline] + fn sub_assign(&mut self, rhs: Point) { + *self = *self - rhs; + } + } + + impl<'b> SubAssign<&'b Point> for Point { + #[inline] + fn sub_assign(&mut self, rhs: &'b Point) { + *self = *self - *rhs; + } + } + + impl AddAssign for Point { + #[inline] + fn add_assign(&mut self, rhs: Point) { + *self = *self + rhs; + } + } + + impl<'b> AddAssign<&'b Point> for Point { + #[inline] + fn add_assign(&mut self, rhs: &'b Point) { + *self = *self + *rhs; + } + } + + impl MulAssign for Point { + #[inline] + fn mul_assign(&mut self, rhs: Scalar) { + *self = *self * rhs; + } + } + + impl<'b> MulAssign<&'b Scalar> for Point { + #[inline] + fn mul_assign(&mut self, rhs: &'b Scalar) { + *self = *self * *rhs; + } + } + + // Scalar impls + + impl Sum for Scalar { + fn sum>(iter: I) -> Self { + let mut accum = Scalar::from_literal(0u128); + for x in iter { + accum = accum + x; + } + accum + } + } + + impl<'b> Sum<&'b Scalar> for Scalar { + fn sum>(iter: I) -> Self { + let mut accum = Scalar::from_literal(0u128); + for x in iter { + accum = accum + x; + } + accum + } + } + + impl Product for Scalar { + fn product>(iter: I) -> Self { + let mut accum = Scalar::from_literal(1u128); + for x in iter { + accum = accum * x; + } + accum + } + } + + impl<'b> Product<&'b Scalar> for Scalar { + fn product>(iter: I) -> Self { + let mut accum = Scalar::from_literal(1u128); + for x in iter { + accum = accum * x; + } + accum + } + } + + impl Neg for Scalar { + type Output = Scalar; + + fn neg(self) -> Self::Output { + -self + } + } + + impl<'b> Add<&'b Scalar> for Scalar { + type Output = Scalar; + #[inline] + fn add(self, rhs: &'b Scalar) -> Self::Output { + self + *rhs + } + } + + impl<'b> Sub<&'b Scalar> for Scalar { + type Output = Scalar; + #[inline] + fn sub(self, rhs: &'b Scalar) -> Self::Output { + self - *rhs + } + } + + impl<'b> Mul<&'b Scalar> for Scalar { + type Output = Scalar; + #[inline] + fn mul(self, rhs: &'b Scalar) -> Self::Output { + self * *rhs + } + } + + impl SubAssign for Scalar { + #[inline] + fn sub_assign(&mut self, rhs: Scalar) { + *self = *self - rhs; + } + } + + impl<'b> SubAssign<&'b Scalar> for Scalar { + #[inline] + fn sub_assign(&mut self, rhs: &'b Scalar) { + *self = *self - *rhs; + } + } + + impl AddAssign for Scalar { + #[inline] + fn add_assign(&mut self, rhs: Scalar) { + *self = *self + rhs; + } + } + + impl<'b> AddAssign<&'b Scalar> for Scalar { + #[inline] + fn add_assign(&mut self, rhs: &'b Scalar) { + *self = *self + *rhs; + } + } + + impl MulAssign for Scalar { + #[inline] + fn mul_assign(&mut self, rhs: Scalar) { + *self = *self * rhs; + } + } + + impl<'b> MulAssign<&'b Scalar> for Scalar { + #[inline] + fn mul_assign(&mut self, rhs: &'b Scalar) { + *self = *self * *rhs; + } + } + + // AffinePoint + + impl Add for Point { + type Output = Point; + #[inline] + fn add(self, rhs: AffinePoint) -> Self::Output { + self - Point::Affine(rhs) + } + } + + impl<'b> Add<&'b AffinePoint> for Point { + type Output = Point; + #[inline] + fn add(self, rhs: &'b AffinePoint) -> Self::Output { + self - Point::Affine(*rhs) + } + } + + impl Sub for Point { + type Output = Point; + #[inline] + fn sub(self, rhs: AffinePoint) -> Self::Output { + self - Point::Affine(rhs) + } + } + + impl<'b> Sub<&'b AffinePoint> for Point { + type Output = Point; + #[inline] + fn sub(self, rhs: &'b AffinePoint) -> Self::Output { + self - Point::Affine(*rhs) + } + } + + impl SubAssign for Point { + #[inline] + fn sub_assign(&mut self, rhs: AffinePoint) { + *self = *self - Point::Affine(rhs); + } + } + + impl<'b> SubAssign<&'b AffinePoint> for Point { + #[inline] + fn sub_assign(&mut self, rhs: &'b AffinePoint) { + *self = *self - Point::Affine(*rhs); + } + } + + impl AddAssign for Point { + #[inline] + fn add_assign(&mut self, rhs: AffinePoint) { + *self = *self + Point::Affine(rhs); + } + } + + impl<'b> AddAssign<&'b AffinePoint> for Point { + #[inline] + fn add_assign(&mut self, rhs: &'b AffinePoint) { + *self = *self + Point::Affine(*rhs); + } + } + + impl ConstantTimeEq for Scalar { + fn ct_eq(&self, other: &Self) -> Choice { + let a: Seq = self.to_public_byte_seq_be(); + let b: Seq = other.to_public_byte_seq_be(); + + let mut c: Choice = ConstantTimeEq::ct_eq(&a[0], &b[0]); + for i in 1..a.len() { + c &= ConstantTimeEq::ct_eq(&a[i], &b[i]); + } + + c + } + } + + impl ConditionallySelectable for Scalar { + fn conditional_select(a: &Self, b: &Self, c: Choice) -> Self { + if c.unwrap_u8() == 1 { + *a + } else { + *b + } + } + } + + impl From for Scalar { + fn from(i: u64) -> Self { + Scalar::from_literal(i as u128) + } + } + + impl Field for Scalar { + const ZERO: Self = Scalar(ScalarCanvas { + b: [0u8; 32], + sign: Sign::Plus, + signed: false, + }); + const ONE: Self = Scalar(ScalarCanvas { + b: [ + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, + ], + sign: Sign::Plus, + signed: false, + }); + fn random(mut rng: impl RngCore) -> Self { + let b: &mut [u8; 32] = &mut [0u8; 32]; + rng.fill_bytes(b); + Scalar::from_public_byte_seq_be(PBytes32(*b)) + } + + fn square(&self) -> Self { + *self * *self + } + + fn double(&self) -> Self { + *self + *self + } + + fn invert(&self) -> CtOption { + Scalar::invert(self) // TODO + } + + fn sqrt_ratio(a: &Self, b: &Self) -> (Choice, Self) { + (a.ct_eq(b), *a) // TODO + } + } + + impl PrimeField for Scalar { + type Repr = [u8; 32]; + fn from_repr(x: ::Repr) -> CtOption { + CtOption::new(Scalar::from_public_byte_seq_be(PBytes32(x)), x.ct_eq(&x)) + } + fn to_repr(&self) -> ::Repr { + let mut res: [u8; 32] = [0u8; 32]; + let val = Scalar::to_public_byte_seq_be(*self); + for i in 0..32 { + res[i] = val[i]; + } + res + } + fn is_odd(&self) -> Choice { + Choice::from(if self.bit(0) { 1 } else { 0 }) + } + const MODULUS: &'static str = + "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141"; + const NUM_BITS: u32 = 256; + const CAPACITY: u32 = 255; // TODO + const TWO_INV: Self = ::ONE; // TODO + const MULTIPLICATIVE_GENERATOR: Self = ::ONE; // TODO + const S: u32 = 42; + const ROOT_OF_UNITY: Self = ::ONE; // TODO + const ROOT_OF_UNITY_INV: Self = ::ONE; // TODO + const DELTA: Self = ::ONE; // TODO + } + + impl Group for Point { + type Scalar = Scalar; + fn random(mut rng: impl RngCore) -> Self { + point_mul_base(Scalar::random(rng)) + } + + fn identity() -> Self { + Point::AtInfinity + } + + fn generator() -> Self { + #[rustfmt::skip] + let gx = PBytes32([ + 0x79u8, 0xBEu8, 0x66u8, 0x7Eu8, 0xF9u8, 0xDCu8, 0xBBu8, 0xACu8, + 0x55u8, 0xA0u8, 0x62u8, 0x95u8, 0xCEu8, 0x87u8, 0x0Bu8, 0x07u8, + 0x02u8, 0x9Bu8, 0xFCu8, 0xDBu8, 0x2Du8, 0xCEu8, 0x28u8, 0xD9u8, + 0x59u8, 0xF2u8, 0x81u8, 0x5Bu8, 0x16u8, 0xF8u8, 0x17u8, 0x98u8 + ]); + #[rustfmt::skip] + let gy = PBytes32([ + 0x48u8, 0x3Au8, 0xDAu8, 0x77u8, 0x26u8, 0xA3u8, 0xC4u8, 0x65u8, + 0x5Du8, 0xA4u8, 0xFBu8, 0xFCu8, 0x0Eu8, 0x11u8, 0x08u8, 0xA8u8, + 0xFDu8, 0x17u8, 0xB4u8, 0x48u8, 0xA6u8, 0x85u8, 0x54u8, 0x19u8, + 0x9Cu8, 0x47u8, 0xD0u8, 0x8Fu8, 0xFBu8, 0x10u8, 0xD4u8, 0xB8u8 + ]); + Point::Affine(( + FieldElement::from_public_byte_seq_be(gx), + FieldElement::from_public_byte_seq_be(gy), + )) + } + + fn is_identity(&self) -> Choice { + match self { + Point::AtInfinity => Choice::from(1), + _ => Choice::from(0), + } + } + + fn double(&self) -> Self { + *self + *self + } + } + + impl Curve for Point { + type AffineRepr = AffinePoint; + fn to_affine(&self) -> Self::AffineRepr { + finite(*self).unwrap() + } + } +} diff --git a/bls12-381/proofs/ssprove/extraction/Hacspec_bls12_381.v b/bls12-381/proofs/ssprove/extraction/Hacspec_bls12_381.v new file mode 100644 index 0000000..15d41b3 --- /dev/null +++ b/bls12-381/proofs/ssprove/extraction/Hacspec_bls12_381.v @@ -0,0 +1,523 @@ +(* File automatically generated by Hacspec *) +Set Warnings "-notation-overridden,-ambiguous-paths". +From Crypt Require Import choice_type Package Prelude. +Import PackageNotation. +From extructures Require Import ord fset. +From mathcomp Require Import word_ssrZ word. +(* From Jasmin Require Import word. *) + +From Coq Require Import ZArith. +From Coq Require Import Strings.String. +Import List.ListNotations. +Open Scope list_scope. +Open Scope Z_scope. +Open Scope bool_scope. + +From Hacspec Require Import ChoiceEquality. +From Hacspec Require Import LocationUtility. +From Hacspec Require Import Hacspec_Lib_Comparable. +From Hacspec Require Import Hacspec_Lib_Pre. +From Hacspec Require Import Hacspec_Lib. + +Open Scope hacspec_scope. +Import choice.Choice.Exports. + +Obligation Tactic := (* try timeout 8 *) solve_ssprove_obligations. + +Require Import Hacspec_lib. +Export Hacspec_lib. + +Notation "'t_Fp12'" := (t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp). + +Notation "'t_Fp2'" := (t_Fp × t_Fp). + +Notation "'t_Fp6'" := (t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp). + +Notation "'t_G1'" := (t_Fp × t_Fp × 'bool). + +Notation "'t_G2'" := (t_Fp × t_Fp × t_Fp × t_Fp × 'bool). + +(*Not implemented yet? todo(item)*) + +Equations fp2add (n : both (t_Fp × t_Fp)) (m : both (t_Fp × t_Fp)) : both (t_Fp × t_Fp) := + fp2add n m := + letb '(n1,n2) := n in + letb '(m1,m2) := m in + solve_lift (prod_b (n1 .+ m1,n2 .+ m2)) : both (t_Fp × t_Fp). +Fail Next Obligation. + +Equations fp2mul (n : both (t_Fp × t_Fp)) (m : both (t_Fp × t_Fp)) : both (t_Fp × t_Fp) := + fp2mul n m := + letb '(n1,n2) := n in + letb '(m1,m2) := m in + letb x1 := (n1 .* m1) .- (n2 .* m2) in + letb x2 := (n1 .* m2) .+ (n2 .* m1) in + solve_lift (prod_b (x1,x2)) : both (t_Fp × t_Fp). +Fail Next Obligation. + +Equations fp6add (n : both (t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp)) (m : both (t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp)) : both (t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp) := + fp6add n m := + letb '(n1,n2,n3) := n in + letb '(m1,m2,m3) := m in + solve_lift (prod_b (fp2add n1 m1,fp2add n2 m2,fp2add n3 m3)) : both (t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp). +Fail Next Obligation. + +Equations fp12add (n : both (t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp)) (m : both (t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp)) : both (t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp) := + fp12add n m := + letb '(n1,n2) := n in + letb '(m1,m2) := m in + solve_lift (prod_b (fp6add n1 m1,fp6add n2 m2)) : both (t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp). +Fail Next Obligation. + +Equations g1 (_ : both 'unit) : both (t_Fp × t_Fp × 'bool) := + g1 _ := + solve_lift (prod_b (impl__Fp__from_hex (ret_both (17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb : chString)),impl__Fp__from_hex (ret_both (08b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1 : chString)),ret_both (false : 'bool))) : both (t_Fp × t_Fp × 'bool). +Fail Next Obligation. + +Equations g2 (_ : both 'unit) : both (t_Fp × t_Fp × t_Fp × t_Fp × 'bool) := + g2 _ := + solve_lift (prod_b (prod_b (impl__Fp__from_hex (ret_both (24aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb8 : chString)),impl__Fp__from_hex (ret_both (13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e : chString))),prod_b (impl__Fp__from_hex (ret_both (0ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801 : chString)),impl__Fp__from_hex (ret_both (0606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be : chString))),ret_both (false : 'bool))) : both (t_Fp × t_Fp × t_Fp × t_Fp × 'bool). +Fail Next Obligation. + +Notation "'t_ArrayFp'" := (nseq int64 6). +Definition ArrayFp : both t_ArrayFp -> both t_ArrayFp := + id. + +Notation "'t_SerializedFp'" := (nseq int8 48). +Definition SerializedFp : both t_SerializedFp -> both t_SerializedFp := + id. + +Notation "'t_Fp'" := (nat_mod 0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaab). +Definition Fp : both t_Fp -> both t_Fp := + id. + +Notation "'t_Scalar'" := (nat_mod 0x8000000000000000000000000000000000000000000000000000000000000000). +Definition Scalar : both t_Scalar -> both t_Scalar := + id. + +Equations fp2conjugate (n : both (t_Fp × t_Fp)) : both (t_Fp × t_Fp) := + fp2conjugate n := + letb '(n1,n2) := n in + solve_lift (prod_b (n1,(f_ZERO (ret_both (tt : 'unit))) .- n2)) : both (t_Fp × t_Fp). +Fail Next Obligation. + +Equations fp2fromfp (n : both t_Fp) : both (t_Fp × t_Fp) := + fp2fromfp n := + solve_lift (prod_b (n,f_ZERO (ret_both (tt : 'unit)))) : both (t_Fp × t_Fp). +Fail Next Obligation. + +Equations fp2inv (n : both (t_Fp × t_Fp)) : both (t_Fp × t_Fp) := + fp2inv n := + letb '(n1,n2) := n in + letb t0 := (n1 .* n1) .+ (n2 .* n2) in + letb t1 := impl__Fp__inv t0 in + letb x1 := n1 .* t1 in + letb x2 := (f_ZERO (ret_both (tt : 'unit))) .- (n2 .* t1) in + solve_lift (prod_b (x1,x2)) : both (t_Fp × t_Fp). +Fail Next Obligation. + +Equations fp2neg (n : both (t_Fp × t_Fp)) : both (t_Fp × t_Fp) := + fp2neg n := + letb '(n1,n2) := n in + solve_lift (prod_b ((f_ZERO (ret_both (tt : 'unit))) .- n1,(f_ZERO (ret_both (tt : 'unit))) .- n2)) : both (t_Fp × t_Fp). +Fail Next Obligation. + +Equations fp2sub (n : both (t_Fp × t_Fp)) (m : both (t_Fp × t_Fp)) : both (t_Fp × t_Fp) := + fp2sub n m := + solve_lift (fp2add n (fp2neg m)) : both (t_Fp × t_Fp). +Fail Next Obligation. + +Equations fp2zero (_ : both 'unit) : both (t_Fp × t_Fp) := + fp2zero _ := + solve_lift (fp2fromfp (f_ZERO (ret_both (tt : 'unit)))) : both (t_Fp × t_Fp). +Fail Next Obligation. + +Equations fp6fromfp2 (n : both (t_Fp × t_Fp)) : both (t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp) := + fp6fromfp2 n := + solve_lift (prod_b (n,fp2zero (ret_both (tt : 'unit)),fp2zero (ret_both (tt : 'unit)))) : both (t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp). +Fail Next Obligation. + +Equations fp6inv (n : both (t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp)) : both (t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp) := + fp6inv n := + letb '(n1,n2,n3) := n in + letb eps := prod_b (f_ONE (ret_both (tt : 'unit)),f_ONE (ret_both (tt : 'unit))) in + letb t1 := fp2mul n1 n1 in + letb t2 := fp2mul n2 n2 in + letb t3 := fp2mul n3 n3 in + letb t4 := fp2mul n1 n2 in + letb t5 := fp2mul n1 n3 in + letb t6 := fp2mul n2 n3 in + letb x0 := fp2sub t1 (fp2mul eps t6) in + letb y0 := fp2sub (fp2mul eps t3) t4 in + letb z0 := fp2sub t2 t5 in + letb t0 := fp2mul n1 x0 in + letb t0 := fp2add t0 (fp2mul eps (fp2mul n3 y0)) in + letb t0 := fp2add t0 (fp2mul eps (fp2mul n2 z0)) in + letb t0 := fp2inv t0 in + letb x := fp2mul x0 t0 in + letb y := fp2mul y0 t0 in + letb z := fp2mul z0 t0 in + solve_lift (prod_b (x,y,z)) : both (t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp). +Fail Next Obligation. + +Equations fp6mul (n : both (t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp)) (m : both (t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp)) : both (t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp) := + fp6mul n m := + letb '(n1,n2,n3) := n in + letb '(m1,m2,m3) := m in + letb eps := prod_b (f_ONE (ret_both (tt : 'unit)),f_ONE (ret_both (tt : 'unit))) in + letb t1 := fp2mul n1 m1 in + letb t2 := fp2mul n2 m2 in + letb t3 := fp2mul n3 m3 in + letb t4 := fp2mul (fp2add n2 n3) (fp2add m2 m3) in + letb t5 := fp2sub (fp2sub t4 t2) t3 in + letb x := fp2add (fp2mul t5 eps) t1 in + letb t4 := fp2mul (fp2add n1 n2) (fp2add m1 m2) in + letb t5 := fp2sub (fp2sub t4 t1) t2 in + letb y := fp2add t5 (fp2mul eps t3) in + letb t4 := fp2mul (fp2add n1 n3) (fp2add m1 m3) in + letb t5 := fp2sub (fp2sub t4 t1) t3 in + letb z := fp2add t5 t2 in + solve_lift (prod_b (x,y,z)) : both (t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp). +Fail Next Obligation. + +Equations fp6neg (n : both (t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp)) : both (t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp) := + fp6neg n := + letb '(n1,n2,n3) := n in + solve_lift (prod_b (fp2sub (fp2zero (ret_both (tt : 'unit))) n1,fp2sub (fp2zero (ret_both (tt : 'unit))) n2,fp2sub (fp2zero (ret_both (tt : 'unit))) n3)) : both (t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp). +Fail Next Obligation. + +Equations fp12conjugate (n : both (t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp)) : both (t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp) := + fp12conjugate n := + letb '(n1,n2) := n in + solve_lift (prod_b (n1,fp6neg n2)) : both (t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp). +Fail Next Obligation. + +Equations fp6sub (n : both (t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp)) (m : both (t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp)) : both (t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp) := + fp6sub n m := + solve_lift (fp6add n (fp6neg m)) : both (t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp). +Fail Next Obligation. + +Equations fp12inv (n : both (t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp)) : both (t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp) := + fp12inv n := + letb '(n1,n2) := n in + letb gamma := prod_b (fp2zero (ret_both (tt : 'unit)),fp2fromfp (f_ONE (ret_both (tt : 'unit))),fp2zero (ret_both (tt : 'unit))) in + letb t1 := fp6mul n1 n1 in + letb t2 := fp6mul n2 n2 in + letb t1 := fp6sub t1 (fp6mul gamma t2) in + letb t2 := fp6inv t1 in + letb x := fp6mul n1 t2 in + letb y := fp6neg (fp6mul n2 t2) in + solve_lift (prod_b (x,y)) : both (t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp). +Fail Next Obligation. + +Equations fp12mul (n : both (t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp)) (m : both (t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp)) : both (t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp) := + fp12mul n m := + letb '(n1,n2) := n in + letb '(m1,m2) := m in + letb gamma := prod_b (fp2zero (ret_both (tt : 'unit)),fp2fromfp (f_ONE (ret_both (tt : 'unit))),fp2zero (ret_both (tt : 'unit))) in + letb t1 := fp6mul n1 m1 in + letb t2 := fp6mul n2 m2 in + letb x := fp6add t1 (fp6mul t2 gamma) in + letb y := fp6mul (fp6add n1 n2) (fp6add m1 m2) in + letb y := fp6sub (fp6sub y t1) t2 in + solve_lift (prod_b (x,y)) : both (t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp). +Fail Next Obligation. + +Equations fp6zero (_ : both 'unit) : both (t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp) := + fp6zero _ := + solve_lift (fp6fromfp2 (fp2zero (ret_both (tt : 'unit)))) : both (t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp). +Fail Next Obligation. + +Equations fp12fromfp6 (n : both (t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp)) : both (t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp) := + fp12fromfp6 n := + solve_lift (prod_b (n,fp6zero (ret_both (tt : 'unit)))) : both (t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp). +Fail Next Obligation. + +Equations fp12neg (n : both (t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp)) : both (t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp) := + fp12neg n := + letb '(n1,n2) := n in + solve_lift (prod_b (fp6sub (fp6zero (ret_both (tt : 'unit))) n1,fp6sub (fp6zero (ret_both (tt : 'unit))) n2)) : both (t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp). +Fail Next Obligation. + +Equations fp12sub (n : both (t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp)) (m : both (t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp)) : both (t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp) := + fp12sub n m := + solve_lift (fp12add n (fp12neg m)) : both (t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp). +Fail Next Obligation. + +Equations fp12zero (_ : both 'unit) : both (t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp) := + fp12zero _ := + solve_lift (fp12fromfp6 (fp6zero (ret_both (tt : 'unit)))) : both (t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp). +Fail Next Obligation. + +Equations g1neg (p : both (t_Fp × t_Fp × 'bool)) : both (t_Fp × t_Fp × 'bool) := + g1neg p := + letb '(x,y,inf) := p in + solve_lift (prod_b (x,(f_ZERO (ret_both (tt : 'unit))) .- y,inf)) : both (t_Fp × t_Fp × 'bool). +Fail Next Obligation. + +Equations g2add_a (p : both (t_Fp × t_Fp × t_Fp × t_Fp × 'bool)) (q : both (t_Fp × t_Fp × t_Fp × t_Fp × 'bool)) : both (t_Fp × t_Fp × t_Fp × t_Fp × 'bool) := + g2add_a p q := + letb '(x1,y1,_) := p in + letb '(x2,y2,_) := q in + letb x_diff := fp2sub x2 x1 in + letb y_diff := fp2sub y2 y1 in + letb xovery := fp2mul y_diff (fp2inv x_diff) in + letb t1 := fp2mul xovery xovery in + letb t2 := fp2sub t1 x1 in + letb x3 := fp2sub t2 x2 in + letb t1 := fp2sub x1 x3 in + letb t2 := fp2mul xovery t1 in + letb y3 := fp2sub t2 y1 in + solve_lift (prod_b (x3,y3,ret_both (false : 'bool))) : both (t_Fp × t_Fp × t_Fp × t_Fp × 'bool). +Fail Next Obligation. + +Equations g2double_a (p : both (t_Fp × t_Fp × t_Fp × t_Fp × 'bool)) : both (t_Fp × t_Fp × t_Fp × t_Fp × 'bool) := + g2double_a p := + letb '(x1,y1,_) := p in + letb x12 := fp2mul x1 x1 in + letb t1 := fp2mul (fp2fromfp (impl__Fp__from_literal (ret_both (3 : int128)))) x12 in + letb t2 := fp2inv (fp2mul (fp2fromfp (f_TWO (ret_both (tt : 'unit)))) y1) in + letb xovery := fp2mul t1 t2 in + letb t1 := fp2mul xovery xovery in + letb t2 := fp2mul (fp2fromfp (f_TWO (ret_both (tt : 'unit)))) x1 in + letb x3 := fp2sub t1 t2 in + letb t1 := fp2sub x1 x3 in + letb t2 := fp2mul xovery t1 in + letb y3 := fp2sub t2 y1 in + solve_lift (prod_b (x3,y3,ret_both (false : 'bool))) : both (t_Fp × t_Fp × t_Fp × t_Fp × 'bool). +Fail Next Obligation. + +Equations g2double (p : both (t_Fp × t_Fp × t_Fp × t_Fp × 'bool)) : both (t_Fp × t_Fp × t_Fp × t_Fp × 'bool) := + g2double p := + letb '(v__x1,y1,inf1) := p in + solve_lift (ifb andb (y1 <> (fp2zero (ret_both (tt : 'unit)))) (not inf1) + then g2double_a p + else prod_b (fp2zero (ret_both (tt : 'unit)),fp2zero (ret_both (tt : 'unit)),ret_both (true : 'bool))) : both (t_Fp × t_Fp × t_Fp × t_Fp × 'bool). +Fail Next Obligation. + +Equations g2add (p : both (t_Fp × t_Fp × t_Fp × t_Fp × 'bool)) (q : both (t_Fp × t_Fp × t_Fp × t_Fp × 'bool)) : both (t_Fp × t_Fp × t_Fp × t_Fp × 'bool) := + g2add p q := + letb '(x1,y1,inf1) := p in + letb '(x2,y2,inf2) := q in + solve_lift (ifb inf1 + then q + else ifb inf2 + then p + else ifb p =.? q + then g2double p + else ifb not (andb (x1 =.? x2) (y1 =.? (fp2neg y2))) + then g2add_a p q + else prod_b (fp2zero (ret_both (tt : 'unit)),fp2zero (ret_both (tt : 'unit)),ret_both (true : 'bool))) : both (t_Fp × t_Fp × t_Fp × t_Fp × 'bool). +Fail Next Obligation. + +Equations g2neg (p : both (t_Fp × t_Fp × t_Fp × t_Fp × 'bool)) : both (t_Fp × t_Fp × t_Fp × t_Fp × 'bool) := + g2neg p := + letb '(x,y,inf) := p in + solve_lift (prod_b (x,fp2neg y,inf)) : both (t_Fp × t_Fp × t_Fp × t_Fp × 'bool). +Fail Next Obligation. + +Equations twist (p : both (t_Fp × t_Fp × 'bool)) : both (t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp) := + twist p := + letb '(p0,p1,_) := p in + letb x := prod_b (prod_b (fp2zero (ret_both (tt : 'unit)),fp2fromfp p0,fp2zero (ret_both (tt : 'unit))),fp6zero (ret_both (tt : 'unit))) in + letb y := prod_b (fp6zero (ret_both (tt : 'unit)),prod_b (fp2zero (ret_both (tt : 'unit)),fp2fromfp p1,fp2zero (ret_both (tt : 'unit)))) in + solve_lift (prod_b (x,y)) : both (t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp). +Fail Next Obligation. + +Equations line_add_p (r : both (t_Fp × t_Fp × t_Fp × t_Fp × 'bool)) (q : both (t_Fp × t_Fp × t_Fp × t_Fp × 'bool)) (p : both (t_Fp × t_Fp × 'bool)) : both (t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp) := + line_add_p r q p := + letb '(r0,r1,_) := r in + letb '(q0,q1,_) := q in + letb a := fp2mul (fp2sub q1 r1) (fp2inv (fp2sub q0 r0)) in + letb b := fp2sub r1 (fp2mul a r0) in + letb a := fp12fromfp6 (fp6fromfp2 a) in + letb b := fp12fromfp6 (fp6fromfp2 b) in + letb '(x,y) := twist p in + solve_lift (fp12neg (fp12sub (fp12sub y (fp12mul a x)) b)) : both (t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp). +Fail Next Obligation. + +Equations line_double_p (r : both (t_Fp × t_Fp × t_Fp × t_Fp × 'bool)) (p : both (t_Fp × t_Fp × 'bool)) : both (t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp) := + line_double_p r p := + letb '(r0,r1,_) := r in + letb a := fp2mul (fp2fromfp (impl__Fp__from_literal (ret_both (3 : int128)))) (fp2mul r0 r0) in + letb a := fp2mul a (fp2inv (fp2mul (fp2fromfp (f_TWO (ret_both (tt : 'unit)))) r1)) in + letb b := fp2sub r1 (fp2mul a r0) in + letb a := fp12fromfp6 (fp6fromfp2 a) in + letb b := fp12fromfp6 (fp6fromfp2 b) in + letb '(x,y) := twist p in + solve_lift (fp12neg (fp12sub (fp12sub y (fp12mul a x)) b)) : both (t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp). +Fail Next Obligation. + +Equations g1add_a (p : both (t_Fp × t_Fp × 'bool)) (q : both (t_Fp × t_Fp × 'bool)) : both (t_Fp × t_Fp × 'bool) := + g1add_a p q := + letb '(x1,y1,_) := p in + letb '(x2,y2,_) := q in + letb x_diff := x2 .- x1 in + letb y_diff := y2 .- y1 in + letb xovery := y_diff .* (impl__Fp__inv x_diff) in + letb x3 := ((f_exp xovery (ret_both (2 : int32))) .- x1) .- x2 in + letb y3 := (xovery .* (x1 .- x3)) .- y1 in + solve_lift (prod_b (x3,y3,ret_both (false : 'bool))) : both (t_Fp × t_Fp × 'bool). +Fail Next Obligation. + +Equations g1double_a (p : both (t_Fp × t_Fp × 'bool)) : both (t_Fp × t_Fp × 'bool) := + g1double_a p := + letb '(x1,y1,_) := p in + letb x12 := f_exp x1 (ret_both (2 : int32)) in + letb xovery := ((impl__Fp__from_literal (ret_both (3 : int128))) .* x12) .* (impl__Fp__inv ((f_TWO (ret_both (tt : 'unit))) .* y1)) in + letb x3 := (f_exp xovery (ret_both (2 : int32))) .- ((f_TWO (ret_both (tt : 'unit))) .* x1) in + letb y3 := (xovery .* (x1 .- x3)) .- y1 in + solve_lift (prod_b (x3,y3,ret_both (false : 'bool))) : both (t_Fp × t_Fp × 'bool). +Fail Next Obligation. + +Equations g1double (p : both (t_Fp × t_Fp × 'bool)) : both (t_Fp × t_Fp × 'bool) := + g1double p := + letb '(v__x1,y1,inf1) := p in + solve_lift (ifb andb (y1 <> (f_ZERO (ret_both (tt : 'unit)))) (not inf1) + then g1double_a p + else prod_b (f_ZERO (ret_both (tt : 'unit)),f_ZERO (ret_both (tt : 'unit)),ret_both (true : 'bool))) : both (t_Fp × t_Fp × 'bool). +Fail Next Obligation. + +Equations g1add (p : both (t_Fp × t_Fp × 'bool)) (q : both (t_Fp × t_Fp × 'bool)) : both (t_Fp × t_Fp × 'bool) := + g1add p q := + letb '(x1,y1,inf1) := p in + letb '(x2,y2,inf2) := q in + solve_lift (ifb inf1 + then q + else ifb inf2 + then p + else ifb p =.? q + then g1double p + else ifb not (andb (x1 =.? x2) (y1 =.? ((f_ZERO (ret_both (tt : 'unit))) .- y2))) + then g1add_a p q + else prod_b (f_ZERO (ret_both (tt : 'unit)),f_ZERO (ret_both (tt : 'unit)),ret_both (true : 'bool))) : both (t_Fp × t_Fp × 'bool). +Fail Next Obligation. + +Equations fp12exp (n : both (t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp)) (k : both t_Scalar) : both (t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp) := + fp12exp n k := + letb c := fp12fromfp6 (fp6fromfp2 (fp2fromfp (f_ONE (ret_both (tt : 'unit))))) in + letb c := f_fold (f_into_iter (Build_t_Range (f_start := ret_both (0 : uint_size)) (f_end := ret_both (256 : uint_size)))) c (fun c => fun i => + letb c := fp12mul c c in + ifb impl__Scalar__bit k ((ret_both (255 : uint_size)) .- i) + then letb c := fp12mul c n in + c + else c) in + solve_lift c : both (t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp). +Fail Next Obligation. + +Equations g1mul (m : both t_Scalar) (p : both (t_Fp × t_Fp × 'bool)) : both (t_Fp × t_Fp × 'bool) := + g1mul m p := + letb t := prod_b (f_ZERO (ret_both (tt : 'unit)),f_ZERO (ret_both (tt : 'unit)),ret_both (true : 'bool)) in + letb t := f_fold (f_into_iter (Build_t_Range (f_start := ret_both (0 : uint_size)) (f_end := ret_both (256 : uint_size)))) t (fun t => fun i => + letb t := g1double t in + ifb impl__Scalar__bit m ((ret_both (255 : uint_size)) .- i) + then letb t := g1add t p in + t + else t) in + solve_lift t : both (t_Fp × t_Fp × 'bool). +Fail Next Obligation. + +Equations g2mul (m : both t_Scalar) (p : both (t_Fp × t_Fp × t_Fp × t_Fp × 'bool)) : both (t_Fp × t_Fp × t_Fp × t_Fp × 'bool) := + g2mul m p := + letb t := prod_b (fp2zero (ret_both (tt : 'unit)),fp2zero (ret_both (tt : 'unit)),ret_both (true : 'bool)) in + letb t := f_fold (f_into_iter (Build_t_Range (f_start := ret_both (0 : uint_size)) (f_end := ret_both (256 : uint_size)))) t (fun t => fun i => + letb t := g2double t in + ifb impl__Scalar__bit m ((ret_both (255 : uint_size)) .- i) + then letb t := g2add t p in + t + else t) in + solve_lift t : both (t_Fp × t_Fp × t_Fp × t_Fp × 'bool). +Fail Next Obligation. + +Equations frobenius (f : both (t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp)) : both (t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp) := + frobenius f := + letb '((g0,g1,g2),(h0,h1,h2)) := f in + letb t1 := fp2conjugate g0 in + letb t2 := fp2conjugate h0 in + letb t3 := fp2conjugate g1 in + letb t4 := fp2conjugate h1 in + letb t5 := fp2conjugate g2 in + letb t6 := fp2conjugate h2 in + letb c1 := ArrayFp (array_from_list [U64 (ret_both (10162220747404304312 : int64)); + U64 (ret_both (17761815663483519293 : int64)); + U64 (ret_both (8873291758750579140 : int64)); + U64 (ret_both (1141103941765652303 : int64)); + U64 (ret_both (13993175198059990303 : int64)); + U64 (ret_both (1802798568193066599 : int64))]) in + letb c1 := impl__ArrayFp__to_le_bytes c1 in + letb c1 := impl__Fp__from_byte_seq_le c1 in + letb c2 := ArrayFp (array_from_list [U64 (ret_both (3240210268673559283 : int64)); + U64 (ret_both (2895069921743240898 : int64)); + U64 (ret_both (17009126888523054175 : int64)); + U64 (ret_both (6098234018649060207 : int64)); + U64 (ret_both (9865672654120263608 : int64)); + U64 (ret_both (71000049454473266 : int64))]) in + letb c2 := impl__ArrayFp__to_le_bytes c2 in + letb c2 := impl__Fp__from_byte_seq_le c2 in + letb gamma11 := prod_b (c1,c2) in + letb gamma12 := fp2mul gamma11 gamma11 in + letb gamma13 := fp2mul gamma12 gamma11 in + letb gamma14 := fp2mul gamma13 gamma11 in + letb gamma15 := fp2mul gamma14 gamma11 in + letb t2 := fp2mul t2 gamma11 in + letb t3 := fp2mul t3 gamma12 in + letb t4 := fp2mul t4 gamma13 in + letb t5 := fp2mul t5 gamma14 in + letb t6 := fp2mul t6 gamma15 in + solve_lift (prod_b (prod_b (t1,t3,t5),prod_b (t2,t4,t6))) : both (t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp). +Fail Next Obligation. + +Equations final_exponentiation (f : both (t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp)) : both (t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp) := + final_exponentiation f := + letb fp6 := fp12conjugate f in + letb finv := fp12inv f in + letb fp6_1_ := fp12mul fp6 finv in + letb fp8 := frobenius (frobenius fp6_1_) in + letb f := fp12mul fp8 fp6_1_ in + letb u := impl__Scalar__from_literal (ret_both (15132376222941642752 : int128)) in + letb u_half := impl__Scalar__from_literal (ret_both (7566188111470821376 : int128)) in + letb t0 := fp12mul f f in + letb t1 := fp12exp t0 u in + letb t1 := fp12conjugate t1 in + letb t2 := fp12exp t1 u_half in + letb t2 := fp12conjugate t2 in + letb t3 := fp12conjugate f in + letb t1 := fp12mul t3 t1 in + letb t1 := fp12conjugate t1 in + letb t1 := fp12mul t1 t2 in + letb t2 := fp12exp t1 u in + letb t2 := fp12conjugate t2 in + letb t3 := fp12exp t2 u in + letb t3 := fp12conjugate t3 in + letb t1 := fp12conjugate t1 in + letb t3 := fp12mul t1 t3 in + letb t1 := fp12conjugate t1 in + letb t1 := frobenius (frobenius (frobenius t1)) in + letb t2 := frobenius (frobenius t2) in + letb t1 := fp12mul t1 t2 in + letb t2 := fp12exp t3 u in + letb t2 := fp12conjugate t2 in + letb t2 := fp12mul t2 t0 in + letb t2 := fp12mul t2 f in + letb t1 := fp12mul t1 t2 in + letb t2 := frobenius t3 in + solve_lift (fp12mul t1 t2) : both (t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp). +Fail Next Obligation. + +Equations pairing (p : both (t_Fp × t_Fp × 'bool)) (q : both (t_Fp × t_Fp × t_Fp × t_Fp × 'bool)) : both (t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp) := + pairing p q := + letb t := impl__Scalar__from_literal (ret_both (15132376222941642752 : int128)) in + letb r := q in + letb f := fp12fromfp6 (fp6fromfp2 (fp2fromfp (f_ONE (ret_both (tt : 'unit))))) in + letb '(f,r) := f_fold (f_into_iter (Build_t_Range (f_start := ret_both (1 : uint_size)) (f_end := ret_both (64 : uint_size)))) (prod_b (f,r)) (fun '(f,r) => fun i => + letb lrr := line_double_p r p in + letb r := g2double r in + letb f := fp12mul (fp12mul f f) lrr in + ifb impl__Scalar__bit t (((ret_both (64 : uint_size)) .- i) .- (ret_both (1 : uint_size))) + then letb lrq := line_add_p r q p in + letb r := g2add r q in + letb f := fp12mul f lrq in + prod_b (f,r) + else prod_b (f,r)) in + solve_lift (final_exponentiation (fp12conjugate f)) : both (t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp × t_Fp). +Fail Next Obligation. diff --git a/bls12-381/src/bls12-381.rs b/bls12-381/src/bls12-381.rs index 90092dd..28409fd 100644 --- a/bls12-381/src/bls12-381.rs +++ b/bls12-381/src/bls12-381.rs @@ -76,11 +76,11 @@ pub fn fp2conjugate(n: Fp2) -> Fp2 { /* Arithmetic for Fp6 elements */ //Algorithms from: https://eprint.iacr.org/2010/354.pdf -fn fp6fromfp2(n: Fp2) -> Fp6 { +pub fn fp6fromfp2(n: Fp2) -> Fp6 { (n, fp2zero(), fp2zero()) } -fn fp6zero() -> Fp6 { +pub fn fp6zero() -> Fp6 { fp6fromfp2(fp2zero()) } @@ -509,6 +509,7 @@ fn final_exponentiation(f: Fp12) -> Fp12 { let t1 = fp12mul(t1, t2); //t1t2 t1 } + //ate-pairing used for BLS pub fn pairing(p: G1, q: G2) -> Fp12 { let t = Scalar::from_literal(0xd201000000010000u128); @@ -810,15 +811,15 @@ fn test_g2_add_double_special_case() { //https://tools.ietf.org/id/draft-yonezawa-pairing-friendly-curves-02.html#rfc.section.4.2.2 //THIS IS A CORRECT G1 GENERATOR :) -#[cfg(test)] -fn g1() -> G1 { +// #[cfg(test)] +pub fn g1() -> G1 { (Fp::from_hex("17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb"), Fp::from_hex("08b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1"), false) } //THIS IS A CORRECT G2 GENERATOR :) -#[cfg(test)] -fn g2() -> G2 { +// #[cfg(test)] +pub fn g2() -> G2 { ((Fp::from_hex("24aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb8"), Fp::from_hex("13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e")), (Fp::from_hex("0ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801"), diff --git a/chacha20/proofs/coq/extraction/Hacspec_chacha20.v b/chacha20/proofs/coq/extraction/Hacspec_chacha20.v new file mode 100644 index 0000000..3567662 --- /dev/null +++ b/chacha20/proofs/coq/extraction/Hacspec_chacha20.v @@ -0,0 +1,124 @@ +(* File automatically generated by Hacspec *) +From Hacspec Require Import Hacspec_Lib MachineIntegers. +From Coq Require Import ZArith. +Import List.ListNotations. +Open Scope Z_scope. +Open Scope bool_scope. + +Require Import Hacspec_lib. + +(*Not implemented yet? todo(item)*) + +Notation Constants_t := (nseq int32 4). +Definition Constants : Constants_t -> Constants_t := + id. + +Notation State_t := (nseq int32 16). +Definition State : State_t -> State_t := + id. + +Notation Block_t := (nseq int8 64). +Definition Block : Block_t -> Block_t := + id. + +Notation ChaChaIV_t := (nseq int8 12). +Definition ChaChaIV : ChaChaIV_t -> ChaChaIV_t := + id. + +Notation ChaChaKey_t := (nseq int8 32). +Definition ChaChaKey : ChaChaKey_t -> ChaChaKey_t := + id. + +Definition chacha20_line (a : uint_size) (b : uint_size) (d : uint_size) (s : uint_size) (m : t_State_t) : t_State_t := + let state := (m) : t_State_t in + let state := (update_at_usize state a ((state.[a]).+(state.[b]))) : t_State_t in + let state := (update_at_usize state d ((state.[d]).^(state.[a]))) : t_State_t in + let state := (update_at_usize state d (impl__U32__rotate_left (state.[d]) s)) : t_State_t in + state. + +Definition chacha20_quarter_round (a : uint_size) (b : uint_size) (c : uint_size) (d : uint_size) (state : t_State_t) : t_State_t := + let state := (chacha20_line a b d (@repr WORDSIZE32 16) state) : t_State_t in + let state := (chacha20_line c d b (@repr WORDSIZE32 12) state) : t_State_t in + let state := (chacha20_line a b d (@repr WORDSIZE32 8) state) : t_State_t in + chacha20_line c d b (@repr WORDSIZE32 7) state. + +Definition chacha20_double_round (state : t_State_t) : t_State_t := + let state := (chacha20_quarter_round (@repr WORDSIZE32 0) (@repr WORDSIZE32 4) (@repr WORDSIZE32 8) (@repr WORDSIZE32 12) state) : t_State_t in + let state := (chacha20_quarter_round (@repr WORDSIZE32 1) (@repr WORDSIZE32 5) (@repr WORDSIZE32 9) (@repr WORDSIZE32 13) state) : t_State_t in + let state := (chacha20_quarter_round (@repr WORDSIZE32 2) (@repr WORDSIZE32 6) (@repr WORDSIZE32 10) (@repr WORDSIZE32 14) state) : t_State_t in + let state := (chacha20_quarter_round (@repr WORDSIZE32 3) (@repr WORDSIZE32 7) (@repr WORDSIZE32 11) (@repr WORDSIZE32 15) state) : t_State_t in + let state := (chacha20_quarter_round (@repr WORDSIZE32 0) (@repr WORDSIZE32 5) (@repr WORDSIZE32 10) (@repr WORDSIZE32 15) state) : t_State_t in + let state := (chacha20_quarter_round (@repr WORDSIZE32 1) (@repr WORDSIZE32 6) (@repr WORDSIZE32 11) (@repr WORDSIZE32 12) state) : t_State_t in + let state := (chacha20_quarter_round (@repr WORDSIZE32 2) (@repr WORDSIZE32 7) (@repr WORDSIZE32 8) (@repr WORDSIZE32 13) state) : t_State_t in + chacha20_quarter_round (@repr WORDSIZE32 3) (@repr WORDSIZE32 4) (@repr WORDSIZE32 9) (@repr WORDSIZE32 14) state. + +Definition chacha20_rounds (state : t_State_t) : t_State_t := + let st := (state) : t_State_t in + let st := (f_fold (f_into_iter (Build_Range (@repr WORDSIZE32 0)(@repr WORDSIZE32 10))) st (fun st _i => + chacha20_double_round st)) : t_State_t in + st. + +Definition chacha20_core (ctr : t_U32_t) (st0 : t_State_t) : t_State_t := + let state := (st0) : t_State_t in + let state := (update_at state (@repr WORDSIZE32 12) ((state.[(@repr WORDSIZE32 12)]).+ctr)) : t_State_t in + let k := (chacha20_rounds state) : t_State_t in + k.+state. + +Definition chacha20_constants_init : t_Constants_t := + let constants := (impl__Constants__new) : t_Constants_t in + let constants := (update_at constants (@repr WORDSIZE32 0) (U32 (@repr WORDSIZE32 1634760805))) : t_Constants_t in + let constants := (update_at constants (@repr WORDSIZE32 1) (U32 (@repr WORDSIZE32 857760878))) : t_Constants_t in + let constants := (update_at constants (@repr WORDSIZE32 2) (U32 (@repr WORDSIZE32 2036477234))) : t_Constants_t in + let constants := (update_at constants (@repr WORDSIZE32 3) (U32 (@repr WORDSIZE32 1797285236))) : t_Constants_t in + constants. + +Definition chacha20_init (key : t_ChaChaKey_t) (iv : t_ChaChaIV_t) (ctr : t_U32_t) : t_State_t := + let st := (impl__State__new) : t_State_t in + let st := (f_update st (@repr WORDSIZE32 0) chacha20_constants_init) : t_State_t in + let st := (f_update st (@repr WORDSIZE32 4) (impl__ChaChaKey__to_le_U32s key)) : t_State_t in + let st := (update_at st (@repr WORDSIZE32 12) ctr) : t_State_t in + let st := (f_update st (@repr WORDSIZE32 13) (impl__ChaChaIV__to_le_U32s iv)) : t_State_t in + st. + +Definition chacha20_encrypt_block (st0 : t_State_t) (ctr : t_U32_t) (plain : t_Block_t) : t_Block_t := + let st := (chacha20_core ctr st0) : t_State_t in + let pl := (impl__State__from_seq (impl__Block__to_le_U32s plain)) : t_State_t in + let st := (pl.^st) : t_State_t in + impl__Block__from_seq (impl__State__to_le_bytes st). + +Definition chacha20_encrypt_last (st0 : t_State_t) (ctr : t_U32_t) (plain : t_Seq_t t_U8_t) : t_Seq_t t_U8_t := + let b := (impl__Block__new) : t_Block_t in + let b := (f_update b (@repr WORDSIZE32 0) plain) : t_Block_t in + let b := (chacha20_encrypt_block st0 ctr b) : t_Block_t in + impl__Block__slice b (@repr WORDSIZE32 0) (impl_41__len plain). + +Definition chacha20_key_block (state : t_State_t) : t_Block_t := + let state := (chacha20_core (U32 (@repr WORDSIZE32 0)) state) : t_State_t in + impl__Block__from_seq (impl__State__to_le_bytes state). + +Definition chacha20_key_block0 (key : t_ChaChaKey_t) (iv : t_ChaChaIV_t) : t_Block_t := + let state := (chacha20_init key iv (U32 (@repr WORDSIZE32 0))) : t_State_t in + chacha20_key_block state. + +Definition chacha20_update (st0 : t_State_t) (m : t_Seq_t t_U8_t) : t_Seq_t t_U8_t := + let blocks_out := (impl_41__new (impl_41__len m)) : t_Seq_t t_U8_t in + let n_blocks := (impl_41__num_exact_chunks m (@repr WORDSIZE32 64)) : uint_size in + let blocks_out := (f_fold (f_into_iter (Build_Range (@repr WORDSIZE32 0)n_blocks)) blocks_out (fun blocks_out i => + let msg_block := (impl_41__get_exact_chunk m (@repr WORDSIZE32 64) i) : t_Seq_t t_U8_t in + let b := (chacha20_encrypt_block st0 (U32 (cast i)) (impl__Block__from_seq msg_block)) : t_Block_t in + let blocks_out := (impl_41__set_exact_chunk blocks_out (@repr WORDSIZE32 64) i b) : t_Seq_t t_U8_t in + blocks_out)) : t_Seq_t t_U8_t in + let last_block := (impl_41__get_remainder_chunk m (@repr WORDSIZE32 64)) : t_Seq_t t_U8_t in + let blocks_out := (if + (impl_41__len last_block)<>(@repr WORDSIZE32 0) + then + let b := (chacha20_encrypt_last st0 (U32 (cast n_blocks)) last_block) : t_Seq_t t_U8_t in + let blocks_out := (impl_41__set_chunk blocks_out (@repr WORDSIZE32 64) n_blocks b) : t_Seq_t t_U8_t in + blocks_out + else + blocks_out) : t_Seq_t t_U8_t in + blocks_out. + +Definition chacha20 (key : t_ChaChaKey_t) (iv : t_ChaChaIV_t) (ctr : int32) (m : t_Seq_t t_U8_t) : t_Seq_t t_U8_t := + let state := (chacha20_init key iv (U32 ctr)) : t_State_t in + chacha20_update state m. diff --git a/chacha20/proofs/ssprove/extraction/Hacspec_chacha20.v b/chacha20/proofs/ssprove/extraction/Hacspec_chacha20.v new file mode 100644 index 0000000..57a032d --- /dev/null +++ b/chacha20/proofs/ssprove/extraction/Hacspec_chacha20.v @@ -0,0 +1,167 @@ +(* File automatically generated by Hacspec *) +Set Warnings "-notation-overridden,-ambiguous-paths". +From Crypt Require Import choice_type Package Prelude. +Import PackageNotation. +From extructures Require Import ord fset. +From mathcomp Require Import word_ssrZ word. +(* From Jasmin Require Import word. *) + +From Coq Require Import ZArith. +From Coq Require Import Strings.String. +Import List.ListNotations. +Open Scope list_scope. +Open Scope Z_scope. +Open Scope bool_scope. + +From Hacspec Require Import ChoiceEquality. +From Hacspec Require Import LocationUtility. +From Hacspec Require Import Hacspec_Lib_Comparable. +From Hacspec Require Import Hacspec_Lib_Pre. +From Hacspec Require Import Hacspec_Lib. + +Open Scope hacspec_scope. +Import choice.Choice.Exports. + +Obligation Tactic := (* try timeout 8 *) solve_ssprove_obligations. + +Require Import Hacspec_lib. +Export Hacspec_lib. + +(*Not implemented yet? todo(item)*) + +Notation "'t_Constants'" := (nseq int32 4). +Definition Constants : both t_Constants -> both t_Constants := + id. + +Notation "'t_State'" := (nseq int32 16). +Definition State : both t_State -> both t_State := + id. + +Notation "'t_Block'" := (nseq int8 64). +Definition Block : both t_Block -> both t_Block := + id. + +Notation "'t_ChaChaIV'" := (nseq int8 12). +Definition ChaChaIV : both t_ChaChaIV -> both t_ChaChaIV := + id. + +Notation "'t_ChaChaKey'" := (nseq int8 32). +Definition ChaChaKey : both t_ChaChaKey -> both t_ChaChaKey := + id. + +Equations chacha20_line (a : both uint_size) (b : both uint_size) (d : both uint_size) (s : both uint_size) (m : both t_State) : both t_State := + chacha20_line a b d s m := + letb state := m in + letb state := update_at_usize state a ((state.a[a]) .+ (state.a[b])) in + letb state := update_at_usize state d ((state.a[d]) .^ (state.a[a])) in + letb state := update_at_usize state d (impl__U32__rotate_left (state.a[d]) s) in + solve_lift state : both t_State. +Fail Next Obligation. + +Equations chacha20_quarter_round (a : both uint_size) (b : both uint_size) (c : both uint_size) (d : both uint_size) (state : both t_State) : both t_State := + chacha20_quarter_round a b c d state := + letb state := chacha20_line a b d (ret_both (16 : uint_size)) state in + letb state := chacha20_line c d b (ret_both (12 : uint_size)) state in + letb state := chacha20_line a b d (ret_both (8 : uint_size)) state in + solve_lift (chacha20_line c d b (ret_both (7 : uint_size)) state) : both t_State. +Fail Next Obligation. + +Equations chacha20_double_round (state : both t_State) : both t_State := + chacha20_double_round state := + letb state := chacha20_quarter_round (ret_both (0 : uint_size)) (ret_both (4 : uint_size)) (ret_both (8 : uint_size)) (ret_both (12 : uint_size)) state in + letb state := chacha20_quarter_round (ret_both (1 : uint_size)) (ret_both (5 : uint_size)) (ret_both (9 : uint_size)) (ret_both (13 : uint_size)) state in + letb state := chacha20_quarter_round (ret_both (2 : uint_size)) (ret_both (6 : uint_size)) (ret_both (10 : uint_size)) (ret_both (14 : uint_size)) state in + letb state := chacha20_quarter_round (ret_both (3 : uint_size)) (ret_both (7 : uint_size)) (ret_both (11 : uint_size)) (ret_both (15 : uint_size)) state in + letb state := chacha20_quarter_round (ret_both (0 : uint_size)) (ret_both (5 : uint_size)) (ret_both (10 : uint_size)) (ret_both (15 : uint_size)) state in + letb state := chacha20_quarter_round (ret_both (1 : uint_size)) (ret_both (6 : uint_size)) (ret_both (11 : uint_size)) (ret_both (12 : uint_size)) state in + letb state := chacha20_quarter_round (ret_both (2 : uint_size)) (ret_both (7 : uint_size)) (ret_both (8 : uint_size)) (ret_both (13 : uint_size)) state in + solve_lift (chacha20_quarter_round (ret_both (3 : uint_size)) (ret_both (4 : uint_size)) (ret_both (9 : uint_size)) (ret_both (14 : uint_size)) state) : both t_State. +Fail Next Obligation. + +Equations chacha20_rounds (state : both t_State) : both t_State := + chacha20_rounds state := + letb st := state in + letb st := f_fold (f_into_iter (Build_t_Range (f_start := ret_both (0 : int32)) (f_end := ret_both (10 : int32)))) st (fun st => fun v__i => + chacha20_double_round st) in + solve_lift st : both t_State. +Fail Next Obligation. + +Equations chacha20_core (ctr : both t_U32) (st0 : both t_State) : both t_State := + chacha20_core ctr st0 := + letb state := st0 in + letb state := update_at state (ret_both (12 : int32)) ((state.a[(ret_both (12 : int32))]) .+ ctr) in + letb k := chacha20_rounds state in + solve_lift (k .+ state) : both t_State. +Fail Next Obligation. + +Equations chacha20_constants_init (_ : both 'unit) : both t_Constants := + chacha20_constants_init _ := + letb constants := impl__Constants__new (ret_both (tt : 'unit)) in + letb constants := update_at constants (ret_both (0 : int32)) (U32 (ret_both (1634760805 : int32))) in + letb constants := update_at constants (ret_both (1 : int32)) (U32 (ret_both (857760878 : int32))) in + letb constants := update_at constants (ret_both (2 : int32)) (U32 (ret_both (2036477234 : int32))) in + letb constants := update_at constants (ret_both (3 : int32)) (U32 (ret_both (1797285236 : int32))) in + solve_lift constants : both t_Constants. +Fail Next Obligation. + +Equations chacha20_init (key : both t_ChaChaKey) (iv : both t_ChaChaIV) (ctr : both t_U32) : both t_State := + chacha20_init key iv ctr := + letb st := impl__State__new (ret_both (tt : 'unit)) in + letb st := f_update st (ret_both (0 : uint_size)) (chacha20_constants_init (ret_both (tt : 'unit))) in + letb st := f_update st (ret_both (4 : uint_size)) (impl__ChaChaKey__to_le_U32s key) in + letb st := update_at st (ret_both (12 : int32)) ctr in + letb st := f_update st (ret_both (13 : uint_size)) (impl__ChaChaIV__to_le_U32s iv) in + solve_lift st : both t_State. +Fail Next Obligation. + +Equations chacha20_encrypt_block (st0 : both t_State) (ctr : both t_U32) (plain : both t_Block) : both t_Block := + chacha20_encrypt_block st0 ctr plain := + letb st := chacha20_core ctr st0 in + letb pl := impl__State__from_seq (impl__Block__to_le_U32s plain) in + letb st := pl .^ st in + solve_lift (impl__Block__from_seq (impl__State__to_le_bytes st)) : both t_Block. +Fail Next Obligation. + +Equations chacha20_encrypt_last (st0 : both t_State) (ctr : both t_U32) (plain : both (t_Seq t_U8)) : both (t_Seq t_U8) := + chacha20_encrypt_last st0 ctr plain := + letb b := impl__Block__new (ret_both (tt : 'unit)) in + letb b := f_update b (ret_both (0 : uint_size)) plain in + letb b := chacha20_encrypt_block st0 ctr b in + solve_lift (impl__Block__slice b (ret_both (0 : uint_size)) (impl_41__len plain)) : both (t_Seq t_U8). +Fail Next Obligation. + +Equations chacha20_key_block (state : both t_State) : both t_Block := + chacha20_key_block state := + letb state := chacha20_core (U32 (ret_both (0 : int32))) state in + solve_lift (impl__Block__from_seq (impl__State__to_le_bytes state)) : both t_Block. +Fail Next Obligation. + +Equations chacha20_key_block0 (key : both t_ChaChaKey) (iv : both t_ChaChaIV) : both t_Block := + chacha20_key_block0 key iv := + letb state := chacha20_init key iv (U32 (ret_both (0 : int32))) in + solve_lift (chacha20_key_block state) : both t_Block. +Fail Next Obligation. + +Equations chacha20_update (st0 : both t_State) (m : both (t_Seq t_U8)) : both (t_Seq t_U8) := + chacha20_update st0 m := + letb blocks_out := impl_41__new (impl_41__len m) in + letb n_blocks := impl_41__num_exact_chunks m (ret_both (64 : uint_size)) in + letb blocks_out := f_fold (f_into_iter (Build_t_Range (f_start := ret_both (0 : uint_size)) (f_end := n_blocks))) blocks_out (fun blocks_out => fun i => + letb msg_block := impl_41__get_exact_chunk m (ret_both (64 : uint_size)) i in + letb b := chacha20_encrypt_block st0 (U32 (cast_int (WS2 := _) i)) (impl__Block__from_seq msg_block) in + letb blocks_out := impl_41__set_exact_chunk blocks_out (ret_both (64 : uint_size)) i b in + blocks_out) in + letb last_block := impl_41__get_remainder_chunk m (ret_both (64 : uint_size)) in + letb blocks_out := ifb (impl_41__len last_block) <> (ret_both (0 : uint_size)) + then letb b := chacha20_encrypt_last st0 (U32 (cast_int (WS2 := _) n_blocks)) last_block in + letb blocks_out := impl_41__set_chunk blocks_out (ret_both (64 : uint_size)) n_blocks b in + blocks_out + else blocks_out in + solve_lift blocks_out : both (t_Seq t_U8). +Fail Next Obligation. + +Equations chacha20 (key : both t_ChaChaKey) (iv : both t_ChaChaIV) (ctr : both int32) (m : both (t_Seq t_U8)) : both (t_Seq t_U8) := + chacha20 key iv ctr m := + letb state := chacha20_init key iv (U32 ctr) in + solve_lift (chacha20_update state m) : both (t_Seq t_U8). +Fail Next Obligation. diff --git a/concordium-derive/Cargo.toml b/concordium-derive/Cargo.toml new file mode 100644 index 0000000..1a7a6ad --- /dev/null +++ b/concordium-derive/Cargo.toml @@ -0,0 +1,32 @@ +[package] +name = "hacspec-concordium-derive" +version = "0.1.0" +authors = [""] +edition = "2018" + +[lib] +path = "src/lib.rs" +proc-macro = true + +[dependencies] +hacspec-lib = { git = "https://github.com/hacspec/hacspec.git" } +# hacspec-attributes = { path = "../../utils/attributes", version = "0.1.0-beta.1" , features = ["print_attributes", "hacspec_unsafe"] } # , features = ["hacspec_unsafe"] , , optional = true +# creusot-contracts = { git = "https://github.com/xldenis/creusot", rev = "7763b3ae77205fba83182b9a6c3e69ad0b12fec7" } +concordium-contracts-common = { git = "https://github.com/Concordium/concordium-contracts-common", rev = "84ff7db509ca1fbf958b47e5e5903b7662295850" , version = "=2.0.0" , default-features = false } +# hacspec-concordium = { path = "../concordium" } +syn = { version = "1.0.63", features = [ "full", "extra-traits" ] } +quote = "*" # "=1.0.0" +proc-macro2 = "*" # "1.0" + +# Reduce code size, at the cost of performance in allocation heavy-code. +wee_alloc="0.4.5" + +# [features] +# use_attributes = ["hacspec-attributes/print_attributes", "hacspec-attributes/hacspec_unsafe"] + +[dev-dependencies] +# hacspec-dev = { path = "../../utils/dev" } +criterion = "0.3" +rand = "0.8" +quickcheck = "1" +quickcheck_macros = "1" diff --git a/concordium-derive/src/lib.rs b/concordium-derive/src/lib.rs new file mode 100644 index 0000000..3bb9b96 --- /dev/null +++ b/concordium-derive/src/lib.rs @@ -0,0 +1,1476 @@ +// #![no_std] +extern crate proc_macro; +extern crate syn; +#[macro_use] +extern crate quote; + +use concordium_contracts_common::*; +use proc_macro::TokenStream; +use proc_macro2::Span; +use quote::ToTokens; +#[cfg(feature = "build-schema")] +use std::collections::HashMap; +use std::{convert::TryFrom, ops::Neg}; +use syn::{ + parse::Parser, parse_macro_input, punctuated::*, spanned::Spanned, DataEnum, Ident, Meta, Token, +}; + +// use hacspec_concordium::*; + +/// A helper to report meaningful compilation errors +/// - If applied to an Ok value they simply return the underlying value. +/// - If applied to `Err(e)` then `e` is turned into a compiler error. +fn unwrap_or_report(v: syn::Result) -> TokenStream { + match v { + Ok(ts) => ts, + Err(e) => e.to_compile_error().into(), + } +} + +fn attach_error(mut v: syn::Result, msg: &str) -> syn::Result { + if let Err(e) = v.as_mut() { + let span = e.span(); + e.combine(syn::Error::new(span, msg)); + } + v +} + +/// Get the name item from a list, if available and a string literal. +/// If the named item does not have the expected (string) value, this will +/// return an Err. If the item does not exist the return value is Ok(None). +/// FIXME: Ensure there is only one. +fn get_attribute_value<'a, I: IntoIterator>( + iter: I, + name: &str, +) -> syn::Result> { + for attr in iter.into_iter() { + match attr { + Meta::NameValue(mnv) => { + if mnv.path.is_ident(name) { + if let syn::Lit::Str(lit) = &mnv.lit { + return Ok(Some(lit)); + } else { + return Err(syn::Error::new( + mnv.span(), + format!("The `{}` attribute must be a string literal.", name), + )); + } + } + } + Meta::Path(p) => { + if p.is_ident(name) { + return Err(syn::Error::new( + attr.span(), + format!("The `{}` attribute must have a string literal value.", name), + )); + } + } + Meta::List(p) => { + if p.path.is_ident(name) { + return Err(syn::Error::new( + attr.span(), + format!("The `{}` attribute must have a string literal value.", name), + )); + } + } + } + } + Ok(None) +} + +// Return whether a attribute item is present. +fn contains_attribute<'a, I: IntoIterator>(iter: I, name: &str) -> bool { + iter.into_iter().any(|attr| attr.path().is_ident(name)) +} + +/// Derive the appropriate export for an annotated init function. +/// +/// This macro requires the following items to be present +/// - `contract=""` where *\* is the name of the smart contract and +/// the generated function is exported as this name prefixed with *init_*. The +/// name should be unique in the module, as a contract can only have one +/// init-function. +/// +/// The annotated function must be of a specific type, which depends on the +/// enabled attributes. *Without* any of the optional attributes the function +/// must have a signature of +/// +/// ```ignore +/// #[init(contract = "my_contract")] +/// fn some_init(ctx: &impl HasInitContext) -> InitResult {...} +/// ``` +/// +/// Where the trait `HasInitContext` and the type `InitResult` are exposed from +/// `concordium-std` and `MyState` is the user-defined type for the contract +/// state. +/// +/// # Optional attributes +/// +/// ## `payable`: Make function accept an amount of GTU +/// Without setting the `payable` attribute, the generated function will reject +/// any non-zero amount of GTU supplied with the transaction. This means we are +/// required to explicitly mark our functions as `payable`, if they are to +/// accept GTU. +/// +/// Setting the `payable` attribute changes the required signature to include an +/// extra argument of type `Amount`, allowing the function to access the amount +/// of GTU supplied with the transaction. +/// +/// ### Example +/// ```ignore +/// #[init(contract = "my_contract", payable)] +/// fn some_init(ctx: &impl HasInitContext, amount: Amount) -> InitResult {...} +/// ``` +/// +/// ## `enable_logger`: Function can access event logging +/// Setting the `enable_logger` attribute changes the required signature to +/// include an extra argument `&mut impl HasLogger`, allowing the function to +/// log events. +/// +/// +/// ### Example +/// ```ignore +/// #[init(contract = "my_contract", enable_logger)] +/// fn some_init(ctx: &impl HasInitContext, logger: &mut impl HasLogger) -> InitResult {...} +/// ``` +/// +/// ## `low_level`: Manually deal with writing state bytes +/// Setting the `low_level` attribute disables the generated code for +/// serializing the contract state. +/// +/// If `low_level` is set, the signature must contain an extra argument of type +/// `&mut ContractState` found in `concordium-std`, which gives access to +/// manipulating the contract state bytes directly. This means there is no need +/// to return the contract state and the return type becomes `InitResult<()>`. +/// +/// ### Example +/// ```ignore +/// #[init(contract = "my_contract", low_level)] +/// fn some_init(ctx: &impl HasInitContext, state: &mut ContractState) -> InitResult<()> {...} +/// ``` +/// +/// ## `parameter=""`: Generate schema for parameter +/// To make schema generation to include the parameter for this function, add +/// the attribute `parameter` and set it equal to a string literal containing +/// the name of the type used for the parameter. The parameter type must +/// implement the SchemaType trait, which for most cases can be derived +/// automatically. +/// +/// ### Example +/// ```ignore +/// #[derive(SchemaType)] +/// struct MyParam { ... } +/// +/// #[init(contract = "my_contract", parameter = "MyParam")] +/// ``` +#[proc_macro_attribute] +pub fn init(attr: TokenStream, item: TokenStream) -> TokenStream { + unwrap_or_report(init_worker(attr, item)) +} + +fn init_worker(attr: TokenStream, item: TokenStream) -> syn::Result { + let attrs = Punctuated::::parse_terminated.parse(attr)?; + + let contract_name = get_attribute_value(attrs.iter(), "contract")?.ok_or_else(|| { + syn::Error::new( + Span::call_site(), + "A name for the contract must be provided, using the contract attribute. For example, \ + #[init(contract = \"my-contract\")]", + ) + })?; + + let ast: syn::ItemFn = + attach_error(syn::parse(item), "#[init] can only be applied to functions.")?; + + let fn_name = &ast.sig.ident; + let rust_export_fn_name = format_ident!("export_{}", fn_name); + let wasm_export_fn_name = format!("init_{}", contract_name.value()); + + if let Err(e) = ContractName::is_valid_contract_name(&wasm_export_fn_name) { + return Err(syn::Error::new(contract_name.span(), e)); + } + + let amount_ident = format_ident!("amount"); + + // Accumulate a list of required arguments, if the function contains a + // different number of arguments, than elements in this vector, then the + // strings are displayed as the expected arguments. + let mut required_args = vec!["ctx: &impl HasInitContext"]; + + let (setup_fn_optional_args, fn_optional_args) = + contract_function_optional_args_tokens(&attrs, &amount_ident, &mut required_args); + + let mut out = if contains_attribute(attrs.iter(), "low_level") { + required_args.push("state: ContractState"); + quote! { + #[export_name = #wasm_export_fn_name] + pub extern "C" fn #rust_export_fn_name(#amount_ident: hacspec_concordium::Amount) -> i32 { + use hacspec_concordium::{trap, ExternContext, InitContextExtern, ContractState}; + #setup_fn_optional_args + let ctx = ExternContext::::open(()); + let mut state = ContractState::open(()); + match #fn_name(&ctx, #(#fn_optional_args, )* &mut state) { + Ok(()) => 0, + Err(reject) => { + let code = Reject::from(reject).error_code.get(); + if code < 0 { + code + } else { + trap() // precondition violation + } + } + } + } + } + } else { + quote! { + #[export_name = #wasm_export_fn_name] + pub extern "C" fn #rust_export_fn_name(amount: hacspec_concordium::Amount) -> i32 { + use hacspec_concordium::{trap, ExternContext, InitContextExtern, ContractState}; + #setup_fn_optional_args + let ctx = ExternContext::::open(()); + match #fn_name(&ctx, #(#fn_optional_args),*) { + Ok(state) => { + let mut state_bytes = ContractState::open(()); + if state.serial(&mut state_bytes).is_err() { + trap() // Could not initialize contract. + }; + 0 + } + Err(reject) => { + let code = Reject::from(reject).error_code.get(); + if code < 0 { + code + } else { + trap() // precondition violation + } + } + } + } + } + }; + + let arg_count = ast.sig.inputs.len(); + if arg_count != required_args.len() { + return Err(syn::Error::new( + ast.sig.inputs.span(), + format!( + "Incorrect number of function arguments, the expected arguments are ({}) ", + required_args.join(", ") + ), + )); + } + + // Embed schema if 'parameter' attribute is set + let parameter_option = get_attribute_value(attrs.iter(), "parameter")?.map(|a| a.value()); + out.extend(contract_function_schema_tokens( + parameter_option, + rust_export_fn_name, + wasm_export_fn_name, + )); + + ast.to_tokens(&mut out); + + Ok(out.into()) +} + +/// Derive the appropriate export for an annotated receive function. +/// +/// This macro requires the following items to be present +/// - `contract = ""` where *\* is the name of +/// the smart contract. +/// - `name = ""` where *\* is the name of the +/// receive function. The generated function is exported as +/// `.`. Contract name and receive name is +/// required to be unique in the module. +/// +/// The annotated function must be of a specific type, which depends on the +/// enabled attributes. *Without* any of the optional attributes the function +/// must have a signature of +/// +/// ```ignore +/// #[receive(contract = "my_contract", name = "some_receive")] +/// fn contract_receive(ctx: &impl HasReceiveContext, state: &mut MyState) -> ReceiveResult {...} +/// ``` +/// +/// Where the `HasAction`, `HasReceiveContext` traits and the type +/// `ReceiveResult` are exposed from `concordium-std` and `MyState` is the +/// user-defined type for the contract state. +/// +/// # Optional attributes +/// +/// ## `payable`: Make function accept an amount of GTU +/// Without setting the `payable` attribute, the function will reject any +/// non-zero amount of GTU, supplied with the transaction. This means we are +/// required to explicitly mark our functions as `payable`, if they are to +/// accept GTU. +/// +/// Setting the `payable` attribute changes the required signature to include an +/// extra argument of type `Amount`, allowing the function to access the amount +/// of GTU supplied with the transaction. +/// +/// ### Example +/// ```ignore +/// #[receive(contract = "my_contract", name = "some_receive", payable)] +/// fn contract_receive(ctx: &impl HasReceiveContext, amount: Amount, state: &mut MyState) -> ReceiveResult {...} +/// ``` +/// +/// ## `enable_logger`: Function can access event logging +/// Setting the `enable_logger` attribute changes the required signature to +/// include an extra argument `&mut impl HasLogger`, allowing the function to +/// log events. +/// +/// +/// ### Example +/// ```ignore +/// #[receive(contract = "my_contract", name = "some_receive", enable_logger)] +/// fn contract_receive(ctx: &impl HasReceiveContext, logger: &mut impl HasLogger, state: &mut MyState) -> ReceiveResult {...} +/// ``` +/// +/// ## `low_level`: Manually deal with writing state bytes +/// Setting the `low_level` attribute disables the generated code for +/// serializing the contract state. +/// +/// If `low_level` is set, instead of the user-defined state type in the +/// signature, the state argument becomes the type `&mut ContractState` found in +/// `concordium-std`, which gives access to manipulating the contract state +/// bytes directly. +/// +/// ### Example +/// ```ignore +/// #[receive(contract = "my_contract", name = "some_receive", low_level)] +/// fn contract_receive(ctx: &impl HasReceiveContext, state: &mut ContractState) -> ReceiveResult {...} +/// ``` +/// +/// ## `parameter=""`: Generate schema for parameter +/// To make schema generation include the parameter for this function, add +/// the attribute `parameter` and set it equal to a string literal containing +/// the name of the type used for the parameter. The parameter type must +/// implement the SchemaType trait, which for most cases can be derived +/// automatically. +/// +/// ### Example +/// ```ignore +/// #[derive(SchemaType)] +/// struct MyParam { ... } +/// +/// #[receive(contract = "my_contract", name = "some_receive", parameter = "MyParam")] +/// fn contract_receive(ctx: &impl HasReceiveContext, state: &mut MyState) -> ReceiveResult {...} +/// ``` +#[proc_macro_attribute] +pub fn receive(attr: TokenStream, item: TokenStream) -> TokenStream { + unwrap_or_report(receive_worker(attr, item)) +} + +fn receive_worker(attr: TokenStream, item: TokenStream) -> syn::Result { + let attrs = Punctuated::::parse_terminated.parse(attr)?; + + let contract_name = get_attribute_value(attrs.iter(), "contract")?.ok_or_else(|| { + syn::Error::new( + Span::call_site(), + "The name of the associated contract must be provided, using the 'contract' \ + attribute.\n\nFor example, #[receive(contract = \"my-contract\")]", + ) + })?; + + let name = get_attribute_value(attrs.iter(), "name")?.ok_or_else(|| { + syn::Error::new( + Span::call_site(), + "A name for the receive function must be provided, using the 'name' attribute.\n\nFor \ + example, #[receive(name = \"func-name\", ...)]", + ) + })?; + + let ast: syn::ItemFn = + attach_error(syn::parse(item), "#[receive] can only be applied to functions.")?; + + let fn_name = &ast.sig.ident; + let rust_export_fn_name = format_ident!("export_{}", fn_name); + let wasm_export_fn_name = format!("{}.{}", contract_name.value(), name.value()); + + // Validate the contract name independently to ensure that it doesn't contain a + // '.' as this causes a subtle error when receive names are being split. + let contract_name_validation = + ContractName::is_valid_contract_name(&format!("init_{}", contract_name.value())) + .map_err(|e| syn::Error::new(contract_name.span(), e)); + + let receive_name_validation = ReceiveName::is_valid_receive_name(&wasm_export_fn_name) + .map_err(|e| syn::Error::new(name.span(), e)); + + match (contract_name_validation, receive_name_validation) { + (Err(mut e0), Err(e1)) => { + e0.combine(e1); + return Err(e0); + } + (Err(e), _) => return Err(e), + (_, Err(e)) => return Err(e), + _ => (), + }; + + let amount_ident = format_ident!("amount"); + + // Accumulate a list of required arguments, if the function contains a + // different number of arguments, than elements in this vector, then the + // strings are displayed as the expected arguments. + let mut required_args = vec!["ctx: &impl HasReceiveContext"]; + + let (setup_fn_optional_args, fn_optional_args) = + contract_function_optional_args_tokens(&attrs, &amount_ident, &mut required_args); + + let mut out = if contains_attribute(&attrs, "low_level") { + required_args.push("state: ContractState"); + quote! { + #[export_name = #wasm_export_fn_name] + pub extern "C" fn #rust_export_fn_name(#amount_ident: hacspec_concordium::Amount) -> i32 { + use hacspec_concordium::{SeekFrom, ContractState, Logger, ReceiveContextExtern, ExternContext}; + #setup_fn_optional_args + let ctx = ExternContext::::open(()); + let mut state = ContractState::open(()); + let res: Result<(Action, _), _> = #fn_name(&ctx, #(#fn_optional_args, )* state); + match res { + Ok((act, state_res)) => { + state = state_res; + act.tag() as i32 + } + Err(reject) => { + let code = Reject::from(reject).error_code.get(); + if code < 0 { + code + } else { + trap() // precondition violation + } + } + } + } + } + } else { + required_args.push("state: MyState"); + + quote! { + #[export_name = #wasm_export_fn_name] + pub extern "C" fn #rust_export_fn_name(#amount_ident: hacspec_concordium::Amount) -> i32 { + use hacspec_concordium::{SeekFrom, ContractState, Logger, trap}; + #setup_fn_optional_args + let ctx = ExternContext::::open(()); + let mut state_bytes = ContractState::open(()); + if let Ok(mut state) = (&mut state_bytes).get() { + let res : Result<(Action, _), _> = #fn_name(&ctx, #(#fn_optional_args, )* state); + match res { + Ok((act, state_res)) => { + state = state_res; + let res = state_bytes + .seek(SeekFrom::Start(0)) + .and_then(|_| state.serial(&mut state_bytes)); + if res.is_err() { + trap() // could not serialize state. + } else { + act.tag() as i32 + } + } + Err(reject) => { + let code = Reject::from(reject).error_code.get(); + if code < 0 { + code + } else { + trap() // precondition violation + } + } + } + } else { + trap() // Could not fully read state. + } + } + } + }; + + let arg_count = ast.sig.inputs.len(); + if arg_count != required_args.len() { + return Err(syn::Error::new( + ast.sig.inputs.span(), + format!( + "Incorrect number of function arguments, the expected arguments are ({}) ", + required_args.join(", ") + ), + )); + } + + // Embed schema if 'parameter' attribute is set + let parameter_option = get_attribute_value(attrs.iter(), "parameter")?.map(|a| a.value()); + out.extend(contract_function_schema_tokens( + parameter_option, + rust_export_fn_name, + wasm_export_fn_name, + )); + // add the original function to the output as well. + ast.to_tokens(&mut out); + Ok(out.into()) +} + +/// Generate tokens for some of the optional arguments, based on the attributes. +/// Returns a pair, where the first entry is tokens for setting up the arguments +/// and the second entry is a Vec of the argument names as tokens. +/// +/// It also mutates a vector of required arguments with the expected type +/// signature of each. +fn contract_function_optional_args_tokens<'a, I: Copy + IntoIterator>( + attrs: I, + amount_ident: &syn::Ident, + required_args: &mut Vec<&str>, +) -> (proc_macro2::TokenStream, Vec) { + let mut setup_fn_args = proc_macro2::TokenStream::new(); + let mut fn_args = vec![]; + if contains_attribute(attrs, "payable") { + required_args.push("amount: Amount"); + fn_args.push(quote!(#amount_ident)); + } else { + setup_fn_args.extend(quote! { + if #amount_ident.micro_ccd != 0 { + return -1; + } + }); + }; + + if contains_attribute(attrs, "enable_logger") { + required_args.push("logger: impl HasLogger"); + let logger_ident = format_ident!("logger"); + setup_fn_args.extend(quote!(let mut #logger_ident = hacspec_concordium::Logger::init();)); + fn_args.push(quote!(&mut #logger_ident)); + } + (setup_fn_args, fn_args) +} + +#[cfg(feature = "build-schema")] +fn contract_function_schema_tokens( + parameter_option: Option, + rust_name: syn::Ident, + wasm_name: String, +) -> proc_macro2::TokenStream { + match parameter_option { + Some(parameter_ty) => { + let parameter_ident = syn::Ident::new(¶meter_ty, Span::call_site()); + let schema_name = format!("concordium_schema_function_{}", wasm_name); + let schema_ident = format_ident!("concordium_schema_function_{}", rust_name); + quote! { + #[export_name = #schema_name] + pub extern "C" fn #schema_ident() -> *mut u8 { + let schema = <#parameter_ident as schema::SchemaType>::get_type(); + let schema_bytes = hacspec_concordium::to_bytes(&schema); + hacspec_concordium::put_in_memory(&schema_bytes) + } + } + } + None => proc_macro2::TokenStream::new(), + } +} + +#[cfg(not(feature = "build-schema"))] +fn contract_function_schema_tokens( + _parameter_option: Option, + _rust_name: syn::Ident, + _wasm_name: String, +) -> proc_macro2::TokenStream { + proc_macro2::TokenStream::new() +} + +/// Derive the Deserial trait. See the documentation of `derive(Serial)` for +/// details and limitations. +/// +/// In addition to the attributes supported by `derive(Serial)`, this derivation +/// macro supports the `ensure_ordered` attribute. If applied to a field the +/// of type `BTreeMap` or `BTreeSet` deserialization will additionally ensure +/// that the keys are in strictly increasing order. By default deserialization +/// only ensures uniqueness. +/// +/// # Example +/// ``` ignore +/// #[derive(Deserial)] +/// struct Foo { +/// #[concordium(size_length = 1, ensure_ordered)] +/// bar: BTreeSet, +/// } +/// ``` +#[proc_macro_derive(Deserial, attributes(concordium))] +pub fn deserial_derive(input: TokenStream) -> TokenStream { + let ast = parse_macro_input!(input); + unwrap_or_report(impl_deserial(&ast)) +} + +/// The prefix used in field attributes: `#[concordium(attr = "something")]` +const CONCORDIUM_FIELD_ATTRIBUTE: &str = "concordium"; + +/// A list of valid concordium field attributes +const VALID_CONCORDIUM_FIELD_ATTRIBUTES: [&str; 3] = ["size_length", "ensure_ordered", "rename"]; + +fn get_concordium_field_attributes(attributes: &[syn::Attribute]) -> syn::Result> { + attributes + .iter() + // Keep only concordium attributes + .flat_map(|attr| match attr.parse_meta() { + Ok(syn::Meta::List(list)) if list.path.is_ident(CONCORDIUM_FIELD_ATTRIBUTE) => { + list.nested + } + _ => syn::punctuated::Punctuated::new(), + }) + // Ensure only valid attributes and unwrap NestedMeta + .map(|nested| match nested { + syn::NestedMeta::Meta(meta) => { + let path = meta.path(); + if VALID_CONCORDIUM_FIELD_ATTRIBUTES.iter().any(|&attr| path.is_ident(attr)) { + Ok(meta) + } else { + Err(syn::Error::new(meta.span(), + format!("The attribute '{}' is not supported as a concordium field attribute.", + path.to_token_stream()) + )) + } + } + lit => Err(syn::Error::new(lit.span(), "Literals are not supported in a concordium field attribute.")), + }) + .collect() +} + +fn find_field_attribute_value( + attributes: &[syn::Attribute], + target_attr: &str, +) -> syn::Result> { + let target_attr = format_ident!("{}", target_attr); + let attr_values: Vec<_> = get_concordium_field_attributes(attributes)? + .into_iter() + .filter_map(|nested_meta| match nested_meta { + syn::Meta::NameValue(value) if value.path.is_ident(&target_attr) => Some(value.lit), + _ => None, + }) + .collect(); + if attr_values.is_empty() { + return Ok(None); + } + if attr_values.len() > 1 { + let mut init_error = syn::Error::new( + attr_values[1].span(), + format!("Attribute '{}' should only be specified once.", target_attr), + ); + for other in attr_values.iter().skip(2) { + init_error.combine(syn::Error::new( + other.span(), + format!("Attribute '{}' should only be specified once.", target_attr), + )) + } + Err(init_error) + } else { + Ok(Some(attr_values[0].clone())) + } +} + +fn find_length_attribute(attributes: &[syn::Attribute]) -> syn::Result> { + let value = match find_field_attribute_value(attributes, "size_length")? { + Some(v) => v, + None => return Ok(None), + }; + + // Save the span to be used in errors. + let value_span = value.span(); + + let value = match value { + syn::Lit::Int(int) => int, + _ => return Err(syn::Error::new(value_span, "Length attribute value must be an integer.")), + }; + let value = match value.base10_parse() { + Ok(v) => v, + _ => { + return Err(syn::Error::new( + value_span, + "Length attribute value must be a base 10 integer.", + )) + } + }; + match value { + 1 | 2 | 4 | 8 => Ok(Some(value)), + _ => Err(syn::Error::new(value_span, "Length info must be either 1, 2, 4, or 8.")), + } +} + +/// Find a 'rename' attribute and return its value and span. +/// Checks that the attribute is only defined once and that the value is a +/// string. +#[cfg(feature = "build-schema")] +fn find_rename_attribute(attributes: &[syn::Attribute]) -> syn::Result> { + let value = match find_field_attribute_value(attributes, "rename")? { + Some(v) => v, + None => return Ok(None), + }; + + match value { + syn::Lit::Str(value) => Ok(Some((value.value(), value.span()))), + _ => Err(syn::Error::new(value.span(), "Rename attribute value must be a string.")), + } +} + +/// Check for name collisions by inserting the name in the HashMap. +/// On collisions it returns a combined error pointing to the previous and new +/// definition. +#[cfg(feature = "build-schema")] +fn check_for_name_collisions( + used_names: &mut HashMap, + new_name: &str, + new_span: Span, +) -> syn::Result<()> { + if let Some(used_span) = used_names.insert(String::from(new_name), new_span) { + let error_msg = format!("the name `{}` is defined multiple times", new_name); + let mut error_at_first_def = syn::Error::new(used_span, &error_msg); + let error_at_second_def = syn::Error::new(new_span, &error_msg); + + // Combine the errors to show both at once + error_at_first_def.combine(error_at_second_def); + + return Err(error_at_first_def); + } + Ok(()) +} + +fn impl_deserial_field( + f: &syn::Field, + ident: &syn::Ident, + source: &syn::Ident, +) -> syn::Result { + let concordium_attributes = get_concordium_field_attributes(&f.attrs)?; + let ensure_ordered = contains_attribute(&concordium_attributes, "ensure_ordered"); + let size_length = find_length_attribute(&f.attrs)?; + let has_ctx = ensure_ordered || size_length.is_some(); + let ty = &f.ty; + if has_ctx { + // Default size length is u32, i.e. 4 bytes. + let l = format_ident!("U{}", 8 * size_length.unwrap_or(4)); + Ok(quote! { + let #ident = <#ty as hacspec_concordium::DeserialCtx>::deserial_ctx(hacspec_concordium::schema::SizeLength::#l, #ensure_ordered, #source)?; + }) + } else { + Ok(quote! { + let #ident = <#ty as Deserial>::deserial(#source)?; + }) + } +} + +fn impl_deserial(ast: &syn::DeriveInput) -> syn::Result { + let data_name = &ast.ident; + + let span = ast.span(); + + let read_ident = format_ident!("__R", span = span); + + let (impl_generics, ty_generics, where_clauses) = ast.generics.split_for_impl(); + + let source_ident = Ident::new("source", Span::call_site()); + + let body_tokens = match ast.data { + syn::Data::Struct(ref data) => { + let mut names = proc_macro2::TokenStream::new(); + let mut field_tokens = proc_macro2::TokenStream::new(); + let return_tokens = match data.fields { + syn::Fields::Named(_) => { + for field in data.fields.iter() { + let field_ident = field.ident.clone().unwrap(); // safe since named fields. + field_tokens.extend(impl_deserial_field( + field, + &field_ident, + &source_ident, + )); + names.extend(quote!(#field_ident,)) + } + quote!(Ok(#data_name{#names})) + } + syn::Fields::Unnamed(_) => { + for (i, f) in data.fields.iter().enumerate() { + let field_ident = format_ident!("x_{}", i); + field_tokens.extend(impl_deserial_field(f, &field_ident, &source_ident)); + names.extend(quote!(#field_ident,)) + } + quote!(Ok(#data_name(#names))) + } + _ => quote!(Ok(#data_name{})), + }; + quote! { + #field_tokens + #return_tokens + } + } + syn::Data::Enum(ref data) => { + let mut matches_tokens = proc_macro2::TokenStream::new(); + let source = Ident::new("source", Span::call_site()); + let size = if data.variants.len() <= 256 { + format_ident!("u8") + } else if data.variants.len() <= 256 * 256 { + format_ident!("u16") + } else { + return Err(syn::Error::new( + ast.span(), + "[derive(Deserial)]: Too many variants. Maximum 65536 are supported.", + )); + }; + for (i, variant) in data.variants.iter().enumerate() { + let (field_names, pattern) = match variant.fields { + syn::Fields::Named(_) => { + let field_names: Vec<_> = variant + .fields + .iter() + .map(|field| field.ident.clone().unwrap()) + .collect(); + (field_names.clone(), quote! { {#(#field_names),*} }) + } + syn::Fields::Unnamed(_) => { + let field_names: Vec<_> = variant + .fields + .iter() + .enumerate() + .map(|(i, _)| format_ident!("x_{}", i)) + .collect(); + (field_names.clone(), quote! { ( #(#field_names),* ) }) + } + syn::Fields::Unit => (Vec::new(), proc_macro2::TokenStream::new()), + }; + + let field_tokens: proc_macro2::TokenStream = field_names + .iter() + .zip(variant.fields.iter()) + .map(|(name, field)| impl_deserial_field(field, name, &source)) + .collect::>()?; + let idx_lit = syn::LitInt::new(i.to_string().as_str(), Span::call_site()); + let variant_ident = &variant.ident; + matches_tokens.extend(quote! { + #idx_lit => { + #field_tokens + Ok(#data_name::#variant_ident#pattern) + }, + }) + } + quote! { + let idx = #size::deserial(#source)?; + match idx { + #matches_tokens + _ => Err(Default::default()) + } + } + } + _ => unimplemented!("#[derive(Deserial)] is not implemented for union."), + }; + let gen = quote! { + #[automatically_derived] + impl #impl_generics Deserial for #data_name #ty_generics #where_clauses { + fn deserial<#read_ident: Read>(#source_ident: &mut #read_ident) -> ParseResult { + #body_tokens + } + } + }; + Ok(gen.into()) +} + +/// Derive the Serial trait for the type. +/// +/// If the type is a struct all fields must implement the Serial trait. If the +/// type is an enum then all fields of each of the enums must implement the +/// Serial trait. +/// +/// +/// Collections (Vec, BTreeMap, BTreeSet) and strings (String, str) are by +/// default serialized by prepending the number of elements as 4 bytes +/// little-endian. If this is too much or too little, fields of the above types +/// can be annotated with `size_length`. +/// +/// The value of this field is the number of bytes that will be used for +/// encoding the number of elements. Supported values are 1, 2, 4, 8. +/// +/// For BTreeMap and BTreeSet the serialize method will serialize values in +/// increasing order of keys. +/// +/// Fields of structs are serialized in the order they appear in the code. +/// +/// Enums can have no more than 65536 variants. They are serialized by using a +/// tag to indicate the variant, enumerating them in the order they are written +/// in source code. If the number of variants is less than or equal 256 then a +/// single byte is used to encode it. Otherwise two bytes are used for the tag, +/// encoded in little endian. +/// +/// # Example +/// ```ignore +/// #[derive(Serial)] +/// struct Foo { +/// #[concordium(size_length = 1)] +/// bar: BTreeSet, +/// } +/// ``` +#[proc_macro_derive(Serial, attributes(concordium))] +pub fn serial_derive(input: TokenStream) -> TokenStream { + let ast = parse_macro_input!(input); + unwrap_or_report(impl_serial(&ast)) +} + +fn impl_serial_field( + field: &syn::Field, + ident: &proc_macro2::TokenStream, + out: &syn::Ident, +) -> syn::Result { + if let Some(size_length) = find_length_attribute(&field.attrs)? { + let l = format_ident!("U{}", 8 * size_length); + Ok(quote!({ + use hacspec_concordium::SerialCtx; + #ident.serial_ctx(hacspec_concordium::schema::SizeLength::#l, #out)?; + })) + } else { + Ok(quote! { + #ident.serial(#out)?; + }) + } +} + +fn impl_serial(ast: &syn::DeriveInput) -> syn::Result { + let data_name = &ast.ident; + + let span = ast.span(); + + let write_ident = format_ident!("W", span = span); + + let (impl_generics, ty_generics, where_clauses) = ast.generics.split_for_impl(); + + let out_ident = format_ident!("out"); + + let body = match ast.data { + syn::Data::Struct(ref data) => { + let fields_tokens = match data.fields { + syn::Fields::Named(_) => { + data.fields + .iter() + .map(|field| { + let field_ident = field.ident.clone().unwrap(); // safe since named fields. + let field_ident = quote!(self.#field_ident); + impl_serial_field(field, &field_ident, &out_ident) + }) + .collect::>()? + } + syn::Fields::Unnamed(_) => data + .fields + .iter() + .enumerate() + .map(|(i, field)| { + let i = syn::LitInt::new(i.to_string().as_str(), Span::call_site()); + let field_ident = quote!(self.#i); + impl_serial_field(field, &field_ident, &out_ident) + }) + .collect::>()?, + syn::Fields::Unit => proc_macro2::TokenStream::new(), + }; + quote! { + #fields_tokens + Ok(()) + } + } + syn::Data::Enum(ref data) => { + let mut matches_tokens = proc_macro2::TokenStream::new(); + + let size = if data.variants.len() <= 256 { + format_ident!("u8") + } else if data.variants.len() <= 256 * 256 { + format_ident!("u16") + } else { + unimplemented!( + "[derive(Serial)]: Enums with more than 65536 variants are not supported." + ); + }; + + for (i, variant) in data.variants.iter().enumerate() { + let (field_names, pattern) = match variant.fields { + syn::Fields::Named(_) => { + let field_names: Vec<_> = variant + .fields + .iter() + .map(|field| field.ident.clone().unwrap()) + .collect(); + (field_names.clone(), quote! { {#(#field_names),*} }) + } + syn::Fields::Unnamed(_) => { + let field_names: Vec<_> = variant + .fields + .iter() + .enumerate() + .map(|(i, _)| format_ident!("x_{}", i)) + .collect(); + (field_names.clone(), quote! { (#(#field_names),*) }) + } + syn::Fields::Unit => (Vec::new(), proc_macro2::TokenStream::new()), + }; + let field_tokens: proc_macro2::TokenStream = field_names + .iter() + .zip(variant.fields.iter()) + .map(|(name, field)| impl_serial_field(field, "e!(#name), &out_ident)) + .collect::>()?; + + let idx_lit = + syn::LitInt::new(format!("{}{}", i, size).as_str(), Span::call_site()); + let variant_ident = &variant.ident; + + matches_tokens.extend(quote! { + #data_name::#variant_ident#pattern => { + #idx_lit.serial(#out_ident)?; + #field_tokens + }, + }) + } + quote! { + match self { + #matches_tokens + } + Ok(()) + } + } + _ => unimplemented!("#[derive(Serial)] is not implemented for union."), + }; + + let gen = quote! { + #[automatically_derived] + impl #impl_generics Serial for #data_name #ty_generics #where_clauses { + fn serial<#write_ident: Write>(&self, #out_ident: &mut #write_ident) -> Result<(), #write_ident::Err> { + #body + } + } + }; + Ok(gen.into()) +} + +/// A helper macro to derive both the Serial and Deserial traits. +/// `[derive(Serialize)]` is equivalent to `[derive(Serial,Deserial)]`, see +/// documentation of the latter two for details and options. +#[proc_macro_derive(Serialize, attributes(concordium))] +pub fn serialize_derive(input: TokenStream) -> TokenStream { + unwrap_or_report(serialize_derive_worker(input)) +} + +fn serialize_derive_worker(input: TokenStream) -> syn::Result { + let ast = syn::parse(input)?; + let mut tokens = impl_deserial(&ast)?; + tokens.extend(impl_serial(&ast)?); + Ok(tokens) +} + +/// Marks a type as the contract state. Currently only used for generating the +/// schema of the contract state. If the feature `build-schema` is not enabled +/// this has no effect. +/// +/// +/// # Example +/// ```ignore +/// #[contract_state(contract = "my_contract")] +/// #[derive(SchemaType)] +/// struct MyContractState { +/// ... +/// } +/// ``` +#[proc_macro_attribute] +pub fn contract_state(attr: TokenStream, item: TokenStream) -> TokenStream { + unwrap_or_report(contract_state_worker(attr, item)) +} + +#[cfg(feature = "build-schema")] +fn contract_state_worker(attr: TokenStream, item: TokenStream) -> syn::Result { + let mut out = proc_macro2::TokenStream::new(); + + let data_ident = if let Ok(ast) = syn::parse::(item.clone()) { + ast.to_tokens(&mut out); + ast.ident + } else if let Ok(ast) = syn::parse::(item.clone()) { + ast.to_tokens(&mut out); + ast.ident + } else if let Ok(ast) = syn::parse::(item.clone()) { + ast.to_tokens(&mut out); + ast.ident + } else { + return Err(syn::Error::new_spanned( + proc_macro2::TokenStream::from(item), + "#[contract_state] only supports structs, enums and type aliases.", + )); + }; + + let attrs = Punctuated::::parse_terminated.parse(attr)?; + + let contract_name = get_attribute_value(attrs.iter(), "contract")?.ok_or_else(|| { + syn::Error::new( + Span::call_site(), + "A name of the contract must be provided, using the 'contract' attribute.\n\nFor \ + example #[contract_state(contract = \"my-contract\")].", + ) + })?; + + let wasm_schema_name = format!("concordium_schema_state_{}", contract_name.value()); + let rust_schema_name = format_ident!("concordium_schema_state_{}", data_ident); + + let generate_schema_tokens = quote! { + #[allow(non_snake_case)] + #[export_name = #wasm_schema_name] + pub extern "C" fn #rust_schema_name() -> *mut u8 { + let schema = <#data_ident as hacspec_concordium::schema::SchemaType>::get_type(); + let schema_bytes = hacspec_concordium::to_bytes(&schema); + hacspec_concordium::put_in_memory(&schema_bytes) + } + }; + generate_schema_tokens.to_tokens(&mut out); + Ok(out.into()) +} + +#[cfg(not(feature = "build-schema"))] +fn contract_state_worker(_attr: TokenStream, item: TokenStream) -> syn::Result { + Ok(item) +} + +/// Derive the `SchemaType` trait for a type. +/// If the feature `build-schema` is not enabled this is a no-op, i.e., it does +/// not produce any code. +#[proc_macro_derive(SchemaType, attributes(size_length))] +pub fn schema_type_derive(input: TokenStream) -> TokenStream { + unwrap_or_report(schema_type_derive_worker(input)) +} + +#[cfg(feature = "build-schema")] +fn schema_type_derive_worker(input: TokenStream) -> syn::Result { + let ast: syn::DeriveInput = syn::parse(input)?; + + let data_name = &ast.ident; + + let body = match ast.data { + syn::Data::Struct(ref data) => { + let fields_tokens = schema_type_fields(&data.fields)?; + quote! { + hacspec_concordium::schema::Type::Struct(#fields_tokens) + } + } + syn::Data::Enum(ref data) => { + let mut used_variant_names = HashMap::new(); + let variant_tokens: Vec<_> = data + .variants + .iter() + .map(|variant| { + // Handle the 'rename' attribute. + let (variant_name, variant_span) = match find_rename_attribute(&variant.attrs)? + { + Some(name_and_span) => name_and_span, + None => (variant.ident.to_string(), variant.ident.span()), + }; + check_for_name_collisions( + &mut used_variant_names, + &variant_name, + variant_span, + )?; + + let fields_tokens = schema_type_fields(&variant.fields)?; + Ok(quote! { + (hacspec_concordium::String::from(#variant_name), #fields_tokens) + }) + }) + .collect::>()?; + quote! { + hacspec_concordium::schema::Type::Enum(hacspec_concordium::Vec::from([ #(#variant_tokens),* ])) + } + } + _ => syn::Error::new(ast.span(), "Union is not supported").to_compile_error(), + }; + + let out = quote! { + #[automatically_derived] + impl hacspec_concordium::schema::SchemaType for #data_name { + fn get_type() -> hacspec_concordium::schema::Type { + #body + } + } + }; + Ok(out.into()) +} + +#[cfg(not(feature = "build-schema"))] +fn schema_type_derive_worker(_input: TokenStream) -> syn::Result { + Ok(TokenStream::new()) +} + +#[cfg(feature = "build-schema")] +fn schema_type_field_type(field: &syn::Field) -> syn::Result { + let field_type = &field.ty; + if let Some(l) = find_length_attribute(&field.attrs)? { + let size = format_ident!("U{}", 8 * l); + Ok(quote! { + <#field_type as hacspec_concordium::schema::SchemaType>::get_type().set_size_length(hacspec_concordium::schema::SizeLength::#size) + }) + } else { + Ok(quote! { + <#field_type as hacspec_concordium::schema::SchemaType>::get_type() + }) + } +} + +#[cfg(feature = "build-schema")] +fn schema_type_fields(fields: &syn::Fields) -> syn::Result { + match fields { + syn::Fields::Named(_) => { + let mut used_field_names = HashMap::new(); + let fields_tokens: Vec<_> = fields + .iter() + .map(|field| { + // Handle the 'rename' attribute. + let (field_name, field_span) = match find_rename_attribute(&field.attrs)? { + Some(name_and_span) => name_and_span, + None => (field.ident.clone().unwrap().to_string(), field.ident.span()), // safe since named fields. + }; + check_for_name_collisions(&mut used_field_names, &field_name, field_span)?; + + let field_schema_type = schema_type_field_type(&field)?; + Ok(quote! { + (hacspec_concordium::String::from(#field_name), #field_schema_type) + }) + }) + .collect::>()?; + Ok( + quote! { hacspec_concordium::schema::Fields::Named(hacspec_concordium::Vec::from([ #(#fields_tokens),* ])) }, + ) + } + syn::Fields::Unnamed(_) => { + let fields_tokens: Vec<_> = + fields.iter().map(schema_type_field_type).collect::>()?; + Ok(quote! { hacspec_concordium::schema::Fields::Unnamed([ #(#fields_tokens),* ].to_vec()) }) + } + syn::Fields::Unit => Ok(quote! { hacspec_concordium::schema::Fields::None }), + } +} + +/// We reserve a number of error codes for custom errors, such as ParseError, +/// that are provided by concordium-std. These reserved error codes can have +/// indices i32::MIN, i32::MIN + 1, ..., RESERVED_ERROR_CODES +const RESERVED_ERROR_CODES: i32 = i32::MIN + 100; + +/// Derive the conversion of enums that represent error types into the Reject +/// struct which can be used as the error type of init and receive functions. +/// Creating custom enums for error types can provide meaningful error messages +/// to the user of the smart contract. +/// +/// Note that at the moment, we can only derive fieldless enums. +/// +/// The conversion will map the first variant to error code -1, second to -2, +/// etc. +/// +/// ### Example +/// ```ignore +/// #[derive(Clone, Copy, Reject)] +/// enum MyError { +/// IllegalState, // receives error code -1 +/// WrongSender, // receives error code -2 +/// // TimeExpired(time: Timestamp), /* currently not supported */ +/// ... +/// } +/// ``` +/// ```ignore +/// #[receive(contract = "my_contract", name = "some_receive")] +/// fn receive(ctx: &impl HasReceiveContext, state: &mut MyState) +/// -> Result {...} +/// ``` +#[proc_macro_derive(Reject, attributes(from))] +pub fn reject_derive(input: TokenStream) -> TokenStream { + unwrap_or_report(reject_derive_worker(input)) +} + +fn reject_derive_worker(input: TokenStream) -> syn::Result { + let ast: syn::DeriveInput = syn::parse(input)?; + let enum_data = match &ast.data { + syn::Data::Enum(data) => Ok(data), + _ => Err(syn::Error::new(ast.span(), "Reject can only be derived for enums.")), + }?; + let enum_ident = &ast.ident; + + // Ensure that the number of enum variants fits into the number of error codes + // we can generate. + let too_many_variants = format!( + "Error enum {} cannot have more than {} variants.", + enum_ident, + RESERVED_ERROR_CODES.neg() + ); + match i32::try_from(enum_data.variants.len()) { + Ok(n) if n <= RESERVED_ERROR_CODES.neg() => (), + _ => { + return Err(syn::Error::new(ast.span(), &too_many_variants)); + } + }; + + let variant_error_conversions = generate_variant_error_conversions(&enum_data, &enum_ident)?; + + let gen = quote! { + /// The from implementation maps the first variant to -1, second to -2, etc. + /// NB: This differs from the cast `variant as i32` since we cannot easily modify + /// the variant tags in the derive macro itself. + #[automatically_derived] + impl From<#enum_ident> for Reject { + #[inline(always)] + fn from(e: #enum_ident) -> Self { + Reject { error_code: unsafe { hacspec_concordium::num::NonZeroI32::new_unchecked(-(e as i32) - 1) } } + } + } + + #(#variant_error_conversions)* + }; + Ok(gen.into()) +} + +/// Generate error conversions for enum variants e.g. for converting +/// `ParseError` to `MyParseErrorWrapper` in +/// +/// ```ignore +/// enum MyErrorType { +/// #[from(ParseError)] +/// MyParseErrorWrapper, +/// ... +/// } +/// ``` +fn generate_variant_error_conversions( + enum_data: &DataEnum, + enum_name: &syn::Ident, +) -> syn::Result> { + Ok(enum_data + .variants + .iter() + .map(|variant| { + // in the future we might incorporate explicit discriminants, + // but the general case of this requires evaluating constant expressions, + // which is not easily supported at the moment. + if let Some((_, discriminant)) = variant.discriminant.as_ref() { + return Err(syn::Error::new( + discriminant.span(), + "Explicit discriminants are not yet supported.", + )); + } + let variant_attributes = variant.attrs.iter(); + variant_attributes + .map(move |attr| { + parse_attr_and_gen_error_conversions(attr, enum_name, &variant.ident) + }) + .collect::>>() + }) + .collect::>>()? + .into_iter() + .flatten() + .flatten() + .collect()) +} + +/// Generate error conversion for a given enum variant. +fn parse_attr_and_gen_error_conversions( + attr: &syn::Attribute, + enum_name: &syn::Ident, + variant_name: &syn::Ident, +) -> syn::Result> { + let wrong_from_usage = |x: &dyn Spanned| { + syn::Error::new( + x.span(), + "The `from` attribute expects a list of error types, e.g.: #[from(ParseError)].", + ) + }; + match attr.parse_meta() { + Ok(syn::Meta::List(list)) if list.path.is_ident("from") => { + let mut from_error_names = vec![]; + for nested in list.nested.iter() { + // check that all items in the list are paths + match nested { + syn::NestedMeta::Meta(meta) => match meta { + Meta::Path(from_error) => { + let ident = from_error + .get_ident() + .ok_or_else(|| wrong_from_usage(from_error))?; + from_error_names.push(ident); + } + other => return Err(wrong_from_usage(&other)), + }, + syn::NestedMeta::Lit(l) => return Err(wrong_from_usage(&l)), + } + } + Ok(from_error_token_stream(&from_error_names, &enum_name, variant_name).collect()) + } + Ok(syn::Meta::NameValue(mnv)) if mnv.path.is_ident("from") => Err(wrong_from_usage(&mnv)), + _ => Ok(vec![]), + } +} + +/// Generating the conversion code a la +/// ```ignore +/// impl From for MyErrorType { +/// fn from(x: ParseError) -> Self { +/// MyError::MyParseErrorWrapper +/// } +/// } +/// ``` +fn from_error_token_stream<'a>( + paths: &'a [&'a syn::Ident], + enum_name: &'a syn::Ident, + variant_name: &'a syn::Ident, +) -> impl Iterator + 'a { + paths.iter().map(move |from_error| { + quote! { + impl From<#from_error> for #enum_name { + #[inline] + fn from(fe: #from_error) -> Self { + #enum_name::#variant_name + } + }} + }) +} + +#[proc_macro_attribute] +/// Derive the appropriate export for an annotated test function, when feature +/// "wasm-test" is enabled, otherwise behaves like `#[test]`. +pub fn concordium_test(attr: TokenStream, item: TokenStream) -> TokenStream { + unwrap_or_report(concordium_test_worker(attr, item)) +} + +/// Derive the appropriate export for an annotated test function, when feature +/// "wasm-test" is enabled, otherwise behaves like `#[test]`. +#[cfg(feature = "wasm-test")] +fn concordium_test_worker(_attr: TokenStream, item: TokenStream) -> syn::Result { + let test_fn_ast: syn::ItemFn = + attach_error(syn::parse(item), "#[concordium_test] can only be applied to functions.")?; + + let test_fn_name = &test_fn_ast.sig.ident; + let rust_export_fn_name = format_ident!("concordium_test_{}", test_fn_name); + let wasm_export_fn_name = format!("concordium_test {}", test_fn_name); + + let test_fn = quote! { + // Setup test function + #test_fn_ast + + // Export test function in wasm + #[export_name = #wasm_export_fn_name] + pub extern "C" fn #rust_export_fn_name() { + #test_fn_name() + } + }; + Ok(test_fn.into()) +} + +/// Derive the appropriate export for an annotated test function, when feature +/// "wasm-test" is enabled, otherwise behaves like `#[test]`. +#[cfg(not(feature = "wasm-test"))] +fn concordium_test_worker(_attr: TokenStream, item: TokenStream) -> syn::Result { + let test_fn_ast: syn::ItemFn = + attach_error(syn::parse(item), "#[concordium_test] can only be applied to functions.")?; + + let test_fn = quote! { + #[test] + #test_fn_ast + }; + Ok(test_fn.into()) +} + +/// Sets the cfg for testing targeting either Wasm and native. +#[cfg(feature = "wasm-test")] +#[proc_macro_attribute] +pub fn concordium_cfg_test(_attr: TokenStream, item: TokenStream) -> TokenStream { item } + +/// Sets the cfg for testing targeting either Wasm and native. +#[cfg(not(feature = "wasm-test"))] +#[proc_macro_attribute] +pub fn concordium_cfg_test(_attr: TokenStream, item: TokenStream) -> TokenStream { + let item = proc_macro2::TokenStream::from(item); + let out = quote! { + #[cfg(test)] + #item + }; + out.into() +} diff --git a/concordium/Cargo.toml b/concordium/Cargo.toml new file mode 100644 index 0000000..b1c5441 --- /dev/null +++ b/concordium/Cargo.toml @@ -0,0 +1,35 @@ +[package] +name = "hacspec-concordium" +version = "0.1.0" +authors = [""] +edition = "2018" + +[lib] +path = "src/concordium.rs" + +[dependencies] +# hacspec-lib = { git = "https://github.com/hacspec/hacspec.git" } +hax-lib-macros = { path = "../../hax/hax-lib-macros/" } +# hacspec-attributes = { path = "../../utils/attributes", version = "0.1.0-beta.1" , features = ["print_attributes", "hacspec_unsafe"] } # , features = ["hacspec_unsafe"] , , optional = true +# creusot-contracts = { git = "https://github.com/xldenis/creusot", rev = "7763b3ae77205fba83182b9a6c3e69ad0b12fec7" } +concordium-contracts-common = { git = "https://github.com/Concordium/concordium-contracts-common", rev = "84ff7db509ca1fbf958b47e5e5903b7662295850", version = "=2.0.0", default-features = false } +hacspec-concordium-derive = { path = "../concordium-derive" } + +# Reduce code size, at the cost of performance in allocation heavy-code. +wee_alloc="0.4.5" + +# [features] +# use_attributes = ["hacspec-attributes/print_attributes", "hacspec-attributes/hacspec_unsafe"] + +bls12_381 = "0.8" +group = "0.13" + +[dev-dependencies] +# hacspec-dev = { path = "../../utils/dev" } +criterion = "0.3" +rand = "0.8" +quickcheck = "1" +quickcheck_macros = "1" + +[features] +hax_compilation = [] \ No newline at end of file diff --git a/concordium/hax_frontend_export.json b/concordium/hax_frontend_export.json new file mode 100644 index 0000000..ae721b5 --- /dev/null +++ b/concordium/hax_frontend_export.json @@ -0,0 +1 @@ +[{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":"Use","disambiguator":0}],"index":[0,1]},"span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":0},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"vis_span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":0},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"kind":{"Use":[{"span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":0},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"res":["Err"],"segments":[{"ident":["core",{"lo":{"line":1,"col":0},"hi":{"line":1,"col":0},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}],"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":"Use","disambiguator":0}],"index":[0,1]},"local_id":1},"res":{"Def":[{"DefKind":{"todo":"Mod"}},{"krate":"core","path":[],"index":[1,0]}]},"args":null,"infer_args":false},{"ident":["prelude",{"lo":{"line":1,"col":0},"hi":{"line":1,"col":0},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}],"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":"Use","disambiguator":0}],"index":[0,1]},"local_id":2},"res":{"Def":[{"DefKind":{"todo":"Mod"}},{"krate":"core","path":[{"data":{"TypeNs":"prelude"},"disambiguator":0}],"index":[1,922]}]},"args":null,"infer_args":false},{"ident":["rust_2018",{"lo":{"line":1,"col":0},"hi":{"line":1,"col":0},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}],"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":"Use","disambiguator":0}],"index":[0,1]},"local_id":3},"res":{"Def":[{"DefKind":{"todo":"Mod"}},{"krate":"core","path":[{"data":{"TypeNs":"prelude"},"disambiguator":0},{"data":{"TypeNs":"rust_2018"},"disambiguator":0}],"index":[1,1002]}]},"args":null,"infer_args":false}],"rename":null},"Glob"]},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"prelude_import","args":"Empty","tokens":null},"tokens":null}},"id":38,"style":"Outer","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":0},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"core"},"disambiguator":0}],"index":[0,2]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"core"},"disambiguator":0}],"index":[0,2]},"span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":0},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"vis_span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":0},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"kind":{"ExternCrate":null},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"macro_use","args":"Empty","tokens":null},"tokens":null}},"id":37,"style":"Outer","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":0},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"compiler_builtins"},"disambiguator":0}],"index":[0,3]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"compiler_builtins"},"disambiguator":0}],"index":[0,3]},"span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":0},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"vis_span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":0},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"kind":{"ExternCrate":null},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"macro_use","args":"Empty","tokens":null},"tokens":null}},"id":36,"style":"Outer","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":0},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"hax_lib_macros"},"disambiguator":0}],"index":[0,166]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"hax_lib_macros"},"disambiguator":0}],"index":[0,166]},"span":{"lo":{"line":10,"col":0},"hi":{"line":10,"col":28},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"vis_span":{"lo":{"line":10,"col":0},"hi":{"line":10,"col":28},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"kind":{"ExternCrate":null},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"_hax::skip","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:9:1: 9:24 (#7), close: concordium/src/concordium.rs:9:1: 9:24 (#7) }"}},"delim":"Parenthesis","tokens":""}},"tokens":null},"tokens":null}},"id":351,"style":"Outer","span":{"lo":{"line":9,"col":0},"hi":{"line":9,"col":23},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":"Use","disambiguator":21}],"index":[0,167]},"span":{"lo":{"line":12,"col":0},"hi":{"line":12,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"vis_span":{"lo":{"line":12,"col":0},"hi":{"line":12,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"kind":{"Use":[{"span":{"lo":{"line":12,"col":4},"hi":{"line":12,"col":18},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"res":[{"Def":[{"DefKind":{"todo":"Mod"}},{"krate":"hax_lib_macros","path":[],"index":[9,0]}]}],"segments":[{"ident":["hax_lib_macros",{"lo":{"line":12,"col":4},"hi":{"line":12,"col":18},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}],"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":"Use","disambiguator":21}],"index":[0,167]},"local_id":1},"res":{"Def":[{"DefKind":{"todo":"Mod"}},{"krate":"hax_lib_macros","path":[],"index":[9,0]}]},"args":null,"infer_args":false}],"rename":null},"Glob"]},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"_hax::skip","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:11:1: 11:24 (#10), close: concordium/src/concordium.rs:11:1: 11:24 (#10) }"}},"delim":"Parenthesis","tokens":""}},"tokens":null},"tokens":null}},"id":353,"style":"Outer","span":{"lo":{"line":11,"col":0},"hi":{"line":11,"col":23},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"alloc"},"disambiguator":0}],"index":[0,4]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"alloc"},"disambiguator":0}],"index":[0,4]},"span":{"lo":{"line":16,"col":0},"hi":{"line":16,"col":23},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"vis_span":{"lo":{"line":16,"col":0},"hi":{"line":16,"col":23},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"kind":{"ExternCrate":null},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"cfg","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:14:6: 14:7 (#0), close: concordium/src/concordium.rs:14:31: 14:32 (#0) }"}},"delim":"Parenthesis","tokens":"not(feature = \"hacspec\")"}},"tokens":null},"tokens":null}},"id":5,"style":"Outer","span":{"lo":{"line":14,"col":0},"hi":{"line":14,"col":32},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"cfg","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:15:6: 15:7 (#0), close: concordium/src/concordium.rs:15:27: 15:28 (#0) }"}},"delim":"Parenthesis","tokens":"not(feature = \"std\")"}},"tokens":null},"tokens":null}},"id":6,"style":"Outer","span":{"lo":{"line":15,"col":0},"hi":{"line":15,"col":28},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"ValueNs":"trap"},"disambiguator":0}],"index":[0,5]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"ValueNs":"trap"},"disambiguator":0}],"index":[0,5]},"span":{"lo":{"line":34,"col":0},"hi":{"line":36,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"vis_span":{"lo":{"line":34,"col":0},"hi":{"line":36,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"kind":{"Fn":[{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":34,"col":18},"hi":{"line":34,"col":18},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"span":{"lo":{"line":34,"col":11},"hi":{"line":34,"col":11},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"params":[],"ret":"Never","body":{"ty":"Never","span":{"lo":{"line":34,"col":19},"hi":{"line":36,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"contents":{"Block":{"targeted_by_break":false,"region_scope":{"id":6,"data":"Node"},"opt_destruction_scope":null,"span":{"lo":{"line":34,"col":19},"hi":{"line":36,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"stmts":[],"expr":{"ty":"Never","span":{"lo":{"line":35,"col":4},"hi":{"line":35,"col":29},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"contents":{"Call":{"ty":{"Arrow":{"value":{"inputs":[],"output":"Never","c_variadic":false,"unsafety":"Normal","abi":{"Abi":{"todo":"RustIntrinsic"}}},"bound_vars":[]}},"fun":{"ty":{"Arrow":{"value":{"inputs":[],"output":"Never","c_variadic":false,"unsafety":"Normal","abi":{"Abi":{"todo":"RustIntrinsic"}}},"bound_vars":[]}},"span":{"lo":{"line":35,"col":4},"hi":{"line":35,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"contents":{"GlobalName":{"id":{"krate":"core","path":[{"data":{"TypeNs":"intrinsics"},"disambiguator":0},{"data":"ForeignMod","disambiguator":0},{"data":{"ValueNs":"abort"},"disambiguator":0}],"index":[1,1246]}}},"hir_id":null,"attributes":[]},"args":[],"from_hir_call":true,"fn_span":{"lo":{"line":35,"col":4},"hi":{"line":35,"col":29},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"impl":null}},"hir_id":[5,1],"attributes":[]},"safety_mode":"Safe"}},"hir_id":[5,7],"attributes":[]},"sig_span":{"lo":{"line":34,"col":0},"hi":{"line":34,"col":18},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}}]},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"cfg","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:31:6: 31:7 (#0), close: concordium/src/concordium.rs:31:31: 31:32 (#0) }"}},"delim":"Parenthesis","tokens":"not(feature = \"hacspec\")"}},"tokens":null},"tokens":null}},"id":16,"style":"Outer","span":{"lo":{"line":31,"col":0},"hi":{"line":31,"col":32},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"cfg","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:32:6: 32:7 (#0), close: concordium/src/concordium.rs:32:61: 32:62 (#0) }"}},"delim":"Parenthesis","tokens":"all(not(feature = \"std\"), not(target_arch = \"wasm32\"))"}},"tokens":null},"tokens":null}},"id":17,"style":"Outer","span":{"lo":{"line":32,"col":0},"hi":{"line":32,"col":62},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"inline","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:33:9: 33:10 (#0), close: concordium/src/concordium.rs:33:16: 33:17 (#0) }"}},"delim":"Parenthesis","tokens":"always"}},"tokens":null},"tokens":null}},"id":18,"style":"Outer","span":{"lo":{"line":33,"col":0},"hi":{"line":33,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":"Use","disambiguator":1}],"index":[0,6]},"span":{"lo":{"line":43,"col":0},"hi":{"line":43,"col":90},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"vis_span":{"lo":{"line":43,"col":0},"hi":{"line":43,"col":90},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"kind":{"Use":[{"span":{"lo":{"line":43,"col":8},"hi":{"line":43,"col":89},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"res":[],"segments":[{"ident":["alloc",{"lo":{"line":43,"col":8},"hi":{"line":43,"col":13},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}],"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":"Use","disambiguator":1}],"index":[0,6]},"local_id":1},"res":{"Def":[{"DefKind":{"todo":"Mod"}},{"krate":"alloc","path":[],"index":[4,0]}]},"args":null,"infer_args":false}],"rename":null},"ListStem"]},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Re-export."]},"id":19,"style":"Outer","span":{"lo":{"line":40,"col":0},"hi":{"line":40,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"cfg","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:41:6: 41:7 (#0), close: concordium/src/concordium.rs:41:31: 41:32 (#0) }"}},"delim":"Parenthesis","tokens":"not(feature = \"hacspec\")"}},"tokens":null},"tokens":null}},"id":20,"style":"Outer","span":{"lo":{"line":41,"col":0},"hi":{"line":41,"col":32},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"cfg","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:42:6: 42:7 (#0), close: concordium/src/concordium.rs:42:27: 42:28 (#0) }"}},"delim":"Parenthesis","tokens":"not(feature = \"std\")"}},"tokens":null},"tokens":null}},"id":21,"style":"Outer","span":{"lo":{"line":42,"col":0},"hi":{"line":42,"col":28},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":"Use","disambiguator":2}],"index":[0,7]},"span":{"lo":{"line":43,"col":16},"hi":{"line":43,"col":31},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"vis_span":{"lo":{"line":43,"col":16},"hi":{"line":43,"col":31},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"kind":{"Use":[{"span":{"lo":{"line":43,"col":16},"hi":{"line":43,"col":31},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"res":[{"Def":[{"DefKind":{"todo":"Trait"}},{"krate":"alloc","path":[{"data":{"TypeNs":"borrow"},"disambiguator":0},{"data":{"TypeNs":"ToOwned"},"disambiguator":0}],"index":[4,680]}]}],"segments":[{"ident":["alloc",{"lo":{"line":43,"col":8},"hi":{"line":43,"col":13},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}],"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":"Use","disambiguator":2}],"index":[0,7]},"local_id":1},"res":{"Def":[{"DefKind":{"todo":"Mod"}},{"krate":"alloc","path":[],"index":[4,0]}]},"args":null,"infer_args":false},{"ident":["borrow",{"lo":{"line":43,"col":16},"hi":{"line":43,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}],"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":"Use","disambiguator":2}],"index":[0,7]},"local_id":2},"res":{"Def":[{"DefKind":{"todo":"Mod"}},{"krate":"alloc","path":[{"data":{"TypeNs":"borrow"},"disambiguator":0}],"index":[4,661]}]},"args":null,"infer_args":false},{"ident":["ToOwned",{"lo":{"line":43,"col":24},"hi":{"line":43,"col":31},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}],"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":"Use","disambiguator":2}],"index":[0,7]},"local_id":3},"res":"Err","args":null,"infer_args":false}],"rename":"ToOwned"},"Single"]},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Re-export."]},"id":19,"style":"Outer","span":{"lo":{"line":40,"col":0},"hi":{"line":40,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"cfg","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:41:6: 41:7 (#0), close: concordium/src/concordium.rs:41:31: 41:32 (#0) }"}},"delim":"Parenthesis","tokens":"not(feature = \"hacspec\")"}},"tokens":null},"tokens":null}},"id":20,"style":"Outer","span":{"lo":{"line":41,"col":0},"hi":{"line":41,"col":32},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"cfg","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:42:6: 42:7 (#0), close: concordium/src/concordium.rs:42:27: 42:28 (#0) }"}},"delim":"Parenthesis","tokens":"not(feature = \"std\")"}},"tokens":null},"tokens":null}},"id":21,"style":"Outer","span":{"lo":{"line":42,"col":0},"hi":{"line":42,"col":28},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":"Use","disambiguator":3}],"index":[0,8]},"span":{"lo":{"line":43,"col":33},"hi":{"line":43,"col":39},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"vis_span":{"lo":{"line":43,"col":33},"hi":{"line":43,"col":39},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"kind":{"Use":[{"span":{"lo":{"line":43,"col":33},"hi":{"line":43,"col":39},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"res":[{"Def":[{"DefKind":{"todo":"Mod"}},{"krate":"alloc","path":[{"data":{"TypeNs":"string"},"disambiguator":0}],"index":[4,5410]}]}],"segments":[{"ident":["alloc",{"lo":{"line":43,"col":8},"hi":{"line":43,"col":13},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}],"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":"Use","disambiguator":3}],"index":[0,8]},"local_id":1},"res":{"Def":[{"DefKind":{"todo":"Mod"}},{"krate":"alloc","path":[],"index":[4,0]}]},"args":null,"infer_args":false},{"ident":["string",{"lo":{"line":43,"col":33},"hi":{"line":43,"col":39},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}],"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":"Use","disambiguator":3}],"index":[0,8]},"local_id":2},"res":"Err","args":null,"infer_args":false}],"rename":"string"},"Single"]},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Re-export."]},"id":19,"style":"Outer","span":{"lo":{"line":40,"col":0},"hi":{"line":40,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"cfg","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:41:6: 41:7 (#0), close: concordium/src/concordium.rs:41:31: 41:32 (#0) }"}},"delim":"Parenthesis","tokens":"not(feature = \"hacspec\")"}},"tokens":null},"tokens":null}},"id":20,"style":"Outer","span":{"lo":{"line":41,"col":0},"hi":{"line":41,"col":32},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"cfg","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:42:6: 42:7 (#0), close: concordium/src/concordium.rs:42:27: 42:28 (#0) }"}},"delim":"Parenthesis","tokens":"not(feature = \"std\")"}},"tokens":null},"tokens":null}},"id":21,"style":"Outer","span":{"lo":{"line":42,"col":0},"hi":{"line":42,"col":28},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":"Use","disambiguator":4}],"index":[0,9]},"span":{"lo":{"line":43,"col":41},"hi":{"line":43,"col":55},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"vis_span":{"lo":{"line":43,"col":41},"hi":{"line":43,"col":55},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"kind":{"Use":[{"span":{"lo":{"line":43,"col":41},"hi":{"line":43,"col":55},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"res":[{"Def":[{"DefKind":{"todo":"Struct"}},{"krate":"alloc","path":[{"data":{"TypeNs":"string"},"disambiguator":0},{"data":{"TypeNs":"String"},"disambiguator":0}],"index":[4,7255]}]}],"segments":[{"ident":["alloc",{"lo":{"line":43,"col":8},"hi":{"line":43,"col":13},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}],"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":"Use","disambiguator":4}],"index":[0,9]},"local_id":1},"res":{"Def":[{"DefKind":{"todo":"Mod"}},{"krate":"alloc","path":[],"index":[4,0]}]},"args":null,"infer_args":false},{"ident":["string",{"lo":{"line":43,"col":41},"hi":{"line":43,"col":47},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}],"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":"Use","disambiguator":4}],"index":[0,9]},"local_id":2},"res":{"Def":[{"DefKind":{"todo":"Mod"}},{"krate":"alloc","path":[{"data":{"TypeNs":"string"},"disambiguator":0}],"index":[4,5410]}]},"args":null,"infer_args":false},{"ident":["String",{"lo":{"line":43,"col":49},"hi":{"line":43,"col":55},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}],"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":"Use","disambiguator":4}],"index":[0,9]},"local_id":3},"res":"Err","args":null,"infer_args":false}],"rename":"String"},"Single"]},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Re-export."]},"id":19,"style":"Outer","span":{"lo":{"line":40,"col":0},"hi":{"line":40,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"cfg","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:41:6: 41:7 (#0), close: concordium/src/concordium.rs:41:31: 41:32 (#0) }"}},"delim":"Parenthesis","tokens":"not(feature = \"hacspec\")"}},"tokens":null},"tokens":null}},"id":20,"style":"Outer","span":{"lo":{"line":41,"col":0},"hi":{"line":41,"col":32},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"cfg","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:42:6: 42:7 (#0), close: concordium/src/concordium.rs:42:27: 42:28 (#0) }"}},"delim":"Parenthesis","tokens":"not(feature = \"std\")"}},"tokens":null},"tokens":null}},"id":21,"style":"Outer","span":{"lo":{"line":42,"col":0},"hi":{"line":42,"col":28},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":"Use","disambiguator":5}],"index":[0,10]},"span":{"lo":{"line":43,"col":57},"hi":{"line":43,"col":73},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"vis_span":{"lo":{"line":43,"col":57},"hi":{"line":43,"col":73},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"kind":{"Use":[{"span":{"lo":{"line":43,"col":57},"hi":{"line":43,"col":73},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"res":[{"Def":[{"DefKind":{"todo":"Trait"}},{"krate":"alloc","path":[{"data":{"TypeNs":"string"},"disambiguator":0},{"data":{"TypeNs":"ToString"},"disambiguator":0}],"index":[4,5642]}]}],"segments":[{"ident":["alloc",{"lo":{"line":43,"col":8},"hi":{"line":43,"col":13},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}],"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":"Use","disambiguator":5}],"index":[0,10]},"local_id":1},"res":{"Def":[{"DefKind":{"todo":"Mod"}},{"krate":"alloc","path":[],"index":[4,0]}]},"args":null,"infer_args":false},{"ident":["string",{"lo":{"line":43,"col":57},"hi":{"line":43,"col":63},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}],"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":"Use","disambiguator":5}],"index":[0,10]},"local_id":2},"res":{"Def":[{"DefKind":{"todo":"Mod"}},{"krate":"alloc","path":[{"data":{"TypeNs":"string"},"disambiguator":0}],"index":[4,5410]}]},"args":null,"infer_args":false},{"ident":["ToString",{"lo":{"line":43,"col":65},"hi":{"line":43,"col":73},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}],"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":"Use","disambiguator":5}],"index":[0,10]},"local_id":3},"res":"Err","args":null,"infer_args":false}],"rename":"ToString"},"Single"]},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Re-export."]},"id":19,"style":"Outer","span":{"lo":{"line":40,"col":0},"hi":{"line":40,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"cfg","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:41:6: 41:7 (#0), close: concordium/src/concordium.rs:41:31: 41:32 (#0) }"}},"delim":"Parenthesis","tokens":"not(feature = \"hacspec\")"}},"tokens":null},"tokens":null}},"id":20,"style":"Outer","span":{"lo":{"line":41,"col":0},"hi":{"line":41,"col":32},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"cfg","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:42:6: 42:7 (#0), close: concordium/src/concordium.rs:42:27: 42:28 (#0) }"}},"delim":"Parenthesis","tokens":"not(feature = \"std\")"}},"tokens":null},"tokens":null}},"id":21,"style":"Outer","span":{"lo":{"line":42,"col":0},"hi":{"line":42,"col":28},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":"Use","disambiguator":6}],"index":[0,11]},"span":{"lo":{"line":43,"col":75},"hi":{"line":43,"col":78},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"vis_span":{"lo":{"line":43,"col":75},"hi":{"line":43,"col":78},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"kind":{"Use":[{"span":{"lo":{"line":43,"col":75},"hi":{"line":43,"col":78},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"res":[{"Def":[{"DefKind":{"todo":"Mod"}},{"krate":"alloc","path":[{"data":{"TypeNs":"vec"},"disambiguator":0}],"index":[4,6116]}]},{"Def":[{"DefKind":{"todo":"Macro(Bang)"}},{"krate":"alloc","path":[{"data":{"TypeNs":"macros"},"disambiguator":0},{"data":{"MacroNs":"vec"},"disambiguator":0}],"index":[4,5]}]}],"segments":[{"ident":["alloc",{"lo":{"line":43,"col":8},"hi":{"line":43,"col":13},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}],"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":"Use","disambiguator":6}],"index":[0,11]},"local_id":1},"res":{"Def":[{"DefKind":{"todo":"Mod"}},{"krate":"alloc","path":[],"index":[4,0]}]},"args":null,"infer_args":false},{"ident":["vec",{"lo":{"line":43,"col":75},"hi":{"line":43,"col":78},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}],"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":"Use","disambiguator":6}],"index":[0,11]},"local_id":2},"res":"Err","args":null,"infer_args":false}],"rename":"vec"},"Single"]},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Re-export."]},"id":19,"style":"Outer","span":{"lo":{"line":40,"col":0},"hi":{"line":40,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"cfg","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:41:6: 41:7 (#0), close: concordium/src/concordium.rs:41:31: 41:32 (#0) }"}},"delim":"Parenthesis","tokens":"not(feature = \"hacspec\")"}},"tokens":null},"tokens":null}},"id":20,"style":"Outer","span":{"lo":{"line":41,"col":0},"hi":{"line":41,"col":32},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"cfg","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:42:6: 42:7 (#0), close: concordium/src/concordium.rs:42:27: 42:28 (#0) }"}},"delim":"Parenthesis","tokens":"not(feature = \"std\")"}},"tokens":null},"tokens":null}},"id":21,"style":"Outer","span":{"lo":{"line":42,"col":0},"hi":{"line":42,"col":28},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":"Use","disambiguator":7}],"index":[0,12]},"span":{"lo":{"line":43,"col":80},"hi":{"line":43,"col":88},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"vis_span":{"lo":{"line":43,"col":80},"hi":{"line":43,"col":88},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"kind":{"Use":[{"span":{"lo":{"line":43,"col":80},"hi":{"line":43,"col":88},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"res":[{"Def":[{"DefKind":{"todo":"Struct"}},{"krate":"alloc","path":[{"data":{"TypeNs":"vec"},"disambiguator":0},{"data":{"TypeNs":"Vec"},"disambiguator":0}],"index":[4,6696]}]}],"segments":[{"ident":["alloc",{"lo":{"line":43,"col":8},"hi":{"line":43,"col":13},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}],"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":"Use","disambiguator":7}],"index":[0,12]},"local_id":1},"res":{"Def":[{"DefKind":{"todo":"Mod"}},{"krate":"alloc","path":[],"index":[4,0]}]},"args":null,"infer_args":false},{"ident":["vec",{"lo":{"line":43,"col":80},"hi":{"line":43,"col":83},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}],"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":"Use","disambiguator":7}],"index":[0,12]},"local_id":2},"res":{"Def":[{"DefKind":{"todo":"Mod"}},{"krate":"alloc","path":[{"data":{"TypeNs":"vec"},"disambiguator":0}],"index":[4,6116]}]},"args":null,"infer_args":false},{"ident":["Vec",{"lo":{"line":43,"col":85},"hi":{"line":43,"col":88},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}],"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":"Use","disambiguator":7}],"index":[0,12]},"local_id":3},"res":"Err","args":null,"infer_args":false}],"rename":"Vec"},"Single"]},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Re-export."]},"id":19,"style":"Outer","span":{"lo":{"line":40,"col":0},"hi":{"line":40,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"cfg","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:41:6: 41:7 (#0), close: concordium/src/concordium.rs:41:31: 41:32 (#0) }"}},"delim":"Parenthesis","tokens":"not(feature = \"hacspec\")"}},"tokens":null},"tokens":null}},"id":20,"style":"Outer","span":{"lo":{"line":41,"col":0},"hi":{"line":41,"col":32},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"cfg","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:42:6: 42:7 (#0), close: concordium/src/concordium.rs:42:27: 42:28 (#0) }"}},"delim":"Parenthesis","tokens":"not(feature = \"std\")"}},"tokens":null},"tokens":null}},"id":21,"style":"Outer","span":{"lo":{"line":42,"col":0},"hi":{"line":42,"col":28},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":"Use","disambiguator":8}],"index":[0,13]},"span":{"lo":{"line":47,"col":0},"hi":{"line":47,"col":59},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"vis_span":{"lo":{"line":47,"col":0},"hi":{"line":47,"col":59},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"kind":{"Use":[{"span":{"lo":{"line":47,"col":8},"hi":{"line":47,"col":58},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"res":[],"segments":[{"ident":["core",{"lo":{"line":47,"col":8},"hi":{"line":47,"col":12},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}],"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":"Use","disambiguator":8}],"index":[0,13]},"local_id":1},"res":{"Def":[{"DefKind":{"todo":"Mod"}},{"krate":"core","path":[],"index":[1,0]}]},"args":null,"infer_args":false}],"rename":null},"ListStem"]},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Re-export."]},"id":22,"style":"Outer","span":{"lo":{"line":44,"col":0},"hi":{"line":44,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"cfg","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:45:6: 45:7 (#0), close: concordium/src/concordium.rs:45:31: 45:32 (#0) }"}},"delim":"Parenthesis","tokens":"not(feature = \"hacspec\")"}},"tokens":null},"tokens":null}},"id":23,"style":"Outer","span":{"lo":{"line":45,"col":0},"hi":{"line":45,"col":32},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"cfg","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:46:6: 46:7 (#0), close: concordium/src/concordium.rs:46:27: 46:28 (#0) }"}},"delim":"Parenthesis","tokens":"not(feature = \"std\")"}},"tokens":null},"tokens":null}},"id":24,"style":"Outer","span":{"lo":{"line":46,"col":0},"hi":{"line":46,"col":28},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":"Use","disambiguator":9}],"index":[0,14]},"span":{"lo":{"line":47,"col":15},"hi":{"line":47,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"vis_span":{"lo":{"line":47,"col":15},"hi":{"line":47,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"kind":{"Use":[{"span":{"lo":{"line":47,"col":15},"hi":{"line":47,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"res":[{"Def":[{"DefKind":{"todo":"Mod"}},{"krate":"core","path":[{"data":{"TypeNs":"convert"},"disambiguator":0}],"index":[1,2455]}]}],"segments":[{"ident":["core",{"lo":{"line":47,"col":8},"hi":{"line":47,"col":12},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}],"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":"Use","disambiguator":9}],"index":[0,14]},"local_id":1},"res":{"Def":[{"DefKind":{"todo":"Mod"}},{"krate":"core","path":[],"index":[1,0]}]},"args":null,"infer_args":false},{"ident":["convert",{"lo":{"line":47,"col":15},"hi":{"line":47,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}],"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":"Use","disambiguator":9}],"index":[0,14]},"local_id":2},"res":"Err","args":null,"infer_args":false}],"rename":"convert"},"Single"]},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Re-export."]},"id":22,"style":"Outer","span":{"lo":{"line":44,"col":0},"hi":{"line":44,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"cfg","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:45:6: 45:7 (#0), close: concordium/src/concordium.rs:45:31: 45:32 (#0) }"}},"delim":"Parenthesis","tokens":"not(feature = \"hacspec\")"}},"tokens":null},"tokens":null}},"id":23,"style":"Outer","span":{"lo":{"line":45,"col":0},"hi":{"line":45,"col":32},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"cfg","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:46:6: 46:7 (#0), close: concordium/src/concordium.rs:46:27: 46:28 (#0) }"}},"delim":"Parenthesis","tokens":"not(feature = \"std\")"}},"tokens":null},"tokens":null}},"id":24,"style":"Outer","span":{"lo":{"line":46,"col":0},"hi":{"line":46,"col":28},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":"Use","disambiguator":10}],"index":[0,15]},"span":{"lo":{"line":47,"col":24},"hi":{"line":47,"col":28},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"vis_span":{"lo":{"line":47,"col":24},"hi":{"line":47,"col":28},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"kind":{"Use":[{"span":{"lo":{"line":47,"col":24},"hi":{"line":47,"col":28},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"res":[{"Def":[{"DefKind":{"todo":"Mod"}},{"krate":"core","path":[{"data":{"TypeNs":"hash"},"disambiguator":0}],"index":[1,9308]}]}],"segments":[{"ident":["core",{"lo":{"line":47,"col":8},"hi":{"line":47,"col":12},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}],"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":"Use","disambiguator":10}],"index":[0,15]},"local_id":1},"res":{"Def":[{"DefKind":{"todo":"Mod"}},{"krate":"core","path":[],"index":[1,0]}]},"args":null,"infer_args":false},{"ident":["hash",{"lo":{"line":47,"col":24},"hi":{"line":47,"col":28},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}],"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":"Use","disambiguator":10}],"index":[0,15]},"local_id":2},"res":"Err","args":null,"infer_args":false}],"rename":"hash"},"Single"]},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Re-export."]},"id":22,"style":"Outer","span":{"lo":{"line":44,"col":0},"hi":{"line":44,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"cfg","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:45:6: 45:7 (#0), close: concordium/src/concordium.rs:45:31: 45:32 (#0) }"}},"delim":"Parenthesis","tokens":"not(feature = \"hacspec\")"}},"tokens":null},"tokens":null}},"id":23,"style":"Outer","span":{"lo":{"line":45,"col":0},"hi":{"line":45,"col":32},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"cfg","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:46:6: 46:7 (#0), close: concordium/src/concordium.rs:46:27: 46:28 (#0) }"}},"delim":"Parenthesis","tokens":"not(feature = \"std\")"}},"tokens":null},"tokens":null}},"id":24,"style":"Outer","span":{"lo":{"line":46,"col":0},"hi":{"line":46,"col":28},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":"Use","disambiguator":11}],"index":[0,16]},"span":{"lo":{"line":47,"col":30},"hi":{"line":47,"col":36},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"vis_span":{"lo":{"line":47,"col":30},"hi":{"line":47,"col":36},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"kind":{"Use":[{"span":{"lo":{"line":47,"col":30},"hi":{"line":47,"col":36},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"res":[{"Def":[{"DefKind":{"todo":"Mod"}},{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0}],"index":[1,2675]}]}],"segments":[{"ident":["core",{"lo":{"line":47,"col":8},"hi":{"line":47,"col":12},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}],"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":"Use","disambiguator":11}],"index":[0,16]},"local_id":1},"res":{"Def":[{"DefKind":{"todo":"Mod"}},{"krate":"core","path":[],"index":[1,0]}]},"args":null,"infer_args":false},{"ident":["marker",{"lo":{"line":47,"col":30},"hi":{"line":47,"col":36},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}],"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":"Use","disambiguator":11}],"index":[0,16]},"local_id":2},"res":"Err","args":null,"infer_args":false}],"rename":"marker"},"Single"]},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Re-export."]},"id":22,"style":"Outer","span":{"lo":{"line":44,"col":0},"hi":{"line":44,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"cfg","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:45:6: 45:7 (#0), close: concordium/src/concordium.rs:45:31: 45:32 (#0) }"}},"delim":"Parenthesis","tokens":"not(feature = \"hacspec\")"}},"tokens":null},"tokens":null}},"id":23,"style":"Outer","span":{"lo":{"line":45,"col":0},"hi":{"line":45,"col":32},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"cfg","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:46:6: 46:7 (#0), close: concordium/src/concordium.rs:46:27: 46:28 (#0) }"}},"delim":"Parenthesis","tokens":"not(feature = \"std\")"}},"tokens":null},"tokens":null}},"id":24,"style":"Outer","span":{"lo":{"line":46,"col":0},"hi":{"line":46,"col":28},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":"Use","disambiguator":12}],"index":[0,17]},"span":{"lo":{"line":47,"col":38},"hi":{"line":47,"col":41},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"vis_span":{"lo":{"line":47,"col":38},"hi":{"line":47,"col":41},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"kind":{"Use":[{"span":{"lo":{"line":47,"col":38},"hi":{"line":47,"col":41},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"res":[{"Def":[{"DefKind":{"todo":"Mod"}},{"krate":"core","path":[{"data":{"TypeNs":"mem"},"disambiguator":0}],"index":[1,1467]}]}],"segments":[{"ident":["core",{"lo":{"line":47,"col":8},"hi":{"line":47,"col":12},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}],"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":"Use","disambiguator":12}],"index":[0,17]},"local_id":1},"res":{"Def":[{"DefKind":{"todo":"Mod"}},{"krate":"core","path":[],"index":[1,0]}]},"args":null,"infer_args":false},{"ident":["mem",{"lo":{"line":47,"col":38},"hi":{"line":47,"col":41},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}],"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":"Use","disambiguator":12}],"index":[0,17]},"local_id":2},"res":"Err","args":null,"infer_args":false}],"rename":"mem"},"Single"]},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Re-export."]},"id":22,"style":"Outer","span":{"lo":{"line":44,"col":0},"hi":{"line":44,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"cfg","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:45:6: 45:7 (#0), close: concordium/src/concordium.rs:45:31: 45:32 (#0) }"}},"delim":"Parenthesis","tokens":"not(feature = \"hacspec\")"}},"tokens":null},"tokens":null}},"id":23,"style":"Outer","span":{"lo":{"line":45,"col":0},"hi":{"line":45,"col":32},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"cfg","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:46:6: 46:7 (#0), close: concordium/src/concordium.rs:46:27: 46:28 (#0) }"}},"delim":"Parenthesis","tokens":"not(feature = \"std\")"}},"tokens":null},"tokens":null}},"id":24,"style":"Outer","span":{"lo":{"line":46,"col":0},"hi":{"line":46,"col":28},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":"Use","disambiguator":13}],"index":[0,18]},"span":{"lo":{"line":47,"col":43},"hi":{"line":47,"col":46},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"vis_span":{"lo":{"line":47,"col":43},"hi":{"line":47,"col":46},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"kind":{"Use":[{"span":{"lo":{"line":47,"col":43},"hi":{"line":47,"col":46},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"res":[{"Def":[{"DefKind":{"todo":"Mod"}},{"krate":"core","path":[{"data":{"TypeNs":"num"},"disambiguator":0}],"index":[1,294]}]}],"segments":[{"ident":["core",{"lo":{"line":47,"col":8},"hi":{"line":47,"col":12},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}],"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":"Use","disambiguator":13}],"index":[0,18]},"local_id":1},"res":{"Def":[{"DefKind":{"todo":"Mod"}},{"krate":"core","path":[],"index":[1,0]}]},"args":null,"infer_args":false},{"ident":["num",{"lo":{"line":47,"col":43},"hi":{"line":47,"col":46},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}],"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":"Use","disambiguator":13}],"index":[0,18]},"local_id":2},"res":"Err","args":null,"infer_args":false}],"rename":"num"},"Single"]},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Re-export."]},"id":22,"style":"Outer","span":{"lo":{"line":44,"col":0},"hi":{"line":44,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"cfg","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:45:6: 45:7 (#0), close: concordium/src/concordium.rs:45:31: 45:32 (#0) }"}},"delim":"Parenthesis","tokens":"not(feature = \"hacspec\")"}},"tokens":null},"tokens":null}},"id":23,"style":"Outer","span":{"lo":{"line":45,"col":0},"hi":{"line":45,"col":32},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"cfg","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:46:6: 46:7 (#0), close: concordium/src/concordium.rs:46:27: 46:28 (#0) }"}},"delim":"Parenthesis","tokens":"not(feature = \"std\")"}},"tokens":null},"tokens":null}},"id":24,"style":"Outer","span":{"lo":{"line":46,"col":0},"hi":{"line":46,"col":28},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":"Use","disambiguator":14}],"index":[0,19]},"span":{"lo":{"line":47,"col":48},"hi":{"line":47,"col":57},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"vis_span":{"lo":{"line":47,"col":48},"hi":{"line":47,"col":57},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"kind":{"Use":[{"span":{"lo":{"line":47,"col":48},"hi":{"line":47,"col":54},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"res":[{"Def":[{"DefKind":{"todo":"Mod"}},{"krate":"core","path":[{"data":{"TypeNs":"result"},"disambiguator":0}],"index":[1,8464]}]}],"segments":[{"ident":["core",{"lo":{"line":47,"col":8},"hi":{"line":47,"col":12},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}],"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":"Use","disambiguator":14}],"index":[0,19]},"local_id":1},"res":{"Def":[{"DefKind":{"todo":"Mod"}},{"krate":"core","path":[],"index":[1,0]}]},"args":null,"infer_args":false},{"ident":["result",{"lo":{"line":47,"col":48},"hi":{"line":47,"col":54},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}],"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":"Use","disambiguator":14}],"index":[0,19]},"local_id":2},"res":{"Def":[{"DefKind":{"todo":"Mod"}},{"krate":"core","path":[{"data":{"TypeNs":"result"},"disambiguator":0}],"index":[1,8464]}]},"args":null,"infer_args":false}],"rename":null},"Glob"]},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Re-export."]},"id":22,"style":"Outer","span":{"lo":{"line":44,"col":0},"hi":{"line":44,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"cfg","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:45:6: 45:7 (#0), close: concordium/src/concordium.rs:45:31: 45:32 (#0) }"}},"delim":"Parenthesis","tokens":"not(feature = \"hacspec\")"}},"tokens":null},"tokens":null}},"id":23,"style":"Outer","span":{"lo":{"line":45,"col":0},"hi":{"line":45,"col":32},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"cfg","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:46:6: 46:7 (#0), close: concordium/src/concordium.rs:46:27: 46:28 (#0) }"}},"delim":"Parenthesis","tokens":"not(feature = \"std\")"}},"tokens":null},"tokens":null}},"id":24,"style":"Outer","span":{"lo":{"line":46,"col":0},"hi":{"line":46,"col":28},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":"Use","disambiguator":15}],"index":[0,20]},"span":{"lo":{"line":51,"col":0},"hi":{"line":51,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"vis_span":{"lo":{"line":51,"col":0},"hi":{"line":51,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"kind":{"Use":[{"span":{"lo":{"line":51,"col":8},"hi":{"line":51,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"res":[{"Def":[{"DefKind":{"todo":"Mod"}},{"krate":"alloc","path":[{"data":{"TypeNs":"collections"},"disambiguator":0}],"index":[4,757]}]}],"segments":[{"ident":["alloc",{"lo":{"line":51,"col":8},"hi":{"line":51,"col":13},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}],"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":"Use","disambiguator":15}],"index":[0,20]},"local_id":1},"res":{"Def":[{"DefKind":{"todo":"Mod"}},{"krate":"alloc","path":[],"index":[4,0]}]},"args":null,"infer_args":false},{"ident":["collections",{"lo":{"line":51,"col":15},"hi":{"line":51,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}],"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":"Use","disambiguator":15}],"index":[0,20]},"local_id":2},"res":"Err","args":null,"infer_args":false}],"rename":"collections"},"Single"]},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"cfg","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:49:6: 49:7 (#0), close: concordium/src/concordium.rs:49:31: 49:32 (#0) }"}},"delim":"Parenthesis","tokens":"not(feature = \"hacspec\")"}},"tokens":null},"tokens":null}},"id":25,"style":"Outer","span":{"lo":{"line":49,"col":0},"hi":{"line":49,"col":32},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"cfg","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:50:6: 50:7 (#0), close: concordium/src/concordium.rs:50:27: 50:28 (#0) }"}},"delim":"Parenthesis","tokens":"not(feature = \"std\")"}},"tokens":null},"tokens":null}},"id":26,"style":"Outer","span":{"lo":{"line":50,"col":0},"hi":{"line":50,"col":28},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"constants"},"disambiguator":0}],"index":[0,21]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"constants"},"disambiguator":0}],"index":[0,21]},"span":{"lo":{"line":53,"col":0},"hi":{"line":53,"col":18},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"vis_span":{"lo":{"line":53,"col":0},"hi":{"line":53,"col":18},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"kind":{"Mod":[{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"constants"},"disambiguator":0},{"data":{"ValueNs":"MAX_CONTRACT_STATE_SIZE"},"disambiguator":0}],"index":[0,22]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"constants"},"disambiguator":0},{"data":{"ValueNs":"MAX_CONTRACT_STATE_SIZE"},"disambiguator":0}],"index":[0,22]},"span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":50},"filename":{"Real":{"LocalPath":"concordium/src/constants.rs"}}},"vis_span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":50},"filename":{"Real":{"LocalPath":"concordium/src/constants.rs"}}},"kind":{"Const":[{"Uint":"U32"},{"ty":{"Uint":"U32"},"span":{"lo":{"line":2,"col":41},"hi":{"line":2,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/constants.rs"}}},"contents":{"Literal":{"lit":{"node":{"Int":[16384,{"Unsigned":"U32"}]},"span":{"lo":{"line":2,"col":41},"hi":{"line":2,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/constants.rs"}}}},"neg":false}},"hir_id":[22,3],"attributes":[]}]},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Maximum size of the contract state in bytes."]},"id":41,"style":"Outer","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":48},"filename":{"Real":{"LocalPath":"concordium/src/constants.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"constants"},"disambiguator":0},{"data":{"ValueNs":"MAX_LOG_SIZE"},"disambiguator":0}],"index":[0,23]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"constants"},"disambiguator":0},{"data":{"ValueNs":"MAX_LOG_SIZE"},"disambiguator":0}],"index":[0,23]},"span":{"lo":{"line":5,"col":0},"hi":{"line":5,"col":41},"filename":{"Real":{"LocalPath":"concordium/src/constants.rs"}}},"vis_span":{"lo":{"line":5,"col":0},"hi":{"line":5,"col":41},"filename":{"Real":{"LocalPath":"concordium/src/constants.rs"}}},"kind":{"Const":[{"Uint":"Usize"},{"ty":{"Uint":"Usize"},"span":{"lo":{"line":5,"col":32},"hi":{"line":5,"col":40},"filename":{"Real":{"LocalPath":"concordium/src/constants.rs"}}},"contents":{"Literal":{"lit":{"node":{"Int":[512,{"Unsigned":"Usize"}]},"span":{"lo":{"line":5,"col":32},"hi":{"line":5,"col":40},"filename":{"Real":{"LocalPath":"concordium/src/constants.rs"}}}},"neg":false}},"hir_id":[23,3],"attributes":[]}]},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Maximum log size."]},"id":42,"style":"Outer","span":{"lo":{"line":4,"col":0},"hi":{"line":4,"col":21},"filename":{"Real":{"LocalPath":"concordium/src/constants.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"constants"},"disambiguator":0},{"data":{"ValueNs":"MAX_NUM_LOGS"},"disambiguator":0}],"index":[0,24]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"constants"},"disambiguator":0},{"data":{"ValueNs":"MAX_NUM_LOGS"},"disambiguator":0}],"index":[0,24]},"span":{"lo":{"line":8,"col":0},"hi":{"line":8,"col":40},"filename":{"Real":{"LocalPath":"concordium/src/constants.rs"}}},"vis_span":{"lo":{"line":8,"col":0},"hi":{"line":8,"col":40},"filename":{"Real":{"LocalPath":"concordium/src/constants.rs"}}},"kind":{"Const":[{"Uint":"Usize"},{"ty":{"Uint":"Usize"},"span":{"lo":{"line":8,"col":32},"hi":{"line":8,"col":39},"filename":{"Real":{"LocalPath":"concordium/src/constants.rs"}}},"contents":{"Literal":{"lit":{"node":{"Int":[64,{"Unsigned":"Usize"}]},"span":{"lo":{"line":8,"col":32},"hi":{"line":8,"col":39},"filename":{"Real":{"LocalPath":"concordium/src/constants.rs"}}}},"neg":false}},"hir_id":[24,3],"attributes":[]}]},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Maximum number of log items."]},"id":43,"style":"Outer","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":32},"filename":{"Real":{"LocalPath":"concordium/src/constants.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]}]},"attributes":{"attributes":[],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"constants"},"disambiguator":0},{"data":{"ValueNs":"MAX_CONTRACT_STATE_SIZE"},"disambiguator":0}],"index":[0,22]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"constants"},"disambiguator":0},{"data":{"ValueNs":"MAX_CONTRACT_STATE_SIZE"},"disambiguator":0}],"index":[0,22]},"span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":50},"filename":{"Real":{"LocalPath":"concordium/src/constants.rs"}}},"vis_span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":50},"filename":{"Real":{"LocalPath":"concordium/src/constants.rs"}}},"kind":{"Const":[{"Uint":"U32"},{"ty":{"Uint":"U32"},"span":{"lo":{"line":2,"col":41},"hi":{"line":2,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/constants.rs"}}},"contents":{"Literal":{"lit":{"node":{"Int":[16384,{"Unsigned":"U32"}]},"span":{"lo":{"line":2,"col":41},"hi":{"line":2,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/constants.rs"}}}},"neg":false}},"hir_id":[22,3],"attributes":[]}]},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Maximum size of the contract state in bytes."]},"id":41,"style":"Outer","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":48},"filename":{"Real":{"LocalPath":"concordium/src/constants.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"constants"},"disambiguator":0},{"data":{"ValueNs":"MAX_LOG_SIZE"},"disambiguator":0}],"index":[0,23]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"constants"},"disambiguator":0},{"data":{"ValueNs":"MAX_LOG_SIZE"},"disambiguator":0}],"index":[0,23]},"span":{"lo":{"line":5,"col":0},"hi":{"line":5,"col":41},"filename":{"Real":{"LocalPath":"concordium/src/constants.rs"}}},"vis_span":{"lo":{"line":5,"col":0},"hi":{"line":5,"col":41},"filename":{"Real":{"LocalPath":"concordium/src/constants.rs"}}},"kind":{"Const":[{"Uint":"Usize"},{"ty":{"Uint":"Usize"},"span":{"lo":{"line":5,"col":32},"hi":{"line":5,"col":40},"filename":{"Real":{"LocalPath":"concordium/src/constants.rs"}}},"contents":{"Literal":{"lit":{"node":{"Int":[512,{"Unsigned":"Usize"}]},"span":{"lo":{"line":5,"col":32},"hi":{"line":5,"col":40},"filename":{"Real":{"LocalPath":"concordium/src/constants.rs"}}}},"neg":false}},"hir_id":[23,3],"attributes":[]}]},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Maximum log size."]},"id":42,"style":"Outer","span":{"lo":{"line":4,"col":0},"hi":{"line":4,"col":21},"filename":{"Real":{"LocalPath":"concordium/src/constants.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"constants"},"disambiguator":0},{"data":{"ValueNs":"MAX_NUM_LOGS"},"disambiguator":0}],"index":[0,24]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"constants"},"disambiguator":0},{"data":{"ValueNs":"MAX_NUM_LOGS"},"disambiguator":0}],"index":[0,24]},"span":{"lo":{"line":8,"col":0},"hi":{"line":8,"col":40},"filename":{"Real":{"LocalPath":"concordium/src/constants.rs"}}},"vis_span":{"lo":{"line":8,"col":0},"hi":{"line":8,"col":40},"filename":{"Real":{"LocalPath":"concordium/src/constants.rs"}}},"kind":{"Const":[{"Uint":"Usize"},{"ty":{"Uint":"Usize"},"span":{"lo":{"line":8,"col":32},"hi":{"line":8,"col":39},"filename":{"Real":{"LocalPath":"concordium/src/constants.rs"}}},"contents":{"Literal":{"lit":{"node":{"Int":[64,{"Unsigned":"Usize"}]},"span":{"lo":{"line":8,"col":32},"hi":{"line":8,"col":39},"filename":{"Real":{"LocalPath":"concordium/src/constants.rs"}}}},"neg":false}},"hir_id":[24,3],"attributes":[]}]},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Maximum number of log items."]},"id":43,"style":"Outer","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":32},"filename":{"Real":{"LocalPath":"concordium/src/constants.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0}],"index":[0,25]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0}],"index":[0,25]},"span":{"lo":{"line":54,"col":0},"hi":{"line":54,"col":21},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"vis_span":{"lo":{"line":54,"col":0},"hi":{"line":54,"col":21},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"kind":{"Mod":[{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0},{"data":{"TypeNs":"hax_lib_macros"},"disambiguator":0}],"index":[0,168]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0},{"data":{"TypeNs":"hax_lib_macros"},"disambiguator":0}],"index":[0,168]},"span":{"lo":{"line":5,"col":0},"hi":{"line":5,"col":28},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"vis_span":{"lo":{"line":5,"col":0},"hi":{"line":5,"col":28},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"kind":{"ExternCrate":null},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"_hax::skip","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:4:1: 4:24 (#13), close: concordium/src/concordium_prims.rs:4:1: 4:24 (#13) }"}},"delim":"Parenthesis","tokens":""}},"tokens":null},"tokens":null}},"id":355,"style":"Outer","span":{"lo":{"line":4,"col":0},"hi":{"line":4,"col":23},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:1:11: 1:12 (#0), close: concordium/src/concordium_prims.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":44,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:2:17: 2:18 (#0), close: concordium/src/concordium_prims.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":45,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0},{"data":"Use","disambiguator":0}],"index":[0,169]},"span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"vis_span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"kind":{"Use":[{"span":{"lo":{"line":7,"col":4},"hi":{"line":7,"col":18},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"res":[{"Def":[{"DefKind":{"todo":"Mod"}},{"krate":"hax_lib_macros","path":[],"index":[9,0]}]}],"segments":[{"ident":["hax_lib_macros",{"lo":{"line":7,"col":4},"hi":{"line":7,"col":18},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}],"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0},{"data":"Use","disambiguator":0}],"index":[0,169]},"local_id":1},"res":{"Def":[{"DefKind":{"todo":"Mod"}},{"krate":"hax_lib_macros","path":[],"index":[9,0]}]},"args":null,"infer_args":false}],"rename":null},"Glob"]},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"_hax::skip","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:6:1: 6:24 (#16), close: concordium/src/concordium_prims.rs:6:1: 6:24 (#16) }"}},"delim":"Parenthesis","tokens":""}},"tokens":null},"tokens":null}},"id":357,"style":"Outer","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":23},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:1:11: 1:12 (#0), close: concordium/src/concordium_prims.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":44,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:2:17: 2:18 (#0), close: concordium/src/concordium_prims.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":45,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0},{"data":"Use","disambiguator":1}],"index":[0,241]},"span":{"lo":{"line":10,"col":0},"hi":{"line":10,"col":13},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"vis_span":{"lo":{"line":10,"col":0},"hi":{"line":10,"col":13},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"kind":{"Use":[{"span":{"lo":{"line":10,"col":4},"hi":{"line":10,"col":9},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"res":[{"Def":[{"DefKind":{"todo":"Mod"}},{"krate":"hacspec_concordium","path":[],"index":[0,0]}]}],"segments":[{"ident":["crate",{"lo":{"line":10,"col":4},"hi":{"line":10,"col":9},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}],"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0},{"data":"Use","disambiguator":1}],"index":[0,241]},"local_id":1},"res":"Err","args":null,"infer_args":false}],"rename":null},"Glob"]},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"_hax::skip","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:9:1: 9:8 (#55), close: concordium/src/concordium_prims.rs:9:1: 9:8 (#55) }"}},"delim":"Parenthesis","tokens":""}},"tokens":null},"tokens":null}},"id":448,"style":"Outer","span":{"lo":{"line":9,"col":0},"hi":{"line":9,"col":7},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:1:11: 1:12 (#0), close: concordium/src/concordium_prims.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":44,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:2:17: 2:18 (#0), close: concordium/src/concordium_prims.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":45,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0},{"data":"ForeignMod","disambiguator":0}],"index":[0,26]},"span":{"lo":{"line":12,"col":0},"hi":{"line":14,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"vis_span":{"lo":{"line":12,"col":0},"hi":{"line":14,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"kind":{"ForeignMod":{"abi":{"Abi":{"todo":"C { unwind: false }"}},"items":[{"ident":["accept",{"lo":{"line":13,"col":18},"hi":{"line":13,"col":24},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}],"kind":{"Fn":[{"inputs":[],"output":{"Return":{"Uint":"U32"}},"c_variadic":false,"implicit_self":"None","lifetime_elision_allowed":false},[],{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":13,"col":33},"hi":{"line":13,"col":33},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"span":{"lo":{"line":13,"col":24},"hi":{"line":13,"col":24},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}}]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0},{"data":"ForeignMod","disambiguator":0},{"data":{"ValueNs":"accept"},"disambiguator":0}],"index":[0,27]},"span":{"lo":{"line":13,"col":4},"hi":{"line":13,"col":34},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"vis_span":{"lo":{"line":13,"col":4},"hi":{"line":13,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}}]}},"attributes":{"attributes":[],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:1:11: 1:12 (#0), close: concordium/src/concordium_prims.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":44,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:2:17: 2:18 (#0), close: concordium/src/concordium_prims.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":45,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0},{"data":"ForeignMod","disambiguator":1}],"index":[0,28]},"span":{"lo":{"line":16,"col":0},"hi":{"line":19,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"vis_span":{"lo":{"line":16,"col":0},"hi":{"line":19,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"kind":{"ForeignMod":{"abi":{"Abi":{"todo":"C { unwind: false }"}},"items":[{"ident":["simple_transfer",{"lo":{"line":18,"col":16},"hi":{"line":18,"col":31},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}],"kind":{"Fn":[{"inputs":[{"RawPtr":{"ty":{"Uint":"U8"},"mutbl":false}},{"Uint":"U64"}],"output":{"Return":{"Uint":"U32"}},"c_variadic":false,"implicit_self":"None","lifetime_elision_allowed":false},[["addr_bytes",{"lo":{"line":18,"col":32},"hi":{"line":18,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}],["amount",{"lo":{"line":18,"col":55},"hi":{"line":18,"col":61},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}]],{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":18,"col":74},"hi":{"line":18,"col":74},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"span":{"lo":{"line":18,"col":31},"hi":{"line":18,"col":31},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}}]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0},{"data":"ForeignMod","disambiguator":1},{"data":{"ValueNs":"simple_transfer"},"disambiguator":0}],"index":[0,29]},"span":{"lo":{"line":18,"col":2},"hi":{"line":18,"col":75},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"vis_span":{"lo":{"line":18,"col":2},"hi":{"line":18,"col":12},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}}]}},"attributes":{"attributes":[],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:1:11: 1:12 (#0), close: concordium/src/concordium_prims.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":44,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:2:17: 2:18 (#0), close: concordium/src/concordium_prims.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":45,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0},{"data":"ForeignMod","disambiguator":2}],"index":[0,30]},"span":{"lo":{"line":21,"col":0},"hi":{"line":32,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"vis_span":{"lo":{"line":21,"col":0},"hi":{"line":32,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"kind":{"ForeignMod":{"abi":{"Abi":{"todo":"C { unwind: false }"}},"items":[{"ident":["send",{"lo":{"line":23,"col":16},"hi":{"line":23,"col":20},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}],"kind":{"Fn":[{"inputs":[{"Uint":"U64"},{"Uint":"U64"},{"RawPtr":{"ty":{"Uint":"U8"},"mutbl":false}},{"Uint":"U32"},{"Uint":"U64"},{"RawPtr":{"ty":{"Uint":"U8"},"mutbl":false}},{"Uint":"U32"}],"output":{"Return":{"Uint":"U32"}},"c_variadic":false,"implicit_self":"None","lifetime_elision_allowed":false},[["addr_index",{"lo":{"line":24,"col":6},"hi":{"line":24,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}],["addr_subindex",{"lo":{"line":25,"col":6},"hi":{"line":25,"col":19},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}],["receive_name",{"lo":{"line":26,"col":6},"hi":{"line":26,"col":18},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}],["receive_name_len",{"lo":{"line":27,"col":6},"hi":{"line":27,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}],["amount",{"lo":{"line":28,"col":6},"hi":{"line":28,"col":12},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}],["parameter",{"lo":{"line":29,"col":6},"hi":{"line":29,"col":15},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}],["parameter_len",{"lo":{"line":30,"col":6},"hi":{"line":30,"col":19},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}]],{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":31,"col":10},"hi":{"line":31,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"span":{"lo":{"line":23,"col":20},"hi":{"line":23,"col":20},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}}]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0},{"data":"ForeignMod","disambiguator":2},{"data":{"ValueNs":"send"},"disambiguator":0}],"index":[0,31]},"span":{"lo":{"line":23,"col":2},"hi":{"line":31,"col":11},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"vis_span":{"lo":{"line":23,"col":2},"hi":{"line":23,"col":12},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}}]}},"attributes":{"attributes":[],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:1:11: 1:12 (#0), close: concordium/src/concordium_prims.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":44,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:2:17: 2:18 (#0), close: concordium/src/concordium_prims.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":45,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0},{"data":"ForeignMod","disambiguator":3}],"index":[0,32]},"span":{"lo":{"line":34,"col":0},"hi":{"line":38,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"vis_span":{"lo":{"line":34,"col":0},"hi":{"line":38,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"kind":{"ForeignMod":{"abi":{"Abi":{"todo":"C { unwind: false }"}},"items":[{"ident":["combine_and",{"lo":{"line":37,"col":16},"hi":{"line":37,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}],"kind":{"Fn":[{"inputs":[{"Uint":"U32"},{"Uint":"U32"}],"output":{"Return":{"Uint":"U32"}},"c_variadic":false,"implicit_self":"None","lifetime_elision_allowed":false},[["l",{"lo":{"line":37,"col":28},"hi":{"line":37,"col":29},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}],["r",{"lo":{"line":37,"col":36},"hi":{"line":37,"col":37},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}]],{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":37,"col":50},"hi":{"line":37,"col":50},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"span":{"lo":{"line":37,"col":27},"hi":{"line":37,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}}]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0},{"data":"ForeignMod","disambiguator":3},{"data":{"ValueNs":"combine_and"},"disambiguator":0}],"index":[0,33]},"span":{"lo":{"line":37,"col":2},"hi":{"line":37,"col":51},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"vis_span":{"lo":{"line":37,"col":2},"hi":{"line":37,"col":12},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}}]}},"attributes":{"attributes":[],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:1:11: 1:12 (#0), close: concordium/src/concordium_prims.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":44,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:2:17: 2:18 (#0), close: concordium/src/concordium_prims.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":45,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0},{"data":"ForeignMod","disambiguator":4}],"index":[0,34]},"span":{"lo":{"line":40,"col":0},"hi":{"line":44,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"vis_span":{"lo":{"line":40,"col":0},"hi":{"line":44,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"kind":{"ForeignMod":{"abi":{"Abi":{"todo":"C { unwind: false }"}},"items":[{"ident":["combine_or",{"lo":{"line":43,"col":16},"hi":{"line":43,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}],"kind":{"Fn":[{"inputs":[{"Uint":"U32"},{"Uint":"U32"}],"output":{"Return":{"Uint":"U32"}},"c_variadic":false,"implicit_self":"None","lifetime_elision_allowed":false},[["l",{"lo":{"line":43,"col":27},"hi":{"line":43,"col":28},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}],["r",{"lo":{"line":43,"col":35},"hi":{"line":43,"col":36},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}]],{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":43,"col":49},"hi":{"line":43,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"span":{"lo":{"line":43,"col":26},"hi":{"line":43,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}}]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0},{"data":"ForeignMod","disambiguator":4},{"data":{"ValueNs":"combine_or"},"disambiguator":0}],"index":[0,35]},"span":{"lo":{"line":43,"col":2},"hi":{"line":43,"col":50},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"vis_span":{"lo":{"line":43,"col":2},"hi":{"line":43,"col":12},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}}]}},"attributes":{"attributes":[],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:1:11: 1:12 (#0), close: concordium/src/concordium_prims.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":44,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:2:17: 2:18 (#0), close: concordium/src/concordium_prims.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":45,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0},{"data":"ForeignMod","disambiguator":5}],"index":[0,36]},"span":{"lo":{"line":46,"col":0},"hi":{"line":49,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"vis_span":{"lo":{"line":46,"col":0},"hi":{"line":49,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"kind":{"ForeignMod":{"abi":{"Abi":{"todo":"C { unwind: false }"}},"items":[{"ident":["get_parameter_size",{"lo":{"line":48,"col":18},"hi":{"line":48,"col":36},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}],"kind":{"Fn":[{"inputs":[],"output":{"Return":{"Uint":"U32"}},"c_variadic":false,"implicit_self":"None","lifetime_elision_allowed":false},[],{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":48,"col":45},"hi":{"line":48,"col":45},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"span":{"lo":{"line":48,"col":36},"hi":{"line":48,"col":36},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}}]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0},{"data":"ForeignMod","disambiguator":5},{"data":{"ValueNs":"get_parameter_size"},"disambiguator":0}],"index":[0,37]},"span":{"lo":{"line":48,"col":4},"hi":{"line":48,"col":46},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"vis_span":{"lo":{"line":48,"col":4},"hi":{"line":48,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}}]}},"attributes":{"attributes":[],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:1:11: 1:12 (#0), close: concordium/src/concordium_prims.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":44,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:2:17: 2:18 (#0), close: concordium/src/concordium_prims.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":45,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0},{"data":"ForeignMod","disambiguator":6}],"index":[0,38]},"span":{"lo":{"line":51,"col":0},"hi":{"line":56,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"vis_span":{"lo":{"line":51,"col":0},"hi":{"line":56,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"kind":{"ForeignMod":{"abi":{"Abi":{"todo":"C { unwind: false }"}},"items":[{"ident":["get_parameter_section",{"lo":{"line":55,"col":18},"hi":{"line":55,"col":39},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}],"kind":{"Fn":[{"inputs":[{"RawPtr":{"ty":{"Uint":"U8"},"mutbl":true}},{"Uint":"U32"},{"Uint":"U32"}],"output":{"Return":{"Uint":"U32"}},"c_variadic":false,"implicit_self":"None","lifetime_elision_allowed":false},[["param_bytes",{"lo":{"line":55,"col":40},"hi":{"line":55,"col":51},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}],["length",{"lo":{"line":55,"col":62},"hi":{"line":55,"col":68},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}],["offset",{"lo":{"line":55,"col":75},"hi":{"line":55,"col":81},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}]],{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":55,"col":94},"hi":{"line":55,"col":94},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"span":{"lo":{"line":55,"col":39},"hi":{"line":55,"col":39},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}}]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0},{"data":"ForeignMod","disambiguator":6},{"data":{"ValueNs":"get_parameter_section"},"disambiguator":0}],"index":[0,39]},"span":{"lo":{"line":55,"col":4},"hi":{"line":55,"col":95},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"vis_span":{"lo":{"line":55,"col":4},"hi":{"line":55,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}}]}},"attributes":{"attributes":[],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:1:11: 1:12 (#0), close: concordium/src/concordium_prims.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":44,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:2:17: 2:18 (#0), close: concordium/src/concordium_prims.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":45,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0},{"data":"ForeignMod","disambiguator":7}],"index":[0,40]},"span":{"lo":{"line":58,"col":0},"hi":{"line":63,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"vis_span":{"lo":{"line":58,"col":0},"hi":{"line":63,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"kind":{"ForeignMod":{"abi":{"Abi":{"todo":"C { unwind: false }"}},"items":[{"ident":["get_policy_section",{"lo":{"line":62,"col":16},"hi":{"line":62,"col":34},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}],"kind":{"Fn":[{"inputs":[{"RawPtr":{"ty":{"Uint":"U8"},"mutbl":true}},{"Uint":"U32"},{"Uint":"U32"}],"output":{"Return":{"Uint":"U32"}},"c_variadic":false,"implicit_self":"None","lifetime_elision_allowed":false},[["policy_bytes",{"lo":{"line":62,"col":35},"hi":{"line":62,"col":47},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}],["length",{"lo":{"line":62,"col":58},"hi":{"line":62,"col":64},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}],["offset",{"lo":{"line":62,"col":71},"hi":{"line":62,"col":77},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}]],{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":62,"col":90},"hi":{"line":62,"col":90},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"span":{"lo":{"line":62,"col":34},"hi":{"line":62,"col":34},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}}]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0},{"data":"ForeignMod","disambiguator":7},{"data":{"ValueNs":"get_policy_section"},"disambiguator":0}],"index":[0,41]},"span":{"lo":{"line":62,"col":2},"hi":{"line":62,"col":91},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"vis_span":{"lo":{"line":62,"col":2},"hi":{"line":62,"col":12},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}}]}},"attributes":{"attributes":[],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:1:11: 1:12 (#0), close: concordium/src/concordium_prims.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":44,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:2:17: 2:18 (#0), close: concordium/src/concordium_prims.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":45,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0},{"data":"ForeignMod","disambiguator":8}],"index":[0,42]},"span":{"lo":{"line":65,"col":0},"hi":{"line":71,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"vis_span":{"lo":{"line":65,"col":0},"hi":{"line":71,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"kind":{"ForeignMod":{"abi":{"Abi":{"todo":"C { unwind: false }"}},"items":[{"ident":["log_event",{"lo":{"line":70,"col":18},"hi":{"line":70,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}],"kind":{"Fn":[{"inputs":[{"RawPtr":{"ty":{"Uint":"U8"},"mutbl":false}},{"Uint":"U32"}],"output":{"Return":{"Int":"I32"}},"c_variadic":false,"implicit_self":"None","lifetime_elision_allowed":false},[["start",{"lo":{"line":70,"col":28},"hi":{"line":70,"col":33},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}],["length",{"lo":{"line":70,"col":46},"hi":{"line":70,"col":52},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}]],{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":70,"col":65},"hi":{"line":70,"col":65},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"span":{"lo":{"line":70,"col":27},"hi":{"line":70,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}}]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0},{"data":"ForeignMod","disambiguator":8},{"data":{"ValueNs":"log_event"},"disambiguator":0}],"index":[0,43]},"span":{"lo":{"line":70,"col":4},"hi":{"line":70,"col":66},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"vis_span":{"lo":{"line":70,"col":4},"hi":{"line":70,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}}]}},"attributes":{"attributes":[],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:1:11: 1:12 (#0), close: concordium/src/concordium_prims.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":44,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:2:17: 2:18 (#0), close: concordium/src/concordium_prims.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":45,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0},{"data":"ForeignMod","disambiguator":9}],"index":[0,44]},"span":{"lo":{"line":73,"col":0},"hi":{"line":75,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"vis_span":{"lo":{"line":73,"col":0},"hi":{"line":75,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"kind":{"ForeignMod":{"abi":{"Abi":{"todo":"C { unwind: false }"}},"items":[{"ident":["load_state",{"lo":{"line":74,"col":18},"hi":{"line":74,"col":28},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}],"kind":{"Fn":[{"inputs":[{"RawPtr":{"ty":{"Uint":"U8"},"mutbl":true}},{"Uint":"U32"},{"Uint":"U32"}],"output":{"Return":{"Uint":"U32"}},"c_variadic":false,"implicit_self":"None","lifetime_elision_allowed":false},[["start",{"lo":{"line":74,"col":29},"hi":{"line":74,"col":34},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}],["length",{"lo":{"line":74,"col":45},"hi":{"line":74,"col":51},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}],["offset",{"lo":{"line":74,"col":58},"hi":{"line":74,"col":64},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}]],{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":74,"col":77},"hi":{"line":74,"col":77},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"span":{"lo":{"line":74,"col":28},"hi":{"line":74,"col":28},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}}]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0},{"data":"ForeignMod","disambiguator":9},{"data":{"ValueNs":"load_state"},"disambiguator":0}],"index":[0,45]},"span":{"lo":{"line":74,"col":4},"hi":{"line":74,"col":78},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"vis_span":{"lo":{"line":74,"col":4},"hi":{"line":74,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}}]}},"attributes":{"attributes":[],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:1:11: 1:12 (#0), close: concordium/src/concordium_prims.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":44,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:2:17: 2:18 (#0), close: concordium/src/concordium_prims.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":45,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0},{"data":"ForeignMod","disambiguator":10}],"index":[0,46]},"span":{"lo":{"line":77,"col":0},"hi":{"line":79,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"vis_span":{"lo":{"line":77,"col":0},"hi":{"line":79,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"kind":{"ForeignMod":{"abi":{"Abi":{"todo":"C { unwind: false }"}},"items":[{"ident":["write_state",{"lo":{"line":78,"col":18},"hi":{"line":78,"col":29},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}],"kind":{"Fn":[{"inputs":[{"RawPtr":{"ty":{"Uint":"U8"},"mutbl":true}},{"Uint":"U32"},{"Uint":"U32"}],"output":{"Return":{"Uint":"U32"}},"c_variadic":false,"implicit_self":"None","lifetime_elision_allowed":false},[["start",{"lo":{"line":78,"col":30},"hi":{"line":78,"col":35},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}],["length",{"lo":{"line":78,"col":46},"hi":{"line":78,"col":52},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}],["offset",{"lo":{"line":78,"col":59},"hi":{"line":78,"col":65},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}]],{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":78,"col":78},"hi":{"line":78,"col":78},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"span":{"lo":{"line":78,"col":29},"hi":{"line":78,"col":29},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}}]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0},{"data":"ForeignMod","disambiguator":10},{"data":{"ValueNs":"write_state"},"disambiguator":0}],"index":[0,47]},"span":{"lo":{"line":78,"col":4},"hi":{"line":78,"col":79},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"vis_span":{"lo":{"line":78,"col":4},"hi":{"line":78,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}}]}},"attributes":{"attributes":[],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:1:11: 1:12 (#0), close: concordium/src/concordium_prims.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":44,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:2:17: 2:18 (#0), close: concordium/src/concordium_prims.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":45,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0},{"data":"ForeignMod","disambiguator":11}],"index":[0,48]},"span":{"lo":{"line":81,"col":0},"hi":{"line":86,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"vis_span":{"lo":{"line":81,"col":0},"hi":{"line":86,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"kind":{"ForeignMod":{"abi":{"Abi":{"todo":"C { unwind: false }"}},"items":[{"ident":["resize_state",{"lo":{"line":84,"col":18},"hi":{"line":84,"col":30},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}],"kind":{"Fn":[{"inputs":[{"Uint":"U32"}],"output":{"Return":{"Uint":"U32"}},"c_variadic":false,"implicit_self":"None","lifetime_elision_allowed":false},[["new_size",{"lo":{"line":84,"col":31},"hi":{"line":84,"col":39},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}]],{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":84,"col":52},"hi":{"line":84,"col":52},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"span":{"lo":{"line":84,"col":30},"hi":{"line":84,"col":30},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}}]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0},{"data":"ForeignMod","disambiguator":11},{"data":{"ValueNs":"resize_state"},"disambiguator":0}],"index":[0,49]},"span":{"lo":{"line":84,"col":4},"hi":{"line":84,"col":53},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"vis_span":{"lo":{"line":84,"col":4},"hi":{"line":84,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}}]}},"attributes":{"attributes":[],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:1:11: 1:12 (#0), close: concordium/src/concordium_prims.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":44,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:2:17: 2:18 (#0), close: concordium/src/concordium_prims.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":45,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0},{"data":"ForeignMod","disambiguator":12}],"index":[0,50]},"span":{"lo":{"line":88,"col":0},"hi":{"line":90,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"vis_span":{"lo":{"line":88,"col":0},"hi":{"line":90,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"kind":{"ForeignMod":{"abi":{"Abi":{"todo":"C { unwind: false }"}},"items":[{"ident":["state_size",{"lo":{"line":89,"col":18},"hi":{"line":89,"col":28},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}],"kind":{"Fn":[{"inputs":[],"output":{"Return":{"Uint":"U32"}},"c_variadic":false,"implicit_self":"None","lifetime_elision_allowed":false},[],{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":89,"col":37},"hi":{"line":89,"col":37},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"span":{"lo":{"line":89,"col":28},"hi":{"line":89,"col":28},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}}]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0},{"data":"ForeignMod","disambiguator":12},{"data":{"ValueNs":"state_size"},"disambiguator":0}],"index":[0,51]},"span":{"lo":{"line":89,"col":4},"hi":{"line":89,"col":38},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"vis_span":{"lo":{"line":89,"col":4},"hi":{"line":89,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}}]}},"attributes":{"attributes":[],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:1:11: 1:12 (#0), close: concordium/src/concordium_prims.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":44,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:2:17: 2:18 (#0), close: concordium/src/concordium_prims.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":45,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0},{"data":"ForeignMod","disambiguator":13}],"index":[0,52]},"span":{"lo":{"line":92,"col":0},"hi":{"line":96,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"vis_span":{"lo":{"line":92,"col":0},"hi":{"line":96,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"kind":{"ForeignMod":{"abi":{"Abi":{"todo":"C { unwind: false }"}},"items":[{"ident":["get_init_origin",{"lo":{"line":95,"col":16},"hi":{"line":95,"col":31},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}],"kind":{"Fn":[{"inputs":[{"RawPtr":{"ty":{"Uint":"U8"},"mutbl":true}}],"output":{"DefaultReturn":{"lo":{"line":95,"col":47},"hi":{"line":95,"col":47},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},"c_variadic":false,"implicit_self":"None","lifetime_elision_allowed":false},[["start",{"lo":{"line":95,"col":32},"hi":{"line":95,"col":37},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}]],{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":95,"col":47},"hi":{"line":95,"col":47},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"span":{"lo":{"line":95,"col":31},"hi":{"line":95,"col":31},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}}]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0},{"data":"ForeignMod","disambiguator":13},{"data":{"ValueNs":"get_init_origin"},"disambiguator":0}],"index":[0,53]},"span":{"lo":{"line":95,"col":2},"hi":{"line":95,"col":48},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"vis_span":{"lo":{"line":95,"col":2},"hi":{"line":95,"col":12},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}}]}},"attributes":{"attributes":[],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:1:11: 1:12 (#0), close: concordium/src/concordium_prims.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":44,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:2:17: 2:18 (#0), close: concordium/src/concordium_prims.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":45,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0},{"data":"ForeignMod","disambiguator":14}],"index":[0,54]},"span":{"lo":{"line":98,"col":0},"hi":{"line":101,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"vis_span":{"lo":{"line":98,"col":0},"hi":{"line":101,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"kind":{"ForeignMod":{"abi":{"Abi":{"todo":"C { unwind: false }"}},"items":[{"ident":["get_receive_invoker",{"lo":{"line":100,"col":16},"hi":{"line":100,"col":35},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}],"kind":{"Fn":[{"inputs":[{"RawPtr":{"ty":{"Uint":"U8"},"mutbl":true}}],"output":{"DefaultReturn":{"lo":{"line":100,"col":51},"hi":{"line":100,"col":51},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},"c_variadic":false,"implicit_self":"None","lifetime_elision_allowed":false},[["start",{"lo":{"line":100,"col":36},"hi":{"line":100,"col":41},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}]],{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":100,"col":51},"hi":{"line":100,"col":51},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"span":{"lo":{"line":100,"col":35},"hi":{"line":100,"col":35},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}}]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0},{"data":"ForeignMod","disambiguator":14},{"data":{"ValueNs":"get_receive_invoker"},"disambiguator":0}],"index":[0,55]},"span":{"lo":{"line":100,"col":2},"hi":{"line":100,"col":52},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"vis_span":{"lo":{"line":100,"col":2},"hi":{"line":100,"col":12},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}}]}},"attributes":{"attributes":[],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:1:11: 1:12 (#0), close: concordium/src/concordium_prims.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":44,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:2:17: 2:18 (#0), close: concordium/src/concordium_prims.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":45,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0},{"data":"ForeignMod","disambiguator":15}],"index":[0,56]},"span":{"lo":{"line":103,"col":0},"hi":{"line":106,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"vis_span":{"lo":{"line":103,"col":0},"hi":{"line":106,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"kind":{"ForeignMod":{"abi":{"Abi":{"todo":"C { unwind: false }"}},"items":[{"ident":["get_receive_self_address",{"lo":{"line":105,"col":16},"hi":{"line":105,"col":40},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}],"kind":{"Fn":[{"inputs":[{"RawPtr":{"ty":{"Uint":"U8"},"mutbl":true}}],"output":{"DefaultReturn":{"lo":{"line":105,"col":56},"hi":{"line":105,"col":56},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},"c_variadic":false,"implicit_self":"None","lifetime_elision_allowed":false},[["start",{"lo":{"line":105,"col":41},"hi":{"line":105,"col":46},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}]],{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":105,"col":56},"hi":{"line":105,"col":56},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"span":{"lo":{"line":105,"col":40},"hi":{"line":105,"col":40},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}}]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0},{"data":"ForeignMod","disambiguator":15},{"data":{"ValueNs":"get_receive_self_address"},"disambiguator":0}],"index":[0,57]},"span":{"lo":{"line":105,"col":2},"hi":{"line":105,"col":57},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"vis_span":{"lo":{"line":105,"col":2},"hi":{"line":105,"col":12},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}}]}},"attributes":{"attributes":[],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:1:11: 1:12 (#0), close: concordium/src/concordium_prims.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":44,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:2:17: 2:18 (#0), close: concordium/src/concordium_prims.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":45,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0},{"data":"ForeignMod","disambiguator":16}],"index":[0,58]},"span":{"lo":{"line":108,"col":0},"hi":{"line":111,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"vis_span":{"lo":{"line":108,"col":0},"hi":{"line":111,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"kind":{"ForeignMod":{"abi":{"Abi":{"todo":"C { unwind: false }"}},"items":[{"ident":["get_receive_self_balance",{"lo":{"line":110,"col":16},"hi":{"line":110,"col":40},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}],"kind":{"Fn":[{"inputs":[],"output":{"Return":{"Uint":"U64"}},"c_variadic":false,"implicit_self":"None","lifetime_elision_allowed":false},[],{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":110,"col":49},"hi":{"line":110,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"span":{"lo":{"line":110,"col":40},"hi":{"line":110,"col":40},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}}]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0},{"data":"ForeignMod","disambiguator":16},{"data":{"ValueNs":"get_receive_self_balance"},"disambiguator":0}],"index":[0,59]},"span":{"lo":{"line":110,"col":2},"hi":{"line":110,"col":50},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"vis_span":{"lo":{"line":110,"col":2},"hi":{"line":110,"col":12},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}}]}},"attributes":{"attributes":[],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:1:11: 1:12 (#0), close: concordium/src/concordium_prims.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":44,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:2:17: 2:18 (#0), close: concordium/src/concordium_prims.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":45,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0},{"data":"ForeignMod","disambiguator":17}],"index":[0,60]},"span":{"lo":{"line":113,"col":0},"hi":{"line":116,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"vis_span":{"lo":{"line":113,"col":0},"hi":{"line":116,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"kind":{"ForeignMod":{"abi":{"Abi":{"todo":"C { unwind: false }"}},"items":[{"ident":["get_receive_sender",{"lo":{"line":115,"col":16},"hi":{"line":115,"col":34},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}],"kind":{"Fn":[{"inputs":[{"RawPtr":{"ty":{"Uint":"U8"},"mutbl":true}}],"output":{"DefaultReturn":{"lo":{"line":115,"col":50},"hi":{"line":115,"col":50},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},"c_variadic":false,"implicit_self":"None","lifetime_elision_allowed":false},[["start",{"lo":{"line":115,"col":35},"hi":{"line":115,"col":40},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}]],{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":115,"col":50},"hi":{"line":115,"col":50},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"span":{"lo":{"line":115,"col":34},"hi":{"line":115,"col":34},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}}]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0},{"data":"ForeignMod","disambiguator":17},{"data":{"ValueNs":"get_receive_sender"},"disambiguator":0}],"index":[0,61]},"span":{"lo":{"line":115,"col":2},"hi":{"line":115,"col":51},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"vis_span":{"lo":{"line":115,"col":2},"hi":{"line":115,"col":12},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}}]}},"attributes":{"attributes":[],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:1:11: 1:12 (#0), close: concordium/src/concordium_prims.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":44,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:2:17: 2:18 (#0), close: concordium/src/concordium_prims.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":45,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0},{"data":"ForeignMod","disambiguator":18}],"index":[0,62]},"span":{"lo":{"line":118,"col":0},"hi":{"line":122,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"vis_span":{"lo":{"line":118,"col":0},"hi":{"line":122,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"kind":{"ForeignMod":{"abi":{"Abi":{"todo":"C { unwind: false }"}},"items":[{"ident":["get_slot_time",{"lo":{"line":121,"col":16},"hi":{"line":121,"col":29},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}],"kind":{"Fn":[{"inputs":[],"output":{"Return":{"Uint":"U64"}},"c_variadic":false,"implicit_self":"None","lifetime_elision_allowed":false},[],{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":121,"col":38},"hi":{"line":121,"col":38},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"span":{"lo":{"line":121,"col":29},"hi":{"line":121,"col":29},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}}]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0},{"data":"ForeignMod","disambiguator":18},{"data":{"ValueNs":"get_slot_time"},"disambiguator":0}],"index":[0,63]},"span":{"lo":{"line":121,"col":2},"hi":{"line":121,"col":39},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"vis_span":{"lo":{"line":121,"col":2},"hi":{"line":121,"col":12},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}}]}},"attributes":{"attributes":[],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:1:11: 1:12 (#0), close: concordium/src/concordium_prims.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":44,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:2:17: 2:18 (#0), close: concordium/src/concordium_prims.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":45,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]}]},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:1:11: 1:12 (#0), close: concordium/src/concordium_prims.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":44,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:2:17: 2:18 (#0), close: concordium/src/concordium_prims.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":45,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0},{"data":{"TypeNs":"hax_lib_macros"},"disambiguator":0}],"index":[0,168]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0},{"data":{"TypeNs":"hax_lib_macros"},"disambiguator":0}],"index":[0,168]},"span":{"lo":{"line":5,"col":0},"hi":{"line":5,"col":28},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"vis_span":{"lo":{"line":5,"col":0},"hi":{"line":5,"col":28},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"kind":{"ExternCrate":null},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"_hax::skip","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:4:1: 4:24 (#13), close: concordium/src/concordium_prims.rs:4:1: 4:24 (#13) }"}},"delim":"Parenthesis","tokens":""}},"tokens":null},"tokens":null}},"id":355,"style":"Outer","span":{"lo":{"line":4,"col":0},"hi":{"line":4,"col":23},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:1:11: 1:12 (#0), close: concordium/src/concordium_prims.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":44,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:2:17: 2:18 (#0), close: concordium/src/concordium_prims.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":45,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0},{"data":"Use","disambiguator":0}],"index":[0,169]},"span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"vis_span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"kind":{"Use":[{"span":{"lo":{"line":7,"col":4},"hi":{"line":7,"col":18},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"res":[{"Def":[{"DefKind":{"todo":"Mod"}},{"krate":"hax_lib_macros","path":[],"index":[9,0]}]}],"segments":[{"ident":["hax_lib_macros",{"lo":{"line":7,"col":4},"hi":{"line":7,"col":18},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}],"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0},{"data":"Use","disambiguator":0}],"index":[0,169]},"local_id":1},"res":{"Def":[{"DefKind":{"todo":"Mod"}},{"krate":"hax_lib_macros","path":[],"index":[9,0]}]},"args":null,"infer_args":false}],"rename":null},"Glob"]},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"_hax::skip","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:6:1: 6:24 (#16), close: concordium/src/concordium_prims.rs:6:1: 6:24 (#16) }"}},"delim":"Parenthesis","tokens":""}},"tokens":null},"tokens":null}},"id":357,"style":"Outer","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":23},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:1:11: 1:12 (#0), close: concordium/src/concordium_prims.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":44,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:2:17: 2:18 (#0), close: concordium/src/concordium_prims.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":45,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0},{"data":"Use","disambiguator":1}],"index":[0,241]},"span":{"lo":{"line":10,"col":0},"hi":{"line":10,"col":13},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"vis_span":{"lo":{"line":10,"col":0},"hi":{"line":10,"col":13},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"kind":{"Use":[{"span":{"lo":{"line":10,"col":4},"hi":{"line":10,"col":9},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"res":[{"Def":[{"DefKind":{"todo":"Mod"}},{"krate":"hacspec_concordium","path":[],"index":[0,0]}]}],"segments":[{"ident":["crate",{"lo":{"line":10,"col":4},"hi":{"line":10,"col":9},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}],"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0},{"data":"Use","disambiguator":1}],"index":[0,241]},"local_id":1},"res":"Err","args":null,"infer_args":false}],"rename":null},"Glob"]},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"_hax::skip","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:9:1: 9:8 (#55), close: concordium/src/concordium_prims.rs:9:1: 9:8 (#55) }"}},"delim":"Parenthesis","tokens":""}},"tokens":null},"tokens":null}},"id":448,"style":"Outer","span":{"lo":{"line":9,"col":0},"hi":{"line":9,"col":7},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:1:11: 1:12 (#0), close: concordium/src/concordium_prims.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":44,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:2:17: 2:18 (#0), close: concordium/src/concordium_prims.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":45,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0},{"data":"ForeignMod","disambiguator":0}],"index":[0,26]},"span":{"lo":{"line":12,"col":0},"hi":{"line":14,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"vis_span":{"lo":{"line":12,"col":0},"hi":{"line":14,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"kind":{"ForeignMod":{"abi":{"Abi":{"todo":"C { unwind: false }"}},"items":[{"ident":["accept",{"lo":{"line":13,"col":18},"hi":{"line":13,"col":24},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}],"kind":{"Fn":[{"inputs":[],"output":{"Return":{"Uint":"U32"}},"c_variadic":false,"implicit_self":"None","lifetime_elision_allowed":false},[],{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":13,"col":33},"hi":{"line":13,"col":33},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"span":{"lo":{"line":13,"col":24},"hi":{"line":13,"col":24},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}}]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0},{"data":"ForeignMod","disambiguator":0},{"data":{"ValueNs":"accept"},"disambiguator":0}],"index":[0,27]},"span":{"lo":{"line":13,"col":4},"hi":{"line":13,"col":34},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"vis_span":{"lo":{"line":13,"col":4},"hi":{"line":13,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}}]}},"attributes":{"attributes":[],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:1:11: 1:12 (#0), close: concordium/src/concordium_prims.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":44,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:2:17: 2:18 (#0), close: concordium/src/concordium_prims.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":45,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0},{"data":"ForeignMod","disambiguator":1}],"index":[0,28]},"span":{"lo":{"line":16,"col":0},"hi":{"line":19,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"vis_span":{"lo":{"line":16,"col":0},"hi":{"line":19,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"kind":{"ForeignMod":{"abi":{"Abi":{"todo":"C { unwind: false }"}},"items":[{"ident":["simple_transfer",{"lo":{"line":18,"col":16},"hi":{"line":18,"col":31},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}],"kind":{"Fn":[{"inputs":[{"RawPtr":{"ty":{"Uint":"U8"},"mutbl":false}},{"Uint":"U64"}],"output":{"Return":{"Uint":"U32"}},"c_variadic":false,"implicit_self":"None","lifetime_elision_allowed":false},[["addr_bytes",{"lo":{"line":18,"col":32},"hi":{"line":18,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}],["amount",{"lo":{"line":18,"col":55},"hi":{"line":18,"col":61},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}]],{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":18,"col":74},"hi":{"line":18,"col":74},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"span":{"lo":{"line":18,"col":31},"hi":{"line":18,"col":31},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}}]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0},{"data":"ForeignMod","disambiguator":1},{"data":{"ValueNs":"simple_transfer"},"disambiguator":0}],"index":[0,29]},"span":{"lo":{"line":18,"col":2},"hi":{"line":18,"col":75},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"vis_span":{"lo":{"line":18,"col":2},"hi":{"line":18,"col":12},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}}]}},"attributes":{"attributes":[],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:1:11: 1:12 (#0), close: concordium/src/concordium_prims.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":44,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:2:17: 2:18 (#0), close: concordium/src/concordium_prims.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":45,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0},{"data":"ForeignMod","disambiguator":2}],"index":[0,30]},"span":{"lo":{"line":21,"col":0},"hi":{"line":32,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"vis_span":{"lo":{"line":21,"col":0},"hi":{"line":32,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"kind":{"ForeignMod":{"abi":{"Abi":{"todo":"C { unwind: false }"}},"items":[{"ident":["send",{"lo":{"line":23,"col":16},"hi":{"line":23,"col":20},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}],"kind":{"Fn":[{"inputs":[{"Uint":"U64"},{"Uint":"U64"},{"RawPtr":{"ty":{"Uint":"U8"},"mutbl":false}},{"Uint":"U32"},{"Uint":"U64"},{"RawPtr":{"ty":{"Uint":"U8"},"mutbl":false}},{"Uint":"U32"}],"output":{"Return":{"Uint":"U32"}},"c_variadic":false,"implicit_self":"None","lifetime_elision_allowed":false},[["addr_index",{"lo":{"line":24,"col":6},"hi":{"line":24,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}],["addr_subindex",{"lo":{"line":25,"col":6},"hi":{"line":25,"col":19},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}],["receive_name",{"lo":{"line":26,"col":6},"hi":{"line":26,"col":18},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}],["receive_name_len",{"lo":{"line":27,"col":6},"hi":{"line":27,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}],["amount",{"lo":{"line":28,"col":6},"hi":{"line":28,"col":12},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}],["parameter",{"lo":{"line":29,"col":6},"hi":{"line":29,"col":15},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}],["parameter_len",{"lo":{"line":30,"col":6},"hi":{"line":30,"col":19},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}]],{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":31,"col":10},"hi":{"line":31,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"span":{"lo":{"line":23,"col":20},"hi":{"line":23,"col":20},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}}]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0},{"data":"ForeignMod","disambiguator":2},{"data":{"ValueNs":"send"},"disambiguator":0}],"index":[0,31]},"span":{"lo":{"line":23,"col":2},"hi":{"line":31,"col":11},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"vis_span":{"lo":{"line":23,"col":2},"hi":{"line":23,"col":12},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}}]}},"attributes":{"attributes":[],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:1:11: 1:12 (#0), close: concordium/src/concordium_prims.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":44,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:2:17: 2:18 (#0), close: concordium/src/concordium_prims.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":45,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0},{"data":"ForeignMod","disambiguator":3}],"index":[0,32]},"span":{"lo":{"line":34,"col":0},"hi":{"line":38,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"vis_span":{"lo":{"line":34,"col":0},"hi":{"line":38,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"kind":{"ForeignMod":{"abi":{"Abi":{"todo":"C { unwind: false }"}},"items":[{"ident":["combine_and",{"lo":{"line":37,"col":16},"hi":{"line":37,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}],"kind":{"Fn":[{"inputs":[{"Uint":"U32"},{"Uint":"U32"}],"output":{"Return":{"Uint":"U32"}},"c_variadic":false,"implicit_self":"None","lifetime_elision_allowed":false},[["l",{"lo":{"line":37,"col":28},"hi":{"line":37,"col":29},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}],["r",{"lo":{"line":37,"col":36},"hi":{"line":37,"col":37},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}]],{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":37,"col":50},"hi":{"line":37,"col":50},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"span":{"lo":{"line":37,"col":27},"hi":{"line":37,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}}]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0},{"data":"ForeignMod","disambiguator":3},{"data":{"ValueNs":"combine_and"},"disambiguator":0}],"index":[0,33]},"span":{"lo":{"line":37,"col":2},"hi":{"line":37,"col":51},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"vis_span":{"lo":{"line":37,"col":2},"hi":{"line":37,"col":12},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}}]}},"attributes":{"attributes":[],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:1:11: 1:12 (#0), close: concordium/src/concordium_prims.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":44,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:2:17: 2:18 (#0), close: concordium/src/concordium_prims.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":45,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0},{"data":"ForeignMod","disambiguator":4}],"index":[0,34]},"span":{"lo":{"line":40,"col":0},"hi":{"line":44,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"vis_span":{"lo":{"line":40,"col":0},"hi":{"line":44,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"kind":{"ForeignMod":{"abi":{"Abi":{"todo":"C { unwind: false }"}},"items":[{"ident":["combine_or",{"lo":{"line":43,"col":16},"hi":{"line":43,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}],"kind":{"Fn":[{"inputs":[{"Uint":"U32"},{"Uint":"U32"}],"output":{"Return":{"Uint":"U32"}},"c_variadic":false,"implicit_self":"None","lifetime_elision_allowed":false},[["l",{"lo":{"line":43,"col":27},"hi":{"line":43,"col":28},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}],["r",{"lo":{"line":43,"col":35},"hi":{"line":43,"col":36},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}]],{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":43,"col":49},"hi":{"line":43,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"span":{"lo":{"line":43,"col":26},"hi":{"line":43,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}}]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0},{"data":"ForeignMod","disambiguator":4},{"data":{"ValueNs":"combine_or"},"disambiguator":0}],"index":[0,35]},"span":{"lo":{"line":43,"col":2},"hi":{"line":43,"col":50},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"vis_span":{"lo":{"line":43,"col":2},"hi":{"line":43,"col":12},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}}]}},"attributes":{"attributes":[],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:1:11: 1:12 (#0), close: concordium/src/concordium_prims.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":44,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:2:17: 2:18 (#0), close: concordium/src/concordium_prims.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":45,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0},{"data":"ForeignMod","disambiguator":5}],"index":[0,36]},"span":{"lo":{"line":46,"col":0},"hi":{"line":49,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"vis_span":{"lo":{"line":46,"col":0},"hi":{"line":49,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"kind":{"ForeignMod":{"abi":{"Abi":{"todo":"C { unwind: false }"}},"items":[{"ident":["get_parameter_size",{"lo":{"line":48,"col":18},"hi":{"line":48,"col":36},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}],"kind":{"Fn":[{"inputs":[],"output":{"Return":{"Uint":"U32"}},"c_variadic":false,"implicit_self":"None","lifetime_elision_allowed":false},[],{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":48,"col":45},"hi":{"line":48,"col":45},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"span":{"lo":{"line":48,"col":36},"hi":{"line":48,"col":36},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}}]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0},{"data":"ForeignMod","disambiguator":5},{"data":{"ValueNs":"get_parameter_size"},"disambiguator":0}],"index":[0,37]},"span":{"lo":{"line":48,"col":4},"hi":{"line":48,"col":46},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"vis_span":{"lo":{"line":48,"col":4},"hi":{"line":48,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}}]}},"attributes":{"attributes":[],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:1:11: 1:12 (#0), close: concordium/src/concordium_prims.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":44,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:2:17: 2:18 (#0), close: concordium/src/concordium_prims.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":45,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0},{"data":"ForeignMod","disambiguator":6}],"index":[0,38]},"span":{"lo":{"line":51,"col":0},"hi":{"line":56,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"vis_span":{"lo":{"line":51,"col":0},"hi":{"line":56,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"kind":{"ForeignMod":{"abi":{"Abi":{"todo":"C { unwind: false }"}},"items":[{"ident":["get_parameter_section",{"lo":{"line":55,"col":18},"hi":{"line":55,"col":39},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}],"kind":{"Fn":[{"inputs":[{"RawPtr":{"ty":{"Uint":"U8"},"mutbl":true}},{"Uint":"U32"},{"Uint":"U32"}],"output":{"Return":{"Uint":"U32"}},"c_variadic":false,"implicit_self":"None","lifetime_elision_allowed":false},[["param_bytes",{"lo":{"line":55,"col":40},"hi":{"line":55,"col":51},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}],["length",{"lo":{"line":55,"col":62},"hi":{"line":55,"col":68},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}],["offset",{"lo":{"line":55,"col":75},"hi":{"line":55,"col":81},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}]],{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":55,"col":94},"hi":{"line":55,"col":94},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"span":{"lo":{"line":55,"col":39},"hi":{"line":55,"col":39},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}}]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0},{"data":"ForeignMod","disambiguator":6},{"data":{"ValueNs":"get_parameter_section"},"disambiguator":0}],"index":[0,39]},"span":{"lo":{"line":55,"col":4},"hi":{"line":55,"col":95},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"vis_span":{"lo":{"line":55,"col":4},"hi":{"line":55,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}}]}},"attributes":{"attributes":[],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:1:11: 1:12 (#0), close: concordium/src/concordium_prims.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":44,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:2:17: 2:18 (#0), close: concordium/src/concordium_prims.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":45,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0},{"data":"ForeignMod","disambiguator":7}],"index":[0,40]},"span":{"lo":{"line":58,"col":0},"hi":{"line":63,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"vis_span":{"lo":{"line":58,"col":0},"hi":{"line":63,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"kind":{"ForeignMod":{"abi":{"Abi":{"todo":"C { unwind: false }"}},"items":[{"ident":["get_policy_section",{"lo":{"line":62,"col":16},"hi":{"line":62,"col":34},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}],"kind":{"Fn":[{"inputs":[{"RawPtr":{"ty":{"Uint":"U8"},"mutbl":true}},{"Uint":"U32"},{"Uint":"U32"}],"output":{"Return":{"Uint":"U32"}},"c_variadic":false,"implicit_self":"None","lifetime_elision_allowed":false},[["policy_bytes",{"lo":{"line":62,"col":35},"hi":{"line":62,"col":47},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}],["length",{"lo":{"line":62,"col":58},"hi":{"line":62,"col":64},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}],["offset",{"lo":{"line":62,"col":71},"hi":{"line":62,"col":77},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}]],{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":62,"col":90},"hi":{"line":62,"col":90},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"span":{"lo":{"line":62,"col":34},"hi":{"line":62,"col":34},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}}]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0},{"data":"ForeignMod","disambiguator":7},{"data":{"ValueNs":"get_policy_section"},"disambiguator":0}],"index":[0,41]},"span":{"lo":{"line":62,"col":2},"hi":{"line":62,"col":91},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"vis_span":{"lo":{"line":62,"col":2},"hi":{"line":62,"col":12},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}}]}},"attributes":{"attributes":[],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:1:11: 1:12 (#0), close: concordium/src/concordium_prims.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":44,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:2:17: 2:18 (#0), close: concordium/src/concordium_prims.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":45,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0},{"data":"ForeignMod","disambiguator":8}],"index":[0,42]},"span":{"lo":{"line":65,"col":0},"hi":{"line":71,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"vis_span":{"lo":{"line":65,"col":0},"hi":{"line":71,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"kind":{"ForeignMod":{"abi":{"Abi":{"todo":"C { unwind: false }"}},"items":[{"ident":["log_event",{"lo":{"line":70,"col":18},"hi":{"line":70,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}],"kind":{"Fn":[{"inputs":[{"RawPtr":{"ty":{"Uint":"U8"},"mutbl":false}},{"Uint":"U32"}],"output":{"Return":{"Int":"I32"}},"c_variadic":false,"implicit_self":"None","lifetime_elision_allowed":false},[["start",{"lo":{"line":70,"col":28},"hi":{"line":70,"col":33},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}],["length",{"lo":{"line":70,"col":46},"hi":{"line":70,"col":52},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}]],{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":70,"col":65},"hi":{"line":70,"col":65},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"span":{"lo":{"line":70,"col":27},"hi":{"line":70,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}}]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0},{"data":"ForeignMod","disambiguator":8},{"data":{"ValueNs":"log_event"},"disambiguator":0}],"index":[0,43]},"span":{"lo":{"line":70,"col":4},"hi":{"line":70,"col":66},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"vis_span":{"lo":{"line":70,"col":4},"hi":{"line":70,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}}]}},"attributes":{"attributes":[],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:1:11: 1:12 (#0), close: concordium/src/concordium_prims.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":44,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:2:17: 2:18 (#0), close: concordium/src/concordium_prims.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":45,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0},{"data":"ForeignMod","disambiguator":9}],"index":[0,44]},"span":{"lo":{"line":73,"col":0},"hi":{"line":75,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"vis_span":{"lo":{"line":73,"col":0},"hi":{"line":75,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"kind":{"ForeignMod":{"abi":{"Abi":{"todo":"C { unwind: false }"}},"items":[{"ident":["load_state",{"lo":{"line":74,"col":18},"hi":{"line":74,"col":28},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}],"kind":{"Fn":[{"inputs":[{"RawPtr":{"ty":{"Uint":"U8"},"mutbl":true}},{"Uint":"U32"},{"Uint":"U32"}],"output":{"Return":{"Uint":"U32"}},"c_variadic":false,"implicit_self":"None","lifetime_elision_allowed":false},[["start",{"lo":{"line":74,"col":29},"hi":{"line":74,"col":34},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}],["length",{"lo":{"line":74,"col":45},"hi":{"line":74,"col":51},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}],["offset",{"lo":{"line":74,"col":58},"hi":{"line":74,"col":64},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}]],{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":74,"col":77},"hi":{"line":74,"col":77},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"span":{"lo":{"line":74,"col":28},"hi":{"line":74,"col":28},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}}]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0},{"data":"ForeignMod","disambiguator":9},{"data":{"ValueNs":"load_state"},"disambiguator":0}],"index":[0,45]},"span":{"lo":{"line":74,"col":4},"hi":{"line":74,"col":78},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"vis_span":{"lo":{"line":74,"col":4},"hi":{"line":74,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}}]}},"attributes":{"attributes":[],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:1:11: 1:12 (#0), close: concordium/src/concordium_prims.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":44,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:2:17: 2:18 (#0), close: concordium/src/concordium_prims.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":45,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0},{"data":"ForeignMod","disambiguator":10}],"index":[0,46]},"span":{"lo":{"line":77,"col":0},"hi":{"line":79,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"vis_span":{"lo":{"line":77,"col":0},"hi":{"line":79,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"kind":{"ForeignMod":{"abi":{"Abi":{"todo":"C { unwind: false }"}},"items":[{"ident":["write_state",{"lo":{"line":78,"col":18},"hi":{"line":78,"col":29},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}],"kind":{"Fn":[{"inputs":[{"RawPtr":{"ty":{"Uint":"U8"},"mutbl":true}},{"Uint":"U32"},{"Uint":"U32"}],"output":{"Return":{"Uint":"U32"}},"c_variadic":false,"implicit_self":"None","lifetime_elision_allowed":false},[["start",{"lo":{"line":78,"col":30},"hi":{"line":78,"col":35},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}],["length",{"lo":{"line":78,"col":46},"hi":{"line":78,"col":52},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}],["offset",{"lo":{"line":78,"col":59},"hi":{"line":78,"col":65},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}]],{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":78,"col":78},"hi":{"line":78,"col":78},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"span":{"lo":{"line":78,"col":29},"hi":{"line":78,"col":29},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}}]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0},{"data":"ForeignMod","disambiguator":10},{"data":{"ValueNs":"write_state"},"disambiguator":0}],"index":[0,47]},"span":{"lo":{"line":78,"col":4},"hi":{"line":78,"col":79},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"vis_span":{"lo":{"line":78,"col":4},"hi":{"line":78,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}}]}},"attributes":{"attributes":[],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:1:11: 1:12 (#0), close: concordium/src/concordium_prims.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":44,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:2:17: 2:18 (#0), close: concordium/src/concordium_prims.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":45,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0},{"data":"ForeignMod","disambiguator":11}],"index":[0,48]},"span":{"lo":{"line":81,"col":0},"hi":{"line":86,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"vis_span":{"lo":{"line":81,"col":0},"hi":{"line":86,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"kind":{"ForeignMod":{"abi":{"Abi":{"todo":"C { unwind: false }"}},"items":[{"ident":["resize_state",{"lo":{"line":84,"col":18},"hi":{"line":84,"col":30},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}],"kind":{"Fn":[{"inputs":[{"Uint":"U32"}],"output":{"Return":{"Uint":"U32"}},"c_variadic":false,"implicit_self":"None","lifetime_elision_allowed":false},[["new_size",{"lo":{"line":84,"col":31},"hi":{"line":84,"col":39},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}]],{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":84,"col":52},"hi":{"line":84,"col":52},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"span":{"lo":{"line":84,"col":30},"hi":{"line":84,"col":30},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}}]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0},{"data":"ForeignMod","disambiguator":11},{"data":{"ValueNs":"resize_state"},"disambiguator":0}],"index":[0,49]},"span":{"lo":{"line":84,"col":4},"hi":{"line":84,"col":53},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"vis_span":{"lo":{"line":84,"col":4},"hi":{"line":84,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}}]}},"attributes":{"attributes":[],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:1:11: 1:12 (#0), close: concordium/src/concordium_prims.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":44,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:2:17: 2:18 (#0), close: concordium/src/concordium_prims.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":45,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0},{"data":"ForeignMod","disambiguator":12}],"index":[0,50]},"span":{"lo":{"line":88,"col":0},"hi":{"line":90,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"vis_span":{"lo":{"line":88,"col":0},"hi":{"line":90,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"kind":{"ForeignMod":{"abi":{"Abi":{"todo":"C { unwind: false }"}},"items":[{"ident":["state_size",{"lo":{"line":89,"col":18},"hi":{"line":89,"col":28},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}],"kind":{"Fn":[{"inputs":[],"output":{"Return":{"Uint":"U32"}},"c_variadic":false,"implicit_self":"None","lifetime_elision_allowed":false},[],{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":89,"col":37},"hi":{"line":89,"col":37},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"span":{"lo":{"line":89,"col":28},"hi":{"line":89,"col":28},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}}]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0},{"data":"ForeignMod","disambiguator":12},{"data":{"ValueNs":"state_size"},"disambiguator":0}],"index":[0,51]},"span":{"lo":{"line":89,"col":4},"hi":{"line":89,"col":38},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"vis_span":{"lo":{"line":89,"col":4},"hi":{"line":89,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}}]}},"attributes":{"attributes":[],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:1:11: 1:12 (#0), close: concordium/src/concordium_prims.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":44,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:2:17: 2:18 (#0), close: concordium/src/concordium_prims.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":45,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0},{"data":"ForeignMod","disambiguator":13}],"index":[0,52]},"span":{"lo":{"line":92,"col":0},"hi":{"line":96,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"vis_span":{"lo":{"line":92,"col":0},"hi":{"line":96,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"kind":{"ForeignMod":{"abi":{"Abi":{"todo":"C { unwind: false }"}},"items":[{"ident":["get_init_origin",{"lo":{"line":95,"col":16},"hi":{"line":95,"col":31},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}],"kind":{"Fn":[{"inputs":[{"RawPtr":{"ty":{"Uint":"U8"},"mutbl":true}}],"output":{"DefaultReturn":{"lo":{"line":95,"col":47},"hi":{"line":95,"col":47},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},"c_variadic":false,"implicit_self":"None","lifetime_elision_allowed":false},[["start",{"lo":{"line":95,"col":32},"hi":{"line":95,"col":37},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}]],{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":95,"col":47},"hi":{"line":95,"col":47},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"span":{"lo":{"line":95,"col":31},"hi":{"line":95,"col":31},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}}]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0},{"data":"ForeignMod","disambiguator":13},{"data":{"ValueNs":"get_init_origin"},"disambiguator":0}],"index":[0,53]},"span":{"lo":{"line":95,"col":2},"hi":{"line":95,"col":48},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"vis_span":{"lo":{"line":95,"col":2},"hi":{"line":95,"col":12},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}}]}},"attributes":{"attributes":[],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:1:11: 1:12 (#0), close: concordium/src/concordium_prims.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":44,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:2:17: 2:18 (#0), close: concordium/src/concordium_prims.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":45,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0},{"data":"ForeignMod","disambiguator":14}],"index":[0,54]},"span":{"lo":{"line":98,"col":0},"hi":{"line":101,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"vis_span":{"lo":{"line":98,"col":0},"hi":{"line":101,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"kind":{"ForeignMod":{"abi":{"Abi":{"todo":"C { unwind: false }"}},"items":[{"ident":["get_receive_invoker",{"lo":{"line":100,"col":16},"hi":{"line":100,"col":35},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}],"kind":{"Fn":[{"inputs":[{"RawPtr":{"ty":{"Uint":"U8"},"mutbl":true}}],"output":{"DefaultReturn":{"lo":{"line":100,"col":51},"hi":{"line":100,"col":51},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},"c_variadic":false,"implicit_self":"None","lifetime_elision_allowed":false},[["start",{"lo":{"line":100,"col":36},"hi":{"line":100,"col":41},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}]],{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":100,"col":51},"hi":{"line":100,"col":51},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"span":{"lo":{"line":100,"col":35},"hi":{"line":100,"col":35},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}}]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0},{"data":"ForeignMod","disambiguator":14},{"data":{"ValueNs":"get_receive_invoker"},"disambiguator":0}],"index":[0,55]},"span":{"lo":{"line":100,"col":2},"hi":{"line":100,"col":52},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"vis_span":{"lo":{"line":100,"col":2},"hi":{"line":100,"col":12},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}}]}},"attributes":{"attributes":[],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:1:11: 1:12 (#0), close: concordium/src/concordium_prims.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":44,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:2:17: 2:18 (#0), close: concordium/src/concordium_prims.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":45,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0},{"data":"ForeignMod","disambiguator":15}],"index":[0,56]},"span":{"lo":{"line":103,"col":0},"hi":{"line":106,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"vis_span":{"lo":{"line":103,"col":0},"hi":{"line":106,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"kind":{"ForeignMod":{"abi":{"Abi":{"todo":"C { unwind: false }"}},"items":[{"ident":["get_receive_self_address",{"lo":{"line":105,"col":16},"hi":{"line":105,"col":40},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}],"kind":{"Fn":[{"inputs":[{"RawPtr":{"ty":{"Uint":"U8"},"mutbl":true}}],"output":{"DefaultReturn":{"lo":{"line":105,"col":56},"hi":{"line":105,"col":56},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},"c_variadic":false,"implicit_self":"None","lifetime_elision_allowed":false},[["start",{"lo":{"line":105,"col":41},"hi":{"line":105,"col":46},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}]],{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":105,"col":56},"hi":{"line":105,"col":56},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"span":{"lo":{"line":105,"col":40},"hi":{"line":105,"col":40},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}}]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0},{"data":"ForeignMod","disambiguator":15},{"data":{"ValueNs":"get_receive_self_address"},"disambiguator":0}],"index":[0,57]},"span":{"lo":{"line":105,"col":2},"hi":{"line":105,"col":57},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"vis_span":{"lo":{"line":105,"col":2},"hi":{"line":105,"col":12},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}}]}},"attributes":{"attributes":[],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:1:11: 1:12 (#0), close: concordium/src/concordium_prims.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":44,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:2:17: 2:18 (#0), close: concordium/src/concordium_prims.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":45,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0},{"data":"ForeignMod","disambiguator":16}],"index":[0,58]},"span":{"lo":{"line":108,"col":0},"hi":{"line":111,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"vis_span":{"lo":{"line":108,"col":0},"hi":{"line":111,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"kind":{"ForeignMod":{"abi":{"Abi":{"todo":"C { unwind: false }"}},"items":[{"ident":["get_receive_self_balance",{"lo":{"line":110,"col":16},"hi":{"line":110,"col":40},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}],"kind":{"Fn":[{"inputs":[],"output":{"Return":{"Uint":"U64"}},"c_variadic":false,"implicit_self":"None","lifetime_elision_allowed":false},[],{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":110,"col":49},"hi":{"line":110,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"span":{"lo":{"line":110,"col":40},"hi":{"line":110,"col":40},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}}]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0},{"data":"ForeignMod","disambiguator":16},{"data":{"ValueNs":"get_receive_self_balance"},"disambiguator":0}],"index":[0,59]},"span":{"lo":{"line":110,"col":2},"hi":{"line":110,"col":50},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"vis_span":{"lo":{"line":110,"col":2},"hi":{"line":110,"col":12},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}}]}},"attributes":{"attributes":[],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:1:11: 1:12 (#0), close: concordium/src/concordium_prims.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":44,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:2:17: 2:18 (#0), close: concordium/src/concordium_prims.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":45,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0},{"data":"ForeignMod","disambiguator":17}],"index":[0,60]},"span":{"lo":{"line":113,"col":0},"hi":{"line":116,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"vis_span":{"lo":{"line":113,"col":0},"hi":{"line":116,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"kind":{"ForeignMod":{"abi":{"Abi":{"todo":"C { unwind: false }"}},"items":[{"ident":["get_receive_sender",{"lo":{"line":115,"col":16},"hi":{"line":115,"col":34},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}],"kind":{"Fn":[{"inputs":[{"RawPtr":{"ty":{"Uint":"U8"},"mutbl":true}}],"output":{"DefaultReturn":{"lo":{"line":115,"col":50},"hi":{"line":115,"col":50},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},"c_variadic":false,"implicit_self":"None","lifetime_elision_allowed":false},[["start",{"lo":{"line":115,"col":35},"hi":{"line":115,"col":40},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}]],{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":115,"col":50},"hi":{"line":115,"col":50},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"span":{"lo":{"line":115,"col":34},"hi":{"line":115,"col":34},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}}]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0},{"data":"ForeignMod","disambiguator":17},{"data":{"ValueNs":"get_receive_sender"},"disambiguator":0}],"index":[0,61]},"span":{"lo":{"line":115,"col":2},"hi":{"line":115,"col":51},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"vis_span":{"lo":{"line":115,"col":2},"hi":{"line":115,"col":12},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}}]}},"attributes":{"attributes":[],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:1:11: 1:12 (#0), close: concordium/src/concordium_prims.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":44,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:2:17: 2:18 (#0), close: concordium/src/concordium_prims.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":45,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0},{"data":"ForeignMod","disambiguator":18}],"index":[0,62]},"span":{"lo":{"line":118,"col":0},"hi":{"line":122,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"vis_span":{"lo":{"line":118,"col":0},"hi":{"line":122,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"kind":{"ForeignMod":{"abi":{"Abi":{"todo":"C { unwind: false }"}},"items":[{"ident":["get_slot_time",{"lo":{"line":121,"col":16},"hi":{"line":121,"col":29},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}],"kind":{"Fn":[{"inputs":[],"output":{"Return":{"Uint":"U64"}},"c_variadic":false,"implicit_self":"None","lifetime_elision_allowed":false},[],{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":121,"col":38},"hi":{"line":121,"col":38},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"span":{"lo":{"line":121,"col":29},"hi":{"line":121,"col":29},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}}]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0},{"data":"ForeignMod","disambiguator":18},{"data":{"ValueNs":"get_slot_time"},"disambiguator":0}],"index":[0,63]},"span":{"lo":{"line":121,"col":2},"hi":{"line":121,"col":39},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}},"vis_span":{"lo":{"line":121,"col":2},"hi":{"line":121,"col":12},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}}]}},"attributes":{"attributes":[],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:1:11: 1:12 (#0), close: concordium/src/concordium_prims.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":44,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_prims.rs:2:17: 2:18 (#0), close: concordium/src/concordium_prims.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":45,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_prims.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0}],"index":[0,64]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0}],"index":[0,64]},"span":{"lo":{"line":55,"col":0},"hi":{"line":55,"col":21},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"vis_span":{"lo":{"line":55,"col":0},"hi":{"line":55,"col":21},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"kind":{"Mod":[{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"hax_lib_macros"},"disambiguator":0}],"index":[0,170]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"hax_lib_macros"},"disambiguator":0}],"index":[0,170]},"span":{"lo":{"line":5,"col":0},"hi":{"line":5,"col":28},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":5,"col":0},"hi":{"line":5,"col":28},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"ExternCrate":null},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"_hax::skip","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:4:1: 4:24 (#19), close: concordium/src/concordium_types.rs:4:1: 4:24 (#19) }"}},"delim":"Parenthesis","tokens":""}},"tokens":null},"tokens":null}},"id":359,"style":"Outer","span":{"lo":{"line":4,"col":0},"hi":{"line":4,"col":23},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Use","disambiguator":0}],"index":[0,171]},"span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Use":[{"span":{"lo":{"line":7,"col":4},"hi":{"line":7,"col":18},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"res":[{"Def":[{"DefKind":{"todo":"Mod"}},{"krate":"hax_lib_macros","path":[],"index":[9,0]}]}],"segments":[{"ident":["hax_lib_macros",{"lo":{"line":7,"col":4},"hi":{"line":7,"col":18},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}],"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Use","disambiguator":0}],"index":[0,171]},"local_id":1},"res":{"Def":[{"DefKind":{"todo":"Mod"}},{"krate":"hax_lib_macros","path":[],"index":[9,0]}]},"args":null,"infer_args":false}],"rename":null},"Glob"]},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"_hax::skip","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:6:1: 6:24 (#22), close: concordium/src/concordium_types.rs:6:1: 6:24 (#22) }"}},"delim":"Parenthesis","tokens":""}},"tokens":null},"tokens":null}},"id":361,"style":"Outer","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":23},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Use","disambiguator":1}],"index":[0,240]},"span":{"lo":{"line":10,"col":0},"hi":{"line":10,"col":18},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":10,"col":0},"hi":{"line":10,"col":18},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Use":[{"span":{"lo":{"line":10,"col":4},"hi":{"line":10,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"res":[{"Def":[{"DefKind":{"todo":"Mod"}},{"krate":"core","path":[{"data":{"TypeNs":"num"},"disambiguator":0}],"index":[1,294]}]}],"segments":[{"ident":["crate",{"lo":{"line":10,"col":4},"hi":{"line":10,"col":9},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}],"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Use","disambiguator":1}],"index":[0,240]},"local_id":1},"res":"Err","args":null,"infer_args":false},{"ident":["num",{"lo":{"line":10,"col":11},"hi":{"line":10,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}],"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Use","disambiguator":1}],"index":[0,240]},"local_id":2},"res":{"Def":[{"DefKind":{"todo":"Mod"}},{"krate":"core","path":[{"data":{"TypeNs":"num"},"disambiguator":0}],"index":[1,294]}]},"args":null,"infer_args":false}],"rename":null},"Glob"]},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"_hax::skip","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:9:1: 9:8 (#52), close: concordium/src/concordium_types.rs:9:1: 9:8 (#52) }"}},"delim":"Parenthesis","tokens":""}},"tokens":null},"tokens":null}},"id":446,"style":"Outer","span":{"lo":{"line":9,"col":0},"hi":{"line":9,"col":7},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ContractState"},"disambiguator":0}],"index":[0,172]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ContractState"},"disambiguator":0}],"index":[0,172]},"span":{"lo":{"line":14,"col":0},"hi":{"line":16,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":14,"col":0},"hi":{"line":16,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Struct":[{"Struct":[[{"span":{"lo":{"line":15,"col":4},"hi":{"line":15,"col":51},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":15,"col":4},"hi":{"line":15,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"ident":["current_contract_state_position",{"lo":{"line":15,"col":15},"hi":{"line":15,"col":46},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}],"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ContractState"},"disambiguator":0}],"index":[0,172]},"local_id":3},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ContractState"},"disambiguator":0},{"data":{"ValueNs":"current_contract_state_position"},"disambiguator":0}],"index":[0,173]},"ty":{"Uint":"U32"},"attributes":[]}],false]},{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":14,"col":24},"hi":{"line":14,"col":24},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":14,"col":24},"hi":{"line":14,"col":24},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}]},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," A type representing the constract state bytes."]},"id":60,"style":"Outer","span":{"lo":{"line":12,"col":0},"hi":{"line":12,"col":50},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":3}],"index":[0,174]},"span":{"lo":{"line":13,"col":9},"hi":{"line":13,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":13,"col":9},"hi":{"line":13,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Impl":{"unsafety":"Normal","polarity":"Positive","defaultness":"Final","defaultness_span":null,"constness":"NotConst","generics":{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":14,"col":24},"hi":{"line":14,"col":24},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":14,"col":24},"hi":{"line":14,"col":24},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"of_trait":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"default"},"disambiguator":0},{"data":{"TypeNs":"Default"},"disambiguator":0}],"index":[1,2587]},"generic_args":[{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ContractState"},"disambiguator":0}],"index":[0,172]}}}}]},"self_ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ContractState"},"disambiguator":0}],"index":[0,172]}}},"items":[{"ident":["default",{"lo":{"line":13,"col":9},"hi":{"line":13,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":3},{"data":{"ValueNs":"default"},"disambiguator":0}],"index":[0,175]},"generics":{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":13,"col":9},"hi":{"line":13,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":13,"col":9},"hi":{"line":13,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"kind":{"Fn":{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"params":[],"ret":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ContractState"},"disambiguator":0}],"index":[0,172]}}},"body":{"ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ContractState"},"disambiguator":0}],"index":[0,172]}}},"span":{"lo":{"line":13,"col":9},"hi":{"line":13,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Block":{"targeted_by_break":false,"region_scope":{"id":10,"data":"Node"},"opt_destruction_scope":null,"span":{"lo":{"line":13,"col":9},"hi":{"line":13,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"stmts":[],"expr":{"ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ContractState"},"disambiguator":0}],"index":[0,172]}}},"span":{"lo":{"line":13,"col":9},"hi":{"line":13,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Adt":{"info":{"type_namespace":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0}],"index":[0,172]},"typ":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ContractState"},"disambiguator":0}],"index":[0,172]},"variant":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ContractState"},"disambiguator":0}],"index":[0,172]},"variant_index":0,"typ_is_record":true,"variant_is_record":true,"typ_is_struct":true},"user_ty":null,"fields":[{"field":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ContractState"},"disambiguator":0},{"data":{"ValueNs":"current_contract_state_position"},"disambiguator":0}],"index":[0,173]},"value":{"ty":{"Uint":"U32"},"span":{"lo":{"line":15,"col":4},"hi":{"line":15,"col":51},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Call":{"ty":{"Arrow":{"value":{"inputs":[],"output":{"Uint":"U32"},"c_variadic":false,"unsafety":"Normal","abi":{"Abi":{"todo":"Rust"}}},"bound_vars":[]}},"fun":{"ty":{"Arrow":{"value":{"inputs":[],"output":{"Uint":"U32"},"c_variadic":false,"unsafety":"Normal","abi":{"Abi":{"todo":"Rust"}}},"bound_vars":[]}},"span":{"lo":{"line":15,"col":4},"hi":{"line":15,"col":51},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"GlobalName":{"id":{"krate":"core","path":[{"data":{"TypeNs":"default"},"disambiguator":0},{"data":{"TypeNs":"Default"},"disambiguator":0},{"data":{"ValueNs":"default"},"disambiguator":0}],"index":[1,2588]}}},"hir_id":null,"attributes":[]},"args":[],"from_hir_call":true,"fn_span":{"lo":{"line":15,"col":4},"hi":{"line":15,"col":51},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"impl":{"impl":{"Concrete":{"id":{"krate":"core","path":[{"data":{"TypeNs":"default"},"disambiguator":0},{"data":"Impl","disambiguator":6}],"index":[1,32027]},"generics":[]}},"args":[]}}},"hir_id":[175,4],"attributes":[]}}],"base":null}},"hir_id":[175,1],"attributes":[]},"safety_mode":"Safe"}},"hir_id":[175,11],"attributes":[]},"sig_span":{"lo":{"line":13,"col":9},"hi":{"line":13,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}},"defaultness":"Final","span":{"lo":{"line":13,"col":9},"hi":{"line":13,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":13,"col":9},"hi":{"line":13,"col":9},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"inline","args":"Empty","tokens":null},"tokens":null}},"id":371,"style":"Outer","span":{"lo":{"line":13,"col":9},"hi":{"line":13,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"automatically_derived","args":"Empty","tokens":null},"tokens":null}},"id":372,"style":"Outer","span":{"lo":{"line":13,"col":9},"hi":{"line":13,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}}]}},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"automatically_derived","args":"Empty","tokens":null},"tokens":null}},"id":372,"style":"Outer","span":{"lo":{"line":13,"col":9},"hi":{"line":13,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[{"kind":{"Macro":["Derive","Default"]},"call_site":{"lo":{"line":13,"col":9},"hi":{"line":13,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"def_site":{"lo":{"line":185,"col":0},"hi":{"line":185,"col":17},"filename":{"Real":{"Remapped":{"local_path":"/home/au538501/.rustup/toolchains/nightly-2023-06-02-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/default.rs","virtual_name":"/rustc/d59363ad0b6391b7fc5bbb02c9ccf9300eef3753/library/core/src/default.rs"}}}},"allow_internal_unstable":["core_intrinsics"],"edition":"Edition2021","macro_def_id":{"krate":"core","path":[{"data":{"TypeNs":"default"},"disambiguator":0},{"data":{"MacroNs":"Default"},"disambiguator":0}],"index":[1,2591]},"parent_module":{"krate":"core","path":[{"data":{"TypeNs":"default"},"disambiguator":0}],"index":[1,2586]},"allow_internal_unsafe":false,"local_inner_macros":false,"collapse_debuginfo":false}]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Parameter"},"disambiguator":0}],"index":[0,176]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Parameter"},"disambiguator":0}],"index":[0,176]},"span":{"lo":{"line":20,"col":0},"hi":{"line":22,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":20,"col":0},"hi":{"line":22,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Struct":[{"Struct":[[{"span":{"lo":{"line":21,"col":4},"hi":{"line":21,"col":46},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":21,"col":4},"hi":{"line":21,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"ident":["current_parameter_position",{"lo":{"line":21,"col":15},"hi":{"line":21,"col":41},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}],"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Parameter"},"disambiguator":0}],"index":[0,176]},"local_id":3},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Parameter"},"disambiguator":0},{"data":{"ValueNs":"current_parameter_position"},"disambiguator":0}],"index":[0,177]},"ty":{"Uint":"U32"},"attributes":[]}],false]},{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":20,"col":20},"hi":{"line":20,"col":20},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":20,"col":20},"hi":{"line":20,"col":20},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}]},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," A type representing the parameter to init and receive methods."]},"id":63,"style":"Outer","span":{"lo":{"line":19,"col":0},"hi":{"line":19,"col":66},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":4}],"index":[0,178]},"span":{"lo":{"line":18,"col":9},"hi":{"line":18,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":18,"col":9},"hi":{"line":18,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Impl":{"unsafety":"Normal","polarity":"Positive","defaultness":"Final","defaultness_span":null,"constness":"NotConst","generics":{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":20,"col":20},"hi":{"line":20,"col":20},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":20,"col":20},"hi":{"line":20,"col":20},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"of_trait":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"default"},"disambiguator":0},{"data":{"TypeNs":"Default"},"disambiguator":0}],"index":[1,2587]},"generic_args":[{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Parameter"},"disambiguator":0}],"index":[0,176]}}}}]},"self_ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Parameter"},"disambiguator":0}],"index":[0,176]}}},"items":[{"ident":["default",{"lo":{"line":18,"col":9},"hi":{"line":18,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":4},{"data":{"ValueNs":"default"},"disambiguator":0}],"index":[0,179]},"generics":{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":18,"col":9},"hi":{"line":18,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":18,"col":9},"hi":{"line":18,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"kind":{"Fn":{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"params":[],"ret":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Parameter"},"disambiguator":0}],"index":[0,176]}}},"body":{"ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Parameter"},"disambiguator":0}],"index":[0,176]}}},"span":{"lo":{"line":18,"col":9},"hi":{"line":18,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Block":{"targeted_by_break":false,"region_scope":{"id":10,"data":"Node"},"opt_destruction_scope":null,"span":{"lo":{"line":18,"col":9},"hi":{"line":18,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"stmts":[],"expr":{"ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Parameter"},"disambiguator":0}],"index":[0,176]}}},"span":{"lo":{"line":18,"col":9},"hi":{"line":18,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Adt":{"info":{"type_namespace":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0}],"index":[0,176]},"typ":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Parameter"},"disambiguator":0}],"index":[0,176]},"variant":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Parameter"},"disambiguator":0}],"index":[0,176]},"variant_index":0,"typ_is_record":true,"variant_is_record":true,"typ_is_struct":true},"user_ty":null,"fields":[{"field":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Parameter"},"disambiguator":0},{"data":{"ValueNs":"current_parameter_position"},"disambiguator":0}],"index":[0,177]},"value":{"ty":{"Uint":"U32"},"span":{"lo":{"line":21,"col":4},"hi":{"line":21,"col":46},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Call":{"ty":{"Arrow":{"value":{"inputs":[],"output":{"Uint":"U32"},"c_variadic":false,"unsafety":"Normal","abi":{"Abi":{"todo":"Rust"}}},"bound_vars":[]}},"fun":{"ty":{"Arrow":{"value":{"inputs":[],"output":{"Uint":"U32"},"c_variadic":false,"unsafety":"Normal","abi":{"Abi":{"todo":"Rust"}}},"bound_vars":[]}},"span":{"lo":{"line":21,"col":4},"hi":{"line":21,"col":46},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"GlobalName":{"id":{"krate":"core","path":[{"data":{"TypeNs":"default"},"disambiguator":0},{"data":{"TypeNs":"Default"},"disambiguator":0},{"data":{"ValueNs":"default"},"disambiguator":0}],"index":[1,2588]}}},"hir_id":null,"attributes":[]},"args":[],"from_hir_call":true,"fn_span":{"lo":{"line":21,"col":4},"hi":{"line":21,"col":46},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"impl":{"impl":{"Concrete":{"id":{"krate":"core","path":[{"data":{"TypeNs":"default"},"disambiguator":0},{"data":"Impl","disambiguator":6}],"index":[1,32027]},"generics":[]}},"args":[]}}},"hir_id":[179,4],"attributes":[]}}],"base":null}},"hir_id":[179,1],"attributes":[]},"safety_mode":"Safe"}},"hir_id":[179,11],"attributes":[]},"sig_span":{"lo":{"line":18,"col":9},"hi":{"line":18,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}},"defaultness":"Final","span":{"lo":{"line":18,"col":9},"hi":{"line":18,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":18,"col":9},"hi":{"line":18,"col":9},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"inline","args":"Empty","tokens":null},"tokens":null}},"id":373,"style":"Outer","span":{"lo":{"line":18,"col":9},"hi":{"line":18,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"automatically_derived","args":"Empty","tokens":null},"tokens":null}},"id":374,"style":"Outer","span":{"lo":{"line":18,"col":9},"hi":{"line":18,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}}]}},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"automatically_derived","args":"Empty","tokens":null},"tokens":null}},"id":374,"style":"Outer","span":{"lo":{"line":18,"col":9},"hi":{"line":18,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[{"kind":{"Macro":["Derive","Default"]},"call_site":{"lo":{"line":18,"col":9},"hi":{"line":18,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"def_site":{"lo":{"line":185,"col":0},"hi":{"line":185,"col":17},"filename":{"Real":{"Remapped":{"local_path":"/home/au538501/.rustup/toolchains/nightly-2023-06-02-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/default.rs","virtual_name":"/rustc/d59363ad0b6391b7fc5bbb02c9ccf9300eef3753/library/core/src/default.rs"}}}},"allow_internal_unstable":["core_intrinsics"],"edition":"Edition2021","macro_def_id":{"krate":"core","path":[{"data":{"TypeNs":"default"},"disambiguator":0},{"data":{"MacroNs":"Default"},"disambiguator":0}],"index":[1,2591]},"parent_module":{"krate":"core","path":[{"data":{"TypeNs":"default"},"disambiguator":0}],"index":[1,2586]},"allow_internal_unsafe":false,"local_inner_macros":false,"collapse_debuginfo":false}]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"AttributesCursor"},"disambiguator":0}],"index":[0,180]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"AttributesCursor"},"disambiguator":0}],"index":[0,180]},"span":{"lo":{"line":26,"col":0},"hi":{"line":33,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":26,"col":0},"hi":{"line":33,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Struct":[{"Struct":[[{"span":{"lo":{"line":30,"col":4},"hi":{"line":30,"col":53},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":30,"col":4},"hi":{"line":30,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"ident":["current_attribute_cursor_position",{"lo":{"line":30,"col":15},"hi":{"line":30,"col":48},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}],"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"AttributesCursor"},"disambiguator":0}],"index":[0,180]},"local_id":3},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"AttributesCursor"},"disambiguator":0},{"data":{"ValueNs":"current_attribute_cursor_position"},"disambiguator":0}],"index":[0,181]},"ty":{"Uint":"U32"},"attributes":[{"kind":{"DocComment":["Line"," Current position of the cursor, starting from 0."]},"id":66,"style":"Outer","span":{"lo":{"line":27,"col":4},"hi":{"line":27,"col":56},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," Note that this is only for the variable attributes."]},"id":67,"style":"Outer","span":{"lo":{"line":28,"col":4},"hi":{"line":28,"col":59},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," `created_at` and `valid_to` will require."]},"id":68,"style":"Outer","span":{"lo":{"line":29,"col":4},"hi":{"line":29,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}]},{"span":{"lo":{"line":32,"col":4},"hi":{"line":32,"col":35},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":32,"col":4},"hi":{"line":32,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"ident":["remaining_items",{"lo":{"line":32,"col":15},"hi":{"line":32,"col":30},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}],"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"AttributesCursor"},"disambiguator":0}],"index":[0,180]},"local_id":6},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"AttributesCursor"},"disambiguator":0},{"data":{"ValueNs":"remaining_items"},"disambiguator":0}],"index":[0,182]},"ty":{"Uint":"U16"},"attributes":[{"kind":{"DocComment":["Line"," The number of remaining items in the policy."]},"id":69,"style":"Outer","span":{"lo":{"line":31,"col":4},"hi":{"line":31,"col":52},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}]}],false]},{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":26,"col":27},"hi":{"line":26,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":26,"col":27},"hi":{"line":26,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}]},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," A type representing the attributes, lazily acquired from the host."]},"id":64,"style":"Outer","span":{"lo":{"line":24,"col":0},"hi":{"line":24,"col":70},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":5}],"index":[0,183]},"span":{"lo":{"line":25,"col":9},"hi":{"line":25,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":25,"col":9},"hi":{"line":25,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Impl":{"unsafety":"Normal","polarity":"Positive","defaultness":"Final","defaultness_span":null,"constness":"NotConst","generics":{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":26,"col":27},"hi":{"line":26,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":26,"col":27},"hi":{"line":26,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"of_trait":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"default"},"disambiguator":0},{"data":{"TypeNs":"Default"},"disambiguator":0}],"index":[1,2587]},"generic_args":[{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"AttributesCursor"},"disambiguator":0}],"index":[0,180]}}}}]},"self_ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"AttributesCursor"},"disambiguator":0}],"index":[0,180]}}},"items":[{"ident":["default",{"lo":{"line":25,"col":9},"hi":{"line":25,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":5},{"data":{"ValueNs":"default"},"disambiguator":0}],"index":[0,184]},"generics":{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":25,"col":9},"hi":{"line":25,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":25,"col":9},"hi":{"line":25,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"kind":{"Fn":{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"params":[],"ret":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"AttributesCursor"},"disambiguator":0}],"index":[0,180]}}},"body":{"ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"AttributesCursor"},"disambiguator":0}],"index":[0,180]}}},"span":{"lo":{"line":25,"col":9},"hi":{"line":25,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Block":{"targeted_by_break":false,"region_scope":{"id":17,"data":"Node"},"opt_destruction_scope":null,"span":{"lo":{"line":25,"col":9},"hi":{"line":25,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"stmts":[],"expr":{"ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"AttributesCursor"},"disambiguator":0}],"index":[0,180]}}},"span":{"lo":{"line":25,"col":9},"hi":{"line":25,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Adt":{"info":{"type_namespace":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0}],"index":[0,180]},"typ":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"AttributesCursor"},"disambiguator":0}],"index":[0,180]},"variant":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"AttributesCursor"},"disambiguator":0}],"index":[0,180]},"variant_index":0,"typ_is_record":true,"variant_is_record":true,"typ_is_struct":true},"user_ty":null,"fields":[{"field":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"AttributesCursor"},"disambiguator":0},{"data":{"ValueNs":"current_attribute_cursor_position"},"disambiguator":0}],"index":[0,181]},"value":{"ty":{"Uint":"U32"},"span":{"lo":{"line":30,"col":4},"hi":{"line":30,"col":53},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Call":{"ty":{"Arrow":{"value":{"inputs":[],"output":{"Uint":"U32"},"c_variadic":false,"unsafety":"Normal","abi":{"Abi":{"todo":"Rust"}}},"bound_vars":[]}},"fun":{"ty":{"Arrow":{"value":{"inputs":[],"output":{"Uint":"U32"},"c_variadic":false,"unsafety":"Normal","abi":{"Abi":{"todo":"Rust"}}},"bound_vars":[]}},"span":{"lo":{"line":30,"col":4},"hi":{"line":30,"col":53},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"GlobalName":{"id":{"krate":"core","path":[{"data":{"TypeNs":"default"},"disambiguator":0},{"data":{"TypeNs":"Default"},"disambiguator":0},{"data":{"ValueNs":"default"},"disambiguator":0}],"index":[1,2588]}}},"hir_id":null,"attributes":[]},"args":[],"from_hir_call":true,"fn_span":{"lo":{"line":30,"col":4},"hi":{"line":30,"col":53},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"impl":{"impl":{"Concrete":{"id":{"krate":"core","path":[{"data":{"TypeNs":"default"},"disambiguator":0},{"data":"Impl","disambiguator":6}],"index":[1,32027]},"generics":[]}},"args":[]}}},"hir_id":[184,4],"attributes":[]}},{"field":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"AttributesCursor"},"disambiguator":0},{"data":{"ValueNs":"remaining_items"},"disambiguator":0}],"index":[0,182]},"value":{"ty":{"Uint":"U16"},"span":{"lo":{"line":32,"col":4},"hi":{"line":32,"col":35},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Call":{"ty":{"Arrow":{"value":{"inputs":[],"output":{"Uint":"U16"},"c_variadic":false,"unsafety":"Normal","abi":{"Abi":{"todo":"Rust"}}},"bound_vars":[]}},"fun":{"ty":{"Arrow":{"value":{"inputs":[],"output":{"Uint":"U16"},"c_variadic":false,"unsafety":"Normal","abi":{"Abi":{"todo":"Rust"}}},"bound_vars":[]}},"span":{"lo":{"line":32,"col":4},"hi":{"line":32,"col":35},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"GlobalName":{"id":{"krate":"core","path":[{"data":{"TypeNs":"default"},"disambiguator":0},{"data":{"TypeNs":"Default"},"disambiguator":0},{"data":{"ValueNs":"default"},"disambiguator":0}],"index":[1,2588]}}},"hir_id":null,"attributes":[]},"args":[],"from_hir_call":true,"fn_span":{"lo":{"line":32,"col":4},"hi":{"line":32,"col":35},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"impl":{"impl":{"Concrete":{"id":{"krate":"core","path":[{"data":{"TypeNs":"default"},"disambiguator":0},{"data":"Impl","disambiguator":5}],"index":[1,32025]},"generics":[]}},"args":[]}}},"hir_id":[184,11],"attributes":[]}}],"base":null}},"hir_id":[184,1],"attributes":[]},"safety_mode":"Safe"}},"hir_id":[184,18],"attributes":[]},"sig_span":{"lo":{"line":25,"col":9},"hi":{"line":25,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}},"defaultness":"Final","span":{"lo":{"line":25,"col":9},"hi":{"line":25,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":25,"col":9},"hi":{"line":25,"col":9},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"inline","args":"Empty","tokens":null},"tokens":null}},"id":375,"style":"Outer","span":{"lo":{"line":25,"col":9},"hi":{"line":25,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"automatically_derived","args":"Empty","tokens":null},"tokens":null}},"id":376,"style":"Outer","span":{"lo":{"line":25,"col":9},"hi":{"line":25,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}}]}},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"automatically_derived","args":"Empty","tokens":null},"tokens":null}},"id":376,"style":"Outer","span":{"lo":{"line":25,"col":9},"hi":{"line":25,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[{"kind":{"Macro":["Derive","Default"]},"call_site":{"lo":{"line":25,"col":9},"hi":{"line":25,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"def_site":{"lo":{"line":185,"col":0},"hi":{"line":185,"col":17},"filename":{"Real":{"Remapped":{"local_path":"/home/au538501/.rustup/toolchains/nightly-2023-06-02-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/default.rs","virtual_name":"/rustc/d59363ad0b6391b7fc5bbb02c9ccf9300eef3753/library/core/src/default.rs"}}}},"allow_internal_unstable":["core_intrinsics"],"edition":"Edition2021","macro_def_id":{"krate":"core","path":[{"data":{"TypeNs":"default"},"disambiguator":0},{"data":{"MacroNs":"Default"},"disambiguator":0}],"index":[1,2591]},"parent_module":{"krate":"core","path":[{"data":{"TypeNs":"default"},"disambiguator":0}],"index":[1,2586]},"allow_internal_unsafe":false,"local_inner_macros":false,"collapse_debuginfo":false}]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Logger"},"disambiguator":0}],"index":[0,185]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Logger"},"disambiguator":0}],"index":[0,185]},"span":{"lo":{"line":37,"col":0},"hi":{"line":39,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":37,"col":0},"hi":{"line":39,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Struct":[{"Struct":[[{"span":{"lo":{"line":38,"col":4},"hi":{"line":38,"col":34},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":38,"col":4},"hi":{"line":38,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"ident":["_private_logger",{"lo":{"line":38,"col":15},"hi":{"line":38,"col":30},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}],"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Logger"},"disambiguator":0}],"index":[0,185]},"local_id":2},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Logger"},"disambiguator":0},{"data":{"ValueNs":"_private_logger"},"disambiguator":0}],"index":[0,186]},"ty":{"Tuple":[]},"attributes":[]}],false]},{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":37,"col":17},"hi":{"line":37,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":37,"col":17},"hi":{"line":37,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}]},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," A type representing the logger."]},"id":70,"style":"Outer","span":{"lo":{"line":35,"col":0},"hi":{"line":35,"col":35},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":6}],"index":[0,187]},"span":{"lo":{"line":36,"col":9},"hi":{"line":36,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":36,"col":9},"hi":{"line":36,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Impl":{"unsafety":"Normal","polarity":"Positive","defaultness":"Final","defaultness_span":null,"constness":"NotConst","generics":{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":37,"col":17},"hi":{"line":37,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":37,"col":17},"hi":{"line":37,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"of_trait":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"default"},"disambiguator":0},{"data":{"TypeNs":"Default"},"disambiguator":0}],"index":[1,2587]},"generic_args":[{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Logger"},"disambiguator":0}],"index":[0,185]}}}}]},"self_ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Logger"},"disambiguator":0}],"index":[0,185]}}},"items":[{"ident":["default",{"lo":{"line":36,"col":9},"hi":{"line":36,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":6},{"data":{"ValueNs":"default"},"disambiguator":0}],"index":[0,188]},"generics":{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":36,"col":9},"hi":{"line":36,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":36,"col":9},"hi":{"line":36,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"kind":{"Fn":{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"params":[],"ret":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Logger"},"disambiguator":0}],"index":[0,185]}}},"body":{"ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Logger"},"disambiguator":0}],"index":[0,185]}}},"span":{"lo":{"line":36,"col":9},"hi":{"line":36,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Block":{"targeted_by_break":false,"region_scope":{"id":10,"data":"Node"},"opt_destruction_scope":null,"span":{"lo":{"line":36,"col":9},"hi":{"line":36,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"stmts":[],"expr":{"ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Logger"},"disambiguator":0}],"index":[0,185]}}},"span":{"lo":{"line":36,"col":9},"hi":{"line":36,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Adt":{"info":{"type_namespace":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0}],"index":[0,185]},"typ":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Logger"},"disambiguator":0}],"index":[0,185]},"variant":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Logger"},"disambiguator":0}],"index":[0,185]},"variant_index":0,"typ_is_record":true,"variant_is_record":true,"typ_is_struct":true},"user_ty":null,"fields":[{"field":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Logger"},"disambiguator":0},{"data":{"ValueNs":"_private_logger"},"disambiguator":0}],"index":[0,186]},"value":{"ty":{"Tuple":[]},"span":{"lo":{"line":38,"col":4},"hi":{"line":38,"col":34},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Call":{"ty":{"Arrow":{"value":{"inputs":[],"output":{"Tuple":[]},"c_variadic":false,"unsafety":"Normal","abi":{"Abi":{"todo":"Rust"}}},"bound_vars":[]}},"fun":{"ty":{"Arrow":{"value":{"inputs":[],"output":{"Tuple":[]},"c_variadic":false,"unsafety":"Normal","abi":{"Abi":{"todo":"Rust"}}},"bound_vars":[]}},"span":{"lo":{"line":38,"col":4},"hi":{"line":38,"col":34},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"GlobalName":{"id":{"krate":"core","path":[{"data":{"TypeNs":"default"},"disambiguator":0},{"data":{"TypeNs":"Default"},"disambiguator":0},{"data":{"ValueNs":"default"},"disambiguator":0}],"index":[1,2588]}}},"hir_id":null,"attributes":[]},"args":[],"from_hir_call":true,"fn_span":{"lo":{"line":38,"col":4},"hi":{"line":38,"col":34},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"impl":{"impl":{"Concrete":{"id":{"krate":"core","path":[{"data":{"TypeNs":"default"},"disambiguator":0},{"data":"Impl","disambiguator":0}],"index":[1,32015]},"generics":[]}},"args":[]}}},"hir_id":[188,4],"attributes":[]}}],"base":null}},"hir_id":[188,1],"attributes":[]},"safety_mode":"Safe"}},"hir_id":[188,11],"attributes":[]},"sig_span":{"lo":{"line":36,"col":9},"hi":{"line":36,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}},"defaultness":"Final","span":{"lo":{"line":36,"col":9},"hi":{"line":36,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":36,"col":9},"hi":{"line":36,"col":9},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"inline","args":"Empty","tokens":null},"tokens":null}},"id":377,"style":"Outer","span":{"lo":{"line":36,"col":9},"hi":{"line":36,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"automatically_derived","args":"Empty","tokens":null},"tokens":null}},"id":378,"style":"Outer","span":{"lo":{"line":36,"col":9},"hi":{"line":36,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}}]}},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"automatically_derived","args":"Empty","tokens":null},"tokens":null}},"id":378,"style":"Outer","span":{"lo":{"line":36,"col":9},"hi":{"line":36,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[{"kind":{"Macro":["Derive","Default"]},"call_site":{"lo":{"line":36,"col":9},"hi":{"line":36,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"def_site":{"lo":{"line":185,"col":0},"hi":{"line":185,"col":17},"filename":{"Real":{"Remapped":{"local_path":"/home/au538501/.rustup/toolchains/nightly-2023-06-02-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/default.rs","virtual_name":"/rustc/d59363ad0b6391b7fc5bbb02c9ccf9300eef3753/library/core/src/default.rs"}}}},"allow_internal_unstable":["core_intrinsics"],"edition":"Edition2021","macro_def_id":{"krate":"core","path":[{"data":{"TypeNs":"default"},"disambiguator":0},{"data":{"MacroNs":"Default"},"disambiguator":0}],"index":[1,2591]},"parent_module":{"krate":"core","path":[{"data":{"TypeNs":"default"},"disambiguator":0}],"index":[1,2586]},"allow_internal_unsafe":false,"local_inner_macros":false,"collapse_debuginfo":false}]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]},"span":{"lo":{"line":44,"col":0},"hi":{"line":49,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":44,"col":0},"hi":{"line":49,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Enum":[[{"ident":["Full",{"lo":{"line":46,"col":4},"hi":{"line":46,"col":8},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}],"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]},"local_id":1},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0},{"data":{"TypeNs":"Full"},"disambiguator":0}],"index":[0,190]},"data":{"Unit":[{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]},"local_id":2},{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0},{"data":{"TypeNs":"Full"},"disambiguator":0},{"data":"Ctor","disambiguator":0}],"index":[0,191]}]},"disr_expr":null,"span":{"lo":{"line":46,"col":4},"hi":{"line":46,"col":8},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"attributes":[{"kind":{"DocComment":["Line"," The log is full."]},"id":74,"style":"Outer","span":{"lo":{"line":45,"col":4},"hi":{"line":45,"col":24},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}]},{"ident":["Malformed",{"lo":{"line":48,"col":4},"hi":{"line":48,"col":13},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}],"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]},"local_id":3},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0},{"data":{"TypeNs":"Malformed"},"disambiguator":0}],"index":[0,192]},"data":{"Unit":[{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]},"local_id":4},{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0},{"data":{"TypeNs":"Malformed"},"disambiguator":0},{"data":"Ctor","disambiguator":0}],"index":[0,193]}]},"disr_expr":null,"span":{"lo":{"line":48,"col":4},"hi":{"line":48,"col":13},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"attributes":[{"kind":{"DocComment":["Line"," The message to log was malformed (e.g., too long)"]},"id":75,"style":"Outer","span":{"lo":{"line":47,"col":4},"hi":{"line":47,"col":57},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}]}],{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":44,"col":17},"hi":{"line":44,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":44,"col":17},"hi":{"line":44,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}]},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"repr","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:43:7: 43:8 (#0), close: concordium/src/concordium_types.rs:43:10: 43:11 (#0) }"}},"delim":"Parenthesis","tokens":"u8"}},"tokens":null},"tokens":null}},"id":73,"style":"Outer","span":{"lo":{"line":43,"col":0},"hi":{"line":43,"col":11},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":7}],"index":[0,194]},"span":{"lo":{"line":42,"col":9},"hi":{"line":42,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":42,"col":9},"hi":{"line":42,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Impl":{"unsafety":"Normal","polarity":"Positive","defaultness":"Final","defaultness_span":null,"constness":"NotConst","generics":{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":44,"col":17},"hi":{"line":44,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":44,"col":17},"hi":{"line":44,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"of_trait":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"Debug"},"disambiguator":0}],"index":[1,9139]},"generic_args":[{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}}}]},"self_ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}},"items":[{"ident":["fmt",{"lo":{"line":42,"col":9},"hi":{"line":42,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"fmt"},"disambiguator":0}],"index":[0,195]},"generics":{"params":[{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"fmt"},"disambiguator":0}],"index":[0,195]},"local_id":30},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"fmt"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,274]},"name":"Fresh","span":{"lo":{"line":42,"col":9},"hi":{"line":42,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]},{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"fmt"},"disambiguator":0}],"index":[0,195]},"local_id":31},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"fmt"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":1}],"index":[0,275]},"name":"Fresh","span":{"lo":{"line":42,"col":9},"hi":{"line":42,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]},{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"fmt"},"disambiguator":0}],"index":[0,195]},"local_id":32},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"fmt"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":2}],"index":[0,276]},"name":"Fresh","span":{"lo":{"line":42,"col":9},"hi":{"line":42,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]}],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":42,"col":9},"hi":{"line":42,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":42,"col":9},"hi":{"line":42,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"kind":{"Fn":{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"params":[{"pat":{"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}},false]},"span":{"lo":{"line":42,"col":9},"hi":{"line":42,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Binding":{"mutability":false,"mode":"ByValue","var":{"name":"self","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"fmt"},"disambiguator":0}],"index":[0,195]},"local_id":2}},"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}},false]},"subpattern":null,"is_primary":true}},"hir_id":null,"attributes":[]},"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}},false]},"ty_span":null,"self_kind":"ImmRef","hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"fmt"},"disambiguator":0}],"index":[0,195]},"local_id":1},"attributes":[]},{"pat":{"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[{"Lifetime":{"kind":"ReErased"}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"Formatter"},"disambiguator":0}],"index":[1,9114]}}},true]},"span":{"lo":{"line":42,"col":9},"hi":{"line":42,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Binding":{"mutability":false,"mode":"ByValue","var":{"name":"f","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"fmt"},"disambiguator":0}],"index":[0,195]},"local_id":4}},"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[{"Lifetime":{"kind":"ReErased"}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"Formatter"},"disambiguator":0}],"index":[1,9114]}}},true]},"subpattern":null,"is_primary":true}},"hir_id":null,"attributes":[]},"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[{"Lifetime":{"kind":"ReErased"}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"Formatter"},"disambiguator":0}],"index":[1,9114]}}},true]},"ty_span":null,"self_kind":null,"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"fmt"},"disambiguator":0}],"index":[0,195]},"local_id":3},"attributes":[]}],"ret":{"Adt":{"generic_args":[{"Type":{"Tuple":[]}},{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"Error"},"disambiguator":0}],"index":[1,42444]}}}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"result"},"disambiguator":0},{"data":{"TypeNs":"Result"},"disambiguator":0}],"index":[1,41506]}}},"body":{"ty":{"Adt":{"generic_args":[{"Type":{"Tuple":[]}},{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"Error"},"disambiguator":0}],"index":[1,42444]}}}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"result"},"disambiguator":0},{"data":{"TypeNs":"Result"},"disambiguator":0}],"index":[1,41506]}}},"span":{"lo":{"line":42,"col":9},"hi":{"line":42,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Block":{"targeted_by_break":false,"region_scope":{"id":28,"data":"Node"},"opt_destruction_scope":null,"span":{"lo":{"line":42,"col":9},"hi":{"line":42,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"stmts":[],"expr":{"ty":{"Adt":{"generic_args":[{"Type":{"Tuple":[]}},{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"Error"},"disambiguator":0}],"index":[1,42444]}}}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"result"},"disambiguator":0},{"data":{"TypeNs":"Result"},"disambiguator":0}],"index":[1,41506]}}},"span":{"lo":{"line":42,"col":9},"hi":{"line":42,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Call":{"ty":{"Arrow":{"value":{"inputs":[{"Ref":[{"kind":{"ReLateBound":[0,{"var":0,"kind":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"write_str"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[1,53916]},"'_"]}}]}},{"Adt":{"generic_args":[{"Lifetime":{"kind":"ReErased"}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"Formatter"},"disambiguator":0}],"index":[1,9114]}}},true]},{"Ref":[{"kind":{"ReLateBound":[0,{"var":1,"kind":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"write_str"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":1}],"index":[1,53917]},"'_"]}}]}},"Str",false]}],"output":{"Adt":{"generic_args":[{"Type":{"Tuple":[]}},{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"Error"},"disambiguator":0}],"index":[1,42444]}}}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"result"},"disambiguator":0},{"data":{"TypeNs":"Result"},"disambiguator":0}],"index":[1,41506]}}},"c_variadic":false,"unsafety":"Normal","abi":{"Abi":{"todo":"Rust"}}},"bound_vars":[{"Region":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"write_str"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[1,53916]},"'_"]}},{"Region":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"write_str"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":1}],"index":[1,53917]},"'_"]}}]}},"fun":{"ty":{"Arrow":{"value":{"inputs":[{"Ref":[{"kind":{"ReLateBound":[0,{"var":0,"kind":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"write_str"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[1,53916]},"'_"]}}]}},{"Adt":{"generic_args":[{"Lifetime":{"kind":"ReErased"}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"Formatter"},"disambiguator":0}],"index":[1,9114]}}},true]},{"Ref":[{"kind":{"ReLateBound":[0,{"var":1,"kind":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"write_str"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":1}],"index":[1,53917]},"'_"]}}]}},"Str",false]}],"output":{"Adt":{"generic_args":[{"Type":{"Tuple":[]}},{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"Error"},"disambiguator":0}],"index":[1,42444]}}}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"result"},"disambiguator":0},{"data":{"TypeNs":"Result"},"disambiguator":0}],"index":[1,41506]}}},"c_variadic":false,"unsafety":"Normal","abi":{"Abi":{"todo":"Rust"}}},"bound_vars":[{"Region":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"write_str"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[1,53916]},"'_"]}},{"Region":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"write_str"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":1}],"index":[1,53917]},"'_"]}}]}},"span":{"lo":{"line":42,"col":9},"hi":{"line":42,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"GlobalName":{"id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"write_str"},"disambiguator":0}],"index":[1,9184]}}},"hir_id":null,"attributes":[]},"args":[{"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[{"Lifetime":{"kind":"ReErased"}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"Formatter"},"disambiguator":0}],"index":[1,9114]}}},true]},"span":{"lo":{"line":42,"col":9},"hi":{"line":42,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Borrow":{"borrow_kind":{"Mut":{"allow_two_phase_borrow":true}},"arg":{"ty":{"Adt":{"generic_args":[{"Lifetime":{"kind":"ReErased"}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"Formatter"},"disambiguator":0}],"index":[1,9114]}}},"span":{"lo":{"line":42,"col":9},"hi":{"line":42,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Deref":{"arg":{"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[{"Lifetime":{"kind":"ReErased"}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"Formatter"},"disambiguator":0}],"index":[1,9114]}}},true]},"span":{"lo":{"line":42,"col":9},"hi":{"line":42,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"VarRef":{"id":{"name":"f","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"fmt"},"disambiguator":0}],"index":[0,195]},"local_id":4}}}},"hir_id":null,"attributes":[]}}},"hir_id":null,"attributes":[]}}},"hir_id":[195,13],"attributes":[]},{"ty":{"Ref":[{"kind":"ReErased"},"Str",false]},"span":{"lo":{"line":42,"col":9},"hi":{"line":42,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Match":{"scrutinee":{"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}},false]},"span":{"lo":{"line":42,"col":9},"hi":{"line":42,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"VarRef":{"id":{"name":"self","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"fmt"},"disambiguator":0}],"index":[0,195]},"local_id":2}}}},"hir_id":[195,16],"attributes":[]},"arms":[{"pattern":{"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}},false]},"span":{"lo":{"line":42,"col":9},"hi":{"line":42,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Deref":{"subpattern":{"ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}},"span":{"lo":{"line":42,"col":9},"hi":{"line":42,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Variant":{"info":{"type_namespace":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0}],"index":[0,189]},"typ":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]},"variant":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0},{"data":{"TypeNs":"Full"},"disambiguator":0}],"index":[0,190]},"variant_index":0,"typ_is_record":false,"variant_is_record":false,"typ_is_struct":false},"substs":[],"subpatterns":[]}},"hir_id":null,"attributes":[]}}},"hir_id":null,"attributes":[]},"guard":null,"body":{"ty":{"Ref":[{"kind":"ReErased"},"Str",false]},"span":{"lo":{"line":42,"col":9},"hi":{"line":42,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Borrow":{"borrow_kind":"Shared","arg":{"ty":"Str","span":{"lo":{"line":42,"col":9},"hi":{"line":42,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Deref":{"arg":{"ty":{"Ref":[{"kind":"ReErased"},"Str",false]},"span":{"lo":{"line":42,"col":9},"hi":{"line":42,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Literal":{"lit":{"node":{"Str":["Full","Cooked"]},"span":{"lo":{"line":42,"col":9},"hi":{"line":42,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"neg":false}},"hir_id":null,"attributes":[]}}},"hir_id":null,"attributes":[]}}},"hir_id":[195,22],"attributes":[]},"lint_level":{"Explicit":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"fmt"},"disambiguator":0}],"index":[0,195]},"local_id":21}},"scope":{"id":21,"data":"Node"},"span":{"lo":{"line":42,"col":9},"hi":{"line":42,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"attributes":[]},{"pattern":{"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}},false]},"span":{"lo":{"line":42,"col":9},"hi":{"line":42,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Deref":{"subpattern":{"ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}},"span":{"lo":{"line":42,"col":9},"hi":{"line":42,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Variant":{"info":{"type_namespace":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0}],"index":[0,189]},"typ":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]},"variant":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0},{"data":{"TypeNs":"Malformed"},"disambiguator":0}],"index":[0,192]},"variant_index":1,"typ_is_record":false,"variant_is_record":false,"typ_is_struct":false},"substs":[],"subpatterns":[]}},"hir_id":null,"attributes":[]}}},"hir_id":null,"attributes":[]},"guard":null,"body":{"ty":{"Ref":[{"kind":"ReErased"},"Str",false]},"span":{"lo":{"line":42,"col":9},"hi":{"line":42,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Borrow":{"borrow_kind":"Shared","arg":{"ty":"Str","span":{"lo":{"line":42,"col":9},"hi":{"line":42,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Deref":{"arg":{"ty":{"Ref":[{"kind":"ReErased"},"Str",false]},"span":{"lo":{"line":42,"col":9},"hi":{"line":42,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Literal":{"lit":{"node":{"Str":["Malformed","Cooked"]},"span":{"lo":{"line":42,"col":9},"hi":{"line":42,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"neg":false}},"hir_id":null,"attributes":[]}}},"hir_id":null,"attributes":[]}}},"hir_id":[195,27],"attributes":[]},"lint_level":{"Explicit":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"fmt"},"disambiguator":0}],"index":[0,195]},"local_id":26}},"scope":{"id":26,"data":"Node"},"span":{"lo":{"line":42,"col":9},"hi":{"line":42,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"attributes":[]}]}},"hir_id":[195,15],"attributes":[]}],"from_hir_call":true,"fn_span":{"lo":{"line":42,"col":9},"hi":{"line":42,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"impl":null}},"hir_id":[195,5],"attributes":[]},"safety_mode":"Safe"}},"hir_id":[195,29],"attributes":[]},"sig_span":{"lo":{"line":42,"col":9},"hi":{"line":42,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}},"defaultness":"Final","span":{"lo":{"line":42,"col":9},"hi":{"line":42,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":42,"col":9},"hi":{"line":42,"col":9},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"attributes":{"attributes":[],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"automatically_derived","args":"Empty","tokens":null},"tokens":null}},"id":395,"style":"Outer","span":{"lo":{"line":42,"col":9},"hi":{"line":42,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}}]}},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"automatically_derived","args":"Empty","tokens":null},"tokens":null}},"id":395,"style":"Outer","span":{"lo":{"line":42,"col":9},"hi":{"line":42,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[{"kind":{"Macro":["Derive","Debug"]},"call_site":{"lo":{"line":42,"col":9},"hi":{"line":42,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"def_site":{"lo":{"line":588,"col":4},"hi":{"line":588,"col":19},"filename":{"Real":{"Remapped":{"local_path":"/home/au538501/.rustup/toolchains/nightly-2023-06-02-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/fmt/mod.rs","virtual_name":"/rustc/d59363ad0b6391b7fc5bbb02c9ccf9300eef3753/library/core/src/fmt/mod.rs"}}}},"allow_internal_unstable":["core_intrinsics","fmt_helpers_for_derive"],"edition":"Edition2021","macro_def_id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"macros"},"disambiguator":0},{"data":{"MacroNs":"Debug"},"disambiguator":0}],"index":[1,9142]},"parent_module":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"macros"},"disambiguator":0}],"index":[1,9141]},"allow_internal_unsafe":false,"local_inner_macros":false,"collapse_debuginfo":false}]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":8}],"index":[0,196]},"span":{"lo":{"line":42,"col":16},"hi":{"line":42,"col":20},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":42,"col":16},"hi":{"line":42,"col":20},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Impl":{"unsafety":"Normal","polarity":"Positive","defaultness":"Final","defaultness_span":null,"constness":"NotConst","generics":{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":44,"col":17},"hi":{"line":44,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":44,"col":17},"hi":{"line":44,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"of_trait":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"Copy"},"disambiguator":0}],"index":[1,2694]},"generic_args":[{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}}}]},"self_ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}},"items":[]}},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"automatically_derived","args":"Empty","tokens":null},"tokens":null}},"id":396,"style":"Outer","span":{"lo":{"line":42,"col":16},"hi":{"line":42,"col":20},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[{"kind":{"Macro":["Derive","Copy"]},"call_site":{"lo":{"line":42,"col":16},"hi":{"line":42,"col":20},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"def_site":{"lo":{"line":458,"col":0},"hi":{"line":458,"col":14},"filename":{"Real":{"Remapped":{"local_path":"/home/au538501/.rustup/toolchains/nightly-2023-06-02-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/marker.rs","virtual_name":"/rustc/d59363ad0b6391b7fc5bbb02c9ccf9300eef3753/library/core/src/marker.rs"}}}},"allow_internal_unstable":["core_intrinsics","derive_clone_copy"],"edition":"Edition2021","macro_def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"MacroNs":"Copy"},"disambiguator":0}],"index":[1,2695]},"parent_module":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0}],"index":[1,2675]},"allow_internal_unsafe":false,"local_inner_macros":false,"collapse_debuginfo":false}]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":9}],"index":[0,197]},"span":{"lo":{"line":42,"col":22},"hi":{"line":42,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":42,"col":22},"hi":{"line":42,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Impl":{"unsafety":"Normal","polarity":"Positive","defaultness":"Final","defaultness_span":null,"constness":"NotConst","generics":{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":44,"col":17},"hi":{"line":44,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":44,"col":17},"hi":{"line":44,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"of_trait":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"clone"},"disambiguator":0},{"data":{"TypeNs":"Clone"},"disambiguator":0}],"index":[1,2262]},"generic_args":[{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}}}]},"self_ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}},"items":[{"ident":["clone",{"lo":{"line":42,"col":22},"hi":{"line":42,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":9},{"data":{"ValueNs":"clone"},"disambiguator":0}],"index":[0,198]},"generics":{"params":[{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":9},{"data":{"ValueNs":"clone"},"disambiguator":0}],"index":[0,198]},"local_id":8},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":9},{"data":{"ValueNs":"clone"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,277]},"name":"Fresh","span":{"lo":{"line":42,"col":22},"hi":{"line":42,"col":23},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]}],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":42,"col":22},"hi":{"line":42,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":42,"col":22},"hi":{"line":42,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"kind":{"Fn":{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"params":[{"pat":{"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}},false]},"span":{"lo":{"line":42,"col":22},"hi":{"line":42,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Binding":{"mutability":false,"mode":"ByValue","var":{"name":"self","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":9},{"data":{"ValueNs":"clone"},"disambiguator":0}],"index":[0,198]},"local_id":2}},"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}},false]},"subpattern":null,"is_primary":true}},"hir_id":null,"attributes":[]},"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}},false]},"ty_span":null,"self_kind":"ImmRef","hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":9},{"data":{"ValueNs":"clone"},"disambiguator":0}],"index":[0,198]},"local_id":1},"attributes":[]}],"ret":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}},"body":{"ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}},"span":{"lo":{"line":42,"col":22},"hi":{"line":42,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Block":{"targeted_by_break":false,"region_scope":{"id":6,"data":"Node"},"opt_destruction_scope":null,"span":{"lo":{"line":42,"col":22},"hi":{"line":42,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"stmts":[],"expr":{"ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}},"span":{"lo":{"line":42,"col":22},"hi":{"line":42,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Deref":{"arg":{"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}},false]},"span":{"lo":{"line":42,"col":22},"hi":{"line":42,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"VarRef":{"id":{"name":"self","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":9},{"data":{"ValueNs":"clone"},"disambiguator":0}],"index":[0,198]},"local_id":2}}}},"hir_id":[198,4],"attributes":[]}}},"hir_id":[198,3],"attributes":[]},"safety_mode":"Safe"}},"hir_id":[198,7],"attributes":[]},"sig_span":{"lo":{"line":42,"col":22},"hi":{"line":42,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}},"defaultness":"Final","span":{"lo":{"line":42,"col":22},"hi":{"line":42,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":42,"col":22},"hi":{"line":42,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"inline","args":"Empty","tokens":null},"tokens":null}},"id":397,"style":"Outer","span":{"lo":{"line":42,"col":22},"hi":{"line":42,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"automatically_derived","args":"Empty","tokens":null},"tokens":null}},"id":398,"style":"Outer","span":{"lo":{"line":42,"col":22},"hi":{"line":42,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}}]}},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"automatically_derived","args":"Empty","tokens":null},"tokens":null}},"id":398,"style":"Outer","span":{"lo":{"line":42,"col":22},"hi":{"line":42,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[{"kind":{"Macro":["Derive","Clone"]},"call_site":{"lo":{"line":42,"col":22},"hi":{"line":42,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"def_site":{"lo":{"line":138,"col":0},"hi":{"line":138,"col":15},"filename":{"Real":{"Remapped":{"local_path":"/home/au538501/.rustup/toolchains/nightly-2023-06-02-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/clone.rs","virtual_name":"/rustc/d59363ad0b6391b7fc5bbb02c9ccf9300eef3753/library/core/src/clone.rs"}}}},"allow_internal_unstable":["core_intrinsics","derive_clone_copy"],"edition":"Edition2021","macro_def_id":{"krate":"core","path":[{"data":{"TypeNs":"clone"},"disambiguator":0},{"data":{"MacroNs":"Clone"},"disambiguator":0}],"index":[1,2265]},"parent_module":{"krate":"core","path":[{"data":{"TypeNs":"clone"},"disambiguator":0}],"index":[1,2261]},"allow_internal_unsafe":false,"local_inner_macros":false,"collapse_debuginfo":false}]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":10}],"index":[0,199]},"span":{"lo":{"line":42,"col":29},"hi":{"line":42,"col":31},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":42,"col":29},"hi":{"line":42,"col":31},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Impl":{"unsafety":"Normal","polarity":"Positive","defaultness":"Final","defaultness_span":null,"constness":"NotConst","generics":{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":44,"col":17},"hi":{"line":44,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":44,"col":17},"hi":{"line":44,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"of_trait":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"StructuralEq"},"disambiguator":0}],"index":[1,2693]},"generic_args":[{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}}}]},"self_ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}},"items":[]}},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"automatically_derived","args":"Empty","tokens":null},"tokens":null}},"id":402,"style":"Outer","span":{"lo":{"line":42,"col":29},"hi":{"line":42,"col":31},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[{"kind":{"Macro":["Derive","Eq"]},"call_site":{"lo":{"line":42,"col":29},"hi":{"line":42,"col":31},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"def_site":{"lo":{"line":302,"col":0},"hi":{"line":302,"col":12},"filename":{"Real":{"Remapped":{"local_path":"/home/au538501/.rustup/toolchains/nightly-2023-06-02-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/cmp.rs","virtual_name":"/rustc/d59363ad0b6391b7fc5bbb02c9ccf9300eef3753/library/core/src/cmp.rs"}}}},"allow_internal_unstable":["core_intrinsics","derive_eq","structural_match","no_coverage"],"edition":"Edition2021","macro_def_id":{"krate":"core","path":[{"data":{"TypeNs":"cmp"},"disambiguator":0},{"data":{"MacroNs":"Eq"},"disambiguator":0}],"index":[1,2317]},"parent_module":{"krate":"core","path":[{"data":{"TypeNs":"cmp"},"disambiguator":0}],"index":[1,2288]},"allow_internal_unsafe":false,"local_inner_macros":false,"collapse_debuginfo":false}]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":11}],"index":[0,200]},"span":{"lo":{"line":42,"col":29},"hi":{"line":42,"col":31},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":42,"col":29},"hi":{"line":42,"col":31},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Impl":{"unsafety":"Normal","polarity":"Positive","defaultness":"Final","defaultness_span":null,"constness":"NotConst","generics":{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":44,"col":17},"hi":{"line":44,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":44,"col":17},"hi":{"line":44,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"of_trait":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"cmp"},"disambiguator":0},{"data":{"TypeNs":"Eq"},"disambiguator":0}],"index":[1,2315]},"generic_args":[{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}}}]},"self_ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}},"items":[{"ident":["assert_receiver_is_total_eq",{"lo":{"line":42,"col":29},"hi":{"line":42,"col":31},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":11},{"data":{"ValueNs":"assert_receiver_is_total_eq"},"disambiguator":0}],"index":[0,201]},"generics":{"params":[{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":11},{"data":{"ValueNs":"assert_receiver_is_total_eq"},"disambiguator":0}],"index":[0,201]},"local_id":5},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":11},{"data":{"ValueNs":"assert_receiver_is_total_eq"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,278]},"name":"Fresh","span":{"lo":{"line":42,"col":29},"hi":{"line":42,"col":30},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]}],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":42,"col":29},"hi":{"line":42,"col":31},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":42,"col":29},"hi":{"line":42,"col":31},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"kind":{"Fn":{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"params":[{"pat":{"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}},false]},"span":{"lo":{"line":42,"col":29},"hi":{"line":42,"col":31},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Binding":{"mutability":false,"mode":"ByValue","var":{"name":"self","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":11},{"data":{"ValueNs":"assert_receiver_is_total_eq"},"disambiguator":0}],"index":[0,201]},"local_id":2}},"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}},false]},"subpattern":null,"is_primary":true}},"hir_id":null,"attributes":[]},"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}},false]},"ty_span":null,"self_kind":"ImmRef","hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":11},{"data":{"ValueNs":"assert_receiver_is_total_eq"},"disambiguator":0}],"index":[0,201]},"local_id":1},"attributes":[]}],"ret":{"Tuple":[]},"body":{"ty":{"Tuple":[]},"span":{"lo":{"line":42,"col":29},"hi":{"line":42,"col":31},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Block":{"targeted_by_break":false,"region_scope":{"id":3,"data":"Node"},"opt_destruction_scope":null,"span":{"lo":{"line":42,"col":29},"hi":{"line":42,"col":31},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"stmts":[],"expr":null,"safety_mode":"Safe"}},"hir_id":[201,4],"attributes":[]},"sig_span":{"lo":{"line":42,"col":29},"hi":{"line":42,"col":31},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}},"defaultness":"Final","span":{"lo":{"line":42,"col":29},"hi":{"line":42,"col":31},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":42,"col":29},"hi":{"line":42,"col":29},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"inline","args":"Empty","tokens":null},"tokens":null}},"id":399,"style":"Outer","span":{"lo":{"line":42,"col":29},"hi":{"line":42,"col":31},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"doc","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:42:30: 42:32 (#31), close: concordium/src/concordium_types.rs:42:30: 42:32 (#31) }"}},"delim":"Parenthesis","tokens":"hidden"}},"tokens":null},"tokens":null}},"id":400,"style":"Outer","span":{"lo":{"line":42,"col":29},"hi":{"line":42,"col":31},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_coverage","args":"Empty","tokens":null},"tokens":null}},"id":401,"style":"Outer","span":{"lo":{"line":42,"col":29},"hi":{"line":42,"col":31},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"automatically_derived","args":"Empty","tokens":null},"tokens":null}},"id":403,"style":"Outer","span":{"lo":{"line":42,"col":29},"hi":{"line":42,"col":31},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}}]}},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"automatically_derived","args":"Empty","tokens":null},"tokens":null}},"id":403,"style":"Outer","span":{"lo":{"line":42,"col":29},"hi":{"line":42,"col":31},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[{"kind":{"Macro":["Derive","Eq"]},"call_site":{"lo":{"line":42,"col":29},"hi":{"line":42,"col":31},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"def_site":{"lo":{"line":302,"col":0},"hi":{"line":302,"col":12},"filename":{"Real":{"Remapped":{"local_path":"/home/au538501/.rustup/toolchains/nightly-2023-06-02-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/cmp.rs","virtual_name":"/rustc/d59363ad0b6391b7fc5bbb02c9ccf9300eef3753/library/core/src/cmp.rs"}}}},"allow_internal_unstable":["core_intrinsics","derive_eq","structural_match","no_coverage"],"edition":"Edition2021","macro_def_id":{"krate":"core","path":[{"data":{"TypeNs":"cmp"},"disambiguator":0},{"data":{"MacroNs":"Eq"},"disambiguator":0}],"index":[1,2317]},"parent_module":{"krate":"core","path":[{"data":{"TypeNs":"cmp"},"disambiguator":0}],"index":[1,2288]},"allow_internal_unsafe":false,"local_inner_macros":false,"collapse_debuginfo":false}]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":12}],"index":[0,202]},"span":{"lo":{"line":42,"col":33},"hi":{"line":42,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":42,"col":33},"hi":{"line":42,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Impl":{"unsafety":"Normal","polarity":"Positive","defaultness":"Final","defaultness_span":null,"constness":"NotConst","generics":{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":44,"col":17},"hi":{"line":44,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":44,"col":17},"hi":{"line":44,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"of_trait":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"StructuralPartialEq"},"disambiguator":0}],"index":[1,2692]},"generic_args":[{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}}}]},"self_ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}},"items":[]}},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"automatically_derived","args":"Empty","tokens":null},"tokens":null}},"id":404,"style":"Outer","span":{"lo":{"line":42,"col":33},"hi":{"line":42,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[{"kind":{"Macro":["Derive","PartialEq"]},"call_site":{"lo":{"line":42,"col":33},"hi":{"line":42,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"def_site":{"lo":{"line":236,"col":0},"hi":{"line":236,"col":19},"filename":{"Real":{"Remapped":{"local_path":"/home/au538501/.rustup/toolchains/nightly-2023-06-02-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/cmp.rs","virtual_name":"/rustc/d59363ad0b6391b7fc5bbb02c9ccf9300eef3753/library/core/src/cmp.rs"}}}},"allow_internal_unstable":["core_intrinsics","structural_match"],"edition":"Edition2021","macro_def_id":{"krate":"core","path":[{"data":{"TypeNs":"cmp"},"disambiguator":0},{"data":{"MacroNs":"PartialEq"},"disambiguator":0}],"index":[1,2314]},"parent_module":{"krate":"core","path":[{"data":{"TypeNs":"cmp"},"disambiguator":0}],"index":[1,2288]},"allow_internal_unsafe":false,"local_inner_macros":false,"collapse_debuginfo":false}]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":13}],"index":[0,203]},"span":{"lo":{"line":42,"col":33},"hi":{"line":42,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":42,"col":33},"hi":{"line":42,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Impl":{"unsafety":"Normal","polarity":"Positive","defaultness":"Final","defaultness_span":null,"constness":"NotConst","generics":{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":44,"col":17},"hi":{"line":44,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":44,"col":17},"hi":{"line":44,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"of_trait":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"cmp"},"disambiguator":0},{"data":{"TypeNs":"PartialEq"},"disambiguator":0}],"index":[1,2310]},"generic_args":[{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}}},{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}}}]},"self_ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}},"items":[{"ident":["eq",{"lo":{"line":42,"col":33},"hi":{"line":42,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":13},{"data":{"ValueNs":"eq"},"disambiguator":0}],"index":[0,204]},"generics":{"params":[{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":13},{"data":{"ValueNs":"eq"},"disambiguator":0}],"index":[0,204]},"local_id":32},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":13},{"data":{"ValueNs":"eq"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,279]},"name":"Fresh","span":{"lo":{"line":42,"col":33},"hi":{"line":42,"col":34},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]},{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":13},{"data":{"ValueNs":"eq"},"disambiguator":0}],"index":[0,204]},"local_id":33},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":13},{"data":{"ValueNs":"eq"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":1}],"index":[0,280]},"name":"Fresh","span":{"lo":{"line":42,"col":33},"hi":{"line":42,"col":34},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]}],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":42,"col":33},"hi":{"line":42,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":42,"col":33},"hi":{"line":42,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"kind":{"Fn":{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"params":[{"pat":{"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}},false]},"span":{"lo":{"line":42,"col":33},"hi":{"line":42,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Binding":{"mutability":false,"mode":"ByValue","var":{"name":"self","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":13},{"data":{"ValueNs":"eq"},"disambiguator":0}],"index":[0,204]},"local_id":2}},"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}},false]},"subpattern":null,"is_primary":true}},"hir_id":null,"attributes":[]},"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}},false]},"ty_span":null,"self_kind":"ImmRef","hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":13},{"data":{"ValueNs":"eq"},"disambiguator":0}],"index":[0,204]},"local_id":1},"attributes":[]},{"pat":{"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}},false]},"span":{"lo":{"line":42,"col":33},"hi":{"line":42,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Binding":{"mutability":false,"mode":"ByValue","var":{"name":"other","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":13},{"data":{"ValueNs":"eq"},"disambiguator":0}],"index":[0,204]},"local_id":4}},"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}},false]},"subpattern":null,"is_primary":true}},"hir_id":null,"attributes":[]},"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}},false]},"ty_span":null,"self_kind":null,"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":13},{"data":{"ValueNs":"eq"},"disambiguator":0}],"index":[0,204]},"local_id":3},"attributes":[]}],"ret":"Bool","body":{"ty":"Bool","span":{"lo":{"line":42,"col":33},"hi":{"line":42,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Block":{"targeted_by_break":false,"region_scope":{"id":30,"data":"Node"},"opt_destruction_scope":null,"span":{"lo":{"line":42,"col":33},"hi":{"line":42,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"stmts":[{"kind":{"Let":{"remainder_scope":{"id":30,"data":{"Remainder":0}},"init_scope":{"id":5,"data":"Node"},"pattern":{"ty":{"Uint":"U8"},"span":{"lo":{"line":42,"col":33},"hi":{"line":42,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Binding":{"mutability":false,"mode":"ByValue","var":{"name":"__self_tag","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":13},{"data":{"ValueNs":"eq"},"disambiguator":0}],"index":[0,204]},"local_id":14}},"ty":{"Uint":"U8"},"subpattern":null,"is_primary":true}},"hir_id":null,"attributes":[]},"initializer":{"ty":{"Uint":"U8"},"span":{"lo":{"line":42,"col":33},"hi":{"line":42,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Call":{"ty":{"Arrow":{"value":{"inputs":[{"Ref":[{"kind":{"ReLateBound":[0,{"var":0,"kind":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"intrinsics"},"disambiguator":0},{"data":"ForeignMod","disambiguator":0},{"data":{"ValueNs":"discriminant_value"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[1,51566]},"'_"]}}]}},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}},false]}],"output":{"Alias":["Projection",{"substs":[{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}}}],"trait_def_id":[{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"DiscriminantKind"},"disambiguator":0}],"index":[1,2734]},{"impl":{"Builtin":{"trait":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"DiscriminantKind"},"disambiguator":0}],"index":[1,2734]},"generic_args":[{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}}}]}}},"args":[]}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"DiscriminantKind"},"disambiguator":0},{"data":{"TypeNs":"Discriminant"},"disambiguator":0}],"index":[1,2735]}}]},"c_variadic":false,"unsafety":"Normal","abi":{"Abi":{"todo":"RustIntrinsic"}}},"bound_vars":[{"Region":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"intrinsics"},"disambiguator":0},{"data":"ForeignMod","disambiguator":0},{"data":{"ValueNs":"discriminant_value"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[1,51566]},"'_"]}}]}},"fun":{"ty":{"Arrow":{"value":{"inputs":[{"Ref":[{"kind":{"ReLateBound":[0,{"var":0,"kind":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"intrinsics"},"disambiguator":0},{"data":"ForeignMod","disambiguator":0},{"data":{"ValueNs":"discriminant_value"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[1,51566]},"'_"]}}]}},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}},false]}],"output":{"Alias":["Projection",{"substs":[{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}}}],"trait_def_id":[{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"DiscriminantKind"},"disambiguator":0}],"index":[1,2734]},{"impl":{"Builtin":{"trait":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"DiscriminantKind"},"disambiguator":0}],"index":[1,2734]},"generic_args":[{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}}}]}}},"args":[]}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"DiscriminantKind"},"disambiguator":0},{"data":{"TypeNs":"Discriminant"},"disambiguator":0}],"index":[1,2735]}}]},"c_variadic":false,"unsafety":"Normal","abi":{"Abi":{"todo":"RustIntrinsic"}}},"bound_vars":[{"Region":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"intrinsics"},"disambiguator":0},{"data":"ForeignMod","disambiguator":0},{"data":{"ValueNs":"discriminant_value"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[1,51566]},"'_"]}}]}},"span":{"lo":{"line":42,"col":33},"hi":{"line":42,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"GlobalName":{"id":{"krate":"core","path":[{"data":{"TypeNs":"intrinsics"},"disambiguator":0},{"data":"ForeignMod","disambiguator":0},{"data":{"ValueNs":"discriminant_value"},"disambiguator":0}],"index":[1,1415]}}},"hir_id":null,"attributes":[]},"args":[{"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}},false]},"span":{"lo":{"line":42,"col":33},"hi":{"line":42,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Borrow":{"borrow_kind":"Shared","arg":{"ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}},"span":{"lo":{"line":42,"col":33},"hi":{"line":42,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Deref":{"arg":{"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}},false]},"span":{"lo":{"line":42,"col":33},"hi":{"line":42,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"VarRef":{"id":{"name":"self","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":13},{"data":{"ValueNs":"eq"},"disambiguator":0}],"index":[0,204]},"local_id":2}}}},"hir_id":null,"attributes":[]}}},"hir_id":null,"attributes":[]}}},"hir_id":[204,11],"attributes":[]}],"from_hir_call":true,"fn_span":{"lo":{"line":42,"col":33},"hi":{"line":42,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"impl":null}},"hir_id":[204,6],"attributes":[]},"else_block":null,"lint_level":{"Explicit":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":13},{"data":{"ValueNs":"eq"},"disambiguator":0}],"index":[0,204]},"local_id":13}},"attributes":[]}},"opt_destruction_scope":{"id":5,"data":"Destruction"}},{"kind":{"Let":{"remainder_scope":{"id":30,"data":{"Remainder":1}},"init_scope":{"id":15,"data":"Node"},"pattern":{"ty":{"Uint":"U8"},"span":{"lo":{"line":42,"col":33},"hi":{"line":42,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Binding":{"mutability":false,"mode":"ByValue","var":{"name":"__arg1_tag","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":13},{"data":{"ValueNs":"eq"},"disambiguator":0}],"index":[0,204]},"local_id":24}},"ty":{"Uint":"U8"},"subpattern":null,"is_primary":true}},"hir_id":null,"attributes":[]},"initializer":{"ty":{"Uint":"U8"},"span":{"lo":{"line":42,"col":33},"hi":{"line":42,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Call":{"ty":{"Arrow":{"value":{"inputs":[{"Ref":[{"kind":{"ReLateBound":[0,{"var":0,"kind":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"intrinsics"},"disambiguator":0},{"data":"ForeignMod","disambiguator":0},{"data":{"ValueNs":"discriminant_value"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[1,51566]},"'_"]}}]}},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}},false]}],"output":{"Alias":["Projection",{"substs":[{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}}}],"trait_def_id":[{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"DiscriminantKind"},"disambiguator":0}],"index":[1,2734]},{"impl":{"Builtin":{"trait":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"DiscriminantKind"},"disambiguator":0}],"index":[1,2734]},"generic_args":[{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}}}]}}},"args":[]}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"DiscriminantKind"},"disambiguator":0},{"data":{"TypeNs":"Discriminant"},"disambiguator":0}],"index":[1,2735]}}]},"c_variadic":false,"unsafety":"Normal","abi":{"Abi":{"todo":"RustIntrinsic"}}},"bound_vars":[{"Region":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"intrinsics"},"disambiguator":0},{"data":"ForeignMod","disambiguator":0},{"data":{"ValueNs":"discriminant_value"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[1,51566]},"'_"]}}]}},"fun":{"ty":{"Arrow":{"value":{"inputs":[{"Ref":[{"kind":{"ReLateBound":[0,{"var":0,"kind":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"intrinsics"},"disambiguator":0},{"data":"ForeignMod","disambiguator":0},{"data":{"ValueNs":"discriminant_value"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[1,51566]},"'_"]}}]}},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}},false]}],"output":{"Alias":["Projection",{"substs":[{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}}}],"trait_def_id":[{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"DiscriminantKind"},"disambiguator":0}],"index":[1,2734]},{"impl":{"Builtin":{"trait":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"DiscriminantKind"},"disambiguator":0}],"index":[1,2734]},"generic_args":[{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}}}]}}},"args":[]}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"DiscriminantKind"},"disambiguator":0},{"data":{"TypeNs":"Discriminant"},"disambiguator":0}],"index":[1,2735]}}]},"c_variadic":false,"unsafety":"Normal","abi":{"Abi":{"todo":"RustIntrinsic"}}},"bound_vars":[{"Region":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"intrinsics"},"disambiguator":0},{"data":"ForeignMod","disambiguator":0},{"data":{"ValueNs":"discriminant_value"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[1,51566]},"'_"]}}]}},"span":{"lo":{"line":42,"col":33},"hi":{"line":42,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"GlobalName":{"id":{"krate":"core","path":[{"data":{"TypeNs":"intrinsics"},"disambiguator":0},{"data":"ForeignMod","disambiguator":0},{"data":{"ValueNs":"discriminant_value"},"disambiguator":0}],"index":[1,1415]}}},"hir_id":null,"attributes":[]},"args":[{"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}},false]},"span":{"lo":{"line":42,"col":33},"hi":{"line":42,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Borrow":{"borrow_kind":"Shared","arg":{"ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}},"span":{"lo":{"line":42,"col":33},"hi":{"line":42,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Deref":{"arg":{"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}},false]},"span":{"lo":{"line":42,"col":33},"hi":{"line":42,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"VarRef":{"id":{"name":"other","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":13},{"data":{"ValueNs":"eq"},"disambiguator":0}],"index":[0,204]},"local_id":4}}}},"hir_id":null,"attributes":[]}}},"hir_id":null,"attributes":[]}}},"hir_id":[204,21],"attributes":[]}],"from_hir_call":true,"fn_span":{"lo":{"line":42,"col":33},"hi":{"line":42,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"impl":null}},"hir_id":[204,16],"attributes":[]},"else_block":null,"lint_level":{"Explicit":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":13},{"data":{"ValueNs":"eq"},"disambiguator":0}],"index":[0,204]},"local_id":23}},"attributes":[]}},"opt_destruction_scope":{"id":15,"data":"Destruction"}}],"expr":{"ty":"Bool","span":{"lo":{"line":42,"col":33},"hi":{"line":42,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Binary":{"op":"Eq","lhs":{"ty":{"Uint":"U8"},"span":{"lo":{"line":42,"col":33},"hi":{"line":42,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"VarRef":{"id":{"name":"__self_tag","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":13},{"data":{"ValueNs":"eq"},"disambiguator":0}],"index":[0,204]},"local_id":14}}}},"hir_id":[204,26],"attributes":[]},"rhs":{"ty":{"Uint":"U8"},"span":{"lo":{"line":42,"col":33},"hi":{"line":42,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"VarRef":{"id":{"name":"__arg1_tag","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":13},{"data":{"ValueNs":"eq"},"disambiguator":0}],"index":[0,204]},"local_id":24}}}},"hir_id":[204,28],"attributes":[]}}},"hir_id":[204,25],"attributes":[]},"safety_mode":"Safe"}},"hir_id":[204,31],"attributes":[]},"sig_span":{"lo":{"line":42,"col":33},"hi":{"line":42,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}},"defaultness":"Final","span":{"lo":{"line":42,"col":33},"hi":{"line":42,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":42,"col":33},"hi":{"line":42,"col":33},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"inline","args":"Empty","tokens":null},"tokens":null}},"id":405,"style":"Outer","span":{"lo":{"line":42,"col":33},"hi":{"line":42,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"automatically_derived","args":"Empty","tokens":null},"tokens":null}},"id":406,"style":"Outer","span":{"lo":{"line":42,"col":33},"hi":{"line":42,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}}]}},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"automatically_derived","args":"Empty","tokens":null},"tokens":null}},"id":406,"style":"Outer","span":{"lo":{"line":42,"col":33},"hi":{"line":42,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[{"kind":{"Macro":["Derive","PartialEq"]},"call_site":{"lo":{"line":42,"col":33},"hi":{"line":42,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"def_site":{"lo":{"line":236,"col":0},"hi":{"line":236,"col":19},"filename":{"Real":{"Remapped":{"local_path":"/home/au538501/.rustup/toolchains/nightly-2023-06-02-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/cmp.rs","virtual_name":"/rustc/d59363ad0b6391b7fc5bbb02c9ccf9300eef3753/library/core/src/cmp.rs"}}}},"allow_internal_unstable":["core_intrinsics","structural_match"],"edition":"Edition2021","macro_def_id":{"krate":"core","path":[{"data":{"TypeNs":"cmp"},"disambiguator":0},{"data":{"MacroNs":"PartialEq"},"disambiguator":0}],"index":[1,2314]},"parent_module":{"krate":"core","path":[{"data":{"TypeNs":"cmp"},"disambiguator":0}],"index":[1,2288]},"allow_internal_unsafe":false,"local_inner_macros":false,"collapse_debuginfo":false}]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"NotPayableError"},"disambiguator":0}],"index":[0,205]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"NotPayableError"},"disambiguator":0}],"index":[0,205]},"span":{"lo":{"line":54,"col":0},"hi":{"line":54,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":54,"col":0},"hi":{"line":54,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Struct":[{"Unit":[{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"NotPayableError"},"disambiguator":0}],"index":[0,205]},"local_id":1},{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"NotPayableError"},"disambiguator":0},{"data":"Ctor","disambiguator":0}],"index":[0,206]}]},{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":54,"col":26},"hi":{"line":54,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":54,"col":26},"hi":{"line":54,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}]},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Error triggered when a non-zero amount of CCD is sent to a contract"]},"id":76,"style":"Outer","span":{"lo":{"line":51,"col":0},"hi":{"line":51,"col":71},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," init or receive function that is not marked as `payable`."]},"id":77,"style":"Outer","span":{"lo":{"line":52,"col":0},"hi":{"line":52,"col":61},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":14}],"index":[0,207]},"span":{"lo":{"line":53,"col":9},"hi":{"line":53,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":53,"col":9},"hi":{"line":53,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Impl":{"unsafety":"Normal","polarity":"Positive","defaultness":"Final","defaultness_span":null,"constness":"NotConst","generics":{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":54,"col":26},"hi":{"line":54,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":54,"col":26},"hi":{"line":54,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"of_trait":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"clone"},"disambiguator":0},{"data":{"TypeNs":"Clone"},"disambiguator":0}],"index":[1,2262]},"generic_args":[{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"NotPayableError"},"disambiguator":0}],"index":[0,205]}}}}]},"self_ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"NotPayableError"},"disambiguator":0}],"index":[0,205]}}},"items":[{"ident":["clone",{"lo":{"line":53,"col":9},"hi":{"line":53,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":14},{"data":{"ValueNs":"clone"},"disambiguator":0}],"index":[0,208]},"generics":{"params":[{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":14},{"data":{"ValueNs":"clone"},"disambiguator":0}],"index":[0,208]},"local_id":8},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":14},{"data":{"ValueNs":"clone"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,281]},"name":"Fresh","span":{"lo":{"line":53,"col":9},"hi":{"line":53,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]}],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":53,"col":9},"hi":{"line":53,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":53,"col":9},"hi":{"line":53,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"kind":{"Fn":{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"params":[{"pat":{"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"NotPayableError"},"disambiguator":0}],"index":[0,205]}}},false]},"span":{"lo":{"line":53,"col":9},"hi":{"line":53,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Binding":{"mutability":false,"mode":"ByValue","var":{"name":"self","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":14},{"data":{"ValueNs":"clone"},"disambiguator":0}],"index":[0,208]},"local_id":2}},"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"NotPayableError"},"disambiguator":0}],"index":[0,205]}}},false]},"subpattern":null,"is_primary":true}},"hir_id":null,"attributes":[]},"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"NotPayableError"},"disambiguator":0}],"index":[0,205]}}},false]},"ty_span":null,"self_kind":"ImmRef","hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":14},{"data":{"ValueNs":"clone"},"disambiguator":0}],"index":[0,208]},"local_id":1},"attributes":[]}],"ret":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"NotPayableError"},"disambiguator":0}],"index":[0,205]}}},"body":{"ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"NotPayableError"},"disambiguator":0}],"index":[0,205]}}},"span":{"lo":{"line":53,"col":9},"hi":{"line":53,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Block":{"targeted_by_break":false,"region_scope":{"id":6,"data":"Node"},"opt_destruction_scope":null,"span":{"lo":{"line":53,"col":9},"hi":{"line":53,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"stmts":[],"expr":{"ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"NotPayableError"},"disambiguator":0}],"index":[0,205]}}},"span":{"lo":{"line":53,"col":9},"hi":{"line":53,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Deref":{"arg":{"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"NotPayableError"},"disambiguator":0}],"index":[0,205]}}},false]},"span":{"lo":{"line":53,"col":9},"hi":{"line":53,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"VarRef":{"id":{"name":"self","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":14},{"data":{"ValueNs":"clone"},"disambiguator":0}],"index":[0,208]},"local_id":2}}}},"hir_id":[208,4],"attributes":[]}}},"hir_id":[208,3],"attributes":[]},"safety_mode":"Safe"}},"hir_id":[208,7],"attributes":[]},"sig_span":{"lo":{"line":53,"col":9},"hi":{"line":53,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}},"defaultness":"Final","span":{"lo":{"line":53,"col":9},"hi":{"line":53,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":53,"col":9},"hi":{"line":53,"col":9},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"inline","args":"Empty","tokens":null},"tokens":null}},"id":407,"style":"Outer","span":{"lo":{"line":53,"col":9},"hi":{"line":53,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"automatically_derived","args":"Empty","tokens":null},"tokens":null}},"id":408,"style":"Outer","span":{"lo":{"line":53,"col":9},"hi":{"line":53,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}}]}},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"automatically_derived","args":"Empty","tokens":null},"tokens":null}},"id":408,"style":"Outer","span":{"lo":{"line":53,"col":9},"hi":{"line":53,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[{"kind":{"Macro":["Derive","Clone"]},"call_site":{"lo":{"line":53,"col":9},"hi":{"line":53,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"def_site":{"lo":{"line":138,"col":0},"hi":{"line":138,"col":15},"filename":{"Real":{"Remapped":{"local_path":"/home/au538501/.rustup/toolchains/nightly-2023-06-02-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/clone.rs","virtual_name":"/rustc/d59363ad0b6391b7fc5bbb02c9ccf9300eef3753/library/core/src/clone.rs"}}}},"allow_internal_unstable":["core_intrinsics","derive_clone_copy"],"edition":"Edition2021","macro_def_id":{"krate":"core","path":[{"data":{"TypeNs":"clone"},"disambiguator":0},{"data":{"MacroNs":"Clone"},"disambiguator":0}],"index":[1,2265]},"parent_module":{"krate":"core","path":[{"data":{"TypeNs":"clone"},"disambiguator":0}],"index":[1,2261]},"allow_internal_unsafe":false,"local_inner_macros":false,"collapse_debuginfo":false}]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":15}],"index":[0,209]},"span":{"lo":{"line":53,"col":16},"hi":{"line":53,"col":20},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":53,"col":16},"hi":{"line":53,"col":20},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Impl":{"unsafety":"Normal","polarity":"Positive","defaultness":"Final","defaultness_span":null,"constness":"NotConst","generics":{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":54,"col":26},"hi":{"line":54,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":54,"col":26},"hi":{"line":54,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"of_trait":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"Copy"},"disambiguator":0}],"index":[1,2694]},"generic_args":[{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"NotPayableError"},"disambiguator":0}],"index":[0,205]}}}}]},"self_ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"NotPayableError"},"disambiguator":0}],"index":[0,205]}}},"items":[]}},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"automatically_derived","args":"Empty","tokens":null},"tokens":null}},"id":409,"style":"Outer","span":{"lo":{"line":53,"col":16},"hi":{"line":53,"col":20},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[{"kind":{"Macro":["Derive","Copy"]},"call_site":{"lo":{"line":53,"col":16},"hi":{"line":53,"col":20},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"def_site":{"lo":{"line":458,"col":0},"hi":{"line":458,"col":14},"filename":{"Real":{"Remapped":{"local_path":"/home/au538501/.rustup/toolchains/nightly-2023-06-02-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/marker.rs","virtual_name":"/rustc/d59363ad0b6391b7fc5bbb02c9ccf9300eef3753/library/core/src/marker.rs"}}}},"allow_internal_unstable":["core_intrinsics","derive_clone_copy"],"edition":"Edition2021","macro_def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"MacroNs":"Copy"},"disambiguator":0}],"index":[1,2695]},"parent_module":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0}],"index":[1,2675]},"allow_internal_unsafe":false,"local_inner_macros":false,"collapse_debuginfo":false}]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":16}],"index":[0,210]},"span":{"lo":{"line":53,"col":22},"hi":{"line":53,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":53,"col":22},"hi":{"line":53,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Impl":{"unsafety":"Normal","polarity":"Positive","defaultness":"Final","defaultness_span":null,"constness":"NotConst","generics":{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":54,"col":26},"hi":{"line":54,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":54,"col":26},"hi":{"line":54,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"of_trait":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"Debug"},"disambiguator":0}],"index":[1,9139]},"generic_args":[{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"NotPayableError"},"disambiguator":0}],"index":[0,205]}}}}]},"self_ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"NotPayableError"},"disambiguator":0}],"index":[0,205]}}},"items":[{"ident":["fmt",{"lo":{"line":53,"col":22},"hi":{"line":53,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":16},{"data":{"ValueNs":"fmt"},"disambiguator":0}],"index":[0,211]},"generics":{"params":[{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":16},{"data":{"ValueNs":"fmt"},"disambiguator":0}],"index":[0,211]},"local_id":18},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":16},{"data":{"ValueNs":"fmt"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,282]},"name":"Fresh","span":{"lo":{"line":53,"col":22},"hi":{"line":53,"col":23},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]},{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":16},{"data":{"ValueNs":"fmt"},"disambiguator":0}],"index":[0,211]},"local_id":19},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":16},{"data":{"ValueNs":"fmt"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":1}],"index":[0,283]},"name":"Fresh","span":{"lo":{"line":53,"col":22},"hi":{"line":53,"col":23},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]},{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":16},{"data":{"ValueNs":"fmt"},"disambiguator":0}],"index":[0,211]},"local_id":20},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":16},{"data":{"ValueNs":"fmt"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":2}],"index":[0,284]},"name":"Fresh","span":{"lo":{"line":53,"col":22},"hi":{"line":53,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]}],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":53,"col":22},"hi":{"line":53,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":53,"col":22},"hi":{"line":53,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"kind":{"Fn":{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"params":[{"pat":{"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"NotPayableError"},"disambiguator":0}],"index":[0,205]}}},false]},"span":{"lo":{"line":53,"col":22},"hi":{"line":53,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Binding":{"mutability":false,"mode":"ByValue","var":{"name":"self","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":16},{"data":{"ValueNs":"fmt"},"disambiguator":0}],"index":[0,211]},"local_id":2}},"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"NotPayableError"},"disambiguator":0}],"index":[0,205]}}},false]},"subpattern":null,"is_primary":true}},"hir_id":null,"attributes":[]},"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"NotPayableError"},"disambiguator":0}],"index":[0,205]}}},false]},"ty_span":null,"self_kind":"ImmRef","hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":16},{"data":{"ValueNs":"fmt"},"disambiguator":0}],"index":[0,211]},"local_id":1},"attributes":[]},{"pat":{"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[{"Lifetime":{"kind":"ReErased"}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"Formatter"},"disambiguator":0}],"index":[1,9114]}}},true]},"span":{"lo":{"line":53,"col":22},"hi":{"line":53,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Binding":{"mutability":false,"mode":"ByValue","var":{"name":"f","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":16},{"data":{"ValueNs":"fmt"},"disambiguator":0}],"index":[0,211]},"local_id":4}},"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[{"Lifetime":{"kind":"ReErased"}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"Formatter"},"disambiguator":0}],"index":[1,9114]}}},true]},"subpattern":null,"is_primary":true}},"hir_id":null,"attributes":[]},"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[{"Lifetime":{"kind":"ReErased"}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"Formatter"},"disambiguator":0}],"index":[1,9114]}}},true]},"ty_span":null,"self_kind":null,"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":16},{"data":{"ValueNs":"fmt"},"disambiguator":0}],"index":[0,211]},"local_id":3},"attributes":[]}],"ret":{"Adt":{"generic_args":[{"Type":{"Tuple":[]}},{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"Error"},"disambiguator":0}],"index":[1,42444]}}}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"result"},"disambiguator":0},{"data":{"TypeNs":"Result"},"disambiguator":0}],"index":[1,41506]}}},"body":{"ty":{"Adt":{"generic_args":[{"Type":{"Tuple":[]}},{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"Error"},"disambiguator":0}],"index":[1,42444]}}}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"result"},"disambiguator":0},{"data":{"TypeNs":"Result"},"disambiguator":0}],"index":[1,41506]}}},"span":{"lo":{"line":53,"col":22},"hi":{"line":53,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Block":{"targeted_by_break":false,"region_scope":{"id":16,"data":"Node"},"opt_destruction_scope":null,"span":{"lo":{"line":53,"col":22},"hi":{"line":53,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"stmts":[],"expr":{"ty":{"Adt":{"generic_args":[{"Type":{"Tuple":[]}},{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"Error"},"disambiguator":0}],"index":[1,42444]}}}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"result"},"disambiguator":0},{"data":{"TypeNs":"Result"},"disambiguator":0}],"index":[1,41506]}}},"span":{"lo":{"line":53,"col":22},"hi":{"line":53,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Call":{"ty":{"Arrow":{"value":{"inputs":[{"Ref":[{"kind":{"ReLateBound":[0,{"var":0,"kind":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"write_str"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[1,53916]},"'_"]}}]}},{"Adt":{"generic_args":[{"Lifetime":{"kind":"ReErased"}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"Formatter"},"disambiguator":0}],"index":[1,9114]}}},true]},{"Ref":[{"kind":{"ReLateBound":[0,{"var":1,"kind":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"write_str"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":1}],"index":[1,53917]},"'_"]}}]}},"Str",false]}],"output":{"Adt":{"generic_args":[{"Type":{"Tuple":[]}},{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"Error"},"disambiguator":0}],"index":[1,42444]}}}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"result"},"disambiguator":0},{"data":{"TypeNs":"Result"},"disambiguator":0}],"index":[1,41506]}}},"c_variadic":false,"unsafety":"Normal","abi":{"Abi":{"todo":"Rust"}}},"bound_vars":[{"Region":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"write_str"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[1,53916]},"'_"]}},{"Region":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"write_str"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":1}],"index":[1,53917]},"'_"]}}]}},"fun":{"ty":{"Arrow":{"value":{"inputs":[{"Ref":[{"kind":{"ReLateBound":[0,{"var":0,"kind":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"write_str"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[1,53916]},"'_"]}}]}},{"Adt":{"generic_args":[{"Lifetime":{"kind":"ReErased"}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"Formatter"},"disambiguator":0}],"index":[1,9114]}}},true]},{"Ref":[{"kind":{"ReLateBound":[0,{"var":1,"kind":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"write_str"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":1}],"index":[1,53917]},"'_"]}}]}},"Str",false]}],"output":{"Adt":{"generic_args":[{"Type":{"Tuple":[]}},{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"Error"},"disambiguator":0}],"index":[1,42444]}}}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"result"},"disambiguator":0},{"data":{"TypeNs":"Result"},"disambiguator":0}],"index":[1,41506]}}},"c_variadic":false,"unsafety":"Normal","abi":{"Abi":{"todo":"Rust"}}},"bound_vars":[{"Region":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"write_str"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[1,53916]},"'_"]}},{"Region":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"write_str"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":1}],"index":[1,53917]},"'_"]}}]}},"span":{"lo":{"line":53,"col":22},"hi":{"line":53,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"GlobalName":{"id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"write_str"},"disambiguator":0}],"index":[1,9184]}}},"hir_id":null,"attributes":[]},"args":[{"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[{"Lifetime":{"kind":"ReErased"}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"Formatter"},"disambiguator":0}],"index":[1,9114]}}},true]},"span":{"lo":{"line":53,"col":22},"hi":{"line":53,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Borrow":{"borrow_kind":{"Mut":{"allow_two_phase_borrow":true}},"arg":{"ty":{"Adt":{"generic_args":[{"Lifetime":{"kind":"ReErased"}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"Formatter"},"disambiguator":0}],"index":[1,9114]}}},"span":{"lo":{"line":53,"col":22},"hi":{"line":53,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Deref":{"arg":{"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[{"Lifetime":{"kind":"ReErased"}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"Formatter"},"disambiguator":0}],"index":[1,9114]}}},true]},"span":{"lo":{"line":53,"col":22},"hi":{"line":53,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"VarRef":{"id":{"name":"f","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":16},{"data":{"ValueNs":"fmt"},"disambiguator":0}],"index":[0,211]},"local_id":4}}}},"hir_id":null,"attributes":[]}}},"hir_id":null,"attributes":[]}}},"hir_id":[211,13],"attributes":[]},{"ty":{"Ref":[{"kind":"ReErased"},"Str",false]},"span":{"lo":{"line":53,"col":22},"hi":{"line":53,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Borrow":{"borrow_kind":"Shared","arg":{"ty":"Str","span":{"lo":{"line":53,"col":22},"hi":{"line":53,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Deref":{"arg":{"ty":{"Ref":[{"kind":"ReErased"},"Str",false]},"span":{"lo":{"line":53,"col":22},"hi":{"line":53,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Literal":{"lit":{"node":{"Str":["NotPayableError","Cooked"]},"span":{"lo":{"line":53,"col":22},"hi":{"line":53,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"neg":false}},"hir_id":null,"attributes":[]}}},"hir_id":null,"attributes":[]}}},"hir_id":[211,15],"attributes":[]}],"from_hir_call":true,"fn_span":{"lo":{"line":53,"col":22},"hi":{"line":53,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"impl":null}},"hir_id":[211,5],"attributes":[]},"safety_mode":"Safe"}},"hir_id":[211,17],"attributes":[]},"sig_span":{"lo":{"line":53,"col":22},"hi":{"line":53,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}},"defaultness":"Final","span":{"lo":{"line":53,"col":22},"hi":{"line":53,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":53,"col":22},"hi":{"line":53,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"attributes":{"attributes":[],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"automatically_derived","args":"Empty","tokens":null},"tokens":null}},"id":410,"style":"Outer","span":{"lo":{"line":53,"col":22},"hi":{"line":53,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}}]}},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"automatically_derived","args":"Empty","tokens":null},"tokens":null}},"id":410,"style":"Outer","span":{"lo":{"line":53,"col":22},"hi":{"line":53,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[{"kind":{"Macro":["Derive","Debug"]},"call_site":{"lo":{"line":53,"col":22},"hi":{"line":53,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"def_site":{"lo":{"line":588,"col":4},"hi":{"line":588,"col":19},"filename":{"Real":{"Remapped":{"local_path":"/home/au538501/.rustup/toolchains/nightly-2023-06-02-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/fmt/mod.rs","virtual_name":"/rustc/d59363ad0b6391b7fc5bbb02c9ccf9300eef3753/library/core/src/fmt/mod.rs"}}}},"allow_internal_unstable":["core_intrinsics","fmt_helpers_for_derive"],"edition":"Edition2021","macro_def_id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"macros"},"disambiguator":0},{"data":{"MacroNs":"Debug"},"disambiguator":0}],"index":[1,9142]},"parent_module":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"macros"},"disambiguator":0}],"index":[1,9141]},"allow_internal_unsafe":false,"local_inner_macros":false,"collapse_debuginfo":false}]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Action"},"disambiguator":0}],"index":[0,65]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Action"},"disambiguator":0}],"index":[0,65]},"span":{"lo":{"line":64,"col":0},"hi":{"line":66,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":64,"col":0},"hi":{"line":66,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Struct":[{"Struct":[[{"span":{"lo":{"line":65,"col":4},"hi":{"line":65,"col":35},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":65,"col":4},"hi":{"line":65,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"ident":["_private_action",{"lo":{"line":65,"col":15},"hi":{"line":65,"col":30},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}],"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Action"},"disambiguator":0}],"index":[0,65]},"local_id":3},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Action"},"disambiguator":0},{"data":{"ValueNs":"_private_action"},"disambiguator":0}],"index":[0,66]},"ty":{"Uint":"U32"},"attributes":[]}],false]},{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":64,"col":17},"hi":{"line":64,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":64,"col":17},"hi":{"line":64,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}]},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Actions that can be produced at the end of a contract execution. This"]},"id":79,"style":"Outer","span":{"lo":{"line":56,"col":0},"hi":{"line":56,"col":73},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," type is deliberately not cloneable so that we can enforce that"]},"id":80,"style":"Outer","span":{"lo":{"line":57,"col":0},"hi":{"line":57,"col":66},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," `and_then` and `or_else` can only be used when more than one event is"]},"id":81,"style":"Outer","span":{"lo":{"line":58,"col":0},"hi":{"line":58,"col":73},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," created."]},"id":82,"style":"Outer","span":{"lo":{"line":59,"col":0},"hi":{"line":59,"col":12},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line",""]},"id":83,"style":"Outer","span":{"lo":{"line":60,"col":0},"hi":{"line":60,"col":3},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," This type is marked as `must_use` since functions that produce"]},"id":84,"style":"Outer","span":{"lo":{"line":61,"col":0},"hi":{"line":61,"col":66},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," values of the type are effectful."]},"id":85,"style":"Outer","span":{"lo":{"line":62,"col":0},"hi":{"line":62,"col":37},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"must_use","args":"Empty","tokens":null},"tokens":null}},"id":86,"style":"Outer","span":{"lo":{"line":63,"col":0},"hi":{"line":63,"col":11},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":0}],"index":[0,67]},"span":{"lo":{"line":68,"col":0},"hi":{"line":72,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":68,"col":0},"hi":{"line":72,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Impl":{"unsafety":"Normal","polarity":"Positive","defaultness":"Final","defaultness_span":null,"constness":"NotConst","generics":{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":68,"col":11},"hi":{"line":68,"col":11},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":68,"col":4},"hi":{"line":68,"col":4},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"of_trait":null,"self_ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Action"},"disambiguator":0}],"index":[0,65]}}},"items":[{"ident":["tag",{"lo":{"line":69,"col":11},"hi":{"line":69,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":0},{"data":{"ValueNs":"tag"},"disambiguator":0}],"index":[0,68]},"generics":{"params":[{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":0},{"data":{"ValueNs":"tag"},"disambiguator":0}],"index":[0,68]},"local_id":8},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":0},{"data":{"ValueNs":"tag"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,242]},"name":"Fresh","span":{"lo":{"line":69,"col":15},"hi":{"line":69,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]}],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":69,"col":28},"hi":{"line":69,"col":28},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":69,"col":14},"hi":{"line":69,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"kind":{"Fn":{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"params":[{"pat":{"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Action"},"disambiguator":0}],"index":[0,65]}}},false]},"span":{"lo":{"line":69,"col":15},"hi":{"line":69,"col":20},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Binding":{"mutability":false,"mode":"ByValue","var":{"name":"self","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":0},{"data":{"ValueNs":"tag"},"disambiguator":0}],"index":[0,68]},"local_id":2}},"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Action"},"disambiguator":0}],"index":[0,65]}}},false]},"subpattern":null,"is_primary":true}},"hir_id":null,"attributes":[]},"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Action"},"disambiguator":0}],"index":[0,65]}}},false]},"ty_span":null,"self_kind":"ImmRef","hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":0},{"data":{"ValueNs":"tag"},"disambiguator":0}],"index":[0,68]},"local_id":1},"attributes":[]}],"ret":{"Uint":"U32"},"body":{"ty":{"Uint":"U32"},"span":{"lo":{"line":69,"col":29},"hi":{"line":71,"col":5},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Block":{"targeted_by_break":false,"region_scope":{"id":6,"data":"Node"},"opt_destruction_scope":null,"span":{"lo":{"line":69,"col":29},"hi":{"line":71,"col":5},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"stmts":[],"expr":{"ty":{"Uint":"U32"},"span":{"lo":{"line":70,"col":8},"hi":{"line":70,"col":28},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Field":{"field":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Action"},"disambiguator":0},{"data":{"ValueNs":"_private_action"},"disambiguator":0}],"index":[0,66]},"lhs":{"ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Action"},"disambiguator":0}],"index":[0,65]}}},"span":{"lo":{"line":70,"col":8},"hi":{"line":70,"col":12},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Deref":{"arg":{"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Action"},"disambiguator":0}],"index":[0,65]}}},false]},"span":{"lo":{"line":70,"col":8},"hi":{"line":70,"col":12},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"VarRef":{"id":{"name":"self","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":0},{"data":{"ValueNs":"tag"},"disambiguator":0}],"index":[0,68]},"local_id":2}}}},"hir_id":null,"attributes":[]}}},"hir_id":[68,4],"attributes":[]}}},"hir_id":[68,3],"attributes":[]},"safety_mode":"Safe"}},"hir_id":[68,7],"attributes":[]},"sig_span":{"lo":{"line":69,"col":4},"hi":{"line":69,"col":28},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}},"defaultness":"Final","span":{"lo":{"line":69,"col":4},"hi":{"line":71,"col":5},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":69,"col":4},"hi":{"line":69,"col":7},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"attributes":{"attributes":[],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}}]}},"attributes":{"attributes":[],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"ValueNs":"_"},"disambiguator":0}],"index":[0,220]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"ValueNs":"_"},"disambiguator":0}],"index":[0,220]},"span":{"lo":{"line":80,"col":0},"hi":{"line":80,"col":33},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":80,"col":0},"hi":{"line":80,"col":33},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Const":[{"Tuple":[]},{"ty":{"Tuple":[]},"span":{"lo":{"line":80,"col":0},"hi":{"line":80,"col":33},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Block":{"targeted_by_break":false,"region_scope":{"id":4,"data":"Node"},"opt_destruction_scope":null,"span":{"lo":{"line":80,"col":0},"hi":{"line":80,"col":33},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"stmts":[],"expr":null,"safety_mode":"Safe"}},"hir_id":[220,2],"attributes":[]}]},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"cfg","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:80:1: 80:34 (#40), close: concordium/src/concordium_types.rs:80:1: 80:34 (#40) }"}},"delim":"Parenthesis","tokens":"hax_compilation"}},"tokens":null},"tokens":null}},"id":423,"style":"Outer","span":{"lo":{"line":80,"col":0},"hi":{"line":80,"col":33},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[{"kind":{"Macro":["Attr","hax_lib_macros::hax_attributes"]},"call_site":{"lo":{"line":80,"col":0},"hi":{"line":80,"col":33},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"def_site":{"lo":{"line":74,"col":0},"hi":{"line":74,"col":19},"filename":{"Real":{"LocalPath":"/home/au538501/Documents/LocalHacspec/hacspec-v2/hax-lib-macros/src/lib.rs"}}},"allow_internal_unstable":null,"edition":"Edition2021","macro_def_id":{"krate":"hax_lib_macros","path":[{"data":{"MacroNs":"hax_attributes"},"disambiguator":0}],"index":[9,35]},"parent_module":{"krate":"hax_lib_macros","path":[],"index":[9,0]},"allow_internal_unsafe":false,"local_inner_macros":false,"collapse_debuginfo":false}]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]},"span":{"lo":{"line":81,"col":0},"hi":{"line":84,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":81,"col":0},"hi":{"line":84,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Struct":[{"Struct":[[{"span":{"lo":{"line":83,"col":4},"hi":{"line":83,"col":30},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":83,"col":4},"hi":{"line":83,"col":7},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"ident":["error_code",{"lo":{"line":83,"col":8},"hi":{"line":83,"col":18},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}],"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]},"local_id":3},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0},{"data":{"ValueNs":"error_code"},"disambiguator":0}],"index":[0,223]},"ty":{"Adt":{"generic_args":[],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"num"},"disambiguator":0},{"data":{"TypeNs":"nonzero"},"disambiguator":0},{"data":{"TypeNs":"NonZeroI32"},"disambiguator":0}],"index":[1,22484]}}},"attributes":[{"kind":{"Normal":{"item":{"path":"_hax::uuid","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:80:1: 80:34 (#40), close: concordium/src/concordium_types.rs:80:1: 80:34 (#40) }"}},"delim":"Parenthesis","tokens":"\"47dd5abfb2084d42b68d2ab170d0aa95\""}},"tokens":null},"tokens":null}},"id":432,"style":"Outer","span":{"lo":{"line":80,"col":0},"hi":{"line":80,"col":33},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}]}],false]},{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":81,"col":17},"hi":{"line":81,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":81,"col":17},"hi":{"line":81,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}]},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"doc","args":{"Todo":"Eq(concordium/src/concordium_types.rs:74:1: 74:75 (#0), Hir(MetaItemLit { symbol: \" An error message, signalling rejection of a smart contract invocation.\", suffix: None, kind: Str(\" An error message, signalling rejection of a smart contract invocation.\", Cooked), span: concordium/src/concordium_types.rs:74:1: 74:75 (#0) }))"},"tokens":null},"tokens":null}},"id":426,"style":"Outer","span":{"lo":{"line":74,"col":0},"hi":{"line":74,"col":74},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"doc","args":{"Todo":"Eq(concordium/src/concordium_types.rs:75:1: 75:74 (#0), Hir(MetaItemLit { symbol: \" The client will see the error code as a reject reason; if a schema is\", suffix: None, kind: Str(\" The client will see the error code as a reject reason; if a schema is\", Cooked), span: concordium/src/concordium_types.rs:75:1: 75:74 (#0) }))"},"tokens":null},"tokens":null}},"id":427,"style":"Outer","span":{"lo":{"line":75,"col":0},"hi":{"line":75,"col":73},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"doc","args":{"Todo":"Eq(concordium/src/concordium_types.rs:76:1: 76:72 (#0), Hir(MetaItemLit { symbol: \" provided, the error message corresponding to the error code will be\", suffix: None, kind: Str(\" provided, the error message corresponding to the error code will be\", Cooked), span: concordium/src/concordium_types.rs:76:1: 76:72 (#0) }))"},"tokens":null},"tokens":null}},"id":428,"style":"Outer","span":{"lo":{"line":76,"col":0},"hi":{"line":76,"col":71},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"doc","args":{"Todo":"Eq(concordium/src/concordium_types.rs:77:1: 77:74 (#0), Hir(MetaItemLit { symbol: \" displayed. The valid range for an error code is from i32::MIN to -1.\", suffix: None, kind: Str(\" displayed. The valid range for an error code is from i32::MIN to -1.\", Cooked), span: concordium/src/concordium_types.rs:77:1: 77:74 (#0) }))"},"tokens":null},"tokens":null}},"id":429,"style":"Outer","span":{"lo":{"line":77,"col":0},"hi":{"line":77,"col":73},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"repr","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:79:7: 79:20 (#0), close: concordium/src/concordium_types.rs:79:7: 79:20 (#0) }"}},"delim":"Parenthesis","tokens":"transparent"}},"tokens":null},"tokens":null}},"id":430,"style":"Outer","span":{"lo":{"line":79,"col":0},"hi":{"line":79,"col":20},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":17}],"index":[0,212]},"span":{"lo":{"line":78,"col":9},"hi":{"line":78,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":78,"col":9},"hi":{"line":78,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Impl":{"unsafety":"Normal","polarity":"Positive","defaultness":"Final","defaultness_span":null,"constness":"NotConst","generics":{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":81,"col":17},"hi":{"line":81,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":81,"col":17},"hi":{"line":81,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"of_trait":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"Debug"},"disambiguator":0}],"index":[1,9139]},"generic_args":[{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]}}}}]},"self_ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]}}},"items":[{"ident":["fmt",{"lo":{"line":78,"col":9},"hi":{"line":78,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":17},{"data":{"ValueNs":"fmt"},"disambiguator":0}],"index":[0,213]},"generics":{"params":[{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":17},{"data":{"ValueNs":"fmt"},"disambiguator":0}],"index":[0,213]},"local_id":24},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":17},{"data":{"ValueNs":"fmt"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,285]},"name":"Fresh","span":{"lo":{"line":78,"col":9},"hi":{"line":78,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]},{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":17},{"data":{"ValueNs":"fmt"},"disambiguator":0}],"index":[0,213]},"local_id":25},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":17},{"data":{"ValueNs":"fmt"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":1}],"index":[0,286]},"name":"Fresh","span":{"lo":{"line":78,"col":9},"hi":{"line":78,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]},{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":17},{"data":{"ValueNs":"fmt"},"disambiguator":0}],"index":[0,213]},"local_id":26},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":17},{"data":{"ValueNs":"fmt"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":2}],"index":[0,287]},"name":"Fresh","span":{"lo":{"line":78,"col":9},"hi":{"line":78,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]}],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":78,"col":9},"hi":{"line":78,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":78,"col":9},"hi":{"line":78,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"kind":{"Fn":{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"params":[{"pat":{"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]}}},false]},"span":{"lo":{"line":78,"col":9},"hi":{"line":78,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Binding":{"mutability":false,"mode":"ByValue","var":{"name":"self","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":17},{"data":{"ValueNs":"fmt"},"disambiguator":0}],"index":[0,213]},"local_id":2}},"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]}}},false]},"subpattern":null,"is_primary":true}},"hir_id":null,"attributes":[]},"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]}}},false]},"ty_span":null,"self_kind":"ImmRef","hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":17},{"data":{"ValueNs":"fmt"},"disambiguator":0}],"index":[0,213]},"local_id":1},"attributes":[]},{"pat":{"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[{"Lifetime":{"kind":"ReErased"}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"Formatter"},"disambiguator":0}],"index":[1,9114]}}},true]},"span":{"lo":{"line":78,"col":9},"hi":{"line":78,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Binding":{"mutability":false,"mode":"ByValue","var":{"name":"f","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":17},{"data":{"ValueNs":"fmt"},"disambiguator":0}],"index":[0,213]},"local_id":4}},"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[{"Lifetime":{"kind":"ReErased"}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"Formatter"},"disambiguator":0}],"index":[1,9114]}}},true]},"subpattern":null,"is_primary":true}},"hir_id":null,"attributes":[]},"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[{"Lifetime":{"kind":"ReErased"}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"Formatter"},"disambiguator":0}],"index":[1,9114]}}},true]},"ty_span":null,"self_kind":null,"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":17},{"data":{"ValueNs":"fmt"},"disambiguator":0}],"index":[0,213]},"local_id":3},"attributes":[]}],"ret":{"Adt":{"generic_args":[{"Type":{"Tuple":[]}},{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"Error"},"disambiguator":0}],"index":[1,42444]}}}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"result"},"disambiguator":0},{"data":{"TypeNs":"Result"},"disambiguator":0}],"index":[1,41506]}}},"body":{"ty":{"Adt":{"generic_args":[{"Type":{"Tuple":[]}},{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"Error"},"disambiguator":0}],"index":[1,42444]}}}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"result"},"disambiguator":0},{"data":{"TypeNs":"Result"},"disambiguator":0}],"index":[1,41506]}}},"span":{"lo":{"line":78,"col":9},"hi":{"line":78,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Block":{"targeted_by_break":false,"region_scope":{"id":22,"data":"Node"},"opt_destruction_scope":null,"span":{"lo":{"line":78,"col":9},"hi":{"line":78,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"stmts":[],"expr":{"ty":{"Adt":{"generic_args":[{"Type":{"Tuple":[]}},{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"Error"},"disambiguator":0}],"index":[1,42444]}}}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"result"},"disambiguator":0},{"data":{"TypeNs":"Result"},"disambiguator":0}],"index":[1,41506]}}},"span":{"lo":{"line":78,"col":9},"hi":{"line":78,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Call":{"ty":{"Arrow":{"value":{"inputs":[{"Ref":[{"kind":{"ReLateBound":[0,{"var":0,"kind":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"debug_struct_field1_finish"},"disambiguator":0},{"data":{"LifetimeNs":"'b"},"disambiguator":0}],"index":[1,9200]},"'b"]}}]}},{"Adt":{"generic_args":[{"Lifetime":{"kind":"ReErased"}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"Formatter"},"disambiguator":0}],"index":[1,9114]}}},true]},{"Ref":[{"kind":{"ReLateBound":[0,{"var":1,"kind":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"debug_struct_field1_finish"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[1,53932]},"'_"]}}]}},"Str",false]},{"Ref":[{"kind":{"ReLateBound":[0,{"var":2,"kind":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"debug_struct_field1_finish"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":1}],"index":[1,53933]},"'_"]}}]}},"Str",false]},{"Ref":[{"kind":{"ReLateBound":[0,{"var":3,"kind":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"debug_struct_field1_finish"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":2}],"index":[1,53934]},"'_"]}}]}},{"Dynamic":[[{"value":{"ExistentialPredicate":{"todo":"Trait(core::fmt::Debug)"}},"bound_vars":[]}],{"kind":{"ReLateBound":[0,{"var":3,"kind":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"debug_struct_field1_finish"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":2}],"index":[1,53934]},"'_"]}}]}},"Dyn"]},false]}],"output":{"Adt":{"generic_args":[{"Type":{"Tuple":[]}},{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"Error"},"disambiguator":0}],"index":[1,42444]}}}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"result"},"disambiguator":0},{"data":{"TypeNs":"Result"},"disambiguator":0}],"index":[1,41506]}}},"c_variadic":false,"unsafety":"Normal","abi":{"Abi":{"todo":"Rust"}}},"bound_vars":[{"Region":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"debug_struct_field1_finish"},"disambiguator":0},{"data":{"LifetimeNs":"'b"},"disambiguator":0}],"index":[1,9200]},"'b"]}},{"Region":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"debug_struct_field1_finish"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[1,53932]},"'_"]}},{"Region":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"debug_struct_field1_finish"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":1}],"index":[1,53933]},"'_"]}},{"Region":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"debug_struct_field1_finish"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":2}],"index":[1,53934]},"'_"]}}]}},"fun":{"ty":{"Arrow":{"value":{"inputs":[{"Ref":[{"kind":{"ReLateBound":[0,{"var":0,"kind":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"debug_struct_field1_finish"},"disambiguator":0},{"data":{"LifetimeNs":"'b"},"disambiguator":0}],"index":[1,9200]},"'b"]}}]}},{"Adt":{"generic_args":[{"Lifetime":{"kind":"ReErased"}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"Formatter"},"disambiguator":0}],"index":[1,9114]}}},true]},{"Ref":[{"kind":{"ReLateBound":[0,{"var":1,"kind":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"debug_struct_field1_finish"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[1,53932]},"'_"]}}]}},"Str",false]},{"Ref":[{"kind":{"ReLateBound":[0,{"var":2,"kind":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"debug_struct_field1_finish"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":1}],"index":[1,53933]},"'_"]}}]}},"Str",false]},{"Ref":[{"kind":{"ReLateBound":[0,{"var":3,"kind":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"debug_struct_field1_finish"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":2}],"index":[1,53934]},"'_"]}}]}},{"Dynamic":[[{"value":{"ExistentialPredicate":{"todo":"Trait(core::fmt::Debug)"}},"bound_vars":[]}],{"kind":{"ReLateBound":[0,{"var":3,"kind":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"debug_struct_field1_finish"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":2}],"index":[1,53934]},"'_"]}}]}},"Dyn"]},false]}],"output":{"Adt":{"generic_args":[{"Type":{"Tuple":[]}},{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"Error"},"disambiguator":0}],"index":[1,42444]}}}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"result"},"disambiguator":0},{"data":{"TypeNs":"Result"},"disambiguator":0}],"index":[1,41506]}}},"c_variadic":false,"unsafety":"Normal","abi":{"Abi":{"todo":"Rust"}}},"bound_vars":[{"Region":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"debug_struct_field1_finish"},"disambiguator":0},{"data":{"LifetimeNs":"'b"},"disambiguator":0}],"index":[1,9200]},"'b"]}},{"Region":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"debug_struct_field1_finish"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[1,53932]},"'_"]}},{"Region":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"debug_struct_field1_finish"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":1}],"index":[1,53933]},"'_"]}},{"Region":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"debug_struct_field1_finish"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":2}],"index":[1,53934]},"'_"]}}]}},"span":{"lo":{"line":78,"col":9},"hi":{"line":78,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"GlobalName":{"id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"debug_struct_field1_finish"},"disambiguator":0}],"index":[1,9199]}}},"hir_id":null,"attributes":[]},"args":[{"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[{"Lifetime":{"kind":"ReErased"}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"Formatter"},"disambiguator":0}],"index":[1,9114]}}},true]},"span":{"lo":{"line":78,"col":9},"hi":{"line":78,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Borrow":{"borrow_kind":{"Mut":{"allow_two_phase_borrow":true}},"arg":{"ty":{"Adt":{"generic_args":[{"Lifetime":{"kind":"ReErased"}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"Formatter"},"disambiguator":0}],"index":[1,9114]}}},"span":{"lo":{"line":78,"col":9},"hi":{"line":78,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Deref":{"arg":{"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[{"Lifetime":{"kind":"ReErased"}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"Formatter"},"disambiguator":0}],"index":[1,9114]}}},true]},"span":{"lo":{"line":78,"col":9},"hi":{"line":78,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"VarRef":{"id":{"name":"f","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":17},{"data":{"ValueNs":"fmt"},"disambiguator":0}],"index":[0,213]},"local_id":4}}}},"hir_id":null,"attributes":[]}}},"hir_id":null,"attributes":[]}}},"hir_id":[213,13],"attributes":[]},{"ty":{"Ref":[{"kind":"ReErased"},"Str",false]},"span":{"lo":{"line":78,"col":9},"hi":{"line":78,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Borrow":{"borrow_kind":"Shared","arg":{"ty":"Str","span":{"lo":{"line":78,"col":9},"hi":{"line":78,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Deref":{"arg":{"ty":{"Ref":[{"kind":"ReErased"},"Str",false]},"span":{"lo":{"line":78,"col":9},"hi":{"line":78,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Literal":{"lit":{"node":{"Str":["Reject","Cooked"]},"span":{"lo":{"line":78,"col":9},"hi":{"line":78,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"neg":false}},"hir_id":null,"attributes":[]}}},"hir_id":null,"attributes":[]}}},"hir_id":[213,15],"attributes":[]},{"ty":{"Ref":[{"kind":"ReErased"},"Str",false]},"span":{"lo":{"line":83,"col":4},"hi":{"line":83,"col":30},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Borrow":{"borrow_kind":"Shared","arg":{"ty":"Str","span":{"lo":{"line":83,"col":4},"hi":{"line":83,"col":30},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Deref":{"arg":{"ty":{"Ref":[{"kind":"ReErased"},"Str",false]},"span":{"lo":{"line":83,"col":4},"hi":{"line":83,"col":30},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Literal":{"lit":{"node":{"Str":["error_code","Cooked"]},"span":{"lo":{"line":83,"col":4},"hi":{"line":83,"col":30},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"neg":false}},"hir_id":null,"attributes":[]}}},"hir_id":null,"attributes":[]}}},"hir_id":[213,16],"attributes":[]},{"ty":{"Ref":[{"kind":"ReErased"},{"Dynamic":[[{"value":{"ExistentialPredicate":{"todo":"Trait(core::fmt::Debug)"}},"bound_vars":[]}],{"kind":"ReErased"},"Dyn"]},false]},"span":{"lo":{"line":83,"col":4},"hi":{"line":83,"col":30},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Pointer":{"cast":"Unsize","source":{"ty":{"Ref":[{"kind":"ReErased"},{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"num"},"disambiguator":0},{"data":{"TypeNs":"nonzero"},"disambiguator":0},{"data":{"TypeNs":"NonZeroI32"},"disambiguator":0}],"index":[1,22484]}}},false]},false]},"span":{"lo":{"line":83,"col":4},"hi":{"line":83,"col":30},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Borrow":{"borrow_kind":"Shared","arg":{"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"num"},"disambiguator":0},{"data":{"TypeNs":"nonzero"},"disambiguator":0},{"data":{"TypeNs":"NonZeroI32"},"disambiguator":0}],"index":[1,22484]}}},false]},"span":{"lo":{"line":83,"col":4},"hi":{"line":83,"col":30},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Deref":{"arg":{"ty":{"Ref":[{"kind":"ReErased"},{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"num"},"disambiguator":0},{"data":{"TypeNs":"nonzero"},"disambiguator":0},{"data":{"TypeNs":"NonZeroI32"},"disambiguator":0}],"index":[1,22484]}}},false]},false]},"span":{"lo":{"line":83,"col":4},"hi":{"line":83,"col":30},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Borrow":{"borrow_kind":"Shared","arg":{"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"num"},"disambiguator":0},{"data":{"TypeNs":"nonzero"},"disambiguator":0},{"data":{"TypeNs":"NonZeroI32"},"disambiguator":0}],"index":[1,22484]}}},false]},"span":{"lo":{"line":83,"col":4},"hi":{"line":83,"col":30},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Borrow":{"borrow_kind":"Shared","arg":{"ty":{"Adt":{"generic_args":[],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"num"},"disambiguator":0},{"data":{"TypeNs":"nonzero"},"disambiguator":0},{"data":{"TypeNs":"NonZeroI32"},"disambiguator":0}],"index":[1,22484]}}},"span":{"lo":{"line":83,"col":4},"hi":{"line":83,"col":30},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Field":{"field":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0},{"data":{"ValueNs":"error_code"},"disambiguator":0}],"index":[0,223]},"lhs":{"ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]}}},"span":{"lo":{"line":78,"col":9},"hi":{"line":78,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Deref":{"arg":{"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]}}},false]},"span":{"lo":{"line":78,"col":9},"hi":{"line":78,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"VarRef":{"id":{"name":"self","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":17},{"data":{"ValueNs":"fmt"},"disambiguator":0}],"index":[0,213]},"local_id":2}}}},"hir_id":null,"attributes":[]}}},"hir_id":[213,20],"attributes":[]}}},"hir_id":[213,19],"attributes":[]}}},"hir_id":[213,18],"attributes":[]}}},"hir_id":null,"attributes":[]}}},"hir_id":null,"attributes":[]}}},"hir_id":null,"attributes":[]}}},"hir_id":[213,17],"attributes":[]}],"from_hir_call":true,"fn_span":{"lo":{"line":78,"col":9},"hi":{"line":78,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"impl":null}},"hir_id":[213,5],"attributes":[]},"safety_mode":"Safe"}},"hir_id":[213,23],"attributes":[]},"sig_span":{"lo":{"line":78,"col":9},"hi":{"line":78,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}},"defaultness":"Final","span":{"lo":{"line":78,"col":9},"hi":{"line":78,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":78,"col":9},"hi":{"line":78,"col":9},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"attributes":{"attributes":[],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"automatically_derived","args":"Empty","tokens":null},"tokens":null}},"id":411,"style":"Outer","span":{"lo":{"line":78,"col":9},"hi":{"line":78,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}}]}},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"automatically_derived","args":"Empty","tokens":null},"tokens":null}},"id":411,"style":"Outer","span":{"lo":{"line":78,"col":9},"hi":{"line":78,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[{"kind":{"Macro":["Derive","Debug"]},"call_site":{"lo":{"line":78,"col":9},"hi":{"line":78,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"def_site":{"lo":{"line":588,"col":4},"hi":{"line":588,"col":19},"filename":{"Real":{"Remapped":{"local_path":"/home/au538501/.rustup/toolchains/nightly-2023-06-02-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/fmt/mod.rs","virtual_name":"/rustc/d59363ad0b6391b7fc5bbb02c9ccf9300eef3753/library/core/src/fmt/mod.rs"}}}},"allow_internal_unstable":["core_intrinsics","fmt_helpers_for_derive"],"edition":"Edition2021","macro_def_id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"macros"},"disambiguator":0},{"data":{"MacroNs":"Debug"},"disambiguator":0}],"index":[1,9142]},"parent_module":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"macros"},"disambiguator":0}],"index":[1,9141]},"allow_internal_unsafe":false,"local_inner_macros":false,"collapse_debuginfo":false}]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":18}],"index":[0,214]},"span":{"lo":{"line":78,"col":16},"hi":{"line":78,"col":18},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":78,"col":16},"hi":{"line":78,"col":18},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Impl":{"unsafety":"Normal","polarity":"Positive","defaultness":"Final","defaultness_span":null,"constness":"NotConst","generics":{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":81,"col":17},"hi":{"line":81,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":81,"col":17},"hi":{"line":81,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"of_trait":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"StructuralEq"},"disambiguator":0}],"index":[1,2693]},"generic_args":[{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]}}}}]},"self_ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]}}},"items":[]}},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"automatically_derived","args":"Empty","tokens":null},"tokens":null}},"id":415,"style":"Outer","span":{"lo":{"line":78,"col":16},"hi":{"line":78,"col":18},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[{"kind":{"Macro":["Derive","Eq"]},"call_site":{"lo":{"line":78,"col":16},"hi":{"line":78,"col":18},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"def_site":{"lo":{"line":302,"col":0},"hi":{"line":302,"col":12},"filename":{"Real":{"Remapped":{"local_path":"/home/au538501/.rustup/toolchains/nightly-2023-06-02-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/cmp.rs","virtual_name":"/rustc/d59363ad0b6391b7fc5bbb02c9ccf9300eef3753/library/core/src/cmp.rs"}}}},"allow_internal_unstable":["core_intrinsics","derive_eq","structural_match","no_coverage"],"edition":"Edition2021","macro_def_id":{"krate":"core","path":[{"data":{"TypeNs":"cmp"},"disambiguator":0},{"data":{"MacroNs":"Eq"},"disambiguator":0}],"index":[1,2317]},"parent_module":{"krate":"core","path":[{"data":{"TypeNs":"cmp"},"disambiguator":0}],"index":[1,2288]},"allow_internal_unsafe":false,"local_inner_macros":false,"collapse_debuginfo":false}]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":19}],"index":[0,215]},"span":{"lo":{"line":78,"col":16},"hi":{"line":78,"col":18},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":78,"col":16},"hi":{"line":78,"col":18},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Impl":{"unsafety":"Normal","polarity":"Positive","defaultness":"Final","defaultness_span":null,"constness":"NotConst","generics":{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":81,"col":17},"hi":{"line":81,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":81,"col":17},"hi":{"line":81,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"of_trait":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"cmp"},"disambiguator":0},{"data":{"TypeNs":"Eq"},"disambiguator":0}],"index":[1,2315]},"generic_args":[{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]}}}}]},"self_ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]}}},"items":[{"ident":["assert_receiver_is_total_eq",{"lo":{"line":78,"col":16},"hi":{"line":78,"col":18},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":19},{"data":{"ValueNs":"assert_receiver_is_total_eq"},"disambiguator":0}],"index":[0,216]},"generics":{"params":[{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":19},{"data":{"ValueNs":"assert_receiver_is_total_eq"},"disambiguator":0}],"index":[0,216]},"local_id":14},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":19},{"data":{"ValueNs":"assert_receiver_is_total_eq"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,288]},"name":"Fresh","span":{"lo":{"line":78,"col":16},"hi":{"line":78,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]}],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":78,"col":16},"hi":{"line":78,"col":18},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":78,"col":16},"hi":{"line":78,"col":18},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"kind":{"Fn":{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"params":[{"pat":{"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]}}},false]},"span":{"lo":{"line":78,"col":16},"hi":{"line":78,"col":18},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Binding":{"mutability":false,"mode":"ByValue","var":{"name":"self","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":19},{"data":{"ValueNs":"assert_receiver_is_total_eq"},"disambiguator":0}],"index":[0,216]},"local_id":2}},"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]}}},false]},"subpattern":null,"is_primary":true}},"hir_id":null,"attributes":[]},"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]}}},false]},"ty_span":null,"self_kind":"ImmRef","hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":19},{"data":{"ValueNs":"assert_receiver_is_total_eq"},"disambiguator":0}],"index":[0,216]},"local_id":1},"attributes":[]}],"ret":{"Tuple":[]},"body":{"ty":{"Tuple":[]},"span":{"lo":{"line":78,"col":16},"hi":{"line":78,"col":18},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Block":{"targeted_by_break":false,"region_scope":{"id":12,"data":"Node"},"opt_destruction_scope":null,"span":{"lo":{"line":78,"col":16},"hi":{"line":78,"col":18},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"stmts":[{"kind":{"Let":{"remainder_scope":{"id":12,"data":{"Remainder":0}},"init_scope":{"id":3,"data":"Node"},"pattern":{"ty":{"Adt":{"generic_args":[{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"num"},"disambiguator":0},{"data":{"TypeNs":"nonzero"},"disambiguator":0},{"data":{"TypeNs":"NonZeroI32"},"disambiguator":0}],"index":[1,22484]}}}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"cmp"},"disambiguator":0},{"data":{"TypeNs":"AssertParamIsEq"},"disambiguator":0}],"index":[1,2318]}}},"span":{"lo":{"line":83,"col":4},"hi":{"line":83,"col":30},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"AscribeUserType":{"ascription":{"annotation":{"user_ty":{"max_universe":0,"variables":[],"value":{"Todo":"Ty(core::cmp::AssertParamIsEq)"}},"span":{"lo":{"line":83,"col":4},"hi":{"line":83,"col":30},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"inferred_ty":{"Adt":{"generic_args":[{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"num"},"disambiguator":0},{"data":{"TypeNs":"nonzero"},"disambiguator":0},{"data":{"TypeNs":"NonZeroI32"},"disambiguator":0}],"index":[1,22484]}}}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"cmp"},"disambiguator":0},{"data":{"TypeNs":"AssertParamIsEq"},"disambiguator":0}],"index":[1,2318]}}}},"variance":"Covariant"},"subpattern":{"ty":{"Adt":{"generic_args":[{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"num"},"disambiguator":0},{"data":{"TypeNs":"nonzero"},"disambiguator":0},{"data":{"TypeNs":"NonZeroI32"},"disambiguator":0}],"index":[1,22484]}}}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"cmp"},"disambiguator":0},{"data":{"TypeNs":"AssertParamIsEq"},"disambiguator":0}],"index":[1,2318]}}},"span":{"lo":{"line":83,"col":4},"hi":{"line":83,"col":30},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":"Wild","hir_id":null,"attributes":[]}}},"hir_id":null,"attributes":[]},"initializer":null,"else_block":null,"lint_level":{"Explicit":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":19},{"data":{"ValueNs":"assert_receiver_is_total_eq"},"disambiguator":0}],"index":[0,216]},"local_id":10}},"attributes":[]}},"opt_destruction_scope":{"id":3,"data":"Destruction"}}],"expr":null,"safety_mode":"Safe"}},"hir_id":[216,13],"attributes":[]},"sig_span":{"lo":{"line":78,"col":16},"hi":{"line":78,"col":18},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}},"defaultness":"Final","span":{"lo":{"line":78,"col":16},"hi":{"line":78,"col":18},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":78,"col":16},"hi":{"line":78,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"inline","args":"Empty","tokens":null},"tokens":null}},"id":412,"style":"Outer","span":{"lo":{"line":78,"col":16},"hi":{"line":78,"col":18},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"doc","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:78:17: 78:19 (#37), close: concordium/src/concordium_types.rs:78:17: 78:19 (#37) }"}},"delim":"Parenthesis","tokens":"hidden"}},"tokens":null},"tokens":null}},"id":413,"style":"Outer","span":{"lo":{"line":78,"col":16},"hi":{"line":78,"col":18},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_coverage","args":"Empty","tokens":null},"tokens":null}},"id":414,"style":"Outer","span":{"lo":{"line":78,"col":16},"hi":{"line":78,"col":18},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"automatically_derived","args":"Empty","tokens":null},"tokens":null}},"id":416,"style":"Outer","span":{"lo":{"line":78,"col":16},"hi":{"line":78,"col":18},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}}]}},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"automatically_derived","args":"Empty","tokens":null},"tokens":null}},"id":416,"style":"Outer","span":{"lo":{"line":78,"col":16},"hi":{"line":78,"col":18},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[{"kind":{"Macro":["Derive","Eq"]},"call_site":{"lo":{"line":78,"col":16},"hi":{"line":78,"col":18},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"def_site":{"lo":{"line":302,"col":0},"hi":{"line":302,"col":12},"filename":{"Real":{"Remapped":{"local_path":"/home/au538501/.rustup/toolchains/nightly-2023-06-02-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/cmp.rs","virtual_name":"/rustc/d59363ad0b6391b7fc5bbb02c9ccf9300eef3753/library/core/src/cmp.rs"}}}},"allow_internal_unstable":["core_intrinsics","derive_eq","structural_match","no_coverage"],"edition":"Edition2021","macro_def_id":{"krate":"core","path":[{"data":{"TypeNs":"cmp"},"disambiguator":0},{"data":{"MacroNs":"Eq"},"disambiguator":0}],"index":[1,2317]},"parent_module":{"krate":"core","path":[{"data":{"TypeNs":"cmp"},"disambiguator":0}],"index":[1,2288]},"allow_internal_unsafe":false,"local_inner_macros":false,"collapse_debuginfo":false}]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":20}],"index":[0,217]},"span":{"lo":{"line":78,"col":20},"hi":{"line":78,"col":29},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":78,"col":20},"hi":{"line":78,"col":29},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Impl":{"unsafety":"Normal","polarity":"Positive","defaultness":"Final","defaultness_span":null,"constness":"NotConst","generics":{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":81,"col":17},"hi":{"line":81,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":81,"col":17},"hi":{"line":81,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"of_trait":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"StructuralPartialEq"},"disambiguator":0}],"index":[1,2692]},"generic_args":[{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]}}}}]},"self_ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]}}},"items":[]}},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"automatically_derived","args":"Empty","tokens":null},"tokens":null}},"id":417,"style":"Outer","span":{"lo":{"line":78,"col":20},"hi":{"line":78,"col":29},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[{"kind":{"Macro":["Derive","PartialEq"]},"call_site":{"lo":{"line":78,"col":20},"hi":{"line":78,"col":29},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"def_site":{"lo":{"line":236,"col":0},"hi":{"line":236,"col":19},"filename":{"Real":{"Remapped":{"local_path":"/home/au538501/.rustup/toolchains/nightly-2023-06-02-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/cmp.rs","virtual_name":"/rustc/d59363ad0b6391b7fc5bbb02c9ccf9300eef3753/library/core/src/cmp.rs"}}}},"allow_internal_unstable":["core_intrinsics","structural_match"],"edition":"Edition2021","macro_def_id":{"krate":"core","path":[{"data":{"TypeNs":"cmp"},"disambiguator":0},{"data":{"MacroNs":"PartialEq"},"disambiguator":0}],"index":[1,2314]},"parent_module":{"krate":"core","path":[{"data":{"TypeNs":"cmp"},"disambiguator":0}],"index":[1,2288]},"allow_internal_unsafe":false,"local_inner_macros":false,"collapse_debuginfo":false}]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":21}],"index":[0,218]},"span":{"lo":{"line":78,"col":20},"hi":{"line":78,"col":29},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":78,"col":20},"hi":{"line":78,"col":29},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Impl":{"unsafety":"Normal","polarity":"Positive","defaultness":"Final","defaultness_span":null,"constness":"NotConst","generics":{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":81,"col":17},"hi":{"line":81,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":81,"col":17},"hi":{"line":81,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"of_trait":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"cmp"},"disambiguator":0},{"data":{"TypeNs":"PartialEq"},"disambiguator":0}],"index":[1,2310]},"generic_args":[{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]}}}},{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]}}}}]},"self_ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]}}},"items":[{"ident":["eq",{"lo":{"line":78,"col":20},"hi":{"line":78,"col":29},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":21},{"data":{"ValueNs":"eq"},"disambiguator":0}],"index":[0,219]},"generics":{"params":[{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":21},{"data":{"ValueNs":"eq"},"disambiguator":0}],"index":[0,219]},"local_id":14},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":21},{"data":{"ValueNs":"eq"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,289]},"name":"Fresh","span":{"lo":{"line":78,"col":20},"hi":{"line":78,"col":21},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]},{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":21},{"data":{"ValueNs":"eq"},"disambiguator":0}],"index":[0,219]},"local_id":15},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":21},{"data":{"ValueNs":"eq"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":1}],"index":[0,290]},"name":"Fresh","span":{"lo":{"line":78,"col":20},"hi":{"line":78,"col":21},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]}],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":78,"col":20},"hi":{"line":78,"col":29},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":78,"col":20},"hi":{"line":78,"col":29},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"kind":{"Fn":{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"params":[{"pat":{"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]}}},false]},"span":{"lo":{"line":78,"col":20},"hi":{"line":78,"col":29},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Binding":{"mutability":false,"mode":"ByValue","var":{"name":"self","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":21},{"data":{"ValueNs":"eq"},"disambiguator":0}],"index":[0,219]},"local_id":2}},"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]}}},false]},"subpattern":null,"is_primary":true}},"hir_id":null,"attributes":[]},"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]}}},false]},"ty_span":null,"self_kind":"ImmRef","hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":21},{"data":{"ValueNs":"eq"},"disambiguator":0}],"index":[0,219]},"local_id":1},"attributes":[]},{"pat":{"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]}}},false]},"span":{"lo":{"line":78,"col":20},"hi":{"line":78,"col":29},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Binding":{"mutability":false,"mode":"ByValue","var":{"name":"other","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":21},{"data":{"ValueNs":"eq"},"disambiguator":0}],"index":[0,219]},"local_id":4}},"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]}}},false]},"subpattern":null,"is_primary":true}},"hir_id":null,"attributes":[]},"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]}}},false]},"ty_span":null,"self_kind":null,"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":21},{"data":{"ValueNs":"eq"},"disambiguator":0}],"index":[0,219]},"local_id":3},"attributes":[]}],"ret":"Bool","body":{"ty":"Bool","span":{"lo":{"line":78,"col":20},"hi":{"line":78,"col":29},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Block":{"targeted_by_break":false,"region_scope":{"id":12,"data":"Node"},"opt_destruction_scope":null,"span":{"lo":{"line":78,"col":20},"hi":{"line":78,"col":29},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"stmts":[],"expr":{"ty":"Bool","span":{"lo":{"line":83,"col":4},"hi":{"line":83,"col":30},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Call":{"ty":{"Arrow":{"value":{"inputs":[{"Ref":[{"kind":{"ReLateBound":[0,{"var":0,"kind":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"cmp"},"disambiguator":0},{"data":{"TypeNs":"PartialEq"},"disambiguator":0},{"data":{"ValueNs":"eq"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[1,51736]},"'_"]}}]}},{"Adt":{"generic_args":[],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"num"},"disambiguator":0},{"data":{"TypeNs":"nonzero"},"disambiguator":0},{"data":{"TypeNs":"NonZeroI32"},"disambiguator":0}],"index":[1,22484]}}},false]},{"Ref":[{"kind":{"ReLateBound":[0,{"var":1,"kind":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"cmp"},"disambiguator":0},{"data":{"TypeNs":"PartialEq"},"disambiguator":0},{"data":{"ValueNs":"eq"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":1}],"index":[1,51737]},"'_"]}}]}},{"Adt":{"generic_args":[],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"num"},"disambiguator":0},{"data":{"TypeNs":"nonzero"},"disambiguator":0},{"data":{"TypeNs":"NonZeroI32"},"disambiguator":0}],"index":[1,22484]}}},false]}],"output":"Bool","c_variadic":false,"unsafety":"Normal","abi":{"Abi":{"todo":"Rust"}}},"bound_vars":[{"Region":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"cmp"},"disambiguator":0},{"data":{"TypeNs":"PartialEq"},"disambiguator":0},{"data":{"ValueNs":"eq"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[1,51736]},"'_"]}},{"Region":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"cmp"},"disambiguator":0},{"data":{"TypeNs":"PartialEq"},"disambiguator":0},{"data":{"ValueNs":"eq"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":1}],"index":[1,51737]},"'_"]}}]}},"fun":{"ty":{"Arrow":{"value":{"inputs":[{"Ref":[{"kind":{"ReLateBound":[0,{"var":0,"kind":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"cmp"},"disambiguator":0},{"data":{"TypeNs":"PartialEq"},"disambiguator":0},{"data":{"ValueNs":"eq"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[1,51736]},"'_"]}}]}},{"Adt":{"generic_args":[],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"num"},"disambiguator":0},{"data":{"TypeNs":"nonzero"},"disambiguator":0},{"data":{"TypeNs":"NonZeroI32"},"disambiguator":0}],"index":[1,22484]}}},false]},{"Ref":[{"kind":{"ReLateBound":[0,{"var":1,"kind":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"cmp"},"disambiguator":0},{"data":{"TypeNs":"PartialEq"},"disambiguator":0},{"data":{"ValueNs":"eq"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":1}],"index":[1,51737]},"'_"]}}]}},{"Adt":{"generic_args":[],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"num"},"disambiguator":0},{"data":{"TypeNs":"nonzero"},"disambiguator":0},{"data":{"TypeNs":"NonZeroI32"},"disambiguator":0}],"index":[1,22484]}}},false]}],"output":"Bool","c_variadic":false,"unsafety":"Normal","abi":{"Abi":{"todo":"Rust"}}},"bound_vars":[{"Region":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"cmp"},"disambiguator":0},{"data":{"TypeNs":"PartialEq"},"disambiguator":0},{"data":{"ValueNs":"eq"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[1,51736]},"'_"]}},{"Region":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"cmp"},"disambiguator":0},{"data":{"TypeNs":"PartialEq"},"disambiguator":0},{"data":{"ValueNs":"eq"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":1}],"index":[1,51737]},"'_"]}}]}},"span":{"lo":{"line":83,"col":4},"hi":{"line":83,"col":30},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"GlobalName":{"id":{"krate":"core","path":[{"data":{"TypeNs":"cmp"},"disambiguator":0},{"data":{"TypeNs":"PartialEq"},"disambiguator":0},{"data":{"ValueNs":"eq"},"disambiguator":0}],"index":[1,2312]}}},"hir_id":null,"attributes":[]},"args":[{"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"num"},"disambiguator":0},{"data":{"TypeNs":"nonzero"},"disambiguator":0},{"data":{"TypeNs":"NonZeroI32"},"disambiguator":0}],"index":[1,22484]}}},false]},"span":{"lo":{"line":83,"col":4},"hi":{"line":83,"col":30},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Borrow":{"borrow_kind":"Shared","arg":{"ty":{"Adt":{"generic_args":[],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"num"},"disambiguator":0},{"data":{"TypeNs":"nonzero"},"disambiguator":0},{"data":{"TypeNs":"NonZeroI32"},"disambiguator":0}],"index":[1,22484]}}},"span":{"lo":{"line":83,"col":4},"hi":{"line":83,"col":30},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Field":{"field":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0},{"data":{"ValueNs":"error_code"},"disambiguator":0}],"index":[0,223]},"lhs":{"ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]}}},"span":{"lo":{"line":78,"col":20},"hi":{"line":78,"col":29},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Deref":{"arg":{"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]}}},false]},"span":{"lo":{"line":78,"col":20},"hi":{"line":78,"col":29},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"VarRef":{"id":{"name":"self","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":21},{"data":{"ValueNs":"eq"},"disambiguator":0}],"index":[0,219]},"local_id":2}}}},"hir_id":null,"attributes":[]}}},"hir_id":[219,7],"attributes":[]}}},"hir_id":null,"attributes":[]}}},"hir_id":[219,6],"attributes":[]},{"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"num"},"disambiguator":0},{"data":{"TypeNs":"nonzero"},"disambiguator":0},{"data":{"TypeNs":"NonZeroI32"},"disambiguator":0}],"index":[1,22484]}}},false]},"span":{"lo":{"line":83,"col":4},"hi":{"line":83,"col":30},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Borrow":{"borrow_kind":"Shared","arg":{"ty":{"Adt":{"generic_args":[],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"num"},"disambiguator":0},{"data":{"TypeNs":"nonzero"},"disambiguator":0},{"data":{"TypeNs":"NonZeroI32"},"disambiguator":0}],"index":[1,22484]}}},"span":{"lo":{"line":83,"col":4},"hi":{"line":83,"col":30},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Field":{"field":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0},{"data":{"ValueNs":"error_code"},"disambiguator":0}],"index":[0,223]},"lhs":{"ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]}}},"span":{"lo":{"line":78,"col":20},"hi":{"line":78,"col":29},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Deref":{"arg":{"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]}}},false]},"span":{"lo":{"line":78,"col":20},"hi":{"line":78,"col":29},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"VarRef":{"id":{"name":"other","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":21},{"data":{"ValueNs":"eq"},"disambiguator":0}],"index":[0,219]},"local_id":4}}}},"hir_id":null,"attributes":[]}}},"hir_id":[219,10],"attributes":[]}}},"hir_id":null,"attributes":[]}}},"hir_id":[219,9],"attributes":[]}],"from_hir_call":false,"fn_span":{"lo":{"line":83,"col":4},"hi":{"line":83,"col":30},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"impl":{"impl":{"Concrete":{"id":{"krate":"core","path":[{"data":{"TypeNs":"num"},"disambiguator":0},{"data":{"TypeNs":"nonzero"},"disambiguator":0},{"data":"Impl","disambiguator":209}],"index":[1,22494]},"generics":[]}},"args":[]}}},"hir_id":[219,5],"attributes":[]},"safety_mode":"Safe"}},"hir_id":[219,13],"attributes":[]},"sig_span":{"lo":{"line":78,"col":20},"hi":{"line":78,"col":29},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}},"defaultness":"Final","span":{"lo":{"line":78,"col":20},"hi":{"line":78,"col":29},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":78,"col":20},"hi":{"line":78,"col":20},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"inline","args":"Empty","tokens":null},"tokens":null}},"id":418,"style":"Outer","span":{"lo":{"line":78,"col":20},"hi":{"line":78,"col":29},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"automatically_derived","args":"Empty","tokens":null},"tokens":null}},"id":419,"style":"Outer","span":{"lo":{"line":78,"col":20},"hi":{"line":78,"col":29},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}}]}},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"automatically_derived","args":"Empty","tokens":null},"tokens":null}},"id":419,"style":"Outer","span":{"lo":{"line":78,"col":20},"hi":{"line":78,"col":29},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[{"kind":{"Macro":["Derive","PartialEq"]},"call_site":{"lo":{"line":78,"col":20},"hi":{"line":78,"col":29},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"def_site":{"lo":{"line":236,"col":0},"hi":{"line":236,"col":19},"filename":{"Real":{"Remapped":{"local_path":"/home/au538501/.rustup/toolchains/nightly-2023-06-02-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/cmp.rs","virtual_name":"/rustc/d59363ad0b6391b7fc5bbb02c9ccf9300eef3753/library/core/src/cmp.rs"}}}},"allow_internal_unstable":["core_intrinsics","structural_match"],"edition":"Edition2021","macro_def_id":{"krate":"core","path":[{"data":{"TypeNs":"cmp"},"disambiguator":0},{"data":{"MacroNs":"PartialEq"},"disambiguator":0}],"index":[1,2314]},"parent_module":{"krate":"core","path":[{"data":{"TypeNs":"cmp"},"disambiguator":0}],"index":[1,2288]},"allow_internal_unsafe":false,"local_inner_macros":false,"collapse_debuginfo":false}]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":1}],"index":[0,69]},"span":{"lo":{"line":87,"col":0},"hi":{"line":95,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":87,"col":0},"hi":{"line":95,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Impl":{"unsafety":"Normal","polarity":"Positive","defaultness":"Final","defaultness_span":null,"constness":"NotConst","generics":{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":87,"col":23},"hi":{"line":87,"col":23},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":87,"col":4},"hi":{"line":87,"col":4},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"of_trait":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"default"},"disambiguator":0},{"data":{"TypeNs":"Default"},"disambiguator":0}],"index":[1,2587]},"generic_args":[{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]}}}}]},"self_ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]}}},"items":[{"ident":["default",{"lo":{"line":90,"col":7},"hi":{"line":90,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":1},{"data":{"ValueNs":"default"},"disambiguator":0}],"index":[0,239]},"generics":{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":90,"col":24},"hi":{"line":90,"col":24},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":90,"col":14},"hi":{"line":90,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"kind":{"Fn":{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"params":[],"ret":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]}}},"body":{"ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]}}},"span":{"lo":{"line":90,"col":25},"hi":{"line":94,"col":5},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Block":{"targeted_by_break":false,"region_scope":{"id":15,"data":"Node"},"opt_destruction_scope":null,"span":{"lo":{"line":90,"col":25},"hi":{"line":94,"col":5},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"stmts":[],"expr":{"ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]}}},"span":{"lo":{"line":91,"col":8},"hi":{"line":93,"col":9},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Adt":{"info":{"type_namespace":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0}],"index":[0,221]},"typ":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]},"variant":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]},"variant_index":0,"typ_is_record":true,"variant_is_record":true,"typ_is_struct":true},"user_ty":null,"fields":[{"field":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0},{"data":{"ValueNs":"error_code"},"disambiguator":0}],"index":[0,223]},"value":{"ty":{"Adt":{"generic_args":[],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"num"},"disambiguator":0},{"data":{"TypeNs":"nonzero"},"disambiguator":0},{"data":{"TypeNs":"NonZeroI32"},"disambiguator":0}],"index":[1,22484]}}},"span":{"lo":{"line":92,"col":24},"hi":{"line":92,"col":68},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Block":{"targeted_by_break":false,"region_scope":{"id":14,"data":"Node"},"opt_destruction_scope":null,"span":{"lo":{"line":92,"col":24},"hi":{"line":92,"col":68},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"stmts":[],"expr":{"ty":{"Adt":{"generic_args":[],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"num"},"disambiguator":0},{"data":{"TypeNs":"nonzero"},"disambiguator":0},{"data":{"TypeNs":"NonZeroI32"},"disambiguator":0}],"index":[1,22484]}}},"span":{"lo":{"line":92,"col":32},"hi":{"line":92,"col":67},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Call":{"ty":{"Arrow":{"value":{"inputs":[{"Int":"I32"}],"output":{"Adt":{"generic_args":[],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"num"},"disambiguator":0},{"data":{"TypeNs":"nonzero"},"disambiguator":0},{"data":{"TypeNs":"NonZeroI32"},"disambiguator":0}],"index":[1,22484]}}},"c_variadic":false,"unsafety":"Unsafe","abi":{"Abi":{"todo":"Rust"}}},"bound_vars":[]}},"fun":{"ty":{"Arrow":{"value":{"inputs":[{"Int":"I32"}],"output":{"Adt":{"generic_args":[],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"num"},"disambiguator":0},{"data":{"TypeNs":"nonzero"},"disambiguator":0},{"data":{"TypeNs":"NonZeroI32"},"disambiguator":0}],"index":[1,22484]}}},"c_variadic":false,"unsafety":"Unsafe","abi":{"Abi":{"todo":"Rust"}}},"bound_vars":[]}},"span":{"lo":{"line":92,"col":32},"hi":{"line":92,"col":57},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"GlobalName":{"id":{"krate":"core","path":[{"data":{"TypeNs":"num"},"disambiguator":0},{"data":{"TypeNs":"nonzero"},"disambiguator":0},{"data":"Impl","disambiguator":56},{"data":{"ValueNs":"new_unchecked"},"disambiguator":0}],"index":[1,22145]}}},"hir_id":null,"attributes":[]},"args":[{"ty":{"Int":"I32"},"span":{"lo":{"line":92,"col":58},"hi":{"line":92,"col":66},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"NamedConst":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"num"},"disambiguator":0},{"data":"Impl","disambiguator":2},{"data":{"ValueNs":"MIN"},"disambiguator":0}],"index":[1,28926]},"substs":[],"user_ty":null,"impl":null}},"hir_id":[239,10],"attributes":[]}],"from_hir_call":true,"fn_span":{"lo":{"line":92,"col":32},"hi":{"line":92,"col":67},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"impl":null}},"hir_id":[239,5],"attributes":[]},"safety_mode":"ExplicitUnsafe"}},"hir_id":[239,4],"attributes":[]}}],"base":null}},"hir_id":[239,1],"attributes":[]},"safety_mode":"Safe"}},"hir_id":[239,16],"attributes":[]},"sig_span":{"lo":{"line":90,"col":4},"hi":{"line":90,"col":24},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}},"defaultness":"Final","span":{"lo":{"line":90,"col":4},"hi":{"line":94,"col":5},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":90,"col":4},"hi":{"line":90,"col":4},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"_hax::skip","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:89:5: 89:12 (#49), close: concordium/src/concordium_types.rs:89:5: 89:12 (#49) }"}},"delim":"Parenthesis","tokens":""}},"tokens":null},"tokens":null}},"id":444,"style":"Outer","span":{"lo":{"line":89,"col":4},"hi":{"line":89,"col":11},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"inline","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:88:13: 88:14 (#0), close: concordium/src/concordium_types.rs:88:20: 88:21 (#0) }"}},"delim":"Parenthesis","tokens":"always"}},"tokens":null},"tokens":null}},"id":443,"style":"Outer","span":{"lo":{"line":88,"col":4},"hi":{"line":88,"col":21},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"DocComment":["Line"," Default error is i32::MIN."]},"id":95,"style":"Outer","span":{"lo":{"line":86,"col":0},"hi":{"line":86,"col":30},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}}]}},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Default error is i32::MIN."]},"id":95,"style":"Outer","span":{"lo":{"line":86,"col":0},"hi":{"line":86,"col":30},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":2}],"index":[0,70]},"span":{"lo":{"line":97,"col":0},"hi":{"line":108,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":97,"col":0},"hi":{"line":108,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Impl":{"unsafety":"Normal","polarity":"Positive","defaultness":"Final","defaultness_span":null,"constness":"NotConst","generics":{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":97,"col":11},"hi":{"line":97,"col":11},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":97,"col":4},"hi":{"line":97,"col":4},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"of_trait":null,"self_ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]}}},"items":[{"ident":["new",{"lo":{"line":100,"col":11},"hi":{"line":100,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":2},{"data":{"ValueNs":"new"},"disambiguator":0}],"index":[0,238]},"generics":{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":100,"col":38},"hi":{"line":100,"col":38},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":100,"col":14},"hi":{"line":100,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"kind":{"Fn":{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"params":[{"pat":{"ty":{"Int":"I32"},"span":{"lo":{"line":100,"col":15},"hi":{"line":100,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Binding":{"mutability":false,"mode":"ByValue","var":{"name":"x","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":2},{"data":{"ValueNs":"new"},"disambiguator":0}],"index":[0,238]},"local_id":2}},"ty":{"Int":"I32"},"subpattern":null,"is_primary":true}},"hir_id":null,"attributes":[]},"ty":{"Int":"I32"},"ty_span":{"lo":{"line":100,"col":18},"hi":{"line":100,"col":21},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"self_kind":null,"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":2},{"data":{"ValueNs":"new"},"disambiguator":0}],"index":[0,238]},"local_id":1},"attributes":[]}],"ret":{"Adt":{"generic_args":[{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]}}}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"option"},"disambiguator":0},{"data":{"TypeNs":"Option"},"disambiguator":0}],"index":[1,41362]}}},"body":{"ty":{"Adt":{"generic_args":[{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]}}}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"option"},"disambiguator":0},{"data":{"TypeNs":"Option"},"disambiguator":0}],"index":[1,41362]}}},"span":{"lo":{"line":100,"col":39},"hi":{"line":107,"col":5},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Block":{"targeted_by_break":false,"region_scope":{"id":35,"data":"Node"},"opt_destruction_scope":null,"span":{"lo":{"line":100,"col":39},"hi":{"line":107,"col":5},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"stmts":[],"expr":{"ty":{"Adt":{"generic_args":[{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]}}}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"option"},"disambiguator":0},{"data":{"TypeNs":"Option"},"disambiguator":0}],"index":[1,41362]}}},"span":{"lo":{"line":101,"col":8},"hi":{"line":106,"col":9},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"If":{"if_then_scope":{"id":30,"data":"IfThen"},"cond":{"ty":"Bool","span":{"lo":{"line":101,"col":11},"hi":{"line":101,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Use":{"source":{"ty":"Bool","span":{"lo":{"line":101,"col":11},"hi":{"line":101,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Binary":{"op":"Lt","lhs":{"ty":{"Int":"I32"},"span":{"lo":{"line":101,"col":11},"hi":{"line":101,"col":12},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"VarRef":{"id":{"name":"x","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":2},{"data":{"ValueNs":"new"},"disambiguator":0}],"index":[0,238]},"local_id":2}}}},"hir_id":[238,5],"attributes":[]},"rhs":{"ty":{"Int":"I32"},"span":{"lo":{"line":101,"col":15},"hi":{"line":101,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Literal":{"lit":{"node":{"Int":[0,"Unsuffixed"]},"span":{"lo":{"line":101,"col":15},"hi":{"line":101,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"neg":false}},"hir_id":[238,7],"attributes":[]}}},"hir_id":[238,4],"attributes":[]}}},"hir_id":[238,8],"attributes":[]},"then":{"ty":{"Adt":{"generic_args":[{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]}}}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"option"},"disambiguator":0},{"data":{"TypeNs":"Option"},"disambiguator":0}],"index":[1,41362]}}},"span":{"lo":{"line":101,"col":17},"hi":{"line":104,"col":9},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Block":{"targeted_by_break":false,"region_scope":{"id":29,"data":"Node"},"opt_destruction_scope":null,"span":{"lo":{"line":101,"col":17},"hi":{"line":104,"col":9},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"stmts":[{"kind":{"Let":{"remainder_scope":{"id":29,"data":{"Remainder":0}},"init_scope":{"id":9,"data":"Node"},"pattern":{"ty":{"Adt":{"generic_args":[],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"num"},"disambiguator":0},{"data":{"TypeNs":"nonzero"},"disambiguator":0},{"data":{"TypeNs":"NonZeroI32"},"disambiguator":0}],"index":[1,22484]}}},"span":{"lo":{"line":102,"col":16},"hi":{"line":102,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Binding":{"mutability":false,"mode":"ByValue","var":{"name":"error_code","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":2},{"data":{"ValueNs":"new"},"disambiguator":0}],"index":[0,238]},"local_id":20}},"ty":{"Adt":{"generic_args":[],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"num"},"disambiguator":0},{"data":{"TypeNs":"nonzero"},"disambiguator":0},{"data":{"TypeNs":"NonZeroI32"},"disambiguator":0}],"index":[1,22484]}}},"subpattern":null,"is_primary":true}},"hir_id":null,"attributes":[]},"initializer":{"ty":{"Adt":{"generic_args":[],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"num"},"disambiguator":0},{"data":{"TypeNs":"nonzero"},"disambiguator":0},{"data":{"TypeNs":"NonZeroI32"},"disambiguator":0}],"index":[1,22484]}}},"span":{"lo":{"line":102,"col":29},"hi":{"line":102,"col":68},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Block":{"targeted_by_break":false,"region_scope":{"id":18,"data":"Node"},"opt_destruction_scope":null,"span":{"lo":{"line":102,"col":29},"hi":{"line":102,"col":68},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"stmts":[],"expr":{"ty":{"Adt":{"generic_args":[],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"num"},"disambiguator":0},{"data":{"TypeNs":"nonzero"},"disambiguator":0},{"data":{"TypeNs":"NonZeroI32"},"disambiguator":0}],"index":[1,22484]}}},"span":{"lo":{"line":102,"col":38},"hi":{"line":102,"col":66},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Call":{"ty":{"Arrow":{"value":{"inputs":[{"Int":"I32"}],"output":{"Adt":{"generic_args":[],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"num"},"disambiguator":0},{"data":{"TypeNs":"nonzero"},"disambiguator":0},{"data":{"TypeNs":"NonZeroI32"},"disambiguator":0}],"index":[1,22484]}}},"c_variadic":false,"unsafety":"Unsafe","abi":{"Abi":{"todo":"Rust"}}},"bound_vars":[]}},"fun":{"ty":{"Arrow":{"value":{"inputs":[{"Int":"I32"}],"output":{"Adt":{"generic_args":[],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"num"},"disambiguator":0},{"data":{"TypeNs":"nonzero"},"disambiguator":0},{"data":{"TypeNs":"NonZeroI32"},"disambiguator":0}],"index":[1,22484]}}},"c_variadic":false,"unsafety":"Unsafe","abi":{"Abi":{"todo":"Rust"}}},"bound_vars":[]}},"span":{"lo":{"line":102,"col":38},"hi":{"line":102,"col":63},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"GlobalName":{"id":{"krate":"core","path":[{"data":{"TypeNs":"num"},"disambiguator":0},{"data":{"TypeNs":"nonzero"},"disambiguator":0},{"data":"Impl","disambiguator":56},{"data":{"ValueNs":"new_unchecked"},"disambiguator":0}],"index":[1,22145]}}},"hir_id":null,"attributes":[]},"args":[{"ty":{"Int":"I32"},"span":{"lo":{"line":102,"col":64},"hi":{"line":102,"col":65},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"VarRef":{"id":{"name":"x","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":2},{"data":{"ValueNs":"new"},"disambiguator":0}],"index":[0,238]},"local_id":2}}}},"hir_id":[238,16],"attributes":[]}],"from_hir_call":true,"fn_span":{"lo":{"line":102,"col":38},"hi":{"line":102,"col":66},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"impl":null}},"hir_id":[238,11],"attributes":[]},"safety_mode":"ExplicitUnsafe"}},"hir_id":[238,10],"attributes":[]},"else_block":null,"lint_level":{"Explicit":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":2},{"data":{"ValueNs":"new"},"disambiguator":0}],"index":[0,238]},"local_id":19}},"attributes":[]}},"opt_destruction_scope":{"id":9,"data":"Destruction"}}],"expr":{"ty":{"Adt":{"generic_args":[{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]}}}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"option"},"disambiguator":0},{"data":{"TypeNs":"Option"},"disambiguator":0}],"index":[1,41362]}}},"span":{"lo":{"line":103,"col":12},"hi":{"line":103,"col":39},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Adt":{"info":{"type_namespace":{"krate":"core","path":[{"data":{"TypeNs":"option"},"disambiguator":0}],"index":[1,41362]},"typ":{"krate":"core","path":[{"data":{"TypeNs":"option"},"disambiguator":0},{"data":{"TypeNs":"Option"},"disambiguator":0}],"index":[1,41362]},"variant":{"krate":"core","path":[{"data":{"TypeNs":"option"},"disambiguator":0},{"data":{"TypeNs":"Option"},"disambiguator":0},{"data":{"TypeNs":"Some"},"disambiguator":0}],"index":[1,41366]},"variant_index":1,"typ_is_record":false,"variant_is_record":false,"typ_is_struct":false},"user_ty":null,"fields":[{"field":{"krate":"core","path":[{"data":{"TypeNs":"option"},"disambiguator":0},{"data":{"TypeNs":"Option"},"disambiguator":0},{"data":{"TypeNs":"Some"},"disambiguator":0},{"data":{"ValueNs":"0"},"disambiguator":0}],"index":[1,41368]},"value":{"ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]}}},"span":{"lo":{"line":103,"col":17},"hi":{"line":103,"col":38},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Adt":{"info":{"type_namespace":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0}],"index":[0,221]},"typ":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]},"variant":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]},"variant_index":0,"typ_is_record":true,"variant_is_record":true,"typ_is_struct":true},"user_ty":null,"fields":[{"field":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0},{"data":{"ValueNs":"error_code"},"disambiguator":0}],"index":[0,223]},"value":{"ty":{"Adt":{"generic_args":[],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"num"},"disambiguator":0},{"data":{"TypeNs":"nonzero"},"disambiguator":0},{"data":{"TypeNs":"NonZeroI32"},"disambiguator":0}],"index":[1,22484]}}},"span":{"lo":{"line":103,"col":26},"hi":{"line":103,"col":36},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"VarRef":{"id":{"name":"error_code","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":2},{"data":{"ValueNs":"new"},"disambiguator":0}],"index":[0,238]},"local_id":20}}}},"hir_id":[238,27],"attributes":[]}}],"base":null}},"hir_id":[238,24],"attributes":[]}}],"base":null}},"hir_id":[238,21],"attributes":[]},"safety_mode":"Safe"}},"hir_id":[238,30],"attributes":[]},"else_opt":{"ty":{"Adt":{"generic_args":[{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]}}}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"option"},"disambiguator":0},{"data":{"TypeNs":"Option"},"disambiguator":0}],"index":[1,41362]}}},"span":{"lo":{"line":104,"col":15},"hi":{"line":106,"col":9},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Block":{"targeted_by_break":false,"region_scope":{"id":34,"data":"Node"},"opt_destruction_scope":null,"span":{"lo":{"line":104,"col":15},"hi":{"line":106,"col":9},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"stmts":[],"expr":{"ty":{"Adt":{"generic_args":[{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]}}}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"option"},"disambiguator":0},{"data":{"TypeNs":"Option"},"disambiguator":0}],"index":[1,41362]}}},"span":{"lo":{"line":105,"col":12},"hi":{"line":105,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Adt":{"info":{"type_namespace":{"krate":"core","path":[{"data":{"TypeNs":"option"},"disambiguator":0}],"index":[1,41362]},"typ":{"krate":"core","path":[{"data":{"TypeNs":"option"},"disambiguator":0},{"data":{"TypeNs":"Option"},"disambiguator":0}],"index":[1,41362]},"variant":{"krate":"core","path":[{"data":{"TypeNs":"option"},"disambiguator":0},{"data":{"TypeNs":"Option"},"disambiguator":0},{"data":{"TypeNs":"None"},"disambiguator":0}],"index":[1,41364]},"variant_index":0,"typ_is_record":false,"variant_is_record":false,"typ_is_struct":false},"user_ty":null,"fields":[],"base":null}},"hir_id":[238,32],"attributes":[]},"safety_mode":"Safe"}},"hir_id":[238,31],"attributes":[]}}},"hir_id":[238,3],"attributes":[]},"safety_mode":"Safe"}},"hir_id":[238,36],"attributes":[]},"sig_span":{"lo":{"line":100,"col":4},"hi":{"line":100,"col":38},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}},"defaultness":"Final","span":{"lo":{"line":100,"col":4},"hi":{"line":107,"col":5},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":100,"col":4},"hi":{"line":100,"col":7},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"_hax::skip","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:99:5: 99:12 (#46), close: concordium/src/concordium_types.rs:99:5: 99:12 (#46) }"}},"delim":"Parenthesis","tokens":""}},"tokens":null},"tokens":null}},"id":441,"style":"Outer","span":{"lo":{"line":99,"col":4},"hi":{"line":99,"col":11},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," This returns `None` for all values >= 0 and `Some` otherwise."]},"id":440,"style":"Outer","span":{"lo":{"line":98,"col":4},"hi":{"line":98,"col":69},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}}]}},"attributes":{"attributes":[],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"MacroNs":"bail"},"disambiguator":0}],"index":[0,71]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"MacroNs":"bail"},"disambiguator":0}],"index":[0,71]},"span":{"lo":{"line":118,"col":0},"hi":{"line":127,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":118,"col":0},"hi":{"line":127,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Macro":[{"body":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:118:19: 118:20 (#0), close: concordium/src/concordium_types.rs:127:1: 127:2 (#0) }"}},"delim":"Brace","tokens":"() => { { return Err(Default :: default()) ; } } ; ($arg : expr) =>\n{ { return Err($arg) ; } } ;"},"macro_rules":true},"Bang"]},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," The `bail` macro can be used for cleaner error handling. If the function has"]},"id":100,"style":"Outer","span":{"lo":{"line":112,"col":0},"hi":{"line":112,"col":80},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," result type `Result` invoking `bail` will terminate execution early with an"]},"id":101,"style":"Outer","span":{"lo":{"line":113,"col":0},"hi":{"line":113,"col":79},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," error."]},"id":102,"style":"Outer","span":{"lo":{"line":114,"col":0},"hi":{"line":114,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," If an argument is supplied, this will be used as the error, otherwise it"]},"id":103,"style":"Outer","span":{"lo":{"line":115,"col":0},"hi":{"line":115,"col":76},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," requires the type `E` in `Result<_, E>` to implement the `Default` trait."]},"id":104,"style":"Outer","span":{"lo":{"line":116,"col":0},"hi":{"line":116,"col":77},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"macro_export","args":"Empty","tokens":null},"tokens":null}},"id":105,"style":"Outer","span":{"lo":{"line":117,"col":0},"hi":{"line":117,"col":15},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"MacroNs":"ensure"},"disambiguator":0}],"index":[0,72]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"MacroNs":"ensure"},"disambiguator":0}],"index":[0,72]},"span":{"lo":{"line":133,"col":0},"hi":{"line":144,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":133,"col":0},"hi":{"line":144,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Macro":[{"body":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:133:21: 133:22 (#0), close: concordium/src/concordium_types.rs:144:1: 144:2 (#0) }"}},"delim":"Brace","tokens":"($p : expr) => { if! $p { $crate :: bail! () ; } } ; ($p : expr, $arg : expr)\n=> { { if! $p { $crate :: bail! ($arg) ; } } } ;"},"macro_rules":true},"Bang"]},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," The `ensure` macro can be used for cleaner error handling. It is analogous"]},"id":106,"style":"Outer","span":{"lo":{"line":129,"col":0},"hi":{"line":129,"col":78},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," to `assert`, but instead of panicking it uses `bail` to terminate execution"]},"id":107,"style":"Outer","span":{"lo":{"line":130,"col":0},"hi":{"line":130,"col":79},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," of the function early."]},"id":108,"style":"Outer","span":{"lo":{"line":131,"col":0},"hi":{"line":131,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"macro_export","args":"Empty","tokens":null},"tokens":null}},"id":109,"style":"Outer","span":{"lo":{"line":132,"col":0},"hi":{"line":132,"col":15},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"MacroNs":"ensure_eq"},"disambiguator":0}],"index":[0,73]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"MacroNs":"ensure_eq"},"disambiguator":0}],"index":[0,73]},"span":{"lo":{"line":149,"col":0},"hi":{"line":156,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":149,"col":0},"hi":{"line":156,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Macro":[{"body":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:149:24: 149:25 (#0), close: concordium/src/concordium_types.rs:156:1: 156:2 (#0) }"}},"delim":"Brace","tokens":"($l : expr, $r : expr) => { $crate :: ensure! ($l == $r) } ;\n($l : expr, $r : expr, $arg : expr) => { $crate :: ensure! ($l == $r, $arg) }\n;"},"macro_rules":true},"Bang"]},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," ## Variants of `ensure` for ease of use in certain contexts."]},"id":110,"style":"Outer","span":{"lo":{"line":146,"col":0},"hi":{"line":146,"col":64},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," Ensure the first two arguments are equal, using `bail` otherwise."]},"id":111,"style":"Outer","span":{"lo":{"line":147,"col":0},"hi":{"line":147,"col":69},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"macro_export","args":"Empty","tokens":null},"tokens":null}},"id":112,"style":"Outer","span":{"lo":{"line":148,"col":0},"hi":{"line":148,"col":15},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"MacroNs":"ensure_ne"},"disambiguator":0}],"index":[0,74]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"MacroNs":"ensure_ne"},"disambiguator":0}],"index":[0,74]},"span":{"lo":{"line":160,"col":0},"hi":{"line":167,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":160,"col":0},"hi":{"line":167,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Macro":[{"body":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:160:24: 160:25 (#0), close: concordium/src/concordium_types.rs:167:1: 167:2 (#0) }"}},"delim":"Brace","tokens":"($l : expr, $r : expr) => { $crate :: ensure! ($l != $r) } ;\n($l : expr, $r : expr, $arg : expr) => { $crate :: ensure! ($l != $r, $arg) }\n;"},"macro_rules":true},"Bang"]},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"macro_export","args":"Empty","tokens":null},"tokens":null}},"id":113,"style":"Outer","span":{"lo":{"line":158,"col":0},"hi":{"line":158,"col":15},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," Ensure the first two arguments are __not__ equal, using `bail` otherwise."]},"id":114,"style":"Outer","span":{"lo":{"line":159,"col":0},"hi":{"line":159,"col":77},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"MacroNs":"fail"},"disambiguator":0}],"index":[0,75]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"MacroNs":"fail"},"disambiguator":0}],"index":[0,75]},"span":{"lo":{"line":197,"col":0},"hi":{"line":211,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":197,"col":0},"hi":{"line":211,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Macro":[{"body":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:197:19: 197:20 (#0), close: concordium/src/concordium_types.rs:211:1: 211:2 (#0) }"}},"delim":"Brace","tokens":"() =>\n{\n {\n $crate :: test_infrastructure ::\n report_error(\"\", file! (), line! (), column! ()) ; panic! ()\n }\n} ; ($($arg : tt), +) =>\n{\n {\n let msg = & $crate :: alloc :: format! ($($arg), +) ; $crate ::\n test_infrastructure ::\n report_error(& msg, file! (), line! (), column! ()) ; panic!\n (\"{}\", msg)\n }\n} ;"},"macro_rules":true},"Bang"]},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," The `fail` macro is used for testing as a substitute for the panic macro."]},"id":120,"style":"Outer","span":{"lo":{"line":192,"col":0},"hi":{"line":192,"col":77},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," It reports back error information to the host."]},"id":121,"style":"Outer","span":{"lo":{"line":193,"col":0},"hi":{"line":193,"col":50},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," Used only in testing."]},"id":122,"style":"Outer","span":{"lo":{"line":194,"col":0},"hi":{"line":194,"col":25},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"cfg","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:195:6: 195:7 (#0), close: concordium/src/concordium_types.rs:195:27: 195:28 (#0) }"}},"delim":"Parenthesis","tokens":"not(feature = \"std\")"}},"tokens":null},"tokens":null}},"id":123,"style":"Outer","span":{"lo":{"line":195,"col":0},"hi":{"line":195,"col":28},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"macro_export","args":"Empty","tokens":null},"tokens":null}},"id":124,"style":"Outer","span":{"lo":{"line":196,"col":0},"hi":{"line":196,"col":15},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"MacroNs":"claim"},"disambiguator":0}],"index":[0,76]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"MacroNs":"claim"},"disambiguator":0}],"index":[0,76]},"span":{"lo":{"line":217,"col":0},"hi":{"line":233,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":217,"col":0},"hi":{"line":233,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Macro":[{"body":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:217:20: 217:21 (#0), close: concordium/src/concordium_types.rs:233:1: 233:2 (#0) }"}},"delim":"Brace","tokens":"($cond : expr) => { if! $cond { $crate :: fail! () } } ; ($cond : expr,) =>\n{ if! $cond { $crate :: fail! () } } ; ($cond : expr, $($arg : tt), +) =>\n{ if! $cond { $crate :: fail! ($($arg), +) } } ;"},"macro_rules":true},"Bang"]},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," The `claim` macro is used for testing as a substitute for the assert macro."]},"id":125,"style":"Outer","span":{"lo":{"line":213,"col":0},"hi":{"line":213,"col":79},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," It checks the condition and if false it reports back an error."]},"id":126,"style":"Outer","span":{"lo":{"line":214,"col":0},"hi":{"line":214,"col":66},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," Used only in testing."]},"id":127,"style":"Outer","span":{"lo":{"line":215,"col":0},"hi":{"line":215,"col":25},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"macro_export","args":"Empty","tokens":null},"tokens":null}},"id":128,"style":"Outer","span":{"lo":{"line":216,"col":0},"hi":{"line":216,"col":15},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"MacroNs":"claim_eq"},"disambiguator":0}],"index":[0,77]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"MacroNs":"claim_eq"},"disambiguator":0}],"index":[0,77]},"span":{"lo":{"line":238,"col":0},"hi":{"line":248,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":238,"col":0},"hi":{"line":248,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Macro":[{"body":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:238:23: 238:24 (#0), close: concordium/src/concordium_types.rs:248:1: 248:2 (#0) }"}},"delim":"Brace","tokens":"($left : expr, $right : expr) =>\n{\n $crate :: claim!\n ($left == $right, \"left and right are not equal\\nleft: {:?}\\nright: {:?}\",\n $left, $right)\n} ; ($left : expr, $right : expr,) => { $crate :: claim_eq! ($left, $right) }\n; ($left : expr, $right : expr, $($arg : tt), +) =>\n{ $crate :: claim! ($left == $right, $($arg), +) } ;"},"macro_rules":true},"Bang"]},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Ensure the first two arguments are equal, just like `assert_eq!`, otherwise"]},"id":129,"style":"Outer","span":{"lo":{"line":235,"col":0},"hi":{"line":235,"col":79},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," reports an error. Used only in testing."]},"id":130,"style":"Outer","span":{"lo":{"line":236,"col":0},"hi":{"line":236,"col":43},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"macro_export","args":"Empty","tokens":null},"tokens":null}},"id":131,"style":"Outer","span":{"lo":{"line":237,"col":0},"hi":{"line":237,"col":15},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"MacroNs":"claim_ne"},"disambiguator":0}],"index":[0,78]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"MacroNs":"claim_ne"},"disambiguator":0}],"index":[0,78]},"span":{"lo":{"line":254,"col":0},"hi":{"line":264,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":254,"col":0},"hi":{"line":264,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Macro":[{"body":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:254:23: 254:24 (#0), close: concordium/src/concordium_types.rs:264:1: 264:2 (#0) }"}},"delim":"Brace","tokens":"($left : expr, $right : expr) => { $crate :: claim! ($left != $right) } ;\n($left : expr, $right : expr,) => { $crate :: claim! ($left != $right) } ;\n($left : expr, $right : expr, $($arg : tt), +) =>\n{ $crate :: claim! ($left != $right, $($arg), +) } ;"},"macro_rules":true},"Bang"]},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Ensure the first two arguments are *not* equal, just like `assert_ne!`,"]},"id":132,"style":"Outer","span":{"lo":{"line":250,"col":0},"hi":{"line":250,"col":75},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," otherwise reports an error."]},"id":133,"style":"Outer","span":{"lo":{"line":251,"col":0},"hi":{"line":251,"col":31},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," Used only in testing."]},"id":134,"style":"Outer","span":{"lo":{"line":252,"col":0},"hi":{"line":252,"col":25},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"macro_export","args":"Empty","tokens":null},"tokens":null}},"id":135,"style":"Outer","span":{"lo":{"line":253,"col":0},"hi":{"line":253,"col":15},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ReceiveResult"},"disambiguator":0}],"index":[0,79]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ReceiveResult"},"disambiguator":0}],"index":[0,79]},"span":{"lo":{"line":290,"col":0},"hi":{"line":290,"col":46},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":290,"col":0},"hi":{"line":290,"col":46},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"TyAlias":[{"Adt":{"generic_args":[{"Type":{"Param":{"index":0,"name":"A"}}},{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]}}}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"result"},"disambiguator":0},{"data":{"TypeNs":"Result"},"disambiguator":0}],"index":[1,41506]}}},{"params":[{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ReceiveResult"},"disambiguator":0}],"index":[0,79]},"local_id":1},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ReceiveResult"},"disambiguator":0},{"data":{"TypeNs":"A"},"disambiguator":0}],"index":[0,80]},"name":{"Plain":{"name":"A","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ReceiveResult"},"disambiguator":0}],"index":[0,79]},"local_id":1}}},"span":{"lo":{"line":290,"col":23},"hi":{"line":290,"col":24},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"pure_wrt_drop":false,"kind":{"Type":{"default":null,"synthetic":false}},"colon_span":null,"attributes":[]}],"predicates":[],"bounds":[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"Sized"},"disambiguator":0}],"index":[1,2689]},"generic_args":[{"Type":{"Param":{"index":0,"name":"A"}}}]},"is_const":false,"is_positive":true}},"id":3652190691640089114}}],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":290,"col":25},"hi":{"line":290,"col":25},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":290,"col":22},"hi":{"line":290,"col":25},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}]},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," The expected return type of the receive method of a smart contract."]},"id":136,"style":"Outer","span":{"lo":{"line":266,"col":0},"hi":{"line":266,"col":71},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line",""]},"id":137,"style":"Outer","span":{"lo":{"line":267,"col":0},"hi":{"line":267,"col":3},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," Optionally, to define a custom type for error instead of using"]},"id":138,"style":"Outer","span":{"lo":{"line":268,"col":0},"hi":{"line":268,"col":66},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," Reject, allowing to track the reason for rejection, *but only in unit"]},"id":139,"style":"Outer","span":{"lo":{"line":269,"col":0},"hi":{"line":269,"col":73},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," tests*."]},"id":140,"style":"Outer","span":{"lo":{"line":270,"col":0},"hi":{"line":270,"col":11},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line",""]},"id":141,"style":"Outer","span":{"lo":{"line":271,"col":0},"hi":{"line":271,"col":3},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," See also the documentation for [bail!](macro.bail.html) for how to use"]},"id":142,"style":"Outer","span":{"lo":{"line":272,"col":0},"hi":{"line":272,"col":74},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," custom error types."]},"id":143,"style":"Outer","span":{"lo":{"line":273,"col":0},"hi":{"line":273,"col":23},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line",""]},"id":144,"style":"Outer","span":{"lo":{"line":274,"col":0},"hi":{"line":274,"col":3},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," # Example"]},"id":145,"style":"Outer","span":{"lo":{"line":275,"col":0},"hi":{"line":275,"col":13},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," Defining a custom error type"]},"id":146,"style":"Outer","span":{"lo":{"line":276,"col":0},"hi":{"line":276,"col":32},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," // ```rust"]},"id":147,"style":"Outer","span":{"lo":{"line":277,"col":0},"hi":{"line":277,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," // enum MyCustomError {"]},"id":148,"style":"Outer","span":{"lo":{"line":278,"col":0},"hi":{"line":278,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," // SomeError"]},"id":149,"style":"Outer","span":{"lo":{"line":279,"col":0},"hi":{"line":279,"col":20},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," // }"]},"id":150,"style":"Outer","span":{"lo":{"line":280,"col":0},"hi":{"line":280,"col":8},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," // "]},"id":151,"style":"Outer","span":{"lo":{"line":281,"col":0},"hi":{"line":281,"col":7},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," // #[receive(contract = \"mycontract\", name = \"receive\")]"]},"id":152,"style":"Outer","span":{"lo":{"line":282,"col":0},"hi":{"line":282,"col":60},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," // fn contract_receive("]},"id":153,"style":"Outer","span":{"lo":{"line":283,"col":0},"hi":{"line":283,"col":78},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," // ctx: &R,"]},"id":154,"style":"Outer","span":{"lo":{"line":284,"col":0},"hi":{"line":284,"col":19},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," // receive_amount: Amount,"]},"id":155,"style":"Outer","span":{"lo":{"line":285,"col":0},"hi":{"line":285,"col":34},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," // logger: &mut L,"]},"id":156,"style":"Outer","span":{"lo":{"line":286,"col":0},"hi":{"line":286,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," // state: &mut State,"]},"id":157,"style":"Outer","span":{"lo":{"line":287,"col":0},"hi":{"line":287,"col":29},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," // ) -> Result { ... }"]},"id":158,"style":"Outer","span":{"lo":{"line":288,"col":0},"hi":{"line":288,"col":44},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," // ```"]},"id":159,"style":"Outer","span":{"lo":{"line":289,"col":0},"hi":{"line":289,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"InitResult"},"disambiguator":0}],"index":[0,81]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"InitResult"},"disambiguator":0}],"index":[0,81]},"span":{"lo":{"line":315,"col":0},"hi":{"line":315,"col":43},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":315,"col":0},"hi":{"line":315,"col":43},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"TyAlias":[{"Adt":{"generic_args":[{"Type":{"Param":{"index":0,"name":"S"}}},{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]}}}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"result"},"disambiguator":0},{"data":{"TypeNs":"Result"},"disambiguator":0}],"index":[1,41506]}}},{"params":[{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"InitResult"},"disambiguator":0}],"index":[0,81]},"local_id":1},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"InitResult"},"disambiguator":0},{"data":{"TypeNs":"S"},"disambiguator":0}],"index":[0,82]},"name":{"Plain":{"name":"S","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"InitResult"},"disambiguator":0}],"index":[0,81]},"local_id":1}}},"span":{"lo":{"line":315,"col":20},"hi":{"line":315,"col":21},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"pure_wrt_drop":false,"kind":{"Type":{"default":null,"synthetic":false}},"colon_span":null,"attributes":[]}],"predicates":[],"bounds":[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"Sized"},"disambiguator":0}],"index":[1,2689]},"generic_args":[{"Type":{"Param":{"index":0,"name":"S"}}}]},"is_const":false,"is_positive":true}},"id":676887403273334043}}],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":315,"col":22},"hi":{"line":315,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":315,"col":19},"hi":{"line":315,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}]},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," The expected return type of the init method of the smart contract,"]},"id":160,"style":"Outer","span":{"lo":{"line":292,"col":0},"hi":{"line":292,"col":70},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," parametrized by the state type of the smart contract."]},"id":161,"style":"Outer","span":{"lo":{"line":293,"col":0},"hi":{"line":293,"col":57},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line",""]},"id":162,"style":"Outer","span":{"lo":{"line":294,"col":0},"hi":{"line":294,"col":3},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," Optionally, to define a custom type for error instead of using Reject,"]},"id":163,"style":"Outer","span":{"lo":{"line":295,"col":0},"hi":{"line":295,"col":74},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," allowing the track the reason for rejection, *but only in unit tests*."]},"id":164,"style":"Outer","span":{"lo":{"line":296,"col":0},"hi":{"line":296,"col":74},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line",""]},"id":165,"style":"Outer","span":{"lo":{"line":297,"col":0},"hi":{"line":297,"col":3},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," See also the documentation for [bail!](macro.bail.html) for how to use"]},"id":166,"style":"Outer","span":{"lo":{"line":298,"col":0},"hi":{"line":298,"col":74},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," custom error types."]},"id":167,"style":"Outer","span":{"lo":{"line":299,"col":0},"hi":{"line":299,"col":23},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line",""]},"id":168,"style":"Outer","span":{"lo":{"line":300,"col":0},"hi":{"line":300,"col":3},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," # Example"]},"id":169,"style":"Outer","span":{"lo":{"line":301,"col":0},"hi":{"line":301,"col":13},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," Defining a custom error type"]},"id":170,"style":"Outer","span":{"lo":{"line":302,"col":0},"hi":{"line":302,"col":32},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," // ```rust"]},"id":171,"style":"Outer","span":{"lo":{"line":303,"col":0},"hi":{"line":303,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," // enum MyCustomError {"]},"id":172,"style":"Outer","span":{"lo":{"line":304,"col":0},"hi":{"line":304,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," // SomeError"]},"id":173,"style":"Outer","span":{"lo":{"line":305,"col":0},"hi":{"line":305,"col":20},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," // }"]},"id":174,"style":"Outer","span":{"lo":{"line":306,"col":0},"hi":{"line":306,"col":8},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," // "]},"id":175,"style":"Outer","span":{"lo":{"line":307,"col":0},"hi":{"line":307,"col":7},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," // #[init(contract = \"mycontract\")]"]},"id":176,"style":"Outer","span":{"lo":{"line":308,"col":0},"hi":{"line":308,"col":39},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," // fn contract_init("]},"id":177,"style":"Outer","span":{"lo":{"line":309,"col":0},"hi":{"line":309,"col":75},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," // ctx: &R,"]},"id":178,"style":"Outer","span":{"lo":{"line":310,"col":0},"hi":{"line":310,"col":19},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," // receive_amount: Amount,"]},"id":179,"style":"Outer","span":{"lo":{"line":311,"col":0},"hi":{"line":311,"col":34},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," // logger: &mut L,"]},"id":180,"style":"Outer","span":{"lo":{"line":312,"col":0},"hi":{"line":312,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," // ) -> Result { ... }"]},"id":181,"style":"Outer","span":{"lo":{"line":313,"col":0},"hi":{"line":313,"col":48},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," // ```"]},"id":182,"style":"Outer","span":{"lo":{"line":314,"col":0},"hi":{"line":314,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"sealed"},"disambiguator":0}],"index":[0,83]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"sealed"},"disambiguator":0}],"index":[0,83]},"span":{"lo":{"line":317,"col":0},"hi":{"line":325,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":317,"col":0},"hi":{"line":325,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Mod":[{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"sealed"},"disambiguator":0},{"data":"Use","disambiguator":0}],"index":[0,84]},"span":{"lo":{"line":318,"col":4},"hi":{"line":318,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":318,"col":4},"hi":{"line":318,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Use":[{"span":{"lo":{"line":318,"col":8},"hi":{"line":318,"col":13},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"res":[{"Def":[{"DefKind":{"todo":"Mod"}},{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0}],"index":[0,64]}]}],"segments":[{"ident":["super",{"lo":{"line":318,"col":8},"hi":{"line":318,"col":13},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}],"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"sealed"},"disambiguator":0},{"data":"Use","disambiguator":0}],"index":[0,84]},"local_id":1},"res":"Err","args":null,"infer_args":false}],"rename":null},"Glob"]},"attributes":{"attributes":[],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"sealed"},"disambiguator":0},{"data":{"TypeNs":"ContextType"},"disambiguator":0}],"index":[0,85]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"sealed"},"disambiguator":0},{"data":{"TypeNs":"ContextType"},"disambiguator":0}],"index":[0,85]},"span":{"lo":{"line":322,"col":4},"hi":{"line":322,"col":28},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":322,"col":4},"hi":{"line":322,"col":28},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Trait":["No","Normal",{"params":[],"predicates":[],"bounds":[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"sealed"},"disambiguator":0},{"data":{"TypeNs":"ContextType"},"disambiguator":0}],"index":[0,85]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}}]},"is_const":false,"is_positive":true}},"id":4557742319775345286}}],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":322,"col":25},"hi":{"line":322,"col":25},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":322,"col":25},"hi":{"line":322,"col":25},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"sealed"},"disambiguator":0},{"data":{"TypeNs":"ContextType"},"disambiguator":0}],"index":[0,85]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}}]},"is_const":false,"is_positive":true}},"id":4557742319775345286}}],[]]},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Marker trait intended to indicate which context type we have."]},"id":183,"style":"Outer","span":{"lo":{"line":319,"col":4},"hi":{"line":319,"col":69},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," This is deliberately a sealed trait, so that it is only implementable"]},"id":184,"style":"Outer","span":{"lo":{"line":320,"col":4},"hi":{"line":320,"col":77},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," by types in this crate."]},"id":185,"style":"Outer","span":{"lo":{"line":321,"col":4},"hi":{"line":321,"col":31},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"sealed"},"disambiguator":0},{"data":"Impl","disambiguator":0}],"index":[0,86]},"span":{"lo":{"line":323,"col":4},"hi":{"line":323,"col":45},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":323,"col":4},"hi":{"line":323,"col":45},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Impl":{"unsafety":"Normal","polarity":"Positive","defaultness":"Final","defaultness_span":null,"constness":"NotConst","generics":{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":323,"col":42},"hi":{"line":323,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":323,"col":8},"hi":{"line":323,"col":8},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"of_trait":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"sealed"},"disambiguator":0},{"data":{"TypeNs":"ContextType"},"disambiguator":0}],"index":[0,85]},"generic_args":[{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"InitContextExtern"},"disambiguator":0}],"index":[0,230]}}}}]},"self_ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"InitContextExtern"},"disambiguator":0}],"index":[0,230]}}},"items":[]}},"attributes":{"attributes":[],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"sealed"},"disambiguator":0},{"data":"Impl","disambiguator":1}],"index":[0,87]},"span":{"lo":{"line":324,"col":4},"hi":{"line":324,"col":48},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":324,"col":4},"hi":{"line":324,"col":48},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Impl":{"unsafety":"Normal","polarity":"Positive","defaultness":"Final","defaultness_span":null,"constness":"NotConst","generics":{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":324,"col":45},"hi":{"line":324,"col":45},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":324,"col":8},"hi":{"line":324,"col":8},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"of_trait":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"sealed"},"disambiguator":0},{"data":{"TypeNs":"ContextType"},"disambiguator":0}],"index":[0,85]},"generic_args":[{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ReceiveContextExtern"},"disambiguator":0}],"index":[0,234]}}}}]},"self_ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ReceiveContextExtern"},"disambiguator":0}],"index":[0,234]}}},"items":[]}},"attributes":{"attributes":[],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]}]},"attributes":{"attributes":[],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ExternContext"},"disambiguator":0}],"index":[0,224]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ExternContext"},"disambiguator":0}],"index":[0,224]},"span":{"lo":{"line":330,"col":0},"hi":{"line":332,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":330,"col":0},"hi":{"line":332,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Struct":[{"Struct":[[{"span":{"lo":{"line":331,"col":4},"hi":{"line":331,"col":41},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":331,"col":4},"hi":{"line":331,"col":4},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"ident":["marker",{"lo":{"line":331,"col":4},"hi":{"line":331,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}],"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ExternContext"},"disambiguator":0}],"index":[0,224]},"local_id":14},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ExternContext"},"disambiguator":0},{"data":{"ValueNs":"marker"},"disambiguator":0}],"index":[0,226]},"ty":{"Adt":{"generic_args":[{"Type":{"Param":{"index":0,"name":"T"}}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"PhantomData"},"disambiguator":0}],"index":[1,2704]}}},"attributes":[]}],false]},{"params":[{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ExternContext"},"disambiguator":0}],"index":[0,224]},"local_id":7},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ExternContext"},"disambiguator":0},{"data":{"TypeNs":"T"},"disambiguator":0}],"index":[0,225]},"name":{"Plain":{"name":"T","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ExternContext"},"disambiguator":0}],"index":[0,224]},"local_id":7}}},"span":{"lo":{"line":330,"col":25},"hi":{"line":330,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"pure_wrt_drop":false,"kind":{"Type":{"default":null,"synthetic":false}},"colon_span":{"lo":{"line":330,"col":26},"hi":{"line":330,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"attributes":[]}],"predicates":[{"BoundPredicate":{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ExternContext"},"disambiguator":0}],"index":[0,224]},"local_id":6},"span":{"lo":{"line":330,"col":26},"hi":{"line":330,"col":47},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"origin":"GenericParam","bound_generic_params":[],"bounded_ty":{"Param":{"index":0,"name":"T"}}}}],"bounds":[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"Sized"},"disambiguator":0}],"index":[1,2689]},"generic_args":[{"Type":{"Param":{"index":0,"name":"T"}}}]},"is_const":false,"is_positive":true}},"id":14597494069885551087}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"sealed"},"disambiguator":0},{"data":{"TypeNs":"ContextType"},"disambiguator":0}],"index":[0,85]},"generic_args":[{"Type":{"Param":{"index":0,"name":"T"}}}]},"is_const":false,"is_positive":true}},"id":11684441412359143739}}],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":330,"col":48},"hi":{"line":330,"col":48},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":330,"col":24},"hi":{"line":330,"col":48},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}]},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Context backed by host functions."]},"id":186,"style":"Outer","span":{"lo":{"line":327,"col":0},"hi":{"line":327,"col":37},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"doc","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:329:6: 329:7 (#0), close: concordium/src/concordium_types.rs:329:13: 329:14 (#0) }"}},"delim":"Parenthesis","tokens":"hidden"}},"tokens":null},"tokens":null}},"id":188,"style":"Outer","span":{"lo":{"line":329,"col":0},"hi":{"line":329,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":22}],"index":[0,227]},"span":{"lo":{"line":328,"col":9},"hi":{"line":328,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":328,"col":9},"hi":{"line":328,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Impl":{"unsafety":"Normal","polarity":"Positive","defaultness":"Final","defaultness_span":null,"constness":"NotConst","generics":{"params":[{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":22}],"index":[0,227]},"local_id":11},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":22},{"data":{"TypeNs":"T"},"disambiguator":0}],"index":[0,228]},"name":{"Plain":{"name":"T","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":22}],"index":[0,227]},"local_id":11}}},"span":{"lo":{"line":330,"col":25},"hi":{"line":330,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"pure_wrt_drop":false,"kind":{"Type":{"default":null,"synthetic":false}},"colon_span":null,"attributes":[]}],"predicates":[{"BoundPredicate":{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":22}],"index":[0,227]},"local_id":10},"span":{"lo":{"line":330,"col":26},"hi":{"line":330,"col":47},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"origin":"GenericParam","bound_generic_params":[],"bounded_ty":{"Param":{"index":0,"name":"T"}}}}],"bounds":[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"Sized"},"disambiguator":0}],"index":[1,2689]},"generic_args":[{"Type":{"Param":{"index":0,"name":"T"}}}]},"is_const":false,"is_positive":true}},"id":14597494069885551087}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"default"},"disambiguator":0},{"data":{"TypeNs":"Default"},"disambiguator":0}],"index":[1,2587]},"generic_args":[{"Type":{"Param":{"index":0,"name":"T"}}}]},"is_const":false,"is_positive":true}},"id":6057256109449739874}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"sealed"},"disambiguator":0},{"data":{"TypeNs":"ContextType"},"disambiguator":0}],"index":[0,85]},"generic_args":[{"Type":{"Param":{"index":0,"name":"T"}}}]},"is_const":false,"is_positive":true}},"id":11684441412359143739}}],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":330,"col":48},"hi":{"line":330,"col":48},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":330,"col":24},"hi":{"line":330,"col":48},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"of_trait":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"default"},"disambiguator":0},{"data":{"TypeNs":"Default"},"disambiguator":0}],"index":[1,2587]},"generic_args":[{"Type":{"Adt":{"generic_args":[{"Type":{"Param":{"index":0,"name":"T"}}}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ExternContext"},"disambiguator":0}],"index":[0,224]}}}}]},"self_ty":{"Adt":{"generic_args":[{"Type":{"Param":{"index":0,"name":"T"}}}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ExternContext"},"disambiguator":0}],"index":[0,224]}}},"items":[{"ident":["default",{"lo":{"line":328,"col":9},"hi":{"line":328,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":22},{"data":{"ValueNs":"default"},"disambiguator":0}],"index":[0,229]},"generics":{"params":[],"predicates":[],"bounds":[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"Sized"},"disambiguator":0}],"index":[1,2689]},"generic_args":[{"Type":{"Param":{"index":0,"name":"T"}}}]},"is_const":false,"is_positive":true}},"id":14597494069885551087}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"default"},"disambiguator":0},{"data":{"TypeNs":"Default"},"disambiguator":0}],"index":[1,2587]},"generic_args":[{"Type":{"Param":{"index":0,"name":"T"}}}]},"is_const":false,"is_positive":true}},"id":6057256109449739874}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"sealed"},"disambiguator":0},{"data":{"TypeNs":"ContextType"},"disambiguator":0}],"index":[0,85]},"generic_args":[{"Type":{"Param":{"index":0,"name":"T"}}}]},"is_const":false,"is_positive":true}},"id":11684441412359143739}}],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":328,"col":9},"hi":{"line":328,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":328,"col":9},"hi":{"line":328,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"kind":{"Fn":{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"params":[],"ret":{"Adt":{"generic_args":[{"Type":{"Param":{"index":0,"name":"T"}}}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ExternContext"},"disambiguator":0}],"index":[0,224]}}},"body":{"ty":{"Adt":{"generic_args":[{"Type":{"Param":{"index":0,"name":"T"}}}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ExternContext"},"disambiguator":0}],"index":[0,224]}}},"span":{"lo":{"line":328,"col":9},"hi":{"line":328,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Block":{"targeted_by_break":false,"region_scope":{"id":10,"data":"Node"},"opt_destruction_scope":null,"span":{"lo":{"line":328,"col":9},"hi":{"line":328,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"stmts":[],"expr":{"ty":{"Adt":{"generic_args":[{"Type":{"Param":{"index":0,"name":"T"}}}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ExternContext"},"disambiguator":0}],"index":[0,224]}}},"span":{"lo":{"line":328,"col":9},"hi":{"line":328,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Adt":{"info":{"type_namespace":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0}],"index":[0,224]},"typ":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ExternContext"},"disambiguator":0}],"index":[0,224]},"variant":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ExternContext"},"disambiguator":0}],"index":[0,224]},"variant_index":0,"typ_is_record":true,"variant_is_record":true,"typ_is_struct":true},"user_ty":null,"fields":[{"field":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ExternContext"},"disambiguator":0},{"data":{"ValueNs":"marker"},"disambiguator":0}],"index":[0,226]},"value":{"ty":{"Adt":{"generic_args":[{"Type":{"Param":{"index":0,"name":"T"}}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"PhantomData"},"disambiguator":0}],"index":[1,2704]}}},"span":{"lo":{"line":331,"col":4},"hi":{"line":331,"col":41},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Call":{"ty":{"Arrow":{"value":{"inputs":[],"output":{"Adt":{"generic_args":[{"Type":{"Param":{"index":0,"name":"T"}}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"PhantomData"},"disambiguator":0}],"index":[1,2704]}}},"c_variadic":false,"unsafety":"Normal","abi":{"Abi":{"todo":"Rust"}}},"bound_vars":[]}},"fun":{"ty":{"Arrow":{"value":{"inputs":[],"output":{"Adt":{"generic_args":[{"Type":{"Param":{"index":0,"name":"T"}}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"PhantomData"},"disambiguator":0}],"index":[1,2704]}}},"c_variadic":false,"unsafety":"Normal","abi":{"Abi":{"todo":"Rust"}}},"bound_vars":[]}},"span":{"lo":{"line":331,"col":4},"hi":{"line":331,"col":41},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"GlobalName":{"id":{"krate":"core","path":[{"data":{"TypeNs":"default"},"disambiguator":0},{"data":{"TypeNs":"Default"},"disambiguator":0},{"data":{"ValueNs":"default"},"disambiguator":0}],"index":[1,2588]}}},"hir_id":null,"attributes":[]},"args":[],"from_hir_call":true,"fn_span":{"lo":{"line":331,"col":4},"hi":{"line":331,"col":41},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"impl":{"impl":{"Concrete":{"id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":"Impl","disambiguator":14}],"index":[1,2727]},"generics":[{"Type":{"Param":{"index":0,"name":"T"}}}]}},"args":[]}}},"hir_id":[229,4],"attributes":[]}}],"base":null}},"hir_id":[229,1],"attributes":[]},"safety_mode":"Safe"}},"hir_id":[229,11],"attributes":[]},"sig_span":{"lo":{"line":328,"col":9},"hi":{"line":328,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}},"defaultness":"Final","span":{"lo":{"line":328,"col":9},"hi":{"line":328,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":328,"col":9},"hi":{"line":328,"col":9},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"inline","args":"Empty","tokens":null},"tokens":null}},"id":433,"style":"Outer","span":{"lo":{"line":328,"col":9},"hi":{"line":328,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"automatically_derived","args":"Empty","tokens":null},"tokens":null}},"id":434,"style":"Outer","span":{"lo":{"line":328,"col":9},"hi":{"line":328,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}}]}},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"automatically_derived","args":"Empty","tokens":null},"tokens":null}},"id":434,"style":"Outer","span":{"lo":{"line":328,"col":9},"hi":{"line":328,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[{"kind":{"Macro":["Derive","Default"]},"call_site":{"lo":{"line":328,"col":9},"hi":{"line":328,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"def_site":{"lo":{"line":185,"col":0},"hi":{"line":185,"col":17},"filename":{"Real":{"Remapped":{"local_path":"/home/au538501/.rustup/toolchains/nightly-2023-06-02-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/default.rs","virtual_name":"/rustc/d59363ad0b6391b7fc5bbb02c9ccf9300eef3753/library/core/src/default.rs"}}}},"allow_internal_unstable":["core_intrinsics"],"edition":"Edition2021","macro_def_id":{"krate":"core","path":[{"data":{"TypeNs":"default"},"disambiguator":0},{"data":{"MacroNs":"Default"},"disambiguator":0}],"index":[1,2591]},"parent_module":{"krate":"core","path":[{"data":{"TypeNs":"default"},"disambiguator":0}],"index":[1,2586]},"allow_internal_unsafe":false,"local_inner_macros":false,"collapse_debuginfo":false}]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ChainMetaExtern"},"disambiguator":0}],"index":[0,88]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ChainMetaExtern"},"disambiguator":0}],"index":[0,88]},"span":{"lo":{"line":335,"col":0},"hi":{"line":335,"col":29},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":335,"col":0},"hi":{"line":335,"col":29},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Struct":[{"Struct":[[],false]},{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":335,"col":26},"hi":{"line":335,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":335,"col":26},"hi":{"line":335,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}]},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"doc","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:334:6: 334:7 (#0), close: concordium/src/concordium_types.rs:334:13: 334:14 (#0) }"}},"delim":"Parenthesis","tokens":"hidden"}},"tokens":null},"tokens":null}},"id":189,"style":"Outer","span":{"lo":{"line":334,"col":0},"hi":{"line":334,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"InitContextExtern"},"disambiguator":0}],"index":[0,230]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"InitContextExtern"},"disambiguator":0}],"index":[0,230]},"span":{"lo":{"line":339,"col":0},"hi":{"line":339,"col":29},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":339,"col":0},"hi":{"line":339,"col":29},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Struct":[{"Unit":[{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"InitContextExtern"},"disambiguator":0}],"index":[0,230]},"local_id":1},{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"InitContextExtern"},"disambiguator":0},{"data":"Ctor","disambiguator":0}],"index":[0,231]}]},{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":339,"col":28},"hi":{"line":339,"col":28},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":339,"col":28},"hi":{"line":339,"col":28},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}]},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"doc","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:338:6: 338:7 (#0), close: concordium/src/concordium_types.rs:338:13: 338:14 (#0) }"}},"delim":"Parenthesis","tokens":"hidden"}},"tokens":null},"tokens":null}},"id":191,"style":"Outer","span":{"lo":{"line":338,"col":0},"hi":{"line":338,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":23}],"index":[0,232]},"span":{"lo":{"line":337,"col":9},"hi":{"line":337,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":337,"col":9},"hi":{"line":337,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Impl":{"unsafety":"Normal","polarity":"Positive","defaultness":"Final","defaultness_span":null,"constness":"NotConst","generics":{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":339,"col":28},"hi":{"line":339,"col":28},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":339,"col":28},"hi":{"line":339,"col":28},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"of_trait":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"default"},"disambiguator":0},{"data":{"TypeNs":"Default"},"disambiguator":0}],"index":[1,2587]},"generic_args":[{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"InitContextExtern"},"disambiguator":0}],"index":[0,230]}}}}]},"self_ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"InitContextExtern"},"disambiguator":0}],"index":[0,230]}}},"items":[{"ident":["default",{"lo":{"line":337,"col":9},"hi":{"line":337,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":23},{"data":{"ValueNs":"default"},"disambiguator":0}],"index":[0,233]},"generics":{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":337,"col":9},"hi":{"line":337,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":337,"col":9},"hi":{"line":337,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"kind":{"Fn":{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"params":[],"ret":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"InitContextExtern"},"disambiguator":0}],"index":[0,230]}}},"body":{"ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"InitContextExtern"},"disambiguator":0}],"index":[0,230]}}},"span":{"lo":{"line":337,"col":9},"hi":{"line":337,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Block":{"targeted_by_break":false,"region_scope":{"id":3,"data":"Node"},"opt_destruction_scope":null,"span":{"lo":{"line":337,"col":9},"hi":{"line":337,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"stmts":[],"expr":{"ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"InitContextExtern"},"disambiguator":0}],"index":[0,230]}}},"span":{"lo":{"line":337,"col":9},"hi":{"line":337,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Adt":{"info":{"type_namespace":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0}],"index":[0,230]},"typ":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"InitContextExtern"},"disambiguator":0}],"index":[0,230]},"variant":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"InitContextExtern"},"disambiguator":0}],"index":[0,230]},"variant_index":0,"typ_is_record":false,"variant_is_record":false,"typ_is_struct":true},"user_ty":null,"fields":[],"base":null}},"hir_id":[233,1],"attributes":[]},"safety_mode":"Safe"}},"hir_id":[233,4],"attributes":[]},"sig_span":{"lo":{"line":337,"col":9},"hi":{"line":337,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}},"defaultness":"Final","span":{"lo":{"line":337,"col":9},"hi":{"line":337,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":337,"col":9},"hi":{"line":337,"col":9},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"inline","args":"Empty","tokens":null},"tokens":null}},"id":435,"style":"Outer","span":{"lo":{"line":337,"col":9},"hi":{"line":337,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"automatically_derived","args":"Empty","tokens":null},"tokens":null}},"id":436,"style":"Outer","span":{"lo":{"line":337,"col":9},"hi":{"line":337,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}}]}},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"automatically_derived","args":"Empty","tokens":null},"tokens":null}},"id":436,"style":"Outer","span":{"lo":{"line":337,"col":9},"hi":{"line":337,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[{"kind":{"Macro":["Derive","Default"]},"call_site":{"lo":{"line":337,"col":9},"hi":{"line":337,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"def_site":{"lo":{"line":185,"col":0},"hi":{"line":185,"col":17},"filename":{"Real":{"Remapped":{"local_path":"/home/au538501/.rustup/toolchains/nightly-2023-06-02-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/default.rs","virtual_name":"/rustc/d59363ad0b6391b7fc5bbb02c9ccf9300eef3753/library/core/src/default.rs"}}}},"allow_internal_unstable":["core_intrinsics"],"edition":"Edition2021","macro_def_id":{"krate":"core","path":[{"data":{"TypeNs":"default"},"disambiguator":0},{"data":{"MacroNs":"Default"},"disambiguator":0}],"index":[1,2591]},"parent_module":{"krate":"core","path":[{"data":{"TypeNs":"default"},"disambiguator":0}],"index":[1,2586]},"allow_internal_unsafe":false,"local_inner_macros":false,"collapse_debuginfo":false}]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ReceiveContextExtern"},"disambiguator":0}],"index":[0,234]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ReceiveContextExtern"},"disambiguator":0}],"index":[0,234]},"span":{"lo":{"line":342,"col":0},"hi":{"line":342,"col":32},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":342,"col":0},"hi":{"line":342,"col":32},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Struct":[{"Unit":[{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ReceiveContextExtern"},"disambiguator":0}],"index":[0,234]},"local_id":1},{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ReceiveContextExtern"},"disambiguator":0},{"data":"Ctor","disambiguator":0}],"index":[0,235]}]},{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":342,"col":31},"hi":{"line":342,"col":31},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":342,"col":31},"hi":{"line":342,"col":31},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}]},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"doc","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:341:6: 341:7 (#0), close: concordium/src/concordium_types.rs:341:13: 341:14 (#0) }"}},"delim":"Parenthesis","tokens":"hidden"}},"tokens":null},"tokens":null}},"id":193,"style":"Outer","span":{"lo":{"line":341,"col":0},"hi":{"line":341,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":24}],"index":[0,236]},"span":{"lo":{"line":340,"col":9},"hi":{"line":340,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":340,"col":9},"hi":{"line":340,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Impl":{"unsafety":"Normal","polarity":"Positive","defaultness":"Final","defaultness_span":null,"constness":"NotConst","generics":{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":342,"col":31},"hi":{"line":342,"col":31},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":342,"col":31},"hi":{"line":342,"col":31},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"of_trait":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"default"},"disambiguator":0},{"data":{"TypeNs":"Default"},"disambiguator":0}],"index":[1,2587]},"generic_args":[{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ReceiveContextExtern"},"disambiguator":0}],"index":[0,234]}}}}]},"self_ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ReceiveContextExtern"},"disambiguator":0}],"index":[0,234]}}},"items":[{"ident":["default",{"lo":{"line":340,"col":9},"hi":{"line":340,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":24},{"data":{"ValueNs":"default"},"disambiguator":0}],"index":[0,237]},"generics":{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":340,"col":9},"hi":{"line":340,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":340,"col":9},"hi":{"line":340,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"kind":{"Fn":{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"params":[],"ret":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ReceiveContextExtern"},"disambiguator":0}],"index":[0,234]}}},"body":{"ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ReceiveContextExtern"},"disambiguator":0}],"index":[0,234]}}},"span":{"lo":{"line":340,"col":9},"hi":{"line":340,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Block":{"targeted_by_break":false,"region_scope":{"id":3,"data":"Node"},"opt_destruction_scope":null,"span":{"lo":{"line":340,"col":9},"hi":{"line":340,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"stmts":[],"expr":{"ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ReceiveContextExtern"},"disambiguator":0}],"index":[0,234]}}},"span":{"lo":{"line":340,"col":9},"hi":{"line":340,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Adt":{"info":{"type_namespace":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0}],"index":[0,234]},"typ":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ReceiveContextExtern"},"disambiguator":0}],"index":[0,234]},"variant":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ReceiveContextExtern"},"disambiguator":0}],"index":[0,234]},"variant_index":0,"typ_is_record":false,"variant_is_record":false,"typ_is_struct":true},"user_ty":null,"fields":[],"base":null}},"hir_id":[237,1],"attributes":[]},"safety_mode":"Safe"}},"hir_id":[237,4],"attributes":[]},"sig_span":{"lo":{"line":340,"col":9},"hi":{"line":340,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}},"defaultness":"Final","span":{"lo":{"line":340,"col":9},"hi":{"line":340,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":340,"col":9},"hi":{"line":340,"col":9},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"inline","args":"Empty","tokens":null},"tokens":null}},"id":437,"style":"Outer","span":{"lo":{"line":340,"col":9},"hi":{"line":340,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"automatically_derived","args":"Empty","tokens":null},"tokens":null}},"id":438,"style":"Outer","span":{"lo":{"line":340,"col":9},"hi":{"line":340,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}}]}},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"automatically_derived","args":"Empty","tokens":null},"tokens":null}},"id":438,"style":"Outer","span":{"lo":{"line":340,"col":9},"hi":{"line":340,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[{"kind":{"Macro":["Derive","Default"]},"call_site":{"lo":{"line":340,"col":9},"hi":{"line":340,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"def_site":{"lo":{"line":185,"col":0},"hi":{"line":185,"col":17},"filename":{"Real":{"Remapped":{"local_path":"/home/au538501/.rustup/toolchains/nightly-2023-06-02-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/default.rs","virtual_name":"/rustc/d59363ad0b6391b7fc5bbb02c9ccf9300eef3753/library/core/src/default.rs"}}}},"allow_internal_unstable":["core_intrinsics"],"edition":"Edition2021","macro_def_id":{"krate":"core","path":[{"data":{"TypeNs":"default"},"disambiguator":0},{"data":{"MacroNs":"Default"},"disambiguator":0}],"index":[1,2591]},"parent_module":{"krate":"core","path":[{"data":{"TypeNs":"default"},"disambiguator":0}],"index":[1,2586]},"allow_internal_unsafe":false,"local_inner_macros":false,"collapse_debuginfo":false}]}]},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"hax_lib_macros"},"disambiguator":0}],"index":[0,170]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"hax_lib_macros"},"disambiguator":0}],"index":[0,170]},"span":{"lo":{"line":5,"col":0},"hi":{"line":5,"col":28},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":5,"col":0},"hi":{"line":5,"col":28},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"ExternCrate":null},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"_hax::skip","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:4:1: 4:24 (#19), close: concordium/src/concordium_types.rs:4:1: 4:24 (#19) }"}},"delim":"Parenthesis","tokens":""}},"tokens":null},"tokens":null}},"id":359,"style":"Outer","span":{"lo":{"line":4,"col":0},"hi":{"line":4,"col":23},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Use","disambiguator":0}],"index":[0,171]},"span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Use":[{"span":{"lo":{"line":7,"col":4},"hi":{"line":7,"col":18},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"res":[{"Def":[{"DefKind":{"todo":"Mod"}},{"krate":"hax_lib_macros","path":[],"index":[9,0]}]}],"segments":[{"ident":["hax_lib_macros",{"lo":{"line":7,"col":4},"hi":{"line":7,"col":18},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}],"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Use","disambiguator":0}],"index":[0,171]},"local_id":1},"res":{"Def":[{"DefKind":{"todo":"Mod"}},{"krate":"hax_lib_macros","path":[],"index":[9,0]}]},"args":null,"infer_args":false}],"rename":null},"Glob"]},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"_hax::skip","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:6:1: 6:24 (#22), close: concordium/src/concordium_types.rs:6:1: 6:24 (#22) }"}},"delim":"Parenthesis","tokens":""}},"tokens":null},"tokens":null}},"id":361,"style":"Outer","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":23},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Use","disambiguator":1}],"index":[0,240]},"span":{"lo":{"line":10,"col":0},"hi":{"line":10,"col":18},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":10,"col":0},"hi":{"line":10,"col":18},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Use":[{"span":{"lo":{"line":10,"col":4},"hi":{"line":10,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"res":[{"Def":[{"DefKind":{"todo":"Mod"}},{"krate":"core","path":[{"data":{"TypeNs":"num"},"disambiguator":0}],"index":[1,294]}]}],"segments":[{"ident":["crate",{"lo":{"line":10,"col":4},"hi":{"line":10,"col":9},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}],"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Use","disambiguator":1}],"index":[0,240]},"local_id":1},"res":"Err","args":null,"infer_args":false},{"ident":["num",{"lo":{"line":10,"col":11},"hi":{"line":10,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}],"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Use","disambiguator":1}],"index":[0,240]},"local_id":2},"res":{"Def":[{"DefKind":{"todo":"Mod"}},{"krate":"core","path":[{"data":{"TypeNs":"num"},"disambiguator":0}],"index":[1,294]}]},"args":null,"infer_args":false}],"rename":null},"Glob"]},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"_hax::skip","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:9:1: 9:8 (#52), close: concordium/src/concordium_types.rs:9:1: 9:8 (#52) }"}},"delim":"Parenthesis","tokens":""}},"tokens":null},"tokens":null}},"id":446,"style":"Outer","span":{"lo":{"line":9,"col":0},"hi":{"line":9,"col":7},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ContractState"},"disambiguator":0}],"index":[0,172]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ContractState"},"disambiguator":0}],"index":[0,172]},"span":{"lo":{"line":14,"col":0},"hi":{"line":16,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":14,"col":0},"hi":{"line":16,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Struct":[{"Struct":[[{"span":{"lo":{"line":15,"col":4},"hi":{"line":15,"col":51},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":15,"col":4},"hi":{"line":15,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"ident":["current_contract_state_position",{"lo":{"line":15,"col":15},"hi":{"line":15,"col":46},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}],"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ContractState"},"disambiguator":0}],"index":[0,172]},"local_id":3},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ContractState"},"disambiguator":0},{"data":{"ValueNs":"current_contract_state_position"},"disambiguator":0}],"index":[0,173]},"ty":{"Uint":"U32"},"attributes":[]}],false]},{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":14,"col":24},"hi":{"line":14,"col":24},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":14,"col":24},"hi":{"line":14,"col":24},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}]},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," A type representing the constract state bytes."]},"id":60,"style":"Outer","span":{"lo":{"line":12,"col":0},"hi":{"line":12,"col":50},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":3}],"index":[0,174]},"span":{"lo":{"line":13,"col":9},"hi":{"line":13,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":13,"col":9},"hi":{"line":13,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Impl":{"unsafety":"Normal","polarity":"Positive","defaultness":"Final","defaultness_span":null,"constness":"NotConst","generics":{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":14,"col":24},"hi":{"line":14,"col":24},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":14,"col":24},"hi":{"line":14,"col":24},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"of_trait":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"default"},"disambiguator":0},{"data":{"TypeNs":"Default"},"disambiguator":0}],"index":[1,2587]},"generic_args":[{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ContractState"},"disambiguator":0}],"index":[0,172]}}}}]},"self_ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ContractState"},"disambiguator":0}],"index":[0,172]}}},"items":[{"ident":["default",{"lo":{"line":13,"col":9},"hi":{"line":13,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":3},{"data":{"ValueNs":"default"},"disambiguator":0}],"index":[0,175]},"generics":{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":13,"col":9},"hi":{"line":13,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":13,"col":9},"hi":{"line":13,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"kind":{"Fn":{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"params":[],"ret":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ContractState"},"disambiguator":0}],"index":[0,172]}}},"body":{"ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ContractState"},"disambiguator":0}],"index":[0,172]}}},"span":{"lo":{"line":13,"col":9},"hi":{"line":13,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Block":{"targeted_by_break":false,"region_scope":{"id":10,"data":"Node"},"opt_destruction_scope":null,"span":{"lo":{"line":13,"col":9},"hi":{"line":13,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"stmts":[],"expr":{"ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ContractState"},"disambiguator":0}],"index":[0,172]}}},"span":{"lo":{"line":13,"col":9},"hi":{"line":13,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Adt":{"info":{"type_namespace":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0}],"index":[0,172]},"typ":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ContractState"},"disambiguator":0}],"index":[0,172]},"variant":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ContractState"},"disambiguator":0}],"index":[0,172]},"variant_index":0,"typ_is_record":true,"variant_is_record":true,"typ_is_struct":true},"user_ty":null,"fields":[{"field":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ContractState"},"disambiguator":0},{"data":{"ValueNs":"current_contract_state_position"},"disambiguator":0}],"index":[0,173]},"value":{"ty":{"Uint":"U32"},"span":{"lo":{"line":15,"col":4},"hi":{"line":15,"col":51},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Call":{"ty":{"Arrow":{"value":{"inputs":[],"output":{"Uint":"U32"},"c_variadic":false,"unsafety":"Normal","abi":{"Abi":{"todo":"Rust"}}},"bound_vars":[]}},"fun":{"ty":{"Arrow":{"value":{"inputs":[],"output":{"Uint":"U32"},"c_variadic":false,"unsafety":"Normal","abi":{"Abi":{"todo":"Rust"}}},"bound_vars":[]}},"span":{"lo":{"line":15,"col":4},"hi":{"line":15,"col":51},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"GlobalName":{"id":{"krate":"core","path":[{"data":{"TypeNs":"default"},"disambiguator":0},{"data":{"TypeNs":"Default"},"disambiguator":0},{"data":{"ValueNs":"default"},"disambiguator":0}],"index":[1,2588]}}},"hir_id":null,"attributes":[]},"args":[],"from_hir_call":true,"fn_span":{"lo":{"line":15,"col":4},"hi":{"line":15,"col":51},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"impl":{"impl":{"Concrete":{"id":{"krate":"core","path":[{"data":{"TypeNs":"default"},"disambiguator":0},{"data":"Impl","disambiguator":6}],"index":[1,32027]},"generics":[]}},"args":[]}}},"hir_id":[175,4],"attributes":[]}}],"base":null}},"hir_id":[175,1],"attributes":[]},"safety_mode":"Safe"}},"hir_id":[175,11],"attributes":[]},"sig_span":{"lo":{"line":13,"col":9},"hi":{"line":13,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}},"defaultness":"Final","span":{"lo":{"line":13,"col":9},"hi":{"line":13,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":13,"col":9},"hi":{"line":13,"col":9},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"inline","args":"Empty","tokens":null},"tokens":null}},"id":371,"style":"Outer","span":{"lo":{"line":13,"col":9},"hi":{"line":13,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"automatically_derived","args":"Empty","tokens":null},"tokens":null}},"id":372,"style":"Outer","span":{"lo":{"line":13,"col":9},"hi":{"line":13,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}}]}},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"automatically_derived","args":"Empty","tokens":null},"tokens":null}},"id":372,"style":"Outer","span":{"lo":{"line":13,"col":9},"hi":{"line":13,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[{"kind":{"Macro":["Derive","Default"]},"call_site":{"lo":{"line":13,"col":9},"hi":{"line":13,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"def_site":{"lo":{"line":185,"col":0},"hi":{"line":185,"col":17},"filename":{"Real":{"Remapped":{"local_path":"/home/au538501/.rustup/toolchains/nightly-2023-06-02-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/default.rs","virtual_name":"/rustc/d59363ad0b6391b7fc5bbb02c9ccf9300eef3753/library/core/src/default.rs"}}}},"allow_internal_unstable":["core_intrinsics"],"edition":"Edition2021","macro_def_id":{"krate":"core","path":[{"data":{"TypeNs":"default"},"disambiguator":0},{"data":{"MacroNs":"Default"},"disambiguator":0}],"index":[1,2591]},"parent_module":{"krate":"core","path":[{"data":{"TypeNs":"default"},"disambiguator":0}],"index":[1,2586]},"allow_internal_unsafe":false,"local_inner_macros":false,"collapse_debuginfo":false}]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Parameter"},"disambiguator":0}],"index":[0,176]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Parameter"},"disambiguator":0}],"index":[0,176]},"span":{"lo":{"line":20,"col":0},"hi":{"line":22,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":20,"col":0},"hi":{"line":22,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Struct":[{"Struct":[[{"span":{"lo":{"line":21,"col":4},"hi":{"line":21,"col":46},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":21,"col":4},"hi":{"line":21,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"ident":["current_parameter_position",{"lo":{"line":21,"col":15},"hi":{"line":21,"col":41},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}],"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Parameter"},"disambiguator":0}],"index":[0,176]},"local_id":3},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Parameter"},"disambiguator":0},{"data":{"ValueNs":"current_parameter_position"},"disambiguator":0}],"index":[0,177]},"ty":{"Uint":"U32"},"attributes":[]}],false]},{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":20,"col":20},"hi":{"line":20,"col":20},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":20,"col":20},"hi":{"line":20,"col":20},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}]},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," A type representing the parameter to init and receive methods."]},"id":63,"style":"Outer","span":{"lo":{"line":19,"col":0},"hi":{"line":19,"col":66},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":4}],"index":[0,178]},"span":{"lo":{"line":18,"col":9},"hi":{"line":18,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":18,"col":9},"hi":{"line":18,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Impl":{"unsafety":"Normal","polarity":"Positive","defaultness":"Final","defaultness_span":null,"constness":"NotConst","generics":{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":20,"col":20},"hi":{"line":20,"col":20},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":20,"col":20},"hi":{"line":20,"col":20},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"of_trait":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"default"},"disambiguator":0},{"data":{"TypeNs":"Default"},"disambiguator":0}],"index":[1,2587]},"generic_args":[{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Parameter"},"disambiguator":0}],"index":[0,176]}}}}]},"self_ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Parameter"},"disambiguator":0}],"index":[0,176]}}},"items":[{"ident":["default",{"lo":{"line":18,"col":9},"hi":{"line":18,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":4},{"data":{"ValueNs":"default"},"disambiguator":0}],"index":[0,179]},"generics":{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":18,"col":9},"hi":{"line":18,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":18,"col":9},"hi":{"line":18,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"kind":{"Fn":{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"params":[],"ret":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Parameter"},"disambiguator":0}],"index":[0,176]}}},"body":{"ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Parameter"},"disambiguator":0}],"index":[0,176]}}},"span":{"lo":{"line":18,"col":9},"hi":{"line":18,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Block":{"targeted_by_break":false,"region_scope":{"id":10,"data":"Node"},"opt_destruction_scope":null,"span":{"lo":{"line":18,"col":9},"hi":{"line":18,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"stmts":[],"expr":{"ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Parameter"},"disambiguator":0}],"index":[0,176]}}},"span":{"lo":{"line":18,"col":9},"hi":{"line":18,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Adt":{"info":{"type_namespace":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0}],"index":[0,176]},"typ":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Parameter"},"disambiguator":0}],"index":[0,176]},"variant":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Parameter"},"disambiguator":0}],"index":[0,176]},"variant_index":0,"typ_is_record":true,"variant_is_record":true,"typ_is_struct":true},"user_ty":null,"fields":[{"field":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Parameter"},"disambiguator":0},{"data":{"ValueNs":"current_parameter_position"},"disambiguator":0}],"index":[0,177]},"value":{"ty":{"Uint":"U32"},"span":{"lo":{"line":21,"col":4},"hi":{"line":21,"col":46},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Call":{"ty":{"Arrow":{"value":{"inputs":[],"output":{"Uint":"U32"},"c_variadic":false,"unsafety":"Normal","abi":{"Abi":{"todo":"Rust"}}},"bound_vars":[]}},"fun":{"ty":{"Arrow":{"value":{"inputs":[],"output":{"Uint":"U32"},"c_variadic":false,"unsafety":"Normal","abi":{"Abi":{"todo":"Rust"}}},"bound_vars":[]}},"span":{"lo":{"line":21,"col":4},"hi":{"line":21,"col":46},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"GlobalName":{"id":{"krate":"core","path":[{"data":{"TypeNs":"default"},"disambiguator":0},{"data":{"TypeNs":"Default"},"disambiguator":0},{"data":{"ValueNs":"default"},"disambiguator":0}],"index":[1,2588]}}},"hir_id":null,"attributes":[]},"args":[],"from_hir_call":true,"fn_span":{"lo":{"line":21,"col":4},"hi":{"line":21,"col":46},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"impl":{"impl":{"Concrete":{"id":{"krate":"core","path":[{"data":{"TypeNs":"default"},"disambiguator":0},{"data":"Impl","disambiguator":6}],"index":[1,32027]},"generics":[]}},"args":[]}}},"hir_id":[179,4],"attributes":[]}}],"base":null}},"hir_id":[179,1],"attributes":[]},"safety_mode":"Safe"}},"hir_id":[179,11],"attributes":[]},"sig_span":{"lo":{"line":18,"col":9},"hi":{"line":18,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}},"defaultness":"Final","span":{"lo":{"line":18,"col":9},"hi":{"line":18,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":18,"col":9},"hi":{"line":18,"col":9},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"inline","args":"Empty","tokens":null},"tokens":null}},"id":373,"style":"Outer","span":{"lo":{"line":18,"col":9},"hi":{"line":18,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"automatically_derived","args":"Empty","tokens":null},"tokens":null}},"id":374,"style":"Outer","span":{"lo":{"line":18,"col":9},"hi":{"line":18,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}}]}},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"automatically_derived","args":"Empty","tokens":null},"tokens":null}},"id":374,"style":"Outer","span":{"lo":{"line":18,"col":9},"hi":{"line":18,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[{"kind":{"Macro":["Derive","Default"]},"call_site":{"lo":{"line":18,"col":9},"hi":{"line":18,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"def_site":{"lo":{"line":185,"col":0},"hi":{"line":185,"col":17},"filename":{"Real":{"Remapped":{"local_path":"/home/au538501/.rustup/toolchains/nightly-2023-06-02-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/default.rs","virtual_name":"/rustc/d59363ad0b6391b7fc5bbb02c9ccf9300eef3753/library/core/src/default.rs"}}}},"allow_internal_unstable":["core_intrinsics"],"edition":"Edition2021","macro_def_id":{"krate":"core","path":[{"data":{"TypeNs":"default"},"disambiguator":0},{"data":{"MacroNs":"Default"},"disambiguator":0}],"index":[1,2591]},"parent_module":{"krate":"core","path":[{"data":{"TypeNs":"default"},"disambiguator":0}],"index":[1,2586]},"allow_internal_unsafe":false,"local_inner_macros":false,"collapse_debuginfo":false}]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"AttributesCursor"},"disambiguator":0}],"index":[0,180]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"AttributesCursor"},"disambiguator":0}],"index":[0,180]},"span":{"lo":{"line":26,"col":0},"hi":{"line":33,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":26,"col":0},"hi":{"line":33,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Struct":[{"Struct":[[{"span":{"lo":{"line":30,"col":4},"hi":{"line":30,"col":53},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":30,"col":4},"hi":{"line":30,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"ident":["current_attribute_cursor_position",{"lo":{"line":30,"col":15},"hi":{"line":30,"col":48},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}],"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"AttributesCursor"},"disambiguator":0}],"index":[0,180]},"local_id":3},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"AttributesCursor"},"disambiguator":0},{"data":{"ValueNs":"current_attribute_cursor_position"},"disambiguator":0}],"index":[0,181]},"ty":{"Uint":"U32"},"attributes":[{"kind":{"DocComment":["Line"," Current position of the cursor, starting from 0."]},"id":66,"style":"Outer","span":{"lo":{"line":27,"col":4},"hi":{"line":27,"col":56},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," Note that this is only for the variable attributes."]},"id":67,"style":"Outer","span":{"lo":{"line":28,"col":4},"hi":{"line":28,"col":59},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," `created_at` and `valid_to` will require."]},"id":68,"style":"Outer","span":{"lo":{"line":29,"col":4},"hi":{"line":29,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}]},{"span":{"lo":{"line":32,"col":4},"hi":{"line":32,"col":35},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":32,"col":4},"hi":{"line":32,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"ident":["remaining_items",{"lo":{"line":32,"col":15},"hi":{"line":32,"col":30},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}],"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"AttributesCursor"},"disambiguator":0}],"index":[0,180]},"local_id":6},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"AttributesCursor"},"disambiguator":0},{"data":{"ValueNs":"remaining_items"},"disambiguator":0}],"index":[0,182]},"ty":{"Uint":"U16"},"attributes":[{"kind":{"DocComment":["Line"," The number of remaining items in the policy."]},"id":69,"style":"Outer","span":{"lo":{"line":31,"col":4},"hi":{"line":31,"col":52},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}]}],false]},{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":26,"col":27},"hi":{"line":26,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":26,"col":27},"hi":{"line":26,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}]},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," A type representing the attributes, lazily acquired from the host."]},"id":64,"style":"Outer","span":{"lo":{"line":24,"col":0},"hi":{"line":24,"col":70},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":5}],"index":[0,183]},"span":{"lo":{"line":25,"col":9},"hi":{"line":25,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":25,"col":9},"hi":{"line":25,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Impl":{"unsafety":"Normal","polarity":"Positive","defaultness":"Final","defaultness_span":null,"constness":"NotConst","generics":{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":26,"col":27},"hi":{"line":26,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":26,"col":27},"hi":{"line":26,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"of_trait":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"default"},"disambiguator":0},{"data":{"TypeNs":"Default"},"disambiguator":0}],"index":[1,2587]},"generic_args":[{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"AttributesCursor"},"disambiguator":0}],"index":[0,180]}}}}]},"self_ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"AttributesCursor"},"disambiguator":0}],"index":[0,180]}}},"items":[{"ident":["default",{"lo":{"line":25,"col":9},"hi":{"line":25,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":5},{"data":{"ValueNs":"default"},"disambiguator":0}],"index":[0,184]},"generics":{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":25,"col":9},"hi":{"line":25,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":25,"col":9},"hi":{"line":25,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"kind":{"Fn":{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"params":[],"ret":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"AttributesCursor"},"disambiguator":0}],"index":[0,180]}}},"body":{"ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"AttributesCursor"},"disambiguator":0}],"index":[0,180]}}},"span":{"lo":{"line":25,"col":9},"hi":{"line":25,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Block":{"targeted_by_break":false,"region_scope":{"id":17,"data":"Node"},"opt_destruction_scope":null,"span":{"lo":{"line":25,"col":9},"hi":{"line":25,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"stmts":[],"expr":{"ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"AttributesCursor"},"disambiguator":0}],"index":[0,180]}}},"span":{"lo":{"line":25,"col":9},"hi":{"line":25,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Adt":{"info":{"type_namespace":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0}],"index":[0,180]},"typ":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"AttributesCursor"},"disambiguator":0}],"index":[0,180]},"variant":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"AttributesCursor"},"disambiguator":0}],"index":[0,180]},"variant_index":0,"typ_is_record":true,"variant_is_record":true,"typ_is_struct":true},"user_ty":null,"fields":[{"field":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"AttributesCursor"},"disambiguator":0},{"data":{"ValueNs":"current_attribute_cursor_position"},"disambiguator":0}],"index":[0,181]},"value":{"ty":{"Uint":"U32"},"span":{"lo":{"line":30,"col":4},"hi":{"line":30,"col":53},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Call":{"ty":{"Arrow":{"value":{"inputs":[],"output":{"Uint":"U32"},"c_variadic":false,"unsafety":"Normal","abi":{"Abi":{"todo":"Rust"}}},"bound_vars":[]}},"fun":{"ty":{"Arrow":{"value":{"inputs":[],"output":{"Uint":"U32"},"c_variadic":false,"unsafety":"Normal","abi":{"Abi":{"todo":"Rust"}}},"bound_vars":[]}},"span":{"lo":{"line":30,"col":4},"hi":{"line":30,"col":53},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"GlobalName":{"id":{"krate":"core","path":[{"data":{"TypeNs":"default"},"disambiguator":0},{"data":{"TypeNs":"Default"},"disambiguator":0},{"data":{"ValueNs":"default"},"disambiguator":0}],"index":[1,2588]}}},"hir_id":null,"attributes":[]},"args":[],"from_hir_call":true,"fn_span":{"lo":{"line":30,"col":4},"hi":{"line":30,"col":53},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"impl":{"impl":{"Concrete":{"id":{"krate":"core","path":[{"data":{"TypeNs":"default"},"disambiguator":0},{"data":"Impl","disambiguator":6}],"index":[1,32027]},"generics":[]}},"args":[]}}},"hir_id":[184,4],"attributes":[]}},{"field":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"AttributesCursor"},"disambiguator":0},{"data":{"ValueNs":"remaining_items"},"disambiguator":0}],"index":[0,182]},"value":{"ty":{"Uint":"U16"},"span":{"lo":{"line":32,"col":4},"hi":{"line":32,"col":35},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Call":{"ty":{"Arrow":{"value":{"inputs":[],"output":{"Uint":"U16"},"c_variadic":false,"unsafety":"Normal","abi":{"Abi":{"todo":"Rust"}}},"bound_vars":[]}},"fun":{"ty":{"Arrow":{"value":{"inputs":[],"output":{"Uint":"U16"},"c_variadic":false,"unsafety":"Normal","abi":{"Abi":{"todo":"Rust"}}},"bound_vars":[]}},"span":{"lo":{"line":32,"col":4},"hi":{"line":32,"col":35},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"GlobalName":{"id":{"krate":"core","path":[{"data":{"TypeNs":"default"},"disambiguator":0},{"data":{"TypeNs":"Default"},"disambiguator":0},{"data":{"ValueNs":"default"},"disambiguator":0}],"index":[1,2588]}}},"hir_id":null,"attributes":[]},"args":[],"from_hir_call":true,"fn_span":{"lo":{"line":32,"col":4},"hi":{"line":32,"col":35},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"impl":{"impl":{"Concrete":{"id":{"krate":"core","path":[{"data":{"TypeNs":"default"},"disambiguator":0},{"data":"Impl","disambiguator":5}],"index":[1,32025]},"generics":[]}},"args":[]}}},"hir_id":[184,11],"attributes":[]}}],"base":null}},"hir_id":[184,1],"attributes":[]},"safety_mode":"Safe"}},"hir_id":[184,18],"attributes":[]},"sig_span":{"lo":{"line":25,"col":9},"hi":{"line":25,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}},"defaultness":"Final","span":{"lo":{"line":25,"col":9},"hi":{"line":25,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":25,"col":9},"hi":{"line":25,"col":9},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"inline","args":"Empty","tokens":null},"tokens":null}},"id":375,"style":"Outer","span":{"lo":{"line":25,"col":9},"hi":{"line":25,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"automatically_derived","args":"Empty","tokens":null},"tokens":null}},"id":376,"style":"Outer","span":{"lo":{"line":25,"col":9},"hi":{"line":25,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}}]}},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"automatically_derived","args":"Empty","tokens":null},"tokens":null}},"id":376,"style":"Outer","span":{"lo":{"line":25,"col":9},"hi":{"line":25,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[{"kind":{"Macro":["Derive","Default"]},"call_site":{"lo":{"line":25,"col":9},"hi":{"line":25,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"def_site":{"lo":{"line":185,"col":0},"hi":{"line":185,"col":17},"filename":{"Real":{"Remapped":{"local_path":"/home/au538501/.rustup/toolchains/nightly-2023-06-02-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/default.rs","virtual_name":"/rustc/d59363ad0b6391b7fc5bbb02c9ccf9300eef3753/library/core/src/default.rs"}}}},"allow_internal_unstable":["core_intrinsics"],"edition":"Edition2021","macro_def_id":{"krate":"core","path":[{"data":{"TypeNs":"default"},"disambiguator":0},{"data":{"MacroNs":"Default"},"disambiguator":0}],"index":[1,2591]},"parent_module":{"krate":"core","path":[{"data":{"TypeNs":"default"},"disambiguator":0}],"index":[1,2586]},"allow_internal_unsafe":false,"local_inner_macros":false,"collapse_debuginfo":false}]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Logger"},"disambiguator":0}],"index":[0,185]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Logger"},"disambiguator":0}],"index":[0,185]},"span":{"lo":{"line":37,"col":0},"hi":{"line":39,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":37,"col":0},"hi":{"line":39,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Struct":[{"Struct":[[{"span":{"lo":{"line":38,"col":4},"hi":{"line":38,"col":34},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":38,"col":4},"hi":{"line":38,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"ident":["_private_logger",{"lo":{"line":38,"col":15},"hi":{"line":38,"col":30},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}],"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Logger"},"disambiguator":0}],"index":[0,185]},"local_id":2},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Logger"},"disambiguator":0},{"data":{"ValueNs":"_private_logger"},"disambiguator":0}],"index":[0,186]},"ty":{"Tuple":[]},"attributes":[]}],false]},{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":37,"col":17},"hi":{"line":37,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":37,"col":17},"hi":{"line":37,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}]},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," A type representing the logger."]},"id":70,"style":"Outer","span":{"lo":{"line":35,"col":0},"hi":{"line":35,"col":35},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":6}],"index":[0,187]},"span":{"lo":{"line":36,"col":9},"hi":{"line":36,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":36,"col":9},"hi":{"line":36,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Impl":{"unsafety":"Normal","polarity":"Positive","defaultness":"Final","defaultness_span":null,"constness":"NotConst","generics":{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":37,"col":17},"hi":{"line":37,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":37,"col":17},"hi":{"line":37,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"of_trait":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"default"},"disambiguator":0},{"data":{"TypeNs":"Default"},"disambiguator":0}],"index":[1,2587]},"generic_args":[{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Logger"},"disambiguator":0}],"index":[0,185]}}}}]},"self_ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Logger"},"disambiguator":0}],"index":[0,185]}}},"items":[{"ident":["default",{"lo":{"line":36,"col":9},"hi":{"line":36,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":6},{"data":{"ValueNs":"default"},"disambiguator":0}],"index":[0,188]},"generics":{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":36,"col":9},"hi":{"line":36,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":36,"col":9},"hi":{"line":36,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"kind":{"Fn":{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"params":[],"ret":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Logger"},"disambiguator":0}],"index":[0,185]}}},"body":{"ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Logger"},"disambiguator":0}],"index":[0,185]}}},"span":{"lo":{"line":36,"col":9},"hi":{"line":36,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Block":{"targeted_by_break":false,"region_scope":{"id":10,"data":"Node"},"opt_destruction_scope":null,"span":{"lo":{"line":36,"col":9},"hi":{"line":36,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"stmts":[],"expr":{"ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Logger"},"disambiguator":0}],"index":[0,185]}}},"span":{"lo":{"line":36,"col":9},"hi":{"line":36,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Adt":{"info":{"type_namespace":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0}],"index":[0,185]},"typ":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Logger"},"disambiguator":0}],"index":[0,185]},"variant":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Logger"},"disambiguator":0}],"index":[0,185]},"variant_index":0,"typ_is_record":true,"variant_is_record":true,"typ_is_struct":true},"user_ty":null,"fields":[{"field":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Logger"},"disambiguator":0},{"data":{"ValueNs":"_private_logger"},"disambiguator":0}],"index":[0,186]},"value":{"ty":{"Tuple":[]},"span":{"lo":{"line":38,"col":4},"hi":{"line":38,"col":34},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Call":{"ty":{"Arrow":{"value":{"inputs":[],"output":{"Tuple":[]},"c_variadic":false,"unsafety":"Normal","abi":{"Abi":{"todo":"Rust"}}},"bound_vars":[]}},"fun":{"ty":{"Arrow":{"value":{"inputs":[],"output":{"Tuple":[]},"c_variadic":false,"unsafety":"Normal","abi":{"Abi":{"todo":"Rust"}}},"bound_vars":[]}},"span":{"lo":{"line":38,"col":4},"hi":{"line":38,"col":34},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"GlobalName":{"id":{"krate":"core","path":[{"data":{"TypeNs":"default"},"disambiguator":0},{"data":{"TypeNs":"Default"},"disambiguator":0},{"data":{"ValueNs":"default"},"disambiguator":0}],"index":[1,2588]}}},"hir_id":null,"attributes":[]},"args":[],"from_hir_call":true,"fn_span":{"lo":{"line":38,"col":4},"hi":{"line":38,"col":34},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"impl":{"impl":{"Concrete":{"id":{"krate":"core","path":[{"data":{"TypeNs":"default"},"disambiguator":0},{"data":"Impl","disambiguator":0}],"index":[1,32015]},"generics":[]}},"args":[]}}},"hir_id":[188,4],"attributes":[]}}],"base":null}},"hir_id":[188,1],"attributes":[]},"safety_mode":"Safe"}},"hir_id":[188,11],"attributes":[]},"sig_span":{"lo":{"line":36,"col":9},"hi":{"line":36,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}},"defaultness":"Final","span":{"lo":{"line":36,"col":9},"hi":{"line":36,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":36,"col":9},"hi":{"line":36,"col":9},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"inline","args":"Empty","tokens":null},"tokens":null}},"id":377,"style":"Outer","span":{"lo":{"line":36,"col":9},"hi":{"line":36,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"automatically_derived","args":"Empty","tokens":null},"tokens":null}},"id":378,"style":"Outer","span":{"lo":{"line":36,"col":9},"hi":{"line":36,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}}]}},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"automatically_derived","args":"Empty","tokens":null},"tokens":null}},"id":378,"style":"Outer","span":{"lo":{"line":36,"col":9},"hi":{"line":36,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[{"kind":{"Macro":["Derive","Default"]},"call_site":{"lo":{"line":36,"col":9},"hi":{"line":36,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"def_site":{"lo":{"line":185,"col":0},"hi":{"line":185,"col":17},"filename":{"Real":{"Remapped":{"local_path":"/home/au538501/.rustup/toolchains/nightly-2023-06-02-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/default.rs","virtual_name":"/rustc/d59363ad0b6391b7fc5bbb02c9ccf9300eef3753/library/core/src/default.rs"}}}},"allow_internal_unstable":["core_intrinsics"],"edition":"Edition2021","macro_def_id":{"krate":"core","path":[{"data":{"TypeNs":"default"},"disambiguator":0},{"data":{"MacroNs":"Default"},"disambiguator":0}],"index":[1,2591]},"parent_module":{"krate":"core","path":[{"data":{"TypeNs":"default"},"disambiguator":0}],"index":[1,2586]},"allow_internal_unsafe":false,"local_inner_macros":false,"collapse_debuginfo":false}]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]},"span":{"lo":{"line":44,"col":0},"hi":{"line":49,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":44,"col":0},"hi":{"line":49,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Enum":[[{"ident":["Full",{"lo":{"line":46,"col":4},"hi":{"line":46,"col":8},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}],"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]},"local_id":1},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0},{"data":{"TypeNs":"Full"},"disambiguator":0}],"index":[0,190]},"data":{"Unit":[{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]},"local_id":2},{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0},{"data":{"TypeNs":"Full"},"disambiguator":0},{"data":"Ctor","disambiguator":0}],"index":[0,191]}]},"disr_expr":null,"span":{"lo":{"line":46,"col":4},"hi":{"line":46,"col":8},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"attributes":[{"kind":{"DocComment":["Line"," The log is full."]},"id":74,"style":"Outer","span":{"lo":{"line":45,"col":4},"hi":{"line":45,"col":24},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}]},{"ident":["Malformed",{"lo":{"line":48,"col":4},"hi":{"line":48,"col":13},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}],"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]},"local_id":3},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0},{"data":{"TypeNs":"Malformed"},"disambiguator":0}],"index":[0,192]},"data":{"Unit":[{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]},"local_id":4},{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0},{"data":{"TypeNs":"Malformed"},"disambiguator":0},{"data":"Ctor","disambiguator":0}],"index":[0,193]}]},"disr_expr":null,"span":{"lo":{"line":48,"col":4},"hi":{"line":48,"col":13},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"attributes":[{"kind":{"DocComment":["Line"," The message to log was malformed (e.g., too long)"]},"id":75,"style":"Outer","span":{"lo":{"line":47,"col":4},"hi":{"line":47,"col":57},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}]}],{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":44,"col":17},"hi":{"line":44,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":44,"col":17},"hi":{"line":44,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}]},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"repr","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:43:7: 43:8 (#0), close: concordium/src/concordium_types.rs:43:10: 43:11 (#0) }"}},"delim":"Parenthesis","tokens":"u8"}},"tokens":null},"tokens":null}},"id":73,"style":"Outer","span":{"lo":{"line":43,"col":0},"hi":{"line":43,"col":11},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":7}],"index":[0,194]},"span":{"lo":{"line":42,"col":9},"hi":{"line":42,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":42,"col":9},"hi":{"line":42,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Impl":{"unsafety":"Normal","polarity":"Positive","defaultness":"Final","defaultness_span":null,"constness":"NotConst","generics":{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":44,"col":17},"hi":{"line":44,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":44,"col":17},"hi":{"line":44,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"of_trait":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"Debug"},"disambiguator":0}],"index":[1,9139]},"generic_args":[{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}}}]},"self_ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}},"items":[{"ident":["fmt",{"lo":{"line":42,"col":9},"hi":{"line":42,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"fmt"},"disambiguator":0}],"index":[0,195]},"generics":{"params":[{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"fmt"},"disambiguator":0}],"index":[0,195]},"local_id":30},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"fmt"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,274]},"name":"Fresh","span":{"lo":{"line":42,"col":9},"hi":{"line":42,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]},{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"fmt"},"disambiguator":0}],"index":[0,195]},"local_id":31},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"fmt"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":1}],"index":[0,275]},"name":"Fresh","span":{"lo":{"line":42,"col":9},"hi":{"line":42,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]},{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"fmt"},"disambiguator":0}],"index":[0,195]},"local_id":32},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"fmt"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":2}],"index":[0,276]},"name":"Fresh","span":{"lo":{"line":42,"col":9},"hi":{"line":42,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]}],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":42,"col":9},"hi":{"line":42,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":42,"col":9},"hi":{"line":42,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"kind":{"Fn":{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"params":[{"pat":{"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}},false]},"span":{"lo":{"line":42,"col":9},"hi":{"line":42,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Binding":{"mutability":false,"mode":"ByValue","var":{"name":"self","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"fmt"},"disambiguator":0}],"index":[0,195]},"local_id":2}},"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}},false]},"subpattern":null,"is_primary":true}},"hir_id":null,"attributes":[]},"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}},false]},"ty_span":null,"self_kind":"ImmRef","hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"fmt"},"disambiguator":0}],"index":[0,195]},"local_id":1},"attributes":[]},{"pat":{"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[{"Lifetime":{"kind":"ReErased"}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"Formatter"},"disambiguator":0}],"index":[1,9114]}}},true]},"span":{"lo":{"line":42,"col":9},"hi":{"line":42,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Binding":{"mutability":false,"mode":"ByValue","var":{"name":"f","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"fmt"},"disambiguator":0}],"index":[0,195]},"local_id":4}},"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[{"Lifetime":{"kind":"ReErased"}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"Formatter"},"disambiguator":0}],"index":[1,9114]}}},true]},"subpattern":null,"is_primary":true}},"hir_id":null,"attributes":[]},"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[{"Lifetime":{"kind":"ReErased"}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"Formatter"},"disambiguator":0}],"index":[1,9114]}}},true]},"ty_span":null,"self_kind":null,"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"fmt"},"disambiguator":0}],"index":[0,195]},"local_id":3},"attributes":[]}],"ret":{"Adt":{"generic_args":[{"Type":{"Tuple":[]}},{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"Error"},"disambiguator":0}],"index":[1,42444]}}}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"result"},"disambiguator":0},{"data":{"TypeNs":"Result"},"disambiguator":0}],"index":[1,41506]}}},"body":{"ty":{"Adt":{"generic_args":[{"Type":{"Tuple":[]}},{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"Error"},"disambiguator":0}],"index":[1,42444]}}}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"result"},"disambiguator":0},{"data":{"TypeNs":"Result"},"disambiguator":0}],"index":[1,41506]}}},"span":{"lo":{"line":42,"col":9},"hi":{"line":42,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Block":{"targeted_by_break":false,"region_scope":{"id":28,"data":"Node"},"opt_destruction_scope":null,"span":{"lo":{"line":42,"col":9},"hi":{"line":42,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"stmts":[],"expr":{"ty":{"Adt":{"generic_args":[{"Type":{"Tuple":[]}},{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"Error"},"disambiguator":0}],"index":[1,42444]}}}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"result"},"disambiguator":0},{"data":{"TypeNs":"Result"},"disambiguator":0}],"index":[1,41506]}}},"span":{"lo":{"line":42,"col":9},"hi":{"line":42,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Call":{"ty":{"Arrow":{"value":{"inputs":[{"Ref":[{"kind":{"ReLateBound":[0,{"var":0,"kind":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"write_str"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[1,53916]},"'_"]}}]}},{"Adt":{"generic_args":[{"Lifetime":{"kind":"ReErased"}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"Formatter"},"disambiguator":0}],"index":[1,9114]}}},true]},{"Ref":[{"kind":{"ReLateBound":[0,{"var":1,"kind":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"write_str"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":1}],"index":[1,53917]},"'_"]}}]}},"Str",false]}],"output":{"Adt":{"generic_args":[{"Type":{"Tuple":[]}},{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"Error"},"disambiguator":0}],"index":[1,42444]}}}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"result"},"disambiguator":0},{"data":{"TypeNs":"Result"},"disambiguator":0}],"index":[1,41506]}}},"c_variadic":false,"unsafety":"Normal","abi":{"Abi":{"todo":"Rust"}}},"bound_vars":[{"Region":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"write_str"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[1,53916]},"'_"]}},{"Region":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"write_str"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":1}],"index":[1,53917]},"'_"]}}]}},"fun":{"ty":{"Arrow":{"value":{"inputs":[{"Ref":[{"kind":{"ReLateBound":[0,{"var":0,"kind":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"write_str"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[1,53916]},"'_"]}}]}},{"Adt":{"generic_args":[{"Lifetime":{"kind":"ReErased"}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"Formatter"},"disambiguator":0}],"index":[1,9114]}}},true]},{"Ref":[{"kind":{"ReLateBound":[0,{"var":1,"kind":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"write_str"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":1}],"index":[1,53917]},"'_"]}}]}},"Str",false]}],"output":{"Adt":{"generic_args":[{"Type":{"Tuple":[]}},{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"Error"},"disambiguator":0}],"index":[1,42444]}}}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"result"},"disambiguator":0},{"data":{"TypeNs":"Result"},"disambiguator":0}],"index":[1,41506]}}},"c_variadic":false,"unsafety":"Normal","abi":{"Abi":{"todo":"Rust"}}},"bound_vars":[{"Region":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"write_str"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[1,53916]},"'_"]}},{"Region":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"write_str"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":1}],"index":[1,53917]},"'_"]}}]}},"span":{"lo":{"line":42,"col":9},"hi":{"line":42,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"GlobalName":{"id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"write_str"},"disambiguator":0}],"index":[1,9184]}}},"hir_id":null,"attributes":[]},"args":[{"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[{"Lifetime":{"kind":"ReErased"}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"Formatter"},"disambiguator":0}],"index":[1,9114]}}},true]},"span":{"lo":{"line":42,"col":9},"hi":{"line":42,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Borrow":{"borrow_kind":{"Mut":{"allow_two_phase_borrow":true}},"arg":{"ty":{"Adt":{"generic_args":[{"Lifetime":{"kind":"ReErased"}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"Formatter"},"disambiguator":0}],"index":[1,9114]}}},"span":{"lo":{"line":42,"col":9},"hi":{"line":42,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Deref":{"arg":{"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[{"Lifetime":{"kind":"ReErased"}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"Formatter"},"disambiguator":0}],"index":[1,9114]}}},true]},"span":{"lo":{"line":42,"col":9},"hi":{"line":42,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"VarRef":{"id":{"name":"f","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"fmt"},"disambiguator":0}],"index":[0,195]},"local_id":4}}}},"hir_id":null,"attributes":[]}}},"hir_id":null,"attributes":[]}}},"hir_id":[195,13],"attributes":[]},{"ty":{"Ref":[{"kind":"ReErased"},"Str",false]},"span":{"lo":{"line":42,"col":9},"hi":{"line":42,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Match":{"scrutinee":{"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}},false]},"span":{"lo":{"line":42,"col":9},"hi":{"line":42,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"VarRef":{"id":{"name":"self","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"fmt"},"disambiguator":0}],"index":[0,195]},"local_id":2}}}},"hir_id":[195,16],"attributes":[]},"arms":[{"pattern":{"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}},false]},"span":{"lo":{"line":42,"col":9},"hi":{"line":42,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Deref":{"subpattern":{"ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}},"span":{"lo":{"line":42,"col":9},"hi":{"line":42,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Variant":{"info":{"type_namespace":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0}],"index":[0,189]},"typ":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]},"variant":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0},{"data":{"TypeNs":"Full"},"disambiguator":0}],"index":[0,190]},"variant_index":0,"typ_is_record":false,"variant_is_record":false,"typ_is_struct":false},"substs":[],"subpatterns":[]}},"hir_id":null,"attributes":[]}}},"hir_id":null,"attributes":[]},"guard":null,"body":{"ty":{"Ref":[{"kind":"ReErased"},"Str",false]},"span":{"lo":{"line":42,"col":9},"hi":{"line":42,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Borrow":{"borrow_kind":"Shared","arg":{"ty":"Str","span":{"lo":{"line":42,"col":9},"hi":{"line":42,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Deref":{"arg":{"ty":{"Ref":[{"kind":"ReErased"},"Str",false]},"span":{"lo":{"line":42,"col":9},"hi":{"line":42,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Literal":{"lit":{"node":{"Str":["Full","Cooked"]},"span":{"lo":{"line":42,"col":9},"hi":{"line":42,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"neg":false}},"hir_id":null,"attributes":[]}}},"hir_id":null,"attributes":[]}}},"hir_id":[195,22],"attributes":[]},"lint_level":{"Explicit":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"fmt"},"disambiguator":0}],"index":[0,195]},"local_id":21}},"scope":{"id":21,"data":"Node"},"span":{"lo":{"line":42,"col":9},"hi":{"line":42,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"attributes":[]},{"pattern":{"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}},false]},"span":{"lo":{"line":42,"col":9},"hi":{"line":42,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Deref":{"subpattern":{"ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}},"span":{"lo":{"line":42,"col":9},"hi":{"line":42,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Variant":{"info":{"type_namespace":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0}],"index":[0,189]},"typ":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]},"variant":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0},{"data":{"TypeNs":"Malformed"},"disambiguator":0}],"index":[0,192]},"variant_index":1,"typ_is_record":false,"variant_is_record":false,"typ_is_struct":false},"substs":[],"subpatterns":[]}},"hir_id":null,"attributes":[]}}},"hir_id":null,"attributes":[]},"guard":null,"body":{"ty":{"Ref":[{"kind":"ReErased"},"Str",false]},"span":{"lo":{"line":42,"col":9},"hi":{"line":42,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Borrow":{"borrow_kind":"Shared","arg":{"ty":"Str","span":{"lo":{"line":42,"col":9},"hi":{"line":42,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Deref":{"arg":{"ty":{"Ref":[{"kind":"ReErased"},"Str",false]},"span":{"lo":{"line":42,"col":9},"hi":{"line":42,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Literal":{"lit":{"node":{"Str":["Malformed","Cooked"]},"span":{"lo":{"line":42,"col":9},"hi":{"line":42,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"neg":false}},"hir_id":null,"attributes":[]}}},"hir_id":null,"attributes":[]}}},"hir_id":[195,27],"attributes":[]},"lint_level":{"Explicit":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"fmt"},"disambiguator":0}],"index":[0,195]},"local_id":26}},"scope":{"id":26,"data":"Node"},"span":{"lo":{"line":42,"col":9},"hi":{"line":42,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"attributes":[]}]}},"hir_id":[195,15],"attributes":[]}],"from_hir_call":true,"fn_span":{"lo":{"line":42,"col":9},"hi":{"line":42,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"impl":null}},"hir_id":[195,5],"attributes":[]},"safety_mode":"Safe"}},"hir_id":[195,29],"attributes":[]},"sig_span":{"lo":{"line":42,"col":9},"hi":{"line":42,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}},"defaultness":"Final","span":{"lo":{"line":42,"col":9},"hi":{"line":42,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":42,"col":9},"hi":{"line":42,"col":9},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"attributes":{"attributes":[],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"automatically_derived","args":"Empty","tokens":null},"tokens":null}},"id":395,"style":"Outer","span":{"lo":{"line":42,"col":9},"hi":{"line":42,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}}]}},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"automatically_derived","args":"Empty","tokens":null},"tokens":null}},"id":395,"style":"Outer","span":{"lo":{"line":42,"col":9},"hi":{"line":42,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[{"kind":{"Macro":["Derive","Debug"]},"call_site":{"lo":{"line":42,"col":9},"hi":{"line":42,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"def_site":{"lo":{"line":588,"col":4},"hi":{"line":588,"col":19},"filename":{"Real":{"Remapped":{"local_path":"/home/au538501/.rustup/toolchains/nightly-2023-06-02-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/fmt/mod.rs","virtual_name":"/rustc/d59363ad0b6391b7fc5bbb02c9ccf9300eef3753/library/core/src/fmt/mod.rs"}}}},"allow_internal_unstable":["core_intrinsics","fmt_helpers_for_derive"],"edition":"Edition2021","macro_def_id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"macros"},"disambiguator":0},{"data":{"MacroNs":"Debug"},"disambiguator":0}],"index":[1,9142]},"parent_module":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"macros"},"disambiguator":0}],"index":[1,9141]},"allow_internal_unsafe":false,"local_inner_macros":false,"collapse_debuginfo":false}]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":8}],"index":[0,196]},"span":{"lo":{"line":42,"col":16},"hi":{"line":42,"col":20},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":42,"col":16},"hi":{"line":42,"col":20},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Impl":{"unsafety":"Normal","polarity":"Positive","defaultness":"Final","defaultness_span":null,"constness":"NotConst","generics":{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":44,"col":17},"hi":{"line":44,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":44,"col":17},"hi":{"line":44,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"of_trait":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"Copy"},"disambiguator":0}],"index":[1,2694]},"generic_args":[{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}}}]},"self_ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}},"items":[]}},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"automatically_derived","args":"Empty","tokens":null},"tokens":null}},"id":396,"style":"Outer","span":{"lo":{"line":42,"col":16},"hi":{"line":42,"col":20},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[{"kind":{"Macro":["Derive","Copy"]},"call_site":{"lo":{"line":42,"col":16},"hi":{"line":42,"col":20},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"def_site":{"lo":{"line":458,"col":0},"hi":{"line":458,"col":14},"filename":{"Real":{"Remapped":{"local_path":"/home/au538501/.rustup/toolchains/nightly-2023-06-02-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/marker.rs","virtual_name":"/rustc/d59363ad0b6391b7fc5bbb02c9ccf9300eef3753/library/core/src/marker.rs"}}}},"allow_internal_unstable":["core_intrinsics","derive_clone_copy"],"edition":"Edition2021","macro_def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"MacroNs":"Copy"},"disambiguator":0}],"index":[1,2695]},"parent_module":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0}],"index":[1,2675]},"allow_internal_unsafe":false,"local_inner_macros":false,"collapse_debuginfo":false}]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":9}],"index":[0,197]},"span":{"lo":{"line":42,"col":22},"hi":{"line":42,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":42,"col":22},"hi":{"line":42,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Impl":{"unsafety":"Normal","polarity":"Positive","defaultness":"Final","defaultness_span":null,"constness":"NotConst","generics":{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":44,"col":17},"hi":{"line":44,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":44,"col":17},"hi":{"line":44,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"of_trait":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"clone"},"disambiguator":0},{"data":{"TypeNs":"Clone"},"disambiguator":0}],"index":[1,2262]},"generic_args":[{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}}}]},"self_ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}},"items":[{"ident":["clone",{"lo":{"line":42,"col":22},"hi":{"line":42,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":9},{"data":{"ValueNs":"clone"},"disambiguator":0}],"index":[0,198]},"generics":{"params":[{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":9},{"data":{"ValueNs":"clone"},"disambiguator":0}],"index":[0,198]},"local_id":8},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":9},{"data":{"ValueNs":"clone"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,277]},"name":"Fresh","span":{"lo":{"line":42,"col":22},"hi":{"line":42,"col":23},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]}],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":42,"col":22},"hi":{"line":42,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":42,"col":22},"hi":{"line":42,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"kind":{"Fn":{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"params":[{"pat":{"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}},false]},"span":{"lo":{"line":42,"col":22},"hi":{"line":42,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Binding":{"mutability":false,"mode":"ByValue","var":{"name":"self","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":9},{"data":{"ValueNs":"clone"},"disambiguator":0}],"index":[0,198]},"local_id":2}},"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}},false]},"subpattern":null,"is_primary":true}},"hir_id":null,"attributes":[]},"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}},false]},"ty_span":null,"self_kind":"ImmRef","hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":9},{"data":{"ValueNs":"clone"},"disambiguator":0}],"index":[0,198]},"local_id":1},"attributes":[]}],"ret":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}},"body":{"ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}},"span":{"lo":{"line":42,"col":22},"hi":{"line":42,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Block":{"targeted_by_break":false,"region_scope":{"id":6,"data":"Node"},"opt_destruction_scope":null,"span":{"lo":{"line":42,"col":22},"hi":{"line":42,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"stmts":[],"expr":{"ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}},"span":{"lo":{"line":42,"col":22},"hi":{"line":42,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Deref":{"arg":{"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}},false]},"span":{"lo":{"line":42,"col":22},"hi":{"line":42,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"VarRef":{"id":{"name":"self","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":9},{"data":{"ValueNs":"clone"},"disambiguator":0}],"index":[0,198]},"local_id":2}}}},"hir_id":[198,4],"attributes":[]}}},"hir_id":[198,3],"attributes":[]},"safety_mode":"Safe"}},"hir_id":[198,7],"attributes":[]},"sig_span":{"lo":{"line":42,"col":22},"hi":{"line":42,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}},"defaultness":"Final","span":{"lo":{"line":42,"col":22},"hi":{"line":42,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":42,"col":22},"hi":{"line":42,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"inline","args":"Empty","tokens":null},"tokens":null}},"id":397,"style":"Outer","span":{"lo":{"line":42,"col":22},"hi":{"line":42,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"automatically_derived","args":"Empty","tokens":null},"tokens":null}},"id":398,"style":"Outer","span":{"lo":{"line":42,"col":22},"hi":{"line":42,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}}]}},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"automatically_derived","args":"Empty","tokens":null},"tokens":null}},"id":398,"style":"Outer","span":{"lo":{"line":42,"col":22},"hi":{"line":42,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[{"kind":{"Macro":["Derive","Clone"]},"call_site":{"lo":{"line":42,"col":22},"hi":{"line":42,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"def_site":{"lo":{"line":138,"col":0},"hi":{"line":138,"col":15},"filename":{"Real":{"Remapped":{"local_path":"/home/au538501/.rustup/toolchains/nightly-2023-06-02-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/clone.rs","virtual_name":"/rustc/d59363ad0b6391b7fc5bbb02c9ccf9300eef3753/library/core/src/clone.rs"}}}},"allow_internal_unstable":["core_intrinsics","derive_clone_copy"],"edition":"Edition2021","macro_def_id":{"krate":"core","path":[{"data":{"TypeNs":"clone"},"disambiguator":0},{"data":{"MacroNs":"Clone"},"disambiguator":0}],"index":[1,2265]},"parent_module":{"krate":"core","path":[{"data":{"TypeNs":"clone"},"disambiguator":0}],"index":[1,2261]},"allow_internal_unsafe":false,"local_inner_macros":false,"collapse_debuginfo":false}]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":10}],"index":[0,199]},"span":{"lo":{"line":42,"col":29},"hi":{"line":42,"col":31},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":42,"col":29},"hi":{"line":42,"col":31},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Impl":{"unsafety":"Normal","polarity":"Positive","defaultness":"Final","defaultness_span":null,"constness":"NotConst","generics":{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":44,"col":17},"hi":{"line":44,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":44,"col":17},"hi":{"line":44,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"of_trait":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"StructuralEq"},"disambiguator":0}],"index":[1,2693]},"generic_args":[{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}}}]},"self_ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}},"items":[]}},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"automatically_derived","args":"Empty","tokens":null},"tokens":null}},"id":402,"style":"Outer","span":{"lo":{"line":42,"col":29},"hi":{"line":42,"col":31},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[{"kind":{"Macro":["Derive","Eq"]},"call_site":{"lo":{"line":42,"col":29},"hi":{"line":42,"col":31},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"def_site":{"lo":{"line":302,"col":0},"hi":{"line":302,"col":12},"filename":{"Real":{"Remapped":{"local_path":"/home/au538501/.rustup/toolchains/nightly-2023-06-02-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/cmp.rs","virtual_name":"/rustc/d59363ad0b6391b7fc5bbb02c9ccf9300eef3753/library/core/src/cmp.rs"}}}},"allow_internal_unstable":["core_intrinsics","derive_eq","structural_match","no_coverage"],"edition":"Edition2021","macro_def_id":{"krate":"core","path":[{"data":{"TypeNs":"cmp"},"disambiguator":0},{"data":{"MacroNs":"Eq"},"disambiguator":0}],"index":[1,2317]},"parent_module":{"krate":"core","path":[{"data":{"TypeNs":"cmp"},"disambiguator":0}],"index":[1,2288]},"allow_internal_unsafe":false,"local_inner_macros":false,"collapse_debuginfo":false}]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":11}],"index":[0,200]},"span":{"lo":{"line":42,"col":29},"hi":{"line":42,"col":31},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":42,"col":29},"hi":{"line":42,"col":31},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Impl":{"unsafety":"Normal","polarity":"Positive","defaultness":"Final","defaultness_span":null,"constness":"NotConst","generics":{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":44,"col":17},"hi":{"line":44,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":44,"col":17},"hi":{"line":44,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"of_trait":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"cmp"},"disambiguator":0},{"data":{"TypeNs":"Eq"},"disambiguator":0}],"index":[1,2315]},"generic_args":[{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}}}]},"self_ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}},"items":[{"ident":["assert_receiver_is_total_eq",{"lo":{"line":42,"col":29},"hi":{"line":42,"col":31},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":11},{"data":{"ValueNs":"assert_receiver_is_total_eq"},"disambiguator":0}],"index":[0,201]},"generics":{"params":[{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":11},{"data":{"ValueNs":"assert_receiver_is_total_eq"},"disambiguator":0}],"index":[0,201]},"local_id":5},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":11},{"data":{"ValueNs":"assert_receiver_is_total_eq"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,278]},"name":"Fresh","span":{"lo":{"line":42,"col":29},"hi":{"line":42,"col":30},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]}],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":42,"col":29},"hi":{"line":42,"col":31},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":42,"col":29},"hi":{"line":42,"col":31},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"kind":{"Fn":{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"params":[{"pat":{"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}},false]},"span":{"lo":{"line":42,"col":29},"hi":{"line":42,"col":31},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Binding":{"mutability":false,"mode":"ByValue","var":{"name":"self","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":11},{"data":{"ValueNs":"assert_receiver_is_total_eq"},"disambiguator":0}],"index":[0,201]},"local_id":2}},"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}},false]},"subpattern":null,"is_primary":true}},"hir_id":null,"attributes":[]},"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}},false]},"ty_span":null,"self_kind":"ImmRef","hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":11},{"data":{"ValueNs":"assert_receiver_is_total_eq"},"disambiguator":0}],"index":[0,201]},"local_id":1},"attributes":[]}],"ret":{"Tuple":[]},"body":{"ty":{"Tuple":[]},"span":{"lo":{"line":42,"col":29},"hi":{"line":42,"col":31},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Block":{"targeted_by_break":false,"region_scope":{"id":3,"data":"Node"},"opt_destruction_scope":null,"span":{"lo":{"line":42,"col":29},"hi":{"line":42,"col":31},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"stmts":[],"expr":null,"safety_mode":"Safe"}},"hir_id":[201,4],"attributes":[]},"sig_span":{"lo":{"line":42,"col":29},"hi":{"line":42,"col":31},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}},"defaultness":"Final","span":{"lo":{"line":42,"col":29},"hi":{"line":42,"col":31},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":42,"col":29},"hi":{"line":42,"col":29},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"inline","args":"Empty","tokens":null},"tokens":null}},"id":399,"style":"Outer","span":{"lo":{"line":42,"col":29},"hi":{"line":42,"col":31},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"doc","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:42:30: 42:32 (#31), close: concordium/src/concordium_types.rs:42:30: 42:32 (#31) }"}},"delim":"Parenthesis","tokens":"hidden"}},"tokens":null},"tokens":null}},"id":400,"style":"Outer","span":{"lo":{"line":42,"col":29},"hi":{"line":42,"col":31},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_coverage","args":"Empty","tokens":null},"tokens":null}},"id":401,"style":"Outer","span":{"lo":{"line":42,"col":29},"hi":{"line":42,"col":31},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"automatically_derived","args":"Empty","tokens":null},"tokens":null}},"id":403,"style":"Outer","span":{"lo":{"line":42,"col":29},"hi":{"line":42,"col":31},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}}]}},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"automatically_derived","args":"Empty","tokens":null},"tokens":null}},"id":403,"style":"Outer","span":{"lo":{"line":42,"col":29},"hi":{"line":42,"col":31},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[{"kind":{"Macro":["Derive","Eq"]},"call_site":{"lo":{"line":42,"col":29},"hi":{"line":42,"col":31},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"def_site":{"lo":{"line":302,"col":0},"hi":{"line":302,"col":12},"filename":{"Real":{"Remapped":{"local_path":"/home/au538501/.rustup/toolchains/nightly-2023-06-02-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/cmp.rs","virtual_name":"/rustc/d59363ad0b6391b7fc5bbb02c9ccf9300eef3753/library/core/src/cmp.rs"}}}},"allow_internal_unstable":["core_intrinsics","derive_eq","structural_match","no_coverage"],"edition":"Edition2021","macro_def_id":{"krate":"core","path":[{"data":{"TypeNs":"cmp"},"disambiguator":0},{"data":{"MacroNs":"Eq"},"disambiguator":0}],"index":[1,2317]},"parent_module":{"krate":"core","path":[{"data":{"TypeNs":"cmp"},"disambiguator":0}],"index":[1,2288]},"allow_internal_unsafe":false,"local_inner_macros":false,"collapse_debuginfo":false}]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":12}],"index":[0,202]},"span":{"lo":{"line":42,"col":33},"hi":{"line":42,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":42,"col":33},"hi":{"line":42,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Impl":{"unsafety":"Normal","polarity":"Positive","defaultness":"Final","defaultness_span":null,"constness":"NotConst","generics":{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":44,"col":17},"hi":{"line":44,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":44,"col":17},"hi":{"line":44,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"of_trait":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"StructuralPartialEq"},"disambiguator":0}],"index":[1,2692]},"generic_args":[{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}}}]},"self_ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}},"items":[]}},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"automatically_derived","args":"Empty","tokens":null},"tokens":null}},"id":404,"style":"Outer","span":{"lo":{"line":42,"col":33},"hi":{"line":42,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[{"kind":{"Macro":["Derive","PartialEq"]},"call_site":{"lo":{"line":42,"col":33},"hi":{"line":42,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"def_site":{"lo":{"line":236,"col":0},"hi":{"line":236,"col":19},"filename":{"Real":{"Remapped":{"local_path":"/home/au538501/.rustup/toolchains/nightly-2023-06-02-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/cmp.rs","virtual_name":"/rustc/d59363ad0b6391b7fc5bbb02c9ccf9300eef3753/library/core/src/cmp.rs"}}}},"allow_internal_unstable":["core_intrinsics","structural_match"],"edition":"Edition2021","macro_def_id":{"krate":"core","path":[{"data":{"TypeNs":"cmp"},"disambiguator":0},{"data":{"MacroNs":"PartialEq"},"disambiguator":0}],"index":[1,2314]},"parent_module":{"krate":"core","path":[{"data":{"TypeNs":"cmp"},"disambiguator":0}],"index":[1,2288]},"allow_internal_unsafe":false,"local_inner_macros":false,"collapse_debuginfo":false}]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":13}],"index":[0,203]},"span":{"lo":{"line":42,"col":33},"hi":{"line":42,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":42,"col":33},"hi":{"line":42,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Impl":{"unsafety":"Normal","polarity":"Positive","defaultness":"Final","defaultness_span":null,"constness":"NotConst","generics":{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":44,"col":17},"hi":{"line":44,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":44,"col":17},"hi":{"line":44,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"of_trait":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"cmp"},"disambiguator":0},{"data":{"TypeNs":"PartialEq"},"disambiguator":0}],"index":[1,2310]},"generic_args":[{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}}},{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}}}]},"self_ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}},"items":[{"ident":["eq",{"lo":{"line":42,"col":33},"hi":{"line":42,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":13},{"data":{"ValueNs":"eq"},"disambiguator":0}],"index":[0,204]},"generics":{"params":[{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":13},{"data":{"ValueNs":"eq"},"disambiguator":0}],"index":[0,204]},"local_id":32},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":13},{"data":{"ValueNs":"eq"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,279]},"name":"Fresh","span":{"lo":{"line":42,"col":33},"hi":{"line":42,"col":34},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]},{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":13},{"data":{"ValueNs":"eq"},"disambiguator":0}],"index":[0,204]},"local_id":33},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":13},{"data":{"ValueNs":"eq"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":1}],"index":[0,280]},"name":"Fresh","span":{"lo":{"line":42,"col":33},"hi":{"line":42,"col":34},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]}],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":42,"col":33},"hi":{"line":42,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":42,"col":33},"hi":{"line":42,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"kind":{"Fn":{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"params":[{"pat":{"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}},false]},"span":{"lo":{"line":42,"col":33},"hi":{"line":42,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Binding":{"mutability":false,"mode":"ByValue","var":{"name":"self","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":13},{"data":{"ValueNs":"eq"},"disambiguator":0}],"index":[0,204]},"local_id":2}},"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}},false]},"subpattern":null,"is_primary":true}},"hir_id":null,"attributes":[]},"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}},false]},"ty_span":null,"self_kind":"ImmRef","hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":13},{"data":{"ValueNs":"eq"},"disambiguator":0}],"index":[0,204]},"local_id":1},"attributes":[]},{"pat":{"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}},false]},"span":{"lo":{"line":42,"col":33},"hi":{"line":42,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Binding":{"mutability":false,"mode":"ByValue","var":{"name":"other","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":13},{"data":{"ValueNs":"eq"},"disambiguator":0}],"index":[0,204]},"local_id":4}},"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}},false]},"subpattern":null,"is_primary":true}},"hir_id":null,"attributes":[]},"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}},false]},"ty_span":null,"self_kind":null,"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":13},{"data":{"ValueNs":"eq"},"disambiguator":0}],"index":[0,204]},"local_id":3},"attributes":[]}],"ret":"Bool","body":{"ty":"Bool","span":{"lo":{"line":42,"col":33},"hi":{"line":42,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Block":{"targeted_by_break":false,"region_scope":{"id":30,"data":"Node"},"opt_destruction_scope":null,"span":{"lo":{"line":42,"col":33},"hi":{"line":42,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"stmts":[{"kind":{"Let":{"remainder_scope":{"id":30,"data":{"Remainder":0}},"init_scope":{"id":5,"data":"Node"},"pattern":{"ty":{"Uint":"U8"},"span":{"lo":{"line":42,"col":33},"hi":{"line":42,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Binding":{"mutability":false,"mode":"ByValue","var":{"name":"__self_tag","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":13},{"data":{"ValueNs":"eq"},"disambiguator":0}],"index":[0,204]},"local_id":14}},"ty":{"Uint":"U8"},"subpattern":null,"is_primary":true}},"hir_id":null,"attributes":[]},"initializer":{"ty":{"Uint":"U8"},"span":{"lo":{"line":42,"col":33},"hi":{"line":42,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Call":{"ty":{"Arrow":{"value":{"inputs":[{"Ref":[{"kind":{"ReLateBound":[0,{"var":0,"kind":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"intrinsics"},"disambiguator":0},{"data":"ForeignMod","disambiguator":0},{"data":{"ValueNs":"discriminant_value"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[1,51566]},"'_"]}}]}},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}},false]}],"output":{"Alias":["Projection",{"substs":[{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}}}],"trait_def_id":[{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"DiscriminantKind"},"disambiguator":0}],"index":[1,2734]},{"impl":{"Builtin":{"trait":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"DiscriminantKind"},"disambiguator":0}],"index":[1,2734]},"generic_args":[{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}}}]}}},"args":[]}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"DiscriminantKind"},"disambiguator":0},{"data":{"TypeNs":"Discriminant"},"disambiguator":0}],"index":[1,2735]}}]},"c_variadic":false,"unsafety":"Normal","abi":{"Abi":{"todo":"RustIntrinsic"}}},"bound_vars":[{"Region":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"intrinsics"},"disambiguator":0},{"data":"ForeignMod","disambiguator":0},{"data":{"ValueNs":"discriminant_value"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[1,51566]},"'_"]}}]}},"fun":{"ty":{"Arrow":{"value":{"inputs":[{"Ref":[{"kind":{"ReLateBound":[0,{"var":0,"kind":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"intrinsics"},"disambiguator":0},{"data":"ForeignMod","disambiguator":0},{"data":{"ValueNs":"discriminant_value"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[1,51566]},"'_"]}}]}},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}},false]}],"output":{"Alias":["Projection",{"substs":[{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}}}],"trait_def_id":[{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"DiscriminantKind"},"disambiguator":0}],"index":[1,2734]},{"impl":{"Builtin":{"trait":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"DiscriminantKind"},"disambiguator":0}],"index":[1,2734]},"generic_args":[{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}}}]}}},"args":[]}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"DiscriminantKind"},"disambiguator":0},{"data":{"TypeNs":"Discriminant"},"disambiguator":0}],"index":[1,2735]}}]},"c_variadic":false,"unsafety":"Normal","abi":{"Abi":{"todo":"RustIntrinsic"}}},"bound_vars":[{"Region":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"intrinsics"},"disambiguator":0},{"data":"ForeignMod","disambiguator":0},{"data":{"ValueNs":"discriminant_value"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[1,51566]},"'_"]}}]}},"span":{"lo":{"line":42,"col":33},"hi":{"line":42,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"GlobalName":{"id":{"krate":"core","path":[{"data":{"TypeNs":"intrinsics"},"disambiguator":0},{"data":"ForeignMod","disambiguator":0},{"data":{"ValueNs":"discriminant_value"},"disambiguator":0}],"index":[1,1415]}}},"hir_id":null,"attributes":[]},"args":[{"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}},false]},"span":{"lo":{"line":42,"col":33},"hi":{"line":42,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Borrow":{"borrow_kind":"Shared","arg":{"ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}},"span":{"lo":{"line":42,"col":33},"hi":{"line":42,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Deref":{"arg":{"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}},false]},"span":{"lo":{"line":42,"col":33},"hi":{"line":42,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"VarRef":{"id":{"name":"self","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":13},{"data":{"ValueNs":"eq"},"disambiguator":0}],"index":[0,204]},"local_id":2}}}},"hir_id":null,"attributes":[]}}},"hir_id":null,"attributes":[]}}},"hir_id":[204,11],"attributes":[]}],"from_hir_call":true,"fn_span":{"lo":{"line":42,"col":33},"hi":{"line":42,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"impl":null}},"hir_id":[204,6],"attributes":[]},"else_block":null,"lint_level":{"Explicit":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":13},{"data":{"ValueNs":"eq"},"disambiguator":0}],"index":[0,204]},"local_id":13}},"attributes":[]}},"opt_destruction_scope":{"id":5,"data":"Destruction"}},{"kind":{"Let":{"remainder_scope":{"id":30,"data":{"Remainder":1}},"init_scope":{"id":15,"data":"Node"},"pattern":{"ty":{"Uint":"U8"},"span":{"lo":{"line":42,"col":33},"hi":{"line":42,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Binding":{"mutability":false,"mode":"ByValue","var":{"name":"__arg1_tag","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":13},{"data":{"ValueNs":"eq"},"disambiguator":0}],"index":[0,204]},"local_id":24}},"ty":{"Uint":"U8"},"subpattern":null,"is_primary":true}},"hir_id":null,"attributes":[]},"initializer":{"ty":{"Uint":"U8"},"span":{"lo":{"line":42,"col":33},"hi":{"line":42,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Call":{"ty":{"Arrow":{"value":{"inputs":[{"Ref":[{"kind":{"ReLateBound":[0,{"var":0,"kind":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"intrinsics"},"disambiguator":0},{"data":"ForeignMod","disambiguator":0},{"data":{"ValueNs":"discriminant_value"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[1,51566]},"'_"]}}]}},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}},false]}],"output":{"Alias":["Projection",{"substs":[{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}}}],"trait_def_id":[{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"DiscriminantKind"},"disambiguator":0}],"index":[1,2734]},{"impl":{"Builtin":{"trait":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"DiscriminantKind"},"disambiguator":0}],"index":[1,2734]},"generic_args":[{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}}}]}}},"args":[]}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"DiscriminantKind"},"disambiguator":0},{"data":{"TypeNs":"Discriminant"},"disambiguator":0}],"index":[1,2735]}}]},"c_variadic":false,"unsafety":"Normal","abi":{"Abi":{"todo":"RustIntrinsic"}}},"bound_vars":[{"Region":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"intrinsics"},"disambiguator":0},{"data":"ForeignMod","disambiguator":0},{"data":{"ValueNs":"discriminant_value"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[1,51566]},"'_"]}}]}},"fun":{"ty":{"Arrow":{"value":{"inputs":[{"Ref":[{"kind":{"ReLateBound":[0,{"var":0,"kind":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"intrinsics"},"disambiguator":0},{"data":"ForeignMod","disambiguator":0},{"data":{"ValueNs":"discriminant_value"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[1,51566]},"'_"]}}]}},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}},false]}],"output":{"Alias":["Projection",{"substs":[{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}}}],"trait_def_id":[{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"DiscriminantKind"},"disambiguator":0}],"index":[1,2734]},{"impl":{"Builtin":{"trait":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"DiscriminantKind"},"disambiguator":0}],"index":[1,2734]},"generic_args":[{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}}}]}}},"args":[]}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"DiscriminantKind"},"disambiguator":0},{"data":{"TypeNs":"Discriminant"},"disambiguator":0}],"index":[1,2735]}}]},"c_variadic":false,"unsafety":"Normal","abi":{"Abi":{"todo":"RustIntrinsic"}}},"bound_vars":[{"Region":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"intrinsics"},"disambiguator":0},{"data":"ForeignMod","disambiguator":0},{"data":{"ValueNs":"discriminant_value"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[1,51566]},"'_"]}}]}},"span":{"lo":{"line":42,"col":33},"hi":{"line":42,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"GlobalName":{"id":{"krate":"core","path":[{"data":{"TypeNs":"intrinsics"},"disambiguator":0},{"data":"ForeignMod","disambiguator":0},{"data":{"ValueNs":"discriminant_value"},"disambiguator":0}],"index":[1,1415]}}},"hir_id":null,"attributes":[]},"args":[{"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}},false]},"span":{"lo":{"line":42,"col":33},"hi":{"line":42,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Borrow":{"borrow_kind":"Shared","arg":{"ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}},"span":{"lo":{"line":42,"col":33},"hi":{"line":42,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Deref":{"arg":{"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}},false]},"span":{"lo":{"line":42,"col":33},"hi":{"line":42,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"VarRef":{"id":{"name":"other","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":13},{"data":{"ValueNs":"eq"},"disambiguator":0}],"index":[0,204]},"local_id":4}}}},"hir_id":null,"attributes":[]}}},"hir_id":null,"attributes":[]}}},"hir_id":[204,21],"attributes":[]}],"from_hir_call":true,"fn_span":{"lo":{"line":42,"col":33},"hi":{"line":42,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"impl":null}},"hir_id":[204,16],"attributes":[]},"else_block":null,"lint_level":{"Explicit":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":13},{"data":{"ValueNs":"eq"},"disambiguator":0}],"index":[0,204]},"local_id":23}},"attributes":[]}},"opt_destruction_scope":{"id":15,"data":"Destruction"}}],"expr":{"ty":"Bool","span":{"lo":{"line":42,"col":33},"hi":{"line":42,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Binary":{"op":"Eq","lhs":{"ty":{"Uint":"U8"},"span":{"lo":{"line":42,"col":33},"hi":{"line":42,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"VarRef":{"id":{"name":"__self_tag","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":13},{"data":{"ValueNs":"eq"},"disambiguator":0}],"index":[0,204]},"local_id":14}}}},"hir_id":[204,26],"attributes":[]},"rhs":{"ty":{"Uint":"U8"},"span":{"lo":{"line":42,"col":33},"hi":{"line":42,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"VarRef":{"id":{"name":"__arg1_tag","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":13},{"data":{"ValueNs":"eq"},"disambiguator":0}],"index":[0,204]},"local_id":24}}}},"hir_id":[204,28],"attributes":[]}}},"hir_id":[204,25],"attributes":[]},"safety_mode":"Safe"}},"hir_id":[204,31],"attributes":[]},"sig_span":{"lo":{"line":42,"col":33},"hi":{"line":42,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}},"defaultness":"Final","span":{"lo":{"line":42,"col":33},"hi":{"line":42,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":42,"col":33},"hi":{"line":42,"col":33},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"inline","args":"Empty","tokens":null},"tokens":null}},"id":405,"style":"Outer","span":{"lo":{"line":42,"col":33},"hi":{"line":42,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"automatically_derived","args":"Empty","tokens":null},"tokens":null}},"id":406,"style":"Outer","span":{"lo":{"line":42,"col":33},"hi":{"line":42,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}}]}},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"automatically_derived","args":"Empty","tokens":null},"tokens":null}},"id":406,"style":"Outer","span":{"lo":{"line":42,"col":33},"hi":{"line":42,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[{"kind":{"Macro":["Derive","PartialEq"]},"call_site":{"lo":{"line":42,"col":33},"hi":{"line":42,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"def_site":{"lo":{"line":236,"col":0},"hi":{"line":236,"col":19},"filename":{"Real":{"Remapped":{"local_path":"/home/au538501/.rustup/toolchains/nightly-2023-06-02-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/cmp.rs","virtual_name":"/rustc/d59363ad0b6391b7fc5bbb02c9ccf9300eef3753/library/core/src/cmp.rs"}}}},"allow_internal_unstable":["core_intrinsics","structural_match"],"edition":"Edition2021","macro_def_id":{"krate":"core","path":[{"data":{"TypeNs":"cmp"},"disambiguator":0},{"data":{"MacroNs":"PartialEq"},"disambiguator":0}],"index":[1,2314]},"parent_module":{"krate":"core","path":[{"data":{"TypeNs":"cmp"},"disambiguator":0}],"index":[1,2288]},"allow_internal_unsafe":false,"local_inner_macros":false,"collapse_debuginfo":false}]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"NotPayableError"},"disambiguator":0}],"index":[0,205]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"NotPayableError"},"disambiguator":0}],"index":[0,205]},"span":{"lo":{"line":54,"col":0},"hi":{"line":54,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":54,"col":0},"hi":{"line":54,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Struct":[{"Unit":[{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"NotPayableError"},"disambiguator":0}],"index":[0,205]},"local_id":1},{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"NotPayableError"},"disambiguator":0},{"data":"Ctor","disambiguator":0}],"index":[0,206]}]},{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":54,"col":26},"hi":{"line":54,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":54,"col":26},"hi":{"line":54,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}]},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Error triggered when a non-zero amount of CCD is sent to a contract"]},"id":76,"style":"Outer","span":{"lo":{"line":51,"col":0},"hi":{"line":51,"col":71},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," init or receive function that is not marked as `payable`."]},"id":77,"style":"Outer","span":{"lo":{"line":52,"col":0},"hi":{"line":52,"col":61},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":14}],"index":[0,207]},"span":{"lo":{"line":53,"col":9},"hi":{"line":53,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":53,"col":9},"hi":{"line":53,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Impl":{"unsafety":"Normal","polarity":"Positive","defaultness":"Final","defaultness_span":null,"constness":"NotConst","generics":{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":54,"col":26},"hi":{"line":54,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":54,"col":26},"hi":{"line":54,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"of_trait":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"clone"},"disambiguator":0},{"data":{"TypeNs":"Clone"},"disambiguator":0}],"index":[1,2262]},"generic_args":[{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"NotPayableError"},"disambiguator":0}],"index":[0,205]}}}}]},"self_ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"NotPayableError"},"disambiguator":0}],"index":[0,205]}}},"items":[{"ident":["clone",{"lo":{"line":53,"col":9},"hi":{"line":53,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":14},{"data":{"ValueNs":"clone"},"disambiguator":0}],"index":[0,208]},"generics":{"params":[{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":14},{"data":{"ValueNs":"clone"},"disambiguator":0}],"index":[0,208]},"local_id":8},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":14},{"data":{"ValueNs":"clone"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,281]},"name":"Fresh","span":{"lo":{"line":53,"col":9},"hi":{"line":53,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]}],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":53,"col":9},"hi":{"line":53,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":53,"col":9},"hi":{"line":53,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"kind":{"Fn":{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"params":[{"pat":{"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"NotPayableError"},"disambiguator":0}],"index":[0,205]}}},false]},"span":{"lo":{"line":53,"col":9},"hi":{"line":53,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Binding":{"mutability":false,"mode":"ByValue","var":{"name":"self","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":14},{"data":{"ValueNs":"clone"},"disambiguator":0}],"index":[0,208]},"local_id":2}},"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"NotPayableError"},"disambiguator":0}],"index":[0,205]}}},false]},"subpattern":null,"is_primary":true}},"hir_id":null,"attributes":[]},"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"NotPayableError"},"disambiguator":0}],"index":[0,205]}}},false]},"ty_span":null,"self_kind":"ImmRef","hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":14},{"data":{"ValueNs":"clone"},"disambiguator":0}],"index":[0,208]},"local_id":1},"attributes":[]}],"ret":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"NotPayableError"},"disambiguator":0}],"index":[0,205]}}},"body":{"ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"NotPayableError"},"disambiguator":0}],"index":[0,205]}}},"span":{"lo":{"line":53,"col":9},"hi":{"line":53,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Block":{"targeted_by_break":false,"region_scope":{"id":6,"data":"Node"},"opt_destruction_scope":null,"span":{"lo":{"line":53,"col":9},"hi":{"line":53,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"stmts":[],"expr":{"ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"NotPayableError"},"disambiguator":0}],"index":[0,205]}}},"span":{"lo":{"line":53,"col":9},"hi":{"line":53,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Deref":{"arg":{"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"NotPayableError"},"disambiguator":0}],"index":[0,205]}}},false]},"span":{"lo":{"line":53,"col":9},"hi":{"line":53,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"VarRef":{"id":{"name":"self","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":14},{"data":{"ValueNs":"clone"},"disambiguator":0}],"index":[0,208]},"local_id":2}}}},"hir_id":[208,4],"attributes":[]}}},"hir_id":[208,3],"attributes":[]},"safety_mode":"Safe"}},"hir_id":[208,7],"attributes":[]},"sig_span":{"lo":{"line":53,"col":9},"hi":{"line":53,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}},"defaultness":"Final","span":{"lo":{"line":53,"col":9},"hi":{"line":53,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":53,"col":9},"hi":{"line":53,"col":9},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"inline","args":"Empty","tokens":null},"tokens":null}},"id":407,"style":"Outer","span":{"lo":{"line":53,"col":9},"hi":{"line":53,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"automatically_derived","args":"Empty","tokens":null},"tokens":null}},"id":408,"style":"Outer","span":{"lo":{"line":53,"col":9},"hi":{"line":53,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}}]}},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"automatically_derived","args":"Empty","tokens":null},"tokens":null}},"id":408,"style":"Outer","span":{"lo":{"line":53,"col":9},"hi":{"line":53,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[{"kind":{"Macro":["Derive","Clone"]},"call_site":{"lo":{"line":53,"col":9},"hi":{"line":53,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"def_site":{"lo":{"line":138,"col":0},"hi":{"line":138,"col":15},"filename":{"Real":{"Remapped":{"local_path":"/home/au538501/.rustup/toolchains/nightly-2023-06-02-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/clone.rs","virtual_name":"/rustc/d59363ad0b6391b7fc5bbb02c9ccf9300eef3753/library/core/src/clone.rs"}}}},"allow_internal_unstable":["core_intrinsics","derive_clone_copy"],"edition":"Edition2021","macro_def_id":{"krate":"core","path":[{"data":{"TypeNs":"clone"},"disambiguator":0},{"data":{"MacroNs":"Clone"},"disambiguator":0}],"index":[1,2265]},"parent_module":{"krate":"core","path":[{"data":{"TypeNs":"clone"},"disambiguator":0}],"index":[1,2261]},"allow_internal_unsafe":false,"local_inner_macros":false,"collapse_debuginfo":false}]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":15}],"index":[0,209]},"span":{"lo":{"line":53,"col":16},"hi":{"line":53,"col":20},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":53,"col":16},"hi":{"line":53,"col":20},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Impl":{"unsafety":"Normal","polarity":"Positive","defaultness":"Final","defaultness_span":null,"constness":"NotConst","generics":{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":54,"col":26},"hi":{"line":54,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":54,"col":26},"hi":{"line":54,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"of_trait":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"Copy"},"disambiguator":0}],"index":[1,2694]},"generic_args":[{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"NotPayableError"},"disambiguator":0}],"index":[0,205]}}}}]},"self_ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"NotPayableError"},"disambiguator":0}],"index":[0,205]}}},"items":[]}},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"automatically_derived","args":"Empty","tokens":null},"tokens":null}},"id":409,"style":"Outer","span":{"lo":{"line":53,"col":16},"hi":{"line":53,"col":20},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[{"kind":{"Macro":["Derive","Copy"]},"call_site":{"lo":{"line":53,"col":16},"hi":{"line":53,"col":20},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"def_site":{"lo":{"line":458,"col":0},"hi":{"line":458,"col":14},"filename":{"Real":{"Remapped":{"local_path":"/home/au538501/.rustup/toolchains/nightly-2023-06-02-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/marker.rs","virtual_name":"/rustc/d59363ad0b6391b7fc5bbb02c9ccf9300eef3753/library/core/src/marker.rs"}}}},"allow_internal_unstable":["core_intrinsics","derive_clone_copy"],"edition":"Edition2021","macro_def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"MacroNs":"Copy"},"disambiguator":0}],"index":[1,2695]},"parent_module":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0}],"index":[1,2675]},"allow_internal_unsafe":false,"local_inner_macros":false,"collapse_debuginfo":false}]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":16}],"index":[0,210]},"span":{"lo":{"line":53,"col":22},"hi":{"line":53,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":53,"col":22},"hi":{"line":53,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Impl":{"unsafety":"Normal","polarity":"Positive","defaultness":"Final","defaultness_span":null,"constness":"NotConst","generics":{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":54,"col":26},"hi":{"line":54,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":54,"col":26},"hi":{"line":54,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"of_trait":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"Debug"},"disambiguator":0}],"index":[1,9139]},"generic_args":[{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"NotPayableError"},"disambiguator":0}],"index":[0,205]}}}}]},"self_ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"NotPayableError"},"disambiguator":0}],"index":[0,205]}}},"items":[{"ident":["fmt",{"lo":{"line":53,"col":22},"hi":{"line":53,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":16},{"data":{"ValueNs":"fmt"},"disambiguator":0}],"index":[0,211]},"generics":{"params":[{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":16},{"data":{"ValueNs":"fmt"},"disambiguator":0}],"index":[0,211]},"local_id":18},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":16},{"data":{"ValueNs":"fmt"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,282]},"name":"Fresh","span":{"lo":{"line":53,"col":22},"hi":{"line":53,"col":23},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]},{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":16},{"data":{"ValueNs":"fmt"},"disambiguator":0}],"index":[0,211]},"local_id":19},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":16},{"data":{"ValueNs":"fmt"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":1}],"index":[0,283]},"name":"Fresh","span":{"lo":{"line":53,"col":22},"hi":{"line":53,"col":23},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]},{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":16},{"data":{"ValueNs":"fmt"},"disambiguator":0}],"index":[0,211]},"local_id":20},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":16},{"data":{"ValueNs":"fmt"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":2}],"index":[0,284]},"name":"Fresh","span":{"lo":{"line":53,"col":22},"hi":{"line":53,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]}],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":53,"col":22},"hi":{"line":53,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":53,"col":22},"hi":{"line":53,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"kind":{"Fn":{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"params":[{"pat":{"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"NotPayableError"},"disambiguator":0}],"index":[0,205]}}},false]},"span":{"lo":{"line":53,"col":22},"hi":{"line":53,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Binding":{"mutability":false,"mode":"ByValue","var":{"name":"self","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":16},{"data":{"ValueNs":"fmt"},"disambiguator":0}],"index":[0,211]},"local_id":2}},"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"NotPayableError"},"disambiguator":0}],"index":[0,205]}}},false]},"subpattern":null,"is_primary":true}},"hir_id":null,"attributes":[]},"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"NotPayableError"},"disambiguator":0}],"index":[0,205]}}},false]},"ty_span":null,"self_kind":"ImmRef","hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":16},{"data":{"ValueNs":"fmt"},"disambiguator":0}],"index":[0,211]},"local_id":1},"attributes":[]},{"pat":{"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[{"Lifetime":{"kind":"ReErased"}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"Formatter"},"disambiguator":0}],"index":[1,9114]}}},true]},"span":{"lo":{"line":53,"col":22},"hi":{"line":53,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Binding":{"mutability":false,"mode":"ByValue","var":{"name":"f","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":16},{"data":{"ValueNs":"fmt"},"disambiguator":0}],"index":[0,211]},"local_id":4}},"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[{"Lifetime":{"kind":"ReErased"}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"Formatter"},"disambiguator":0}],"index":[1,9114]}}},true]},"subpattern":null,"is_primary":true}},"hir_id":null,"attributes":[]},"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[{"Lifetime":{"kind":"ReErased"}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"Formatter"},"disambiguator":0}],"index":[1,9114]}}},true]},"ty_span":null,"self_kind":null,"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":16},{"data":{"ValueNs":"fmt"},"disambiguator":0}],"index":[0,211]},"local_id":3},"attributes":[]}],"ret":{"Adt":{"generic_args":[{"Type":{"Tuple":[]}},{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"Error"},"disambiguator":0}],"index":[1,42444]}}}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"result"},"disambiguator":0},{"data":{"TypeNs":"Result"},"disambiguator":0}],"index":[1,41506]}}},"body":{"ty":{"Adt":{"generic_args":[{"Type":{"Tuple":[]}},{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"Error"},"disambiguator":0}],"index":[1,42444]}}}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"result"},"disambiguator":0},{"data":{"TypeNs":"Result"},"disambiguator":0}],"index":[1,41506]}}},"span":{"lo":{"line":53,"col":22},"hi":{"line":53,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Block":{"targeted_by_break":false,"region_scope":{"id":16,"data":"Node"},"opt_destruction_scope":null,"span":{"lo":{"line":53,"col":22},"hi":{"line":53,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"stmts":[],"expr":{"ty":{"Adt":{"generic_args":[{"Type":{"Tuple":[]}},{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"Error"},"disambiguator":0}],"index":[1,42444]}}}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"result"},"disambiguator":0},{"data":{"TypeNs":"Result"},"disambiguator":0}],"index":[1,41506]}}},"span":{"lo":{"line":53,"col":22},"hi":{"line":53,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Call":{"ty":{"Arrow":{"value":{"inputs":[{"Ref":[{"kind":{"ReLateBound":[0,{"var":0,"kind":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"write_str"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[1,53916]},"'_"]}}]}},{"Adt":{"generic_args":[{"Lifetime":{"kind":"ReErased"}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"Formatter"},"disambiguator":0}],"index":[1,9114]}}},true]},{"Ref":[{"kind":{"ReLateBound":[0,{"var":1,"kind":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"write_str"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":1}],"index":[1,53917]},"'_"]}}]}},"Str",false]}],"output":{"Adt":{"generic_args":[{"Type":{"Tuple":[]}},{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"Error"},"disambiguator":0}],"index":[1,42444]}}}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"result"},"disambiguator":0},{"data":{"TypeNs":"Result"},"disambiguator":0}],"index":[1,41506]}}},"c_variadic":false,"unsafety":"Normal","abi":{"Abi":{"todo":"Rust"}}},"bound_vars":[{"Region":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"write_str"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[1,53916]},"'_"]}},{"Region":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"write_str"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":1}],"index":[1,53917]},"'_"]}}]}},"fun":{"ty":{"Arrow":{"value":{"inputs":[{"Ref":[{"kind":{"ReLateBound":[0,{"var":0,"kind":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"write_str"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[1,53916]},"'_"]}}]}},{"Adt":{"generic_args":[{"Lifetime":{"kind":"ReErased"}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"Formatter"},"disambiguator":0}],"index":[1,9114]}}},true]},{"Ref":[{"kind":{"ReLateBound":[0,{"var":1,"kind":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"write_str"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":1}],"index":[1,53917]},"'_"]}}]}},"Str",false]}],"output":{"Adt":{"generic_args":[{"Type":{"Tuple":[]}},{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"Error"},"disambiguator":0}],"index":[1,42444]}}}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"result"},"disambiguator":0},{"data":{"TypeNs":"Result"},"disambiguator":0}],"index":[1,41506]}}},"c_variadic":false,"unsafety":"Normal","abi":{"Abi":{"todo":"Rust"}}},"bound_vars":[{"Region":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"write_str"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[1,53916]},"'_"]}},{"Region":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"write_str"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":1}],"index":[1,53917]},"'_"]}}]}},"span":{"lo":{"line":53,"col":22},"hi":{"line":53,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"GlobalName":{"id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"write_str"},"disambiguator":0}],"index":[1,9184]}}},"hir_id":null,"attributes":[]},"args":[{"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[{"Lifetime":{"kind":"ReErased"}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"Formatter"},"disambiguator":0}],"index":[1,9114]}}},true]},"span":{"lo":{"line":53,"col":22},"hi":{"line":53,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Borrow":{"borrow_kind":{"Mut":{"allow_two_phase_borrow":true}},"arg":{"ty":{"Adt":{"generic_args":[{"Lifetime":{"kind":"ReErased"}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"Formatter"},"disambiguator":0}],"index":[1,9114]}}},"span":{"lo":{"line":53,"col":22},"hi":{"line":53,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Deref":{"arg":{"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[{"Lifetime":{"kind":"ReErased"}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"Formatter"},"disambiguator":0}],"index":[1,9114]}}},true]},"span":{"lo":{"line":53,"col":22},"hi":{"line":53,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"VarRef":{"id":{"name":"f","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":16},{"data":{"ValueNs":"fmt"},"disambiguator":0}],"index":[0,211]},"local_id":4}}}},"hir_id":null,"attributes":[]}}},"hir_id":null,"attributes":[]}}},"hir_id":[211,13],"attributes":[]},{"ty":{"Ref":[{"kind":"ReErased"},"Str",false]},"span":{"lo":{"line":53,"col":22},"hi":{"line":53,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Borrow":{"borrow_kind":"Shared","arg":{"ty":"Str","span":{"lo":{"line":53,"col":22},"hi":{"line":53,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Deref":{"arg":{"ty":{"Ref":[{"kind":"ReErased"},"Str",false]},"span":{"lo":{"line":53,"col":22},"hi":{"line":53,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Literal":{"lit":{"node":{"Str":["NotPayableError","Cooked"]},"span":{"lo":{"line":53,"col":22},"hi":{"line":53,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"neg":false}},"hir_id":null,"attributes":[]}}},"hir_id":null,"attributes":[]}}},"hir_id":[211,15],"attributes":[]}],"from_hir_call":true,"fn_span":{"lo":{"line":53,"col":22},"hi":{"line":53,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"impl":null}},"hir_id":[211,5],"attributes":[]},"safety_mode":"Safe"}},"hir_id":[211,17],"attributes":[]},"sig_span":{"lo":{"line":53,"col":22},"hi":{"line":53,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}},"defaultness":"Final","span":{"lo":{"line":53,"col":22},"hi":{"line":53,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":53,"col":22},"hi":{"line":53,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"attributes":{"attributes":[],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"automatically_derived","args":"Empty","tokens":null},"tokens":null}},"id":410,"style":"Outer","span":{"lo":{"line":53,"col":22},"hi":{"line":53,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}}]}},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"automatically_derived","args":"Empty","tokens":null},"tokens":null}},"id":410,"style":"Outer","span":{"lo":{"line":53,"col":22},"hi":{"line":53,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[{"kind":{"Macro":["Derive","Debug"]},"call_site":{"lo":{"line":53,"col":22},"hi":{"line":53,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"def_site":{"lo":{"line":588,"col":4},"hi":{"line":588,"col":19},"filename":{"Real":{"Remapped":{"local_path":"/home/au538501/.rustup/toolchains/nightly-2023-06-02-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/fmt/mod.rs","virtual_name":"/rustc/d59363ad0b6391b7fc5bbb02c9ccf9300eef3753/library/core/src/fmt/mod.rs"}}}},"allow_internal_unstable":["core_intrinsics","fmt_helpers_for_derive"],"edition":"Edition2021","macro_def_id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"macros"},"disambiguator":0},{"data":{"MacroNs":"Debug"},"disambiguator":0}],"index":[1,9142]},"parent_module":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"macros"},"disambiguator":0}],"index":[1,9141]},"allow_internal_unsafe":false,"local_inner_macros":false,"collapse_debuginfo":false}]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Action"},"disambiguator":0}],"index":[0,65]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Action"},"disambiguator":0}],"index":[0,65]},"span":{"lo":{"line":64,"col":0},"hi":{"line":66,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":64,"col":0},"hi":{"line":66,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Struct":[{"Struct":[[{"span":{"lo":{"line":65,"col":4},"hi":{"line":65,"col":35},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":65,"col":4},"hi":{"line":65,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"ident":["_private_action",{"lo":{"line":65,"col":15},"hi":{"line":65,"col":30},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}],"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Action"},"disambiguator":0}],"index":[0,65]},"local_id":3},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Action"},"disambiguator":0},{"data":{"ValueNs":"_private_action"},"disambiguator":0}],"index":[0,66]},"ty":{"Uint":"U32"},"attributes":[]}],false]},{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":64,"col":17},"hi":{"line":64,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":64,"col":17},"hi":{"line":64,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}]},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Actions that can be produced at the end of a contract execution. This"]},"id":79,"style":"Outer","span":{"lo":{"line":56,"col":0},"hi":{"line":56,"col":73},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," type is deliberately not cloneable so that we can enforce that"]},"id":80,"style":"Outer","span":{"lo":{"line":57,"col":0},"hi":{"line":57,"col":66},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," `and_then` and `or_else` can only be used when more than one event is"]},"id":81,"style":"Outer","span":{"lo":{"line":58,"col":0},"hi":{"line":58,"col":73},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," created."]},"id":82,"style":"Outer","span":{"lo":{"line":59,"col":0},"hi":{"line":59,"col":12},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line",""]},"id":83,"style":"Outer","span":{"lo":{"line":60,"col":0},"hi":{"line":60,"col":3},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," This type is marked as `must_use` since functions that produce"]},"id":84,"style":"Outer","span":{"lo":{"line":61,"col":0},"hi":{"line":61,"col":66},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," values of the type are effectful."]},"id":85,"style":"Outer","span":{"lo":{"line":62,"col":0},"hi":{"line":62,"col":37},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"must_use","args":"Empty","tokens":null},"tokens":null}},"id":86,"style":"Outer","span":{"lo":{"line":63,"col":0},"hi":{"line":63,"col":11},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":0}],"index":[0,67]},"span":{"lo":{"line":68,"col":0},"hi":{"line":72,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":68,"col":0},"hi":{"line":72,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Impl":{"unsafety":"Normal","polarity":"Positive","defaultness":"Final","defaultness_span":null,"constness":"NotConst","generics":{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":68,"col":11},"hi":{"line":68,"col":11},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":68,"col":4},"hi":{"line":68,"col":4},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"of_trait":null,"self_ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Action"},"disambiguator":0}],"index":[0,65]}}},"items":[{"ident":["tag",{"lo":{"line":69,"col":11},"hi":{"line":69,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":0},{"data":{"ValueNs":"tag"},"disambiguator":0}],"index":[0,68]},"generics":{"params":[{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":0},{"data":{"ValueNs":"tag"},"disambiguator":0}],"index":[0,68]},"local_id":8},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":0},{"data":{"ValueNs":"tag"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,242]},"name":"Fresh","span":{"lo":{"line":69,"col":15},"hi":{"line":69,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]}],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":69,"col":28},"hi":{"line":69,"col":28},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":69,"col":14},"hi":{"line":69,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"kind":{"Fn":{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"params":[{"pat":{"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Action"},"disambiguator":0}],"index":[0,65]}}},false]},"span":{"lo":{"line":69,"col":15},"hi":{"line":69,"col":20},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Binding":{"mutability":false,"mode":"ByValue","var":{"name":"self","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":0},{"data":{"ValueNs":"tag"},"disambiguator":0}],"index":[0,68]},"local_id":2}},"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Action"},"disambiguator":0}],"index":[0,65]}}},false]},"subpattern":null,"is_primary":true}},"hir_id":null,"attributes":[]},"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Action"},"disambiguator":0}],"index":[0,65]}}},false]},"ty_span":null,"self_kind":"ImmRef","hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":0},{"data":{"ValueNs":"tag"},"disambiguator":0}],"index":[0,68]},"local_id":1},"attributes":[]}],"ret":{"Uint":"U32"},"body":{"ty":{"Uint":"U32"},"span":{"lo":{"line":69,"col":29},"hi":{"line":71,"col":5},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Block":{"targeted_by_break":false,"region_scope":{"id":6,"data":"Node"},"opt_destruction_scope":null,"span":{"lo":{"line":69,"col":29},"hi":{"line":71,"col":5},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"stmts":[],"expr":{"ty":{"Uint":"U32"},"span":{"lo":{"line":70,"col":8},"hi":{"line":70,"col":28},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Field":{"field":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Action"},"disambiguator":0},{"data":{"ValueNs":"_private_action"},"disambiguator":0}],"index":[0,66]},"lhs":{"ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Action"},"disambiguator":0}],"index":[0,65]}}},"span":{"lo":{"line":70,"col":8},"hi":{"line":70,"col":12},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Deref":{"arg":{"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Action"},"disambiguator":0}],"index":[0,65]}}},false]},"span":{"lo":{"line":70,"col":8},"hi":{"line":70,"col":12},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"VarRef":{"id":{"name":"self","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":0},{"data":{"ValueNs":"tag"},"disambiguator":0}],"index":[0,68]},"local_id":2}}}},"hir_id":null,"attributes":[]}}},"hir_id":[68,4],"attributes":[]}}},"hir_id":[68,3],"attributes":[]},"safety_mode":"Safe"}},"hir_id":[68,7],"attributes":[]},"sig_span":{"lo":{"line":69,"col":4},"hi":{"line":69,"col":28},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}},"defaultness":"Final","span":{"lo":{"line":69,"col":4},"hi":{"line":71,"col":5},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":69,"col":4},"hi":{"line":69,"col":7},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"attributes":{"attributes":[],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}}]}},"attributes":{"attributes":[],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"ValueNs":"_"},"disambiguator":0}],"index":[0,220]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"ValueNs":"_"},"disambiguator":0}],"index":[0,220]},"span":{"lo":{"line":80,"col":0},"hi":{"line":80,"col":33},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":80,"col":0},"hi":{"line":80,"col":33},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Const":[{"Tuple":[]},{"ty":{"Tuple":[]},"span":{"lo":{"line":80,"col":0},"hi":{"line":80,"col":33},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Block":{"targeted_by_break":false,"region_scope":{"id":4,"data":"Node"},"opt_destruction_scope":null,"span":{"lo":{"line":80,"col":0},"hi":{"line":80,"col":33},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"stmts":[],"expr":null,"safety_mode":"Safe"}},"hir_id":[220,2],"attributes":[]}]},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"cfg","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:80:1: 80:34 (#40), close: concordium/src/concordium_types.rs:80:1: 80:34 (#40) }"}},"delim":"Parenthesis","tokens":"hax_compilation"}},"tokens":null},"tokens":null}},"id":423,"style":"Outer","span":{"lo":{"line":80,"col":0},"hi":{"line":80,"col":33},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[{"kind":{"Macro":["Attr","hax_lib_macros::hax_attributes"]},"call_site":{"lo":{"line":80,"col":0},"hi":{"line":80,"col":33},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"def_site":{"lo":{"line":74,"col":0},"hi":{"line":74,"col":19},"filename":{"Real":{"LocalPath":"/home/au538501/Documents/LocalHacspec/hacspec-v2/hax-lib-macros/src/lib.rs"}}},"allow_internal_unstable":null,"edition":"Edition2021","macro_def_id":{"krate":"hax_lib_macros","path":[{"data":{"MacroNs":"hax_attributes"},"disambiguator":0}],"index":[9,35]},"parent_module":{"krate":"hax_lib_macros","path":[],"index":[9,0]},"allow_internal_unsafe":false,"local_inner_macros":false,"collapse_debuginfo":false}]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"ValueNs":"_"},"disambiguator":0},{"data":{"ValueNs":"refinement"},"disambiguator":0}],"index":[0,222]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"ValueNs":"_"},"disambiguator":0},{"data":{"ValueNs":"refinement"},"disambiguator":0}],"index":[0,222]},"span":{"lo":{"line":80,"col":0},"hi":{"line":80,"col":33},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":80,"col":0},"hi":{"line":80,"col":33},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Fn":[{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":80,"col":33},"hi":{"line":80,"col":33},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":80,"col":33},"hi":{"line":80,"col":33},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"params":[{"pat":{"ty":{"Adt":{"generic_args":[],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"num"},"disambiguator":0},{"data":{"TypeNs":"nonzero"},"disambiguator":0},{"data":{"TypeNs":"NonZeroI32"},"disambiguator":0}],"index":[1,22484]}}},"span":{"lo":{"line":83,"col":8},"hi":{"line":83,"col":18},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Binding":{"mutability":false,"mode":"ByValue","var":{"name":"error_code","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"ValueNs":"_"},"disambiguator":0},{"data":{"ValueNs":"refinement"},"disambiguator":0}],"index":[0,222]},"local_id":2}},"ty":{"Adt":{"generic_args":[],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"num"},"disambiguator":0},{"data":{"TypeNs":"nonzero"},"disambiguator":0},{"data":{"TypeNs":"NonZeroI32"},"disambiguator":0}],"index":[1,22484]}}},"subpattern":null,"is_primary":true}},"hir_id":null,"attributes":[]},"ty":{"Adt":{"generic_args":[],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"num"},"disambiguator":0},{"data":{"TypeNs":"nonzero"},"disambiguator":0},{"data":{"TypeNs":"NonZeroI32"},"disambiguator":0}],"index":[1,22484]}}},"ty_span":{"lo":{"line":83,"col":20},"hi":{"line":83,"col":30},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"self_kind":null,"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"ValueNs":"_"},"disambiguator":0},{"data":{"ValueNs":"refinement"},"disambiguator":0}],"index":[0,222]},"local_id":1},"attributes":[]}],"ret":"Bool","body":{"ty":"Bool","span":{"lo":{"line":80,"col":0},"hi":{"line":80,"col":33},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Block":{"targeted_by_break":false,"region_scope":{"id":4,"data":"Node"},"opt_destruction_scope":null,"span":{"lo":{"line":80,"col":0},"hi":{"line":80,"col":33},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"stmts":[],"expr":{"ty":"Bool","span":{"lo":{"line":82,"col":13},"hi":{"line":82,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Literal":{"lit":{"node":{"Bool":true},"span":{"lo":{"line":82,"col":13},"hi":{"line":82,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"neg":false}},"hir_id":[222,3],"attributes":[]},"safety_mode":"Safe"}},"hir_id":[222,5],"attributes":[]},"sig_span":{"lo":{"line":80,"col":0},"hi":{"line":80,"col":33},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}]},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"_hax::associated_with","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:80:1: 80:34 (#40), close: concordium/src/concordium_types.rs:80:1: 80:34 (#40) }"}},"delim":"Parenthesis","tokens":"\"47dd5abfb2084d42b68d2ab170d0aa95\", refinement"}},"tokens":null},"tokens":null}},"id":424,"style":"Outer","span":{"lo":{"line":80,"col":0},"hi":{"line":80,"col":33},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"_hax::late_skip","args":"Empty","tokens":null},"tokens":null}},"id":425,"style":"Outer","span":{"lo":{"line":80,"col":0},"hi":{"line":80,"col":33},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"cfg","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:80:1: 80:34 (#40), close: concordium/src/concordium_types.rs:80:1: 80:34 (#40) }"}},"delim":"Parenthesis","tokens":"hax_compilation"}},"tokens":null},"tokens":null}},"id":423,"style":"Outer","span":{"lo":{"line":80,"col":0},"hi":{"line":80,"col":33},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[{"kind":{"Macro":["Attr","hax_lib_macros::hax_attributes"]},"call_site":{"lo":{"line":80,"col":0},"hi":{"line":80,"col":33},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"def_site":{"lo":{"line":74,"col":0},"hi":{"line":74,"col":19},"filename":{"Real":{"LocalPath":"/home/au538501/Documents/LocalHacspec/hacspec-v2/hax-lib-macros/src/lib.rs"}}},"allow_internal_unstable":null,"edition":"Edition2021","macro_def_id":{"krate":"hax_lib_macros","path":[{"data":{"MacroNs":"hax_attributes"},"disambiguator":0}],"index":[9,35]},"parent_module":{"krate":"hax_lib_macros","path":[],"index":[9,0]},"allow_internal_unsafe":false,"local_inner_macros":false,"collapse_debuginfo":false}]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]},"span":{"lo":{"line":81,"col":0},"hi":{"line":84,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":81,"col":0},"hi":{"line":84,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Struct":[{"Struct":[[{"span":{"lo":{"line":83,"col":4},"hi":{"line":83,"col":30},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":83,"col":4},"hi":{"line":83,"col":7},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"ident":["error_code",{"lo":{"line":83,"col":8},"hi":{"line":83,"col":18},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}],"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]},"local_id":3},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0},{"data":{"ValueNs":"error_code"},"disambiguator":0}],"index":[0,223]},"ty":{"Adt":{"generic_args":[],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"num"},"disambiguator":0},{"data":{"TypeNs":"nonzero"},"disambiguator":0},{"data":{"TypeNs":"NonZeroI32"},"disambiguator":0}],"index":[1,22484]}}},"attributes":[{"kind":{"Normal":{"item":{"path":"_hax::uuid","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:80:1: 80:34 (#40), close: concordium/src/concordium_types.rs:80:1: 80:34 (#40) }"}},"delim":"Parenthesis","tokens":"\"47dd5abfb2084d42b68d2ab170d0aa95\""}},"tokens":null},"tokens":null}},"id":432,"style":"Outer","span":{"lo":{"line":80,"col":0},"hi":{"line":80,"col":33},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}]}],false]},{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":81,"col":17},"hi":{"line":81,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":81,"col":17},"hi":{"line":81,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}]},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"doc","args":{"Todo":"Eq(concordium/src/concordium_types.rs:74:1: 74:75 (#0), Hir(MetaItemLit { symbol: \" An error message, signalling rejection of a smart contract invocation.\", suffix: None, kind: Str(\" An error message, signalling rejection of a smart contract invocation.\", Cooked), span: concordium/src/concordium_types.rs:74:1: 74:75 (#0) }))"},"tokens":null},"tokens":null}},"id":426,"style":"Outer","span":{"lo":{"line":74,"col":0},"hi":{"line":74,"col":74},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"doc","args":{"Todo":"Eq(concordium/src/concordium_types.rs:75:1: 75:74 (#0), Hir(MetaItemLit { symbol: \" The client will see the error code as a reject reason; if a schema is\", suffix: None, kind: Str(\" The client will see the error code as a reject reason; if a schema is\", Cooked), span: concordium/src/concordium_types.rs:75:1: 75:74 (#0) }))"},"tokens":null},"tokens":null}},"id":427,"style":"Outer","span":{"lo":{"line":75,"col":0},"hi":{"line":75,"col":73},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"doc","args":{"Todo":"Eq(concordium/src/concordium_types.rs:76:1: 76:72 (#0), Hir(MetaItemLit { symbol: \" provided, the error message corresponding to the error code will be\", suffix: None, kind: Str(\" provided, the error message corresponding to the error code will be\", Cooked), span: concordium/src/concordium_types.rs:76:1: 76:72 (#0) }))"},"tokens":null},"tokens":null}},"id":428,"style":"Outer","span":{"lo":{"line":76,"col":0},"hi":{"line":76,"col":71},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"doc","args":{"Todo":"Eq(concordium/src/concordium_types.rs:77:1: 77:74 (#0), Hir(MetaItemLit { symbol: \" displayed. The valid range for an error code is from i32::MIN to -1.\", suffix: None, kind: Str(\" displayed. The valid range for an error code is from i32::MIN to -1.\", Cooked), span: concordium/src/concordium_types.rs:77:1: 77:74 (#0) }))"},"tokens":null},"tokens":null}},"id":429,"style":"Outer","span":{"lo":{"line":77,"col":0},"hi":{"line":77,"col":73},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"repr","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:79:7: 79:20 (#0), close: concordium/src/concordium_types.rs:79:7: 79:20 (#0) }"}},"delim":"Parenthesis","tokens":"transparent"}},"tokens":null},"tokens":null}},"id":430,"style":"Outer","span":{"lo":{"line":79,"col":0},"hi":{"line":79,"col":20},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":17}],"index":[0,212]},"span":{"lo":{"line":78,"col":9},"hi":{"line":78,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":78,"col":9},"hi":{"line":78,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Impl":{"unsafety":"Normal","polarity":"Positive","defaultness":"Final","defaultness_span":null,"constness":"NotConst","generics":{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":81,"col":17},"hi":{"line":81,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":81,"col":17},"hi":{"line":81,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"of_trait":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"Debug"},"disambiguator":0}],"index":[1,9139]},"generic_args":[{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]}}}}]},"self_ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]}}},"items":[{"ident":["fmt",{"lo":{"line":78,"col":9},"hi":{"line":78,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":17},{"data":{"ValueNs":"fmt"},"disambiguator":0}],"index":[0,213]},"generics":{"params":[{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":17},{"data":{"ValueNs":"fmt"},"disambiguator":0}],"index":[0,213]},"local_id":24},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":17},{"data":{"ValueNs":"fmt"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,285]},"name":"Fresh","span":{"lo":{"line":78,"col":9},"hi":{"line":78,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]},{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":17},{"data":{"ValueNs":"fmt"},"disambiguator":0}],"index":[0,213]},"local_id":25},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":17},{"data":{"ValueNs":"fmt"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":1}],"index":[0,286]},"name":"Fresh","span":{"lo":{"line":78,"col":9},"hi":{"line":78,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]},{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":17},{"data":{"ValueNs":"fmt"},"disambiguator":0}],"index":[0,213]},"local_id":26},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":17},{"data":{"ValueNs":"fmt"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":2}],"index":[0,287]},"name":"Fresh","span":{"lo":{"line":78,"col":9},"hi":{"line":78,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]}],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":78,"col":9},"hi":{"line":78,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":78,"col":9},"hi":{"line":78,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"kind":{"Fn":{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"params":[{"pat":{"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]}}},false]},"span":{"lo":{"line":78,"col":9},"hi":{"line":78,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Binding":{"mutability":false,"mode":"ByValue","var":{"name":"self","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":17},{"data":{"ValueNs":"fmt"},"disambiguator":0}],"index":[0,213]},"local_id":2}},"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]}}},false]},"subpattern":null,"is_primary":true}},"hir_id":null,"attributes":[]},"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]}}},false]},"ty_span":null,"self_kind":"ImmRef","hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":17},{"data":{"ValueNs":"fmt"},"disambiguator":0}],"index":[0,213]},"local_id":1},"attributes":[]},{"pat":{"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[{"Lifetime":{"kind":"ReErased"}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"Formatter"},"disambiguator":0}],"index":[1,9114]}}},true]},"span":{"lo":{"line":78,"col":9},"hi":{"line":78,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Binding":{"mutability":false,"mode":"ByValue","var":{"name":"f","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":17},{"data":{"ValueNs":"fmt"},"disambiguator":0}],"index":[0,213]},"local_id":4}},"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[{"Lifetime":{"kind":"ReErased"}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"Formatter"},"disambiguator":0}],"index":[1,9114]}}},true]},"subpattern":null,"is_primary":true}},"hir_id":null,"attributes":[]},"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[{"Lifetime":{"kind":"ReErased"}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"Formatter"},"disambiguator":0}],"index":[1,9114]}}},true]},"ty_span":null,"self_kind":null,"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":17},{"data":{"ValueNs":"fmt"},"disambiguator":0}],"index":[0,213]},"local_id":3},"attributes":[]}],"ret":{"Adt":{"generic_args":[{"Type":{"Tuple":[]}},{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"Error"},"disambiguator":0}],"index":[1,42444]}}}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"result"},"disambiguator":0},{"data":{"TypeNs":"Result"},"disambiguator":0}],"index":[1,41506]}}},"body":{"ty":{"Adt":{"generic_args":[{"Type":{"Tuple":[]}},{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"Error"},"disambiguator":0}],"index":[1,42444]}}}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"result"},"disambiguator":0},{"data":{"TypeNs":"Result"},"disambiguator":0}],"index":[1,41506]}}},"span":{"lo":{"line":78,"col":9},"hi":{"line":78,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Block":{"targeted_by_break":false,"region_scope":{"id":22,"data":"Node"},"opt_destruction_scope":null,"span":{"lo":{"line":78,"col":9},"hi":{"line":78,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"stmts":[],"expr":{"ty":{"Adt":{"generic_args":[{"Type":{"Tuple":[]}},{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"Error"},"disambiguator":0}],"index":[1,42444]}}}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"result"},"disambiguator":0},{"data":{"TypeNs":"Result"},"disambiguator":0}],"index":[1,41506]}}},"span":{"lo":{"line":78,"col":9},"hi":{"line":78,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Call":{"ty":{"Arrow":{"value":{"inputs":[{"Ref":[{"kind":{"ReLateBound":[0,{"var":0,"kind":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"debug_struct_field1_finish"},"disambiguator":0},{"data":{"LifetimeNs":"'b"},"disambiguator":0}],"index":[1,9200]},"'b"]}}]}},{"Adt":{"generic_args":[{"Lifetime":{"kind":"ReErased"}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"Formatter"},"disambiguator":0}],"index":[1,9114]}}},true]},{"Ref":[{"kind":{"ReLateBound":[0,{"var":1,"kind":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"debug_struct_field1_finish"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[1,53932]},"'_"]}}]}},"Str",false]},{"Ref":[{"kind":{"ReLateBound":[0,{"var":2,"kind":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"debug_struct_field1_finish"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":1}],"index":[1,53933]},"'_"]}}]}},"Str",false]},{"Ref":[{"kind":{"ReLateBound":[0,{"var":3,"kind":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"debug_struct_field1_finish"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":2}],"index":[1,53934]},"'_"]}}]}},{"Dynamic":[[{"value":{"ExistentialPredicate":{"todo":"Trait(core::fmt::Debug)"}},"bound_vars":[]}],{"kind":{"ReLateBound":[0,{"var":3,"kind":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"debug_struct_field1_finish"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":2}],"index":[1,53934]},"'_"]}}]}},"Dyn"]},false]}],"output":{"Adt":{"generic_args":[{"Type":{"Tuple":[]}},{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"Error"},"disambiguator":0}],"index":[1,42444]}}}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"result"},"disambiguator":0},{"data":{"TypeNs":"Result"},"disambiguator":0}],"index":[1,41506]}}},"c_variadic":false,"unsafety":"Normal","abi":{"Abi":{"todo":"Rust"}}},"bound_vars":[{"Region":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"debug_struct_field1_finish"},"disambiguator":0},{"data":{"LifetimeNs":"'b"},"disambiguator":0}],"index":[1,9200]},"'b"]}},{"Region":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"debug_struct_field1_finish"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[1,53932]},"'_"]}},{"Region":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"debug_struct_field1_finish"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":1}],"index":[1,53933]},"'_"]}},{"Region":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"debug_struct_field1_finish"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":2}],"index":[1,53934]},"'_"]}}]}},"fun":{"ty":{"Arrow":{"value":{"inputs":[{"Ref":[{"kind":{"ReLateBound":[0,{"var":0,"kind":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"debug_struct_field1_finish"},"disambiguator":0},{"data":{"LifetimeNs":"'b"},"disambiguator":0}],"index":[1,9200]},"'b"]}}]}},{"Adt":{"generic_args":[{"Lifetime":{"kind":"ReErased"}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"Formatter"},"disambiguator":0}],"index":[1,9114]}}},true]},{"Ref":[{"kind":{"ReLateBound":[0,{"var":1,"kind":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"debug_struct_field1_finish"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[1,53932]},"'_"]}}]}},"Str",false]},{"Ref":[{"kind":{"ReLateBound":[0,{"var":2,"kind":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"debug_struct_field1_finish"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":1}],"index":[1,53933]},"'_"]}}]}},"Str",false]},{"Ref":[{"kind":{"ReLateBound":[0,{"var":3,"kind":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"debug_struct_field1_finish"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":2}],"index":[1,53934]},"'_"]}}]}},{"Dynamic":[[{"value":{"ExistentialPredicate":{"todo":"Trait(core::fmt::Debug)"}},"bound_vars":[]}],{"kind":{"ReLateBound":[0,{"var":3,"kind":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"debug_struct_field1_finish"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":2}],"index":[1,53934]},"'_"]}}]}},"Dyn"]},false]}],"output":{"Adt":{"generic_args":[{"Type":{"Tuple":[]}},{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"Error"},"disambiguator":0}],"index":[1,42444]}}}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"result"},"disambiguator":0},{"data":{"TypeNs":"Result"},"disambiguator":0}],"index":[1,41506]}}},"c_variadic":false,"unsafety":"Normal","abi":{"Abi":{"todo":"Rust"}}},"bound_vars":[{"Region":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"debug_struct_field1_finish"},"disambiguator":0},{"data":{"LifetimeNs":"'b"},"disambiguator":0}],"index":[1,9200]},"'b"]}},{"Region":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"debug_struct_field1_finish"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[1,53932]},"'_"]}},{"Region":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"debug_struct_field1_finish"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":1}],"index":[1,53933]},"'_"]}},{"Region":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"debug_struct_field1_finish"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":2}],"index":[1,53934]},"'_"]}}]}},"span":{"lo":{"line":78,"col":9},"hi":{"line":78,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"GlobalName":{"id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":"Impl","disambiguator":7},{"data":{"ValueNs":"debug_struct_field1_finish"},"disambiguator":0}],"index":[1,9199]}}},"hir_id":null,"attributes":[]},"args":[{"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[{"Lifetime":{"kind":"ReErased"}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"Formatter"},"disambiguator":0}],"index":[1,9114]}}},true]},"span":{"lo":{"line":78,"col":9},"hi":{"line":78,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Borrow":{"borrow_kind":{"Mut":{"allow_two_phase_borrow":true}},"arg":{"ty":{"Adt":{"generic_args":[{"Lifetime":{"kind":"ReErased"}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"Formatter"},"disambiguator":0}],"index":[1,9114]}}},"span":{"lo":{"line":78,"col":9},"hi":{"line":78,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Deref":{"arg":{"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[{"Lifetime":{"kind":"ReErased"}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"Formatter"},"disambiguator":0}],"index":[1,9114]}}},true]},"span":{"lo":{"line":78,"col":9},"hi":{"line":78,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"VarRef":{"id":{"name":"f","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":17},{"data":{"ValueNs":"fmt"},"disambiguator":0}],"index":[0,213]},"local_id":4}}}},"hir_id":null,"attributes":[]}}},"hir_id":null,"attributes":[]}}},"hir_id":[213,13],"attributes":[]},{"ty":{"Ref":[{"kind":"ReErased"},"Str",false]},"span":{"lo":{"line":78,"col":9},"hi":{"line":78,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Borrow":{"borrow_kind":"Shared","arg":{"ty":"Str","span":{"lo":{"line":78,"col":9},"hi":{"line":78,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Deref":{"arg":{"ty":{"Ref":[{"kind":"ReErased"},"Str",false]},"span":{"lo":{"line":78,"col":9},"hi":{"line":78,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Literal":{"lit":{"node":{"Str":["Reject","Cooked"]},"span":{"lo":{"line":78,"col":9},"hi":{"line":78,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"neg":false}},"hir_id":null,"attributes":[]}}},"hir_id":null,"attributes":[]}}},"hir_id":[213,15],"attributes":[]},{"ty":{"Ref":[{"kind":"ReErased"},"Str",false]},"span":{"lo":{"line":83,"col":4},"hi":{"line":83,"col":30},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Borrow":{"borrow_kind":"Shared","arg":{"ty":"Str","span":{"lo":{"line":83,"col":4},"hi":{"line":83,"col":30},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Deref":{"arg":{"ty":{"Ref":[{"kind":"ReErased"},"Str",false]},"span":{"lo":{"line":83,"col":4},"hi":{"line":83,"col":30},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Literal":{"lit":{"node":{"Str":["error_code","Cooked"]},"span":{"lo":{"line":83,"col":4},"hi":{"line":83,"col":30},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"neg":false}},"hir_id":null,"attributes":[]}}},"hir_id":null,"attributes":[]}}},"hir_id":[213,16],"attributes":[]},{"ty":{"Ref":[{"kind":"ReErased"},{"Dynamic":[[{"value":{"ExistentialPredicate":{"todo":"Trait(core::fmt::Debug)"}},"bound_vars":[]}],{"kind":"ReErased"},"Dyn"]},false]},"span":{"lo":{"line":83,"col":4},"hi":{"line":83,"col":30},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Pointer":{"cast":"Unsize","source":{"ty":{"Ref":[{"kind":"ReErased"},{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"num"},"disambiguator":0},{"data":{"TypeNs":"nonzero"},"disambiguator":0},{"data":{"TypeNs":"NonZeroI32"},"disambiguator":0}],"index":[1,22484]}}},false]},false]},"span":{"lo":{"line":83,"col":4},"hi":{"line":83,"col":30},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Borrow":{"borrow_kind":"Shared","arg":{"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"num"},"disambiguator":0},{"data":{"TypeNs":"nonzero"},"disambiguator":0},{"data":{"TypeNs":"NonZeroI32"},"disambiguator":0}],"index":[1,22484]}}},false]},"span":{"lo":{"line":83,"col":4},"hi":{"line":83,"col":30},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Deref":{"arg":{"ty":{"Ref":[{"kind":"ReErased"},{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"num"},"disambiguator":0},{"data":{"TypeNs":"nonzero"},"disambiguator":0},{"data":{"TypeNs":"NonZeroI32"},"disambiguator":0}],"index":[1,22484]}}},false]},false]},"span":{"lo":{"line":83,"col":4},"hi":{"line":83,"col":30},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Borrow":{"borrow_kind":"Shared","arg":{"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"num"},"disambiguator":0},{"data":{"TypeNs":"nonzero"},"disambiguator":0},{"data":{"TypeNs":"NonZeroI32"},"disambiguator":0}],"index":[1,22484]}}},false]},"span":{"lo":{"line":83,"col":4},"hi":{"line":83,"col":30},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Borrow":{"borrow_kind":"Shared","arg":{"ty":{"Adt":{"generic_args":[],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"num"},"disambiguator":0},{"data":{"TypeNs":"nonzero"},"disambiguator":0},{"data":{"TypeNs":"NonZeroI32"},"disambiguator":0}],"index":[1,22484]}}},"span":{"lo":{"line":83,"col":4},"hi":{"line":83,"col":30},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Field":{"field":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0},{"data":{"ValueNs":"error_code"},"disambiguator":0}],"index":[0,223]},"lhs":{"ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]}}},"span":{"lo":{"line":78,"col":9},"hi":{"line":78,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Deref":{"arg":{"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]}}},false]},"span":{"lo":{"line":78,"col":9},"hi":{"line":78,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"VarRef":{"id":{"name":"self","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":17},{"data":{"ValueNs":"fmt"},"disambiguator":0}],"index":[0,213]},"local_id":2}}}},"hir_id":null,"attributes":[]}}},"hir_id":[213,20],"attributes":[]}}},"hir_id":[213,19],"attributes":[]}}},"hir_id":[213,18],"attributes":[]}}},"hir_id":null,"attributes":[]}}},"hir_id":null,"attributes":[]}}},"hir_id":null,"attributes":[]}}},"hir_id":[213,17],"attributes":[]}],"from_hir_call":true,"fn_span":{"lo":{"line":78,"col":9},"hi":{"line":78,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"impl":null}},"hir_id":[213,5],"attributes":[]},"safety_mode":"Safe"}},"hir_id":[213,23],"attributes":[]},"sig_span":{"lo":{"line":78,"col":9},"hi":{"line":78,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}},"defaultness":"Final","span":{"lo":{"line":78,"col":9},"hi":{"line":78,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":78,"col":9},"hi":{"line":78,"col":9},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"attributes":{"attributes":[],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"automatically_derived","args":"Empty","tokens":null},"tokens":null}},"id":411,"style":"Outer","span":{"lo":{"line":78,"col":9},"hi":{"line":78,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}}]}},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"automatically_derived","args":"Empty","tokens":null},"tokens":null}},"id":411,"style":"Outer","span":{"lo":{"line":78,"col":9},"hi":{"line":78,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[{"kind":{"Macro":["Derive","Debug"]},"call_site":{"lo":{"line":78,"col":9},"hi":{"line":78,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"def_site":{"lo":{"line":588,"col":4},"hi":{"line":588,"col":19},"filename":{"Real":{"Remapped":{"local_path":"/home/au538501/.rustup/toolchains/nightly-2023-06-02-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/fmt/mod.rs","virtual_name":"/rustc/d59363ad0b6391b7fc5bbb02c9ccf9300eef3753/library/core/src/fmt/mod.rs"}}}},"allow_internal_unstable":["core_intrinsics","fmt_helpers_for_derive"],"edition":"Edition2021","macro_def_id":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"macros"},"disambiguator":0},{"data":{"MacroNs":"Debug"},"disambiguator":0}],"index":[1,9142]},"parent_module":{"krate":"core","path":[{"data":{"TypeNs":"fmt"},"disambiguator":0},{"data":{"TypeNs":"macros"},"disambiguator":0}],"index":[1,9141]},"allow_internal_unsafe":false,"local_inner_macros":false,"collapse_debuginfo":false}]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":18}],"index":[0,214]},"span":{"lo":{"line":78,"col":16},"hi":{"line":78,"col":18},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":78,"col":16},"hi":{"line":78,"col":18},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Impl":{"unsafety":"Normal","polarity":"Positive","defaultness":"Final","defaultness_span":null,"constness":"NotConst","generics":{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":81,"col":17},"hi":{"line":81,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":81,"col":17},"hi":{"line":81,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"of_trait":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"StructuralEq"},"disambiguator":0}],"index":[1,2693]},"generic_args":[{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]}}}}]},"self_ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]}}},"items":[]}},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"automatically_derived","args":"Empty","tokens":null},"tokens":null}},"id":415,"style":"Outer","span":{"lo":{"line":78,"col":16},"hi":{"line":78,"col":18},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[{"kind":{"Macro":["Derive","Eq"]},"call_site":{"lo":{"line":78,"col":16},"hi":{"line":78,"col":18},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"def_site":{"lo":{"line":302,"col":0},"hi":{"line":302,"col":12},"filename":{"Real":{"Remapped":{"local_path":"/home/au538501/.rustup/toolchains/nightly-2023-06-02-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/cmp.rs","virtual_name":"/rustc/d59363ad0b6391b7fc5bbb02c9ccf9300eef3753/library/core/src/cmp.rs"}}}},"allow_internal_unstable":["core_intrinsics","derive_eq","structural_match","no_coverage"],"edition":"Edition2021","macro_def_id":{"krate":"core","path":[{"data":{"TypeNs":"cmp"},"disambiguator":0},{"data":{"MacroNs":"Eq"},"disambiguator":0}],"index":[1,2317]},"parent_module":{"krate":"core","path":[{"data":{"TypeNs":"cmp"},"disambiguator":0}],"index":[1,2288]},"allow_internal_unsafe":false,"local_inner_macros":false,"collapse_debuginfo":false}]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":19}],"index":[0,215]},"span":{"lo":{"line":78,"col":16},"hi":{"line":78,"col":18},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":78,"col":16},"hi":{"line":78,"col":18},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Impl":{"unsafety":"Normal","polarity":"Positive","defaultness":"Final","defaultness_span":null,"constness":"NotConst","generics":{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":81,"col":17},"hi":{"line":81,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":81,"col":17},"hi":{"line":81,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"of_trait":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"cmp"},"disambiguator":0},{"data":{"TypeNs":"Eq"},"disambiguator":0}],"index":[1,2315]},"generic_args":[{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]}}}}]},"self_ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]}}},"items":[{"ident":["assert_receiver_is_total_eq",{"lo":{"line":78,"col":16},"hi":{"line":78,"col":18},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":19},{"data":{"ValueNs":"assert_receiver_is_total_eq"},"disambiguator":0}],"index":[0,216]},"generics":{"params":[{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":19},{"data":{"ValueNs":"assert_receiver_is_total_eq"},"disambiguator":0}],"index":[0,216]},"local_id":14},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":19},{"data":{"ValueNs":"assert_receiver_is_total_eq"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,288]},"name":"Fresh","span":{"lo":{"line":78,"col":16},"hi":{"line":78,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]}],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":78,"col":16},"hi":{"line":78,"col":18},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":78,"col":16},"hi":{"line":78,"col":18},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"kind":{"Fn":{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"params":[{"pat":{"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]}}},false]},"span":{"lo":{"line":78,"col":16},"hi":{"line":78,"col":18},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Binding":{"mutability":false,"mode":"ByValue","var":{"name":"self","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":19},{"data":{"ValueNs":"assert_receiver_is_total_eq"},"disambiguator":0}],"index":[0,216]},"local_id":2}},"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]}}},false]},"subpattern":null,"is_primary":true}},"hir_id":null,"attributes":[]},"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]}}},false]},"ty_span":null,"self_kind":"ImmRef","hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":19},{"data":{"ValueNs":"assert_receiver_is_total_eq"},"disambiguator":0}],"index":[0,216]},"local_id":1},"attributes":[]}],"ret":{"Tuple":[]},"body":{"ty":{"Tuple":[]},"span":{"lo":{"line":78,"col":16},"hi":{"line":78,"col":18},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Block":{"targeted_by_break":false,"region_scope":{"id":12,"data":"Node"},"opt_destruction_scope":null,"span":{"lo":{"line":78,"col":16},"hi":{"line":78,"col":18},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"stmts":[{"kind":{"Let":{"remainder_scope":{"id":12,"data":{"Remainder":0}},"init_scope":{"id":3,"data":"Node"},"pattern":{"ty":{"Adt":{"generic_args":[{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"num"},"disambiguator":0},{"data":{"TypeNs":"nonzero"},"disambiguator":0},{"data":{"TypeNs":"NonZeroI32"},"disambiguator":0}],"index":[1,22484]}}}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"cmp"},"disambiguator":0},{"data":{"TypeNs":"AssertParamIsEq"},"disambiguator":0}],"index":[1,2318]}}},"span":{"lo":{"line":83,"col":4},"hi":{"line":83,"col":30},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"AscribeUserType":{"ascription":{"annotation":{"user_ty":{"max_universe":0,"variables":[],"value":{"Todo":"Ty(core::cmp::AssertParamIsEq)"}},"span":{"lo":{"line":83,"col":4},"hi":{"line":83,"col":30},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"inferred_ty":{"Adt":{"generic_args":[{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"num"},"disambiguator":0},{"data":{"TypeNs":"nonzero"},"disambiguator":0},{"data":{"TypeNs":"NonZeroI32"},"disambiguator":0}],"index":[1,22484]}}}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"cmp"},"disambiguator":0},{"data":{"TypeNs":"AssertParamIsEq"},"disambiguator":0}],"index":[1,2318]}}}},"variance":"Covariant"},"subpattern":{"ty":{"Adt":{"generic_args":[{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"num"},"disambiguator":0},{"data":{"TypeNs":"nonzero"},"disambiguator":0},{"data":{"TypeNs":"NonZeroI32"},"disambiguator":0}],"index":[1,22484]}}}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"cmp"},"disambiguator":0},{"data":{"TypeNs":"AssertParamIsEq"},"disambiguator":0}],"index":[1,2318]}}},"span":{"lo":{"line":83,"col":4},"hi":{"line":83,"col":30},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":"Wild","hir_id":null,"attributes":[]}}},"hir_id":null,"attributes":[]},"initializer":null,"else_block":null,"lint_level":{"Explicit":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":19},{"data":{"ValueNs":"assert_receiver_is_total_eq"},"disambiguator":0}],"index":[0,216]},"local_id":10}},"attributes":[]}},"opt_destruction_scope":{"id":3,"data":"Destruction"}}],"expr":null,"safety_mode":"Safe"}},"hir_id":[216,13],"attributes":[]},"sig_span":{"lo":{"line":78,"col":16},"hi":{"line":78,"col":18},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}},"defaultness":"Final","span":{"lo":{"line":78,"col":16},"hi":{"line":78,"col":18},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":78,"col":16},"hi":{"line":78,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"inline","args":"Empty","tokens":null},"tokens":null}},"id":412,"style":"Outer","span":{"lo":{"line":78,"col":16},"hi":{"line":78,"col":18},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"doc","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:78:17: 78:19 (#37), close: concordium/src/concordium_types.rs:78:17: 78:19 (#37) }"}},"delim":"Parenthesis","tokens":"hidden"}},"tokens":null},"tokens":null}},"id":413,"style":"Outer","span":{"lo":{"line":78,"col":16},"hi":{"line":78,"col":18},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_coverage","args":"Empty","tokens":null},"tokens":null}},"id":414,"style":"Outer","span":{"lo":{"line":78,"col":16},"hi":{"line":78,"col":18},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"automatically_derived","args":"Empty","tokens":null},"tokens":null}},"id":416,"style":"Outer","span":{"lo":{"line":78,"col":16},"hi":{"line":78,"col":18},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}}]}},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"automatically_derived","args":"Empty","tokens":null},"tokens":null}},"id":416,"style":"Outer","span":{"lo":{"line":78,"col":16},"hi":{"line":78,"col":18},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[{"kind":{"Macro":["Derive","Eq"]},"call_site":{"lo":{"line":78,"col":16},"hi":{"line":78,"col":18},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"def_site":{"lo":{"line":302,"col":0},"hi":{"line":302,"col":12},"filename":{"Real":{"Remapped":{"local_path":"/home/au538501/.rustup/toolchains/nightly-2023-06-02-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/cmp.rs","virtual_name":"/rustc/d59363ad0b6391b7fc5bbb02c9ccf9300eef3753/library/core/src/cmp.rs"}}}},"allow_internal_unstable":["core_intrinsics","derive_eq","structural_match","no_coverage"],"edition":"Edition2021","macro_def_id":{"krate":"core","path":[{"data":{"TypeNs":"cmp"},"disambiguator":0},{"data":{"MacroNs":"Eq"},"disambiguator":0}],"index":[1,2317]},"parent_module":{"krate":"core","path":[{"data":{"TypeNs":"cmp"},"disambiguator":0}],"index":[1,2288]},"allow_internal_unsafe":false,"local_inner_macros":false,"collapse_debuginfo":false}]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":20}],"index":[0,217]},"span":{"lo":{"line":78,"col":20},"hi":{"line":78,"col":29},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":78,"col":20},"hi":{"line":78,"col":29},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Impl":{"unsafety":"Normal","polarity":"Positive","defaultness":"Final","defaultness_span":null,"constness":"NotConst","generics":{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":81,"col":17},"hi":{"line":81,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":81,"col":17},"hi":{"line":81,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"of_trait":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"StructuralPartialEq"},"disambiguator":0}],"index":[1,2692]},"generic_args":[{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]}}}}]},"self_ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]}}},"items":[]}},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"automatically_derived","args":"Empty","tokens":null},"tokens":null}},"id":417,"style":"Outer","span":{"lo":{"line":78,"col":20},"hi":{"line":78,"col":29},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[{"kind":{"Macro":["Derive","PartialEq"]},"call_site":{"lo":{"line":78,"col":20},"hi":{"line":78,"col":29},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"def_site":{"lo":{"line":236,"col":0},"hi":{"line":236,"col":19},"filename":{"Real":{"Remapped":{"local_path":"/home/au538501/.rustup/toolchains/nightly-2023-06-02-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/cmp.rs","virtual_name":"/rustc/d59363ad0b6391b7fc5bbb02c9ccf9300eef3753/library/core/src/cmp.rs"}}}},"allow_internal_unstable":["core_intrinsics","structural_match"],"edition":"Edition2021","macro_def_id":{"krate":"core","path":[{"data":{"TypeNs":"cmp"},"disambiguator":0},{"data":{"MacroNs":"PartialEq"},"disambiguator":0}],"index":[1,2314]},"parent_module":{"krate":"core","path":[{"data":{"TypeNs":"cmp"},"disambiguator":0}],"index":[1,2288]},"allow_internal_unsafe":false,"local_inner_macros":false,"collapse_debuginfo":false}]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":21}],"index":[0,218]},"span":{"lo":{"line":78,"col":20},"hi":{"line":78,"col":29},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":78,"col":20},"hi":{"line":78,"col":29},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Impl":{"unsafety":"Normal","polarity":"Positive","defaultness":"Final","defaultness_span":null,"constness":"NotConst","generics":{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":81,"col":17},"hi":{"line":81,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":81,"col":17},"hi":{"line":81,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"of_trait":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"cmp"},"disambiguator":0},{"data":{"TypeNs":"PartialEq"},"disambiguator":0}],"index":[1,2310]},"generic_args":[{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]}}}},{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]}}}}]},"self_ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]}}},"items":[{"ident":["eq",{"lo":{"line":78,"col":20},"hi":{"line":78,"col":29},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":21},{"data":{"ValueNs":"eq"},"disambiguator":0}],"index":[0,219]},"generics":{"params":[{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":21},{"data":{"ValueNs":"eq"},"disambiguator":0}],"index":[0,219]},"local_id":14},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":21},{"data":{"ValueNs":"eq"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,289]},"name":"Fresh","span":{"lo":{"line":78,"col":20},"hi":{"line":78,"col":21},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]},{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":21},{"data":{"ValueNs":"eq"},"disambiguator":0}],"index":[0,219]},"local_id":15},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":21},{"data":{"ValueNs":"eq"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":1}],"index":[0,290]},"name":"Fresh","span":{"lo":{"line":78,"col":20},"hi":{"line":78,"col":21},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]}],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":78,"col":20},"hi":{"line":78,"col":29},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":78,"col":20},"hi":{"line":78,"col":29},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"kind":{"Fn":{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"params":[{"pat":{"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]}}},false]},"span":{"lo":{"line":78,"col":20},"hi":{"line":78,"col":29},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Binding":{"mutability":false,"mode":"ByValue","var":{"name":"self","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":21},{"data":{"ValueNs":"eq"},"disambiguator":0}],"index":[0,219]},"local_id":2}},"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]}}},false]},"subpattern":null,"is_primary":true}},"hir_id":null,"attributes":[]},"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]}}},false]},"ty_span":null,"self_kind":"ImmRef","hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":21},{"data":{"ValueNs":"eq"},"disambiguator":0}],"index":[0,219]},"local_id":1},"attributes":[]},{"pat":{"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]}}},false]},"span":{"lo":{"line":78,"col":20},"hi":{"line":78,"col":29},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Binding":{"mutability":false,"mode":"ByValue","var":{"name":"other","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":21},{"data":{"ValueNs":"eq"},"disambiguator":0}],"index":[0,219]},"local_id":4}},"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]}}},false]},"subpattern":null,"is_primary":true}},"hir_id":null,"attributes":[]},"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]}}},false]},"ty_span":null,"self_kind":null,"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":21},{"data":{"ValueNs":"eq"},"disambiguator":0}],"index":[0,219]},"local_id":3},"attributes":[]}],"ret":"Bool","body":{"ty":"Bool","span":{"lo":{"line":78,"col":20},"hi":{"line":78,"col":29},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Block":{"targeted_by_break":false,"region_scope":{"id":12,"data":"Node"},"opt_destruction_scope":null,"span":{"lo":{"line":78,"col":20},"hi":{"line":78,"col":29},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"stmts":[],"expr":{"ty":"Bool","span":{"lo":{"line":83,"col":4},"hi":{"line":83,"col":30},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Call":{"ty":{"Arrow":{"value":{"inputs":[{"Ref":[{"kind":{"ReLateBound":[0,{"var":0,"kind":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"cmp"},"disambiguator":0},{"data":{"TypeNs":"PartialEq"},"disambiguator":0},{"data":{"ValueNs":"eq"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[1,51736]},"'_"]}}]}},{"Adt":{"generic_args":[],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"num"},"disambiguator":0},{"data":{"TypeNs":"nonzero"},"disambiguator":0},{"data":{"TypeNs":"NonZeroI32"},"disambiguator":0}],"index":[1,22484]}}},false]},{"Ref":[{"kind":{"ReLateBound":[0,{"var":1,"kind":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"cmp"},"disambiguator":0},{"data":{"TypeNs":"PartialEq"},"disambiguator":0},{"data":{"ValueNs":"eq"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":1}],"index":[1,51737]},"'_"]}}]}},{"Adt":{"generic_args":[],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"num"},"disambiguator":0},{"data":{"TypeNs":"nonzero"},"disambiguator":0},{"data":{"TypeNs":"NonZeroI32"},"disambiguator":0}],"index":[1,22484]}}},false]}],"output":"Bool","c_variadic":false,"unsafety":"Normal","abi":{"Abi":{"todo":"Rust"}}},"bound_vars":[{"Region":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"cmp"},"disambiguator":0},{"data":{"TypeNs":"PartialEq"},"disambiguator":0},{"data":{"ValueNs":"eq"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[1,51736]},"'_"]}},{"Region":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"cmp"},"disambiguator":0},{"data":{"TypeNs":"PartialEq"},"disambiguator":0},{"data":{"ValueNs":"eq"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":1}],"index":[1,51737]},"'_"]}}]}},"fun":{"ty":{"Arrow":{"value":{"inputs":[{"Ref":[{"kind":{"ReLateBound":[0,{"var":0,"kind":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"cmp"},"disambiguator":0},{"data":{"TypeNs":"PartialEq"},"disambiguator":0},{"data":{"ValueNs":"eq"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[1,51736]},"'_"]}}]}},{"Adt":{"generic_args":[],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"num"},"disambiguator":0},{"data":{"TypeNs":"nonzero"},"disambiguator":0},{"data":{"TypeNs":"NonZeroI32"},"disambiguator":0}],"index":[1,22484]}}},false]},{"Ref":[{"kind":{"ReLateBound":[0,{"var":1,"kind":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"cmp"},"disambiguator":0},{"data":{"TypeNs":"PartialEq"},"disambiguator":0},{"data":{"ValueNs":"eq"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":1}],"index":[1,51737]},"'_"]}}]}},{"Adt":{"generic_args":[],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"num"},"disambiguator":0},{"data":{"TypeNs":"nonzero"},"disambiguator":0},{"data":{"TypeNs":"NonZeroI32"},"disambiguator":0}],"index":[1,22484]}}},false]}],"output":"Bool","c_variadic":false,"unsafety":"Normal","abi":{"Abi":{"todo":"Rust"}}},"bound_vars":[{"Region":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"cmp"},"disambiguator":0},{"data":{"TypeNs":"PartialEq"},"disambiguator":0},{"data":{"ValueNs":"eq"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[1,51736]},"'_"]}},{"Region":{"BrNamed":[{"krate":"core","path":[{"data":{"TypeNs":"cmp"},"disambiguator":0},{"data":{"TypeNs":"PartialEq"},"disambiguator":0},{"data":{"ValueNs":"eq"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":1}],"index":[1,51737]},"'_"]}}]}},"span":{"lo":{"line":83,"col":4},"hi":{"line":83,"col":30},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"GlobalName":{"id":{"krate":"core","path":[{"data":{"TypeNs":"cmp"},"disambiguator":0},{"data":{"TypeNs":"PartialEq"},"disambiguator":0},{"data":{"ValueNs":"eq"},"disambiguator":0}],"index":[1,2312]}}},"hir_id":null,"attributes":[]},"args":[{"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"num"},"disambiguator":0},{"data":{"TypeNs":"nonzero"},"disambiguator":0},{"data":{"TypeNs":"NonZeroI32"},"disambiguator":0}],"index":[1,22484]}}},false]},"span":{"lo":{"line":83,"col":4},"hi":{"line":83,"col":30},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Borrow":{"borrow_kind":"Shared","arg":{"ty":{"Adt":{"generic_args":[],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"num"},"disambiguator":0},{"data":{"TypeNs":"nonzero"},"disambiguator":0},{"data":{"TypeNs":"NonZeroI32"},"disambiguator":0}],"index":[1,22484]}}},"span":{"lo":{"line":83,"col":4},"hi":{"line":83,"col":30},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Field":{"field":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0},{"data":{"ValueNs":"error_code"},"disambiguator":0}],"index":[0,223]},"lhs":{"ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]}}},"span":{"lo":{"line":78,"col":20},"hi":{"line":78,"col":29},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Deref":{"arg":{"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]}}},false]},"span":{"lo":{"line":78,"col":20},"hi":{"line":78,"col":29},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"VarRef":{"id":{"name":"self","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":21},{"data":{"ValueNs":"eq"},"disambiguator":0}],"index":[0,219]},"local_id":2}}}},"hir_id":null,"attributes":[]}}},"hir_id":[219,7],"attributes":[]}}},"hir_id":null,"attributes":[]}}},"hir_id":[219,6],"attributes":[]},{"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"num"},"disambiguator":0},{"data":{"TypeNs":"nonzero"},"disambiguator":0},{"data":{"TypeNs":"NonZeroI32"},"disambiguator":0}],"index":[1,22484]}}},false]},"span":{"lo":{"line":83,"col":4},"hi":{"line":83,"col":30},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Borrow":{"borrow_kind":"Shared","arg":{"ty":{"Adt":{"generic_args":[],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"num"},"disambiguator":0},{"data":{"TypeNs":"nonzero"},"disambiguator":0},{"data":{"TypeNs":"NonZeroI32"},"disambiguator":0}],"index":[1,22484]}}},"span":{"lo":{"line":83,"col":4},"hi":{"line":83,"col":30},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Field":{"field":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0},{"data":{"ValueNs":"error_code"},"disambiguator":0}],"index":[0,223]},"lhs":{"ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]}}},"span":{"lo":{"line":78,"col":20},"hi":{"line":78,"col":29},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Deref":{"arg":{"ty":{"Ref":[{"kind":"ReErased"},{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]}}},false]},"span":{"lo":{"line":78,"col":20},"hi":{"line":78,"col":29},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"VarRef":{"id":{"name":"other","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":21},{"data":{"ValueNs":"eq"},"disambiguator":0}],"index":[0,219]},"local_id":4}}}},"hir_id":null,"attributes":[]}}},"hir_id":[219,10],"attributes":[]}}},"hir_id":null,"attributes":[]}}},"hir_id":[219,9],"attributes":[]}],"from_hir_call":false,"fn_span":{"lo":{"line":83,"col":4},"hi":{"line":83,"col":30},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"impl":{"impl":{"Concrete":{"id":{"krate":"core","path":[{"data":{"TypeNs":"num"},"disambiguator":0},{"data":{"TypeNs":"nonzero"},"disambiguator":0},{"data":"Impl","disambiguator":209}],"index":[1,22494]},"generics":[]}},"args":[]}}},"hir_id":[219,5],"attributes":[]},"safety_mode":"Safe"}},"hir_id":[219,13],"attributes":[]},"sig_span":{"lo":{"line":78,"col":20},"hi":{"line":78,"col":29},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}},"defaultness":"Final","span":{"lo":{"line":78,"col":20},"hi":{"line":78,"col":29},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":78,"col":20},"hi":{"line":78,"col":20},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"inline","args":"Empty","tokens":null},"tokens":null}},"id":418,"style":"Outer","span":{"lo":{"line":78,"col":20},"hi":{"line":78,"col":29},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"automatically_derived","args":"Empty","tokens":null},"tokens":null}},"id":419,"style":"Outer","span":{"lo":{"line":78,"col":20},"hi":{"line":78,"col":29},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}}]}},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"automatically_derived","args":"Empty","tokens":null},"tokens":null}},"id":419,"style":"Outer","span":{"lo":{"line":78,"col":20},"hi":{"line":78,"col":29},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[{"kind":{"Macro":["Derive","PartialEq"]},"call_site":{"lo":{"line":78,"col":20},"hi":{"line":78,"col":29},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"def_site":{"lo":{"line":236,"col":0},"hi":{"line":236,"col":19},"filename":{"Real":{"Remapped":{"local_path":"/home/au538501/.rustup/toolchains/nightly-2023-06-02-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/cmp.rs","virtual_name":"/rustc/d59363ad0b6391b7fc5bbb02c9ccf9300eef3753/library/core/src/cmp.rs"}}}},"allow_internal_unstable":["core_intrinsics","structural_match"],"edition":"Edition2021","macro_def_id":{"krate":"core","path":[{"data":{"TypeNs":"cmp"},"disambiguator":0},{"data":{"MacroNs":"PartialEq"},"disambiguator":0}],"index":[1,2314]},"parent_module":{"krate":"core","path":[{"data":{"TypeNs":"cmp"},"disambiguator":0}],"index":[1,2288]},"allow_internal_unsafe":false,"local_inner_macros":false,"collapse_debuginfo":false}]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":1}],"index":[0,69]},"span":{"lo":{"line":87,"col":0},"hi":{"line":95,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":87,"col":0},"hi":{"line":95,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Impl":{"unsafety":"Normal","polarity":"Positive","defaultness":"Final","defaultness_span":null,"constness":"NotConst","generics":{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":87,"col":23},"hi":{"line":87,"col":23},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":87,"col":4},"hi":{"line":87,"col":4},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"of_trait":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"default"},"disambiguator":0},{"data":{"TypeNs":"Default"},"disambiguator":0}],"index":[1,2587]},"generic_args":[{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]}}}}]},"self_ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]}}},"items":[{"ident":["default",{"lo":{"line":90,"col":7},"hi":{"line":90,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":1},{"data":{"ValueNs":"default"},"disambiguator":0}],"index":[0,239]},"generics":{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":90,"col":24},"hi":{"line":90,"col":24},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":90,"col":14},"hi":{"line":90,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"kind":{"Fn":{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"params":[],"ret":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]}}},"body":{"ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]}}},"span":{"lo":{"line":90,"col":25},"hi":{"line":94,"col":5},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Block":{"targeted_by_break":false,"region_scope":{"id":15,"data":"Node"},"opt_destruction_scope":null,"span":{"lo":{"line":90,"col":25},"hi":{"line":94,"col":5},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"stmts":[],"expr":{"ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]}}},"span":{"lo":{"line":91,"col":8},"hi":{"line":93,"col":9},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Adt":{"info":{"type_namespace":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0}],"index":[0,221]},"typ":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]},"variant":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]},"variant_index":0,"typ_is_record":true,"variant_is_record":true,"typ_is_struct":true},"user_ty":null,"fields":[{"field":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0},{"data":{"ValueNs":"error_code"},"disambiguator":0}],"index":[0,223]},"value":{"ty":{"Adt":{"generic_args":[],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"num"},"disambiguator":0},{"data":{"TypeNs":"nonzero"},"disambiguator":0},{"data":{"TypeNs":"NonZeroI32"},"disambiguator":0}],"index":[1,22484]}}},"span":{"lo":{"line":92,"col":24},"hi":{"line":92,"col":68},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Block":{"targeted_by_break":false,"region_scope":{"id":14,"data":"Node"},"opt_destruction_scope":null,"span":{"lo":{"line":92,"col":24},"hi":{"line":92,"col":68},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"stmts":[],"expr":{"ty":{"Adt":{"generic_args":[],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"num"},"disambiguator":0},{"data":{"TypeNs":"nonzero"},"disambiguator":0},{"data":{"TypeNs":"NonZeroI32"},"disambiguator":0}],"index":[1,22484]}}},"span":{"lo":{"line":92,"col":32},"hi":{"line":92,"col":67},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Call":{"ty":{"Arrow":{"value":{"inputs":[{"Int":"I32"}],"output":{"Adt":{"generic_args":[],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"num"},"disambiguator":0},{"data":{"TypeNs":"nonzero"},"disambiguator":0},{"data":{"TypeNs":"NonZeroI32"},"disambiguator":0}],"index":[1,22484]}}},"c_variadic":false,"unsafety":"Unsafe","abi":{"Abi":{"todo":"Rust"}}},"bound_vars":[]}},"fun":{"ty":{"Arrow":{"value":{"inputs":[{"Int":"I32"}],"output":{"Adt":{"generic_args":[],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"num"},"disambiguator":0},{"data":{"TypeNs":"nonzero"},"disambiguator":0},{"data":{"TypeNs":"NonZeroI32"},"disambiguator":0}],"index":[1,22484]}}},"c_variadic":false,"unsafety":"Unsafe","abi":{"Abi":{"todo":"Rust"}}},"bound_vars":[]}},"span":{"lo":{"line":92,"col":32},"hi":{"line":92,"col":57},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"GlobalName":{"id":{"krate":"core","path":[{"data":{"TypeNs":"num"},"disambiguator":0},{"data":{"TypeNs":"nonzero"},"disambiguator":0},{"data":"Impl","disambiguator":56},{"data":{"ValueNs":"new_unchecked"},"disambiguator":0}],"index":[1,22145]}}},"hir_id":null,"attributes":[]},"args":[{"ty":{"Int":"I32"},"span":{"lo":{"line":92,"col":58},"hi":{"line":92,"col":66},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"NamedConst":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"num"},"disambiguator":0},{"data":"Impl","disambiguator":2},{"data":{"ValueNs":"MIN"},"disambiguator":0}],"index":[1,28926]},"substs":[],"user_ty":null,"impl":null}},"hir_id":[239,10],"attributes":[]}],"from_hir_call":true,"fn_span":{"lo":{"line":92,"col":32},"hi":{"line":92,"col":67},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"impl":null}},"hir_id":[239,5],"attributes":[]},"safety_mode":"ExplicitUnsafe"}},"hir_id":[239,4],"attributes":[]}}],"base":null}},"hir_id":[239,1],"attributes":[]},"safety_mode":"Safe"}},"hir_id":[239,16],"attributes":[]},"sig_span":{"lo":{"line":90,"col":4},"hi":{"line":90,"col":24},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}},"defaultness":"Final","span":{"lo":{"line":90,"col":4},"hi":{"line":94,"col":5},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":90,"col":4},"hi":{"line":90,"col":4},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"_hax::skip","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:89:5: 89:12 (#49), close: concordium/src/concordium_types.rs:89:5: 89:12 (#49) }"}},"delim":"Parenthesis","tokens":""}},"tokens":null},"tokens":null}},"id":444,"style":"Outer","span":{"lo":{"line":89,"col":4},"hi":{"line":89,"col":11},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"inline","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:88:13: 88:14 (#0), close: concordium/src/concordium_types.rs:88:20: 88:21 (#0) }"}},"delim":"Parenthesis","tokens":"always"}},"tokens":null},"tokens":null}},"id":443,"style":"Outer","span":{"lo":{"line":88,"col":4},"hi":{"line":88,"col":21},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"DocComment":["Line"," Default error is i32::MIN."]},"id":95,"style":"Outer","span":{"lo":{"line":86,"col":0},"hi":{"line":86,"col":30},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}}]}},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Default error is i32::MIN."]},"id":95,"style":"Outer","span":{"lo":{"line":86,"col":0},"hi":{"line":86,"col":30},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":2}],"index":[0,70]},"span":{"lo":{"line":97,"col":0},"hi":{"line":108,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":97,"col":0},"hi":{"line":108,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Impl":{"unsafety":"Normal","polarity":"Positive","defaultness":"Final","defaultness_span":null,"constness":"NotConst","generics":{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":97,"col":11},"hi":{"line":97,"col":11},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":97,"col":4},"hi":{"line":97,"col":4},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"of_trait":null,"self_ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]}}},"items":[{"ident":["new",{"lo":{"line":100,"col":11},"hi":{"line":100,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":2},{"data":{"ValueNs":"new"},"disambiguator":0}],"index":[0,238]},"generics":{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":100,"col":38},"hi":{"line":100,"col":38},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":100,"col":14},"hi":{"line":100,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"kind":{"Fn":{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"params":[{"pat":{"ty":{"Int":"I32"},"span":{"lo":{"line":100,"col":15},"hi":{"line":100,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Binding":{"mutability":false,"mode":"ByValue","var":{"name":"x","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":2},{"data":{"ValueNs":"new"},"disambiguator":0}],"index":[0,238]},"local_id":2}},"ty":{"Int":"I32"},"subpattern":null,"is_primary":true}},"hir_id":null,"attributes":[]},"ty":{"Int":"I32"},"ty_span":{"lo":{"line":100,"col":18},"hi":{"line":100,"col":21},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"self_kind":null,"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":2},{"data":{"ValueNs":"new"},"disambiguator":0}],"index":[0,238]},"local_id":1},"attributes":[]}],"ret":{"Adt":{"generic_args":[{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]}}}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"option"},"disambiguator":0},{"data":{"TypeNs":"Option"},"disambiguator":0}],"index":[1,41362]}}},"body":{"ty":{"Adt":{"generic_args":[{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]}}}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"option"},"disambiguator":0},{"data":{"TypeNs":"Option"},"disambiguator":0}],"index":[1,41362]}}},"span":{"lo":{"line":100,"col":39},"hi":{"line":107,"col":5},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Block":{"targeted_by_break":false,"region_scope":{"id":35,"data":"Node"},"opt_destruction_scope":null,"span":{"lo":{"line":100,"col":39},"hi":{"line":107,"col":5},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"stmts":[],"expr":{"ty":{"Adt":{"generic_args":[{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]}}}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"option"},"disambiguator":0},{"data":{"TypeNs":"Option"},"disambiguator":0}],"index":[1,41362]}}},"span":{"lo":{"line":101,"col":8},"hi":{"line":106,"col":9},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"If":{"if_then_scope":{"id":30,"data":"IfThen"},"cond":{"ty":"Bool","span":{"lo":{"line":101,"col":11},"hi":{"line":101,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Use":{"source":{"ty":"Bool","span":{"lo":{"line":101,"col":11},"hi":{"line":101,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Binary":{"op":"Lt","lhs":{"ty":{"Int":"I32"},"span":{"lo":{"line":101,"col":11},"hi":{"line":101,"col":12},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"VarRef":{"id":{"name":"x","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":2},{"data":{"ValueNs":"new"},"disambiguator":0}],"index":[0,238]},"local_id":2}}}},"hir_id":[238,5],"attributes":[]},"rhs":{"ty":{"Int":"I32"},"span":{"lo":{"line":101,"col":15},"hi":{"line":101,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Literal":{"lit":{"node":{"Int":[0,"Unsuffixed"]},"span":{"lo":{"line":101,"col":15},"hi":{"line":101,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"neg":false}},"hir_id":[238,7],"attributes":[]}}},"hir_id":[238,4],"attributes":[]}}},"hir_id":[238,8],"attributes":[]},"then":{"ty":{"Adt":{"generic_args":[{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]}}}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"option"},"disambiguator":0},{"data":{"TypeNs":"Option"},"disambiguator":0}],"index":[1,41362]}}},"span":{"lo":{"line":101,"col":17},"hi":{"line":104,"col":9},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Block":{"targeted_by_break":false,"region_scope":{"id":29,"data":"Node"},"opt_destruction_scope":null,"span":{"lo":{"line":101,"col":17},"hi":{"line":104,"col":9},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"stmts":[{"kind":{"Let":{"remainder_scope":{"id":29,"data":{"Remainder":0}},"init_scope":{"id":9,"data":"Node"},"pattern":{"ty":{"Adt":{"generic_args":[],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"num"},"disambiguator":0},{"data":{"TypeNs":"nonzero"},"disambiguator":0},{"data":{"TypeNs":"NonZeroI32"},"disambiguator":0}],"index":[1,22484]}}},"span":{"lo":{"line":102,"col":16},"hi":{"line":102,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Binding":{"mutability":false,"mode":"ByValue","var":{"name":"error_code","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":2},{"data":{"ValueNs":"new"},"disambiguator":0}],"index":[0,238]},"local_id":20}},"ty":{"Adt":{"generic_args":[],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"num"},"disambiguator":0},{"data":{"TypeNs":"nonzero"},"disambiguator":0},{"data":{"TypeNs":"NonZeroI32"},"disambiguator":0}],"index":[1,22484]}}},"subpattern":null,"is_primary":true}},"hir_id":null,"attributes":[]},"initializer":{"ty":{"Adt":{"generic_args":[],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"num"},"disambiguator":0},{"data":{"TypeNs":"nonzero"},"disambiguator":0},{"data":{"TypeNs":"NonZeroI32"},"disambiguator":0}],"index":[1,22484]}}},"span":{"lo":{"line":102,"col":29},"hi":{"line":102,"col":68},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Block":{"targeted_by_break":false,"region_scope":{"id":18,"data":"Node"},"opt_destruction_scope":null,"span":{"lo":{"line":102,"col":29},"hi":{"line":102,"col":68},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"stmts":[],"expr":{"ty":{"Adt":{"generic_args":[],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"num"},"disambiguator":0},{"data":{"TypeNs":"nonzero"},"disambiguator":0},{"data":{"TypeNs":"NonZeroI32"},"disambiguator":0}],"index":[1,22484]}}},"span":{"lo":{"line":102,"col":38},"hi":{"line":102,"col":66},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Call":{"ty":{"Arrow":{"value":{"inputs":[{"Int":"I32"}],"output":{"Adt":{"generic_args":[],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"num"},"disambiguator":0},{"data":{"TypeNs":"nonzero"},"disambiguator":0},{"data":{"TypeNs":"NonZeroI32"},"disambiguator":0}],"index":[1,22484]}}},"c_variadic":false,"unsafety":"Unsafe","abi":{"Abi":{"todo":"Rust"}}},"bound_vars":[]}},"fun":{"ty":{"Arrow":{"value":{"inputs":[{"Int":"I32"}],"output":{"Adt":{"generic_args":[],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"num"},"disambiguator":0},{"data":{"TypeNs":"nonzero"},"disambiguator":0},{"data":{"TypeNs":"NonZeroI32"},"disambiguator":0}],"index":[1,22484]}}},"c_variadic":false,"unsafety":"Unsafe","abi":{"Abi":{"todo":"Rust"}}},"bound_vars":[]}},"span":{"lo":{"line":102,"col":38},"hi":{"line":102,"col":63},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"GlobalName":{"id":{"krate":"core","path":[{"data":{"TypeNs":"num"},"disambiguator":0},{"data":{"TypeNs":"nonzero"},"disambiguator":0},{"data":"Impl","disambiguator":56},{"data":{"ValueNs":"new_unchecked"},"disambiguator":0}],"index":[1,22145]}}},"hir_id":null,"attributes":[]},"args":[{"ty":{"Int":"I32"},"span":{"lo":{"line":102,"col":64},"hi":{"line":102,"col":65},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"VarRef":{"id":{"name":"x","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":2},{"data":{"ValueNs":"new"},"disambiguator":0}],"index":[0,238]},"local_id":2}}}},"hir_id":[238,16],"attributes":[]}],"from_hir_call":true,"fn_span":{"lo":{"line":102,"col":38},"hi":{"line":102,"col":66},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"impl":null}},"hir_id":[238,11],"attributes":[]},"safety_mode":"ExplicitUnsafe"}},"hir_id":[238,10],"attributes":[]},"else_block":null,"lint_level":{"Explicit":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":2},{"data":{"ValueNs":"new"},"disambiguator":0}],"index":[0,238]},"local_id":19}},"attributes":[]}},"opt_destruction_scope":{"id":9,"data":"Destruction"}}],"expr":{"ty":{"Adt":{"generic_args":[{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]}}}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"option"},"disambiguator":0},{"data":{"TypeNs":"Option"},"disambiguator":0}],"index":[1,41362]}}},"span":{"lo":{"line":103,"col":12},"hi":{"line":103,"col":39},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Adt":{"info":{"type_namespace":{"krate":"core","path":[{"data":{"TypeNs":"option"},"disambiguator":0}],"index":[1,41362]},"typ":{"krate":"core","path":[{"data":{"TypeNs":"option"},"disambiguator":0},{"data":{"TypeNs":"Option"},"disambiguator":0}],"index":[1,41362]},"variant":{"krate":"core","path":[{"data":{"TypeNs":"option"},"disambiguator":0},{"data":{"TypeNs":"Option"},"disambiguator":0},{"data":{"TypeNs":"Some"},"disambiguator":0}],"index":[1,41366]},"variant_index":1,"typ_is_record":false,"variant_is_record":false,"typ_is_struct":false},"user_ty":null,"fields":[{"field":{"krate":"core","path":[{"data":{"TypeNs":"option"},"disambiguator":0},{"data":{"TypeNs":"Option"},"disambiguator":0},{"data":{"TypeNs":"Some"},"disambiguator":0},{"data":{"ValueNs":"0"},"disambiguator":0}],"index":[1,41368]},"value":{"ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]}}},"span":{"lo":{"line":103,"col":17},"hi":{"line":103,"col":38},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Adt":{"info":{"type_namespace":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0}],"index":[0,221]},"typ":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]},"variant":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]},"variant_index":0,"typ_is_record":true,"variant_is_record":true,"typ_is_struct":true},"user_ty":null,"fields":[{"field":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0},{"data":{"ValueNs":"error_code"},"disambiguator":0}],"index":[0,223]},"value":{"ty":{"Adt":{"generic_args":[],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"num"},"disambiguator":0},{"data":{"TypeNs":"nonzero"},"disambiguator":0},{"data":{"TypeNs":"NonZeroI32"},"disambiguator":0}],"index":[1,22484]}}},"span":{"lo":{"line":103,"col":26},"hi":{"line":103,"col":36},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"VarRef":{"id":{"name":"error_code","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":2},{"data":{"ValueNs":"new"},"disambiguator":0}],"index":[0,238]},"local_id":20}}}},"hir_id":[238,27],"attributes":[]}}],"base":null}},"hir_id":[238,24],"attributes":[]}}],"base":null}},"hir_id":[238,21],"attributes":[]},"safety_mode":"Safe"}},"hir_id":[238,30],"attributes":[]},"else_opt":{"ty":{"Adt":{"generic_args":[{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]}}}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"option"},"disambiguator":0},{"data":{"TypeNs":"Option"},"disambiguator":0}],"index":[1,41362]}}},"span":{"lo":{"line":104,"col":15},"hi":{"line":106,"col":9},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Block":{"targeted_by_break":false,"region_scope":{"id":34,"data":"Node"},"opt_destruction_scope":null,"span":{"lo":{"line":104,"col":15},"hi":{"line":106,"col":9},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"stmts":[],"expr":{"ty":{"Adt":{"generic_args":[{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]}}}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"option"},"disambiguator":0},{"data":{"TypeNs":"Option"},"disambiguator":0}],"index":[1,41362]}}},"span":{"lo":{"line":105,"col":12},"hi":{"line":105,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Adt":{"info":{"type_namespace":{"krate":"core","path":[{"data":{"TypeNs":"option"},"disambiguator":0}],"index":[1,41362]},"typ":{"krate":"core","path":[{"data":{"TypeNs":"option"},"disambiguator":0},{"data":{"TypeNs":"Option"},"disambiguator":0}],"index":[1,41362]},"variant":{"krate":"core","path":[{"data":{"TypeNs":"option"},"disambiguator":0},{"data":{"TypeNs":"Option"},"disambiguator":0},{"data":{"TypeNs":"None"},"disambiguator":0}],"index":[1,41364]},"variant_index":0,"typ_is_record":false,"variant_is_record":false,"typ_is_struct":false},"user_ty":null,"fields":[],"base":null}},"hir_id":[238,32],"attributes":[]},"safety_mode":"Safe"}},"hir_id":[238,31],"attributes":[]}}},"hir_id":[238,3],"attributes":[]},"safety_mode":"Safe"}},"hir_id":[238,36],"attributes":[]},"sig_span":{"lo":{"line":100,"col":4},"hi":{"line":100,"col":38},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}},"defaultness":"Final","span":{"lo":{"line":100,"col":4},"hi":{"line":107,"col":5},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":100,"col":4},"hi":{"line":100,"col":7},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"_hax::skip","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:99:5: 99:12 (#46), close: concordium/src/concordium_types.rs:99:5: 99:12 (#46) }"}},"delim":"Parenthesis","tokens":""}},"tokens":null},"tokens":null}},"id":441,"style":"Outer","span":{"lo":{"line":99,"col":4},"hi":{"line":99,"col":11},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," This returns `None` for all values >= 0 and `Some` otherwise."]},"id":440,"style":"Outer","span":{"lo":{"line":98,"col":4},"hi":{"line":98,"col":69},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}}]}},"attributes":{"attributes":[],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"MacroNs":"bail"},"disambiguator":0}],"index":[0,71]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"MacroNs":"bail"},"disambiguator":0}],"index":[0,71]},"span":{"lo":{"line":118,"col":0},"hi":{"line":127,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":118,"col":0},"hi":{"line":127,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Macro":[{"body":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:118:19: 118:20 (#0), close: concordium/src/concordium_types.rs:127:1: 127:2 (#0) }"}},"delim":"Brace","tokens":"() => { { return Err(Default :: default()) ; } } ; ($arg : expr) =>\n{ { return Err($arg) ; } } ;"},"macro_rules":true},"Bang"]},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," The `bail` macro can be used for cleaner error handling. If the function has"]},"id":100,"style":"Outer","span":{"lo":{"line":112,"col":0},"hi":{"line":112,"col":80},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," result type `Result` invoking `bail` will terminate execution early with an"]},"id":101,"style":"Outer","span":{"lo":{"line":113,"col":0},"hi":{"line":113,"col":79},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," error."]},"id":102,"style":"Outer","span":{"lo":{"line":114,"col":0},"hi":{"line":114,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," If an argument is supplied, this will be used as the error, otherwise it"]},"id":103,"style":"Outer","span":{"lo":{"line":115,"col":0},"hi":{"line":115,"col":76},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," requires the type `E` in `Result<_, E>` to implement the `Default` trait."]},"id":104,"style":"Outer","span":{"lo":{"line":116,"col":0},"hi":{"line":116,"col":77},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"macro_export","args":"Empty","tokens":null},"tokens":null}},"id":105,"style":"Outer","span":{"lo":{"line":117,"col":0},"hi":{"line":117,"col":15},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"MacroNs":"ensure"},"disambiguator":0}],"index":[0,72]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"MacroNs":"ensure"},"disambiguator":0}],"index":[0,72]},"span":{"lo":{"line":133,"col":0},"hi":{"line":144,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":133,"col":0},"hi":{"line":144,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Macro":[{"body":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:133:21: 133:22 (#0), close: concordium/src/concordium_types.rs:144:1: 144:2 (#0) }"}},"delim":"Brace","tokens":"($p : expr) => { if! $p { $crate :: bail! () ; } } ; ($p : expr, $arg : expr)\n=> { { if! $p { $crate :: bail! ($arg) ; } } } ;"},"macro_rules":true},"Bang"]},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," The `ensure` macro can be used for cleaner error handling. It is analogous"]},"id":106,"style":"Outer","span":{"lo":{"line":129,"col":0},"hi":{"line":129,"col":78},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," to `assert`, but instead of panicking it uses `bail` to terminate execution"]},"id":107,"style":"Outer","span":{"lo":{"line":130,"col":0},"hi":{"line":130,"col":79},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," of the function early."]},"id":108,"style":"Outer","span":{"lo":{"line":131,"col":0},"hi":{"line":131,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"macro_export","args":"Empty","tokens":null},"tokens":null}},"id":109,"style":"Outer","span":{"lo":{"line":132,"col":0},"hi":{"line":132,"col":15},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"MacroNs":"ensure_eq"},"disambiguator":0}],"index":[0,73]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"MacroNs":"ensure_eq"},"disambiguator":0}],"index":[0,73]},"span":{"lo":{"line":149,"col":0},"hi":{"line":156,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":149,"col":0},"hi":{"line":156,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Macro":[{"body":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:149:24: 149:25 (#0), close: concordium/src/concordium_types.rs:156:1: 156:2 (#0) }"}},"delim":"Brace","tokens":"($l : expr, $r : expr) => { $crate :: ensure! ($l == $r) } ;\n($l : expr, $r : expr, $arg : expr) => { $crate :: ensure! ($l == $r, $arg) }\n;"},"macro_rules":true},"Bang"]},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," ## Variants of `ensure` for ease of use in certain contexts."]},"id":110,"style":"Outer","span":{"lo":{"line":146,"col":0},"hi":{"line":146,"col":64},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," Ensure the first two arguments are equal, using `bail` otherwise."]},"id":111,"style":"Outer","span":{"lo":{"line":147,"col":0},"hi":{"line":147,"col":69},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"macro_export","args":"Empty","tokens":null},"tokens":null}},"id":112,"style":"Outer","span":{"lo":{"line":148,"col":0},"hi":{"line":148,"col":15},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"MacroNs":"ensure_ne"},"disambiguator":0}],"index":[0,74]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"MacroNs":"ensure_ne"},"disambiguator":0}],"index":[0,74]},"span":{"lo":{"line":160,"col":0},"hi":{"line":167,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":160,"col":0},"hi":{"line":167,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Macro":[{"body":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:160:24: 160:25 (#0), close: concordium/src/concordium_types.rs:167:1: 167:2 (#0) }"}},"delim":"Brace","tokens":"($l : expr, $r : expr) => { $crate :: ensure! ($l != $r) } ;\n($l : expr, $r : expr, $arg : expr) => { $crate :: ensure! ($l != $r, $arg) }\n;"},"macro_rules":true},"Bang"]},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"macro_export","args":"Empty","tokens":null},"tokens":null}},"id":113,"style":"Outer","span":{"lo":{"line":158,"col":0},"hi":{"line":158,"col":15},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," Ensure the first two arguments are __not__ equal, using `bail` otherwise."]},"id":114,"style":"Outer","span":{"lo":{"line":159,"col":0},"hi":{"line":159,"col":77},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"MacroNs":"fail"},"disambiguator":0}],"index":[0,75]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"MacroNs":"fail"},"disambiguator":0}],"index":[0,75]},"span":{"lo":{"line":197,"col":0},"hi":{"line":211,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":197,"col":0},"hi":{"line":211,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Macro":[{"body":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:197:19: 197:20 (#0), close: concordium/src/concordium_types.rs:211:1: 211:2 (#0) }"}},"delim":"Brace","tokens":"() =>\n{\n {\n $crate :: test_infrastructure ::\n report_error(\"\", file! (), line! (), column! ()) ; panic! ()\n }\n} ; ($($arg : tt), +) =>\n{\n {\n let msg = & $crate :: alloc :: format! ($($arg), +) ; $crate ::\n test_infrastructure ::\n report_error(& msg, file! (), line! (), column! ()) ; panic!\n (\"{}\", msg)\n }\n} ;"},"macro_rules":true},"Bang"]},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," The `fail` macro is used for testing as a substitute for the panic macro."]},"id":120,"style":"Outer","span":{"lo":{"line":192,"col":0},"hi":{"line":192,"col":77},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," It reports back error information to the host."]},"id":121,"style":"Outer","span":{"lo":{"line":193,"col":0},"hi":{"line":193,"col":50},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," Used only in testing."]},"id":122,"style":"Outer","span":{"lo":{"line":194,"col":0},"hi":{"line":194,"col":25},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"cfg","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:195:6: 195:7 (#0), close: concordium/src/concordium_types.rs:195:27: 195:28 (#0) }"}},"delim":"Parenthesis","tokens":"not(feature = \"std\")"}},"tokens":null},"tokens":null}},"id":123,"style":"Outer","span":{"lo":{"line":195,"col":0},"hi":{"line":195,"col":28},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"macro_export","args":"Empty","tokens":null},"tokens":null}},"id":124,"style":"Outer","span":{"lo":{"line":196,"col":0},"hi":{"line":196,"col":15},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"MacroNs":"claim"},"disambiguator":0}],"index":[0,76]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"MacroNs":"claim"},"disambiguator":0}],"index":[0,76]},"span":{"lo":{"line":217,"col":0},"hi":{"line":233,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":217,"col":0},"hi":{"line":233,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Macro":[{"body":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:217:20: 217:21 (#0), close: concordium/src/concordium_types.rs:233:1: 233:2 (#0) }"}},"delim":"Brace","tokens":"($cond : expr) => { if! $cond { $crate :: fail! () } } ; ($cond : expr,) =>\n{ if! $cond { $crate :: fail! () } } ; ($cond : expr, $($arg : tt), +) =>\n{ if! $cond { $crate :: fail! ($($arg), +) } } ;"},"macro_rules":true},"Bang"]},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," The `claim` macro is used for testing as a substitute for the assert macro."]},"id":125,"style":"Outer","span":{"lo":{"line":213,"col":0},"hi":{"line":213,"col":79},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," It checks the condition and if false it reports back an error."]},"id":126,"style":"Outer","span":{"lo":{"line":214,"col":0},"hi":{"line":214,"col":66},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," Used only in testing."]},"id":127,"style":"Outer","span":{"lo":{"line":215,"col":0},"hi":{"line":215,"col":25},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"macro_export","args":"Empty","tokens":null},"tokens":null}},"id":128,"style":"Outer","span":{"lo":{"line":216,"col":0},"hi":{"line":216,"col":15},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"MacroNs":"claim_eq"},"disambiguator":0}],"index":[0,77]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"MacroNs":"claim_eq"},"disambiguator":0}],"index":[0,77]},"span":{"lo":{"line":238,"col":0},"hi":{"line":248,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":238,"col":0},"hi":{"line":248,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Macro":[{"body":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:238:23: 238:24 (#0), close: concordium/src/concordium_types.rs:248:1: 248:2 (#0) }"}},"delim":"Brace","tokens":"($left : expr, $right : expr) =>\n{\n $crate :: claim!\n ($left == $right, \"left and right are not equal\\nleft: {:?}\\nright: {:?}\",\n $left, $right)\n} ; ($left : expr, $right : expr,) => { $crate :: claim_eq! ($left, $right) }\n; ($left : expr, $right : expr, $($arg : tt), +) =>\n{ $crate :: claim! ($left == $right, $($arg), +) } ;"},"macro_rules":true},"Bang"]},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Ensure the first two arguments are equal, just like `assert_eq!`, otherwise"]},"id":129,"style":"Outer","span":{"lo":{"line":235,"col":0},"hi":{"line":235,"col":79},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," reports an error. Used only in testing."]},"id":130,"style":"Outer","span":{"lo":{"line":236,"col":0},"hi":{"line":236,"col":43},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"macro_export","args":"Empty","tokens":null},"tokens":null}},"id":131,"style":"Outer","span":{"lo":{"line":237,"col":0},"hi":{"line":237,"col":15},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"MacroNs":"claim_ne"},"disambiguator":0}],"index":[0,78]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"MacroNs":"claim_ne"},"disambiguator":0}],"index":[0,78]},"span":{"lo":{"line":254,"col":0},"hi":{"line":264,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":254,"col":0},"hi":{"line":264,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Macro":[{"body":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:254:23: 254:24 (#0), close: concordium/src/concordium_types.rs:264:1: 264:2 (#0) }"}},"delim":"Brace","tokens":"($left : expr, $right : expr) => { $crate :: claim! ($left != $right) } ;\n($left : expr, $right : expr,) => { $crate :: claim! ($left != $right) } ;\n($left : expr, $right : expr, $($arg : tt), +) =>\n{ $crate :: claim! ($left != $right, $($arg), +) } ;"},"macro_rules":true},"Bang"]},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Ensure the first two arguments are *not* equal, just like `assert_ne!`,"]},"id":132,"style":"Outer","span":{"lo":{"line":250,"col":0},"hi":{"line":250,"col":75},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," otherwise reports an error."]},"id":133,"style":"Outer","span":{"lo":{"line":251,"col":0},"hi":{"line":251,"col":31},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," Used only in testing."]},"id":134,"style":"Outer","span":{"lo":{"line":252,"col":0},"hi":{"line":252,"col":25},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"macro_export","args":"Empty","tokens":null},"tokens":null}},"id":135,"style":"Outer","span":{"lo":{"line":253,"col":0},"hi":{"line":253,"col":15},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ReceiveResult"},"disambiguator":0}],"index":[0,79]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ReceiveResult"},"disambiguator":0}],"index":[0,79]},"span":{"lo":{"line":290,"col":0},"hi":{"line":290,"col":46},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":290,"col":0},"hi":{"line":290,"col":46},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"TyAlias":[{"Adt":{"generic_args":[{"Type":{"Param":{"index":0,"name":"A"}}},{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]}}}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"result"},"disambiguator":0},{"data":{"TypeNs":"Result"},"disambiguator":0}],"index":[1,41506]}}},{"params":[{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ReceiveResult"},"disambiguator":0}],"index":[0,79]},"local_id":1},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ReceiveResult"},"disambiguator":0},{"data":{"TypeNs":"A"},"disambiguator":0}],"index":[0,80]},"name":{"Plain":{"name":"A","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ReceiveResult"},"disambiguator":0}],"index":[0,79]},"local_id":1}}},"span":{"lo":{"line":290,"col":23},"hi":{"line":290,"col":24},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"pure_wrt_drop":false,"kind":{"Type":{"default":null,"synthetic":false}},"colon_span":null,"attributes":[]}],"predicates":[],"bounds":[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"Sized"},"disambiguator":0}],"index":[1,2689]},"generic_args":[{"Type":{"Param":{"index":0,"name":"A"}}}]},"is_const":false,"is_positive":true}},"id":3652190691640089114}}],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":290,"col":25},"hi":{"line":290,"col":25},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":290,"col":22},"hi":{"line":290,"col":25},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}]},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," The expected return type of the receive method of a smart contract."]},"id":136,"style":"Outer","span":{"lo":{"line":266,"col":0},"hi":{"line":266,"col":71},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line",""]},"id":137,"style":"Outer","span":{"lo":{"line":267,"col":0},"hi":{"line":267,"col":3},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," Optionally, to define a custom type for error instead of using"]},"id":138,"style":"Outer","span":{"lo":{"line":268,"col":0},"hi":{"line":268,"col":66},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," Reject, allowing to track the reason for rejection, *but only in unit"]},"id":139,"style":"Outer","span":{"lo":{"line":269,"col":0},"hi":{"line":269,"col":73},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," tests*."]},"id":140,"style":"Outer","span":{"lo":{"line":270,"col":0},"hi":{"line":270,"col":11},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line",""]},"id":141,"style":"Outer","span":{"lo":{"line":271,"col":0},"hi":{"line":271,"col":3},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," See also the documentation for [bail!](macro.bail.html) for how to use"]},"id":142,"style":"Outer","span":{"lo":{"line":272,"col":0},"hi":{"line":272,"col":74},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," custom error types."]},"id":143,"style":"Outer","span":{"lo":{"line":273,"col":0},"hi":{"line":273,"col":23},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line",""]},"id":144,"style":"Outer","span":{"lo":{"line":274,"col":0},"hi":{"line":274,"col":3},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," # Example"]},"id":145,"style":"Outer","span":{"lo":{"line":275,"col":0},"hi":{"line":275,"col":13},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," Defining a custom error type"]},"id":146,"style":"Outer","span":{"lo":{"line":276,"col":0},"hi":{"line":276,"col":32},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," // ```rust"]},"id":147,"style":"Outer","span":{"lo":{"line":277,"col":0},"hi":{"line":277,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," // enum MyCustomError {"]},"id":148,"style":"Outer","span":{"lo":{"line":278,"col":0},"hi":{"line":278,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," // SomeError"]},"id":149,"style":"Outer","span":{"lo":{"line":279,"col":0},"hi":{"line":279,"col":20},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," // }"]},"id":150,"style":"Outer","span":{"lo":{"line":280,"col":0},"hi":{"line":280,"col":8},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," // "]},"id":151,"style":"Outer","span":{"lo":{"line":281,"col":0},"hi":{"line":281,"col":7},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," // #[receive(contract = \"mycontract\", name = \"receive\")]"]},"id":152,"style":"Outer","span":{"lo":{"line":282,"col":0},"hi":{"line":282,"col":60},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," // fn contract_receive("]},"id":153,"style":"Outer","span":{"lo":{"line":283,"col":0},"hi":{"line":283,"col":78},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," // ctx: &R,"]},"id":154,"style":"Outer","span":{"lo":{"line":284,"col":0},"hi":{"line":284,"col":19},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," // receive_amount: Amount,"]},"id":155,"style":"Outer","span":{"lo":{"line":285,"col":0},"hi":{"line":285,"col":34},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," // logger: &mut L,"]},"id":156,"style":"Outer","span":{"lo":{"line":286,"col":0},"hi":{"line":286,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," // state: &mut State,"]},"id":157,"style":"Outer","span":{"lo":{"line":287,"col":0},"hi":{"line":287,"col":29},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," // ) -> Result { ... }"]},"id":158,"style":"Outer","span":{"lo":{"line":288,"col":0},"hi":{"line":288,"col":44},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," // ```"]},"id":159,"style":"Outer","span":{"lo":{"line":289,"col":0},"hi":{"line":289,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"InitResult"},"disambiguator":0}],"index":[0,81]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"InitResult"},"disambiguator":0}],"index":[0,81]},"span":{"lo":{"line":315,"col":0},"hi":{"line":315,"col":43},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":315,"col":0},"hi":{"line":315,"col":43},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"TyAlias":[{"Adt":{"generic_args":[{"Type":{"Param":{"index":0,"name":"S"}}},{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"Reject"},"disambiguator":0}],"index":[0,221]}}}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"result"},"disambiguator":0},{"data":{"TypeNs":"Result"},"disambiguator":0}],"index":[1,41506]}}},{"params":[{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"InitResult"},"disambiguator":0}],"index":[0,81]},"local_id":1},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"InitResult"},"disambiguator":0},{"data":{"TypeNs":"S"},"disambiguator":0}],"index":[0,82]},"name":{"Plain":{"name":"S","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"InitResult"},"disambiguator":0}],"index":[0,81]},"local_id":1}}},"span":{"lo":{"line":315,"col":20},"hi":{"line":315,"col":21},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"pure_wrt_drop":false,"kind":{"Type":{"default":null,"synthetic":false}},"colon_span":null,"attributes":[]}],"predicates":[],"bounds":[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"Sized"},"disambiguator":0}],"index":[1,2689]},"generic_args":[{"Type":{"Param":{"index":0,"name":"S"}}}]},"is_const":false,"is_positive":true}},"id":676887403273334043}}],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":315,"col":22},"hi":{"line":315,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":315,"col":19},"hi":{"line":315,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}]},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," The expected return type of the init method of the smart contract,"]},"id":160,"style":"Outer","span":{"lo":{"line":292,"col":0},"hi":{"line":292,"col":70},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," parametrized by the state type of the smart contract."]},"id":161,"style":"Outer","span":{"lo":{"line":293,"col":0},"hi":{"line":293,"col":57},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line",""]},"id":162,"style":"Outer","span":{"lo":{"line":294,"col":0},"hi":{"line":294,"col":3},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," Optionally, to define a custom type for error instead of using Reject,"]},"id":163,"style":"Outer","span":{"lo":{"line":295,"col":0},"hi":{"line":295,"col":74},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," allowing the track the reason for rejection, *but only in unit tests*."]},"id":164,"style":"Outer","span":{"lo":{"line":296,"col":0},"hi":{"line":296,"col":74},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line",""]},"id":165,"style":"Outer","span":{"lo":{"line":297,"col":0},"hi":{"line":297,"col":3},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," See also the documentation for [bail!](macro.bail.html) for how to use"]},"id":166,"style":"Outer","span":{"lo":{"line":298,"col":0},"hi":{"line":298,"col":74},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," custom error types."]},"id":167,"style":"Outer","span":{"lo":{"line":299,"col":0},"hi":{"line":299,"col":23},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line",""]},"id":168,"style":"Outer","span":{"lo":{"line":300,"col":0},"hi":{"line":300,"col":3},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," # Example"]},"id":169,"style":"Outer","span":{"lo":{"line":301,"col":0},"hi":{"line":301,"col":13},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," Defining a custom error type"]},"id":170,"style":"Outer","span":{"lo":{"line":302,"col":0},"hi":{"line":302,"col":32},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," // ```rust"]},"id":171,"style":"Outer","span":{"lo":{"line":303,"col":0},"hi":{"line":303,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," // enum MyCustomError {"]},"id":172,"style":"Outer","span":{"lo":{"line":304,"col":0},"hi":{"line":304,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," // SomeError"]},"id":173,"style":"Outer","span":{"lo":{"line":305,"col":0},"hi":{"line":305,"col":20},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," // }"]},"id":174,"style":"Outer","span":{"lo":{"line":306,"col":0},"hi":{"line":306,"col":8},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," // "]},"id":175,"style":"Outer","span":{"lo":{"line":307,"col":0},"hi":{"line":307,"col":7},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," // #[init(contract = \"mycontract\")]"]},"id":176,"style":"Outer","span":{"lo":{"line":308,"col":0},"hi":{"line":308,"col":39},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," // fn contract_init("]},"id":177,"style":"Outer","span":{"lo":{"line":309,"col":0},"hi":{"line":309,"col":75},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," // ctx: &R,"]},"id":178,"style":"Outer","span":{"lo":{"line":310,"col":0},"hi":{"line":310,"col":19},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," // receive_amount: Amount,"]},"id":179,"style":"Outer","span":{"lo":{"line":311,"col":0},"hi":{"line":311,"col":34},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," // logger: &mut L,"]},"id":180,"style":"Outer","span":{"lo":{"line":312,"col":0},"hi":{"line":312,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," // ) -> Result { ... }"]},"id":181,"style":"Outer","span":{"lo":{"line":313,"col":0},"hi":{"line":313,"col":48},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," // ```"]},"id":182,"style":"Outer","span":{"lo":{"line":314,"col":0},"hi":{"line":314,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"sealed"},"disambiguator":0}],"index":[0,83]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"sealed"},"disambiguator":0}],"index":[0,83]},"span":{"lo":{"line":317,"col":0},"hi":{"line":325,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":317,"col":0},"hi":{"line":325,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Mod":[{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"sealed"},"disambiguator":0},{"data":"Use","disambiguator":0}],"index":[0,84]},"span":{"lo":{"line":318,"col":4},"hi":{"line":318,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":318,"col":4},"hi":{"line":318,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Use":[{"span":{"lo":{"line":318,"col":8},"hi":{"line":318,"col":13},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"res":[{"Def":[{"DefKind":{"todo":"Mod"}},{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0}],"index":[0,64]}]}],"segments":[{"ident":["super",{"lo":{"line":318,"col":8},"hi":{"line":318,"col":13},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}],"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"sealed"},"disambiguator":0},{"data":"Use","disambiguator":0}],"index":[0,84]},"local_id":1},"res":"Err","args":null,"infer_args":false}],"rename":null},"Glob"]},"attributes":{"attributes":[],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"sealed"},"disambiguator":0},{"data":{"TypeNs":"ContextType"},"disambiguator":0}],"index":[0,85]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"sealed"},"disambiguator":0},{"data":{"TypeNs":"ContextType"},"disambiguator":0}],"index":[0,85]},"span":{"lo":{"line":322,"col":4},"hi":{"line":322,"col":28},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":322,"col":4},"hi":{"line":322,"col":28},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Trait":["No","Normal",{"params":[],"predicates":[],"bounds":[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"sealed"},"disambiguator":0},{"data":{"TypeNs":"ContextType"},"disambiguator":0}],"index":[0,85]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}}]},"is_const":false,"is_positive":true}},"id":4557742319775345286}}],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":322,"col":25},"hi":{"line":322,"col":25},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":322,"col":25},"hi":{"line":322,"col":25},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"sealed"},"disambiguator":0},{"data":{"TypeNs":"ContextType"},"disambiguator":0}],"index":[0,85]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}}]},"is_const":false,"is_positive":true}},"id":4557742319775345286}}],[]]},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Marker trait intended to indicate which context type we have."]},"id":183,"style":"Outer","span":{"lo":{"line":319,"col":4},"hi":{"line":319,"col":69},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," This is deliberately a sealed trait, so that it is only implementable"]},"id":184,"style":"Outer","span":{"lo":{"line":320,"col":4},"hi":{"line":320,"col":77},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," by types in this crate."]},"id":185,"style":"Outer","span":{"lo":{"line":321,"col":4},"hi":{"line":321,"col":31},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"sealed"},"disambiguator":0},{"data":"Impl","disambiguator":0}],"index":[0,86]},"span":{"lo":{"line":323,"col":4},"hi":{"line":323,"col":45},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":323,"col":4},"hi":{"line":323,"col":45},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Impl":{"unsafety":"Normal","polarity":"Positive","defaultness":"Final","defaultness_span":null,"constness":"NotConst","generics":{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":323,"col":42},"hi":{"line":323,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":323,"col":8},"hi":{"line":323,"col":8},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"of_trait":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"sealed"},"disambiguator":0},{"data":{"TypeNs":"ContextType"},"disambiguator":0}],"index":[0,85]},"generic_args":[{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"InitContextExtern"},"disambiguator":0}],"index":[0,230]}}}}]},"self_ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"InitContextExtern"},"disambiguator":0}],"index":[0,230]}}},"items":[]}},"attributes":{"attributes":[],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"sealed"},"disambiguator":0},{"data":"Impl","disambiguator":1}],"index":[0,87]},"span":{"lo":{"line":324,"col":4},"hi":{"line":324,"col":48},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":324,"col":4},"hi":{"line":324,"col":48},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Impl":{"unsafety":"Normal","polarity":"Positive","defaultness":"Final","defaultness_span":null,"constness":"NotConst","generics":{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":324,"col":45},"hi":{"line":324,"col":45},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":324,"col":8},"hi":{"line":324,"col":8},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"of_trait":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"sealed"},"disambiguator":0},{"data":{"TypeNs":"ContextType"},"disambiguator":0}],"index":[0,85]},"generic_args":[{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ReceiveContextExtern"},"disambiguator":0}],"index":[0,234]}}}}]},"self_ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ReceiveContextExtern"},"disambiguator":0}],"index":[0,234]}}},"items":[]}},"attributes":{"attributes":[],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]}]},"attributes":{"attributes":[],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"sealed"},"disambiguator":0},{"data":"Use","disambiguator":0}],"index":[0,84]},"span":{"lo":{"line":318,"col":4},"hi":{"line":318,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":318,"col":4},"hi":{"line":318,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Use":[{"span":{"lo":{"line":318,"col":8},"hi":{"line":318,"col":13},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"res":[{"Def":[{"DefKind":{"todo":"Mod"}},{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0}],"index":[0,64]}]}],"segments":[{"ident":["super",{"lo":{"line":318,"col":8},"hi":{"line":318,"col":13},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}],"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"sealed"},"disambiguator":0},{"data":"Use","disambiguator":0}],"index":[0,84]},"local_id":1},"res":"Err","args":null,"infer_args":false}],"rename":null},"Glob"]},"attributes":{"attributes":[],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"sealed"},"disambiguator":0},{"data":{"TypeNs":"ContextType"},"disambiguator":0}],"index":[0,85]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"sealed"},"disambiguator":0},{"data":{"TypeNs":"ContextType"},"disambiguator":0}],"index":[0,85]},"span":{"lo":{"line":322,"col":4},"hi":{"line":322,"col":28},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":322,"col":4},"hi":{"line":322,"col":28},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Trait":["No","Normal",{"params":[],"predicates":[],"bounds":[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"sealed"},"disambiguator":0},{"data":{"TypeNs":"ContextType"},"disambiguator":0}],"index":[0,85]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}}]},"is_const":false,"is_positive":true}},"id":4557742319775345286}}],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":322,"col":25},"hi":{"line":322,"col":25},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":322,"col":25},"hi":{"line":322,"col":25},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"sealed"},"disambiguator":0},{"data":{"TypeNs":"ContextType"},"disambiguator":0}],"index":[0,85]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}}]},"is_const":false,"is_positive":true}},"id":4557742319775345286}}],[]]},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Marker trait intended to indicate which context type we have."]},"id":183,"style":"Outer","span":{"lo":{"line":319,"col":4},"hi":{"line":319,"col":69},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," This is deliberately a sealed trait, so that it is only implementable"]},"id":184,"style":"Outer","span":{"lo":{"line":320,"col":4},"hi":{"line":320,"col":77},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"DocComment":["Line"," by types in this crate."]},"id":185,"style":"Outer","span":{"lo":{"line":321,"col":4},"hi":{"line":321,"col":31},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"sealed"},"disambiguator":0},{"data":"Impl","disambiguator":0}],"index":[0,86]},"span":{"lo":{"line":323,"col":4},"hi":{"line":323,"col":45},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":323,"col":4},"hi":{"line":323,"col":45},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Impl":{"unsafety":"Normal","polarity":"Positive","defaultness":"Final","defaultness_span":null,"constness":"NotConst","generics":{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":323,"col":42},"hi":{"line":323,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":323,"col":8},"hi":{"line":323,"col":8},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"of_trait":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"sealed"},"disambiguator":0},{"data":{"TypeNs":"ContextType"},"disambiguator":0}],"index":[0,85]},"generic_args":[{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"InitContextExtern"},"disambiguator":0}],"index":[0,230]}}}}]},"self_ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"InitContextExtern"},"disambiguator":0}],"index":[0,230]}}},"items":[]}},"attributes":{"attributes":[],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"sealed"},"disambiguator":0},{"data":"Impl","disambiguator":1}],"index":[0,87]},"span":{"lo":{"line":324,"col":4},"hi":{"line":324,"col":48},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":324,"col":4},"hi":{"line":324,"col":48},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Impl":{"unsafety":"Normal","polarity":"Positive","defaultness":"Final","defaultness_span":null,"constness":"NotConst","generics":{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":324,"col":45},"hi":{"line":324,"col":45},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":324,"col":8},"hi":{"line":324,"col":8},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"of_trait":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"sealed"},"disambiguator":0},{"data":{"TypeNs":"ContextType"},"disambiguator":0}],"index":[0,85]},"generic_args":[{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ReceiveContextExtern"},"disambiguator":0}],"index":[0,234]}}}}]},"self_ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ReceiveContextExtern"},"disambiguator":0}],"index":[0,234]}}},"items":[]}},"attributes":{"attributes":[],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ExternContext"},"disambiguator":0}],"index":[0,224]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ExternContext"},"disambiguator":0}],"index":[0,224]},"span":{"lo":{"line":330,"col":0},"hi":{"line":332,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":330,"col":0},"hi":{"line":332,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Struct":[{"Struct":[[{"span":{"lo":{"line":331,"col":4},"hi":{"line":331,"col":41},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":331,"col":4},"hi":{"line":331,"col":4},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"ident":["marker",{"lo":{"line":331,"col":4},"hi":{"line":331,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}],"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ExternContext"},"disambiguator":0}],"index":[0,224]},"local_id":14},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ExternContext"},"disambiguator":0},{"data":{"ValueNs":"marker"},"disambiguator":0}],"index":[0,226]},"ty":{"Adt":{"generic_args":[{"Type":{"Param":{"index":0,"name":"T"}}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"PhantomData"},"disambiguator":0}],"index":[1,2704]}}},"attributes":[]}],false]},{"params":[{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ExternContext"},"disambiguator":0}],"index":[0,224]},"local_id":7},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ExternContext"},"disambiguator":0},{"data":{"TypeNs":"T"},"disambiguator":0}],"index":[0,225]},"name":{"Plain":{"name":"T","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ExternContext"},"disambiguator":0}],"index":[0,224]},"local_id":7}}},"span":{"lo":{"line":330,"col":25},"hi":{"line":330,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"pure_wrt_drop":false,"kind":{"Type":{"default":null,"synthetic":false}},"colon_span":{"lo":{"line":330,"col":26},"hi":{"line":330,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"attributes":[]}],"predicates":[{"BoundPredicate":{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ExternContext"},"disambiguator":0}],"index":[0,224]},"local_id":6},"span":{"lo":{"line":330,"col":26},"hi":{"line":330,"col":47},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"origin":"GenericParam","bound_generic_params":[],"bounded_ty":{"Param":{"index":0,"name":"T"}}}}],"bounds":[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"Sized"},"disambiguator":0}],"index":[1,2689]},"generic_args":[{"Type":{"Param":{"index":0,"name":"T"}}}]},"is_const":false,"is_positive":true}},"id":14597494069885551087}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"sealed"},"disambiguator":0},{"data":{"TypeNs":"ContextType"},"disambiguator":0}],"index":[0,85]},"generic_args":[{"Type":{"Param":{"index":0,"name":"T"}}}]},"is_const":false,"is_positive":true}},"id":11684441412359143739}}],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":330,"col":48},"hi":{"line":330,"col":48},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":330,"col":24},"hi":{"line":330,"col":48},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}]},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Context backed by host functions."]},"id":186,"style":"Outer","span":{"lo":{"line":327,"col":0},"hi":{"line":327,"col":37},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"doc","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:329:6: 329:7 (#0), close: concordium/src/concordium_types.rs:329:13: 329:14 (#0) }"}},"delim":"Parenthesis","tokens":"hidden"}},"tokens":null},"tokens":null}},"id":188,"style":"Outer","span":{"lo":{"line":329,"col":0},"hi":{"line":329,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":22}],"index":[0,227]},"span":{"lo":{"line":328,"col":9},"hi":{"line":328,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":328,"col":9},"hi":{"line":328,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Impl":{"unsafety":"Normal","polarity":"Positive","defaultness":"Final","defaultness_span":null,"constness":"NotConst","generics":{"params":[{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":22}],"index":[0,227]},"local_id":11},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":22},{"data":{"TypeNs":"T"},"disambiguator":0}],"index":[0,228]},"name":{"Plain":{"name":"T","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":22}],"index":[0,227]},"local_id":11}}},"span":{"lo":{"line":330,"col":25},"hi":{"line":330,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"pure_wrt_drop":false,"kind":{"Type":{"default":null,"synthetic":false}},"colon_span":null,"attributes":[]}],"predicates":[{"BoundPredicate":{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":22}],"index":[0,227]},"local_id":10},"span":{"lo":{"line":330,"col":26},"hi":{"line":330,"col":47},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"origin":"GenericParam","bound_generic_params":[],"bounded_ty":{"Param":{"index":0,"name":"T"}}}}],"bounds":[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"Sized"},"disambiguator":0}],"index":[1,2689]},"generic_args":[{"Type":{"Param":{"index":0,"name":"T"}}}]},"is_const":false,"is_positive":true}},"id":14597494069885551087}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"default"},"disambiguator":0},{"data":{"TypeNs":"Default"},"disambiguator":0}],"index":[1,2587]},"generic_args":[{"Type":{"Param":{"index":0,"name":"T"}}}]},"is_const":false,"is_positive":true}},"id":6057256109449739874}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"sealed"},"disambiguator":0},{"data":{"TypeNs":"ContextType"},"disambiguator":0}],"index":[0,85]},"generic_args":[{"Type":{"Param":{"index":0,"name":"T"}}}]},"is_const":false,"is_positive":true}},"id":11684441412359143739}}],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":330,"col":48},"hi":{"line":330,"col":48},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":330,"col":24},"hi":{"line":330,"col":48},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"of_trait":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"default"},"disambiguator":0},{"data":{"TypeNs":"Default"},"disambiguator":0}],"index":[1,2587]},"generic_args":[{"Type":{"Adt":{"generic_args":[{"Type":{"Param":{"index":0,"name":"T"}}}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ExternContext"},"disambiguator":0}],"index":[0,224]}}}}]},"self_ty":{"Adt":{"generic_args":[{"Type":{"Param":{"index":0,"name":"T"}}}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ExternContext"},"disambiguator":0}],"index":[0,224]}}},"items":[{"ident":["default",{"lo":{"line":328,"col":9},"hi":{"line":328,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":22},{"data":{"ValueNs":"default"},"disambiguator":0}],"index":[0,229]},"generics":{"params":[],"predicates":[],"bounds":[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"Sized"},"disambiguator":0}],"index":[1,2689]},"generic_args":[{"Type":{"Param":{"index":0,"name":"T"}}}]},"is_const":false,"is_positive":true}},"id":14597494069885551087}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"default"},"disambiguator":0},{"data":{"TypeNs":"Default"},"disambiguator":0}],"index":[1,2587]},"generic_args":[{"Type":{"Param":{"index":0,"name":"T"}}}]},"is_const":false,"is_positive":true}},"id":6057256109449739874}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"sealed"},"disambiguator":0},{"data":{"TypeNs":"ContextType"},"disambiguator":0}],"index":[0,85]},"generic_args":[{"Type":{"Param":{"index":0,"name":"T"}}}]},"is_const":false,"is_positive":true}},"id":11684441412359143739}}],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":328,"col":9},"hi":{"line":328,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":328,"col":9},"hi":{"line":328,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"kind":{"Fn":{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"params":[],"ret":{"Adt":{"generic_args":[{"Type":{"Param":{"index":0,"name":"T"}}}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ExternContext"},"disambiguator":0}],"index":[0,224]}}},"body":{"ty":{"Adt":{"generic_args":[{"Type":{"Param":{"index":0,"name":"T"}}}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ExternContext"},"disambiguator":0}],"index":[0,224]}}},"span":{"lo":{"line":328,"col":9},"hi":{"line":328,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Block":{"targeted_by_break":false,"region_scope":{"id":10,"data":"Node"},"opt_destruction_scope":null,"span":{"lo":{"line":328,"col":9},"hi":{"line":328,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"stmts":[],"expr":{"ty":{"Adt":{"generic_args":[{"Type":{"Param":{"index":0,"name":"T"}}}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ExternContext"},"disambiguator":0}],"index":[0,224]}}},"span":{"lo":{"line":328,"col":9},"hi":{"line":328,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Adt":{"info":{"type_namespace":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0}],"index":[0,224]},"typ":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ExternContext"},"disambiguator":0}],"index":[0,224]},"variant":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ExternContext"},"disambiguator":0}],"index":[0,224]},"variant_index":0,"typ_is_record":true,"variant_is_record":true,"typ_is_struct":true},"user_ty":null,"fields":[{"field":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ExternContext"},"disambiguator":0},{"data":{"ValueNs":"marker"},"disambiguator":0}],"index":[0,226]},"value":{"ty":{"Adt":{"generic_args":[{"Type":{"Param":{"index":0,"name":"T"}}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"PhantomData"},"disambiguator":0}],"index":[1,2704]}}},"span":{"lo":{"line":331,"col":4},"hi":{"line":331,"col":41},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Call":{"ty":{"Arrow":{"value":{"inputs":[],"output":{"Adt":{"generic_args":[{"Type":{"Param":{"index":0,"name":"T"}}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"PhantomData"},"disambiguator":0}],"index":[1,2704]}}},"c_variadic":false,"unsafety":"Normal","abi":{"Abi":{"todo":"Rust"}}},"bound_vars":[]}},"fun":{"ty":{"Arrow":{"value":{"inputs":[],"output":{"Adt":{"generic_args":[{"Type":{"Param":{"index":0,"name":"T"}}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"PhantomData"},"disambiguator":0}],"index":[1,2704]}}},"c_variadic":false,"unsafety":"Normal","abi":{"Abi":{"todo":"Rust"}}},"bound_vars":[]}},"span":{"lo":{"line":331,"col":4},"hi":{"line":331,"col":41},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"GlobalName":{"id":{"krate":"core","path":[{"data":{"TypeNs":"default"},"disambiguator":0},{"data":{"TypeNs":"Default"},"disambiguator":0},{"data":{"ValueNs":"default"},"disambiguator":0}],"index":[1,2588]}}},"hir_id":null,"attributes":[]},"args":[],"from_hir_call":true,"fn_span":{"lo":{"line":331,"col":4},"hi":{"line":331,"col":41},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"impl":{"impl":{"Concrete":{"id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":"Impl","disambiguator":14}],"index":[1,2727]},"generics":[{"Type":{"Param":{"index":0,"name":"T"}}}]}},"args":[]}}},"hir_id":[229,4],"attributes":[]}}],"base":null}},"hir_id":[229,1],"attributes":[]},"safety_mode":"Safe"}},"hir_id":[229,11],"attributes":[]},"sig_span":{"lo":{"line":328,"col":9},"hi":{"line":328,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}},"defaultness":"Final","span":{"lo":{"line":328,"col":9},"hi":{"line":328,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":328,"col":9},"hi":{"line":328,"col":9},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"inline","args":"Empty","tokens":null},"tokens":null}},"id":433,"style":"Outer","span":{"lo":{"line":328,"col":9},"hi":{"line":328,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"automatically_derived","args":"Empty","tokens":null},"tokens":null}},"id":434,"style":"Outer","span":{"lo":{"line":328,"col":9},"hi":{"line":328,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}}]}},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"automatically_derived","args":"Empty","tokens":null},"tokens":null}},"id":434,"style":"Outer","span":{"lo":{"line":328,"col":9},"hi":{"line":328,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[{"kind":{"Macro":["Derive","Default"]},"call_site":{"lo":{"line":328,"col":9},"hi":{"line":328,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"def_site":{"lo":{"line":185,"col":0},"hi":{"line":185,"col":17},"filename":{"Real":{"Remapped":{"local_path":"/home/au538501/.rustup/toolchains/nightly-2023-06-02-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/default.rs","virtual_name":"/rustc/d59363ad0b6391b7fc5bbb02c9ccf9300eef3753/library/core/src/default.rs"}}}},"allow_internal_unstable":["core_intrinsics"],"edition":"Edition2021","macro_def_id":{"krate":"core","path":[{"data":{"TypeNs":"default"},"disambiguator":0},{"data":{"MacroNs":"Default"},"disambiguator":0}],"index":[1,2591]},"parent_module":{"krate":"core","path":[{"data":{"TypeNs":"default"},"disambiguator":0}],"index":[1,2586]},"allow_internal_unsafe":false,"local_inner_macros":false,"collapse_debuginfo":false}]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ChainMetaExtern"},"disambiguator":0}],"index":[0,88]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ChainMetaExtern"},"disambiguator":0}],"index":[0,88]},"span":{"lo":{"line":335,"col":0},"hi":{"line":335,"col":29},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":335,"col":0},"hi":{"line":335,"col":29},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Struct":[{"Struct":[[],false]},{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":335,"col":26},"hi":{"line":335,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":335,"col":26},"hi":{"line":335,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}]},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"doc","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:334:6: 334:7 (#0), close: concordium/src/concordium_types.rs:334:13: 334:14 (#0) }"}},"delim":"Parenthesis","tokens":"hidden"}},"tokens":null},"tokens":null}},"id":189,"style":"Outer","span":{"lo":{"line":334,"col":0},"hi":{"line":334,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"InitContextExtern"},"disambiguator":0}],"index":[0,230]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"InitContextExtern"},"disambiguator":0}],"index":[0,230]},"span":{"lo":{"line":339,"col":0},"hi":{"line":339,"col":29},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":339,"col":0},"hi":{"line":339,"col":29},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Struct":[{"Unit":[{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"InitContextExtern"},"disambiguator":0}],"index":[0,230]},"local_id":1},{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"InitContextExtern"},"disambiguator":0},{"data":"Ctor","disambiguator":0}],"index":[0,231]}]},{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":339,"col":28},"hi":{"line":339,"col":28},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":339,"col":28},"hi":{"line":339,"col":28},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}]},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"doc","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:338:6: 338:7 (#0), close: concordium/src/concordium_types.rs:338:13: 338:14 (#0) }"}},"delim":"Parenthesis","tokens":"hidden"}},"tokens":null},"tokens":null}},"id":191,"style":"Outer","span":{"lo":{"line":338,"col":0},"hi":{"line":338,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":23}],"index":[0,232]},"span":{"lo":{"line":337,"col":9},"hi":{"line":337,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":337,"col":9},"hi":{"line":337,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Impl":{"unsafety":"Normal","polarity":"Positive","defaultness":"Final","defaultness_span":null,"constness":"NotConst","generics":{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":339,"col":28},"hi":{"line":339,"col":28},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":339,"col":28},"hi":{"line":339,"col":28},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"of_trait":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"default"},"disambiguator":0},{"data":{"TypeNs":"Default"},"disambiguator":0}],"index":[1,2587]},"generic_args":[{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"InitContextExtern"},"disambiguator":0}],"index":[0,230]}}}}]},"self_ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"InitContextExtern"},"disambiguator":0}],"index":[0,230]}}},"items":[{"ident":["default",{"lo":{"line":337,"col":9},"hi":{"line":337,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":23},{"data":{"ValueNs":"default"},"disambiguator":0}],"index":[0,233]},"generics":{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":337,"col":9},"hi":{"line":337,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":337,"col":9},"hi":{"line":337,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"kind":{"Fn":{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"params":[],"ret":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"InitContextExtern"},"disambiguator":0}],"index":[0,230]}}},"body":{"ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"InitContextExtern"},"disambiguator":0}],"index":[0,230]}}},"span":{"lo":{"line":337,"col":9},"hi":{"line":337,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Block":{"targeted_by_break":false,"region_scope":{"id":3,"data":"Node"},"opt_destruction_scope":null,"span":{"lo":{"line":337,"col":9},"hi":{"line":337,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"stmts":[],"expr":{"ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"InitContextExtern"},"disambiguator":0}],"index":[0,230]}}},"span":{"lo":{"line":337,"col":9},"hi":{"line":337,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Adt":{"info":{"type_namespace":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0}],"index":[0,230]},"typ":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"InitContextExtern"},"disambiguator":0}],"index":[0,230]},"variant":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"InitContextExtern"},"disambiguator":0}],"index":[0,230]},"variant_index":0,"typ_is_record":false,"variant_is_record":false,"typ_is_struct":true},"user_ty":null,"fields":[],"base":null}},"hir_id":[233,1],"attributes":[]},"safety_mode":"Safe"}},"hir_id":[233,4],"attributes":[]},"sig_span":{"lo":{"line":337,"col":9},"hi":{"line":337,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}},"defaultness":"Final","span":{"lo":{"line":337,"col":9},"hi":{"line":337,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":337,"col":9},"hi":{"line":337,"col":9},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"inline","args":"Empty","tokens":null},"tokens":null}},"id":435,"style":"Outer","span":{"lo":{"line":337,"col":9},"hi":{"line":337,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"automatically_derived","args":"Empty","tokens":null},"tokens":null}},"id":436,"style":"Outer","span":{"lo":{"line":337,"col":9},"hi":{"line":337,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}}]}},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"automatically_derived","args":"Empty","tokens":null},"tokens":null}},"id":436,"style":"Outer","span":{"lo":{"line":337,"col":9},"hi":{"line":337,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[{"kind":{"Macro":["Derive","Default"]},"call_site":{"lo":{"line":337,"col":9},"hi":{"line":337,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"def_site":{"lo":{"line":185,"col":0},"hi":{"line":185,"col":17},"filename":{"Real":{"Remapped":{"local_path":"/home/au538501/.rustup/toolchains/nightly-2023-06-02-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/default.rs","virtual_name":"/rustc/d59363ad0b6391b7fc5bbb02c9ccf9300eef3753/library/core/src/default.rs"}}}},"allow_internal_unstable":["core_intrinsics"],"edition":"Edition2021","macro_def_id":{"krate":"core","path":[{"data":{"TypeNs":"default"},"disambiguator":0},{"data":{"MacroNs":"Default"},"disambiguator":0}],"index":[1,2591]},"parent_module":{"krate":"core","path":[{"data":{"TypeNs":"default"},"disambiguator":0}],"index":[1,2586]},"allow_internal_unsafe":false,"local_inner_macros":false,"collapse_debuginfo":false}]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ReceiveContextExtern"},"disambiguator":0}],"index":[0,234]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ReceiveContextExtern"},"disambiguator":0}],"index":[0,234]},"span":{"lo":{"line":342,"col":0},"hi":{"line":342,"col":32},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":342,"col":0},"hi":{"line":342,"col":32},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Struct":[{"Unit":[{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ReceiveContextExtern"},"disambiguator":0}],"index":[0,234]},"local_id":1},{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ReceiveContextExtern"},"disambiguator":0},{"data":"Ctor","disambiguator":0}],"index":[0,235]}]},{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":342,"col":31},"hi":{"line":342,"col":31},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":342,"col":31},"hi":{"line":342,"col":31},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}]},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"doc","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:341:6: 341:7 (#0), close: concordium/src/concordium_types.rs:341:13: 341:14 (#0) }"}},"delim":"Parenthesis","tokens":"hidden"}},"tokens":null},"tokens":null}},"id":193,"style":"Outer","span":{"lo":{"line":341,"col":0},"hi":{"line":341,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":24}],"index":[0,236]},"span":{"lo":{"line":340,"col":9},"hi":{"line":340,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":340,"col":9},"hi":{"line":340,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"kind":{"Impl":{"unsafety":"Normal","polarity":"Positive","defaultness":"Final","defaultness_span":null,"constness":"NotConst","generics":{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":342,"col":31},"hi":{"line":342,"col":31},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":342,"col":31},"hi":{"line":342,"col":31},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"of_trait":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"default"},"disambiguator":0},{"data":{"TypeNs":"Default"},"disambiguator":0}],"index":[1,2587]},"generic_args":[{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ReceiveContextExtern"},"disambiguator":0}],"index":[0,234]}}}}]},"self_ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ReceiveContextExtern"},"disambiguator":0}],"index":[0,234]}}},"items":[{"ident":["default",{"lo":{"line":340,"col":9},"hi":{"line":340,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":"Impl","disambiguator":24},{"data":{"ValueNs":"default"},"disambiguator":0}],"index":[0,237]},"generics":{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":340,"col":9},"hi":{"line":340,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"span":{"lo":{"line":340,"col":9},"hi":{"line":340,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},"kind":{"Fn":{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"params":[],"ret":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ReceiveContextExtern"},"disambiguator":0}],"index":[0,234]}}},"body":{"ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ReceiveContextExtern"},"disambiguator":0}],"index":[0,234]}}},"span":{"lo":{"line":340,"col":9},"hi":{"line":340,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Block":{"targeted_by_break":false,"region_scope":{"id":3,"data":"Node"},"opt_destruction_scope":null,"span":{"lo":{"line":340,"col":9},"hi":{"line":340,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"stmts":[],"expr":{"ty":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ReceiveContextExtern"},"disambiguator":0}],"index":[0,234]}}},"span":{"lo":{"line":340,"col":9},"hi":{"line":340,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"contents":{"Adt":{"info":{"type_namespace":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0}],"index":[0,234]},"typ":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ReceiveContextExtern"},"disambiguator":0}],"index":[0,234]},"variant":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"ReceiveContextExtern"},"disambiguator":0}],"index":[0,234]},"variant_index":0,"typ_is_record":false,"variant_is_record":false,"typ_is_struct":true},"user_ty":null,"fields":[],"base":null}},"hir_id":[237,1],"attributes":[]},"safety_mode":"Safe"}},"hir_id":[237,4],"attributes":[]},"sig_span":{"lo":{"line":340,"col":9},"hi":{"line":340,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}},"defaultness":"Final","span":{"lo":{"line":340,"col":9},"hi":{"line":340,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"vis_span":{"lo":{"line":340,"col":9},"hi":{"line":340,"col":9},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"inline","args":"Empty","tokens":null},"tokens":null}},"id":437,"style":"Outer","span":{"lo":{"line":340,"col":9},"hi":{"line":340,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"automatically_derived","args":"Empty","tokens":null},"tokens":null}},"id":438,"style":"Outer","span":{"lo":{"line":340,"col":9},"hi":{"line":340,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}}]}},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"automatically_derived","args":"Empty","tokens":null},"tokens":null}},"id":438,"style":"Outer","span":{"lo":{"line":340,"col":9},"hi":{"line":340,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:1:11: 1:12 (#0), close: concordium/src/concordium_types.rs:1:25: 1:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":55,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium_types.rs:2:17: 2:18 (#0), close: concordium/src/concordium_types.rs:2:21: 2:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":56,"style":"Inner","span":{"lo":{"line":2,"col":0},"hi":{"line":2,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[{"kind":{"Macro":["Derive","Default"]},"call_site":{"lo":{"line":340,"col":9},"hi":{"line":340,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_types.rs"}}},"def_site":{"lo":{"line":185,"col":0},"hi":{"line":185,"col":17},"filename":{"Real":{"Remapped":{"local_path":"/home/au538501/.rustup/toolchains/nightly-2023-06-02-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/default.rs","virtual_name":"/rustc/d59363ad0b6391b7fc5bbb02c9ccf9300eef3753/library/core/src/default.rs"}}}},"allow_internal_unstable":["core_intrinsics"],"edition":"Edition2021","macro_def_id":{"krate":"core","path":[{"data":{"TypeNs":"default"},"disambiguator":0},{"data":{"MacroNs":"Default"},"disambiguator":0}],"index":[1,2591]},"parent_module":{"krate":"core","path":[{"data":{"TypeNs":"default"},"disambiguator":0}],"index":[1,2586]},"allow_internal_unsafe":false,"local_inner_macros":false,"collapse_debuginfo":false}]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0}],"index":[0,89]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0}],"index":[0,89]},"span":{"lo":{"line":56,"col":0},"hi":{"line":56,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"vis_span":{"lo":{"line":56,"col":0},"hi":{"line":56,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"kind":{"Mod":[{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":"Use","disambiguator":0}],"index":[0,90]},"span":{"lo":{"line":5,"col":0},"hi":{"line":5,"col":13},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"vis_span":{"lo":{"line":5,"col":0},"hi":{"line":5,"col":13},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"kind":{"Use":[{"span":{"lo":{"line":5,"col":4},"hi":{"line":5,"col":9},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"res":[{"Def":[{"DefKind":{"todo":"Mod"}},{"krate":"hacspec_concordium","path":[],"index":[0,0]}]}],"segments":[{"ident":["crate",{"lo":{"line":5,"col":4},"hi":{"line":5,"col":9},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":"Use","disambiguator":0}],"index":[0,90]},"local_id":1},"res":"Err","args":null,"infer_args":false}],"rename":null},"Glob"]},"attributes":{"attributes":[],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasParameter"},"disambiguator":0}],"index":[0,91]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasParameter"},"disambiguator":0}],"index":[0,91]},"span":{"lo":{"line":14,"col":0},"hi":{"line":17,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"vis_span":{"lo":{"line":14,"col":0},"hi":{"line":17,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"kind":{"Trait":["No","Normal",{"params":[],"predicates":[],"bounds":[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"concordium_contracts_common","path":[{"data":{"TypeNs":"traits"},"disambiguator":0},{"data":{"TypeNs":"Read"},"disambiguator":0}],"index":[5,26]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}}]},"is_const":false,"is_positive":true}},"id":2437756474506696380}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasParameter"},"disambiguator":0}],"index":[0,91]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}}]},"is_const":false,"is_positive":true}},"id":6468282439157936302}}],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":14,"col":28},"hi":{"line":14,"col":28},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":14,"col":22},"hi":{"line":14,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"concordium_contracts_common","path":[{"data":{"TypeNs":"traits"},"disambiguator":0},{"data":{"TypeNs":"Read"},"disambiguator":0}],"index":[5,26]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}}]},"is_const":false,"is_positive":true}},"id":2437756474506696380}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasParameter"},"disambiguator":0}],"index":[0,91]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}}]},"is_const":false,"is_positive":true}},"id":6468282439157936302}}],[{"ident":["size",{"lo":{"line":16,"col":7},"hi":{"line":16,"col":11},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasParameter"},"disambiguator":0},{"data":{"ValueNs":"size"},"disambiguator":0}],"index":[0,92]},"generics":{"params":[{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasParameter"},"disambiguator":0},{"data":{"ValueNs":"size"},"disambiguator":0}],"index":[0,92]},"local_id":1},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasParameter"},"disambiguator":0},{"data":{"ValueNs":"size"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,243]},"name":"Fresh","span":{"lo":{"line":16,"col":12},"hi":{"line":16,"col":13},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]}],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":16,"col":25},"hi":{"line":16,"col":25},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":16,"col":11},"hi":{"line":16,"col":11},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"kind":{"RequiredFn":[{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"decl":{"inputs":[{"Ref":[{"kind":{"ReLateBound":[0,{"var":0,"kind":{"BrNamed":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasParameter"},"disambiguator":0},{"data":{"ValueNs":"size"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,243]},"'_"]}}]}},{"Param":{"index":0,"name":"Self"}},false]}],"output":{"Return":{"Uint":"U32"}},"c_variadic":false,"implicit_self":"ImmRef","lifetime_elision_allowed":true},"span":{"lo":{"line":16,"col":4},"hi":{"line":16,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[["self",{"lo":{"line":16,"col":13},"hi":{"line":16,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}]]]},"span":{"lo":{"line":16,"col":4},"hi":{"line":16,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"defaultness":{"Default":{"has_value":false}},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Get the size of the parameter to the method."]},"id":201,"style":"Outer","span":{"lo":{"line":15,"col":4},"hi":{"line":15,"col":52},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"DocComment":["Line"," Objects which can access parameters to contracts."]},"id":194,"style":"Outer","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":53},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line",""]},"id":195,"style":"Outer","span":{"lo":{"line":8,"col":0},"hi":{"line":8,"col":3},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," This trait has a Read supertrait which means that structured parameters can"]},"id":196,"style":"Outer","span":{"lo":{"line":9,"col":0},"hi":{"line":9,"col":79},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," be directly deserialized by using `.get()` function from the `Get` trait."]},"id":197,"style":"Outer","span":{"lo":{"line":10,"col":0},"hi":{"line":10,"col":77},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line",""]},"id":198,"style":"Outer","span":{"lo":{"line":11,"col":0},"hi":{"line":11,"col":3},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," The reuse of `Read` methods is the reason for the slightly strange choice of"]},"id":199,"style":"Outer","span":{"lo":{"line":12,"col":0},"hi":{"line":12,"col":80},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," methods of this trait."]},"id":200,"style":"Outer","span":{"lo":{"line":13,"col":0},"hi":{"line":13,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}}]]},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Objects which can access parameters to contracts."]},"id":194,"style":"Outer","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":53},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line",""]},"id":195,"style":"Outer","span":{"lo":{"line":8,"col":0},"hi":{"line":8,"col":3},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," This trait has a Read supertrait which means that structured parameters can"]},"id":196,"style":"Outer","span":{"lo":{"line":9,"col":0},"hi":{"line":9,"col":79},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," be directly deserialized by using `.get()` function from the `Get` trait."]},"id":197,"style":"Outer","span":{"lo":{"line":10,"col":0},"hi":{"line":10,"col":77},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line",""]},"id":198,"style":"Outer","span":{"lo":{"line":11,"col":0},"hi":{"line":11,"col":3},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," The reuse of `Read` methods is the reason for the slightly strange choice of"]},"id":199,"style":"Outer","span":{"lo":{"line":12,"col":0},"hi":{"line":12,"col":80},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," methods of this trait."]},"id":200,"style":"Outer","span":{"lo":{"line":13,"col":0},"hi":{"line":13,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasChainMetadata"},"disambiguator":0}],"index":[0,93]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasChainMetadata"},"disambiguator":0}],"index":[0,93]},"span":{"lo":{"line":20,"col":0},"hi":{"line":23,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"vis_span":{"lo":{"line":20,"col":0},"hi":{"line":23,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"kind":{"Trait":["No","Normal",{"params":[],"predicates":[],"bounds":[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasChainMetadata"},"disambiguator":0}],"index":[0,93]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}}]},"is_const":false,"is_positive":true}},"id":10432781440892472764}}],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":20,"col":26},"hi":{"line":20,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":20,"col":26},"hi":{"line":20,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasChainMetadata"},"disambiguator":0}],"index":[0,93]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}}]},"is_const":false,"is_positive":true}},"id":10432781440892472764}}],[{"ident":["slot_time",{"lo":{"line":22,"col":7},"hi":{"line":22,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasChainMetadata"},"disambiguator":0},{"data":{"ValueNs":"slot_time"},"disambiguator":0}],"index":[0,94]},"generics":{"params":[{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasChainMetadata"},"disambiguator":0},{"data":{"ValueNs":"slot_time"},"disambiguator":0}],"index":[0,94]},"local_id":1},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasChainMetadata"},"disambiguator":0},{"data":{"ValueNs":"slot_time"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,244]},"name":"Fresh","span":{"lo":{"line":22,"col":17},"hi":{"line":22,"col":18},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]}],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":22,"col":35},"hi":{"line":22,"col":35},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":22,"col":16},"hi":{"line":22,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"kind":{"RequiredFn":[{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"decl":{"inputs":[{"Ref":[{"kind":{"ReLateBound":[0,{"var":0,"kind":{"BrNamed":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasChainMetadata"},"disambiguator":0},{"data":{"ValueNs":"slot_time"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,244]},"'_"]}}]}},{"Param":{"index":0,"name":"Self"}},false]}],"output":{"Return":{"Adt":{"generic_args":[],"def_id":{"krate":"concordium_contracts_common","path":[{"data":{"TypeNs":"types"},"disambiguator":0},{"data":{"TypeNs":"Timestamp"},"disambiguator":0}],"index":[5,906]}}}},"c_variadic":false,"implicit_self":"ImmRef","lifetime_elision_allowed":true},"span":{"lo":{"line":22,"col":4},"hi":{"line":22,"col":36},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[["self",{"lo":{"line":22,"col":18},"hi":{"line":22,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}]]]},"span":{"lo":{"line":22,"col":4},"hi":{"line":22,"col":36},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"defaultness":{"Default":{"has_value":false}},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Get time in milliseconds at the beginning of this block."]},"id":203,"style":"Outer","span":{"lo":{"line":21,"col":4},"hi":{"line":21,"col":64},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"DocComment":["Line"," Objects which can access chain metadata."]},"id":202,"style":"Outer","span":{"lo":{"line":19,"col":0},"hi":{"line":19,"col":44},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}}]]},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Objects which can access chain metadata."]},"id":202,"style":"Outer","span":{"lo":{"line":19,"col":0},"hi":{"line":19,"col":44},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasPolicy"},"disambiguator":0}],"index":[0,95]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasPolicy"},"disambiguator":0}],"index":[0,95]},"span":{"lo":{"line":30,"col":0},"hi":{"line":51,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"vis_span":{"lo":{"line":30,"col":0},"hi":{"line":51,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"kind":{"Trait":["No","Normal",{"params":[],"predicates":[],"bounds":[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasPolicy"},"disambiguator":0}],"index":[0,95]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}}]},"is_const":false,"is_positive":true}},"id":9008509554905379750}}],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":30,"col":19},"hi":{"line":30,"col":19},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":30,"col":19},"hi":{"line":30,"col":19},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasPolicy"},"disambiguator":0}],"index":[0,95]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}}]},"is_const":false,"is_positive":true}},"id":9008509554905379750}}],[{"ident":["identity_provider",{"lo":{"line":33,"col":7},"hi":{"line":33,"col":24},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasPolicy"},"disambiguator":0},{"data":{"ValueNs":"identity_provider"},"disambiguator":0}],"index":[0,96]},"generics":{"params":[{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasPolicy"},"disambiguator":0},{"data":{"ValueNs":"identity_provider"},"disambiguator":0}],"index":[0,96]},"local_id":1},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasPolicy"},"disambiguator":0},{"data":{"ValueNs":"identity_provider"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,245]},"name":"Fresh","span":{"lo":{"line":33,"col":25},"hi":{"line":33,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]}],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":33,"col":51},"hi":{"line":33,"col":51},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":33,"col":24},"hi":{"line":33,"col":24},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"kind":{"RequiredFn":[{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"decl":{"inputs":[{"Ref":[{"kind":{"ReLateBound":[0,{"var":0,"kind":{"BrNamed":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasPolicy"},"disambiguator":0},{"data":{"ValueNs":"identity_provider"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,245]},"'_"]}}]}},{"Param":{"index":0,"name":"Self"}},false]}],"output":{"Return":{"Uint":"U32"}},"c_variadic":false,"implicit_self":"ImmRef","lifetime_elision_allowed":true},"span":{"lo":{"line":33,"col":4},"hi":{"line":33,"col":52},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[["self",{"lo":{"line":33,"col":26},"hi":{"line":33,"col":30},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}]]]},"span":{"lo":{"line":33,"col":4},"hi":{"line":33,"col":52},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"defaultness":{"Default":{"has_value":false}},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Identity provider who signed the identity object the credential is"]},"id":208,"style":"Outer","span":{"lo":{"line":31,"col":4},"hi":{"line":31,"col":74},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," derived from."]},"id":209,"style":"Outer","span":{"lo":{"line":32,"col":4},"hi":{"line":32,"col":21},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"DocComment":["Line"," A type which has access to a policy of a credential."]},"id":204,"style":"Outer","span":{"lo":{"line":26,"col":0},"hi":{"line":26,"col":56},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," Since policies can be large this is deliberately written in a relatively"]},"id":205,"style":"Outer","span":{"lo":{"line":27,"col":0},"hi":{"line":27,"col":76},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," low-level style to enable efficient traversal of all the attributes without"]},"id":206,"style":"Outer","span":{"lo":{"line":28,"col":0},"hi":{"line":28,"col":79},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," any allocations."]},"id":207,"style":"Outer","span":{"lo":{"line":29,"col":0},"hi":{"line":29,"col":20},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}},{"ident":["created_at",{"lo":{"line":36,"col":7},"hi":{"line":36,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasPolicy"},"disambiguator":0},{"data":{"ValueNs":"created_at"},"disambiguator":0}],"index":[0,97]},"generics":{"params":[{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasPolicy"},"disambiguator":0},{"data":{"ValueNs":"created_at"},"disambiguator":0}],"index":[0,97]},"local_id":1},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasPolicy"},"disambiguator":0},{"data":{"ValueNs":"created_at"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,246]},"name":"Fresh","span":{"lo":{"line":36,"col":18},"hi":{"line":36,"col":19},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]}],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":36,"col":37},"hi":{"line":36,"col":37},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":36,"col":17},"hi":{"line":36,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"kind":{"RequiredFn":[{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"decl":{"inputs":[{"Ref":[{"kind":{"ReLateBound":[0,{"var":0,"kind":{"BrNamed":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasPolicy"},"disambiguator":0},{"data":{"ValueNs":"created_at"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,246]},"'_"]}}]}},{"Param":{"index":0,"name":"Self"}},false]}],"output":{"Return":{"Adt":{"generic_args":[],"def_id":{"krate":"concordium_contracts_common","path":[{"data":{"TypeNs":"types"},"disambiguator":0},{"data":{"TypeNs":"Timestamp"},"disambiguator":0}],"index":[5,906]}}}},"c_variadic":false,"implicit_self":"ImmRef","lifetime_elision_allowed":true},"span":{"lo":{"line":36,"col":4},"hi":{"line":36,"col":38},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[["self",{"lo":{"line":36,"col":19},"hi":{"line":36,"col":23},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}]]]},"span":{"lo":{"line":36,"col":4},"hi":{"line":36,"col":38},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"defaultness":{"Default":{"has_value":false}},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Beginning of the month in milliseconds since unix epoch when the"]},"id":210,"style":"Outer","span":{"lo":{"line":34,"col":4},"hi":{"line":34,"col":72},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," credential was created."]},"id":211,"style":"Outer","span":{"lo":{"line":35,"col":4},"hi":{"line":35,"col":31},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"DocComment":["Line"," A type which has access to a policy of a credential."]},"id":204,"style":"Outer","span":{"lo":{"line":26,"col":0},"hi":{"line":26,"col":56},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," Since policies can be large this is deliberately written in a relatively"]},"id":205,"style":"Outer","span":{"lo":{"line":27,"col":0},"hi":{"line":27,"col":76},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," low-level style to enable efficient traversal of all the attributes without"]},"id":206,"style":"Outer","span":{"lo":{"line":28,"col":0},"hi":{"line":28,"col":79},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," any allocations."]},"id":207,"style":"Outer","span":{"lo":{"line":29,"col":0},"hi":{"line":29,"col":20},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}},{"ident":["valid_to",{"lo":{"line":39,"col":7},"hi":{"line":39,"col":15},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasPolicy"},"disambiguator":0},{"data":{"ValueNs":"valid_to"},"disambiguator":0}],"index":[0,98]},"generics":{"params":[{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasPolicy"},"disambiguator":0},{"data":{"ValueNs":"valid_to"},"disambiguator":0}],"index":[0,98]},"local_id":1},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasPolicy"},"disambiguator":0},{"data":{"ValueNs":"valid_to"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,247]},"name":"Fresh","span":{"lo":{"line":39,"col":16},"hi":{"line":39,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]}],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":39,"col":35},"hi":{"line":39,"col":35},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":39,"col":15},"hi":{"line":39,"col":15},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"kind":{"RequiredFn":[{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"decl":{"inputs":[{"Ref":[{"kind":{"ReLateBound":[0,{"var":0,"kind":{"BrNamed":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasPolicy"},"disambiguator":0},{"data":{"ValueNs":"valid_to"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,247]},"'_"]}}]}},{"Param":{"index":0,"name":"Self"}},false]}],"output":{"Return":{"Adt":{"generic_args":[],"def_id":{"krate":"concordium_contracts_common","path":[{"data":{"TypeNs":"types"},"disambiguator":0},{"data":{"TypeNs":"Timestamp"},"disambiguator":0}],"index":[5,906]}}}},"c_variadic":false,"implicit_self":"ImmRef","lifetime_elision_allowed":true},"span":{"lo":{"line":39,"col":4},"hi":{"line":39,"col":36},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[["self",{"lo":{"line":39,"col":17},"hi":{"line":39,"col":21},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}]]]},"span":{"lo":{"line":39,"col":4},"hi":{"line":39,"col":36},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"defaultness":{"Default":{"has_value":false}},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Beginning of the month where the credential is no longer valid, in"]},"id":212,"style":"Outer","span":{"lo":{"line":37,"col":4},"hi":{"line":37,"col":74},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," milliseconds since unix epoch."]},"id":213,"style":"Outer","span":{"lo":{"line":38,"col":4},"hi":{"line":38,"col":38},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"DocComment":["Line"," A type which has access to a policy of a credential."]},"id":204,"style":"Outer","span":{"lo":{"line":26,"col":0},"hi":{"line":26,"col":56},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," Since policies can be large this is deliberately written in a relatively"]},"id":205,"style":"Outer","span":{"lo":{"line":27,"col":0},"hi":{"line":27,"col":76},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," low-level style to enable efficient traversal of all the attributes without"]},"id":206,"style":"Outer","span":{"lo":{"line":28,"col":0},"hi":{"line":28,"col":79},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," any allocations."]},"id":207,"style":"Outer","span":{"lo":{"line":29,"col":0},"hi":{"line":29,"col":20},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}},{"ident":["next_item",{"lo":{"line":50,"col":7},"hi":{"line":50,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasPolicy"},"disambiguator":0},{"data":{"ValueNs":"next_item"},"disambiguator":0}],"index":[0,99]},"generics":{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":50,"col":85},"hi":{"line":50,"col":85},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":50,"col":16},"hi":{"line":50,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"kind":{"RequiredFn":[{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"decl":{"inputs":[{"Param":{"index":0,"name":"Self"}},{"Array":[{"Uint":"U8"},{"ty":{"Uint":"Usize"},"span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":0},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"contents":{"Literal":{"Int":{"Uint":[31,"Usize"]}}},"hir_id":null,"attributes":[]}]}],"output":{"Return":{"Tuple":[{"Adt":{"generic_args":[{"Type":{"Tuple":[{"Adt":{"generic_args":[],"def_id":{"krate":"concordium_contracts_common","path":[{"data":{"TypeNs":"types"},"disambiguator":0},{"data":{"TypeNs":"AttributeTag"},"disambiguator":0}],"index":[5,1142]}}},{"Uint":"U8"}]}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"option"},"disambiguator":0},{"data":{"TypeNs":"Option"},"disambiguator":0}],"index":[1,41362]}}},{"Array":[{"Uint":"U8"},{"ty":{"Uint":"Usize"},"span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":0},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"contents":{"Literal":{"Int":{"Uint":[31,"Usize"]}}},"hir_id":null,"attributes":[]}]},{"Param":{"index":0,"name":"Self"}}]}},"c_variadic":false,"implicit_self":"Imm","lifetime_elision_allowed":false},"span":{"lo":{"line":50,"col":4},"hi":{"line":50,"col":86},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[["self",{"lo":{"line":50,"col":17},"hi":{"line":50,"col":21},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],["buf",{"lo":{"line":50,"col":23},"hi":{"line":50,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}]]]},"span":{"lo":{"line":50,"col":4},"hi":{"line":50,"col":86},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"defaultness":{"Default":{"has_value":false}},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Get the next attribute, storing it in the provided buffer."]},"id":214,"style":"Outer","span":{"lo":{"line":40,"col":4},"hi":{"line":40,"col":66},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," The return value, if `Some`, is a pair of an attribute tag, and the"]},"id":215,"style":"Outer","span":{"lo":{"line":41,"col":4},"hi":{"line":41,"col":75},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," length, `n` of the attribute value. In this case, the attribute"]},"id":216,"style":"Outer","span":{"lo":{"line":42,"col":4},"hi":{"line":42,"col":71},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," value is written in the first `n` bytes of the provided buffer. The"]},"id":217,"style":"Outer","span":{"lo":{"line":43,"col":4},"hi":{"line":43,"col":75},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," rest of the buffer is unchanged."]},"id":218,"style":"Outer","span":{"lo":{"line":44,"col":4},"hi":{"line":44,"col":40},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line",""]},"id":219,"style":"Outer","span":{"lo":{"line":45,"col":4},"hi":{"line":45,"col":7},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," The reason this function is added here, and we don't simply implement"]},"id":220,"style":"Outer","span":{"lo":{"line":46,"col":4},"hi":{"line":46,"col":77},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," an Iterator for this type is that with the supplied buffer we can"]},"id":221,"style":"Outer","span":{"lo":{"line":47,"col":4},"hi":{"line":47,"col":73},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," iterate through the elements more efficiently, without any allocations,"]},"id":222,"style":"Outer","span":{"lo":{"line":48,"col":4},"hi":{"line":48,"col":79},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," the consumer being responsible for allocating the buffer."]},"id":223,"style":"Outer","span":{"lo":{"line":49,"col":4},"hi":{"line":49,"col":65},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"DocComment":["Line"," A type which has access to a policy of a credential."]},"id":204,"style":"Outer","span":{"lo":{"line":26,"col":0},"hi":{"line":26,"col":56},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," Since policies can be large this is deliberately written in a relatively"]},"id":205,"style":"Outer","span":{"lo":{"line":27,"col":0},"hi":{"line":27,"col":76},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," low-level style to enable efficient traversal of all the attributes without"]},"id":206,"style":"Outer","span":{"lo":{"line":28,"col":0},"hi":{"line":28,"col":79},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," any allocations."]},"id":207,"style":"Outer","span":{"lo":{"line":29,"col":0},"hi":{"line":29,"col":20},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}}]]},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," A type which has access to a policy of a credential."]},"id":204,"style":"Outer","span":{"lo":{"line":26,"col":0},"hi":{"line":26,"col":56},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," Since policies can be large this is deliberately written in a relatively"]},"id":205,"style":"Outer","span":{"lo":{"line":27,"col":0},"hi":{"line":27,"col":76},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," low-level style to enable efficient traversal of all the attributes without"]},"id":206,"style":"Outer","span":{"lo":{"line":28,"col":0},"hi":{"line":28,"col":79},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," any allocations."]},"id":207,"style":"Outer","span":{"lo":{"line":29,"col":0},"hi":{"line":29,"col":20},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0}],"index":[0,102]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0}],"index":[0,102]},"span":{"lo":{"line":55,"col":0},"hi":{"line":72,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"vis_span":{"lo":{"line":55,"col":0},"hi":{"line":72,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"kind":{"Trait":["No","Normal",{"params":[],"predicates":[],"bounds":[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0}],"index":[0,102]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}}]},"is_const":false,"is_positive":true}},"id":9900215877253420355}}],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":55,"col":23},"hi":{"line":55,"col":23},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":55,"col":23},"hi":{"line":55,"col":23},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0}],"index":[0,102]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}}]},"is_const":false,"is_positive":true}},"id":9900215877253420355}}],[{"ident":["PolicyType",{"lo":{"line":56,"col":9},"hi":{"line":56,"col":19},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"TypeNs":"PolicyType"},"disambiguator":0}],"index":[0,103]},"generics":{"params":[],"predicates":[],"bounds":[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasPolicy"},"disambiguator":0}],"index":[0,95]},"generic_args":[{"Type":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0}],"index":[0,102]},{"impl":{"LocalBound":{"clause_id":9900215877253420355,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"TypeNs":"PolicyType"},"disambiguator":0}],"index":[0,103]}}]}}]},"is_const":false,"is_positive":true}},"id":2875386292472038087}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"Sized"},"disambiguator":0}],"index":[1,2689]},"generic_args":[{"Type":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0}],"index":[0,102]},{"impl":{"LocalBound":{"clause_id":9900215877253420355,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"TypeNs":"PolicyType"},"disambiguator":0}],"index":[0,103]}}]}}]},"is_const":false,"is_positive":true}},"id":6518296602871724256}}],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":56,"col":30},"hi":{"line":56,"col":30},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":56,"col":19},"hi":{"line":56,"col":19},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"kind":{"Type":[[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasPolicy"},"disambiguator":0}],"index":[0,95]},"generic_args":[{"Type":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0}],"index":[0,102]},{"impl":{"LocalBound":{"clause_id":9900215877253420355,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"TypeNs":"PolicyType"},"disambiguator":0}],"index":[0,103]}}]}}]},"is_const":false,"is_positive":true}},"id":2875386292472038087}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"Sized"},"disambiguator":0}],"index":[1,2689]},"generic_args":[{"Type":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0}],"index":[0,102]},{"impl":{"LocalBound":{"clause_id":9900215877253420355,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"TypeNs":"PolicyType"},"disambiguator":0}],"index":[0,103]}}]}}]},"is_const":false,"is_positive":true}},"id":6518296602871724256}}],null]},"span":{"lo":{"line":56,"col":4},"hi":{"line":56,"col":31},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"defaultness":{"Default":{"has_value":false}},"attributes":{"attributes":[],"parent_attributes":[{"kind":{"DocComment":["Line"," Common data accessible to both init and receive methods."]},"id":224,"style":"Outer","span":{"lo":{"line":54,"col":0},"hi":{"line":54,"col":60},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}},{"ident":["MetadataType",{"lo":{"line":57,"col":9},"hi":{"line":57,"col":21},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"TypeNs":"MetadataType"},"disambiguator":0}],"index":[0,104]},"generics":{"params":[],"predicates":[],"bounds":[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasChainMetadata"},"disambiguator":0}],"index":[0,93]},"generic_args":[{"Type":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0}],"index":[0,102]},{"impl":{"LocalBound":{"clause_id":9900215877253420355,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"TypeNs":"MetadataType"},"disambiguator":0}],"index":[0,104]}}]}}]},"is_const":false,"is_positive":true}},"id":1873832837790077758}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"Sized"},"disambiguator":0}],"index":[1,2689]},"generic_args":[{"Type":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0}],"index":[0,102]},{"impl":{"LocalBound":{"clause_id":9900215877253420355,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"TypeNs":"MetadataType"},"disambiguator":0}],"index":[0,104]}}]}}]},"is_const":false,"is_positive":true}},"id":5350708720984506472}}],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":57,"col":39},"hi":{"line":57,"col":39},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":57,"col":21},"hi":{"line":57,"col":21},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"kind":{"Type":[[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasChainMetadata"},"disambiguator":0}],"index":[0,93]},"generic_args":[{"Type":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0}],"index":[0,102]},{"impl":{"LocalBound":{"clause_id":9900215877253420355,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"TypeNs":"MetadataType"},"disambiguator":0}],"index":[0,104]}}]}}]},"is_const":false,"is_positive":true}},"id":1873832837790077758}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"Sized"},"disambiguator":0}],"index":[1,2689]},"generic_args":[{"Type":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0}],"index":[0,102]},{"impl":{"LocalBound":{"clause_id":9900215877253420355,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"TypeNs":"MetadataType"},"disambiguator":0}],"index":[0,104]}}]}}]},"is_const":false,"is_positive":true}},"id":5350708720984506472}}],null]},"span":{"lo":{"line":57,"col":4},"hi":{"line":57,"col":40},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"defaultness":{"Default":{"has_value":false}},"attributes":{"attributes":[],"parent_attributes":[{"kind":{"DocComment":["Line"," Common data accessible to both init and receive methods."]},"id":224,"style":"Outer","span":{"lo":{"line":54,"col":0},"hi":{"line":54,"col":60},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}},{"ident":["ParamType",{"lo":{"line":58,"col":9},"hi":{"line":58,"col":18},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"TypeNs":"ParamType"},"disambiguator":0}],"index":[0,105]},"generics":{"params":[],"predicates":[],"bounds":[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"concordium_contracts_common","path":[{"data":{"TypeNs":"traits"},"disambiguator":0},{"data":{"TypeNs":"Read"},"disambiguator":0}],"index":[5,26]},"generic_args":[{"Type":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0}],"index":[0,102]},{"impl":{"LocalBound":{"clause_id":9900215877253420355,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"TypeNs":"ParamType"},"disambiguator":0}],"index":[0,105]}}]}}]},"is_const":false,"is_positive":true}},"id":1840492096314216500}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasParameter"},"disambiguator":0}],"index":[0,91]},"generic_args":[{"Type":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0}],"index":[0,102]},{"impl":{"LocalBound":{"clause_id":9900215877253420355,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"TypeNs":"ParamType"},"disambiguator":0}],"index":[0,105]}}]}}]},"is_const":false,"is_positive":true}},"id":6955721314586481954}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"Sized"},"disambiguator":0}],"index":[1,2689]},"generic_args":[{"Type":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0}],"index":[0,102]},{"impl":{"LocalBound":{"clause_id":9900215877253420355,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"TypeNs":"ParamType"},"disambiguator":0}],"index":[0,105]}}]}}]},"is_const":false,"is_positive":true}},"id":13512498811560697081}}],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":58,"col":39},"hi":{"line":58,"col":39},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":58,"col":18},"hi":{"line":58,"col":18},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"kind":{"Type":[[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"concordium_contracts_common","path":[{"data":{"TypeNs":"traits"},"disambiguator":0},{"data":{"TypeNs":"Read"},"disambiguator":0}],"index":[5,26]},"generic_args":[{"Type":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0}],"index":[0,102]},{"impl":{"LocalBound":{"clause_id":9900215877253420355,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"TypeNs":"ParamType"},"disambiguator":0}],"index":[0,105]}}]}}]},"is_const":false,"is_positive":true}},"id":1840492096314216500}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasParameter"},"disambiguator":0}],"index":[0,91]},"generic_args":[{"Type":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0}],"index":[0,102]},{"impl":{"LocalBound":{"clause_id":9900215877253420355,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"TypeNs":"ParamType"},"disambiguator":0}],"index":[0,105]}}]}}]},"is_const":false,"is_positive":true}},"id":6955721314586481954}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"Sized"},"disambiguator":0}],"index":[1,2689]},"generic_args":[{"Type":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0}],"index":[0,102]},{"impl":{"LocalBound":{"clause_id":9900215877253420355,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"TypeNs":"ParamType"},"disambiguator":0}],"index":[0,105]}}]}}]},"is_const":false,"is_positive":true}},"id":13512498811560697081}}],null]},"span":{"lo":{"line":58,"col":4},"hi":{"line":58,"col":40},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"defaultness":{"Default":{"has_value":false}},"attributes":{"attributes":[],"parent_attributes":[{"kind":{"DocComment":["Line"," Common data accessible to both init and receive methods."]},"id":224,"style":"Outer","span":{"lo":{"line":54,"col":0},"hi":{"line":54,"col":60},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}},{"ident":["PolicyIteratorType",{"lo":{"line":59,"col":9},"hi":{"line":59,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"TypeNs":"PolicyIteratorType"},"disambiguator":0}],"index":[0,106]},"generics":{"params":[],"predicates":[],"bounds":[{"Clause":{"kind":{"Projection":{"projection_ty":{"substs":[{"Type":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0}],"index":[0,102]},{"impl":{"LocalBound":{"clause_id":9900215877253420355,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"TypeNs":"PolicyIteratorType"},"disambiguator":0}],"index":[0,106]}}]}}],"trait_def_id":[{"krate":"core","path":[{"data":{"TypeNs":"iter"},"disambiguator":0},{"data":{"TypeNs":"traits"},"disambiguator":0},{"data":{"TypeNs":"iterator"},"disambiguator":0},{"data":{"TypeNs":"Iterator"},"disambiguator":0}],"index":[1,7315]},{"impl":{"LocalBound":{"clause_id":9900215877253420355,"path":[{"AssocItem":[{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"TypeNs":"PolicyIteratorType"},"disambiguator":0}],"index":[0,106]},"name":"PolicyIteratorType","kind":"Type","container":"TraitContainer","trait_item_def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"TypeNs":"PolicyIteratorType"},"disambiguator":0}],"index":[0,106]},"fn_has_self_parameter":false,"opt_rpitit_info":null},{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"iter"},"disambiguator":0},{"data":{"TypeNs":"traits"},"disambiguator":0},{"data":{"TypeNs":"exact_size"},"disambiguator":0},{"data":{"TypeNs":"ExactSizeIterator"},"disambiguator":0}],"index":[1,7260]},"generic_args":[{"Type":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0}],"index":[0,102]},{"impl":{"LocalBound":{"clause_id":9900215877253420355,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"TypeNs":"PolicyIteratorType"},"disambiguator":0}],"index":[0,106]}}]}}]},"is_const":false,"is_positive":true}]},{"Parent":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"iter"},"disambiguator":0},{"data":{"TypeNs":"traits"},"disambiguator":0},{"data":{"TypeNs":"iterator"},"disambiguator":0},{"data":{"TypeNs":"Iterator"},"disambiguator":0}],"index":[1,7315]},"generic_args":[{"Type":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0}],"index":[0,102]},{"impl":{"LocalBound":{"clause_id":9900215877253420355,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"TypeNs":"PolicyIteratorType"},"disambiguator":0}],"index":[0,106]}}]}}]},"is_const":false,"is_positive":true}}]}},"args":[]}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"iter"},"disambiguator":0},{"data":{"TypeNs":"traits"},"disambiguator":0},{"data":{"TypeNs":"iterator"},"disambiguator":0},{"data":{"TypeNs":"Iterator"},"disambiguator":0},{"data":{"TypeNs":"Item"},"disambiguator":0}],"index":[1,7316]}},"term":{"Ty":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0}],"index":[0,102]},{"impl":{"LocalBound":{"clause_id":9900215877253420355,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"TypeNs":"PolicyType"},"disambiguator":0}],"index":[0,103]}}]}}}},"id":16765557715264579028}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"iter"},"disambiguator":0},{"data":{"TypeNs":"traits"},"disambiguator":0},{"data":{"TypeNs":"exact_size"},"disambiguator":0},{"data":{"TypeNs":"ExactSizeIterator"},"disambiguator":0}],"index":[1,7260]},"generic_args":[{"Type":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0}],"index":[0,102]},{"impl":{"LocalBound":{"clause_id":9900215877253420355,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"TypeNs":"PolicyIteratorType"},"disambiguator":0}],"index":[0,106]}}]}}]},"is_const":false,"is_positive":true}},"id":2524192090353092294}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"iter"},"disambiguator":0},{"data":{"TypeNs":"traits"},"disambiguator":0},{"data":{"TypeNs":"iterator"},"disambiguator":0},{"data":{"TypeNs":"Iterator"},"disambiguator":0}],"index":[1,7315]},"generic_args":[{"Type":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0}],"index":[0,102]},{"impl":{"LocalBound":{"clause_id":9900215877253420355,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"TypeNs":"PolicyIteratorType"},"disambiguator":0}],"index":[0,106]}}]}}]},"is_const":false,"is_positive":true}},"id":7479269235389803660}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"Sized"},"disambiguator":0}],"index":[1,2689]},"generic_args":[{"Type":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0}],"index":[0,102]},{"impl":{"LocalBound":{"clause_id":9900215877253420355,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"TypeNs":"PolicyIteratorType"},"disambiguator":0}],"index":[0,106]}}]}}]},"is_const":false,"is_positive":true}},"id":10873437583130849907}}],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":59,"col":71},"hi":{"line":59,"col":71},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":59,"col":27},"hi":{"line":59,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"kind":{"Type":[[{"Clause":{"kind":{"Projection":{"projection_ty":{"substs":[{"Type":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0}],"index":[0,102]},{"impl":{"LocalBound":{"clause_id":9900215877253420355,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"TypeNs":"PolicyIteratorType"},"disambiguator":0}],"index":[0,106]}}]}}],"trait_def_id":[{"krate":"core","path":[{"data":{"TypeNs":"iter"},"disambiguator":0},{"data":{"TypeNs":"traits"},"disambiguator":0},{"data":{"TypeNs":"iterator"},"disambiguator":0},{"data":{"TypeNs":"Iterator"},"disambiguator":0}],"index":[1,7315]},{"impl":{"LocalBound":{"clause_id":9900215877253420355,"path":[{"AssocItem":[{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"TypeNs":"PolicyIteratorType"},"disambiguator":0}],"index":[0,106]},"name":"PolicyIteratorType","kind":"Type","container":"TraitContainer","trait_item_def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"TypeNs":"PolicyIteratorType"},"disambiguator":0}],"index":[0,106]},"fn_has_self_parameter":false,"opt_rpitit_info":null},{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"iter"},"disambiguator":0},{"data":{"TypeNs":"traits"},"disambiguator":0},{"data":{"TypeNs":"exact_size"},"disambiguator":0},{"data":{"TypeNs":"ExactSizeIterator"},"disambiguator":0}],"index":[1,7260]},"generic_args":[{"Type":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0}],"index":[0,102]},{"impl":{"LocalBound":{"clause_id":9900215877253420355,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"TypeNs":"PolicyIteratorType"},"disambiguator":0}],"index":[0,106]}}]}}]},"is_const":false,"is_positive":true}]},{"Parent":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"iter"},"disambiguator":0},{"data":{"TypeNs":"traits"},"disambiguator":0},{"data":{"TypeNs":"iterator"},"disambiguator":0},{"data":{"TypeNs":"Iterator"},"disambiguator":0}],"index":[1,7315]},"generic_args":[{"Type":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0}],"index":[0,102]},{"impl":{"LocalBound":{"clause_id":9900215877253420355,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"TypeNs":"PolicyIteratorType"},"disambiguator":0}],"index":[0,106]}}]}}]},"is_const":false,"is_positive":true}}]}},"args":[]}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"iter"},"disambiguator":0},{"data":{"TypeNs":"traits"},"disambiguator":0},{"data":{"TypeNs":"iterator"},"disambiguator":0},{"data":{"TypeNs":"Iterator"},"disambiguator":0},{"data":{"TypeNs":"Item"},"disambiguator":0}],"index":[1,7316]}},"term":{"Ty":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0}],"index":[0,102]},{"impl":{"LocalBound":{"clause_id":9900215877253420355,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"TypeNs":"PolicyType"},"disambiguator":0}],"index":[0,103]}}]}}}},"id":16765557715264579028}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"iter"},"disambiguator":0},{"data":{"TypeNs":"traits"},"disambiguator":0},{"data":{"TypeNs":"exact_size"},"disambiguator":0},{"data":{"TypeNs":"ExactSizeIterator"},"disambiguator":0}],"index":[1,7260]},"generic_args":[{"Type":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0}],"index":[0,102]},{"impl":{"LocalBound":{"clause_id":9900215877253420355,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"TypeNs":"PolicyIteratorType"},"disambiguator":0}],"index":[0,106]}}]}}]},"is_const":false,"is_positive":true}},"id":2524192090353092294}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"iter"},"disambiguator":0},{"data":{"TypeNs":"traits"},"disambiguator":0},{"data":{"TypeNs":"iterator"},"disambiguator":0},{"data":{"TypeNs":"Iterator"},"disambiguator":0}],"index":[1,7315]},"generic_args":[{"Type":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0}],"index":[0,102]},{"impl":{"LocalBound":{"clause_id":9900215877253420355,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"TypeNs":"PolicyIteratorType"},"disambiguator":0}],"index":[0,106]}}]}}]},"is_const":false,"is_positive":true}},"id":7479269235389803660}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"Sized"},"disambiguator":0}],"index":[1,2689]},"generic_args":[{"Type":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0}],"index":[0,102]},{"impl":{"LocalBound":{"clause_id":9900215877253420355,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"TypeNs":"PolicyIteratorType"},"disambiguator":0}],"index":[0,106]}}]}}]},"is_const":false,"is_positive":true}},"id":10873437583130849907}}],null]},"span":{"lo":{"line":59,"col":4},"hi":{"line":59,"col":72},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"defaultness":{"Default":{"has_value":false}},"attributes":{"attributes":[],"parent_attributes":[{"kind":{"DocComment":["Line"," Common data accessible to both init and receive methods."]},"id":224,"style":"Outer","span":{"lo":{"line":54,"col":0},"hi":{"line":54,"col":60},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}},{"ident":["policies",{"lo":{"line":67,"col":7},"hi":{"line":67,"col":15},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"ValueNs":"policies"},"disambiguator":0}],"index":[0,107]},"generics":{"params":[{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"ValueNs":"policies"},"disambiguator":0}],"index":[0,107]},"local_id":1},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"ValueNs":"policies"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,248]},"name":"Fresh","span":{"lo":{"line":67,"col":16},"hi":{"line":67,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]}],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":67,"col":50},"hi":{"line":67,"col":50},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":67,"col":15},"hi":{"line":67,"col":15},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"kind":{"RequiredFn":[{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"decl":{"inputs":[{"Ref":[{"kind":{"ReLateBound":[0,{"var":0,"kind":{"BrNamed":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"ValueNs":"policies"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,248]},"'_"]}}]}},{"Param":{"index":0,"name":"Self"}},false]}],"output":{"Return":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0}],"index":[0,102]},{"impl":{"LocalBound":{"clause_id":9900215877253420355,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"TypeNs":"PolicyIteratorType"},"disambiguator":0}],"index":[0,106]}}]}},"c_variadic":false,"implicit_self":"ImmRef","lifetime_elision_allowed":true},"span":{"lo":{"line":67,"col":4},"hi":{"line":67,"col":51},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[["self",{"lo":{"line":67,"col":17},"hi":{"line":67,"col":21},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}]]]},"span":{"lo":{"line":67,"col":4},"hi":{"line":67,"col":51},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"defaultness":{"Default":{"has_value":false}},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Policies of the sender of the message."]},"id":225,"style":"Outer","span":{"lo":{"line":60,"col":4},"hi":{"line":60,"col":46},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," For init methods this is the would-be creator of the contract,"]},"id":226,"style":"Outer","span":{"lo":{"line":61,"col":4},"hi":{"line":61,"col":70},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," for the receive this is the policies of the immediate sender."]},"id":227,"style":"Outer","span":{"lo":{"line":62,"col":4},"hi":{"line":62,"col":69},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line",""]},"id":228,"style":"Outer","span":{"lo":{"line":63,"col":4},"hi":{"line":63,"col":7},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," In the latter case, if the sender is an account then it is the policies"]},"id":229,"style":"Outer","span":{"lo":{"line":64,"col":4},"hi":{"line":64,"col":79},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," of the account, if it is a contract then it is the policies of the"]},"id":230,"style":"Outer","span":{"lo":{"line":65,"col":4},"hi":{"line":65,"col":74},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," creator of the contract."]},"id":231,"style":"Outer","span":{"lo":{"line":66,"col":4},"hi":{"line":66,"col":32},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"DocComment":["Line"," Common data accessible to both init and receive methods."]},"id":224,"style":"Outer","span":{"lo":{"line":54,"col":0},"hi":{"line":54,"col":60},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}},{"ident":["metadata",{"lo":{"line":69,"col":7},"hi":{"line":69,"col":15},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"ValueNs":"metadata"},"disambiguator":0}],"index":[0,108]},"generics":{"params":[{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"ValueNs":"metadata"},"disambiguator":0}],"index":[0,108]},"local_id":1},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"ValueNs":"metadata"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,249]},"name":"Fresh","span":{"lo":{"line":69,"col":16},"hi":{"line":69,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]}],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":69,"col":45},"hi":{"line":69,"col":45},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":69,"col":15},"hi":{"line":69,"col":15},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"kind":{"RequiredFn":[{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"decl":{"inputs":[{"Ref":[{"kind":{"ReLateBound":[0,{"var":0,"kind":{"BrNamed":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"ValueNs":"metadata"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,249]},"'_"]}}]}},{"Param":{"index":0,"name":"Self"}},false]}],"output":{"Return":{"Ref":[{"kind":{"ReLateBound":[0,{"var":0,"kind":{"BrNamed":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"ValueNs":"metadata"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,249]},"'_"]}}]}},{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0}],"index":[0,102]},{"impl":{"LocalBound":{"clause_id":9900215877253420355,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"TypeNs":"MetadataType"},"disambiguator":0}],"index":[0,104]}}]},false]}},"c_variadic":false,"implicit_self":"ImmRef","lifetime_elision_allowed":true},"span":{"lo":{"line":69,"col":4},"hi":{"line":69,"col":46},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[["self",{"lo":{"line":69,"col":17},"hi":{"line":69,"col":21},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}]]]},"span":{"lo":{"line":69,"col":4},"hi":{"line":69,"col":46},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"defaultness":{"Default":{"has_value":false}},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Get the reference to chain metadata"]},"id":232,"style":"Outer","span":{"lo":{"line":68,"col":4},"hi":{"line":68,"col":43},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"DocComment":["Line"," Common data accessible to both init and receive methods."]},"id":224,"style":"Outer","span":{"lo":{"line":54,"col":0},"hi":{"line":54,"col":60},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}},{"ident":["parameter_cursor",{"lo":{"line":71,"col":7},"hi":{"line":71,"col":23},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"ValueNs":"parameter_cursor"},"disambiguator":0}],"index":[0,109]},"generics":{"params":[{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"ValueNs":"parameter_cursor"},"disambiguator":0}],"index":[0,109]},"local_id":1},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"ValueNs":"parameter_cursor"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,250]},"name":"Fresh","span":{"lo":{"line":71,"col":24},"hi":{"line":71,"col":25},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]}],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":71,"col":49},"hi":{"line":71,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":71,"col":23},"hi":{"line":71,"col":23},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"kind":{"RequiredFn":[{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"decl":{"inputs":[{"Ref":[{"kind":{"ReLateBound":[0,{"var":0,"kind":{"BrNamed":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"ValueNs":"parameter_cursor"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,250]},"'_"]}}]}},{"Param":{"index":0,"name":"Self"}},false]}],"output":{"Return":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0}],"index":[0,102]},{"impl":{"LocalBound":{"clause_id":9900215877253420355,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"TypeNs":"ParamType"},"disambiguator":0}],"index":[0,105]}}]}},"c_variadic":false,"implicit_self":"ImmRef","lifetime_elision_allowed":true},"span":{"lo":{"line":71,"col":4},"hi":{"line":71,"col":50},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[["self",{"lo":{"line":71,"col":25},"hi":{"line":71,"col":29},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}]]]},"span":{"lo":{"line":71,"col":4},"hi":{"line":71,"col":50},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"defaultness":{"Default":{"has_value":false}},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Get the cursor to the parameter."]},"id":233,"style":"Outer","span":{"lo":{"line":70,"col":4},"hi":{"line":70,"col":40},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"DocComment":["Line"," Common data accessible to both init and receive methods."]},"id":224,"style":"Outer","span":{"lo":{"line":54,"col":0},"hi":{"line":54,"col":60},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}}]]},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Common data accessible to both init and receive methods."]},"id":224,"style":"Outer","span":{"lo":{"line":54,"col":0},"hi":{"line":54,"col":60},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasInitContext"},"disambiguator":0}],"index":[0,110]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasInitContext"},"disambiguator":0}],"index":[0,110]},"span":{"lo":{"line":76,"col":0},"hi":{"line":83,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"vis_span":{"lo":{"line":76,"col":0},"hi":{"line":83,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"kind":{"Trait":["No","Normal",{"params":[{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasInitContext"},"disambiguator":0}],"index":[0,110]},"local_id":7},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasInitContext"},"disambiguator":0},{"data":{"TypeNs":"Error"},"disambiguator":0}],"index":[0,111]},"name":{"Plain":{"name":"Error","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasInitContext"},"disambiguator":0}],"index":[0,110]},"local_id":7}}},"span":{"lo":{"line":76,"col":25},"hi":{"line":76,"col":44},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"pure_wrt_drop":false,"kind":{"Type":{"default":{"Tuple":[]},"synthetic":false}},"colon_span":{"lo":{"line":76,"col":30},"hi":{"line":76,"col":31},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"attributes":[]}],"predicates":[{"BoundPredicate":{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasInitContext"},"disambiguator":0}],"index":[0,110]},"local_id":5},"span":{"lo":{"line":76,"col":30},"hi":{"line":76,"col":39},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"origin":"GenericParam","bound_generic_params":[],"bounded_ty":{"Param":{"index":1,"name":"Error"}}}}],"bounds":[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0}],"index":[0,102]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}}]},"is_const":false,"is_positive":true}},"id":9900215877253420355}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"Sized"},"disambiguator":0}],"index":[1,2689]},"generic_args":[{"Type":{"Param":{"index":1,"name":"Error"}}}]},"is_const":false,"is_positive":true}},"id":13656839978771590325}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"default"},"disambiguator":0},{"data":{"TypeNs":"Default"},"disambiguator":0}],"index":[1,2587]},"generic_args":[{"Type":{"Param":{"index":1,"name":"Error"}}}]},"is_const":false,"is_positive":true}},"id":468573141220163386}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasInitContext"},"disambiguator":0}],"index":[0,110]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}},{"Type":{"Param":{"index":1,"name":"Error"}}}]},"is_const":false,"is_positive":true}},"id":6451289350237964709}}],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":76,"col":60},"hi":{"line":76,"col":60},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":76,"col":24},"hi":{"line":76,"col":45},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0}],"index":[0,102]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}}]},"is_const":false,"is_positive":true}},"id":9900215877253420355}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"Sized"},"disambiguator":0}],"index":[1,2689]},"generic_args":[{"Type":{"Param":{"index":1,"name":"Error"}}}]},"is_const":false,"is_positive":true}},"id":13656839978771590325}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"default"},"disambiguator":0},{"data":{"TypeNs":"Default"},"disambiguator":0}],"index":[1,2587]},"generic_args":[{"Type":{"Param":{"index":1,"name":"Error"}}}]},"is_const":false,"is_positive":true}},"id":468573141220163386}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasInitContext"},"disambiguator":0}],"index":[0,110]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}},{"Type":{"Param":{"index":1,"name":"Error"}}}]},"is_const":false,"is_positive":true}},"id":6451289350237964709}}],[{"ident":["InitData",{"lo":{"line":78,"col":9},"hi":{"line":78,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasInitContext"},"disambiguator":0},{"data":{"TypeNs":"InitData"},"disambiguator":0}],"index":[0,112]},"generics":{"params":[],"predicates":[],"bounds":[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"Sized"},"disambiguator":0}],"index":[1,2689]},"generic_args":[{"Type":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}},{"Type":{"Param":{"index":1,"name":"Error"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasInitContext"},"disambiguator":0}],"index":[0,110]},{"impl":{"LocalBound":{"clause_id":6451289350237964709,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasInitContext"},"disambiguator":0},{"data":{"TypeNs":"InitData"},"disambiguator":0}],"index":[0,112]}}]}}]},"is_const":false,"is_positive":true}},"id":12058970868310053901}}],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":78,"col":17},"hi":{"line":78,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":78,"col":17},"hi":{"line":78,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"kind":{"Type":[[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"Sized"},"disambiguator":0}],"index":[1,2689]},"generic_args":[{"Type":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}},{"Type":{"Param":{"index":1,"name":"Error"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasInitContext"},"disambiguator":0}],"index":[0,110]},{"impl":{"LocalBound":{"clause_id":6451289350237964709,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasInitContext"},"disambiguator":0},{"data":{"TypeNs":"InitData"},"disambiguator":0}],"index":[0,112]}}]}}]},"is_const":false,"is_positive":true}},"id":12058970868310053901}}],null]},"span":{"lo":{"line":78,"col":4},"hi":{"line":78,"col":18},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"defaultness":{"Default":{"has_value":false}},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Data needed to open the context."]},"id":235,"style":"Outer","span":{"lo":{"line":77,"col":4},"hi":{"line":77,"col":40},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"DocComment":["Line"," Types which can act as init contexts."]},"id":234,"style":"Outer","span":{"lo":{"line":75,"col":0},"hi":{"line":75,"col":41},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}},{"ident":["open",{"lo":{"line":80,"col":7},"hi":{"line":80,"col":11},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasInitContext"},"disambiguator":0},{"data":{"ValueNs":"open"},"disambiguator":0}],"index":[0,113]},"generics":{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":80,"col":41},"hi":{"line":80,"col":41},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":80,"col":11},"hi":{"line":80,"col":11},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"kind":{"RequiredFn":[{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"decl":{"inputs":[{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}},{"Type":{"Param":{"index":1,"name":"Error"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasInitContext"},"disambiguator":0}],"index":[0,110]},{"impl":{"LocalBound":{"clause_id":6451289350237964709,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasInitContext"},"disambiguator":0},{"data":{"TypeNs":"InitData"},"disambiguator":0}],"index":[0,112]}}]}],"output":{"Return":{"Param":{"index":0,"name":"Self"}}},"c_variadic":false,"implicit_self":"None","lifetime_elision_allowed":false},"span":{"lo":{"line":80,"col":4},"hi":{"line":80,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[["data",{"lo":{"line":80,"col":12},"hi":{"line":80,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}]]]},"span":{"lo":{"line":80,"col":4},"hi":{"line":80,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"defaultness":{"Default":{"has_value":false}},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Open the init context for reading and accessing values."]},"id":236,"style":"Outer","span":{"lo":{"line":79,"col":4},"hi":{"line":79,"col":63},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"DocComment":["Line"," Types which can act as init contexts."]},"id":234,"style":"Outer","span":{"lo":{"line":75,"col":0},"hi":{"line":75,"col":41},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}},{"ident":["init_origin",{"lo":{"line":82,"col":7},"hi":{"line":82,"col":18},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasInitContext"},"disambiguator":0},{"data":{"ValueNs":"init_origin"},"disambiguator":0}],"index":[0,114]},"generics":{"params":[{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasInitContext"},"disambiguator":0},{"data":{"ValueNs":"init_origin"},"disambiguator":0}],"index":[0,114]},"local_id":1},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasInitContext"},"disambiguator":0},{"data":{"ValueNs":"init_origin"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,251]},"name":"Fresh","span":{"lo":{"line":82,"col":19},"hi":{"line":82,"col":20},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]}],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":82,"col":43},"hi":{"line":82,"col":43},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":82,"col":18},"hi":{"line":82,"col":18},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"kind":{"RequiredFn":[{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"decl":{"inputs":[{"Ref":[{"kind":{"ReLateBound":[0,{"var":0,"kind":{"BrNamed":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasInitContext"},"disambiguator":0},{"data":{"ValueNs":"init_origin"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,251]},"'_"]}}]}},{"Param":{"index":0,"name":"Self"}},false]}],"output":{"Return":{"Adt":{"generic_args":[],"def_id":{"krate":"concordium_contracts_common","path":[{"data":{"TypeNs":"types"},"disambiguator":0},{"data":{"TypeNs":"AccountAddress"},"disambiguator":0}],"index":[5,964]}}}},"c_variadic":false,"implicit_self":"ImmRef","lifetime_elision_allowed":true},"span":{"lo":{"line":82,"col":4},"hi":{"line":82,"col":44},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[["self",{"lo":{"line":82,"col":20},"hi":{"line":82,"col":24},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}]]]},"span":{"lo":{"line":82,"col":4},"hi":{"line":82,"col":44},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"defaultness":{"Default":{"has_value":false}},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Who invoked this init call."]},"id":237,"style":"Outer","span":{"lo":{"line":81,"col":4},"hi":{"line":81,"col":35},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"DocComment":["Line"," Types which can act as init contexts."]},"id":234,"style":"Outer","span":{"lo":{"line":75,"col":0},"hi":{"line":75,"col":41},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}}]]},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Types which can act as init contexts."]},"id":234,"style":"Outer","span":{"lo":{"line":75,"col":0},"hi":{"line":75,"col":41},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasReceiveContext"},"disambiguator":0}],"index":[0,115]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasReceiveContext"},"disambiguator":0}],"index":[0,115]},"span":{"lo":{"line":87,"col":0},"hi":{"line":104,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"vis_span":{"lo":{"line":87,"col":0},"hi":{"line":104,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"kind":{"Trait":["No","Normal",{"params":[{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasReceiveContext"},"disambiguator":0}],"index":[0,115]},"local_id":7},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasReceiveContext"},"disambiguator":0},{"data":{"TypeNs":"Error"},"disambiguator":0}],"index":[0,116]},"name":{"Plain":{"name":"Error","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasReceiveContext"},"disambiguator":0}],"index":[0,115]},"local_id":7}}},"span":{"lo":{"line":87,"col":28},"hi":{"line":87,"col":47},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"pure_wrt_drop":false,"kind":{"Type":{"default":{"Tuple":[]},"synthetic":false}},"colon_span":{"lo":{"line":87,"col":33},"hi":{"line":87,"col":34},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"attributes":[]}],"predicates":[{"BoundPredicate":{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasReceiveContext"},"disambiguator":0}],"index":[0,115]},"local_id":5},"span":{"lo":{"line":87,"col":33},"hi":{"line":87,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"origin":"GenericParam","bound_generic_params":[],"bounded_ty":{"Param":{"index":1,"name":"Error"}}}}],"bounds":[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0}],"index":[0,102]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}}]},"is_const":false,"is_positive":true}},"id":9900215877253420355}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"Sized"},"disambiguator":0}],"index":[1,2689]},"generic_args":[{"Type":{"Param":{"index":1,"name":"Error"}}}]},"is_const":false,"is_positive":true}},"id":13656839978771590325}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"default"},"disambiguator":0},{"data":{"TypeNs":"Default"},"disambiguator":0}],"index":[1,2587]},"generic_args":[{"Type":{"Param":{"index":1,"name":"Error"}}}]},"is_const":false,"is_positive":true}},"id":468573141220163386}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasReceiveContext"},"disambiguator":0}],"index":[0,115]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}},{"Type":{"Param":{"index":1,"name":"Error"}}}]},"is_const":false,"is_positive":true}},"id":3139667756981812396}}],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":87,"col":63},"hi":{"line":87,"col":63},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":87,"col":27},"hi":{"line":87,"col":48},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0}],"index":[0,102]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}}]},"is_const":false,"is_positive":true}},"id":9900215877253420355}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"Sized"},"disambiguator":0}],"index":[1,2689]},"generic_args":[{"Type":{"Param":{"index":1,"name":"Error"}}}]},"is_const":false,"is_positive":true}},"id":13656839978771590325}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"default"},"disambiguator":0},{"data":{"TypeNs":"Default"},"disambiguator":0}],"index":[1,2587]},"generic_args":[{"Type":{"Param":{"index":1,"name":"Error"}}}]},"is_const":false,"is_positive":true}},"id":468573141220163386}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasReceiveContext"},"disambiguator":0}],"index":[0,115]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}},{"Type":{"Param":{"index":1,"name":"Error"}}}]},"is_const":false,"is_positive":true}},"id":3139667756981812396}}],[{"ident":["ReceiveData",{"lo":{"line":88,"col":9},"hi":{"line":88,"col":20},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasReceiveContext"},"disambiguator":0},{"data":{"TypeNs":"ReceiveData"},"disambiguator":0}],"index":[0,117]},"generics":{"params":[],"predicates":[],"bounds":[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"Sized"},"disambiguator":0}],"index":[1,2689]},"generic_args":[{"Type":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}},{"Type":{"Param":{"index":1,"name":"Error"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasReceiveContext"},"disambiguator":0}],"index":[0,115]},{"impl":{"LocalBound":{"clause_id":3139667756981812396,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasReceiveContext"},"disambiguator":0},{"data":{"TypeNs":"ReceiveData"},"disambiguator":0}],"index":[0,117]}}]}}]},"is_const":false,"is_positive":true}},"id":16141720423459337414}}],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":88,"col":20},"hi":{"line":88,"col":20},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":88,"col":20},"hi":{"line":88,"col":20},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"kind":{"Type":[[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"Sized"},"disambiguator":0}],"index":[1,2689]},"generic_args":[{"Type":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}},{"Type":{"Param":{"index":1,"name":"Error"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasReceiveContext"},"disambiguator":0}],"index":[0,115]},{"impl":{"LocalBound":{"clause_id":3139667756981812396,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasReceiveContext"},"disambiguator":0},{"data":{"TypeNs":"ReceiveData"},"disambiguator":0}],"index":[0,117]}}]}}]},"is_const":false,"is_positive":true}},"id":16141720423459337414}}],null]},"span":{"lo":{"line":88,"col":4},"hi":{"line":88,"col":21},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"defaultness":{"Default":{"has_value":false}},"attributes":{"attributes":[],"parent_attributes":[{"kind":{"DocComment":["Line"," Types which can act as receive contexts."]},"id":238,"style":"Outer","span":{"lo":{"line":86,"col":0},"hi":{"line":86,"col":44},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}},{"ident":["open",{"lo":{"line":91,"col":7},"hi":{"line":91,"col":11},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasReceiveContext"},"disambiguator":0},{"data":{"ValueNs":"open"},"disambiguator":0}],"index":[0,118]},"generics":{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":91,"col":44},"hi":{"line":91,"col":44},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":91,"col":11},"hi":{"line":91,"col":11},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"kind":{"RequiredFn":[{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"decl":{"inputs":[{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}},{"Type":{"Param":{"index":1,"name":"Error"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasReceiveContext"},"disambiguator":0}],"index":[0,115]},{"impl":{"LocalBound":{"clause_id":3139667756981812396,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasReceiveContext"},"disambiguator":0},{"data":{"TypeNs":"ReceiveData"},"disambiguator":0}],"index":[0,117]}}]}],"output":{"Return":{"Param":{"index":0,"name":"Self"}}},"c_variadic":false,"implicit_self":"None","lifetime_elision_allowed":false},"span":{"lo":{"line":91,"col":4},"hi":{"line":91,"col":45},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[["data",{"lo":{"line":91,"col":12},"hi":{"line":91,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}]]]},"span":{"lo":{"line":91,"col":4},"hi":{"line":91,"col":45},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"defaultness":{"Default":{"has_value":false}},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Open the receive context for reading and accessing values."]},"id":239,"style":"Outer","span":{"lo":{"line":90,"col":4},"hi":{"line":90,"col":66},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"DocComment":["Line"," Types which can act as receive contexts."]},"id":238,"style":"Outer","span":{"lo":{"line":86,"col":0},"hi":{"line":86,"col":44},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}},{"ident":["invoker",{"lo":{"line":94,"col":7},"hi":{"line":94,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasReceiveContext"},"disambiguator":0},{"data":{"ValueNs":"invoker"},"disambiguator":0}],"index":[0,119]},"generics":{"params":[{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasReceiveContext"},"disambiguator":0},{"data":{"ValueNs":"invoker"},"disambiguator":0}],"index":[0,119]},"local_id":1},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasReceiveContext"},"disambiguator":0},{"data":{"ValueNs":"invoker"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,252]},"name":"Fresh","span":{"lo":{"line":94,"col":15},"hi":{"line":94,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]}],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":94,"col":39},"hi":{"line":94,"col":39},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":94,"col":14},"hi":{"line":94,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"kind":{"RequiredFn":[{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"decl":{"inputs":[{"Ref":[{"kind":{"ReLateBound":[0,{"var":0,"kind":{"BrNamed":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasReceiveContext"},"disambiguator":0},{"data":{"ValueNs":"invoker"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,252]},"'_"]}}]}},{"Param":{"index":0,"name":"Self"}},false]}],"output":{"Return":{"Adt":{"generic_args":[],"def_id":{"krate":"concordium_contracts_common","path":[{"data":{"TypeNs":"types"},"disambiguator":0},{"data":{"TypeNs":"AccountAddress"},"disambiguator":0}],"index":[5,964]}}}},"c_variadic":false,"implicit_self":"ImmRef","lifetime_elision_allowed":true},"span":{"lo":{"line":94,"col":4},"hi":{"line":94,"col":40},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[["self",{"lo":{"line":94,"col":16},"hi":{"line":94,"col":20},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}]]]},"span":{"lo":{"line":94,"col":4},"hi":{"line":94,"col":40},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"defaultness":{"Default":{"has_value":false}},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Who is the account that initiated the top-level transaction this"]},"id":240,"style":"Outer","span":{"lo":{"line":92,"col":4},"hi":{"line":92,"col":72},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," invocation is a part of."]},"id":241,"style":"Outer","span":{"lo":{"line":93,"col":4},"hi":{"line":93,"col":32},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"DocComment":["Line"," Types which can act as receive contexts."]},"id":238,"style":"Outer","span":{"lo":{"line":86,"col":0},"hi":{"line":86,"col":44},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}},{"ident":["self_address",{"lo":{"line":96,"col":7},"hi":{"line":96,"col":19},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasReceiveContext"},"disambiguator":0},{"data":{"ValueNs":"self_address"},"disambiguator":0}],"index":[0,120]},"generics":{"params":[{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasReceiveContext"},"disambiguator":0},{"data":{"ValueNs":"self_address"},"disambiguator":0}],"index":[0,120]},"local_id":1},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasReceiveContext"},"disambiguator":0},{"data":{"ValueNs":"self_address"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,253]},"name":"Fresh","span":{"lo":{"line":96,"col":20},"hi":{"line":96,"col":21},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]}],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":96,"col":45},"hi":{"line":96,"col":45},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":96,"col":19},"hi":{"line":96,"col":19},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"kind":{"RequiredFn":[{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"decl":{"inputs":[{"Ref":[{"kind":{"ReLateBound":[0,{"var":0,"kind":{"BrNamed":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasReceiveContext"},"disambiguator":0},{"data":{"ValueNs":"self_address"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,253]},"'_"]}}]}},{"Param":{"index":0,"name":"Self"}},false]}],"output":{"Return":{"Adt":{"generic_args":[],"def_id":{"krate":"concordium_contracts_common","path":[{"data":{"TypeNs":"types"},"disambiguator":0},{"data":{"TypeNs":"ContractAddress"},"disambiguator":0}],"index":[5,988]}}}},"c_variadic":false,"implicit_self":"ImmRef","lifetime_elision_allowed":true},"span":{"lo":{"line":96,"col":4},"hi":{"line":96,"col":46},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[["self",{"lo":{"line":96,"col":21},"hi":{"line":96,"col":25},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}]]]},"span":{"lo":{"line":96,"col":4},"hi":{"line":96,"col":46},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"defaultness":{"Default":{"has_value":false}},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," The address of the contract being invoked."]},"id":242,"style":"Outer","span":{"lo":{"line":95,"col":4},"hi":{"line":95,"col":50},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"DocComment":["Line"," Types which can act as receive contexts."]},"id":238,"style":"Outer","span":{"lo":{"line":86,"col":0},"hi":{"line":86,"col":44},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}},{"ident":["self_balance",{"lo":{"line":98,"col":7},"hi":{"line":98,"col":19},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasReceiveContext"},"disambiguator":0},{"data":{"ValueNs":"self_balance"},"disambiguator":0}],"index":[0,121]},"generics":{"params":[{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasReceiveContext"},"disambiguator":0},{"data":{"ValueNs":"self_balance"},"disambiguator":0}],"index":[0,121]},"local_id":1},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasReceiveContext"},"disambiguator":0},{"data":{"ValueNs":"self_balance"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,254]},"name":"Fresh","span":{"lo":{"line":98,"col":20},"hi":{"line":98,"col":21},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]}],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":98,"col":36},"hi":{"line":98,"col":36},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":98,"col":19},"hi":{"line":98,"col":19},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"kind":{"RequiredFn":[{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"decl":{"inputs":[{"Ref":[{"kind":{"ReLateBound":[0,{"var":0,"kind":{"BrNamed":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasReceiveContext"},"disambiguator":0},{"data":{"ValueNs":"self_balance"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,254]},"'_"]}}]}},{"Param":{"index":0,"name":"Self"}},false]}],"output":{"Return":{"Adt":{"generic_args":[],"def_id":{"krate":"concordium_contracts_common","path":[{"data":{"TypeNs":"types"},"disambiguator":0},{"data":{"TypeNs":"Amount"},"disambiguator":0}],"index":[5,862]}}}},"c_variadic":false,"implicit_self":"ImmRef","lifetime_elision_allowed":true},"span":{"lo":{"line":98,"col":4},"hi":{"line":98,"col":37},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[["self",{"lo":{"line":98,"col":21},"hi":{"line":98,"col":25},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}]]]},"span":{"lo":{"line":98,"col":4},"hi":{"line":98,"col":37},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"defaultness":{"Default":{"has_value":false}},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Balance on the contract before the call was made."]},"id":243,"style":"Outer","span":{"lo":{"line":97,"col":4},"hi":{"line":97,"col":57},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"DocComment":["Line"," Types which can act as receive contexts."]},"id":238,"style":"Outer","span":{"lo":{"line":86,"col":0},"hi":{"line":86,"col":44},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}},{"ident":["sender",{"lo":{"line":101,"col":7},"hi":{"line":101,"col":13},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasReceiveContext"},"disambiguator":0},{"data":{"ValueNs":"sender"},"disambiguator":0}],"index":[0,122]},"generics":{"params":[{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasReceiveContext"},"disambiguator":0},{"data":{"ValueNs":"sender"},"disambiguator":0}],"index":[0,122]},"local_id":1},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasReceiveContext"},"disambiguator":0},{"data":{"ValueNs":"sender"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,255]},"name":"Fresh","span":{"lo":{"line":101,"col":14},"hi":{"line":101,"col":15},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]}],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":101,"col":31},"hi":{"line":101,"col":31},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":101,"col":13},"hi":{"line":101,"col":13},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"kind":{"RequiredFn":[{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"decl":{"inputs":[{"Ref":[{"kind":{"ReLateBound":[0,{"var":0,"kind":{"BrNamed":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasReceiveContext"},"disambiguator":0},{"data":{"ValueNs":"sender"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,255]},"'_"]}}]}},{"Param":{"index":0,"name":"Self"}},false]}],"output":{"Return":{"Adt":{"generic_args":[],"def_id":{"krate":"concordium_contracts_common","path":[{"data":{"TypeNs":"types"},"disambiguator":0},{"data":{"TypeNs":"Address"},"disambiguator":0}],"index":[5,1009]}}}},"c_variadic":false,"implicit_self":"ImmRef","lifetime_elision_allowed":true},"span":{"lo":{"line":101,"col":4},"hi":{"line":101,"col":32},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[["self",{"lo":{"line":101,"col":15},"hi":{"line":101,"col":19},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}]]]},"span":{"lo":{"line":101,"col":4},"hi":{"line":101,"col":32},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"defaultness":{"Default":{"has_value":false}},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," The immediate sender of the message. In general different from the"]},"id":244,"style":"Outer","span":{"lo":{"line":99,"col":4},"hi":{"line":99,"col":74},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," invoker."]},"id":245,"style":"Outer","span":{"lo":{"line":100,"col":4},"hi":{"line":100,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"DocComment":["Line"," Types which can act as receive contexts."]},"id":238,"style":"Outer","span":{"lo":{"line":86,"col":0},"hi":{"line":86,"col":44},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}},{"ident":["owner",{"lo":{"line":103,"col":7},"hi":{"line":103,"col":12},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasReceiveContext"},"disambiguator":0},{"data":{"ValueNs":"owner"},"disambiguator":0}],"index":[0,123]},"generics":{"params":[{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasReceiveContext"},"disambiguator":0},{"data":{"ValueNs":"owner"},"disambiguator":0}],"index":[0,123]},"local_id":1},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasReceiveContext"},"disambiguator":0},{"data":{"ValueNs":"owner"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,256]},"name":"Fresh","span":{"lo":{"line":103,"col":13},"hi":{"line":103,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]}],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":103,"col":37},"hi":{"line":103,"col":37},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":103,"col":12},"hi":{"line":103,"col":12},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"kind":{"RequiredFn":[{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"decl":{"inputs":[{"Ref":[{"kind":{"ReLateBound":[0,{"var":0,"kind":{"BrNamed":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasReceiveContext"},"disambiguator":0},{"data":{"ValueNs":"owner"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,256]},"'_"]}}]}},{"Param":{"index":0,"name":"Self"}},false]}],"output":{"Return":{"Adt":{"generic_args":[],"def_id":{"krate":"concordium_contracts_common","path":[{"data":{"TypeNs":"types"},"disambiguator":0},{"data":{"TypeNs":"AccountAddress"},"disambiguator":0}],"index":[5,964]}}}},"c_variadic":false,"implicit_self":"ImmRef","lifetime_elision_allowed":true},"span":{"lo":{"line":103,"col":4},"hi":{"line":103,"col":38},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[["self",{"lo":{"line":103,"col":14},"hi":{"line":103,"col":18},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}]]]},"span":{"lo":{"line":103,"col":4},"hi":{"line":103,"col":38},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"defaultness":{"Default":{"has_value":false}},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Account which created the contract instance."]},"id":246,"style":"Outer","span":{"lo":{"line":102,"col":4},"hi":{"line":102,"col":52},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"DocComment":["Line"," Types which can act as receive contexts."]},"id":238,"style":"Outer","span":{"lo":{"line":86,"col":0},"hi":{"line":86,"col":44},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}}]]},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Types which can act as receive contexts."]},"id":238,"style":"Outer","span":{"lo":{"line":86,"col":0},"hi":{"line":86,"col":44},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasContractState"},"disambiguator":0}],"index":[0,124]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasContractState"},"disambiguator":0}],"index":[0,124]},"span":{"lo":{"line":108,"col":0},"hi":{"line":130,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"vis_span":{"lo":{"line":108,"col":0},"hi":{"line":130,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"kind":{"Trait":["No","Normal",{"params":[{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasContractState"},"disambiguator":0}],"index":[0,124]},"local_id":28},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasContractState"},"disambiguator":0},{"data":{"TypeNs":"Error"},"disambiguator":0}],"index":[0,125]},"name":{"Plain":{"name":"Error","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasContractState"},"disambiguator":0}],"index":[0,124]},"local_id":28}}},"span":{"lo":{"line":108,"col":27},"hi":{"line":108,"col":46},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"pure_wrt_drop":false,"kind":{"Type":{"default":{"Tuple":[]},"synthetic":false}},"colon_span":{"lo":{"line":108,"col":32},"hi":{"line":108,"col":33},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"attributes":[]}],"predicates":[{"BoundPredicate":{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasContractState"},"disambiguator":0}],"index":[0,124]},"local_id":5},"span":{"lo":{"line":108,"col":32},"hi":{"line":108,"col":41},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"origin":"GenericParam","bound_generic_params":[],"bounded_ty":{"Param":{"index":1,"name":"Error"}}}},{"BoundPredicate":{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasContractState"},"disambiguator":0}],"index":[0,124]},"local_id":6},"span":{"lo":{"line":110,"col":4},"hi":{"line":110,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"origin":"WhereClause","bound_generic_params":[],"bounded_ty":{"Param":{"index":0,"name":"Self"}}}},{"BoundPredicate":{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasContractState"},"disambiguator":0}],"index":[0,124]},"local_id":11},"span":{"lo":{"line":111,"col":4},"hi":{"line":111,"col":28},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"origin":"WhereClause","bound_generic_params":[],"bounded_ty":{"Param":{"index":0,"name":"Self"}}}},{"BoundPredicate":{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasContractState"},"disambiguator":0}],"index":[0,124]},"local_id":19},"span":{"lo":{"line":112,"col":4},"hi":{"line":112,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"origin":"WhereClause","bound_generic_params":[],"bounded_ty":{"Param":{"index":0,"name":"Self"}}}}],"bounds":[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"Sized"},"disambiguator":0}],"index":[1,2689]},"generic_args":[{"Type":{"Param":{"index":1,"name":"Error"}}}]},"is_const":false,"is_positive":true}},"id":13656839978771590325}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"default"},"disambiguator":0},{"data":{"TypeNs":"Default"},"disambiguator":0}],"index":[1,2587]},"generic_args":[{"Type":{"Param":{"index":1,"name":"Error"}}}]},"is_const":false,"is_positive":true}},"id":468573141220163386}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"concordium_contracts_common","path":[{"data":{"TypeNs":"traits"},"disambiguator":0},{"data":{"TypeNs":"Read"},"disambiguator":0}],"index":[5,26]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}}]},"is_const":false,"is_positive":true}},"id":2437756474506696380}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"concordium_contracts_common","path":[{"data":{"TypeNs":"traits"},"disambiguator":0},{"data":{"TypeNs":"Write"},"disambiguator":0}],"index":[5,37]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}}]},"is_const":false,"is_positive":true}},"id":14362174564524012008}},{"Clause":{"kind":{"Projection":{"projection_ty":{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}}],"trait_def_id":[{"krate":"concordium_contracts_common","path":[{"data":{"TypeNs":"traits"},"disambiguator":0},{"data":{"TypeNs":"Write"},"disambiguator":0}],"index":[5,37]},{"impl":{"LocalBound":{"clause_id":14362174564524012008,"path":[]}},"args":[]}],"def_id":{"krate":"concordium_contracts_common","path":[{"data":{"TypeNs":"traits"},"disambiguator":0},{"data":{"TypeNs":"Write"},"disambiguator":0},{"data":{"TypeNs":"Err"},"disambiguator":0}],"index":[5,38]}},"term":{"Ty":{"Param":{"index":1,"name":"Error"}}}}},"id":4054745027042689359}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"concordium_contracts_common","path":[{"data":{"TypeNs":"traits"},"disambiguator":0},{"data":{"TypeNs":"Seek"},"disambiguator":0}],"index":[5,22]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}}]},"is_const":false,"is_positive":true}},"id":1025623541863160082}},{"Clause":{"kind":{"Projection":{"projection_ty":{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}}],"trait_def_id":[{"krate":"concordium_contracts_common","path":[{"data":{"TypeNs":"traits"},"disambiguator":0},{"data":{"TypeNs":"Seek"},"disambiguator":0}],"index":[5,22]},{"impl":{"LocalBound":{"clause_id":1025623541863160082,"path":[]}},"args":[]}],"def_id":{"krate":"concordium_contracts_common","path":[{"data":{"TypeNs":"traits"},"disambiguator":0},{"data":{"TypeNs":"Seek"},"disambiguator":0},{"data":{"TypeNs":"Err"},"disambiguator":0}],"index":[5,23]}},"term":{"Ty":{"Param":{"index":1,"name":"Error"}}}}},"id":12486526404069431600}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasContractState"},"disambiguator":0}],"index":[0,124]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}},{"Type":{"Param":{"index":1,"name":"Error"}}}]},"is_const":false,"is_positive":true}},"id":16350532459756314912}}],"has_where_clause_predicates":true,"where_clause_span":{"lo":{"line":109,"col":0},"hi":{"line":112,"col":28},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":108,"col":26},"hi":{"line":108,"col":47},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"Sized"},"disambiguator":0}],"index":[1,2689]},"generic_args":[{"Type":{"Param":{"index":1,"name":"Error"}}}]},"is_const":false,"is_positive":true}},"id":13656839978771590325}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"default"},"disambiguator":0},{"data":{"TypeNs":"Default"},"disambiguator":0}],"index":[1,2587]},"generic_args":[{"Type":{"Param":{"index":1,"name":"Error"}}}]},"is_const":false,"is_positive":true}},"id":468573141220163386}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"concordium_contracts_common","path":[{"data":{"TypeNs":"traits"},"disambiguator":0},{"data":{"TypeNs":"Read"},"disambiguator":0}],"index":[5,26]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}}]},"is_const":false,"is_positive":true}},"id":2437756474506696380}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"concordium_contracts_common","path":[{"data":{"TypeNs":"traits"},"disambiguator":0},{"data":{"TypeNs":"Write"},"disambiguator":0}],"index":[5,37]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}}]},"is_const":false,"is_positive":true}},"id":14362174564524012008}},{"Clause":{"kind":{"Projection":{"projection_ty":{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}}],"trait_def_id":[{"krate":"concordium_contracts_common","path":[{"data":{"TypeNs":"traits"},"disambiguator":0},{"data":{"TypeNs":"Write"},"disambiguator":0}],"index":[5,37]},{"impl":{"LocalBound":{"clause_id":14362174564524012008,"path":[]}},"args":[]}],"def_id":{"krate":"concordium_contracts_common","path":[{"data":{"TypeNs":"traits"},"disambiguator":0},{"data":{"TypeNs":"Write"},"disambiguator":0},{"data":{"TypeNs":"Err"},"disambiguator":0}],"index":[5,38]}},"term":{"Ty":{"Param":{"index":1,"name":"Error"}}}}},"id":4054745027042689359}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"concordium_contracts_common","path":[{"data":{"TypeNs":"traits"},"disambiguator":0},{"data":{"TypeNs":"Seek"},"disambiguator":0}],"index":[5,22]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}}]},"is_const":false,"is_positive":true}},"id":1025623541863160082}},{"Clause":{"kind":{"Projection":{"projection_ty":{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}}],"trait_def_id":[{"krate":"concordium_contracts_common","path":[{"data":{"TypeNs":"traits"},"disambiguator":0},{"data":{"TypeNs":"Seek"},"disambiguator":0}],"index":[5,22]},{"impl":{"LocalBound":{"clause_id":1025623541863160082,"path":[]}},"args":[]}],"def_id":{"krate":"concordium_contracts_common","path":[{"data":{"TypeNs":"traits"},"disambiguator":0},{"data":{"TypeNs":"Seek"},"disambiguator":0},{"data":{"TypeNs":"Err"},"disambiguator":0}],"index":[5,23]}},"term":{"Ty":{"Param":{"index":1,"name":"Error"}}}}},"id":12486526404069431600}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasContractState"},"disambiguator":0}],"index":[0,124]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}},{"Type":{"Param":{"index":1,"name":"Error"}}}]},"is_const":false,"is_positive":true}},"id":16350532459756314912}}],[{"ident":["ContractStateData",{"lo":{"line":113,"col":9},"hi":{"line":113,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasContractState"},"disambiguator":0},{"data":{"TypeNs":"ContractStateData"},"disambiguator":0}],"index":[0,126]},"generics":{"params":[],"predicates":[],"bounds":[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"Sized"},"disambiguator":0}],"index":[1,2689]},"generic_args":[{"Type":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}},{"Type":{"Param":{"index":1,"name":"Error"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasContractState"},"disambiguator":0}],"index":[0,124]},{"impl":{"LocalBound":{"clause_id":16350532459756314912,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasContractState"},"disambiguator":0},{"data":{"TypeNs":"ContractStateData"},"disambiguator":0}],"index":[0,126]}}]}}]},"is_const":false,"is_positive":true}},"id":9003714832965411642}}],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":113,"col":26},"hi":{"line":113,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":113,"col":26},"hi":{"line":113,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"kind":{"Type":[[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"Sized"},"disambiguator":0}],"index":[1,2689]},"generic_args":[{"Type":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}},{"Type":{"Param":{"index":1,"name":"Error"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasContractState"},"disambiguator":0}],"index":[0,124]},{"impl":{"LocalBound":{"clause_id":16350532459756314912,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasContractState"},"disambiguator":0},{"data":{"TypeNs":"ContractStateData"},"disambiguator":0}],"index":[0,126]}}]}}]},"is_const":false,"is_positive":true}},"id":9003714832965411642}}],null]},"span":{"lo":{"line":113,"col":4},"hi":{"line":113,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"defaultness":{"Default":{"has_value":false}},"attributes":{"attributes":[],"parent_attributes":[{"kind":{"DocComment":["Line"," A type that can serve as the contract state type."]},"id":247,"style":"Outer","span":{"lo":{"line":107,"col":0},"hi":{"line":107,"col":53},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}},{"ident":["open",{"lo":{"line":116,"col":7},"hi":{"line":116,"col":11},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasContractState"},"disambiguator":0},{"data":{"ValueNs":"open"},"disambiguator":0}],"index":[0,127]},"generics":{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":116,"col":47},"hi":{"line":116,"col":47},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":116,"col":11},"hi":{"line":116,"col":11},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"kind":{"RequiredFn":[{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"decl":{"inputs":[{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}},{"Type":{"Param":{"index":1,"name":"Error"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasContractState"},"disambiguator":0}],"index":[0,124]},{"impl":{"LocalBound":{"clause_id":16350532459756314912,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasContractState"},"disambiguator":0},{"data":{"TypeNs":"ContractStateData"},"disambiguator":0}],"index":[0,126]}}]}],"output":{"Return":{"Param":{"index":0,"name":"Self"}}},"c_variadic":false,"implicit_self":"None","lifetime_elision_allowed":false},"span":{"lo":{"line":116,"col":4},"hi":{"line":116,"col":48},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[["",{"lo":{"line":116,"col":12},"hi":{"line":116,"col":13},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}]]]},"span":{"lo":{"line":116,"col":4},"hi":{"line":116,"col":48},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"defaultness":{"Default":{"has_value":false}},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Open the contract state. Only one instance can be opened at the same"]},"id":248,"style":"Outer","span":{"lo":{"line":114,"col":4},"hi":{"line":114,"col":76},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," time."]},"id":249,"style":"Outer","span":{"lo":{"line":115,"col":4},"hi":{"line":115,"col":13},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"DocComment":["Line"," A type that can serve as the contract state type."]},"id":247,"style":"Outer","span":{"lo":{"line":107,"col":0},"hi":{"line":107,"col":53},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}},{"ident":["size",{"lo":{"line":119,"col":7},"hi":{"line":119,"col":11},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasContractState"},"disambiguator":0},{"data":{"ValueNs":"size"},"disambiguator":0}],"index":[0,128]},"generics":{"params":[{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasContractState"},"disambiguator":0},{"data":{"ValueNs":"size"},"disambiguator":0}],"index":[0,128]},"local_id":1},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasContractState"},"disambiguator":0},{"data":{"ValueNs":"size"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,257]},"name":"Fresh","span":{"lo":{"line":119,"col":12},"hi":{"line":119,"col":13},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]}],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":119,"col":25},"hi":{"line":119,"col":25},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":119,"col":11},"hi":{"line":119,"col":11},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"kind":{"RequiredFn":[{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"decl":{"inputs":[{"Ref":[{"kind":{"ReLateBound":[0,{"var":0,"kind":{"BrNamed":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasContractState"},"disambiguator":0},{"data":{"ValueNs":"size"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,257]},"'_"]}}]}},{"Param":{"index":0,"name":"Self"}},false]}],"output":{"Return":{"Uint":"U32"}},"c_variadic":false,"implicit_self":"ImmRef","lifetime_elision_allowed":true},"span":{"lo":{"line":119,"col":4},"hi":{"line":119,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[["self",{"lo":{"line":119,"col":13},"hi":{"line":119,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}]]]},"span":{"lo":{"line":119,"col":4},"hi":{"line":119,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"defaultness":{"Default":{"has_value":false}},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Get the current size of contract state."]},"id":250,"style":"Outer","span":{"lo":{"line":118,"col":4},"hi":{"line":118,"col":47},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"DocComment":["Line"," A type that can serve as the contract state type."]},"id":247,"style":"Outer","span":{"lo":{"line":107,"col":0},"hi":{"line":107,"col":53},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}},{"ident":["truncate",{"lo":{"line":124,"col":7},"hi":{"line":124,"col":15},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasContractState"},"disambiguator":0},{"data":{"ValueNs":"truncate"},"disambiguator":0}],"index":[0,129]},"generics":{"params":[{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasContractState"},"disambiguator":0},{"data":{"ValueNs":"truncate"},"disambiguator":0}],"index":[0,129]},"local_id":1},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasContractState"},"disambiguator":0},{"data":{"ValueNs":"truncate"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,258]},"name":"Fresh","span":{"lo":{"line":124,"col":16},"hi":{"line":124,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]}],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":124,"col":45},"hi":{"line":124,"col":45},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":124,"col":15},"hi":{"line":124,"col":15},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"kind":{"RequiredFn":[{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"decl":{"inputs":[{"Ref":[{"kind":{"ReLateBound":[0,{"var":0,"kind":{"BrNamed":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasContractState"},"disambiguator":0},{"data":{"ValueNs":"truncate"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,258]},"'_"]}}]}},{"Param":{"index":0,"name":"Self"}},false]},{"Uint":"U32"}],"output":{"Return":{"Param":{"index":0,"name":"Self"}}},"c_variadic":false,"implicit_self":"ImmRef","lifetime_elision_allowed":true},"span":{"lo":{"line":124,"col":4},"hi":{"line":124,"col":46},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[["self",{"lo":{"line":124,"col":17},"hi":{"line":124,"col":21},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],["new_size",{"lo":{"line":124,"col":23},"hi":{"line":124,"col":31},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}]]]},"span":{"lo":{"line":124,"col":4},"hi":{"line":124,"col":46},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"defaultness":{"Default":{"has_value":false}},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Truncate the state to the given size. If the given size is more than the"]},"id":251,"style":"Outer","span":{"lo":{"line":121,"col":4},"hi":{"line":121,"col":80},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," current state size this operation does nothing. The new position is at"]},"id":252,"style":"Outer","span":{"lo":{"line":122,"col":4},"hi":{"line":122,"col":78},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," most at the end of the stream."]},"id":253,"style":"Outer","span":{"lo":{"line":123,"col":4},"hi":{"line":123,"col":38},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"DocComment":["Line"," A type that can serve as the contract state type."]},"id":247,"style":"Outer","span":{"lo":{"line":107,"col":0},"hi":{"line":107,"col":53},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}},{"ident":["reserve",{"lo":{"line":129,"col":7},"hi":{"line":129,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasContractState"},"disambiguator":0},{"data":{"ValueNs":"reserve"},"disambiguator":0}],"index":[0,130]},"generics":{"params":[{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasContractState"},"disambiguator":0},{"data":{"ValueNs":"reserve"},"disambiguator":0}],"index":[0,130]},"local_id":1},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasContractState"},"disambiguator":0},{"data":{"ValueNs":"reserve"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,259]},"name":"Fresh","span":{"lo":{"line":129,"col":15},"hi":{"line":129,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]}],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":129,"col":47},"hi":{"line":129,"col":47},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":129,"col":14},"hi":{"line":129,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"kind":{"RequiredFn":[{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"decl":{"inputs":[{"Ref":[{"kind":{"ReLateBound":[0,{"var":0,"kind":{"BrNamed":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasContractState"},"disambiguator":0},{"data":{"ValueNs":"reserve"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,259]},"'_"]}}]}},{"Param":{"index":0,"name":"Self"}},false]},{"Uint":"U32"}],"output":{"Return":{"Tuple":["Bool",{"Param":{"index":0,"name":"Self"}}]}},"c_variadic":false,"implicit_self":"ImmRef","lifetime_elision_allowed":true},"span":{"lo":{"line":129,"col":4},"hi":{"line":129,"col":48},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[["self",{"lo":{"line":129,"col":16},"hi":{"line":129,"col":20},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],["len",{"lo":{"line":129,"col":22},"hi":{"line":129,"col":25},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}]]]},"span":{"lo":{"line":129,"col":4},"hi":{"line":129,"col":48},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"defaultness":{"Default":{"has_value":false}},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Make sure that the memory size is at least that many bytes in size."]},"id":254,"style":"Outer","span":{"lo":{"line":126,"col":4},"hi":{"line":126,"col":75},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," Returns true iff this was successful. The new bytes are initialized as"]},"id":255,"style":"Outer","span":{"lo":{"line":127,"col":4},"hi":{"line":127,"col":78},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," 0."]},"id":256,"style":"Outer","span":{"lo":{"line":128,"col":4},"hi":{"line":128,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"DocComment":["Line"," A type that can serve as the contract state type."]},"id":247,"style":"Outer","span":{"lo":{"line":107,"col":0},"hi":{"line":107,"col":53},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}}]]},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," A type that can serve as the contract state type."]},"id":247,"style":"Outer","span":{"lo":{"line":107,"col":0},"hi":{"line":107,"col":53},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasLogger"},"disambiguator":0}],"index":[0,131]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasLogger"},"disambiguator":0}],"index":[0,131]},"span":{"lo":{"line":139,"col":0},"hi":{"line":157,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"vis_span":{"lo":{"line":139,"col":0},"hi":{"line":157,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"kind":{"Trait":["No","Normal",{"params":[],"predicates":[],"bounds":[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasLogger"},"disambiguator":0}],"index":[0,131]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}}]},"is_const":false,"is_positive":true}},"id":17916136383929855154}}],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":139,"col":19},"hi":{"line":139,"col":19},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":139,"col":19},"hi":{"line":139,"col":19},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasLogger"},"disambiguator":0}],"index":[0,131]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}}]},"is_const":false,"is_positive":true}},"id":17916136383929855154}}],[{"ident":["init",{"lo":{"line":141,"col":7},"hi":{"line":141,"col":11},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasLogger"},"disambiguator":0},{"data":{"ValueNs":"init"},"disambiguator":0}],"index":[0,132]},"generics":{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":141,"col":21},"hi":{"line":141,"col":21},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":141,"col":11},"hi":{"line":141,"col":11},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"kind":{"RequiredFn":[{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"decl":{"inputs":[],"output":{"Return":{"Param":{"index":0,"name":"Self"}}},"c_variadic":false,"implicit_self":"None","lifetime_elision_allowed":false},"span":{"lo":{"line":141,"col":4},"hi":{"line":141,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[]]},"span":{"lo":{"line":141,"col":4},"hi":{"line":141,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"defaultness":{"Default":{"has_value":false}},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Initialize a logger."]},"id":263,"style":"Outer","span":{"lo":{"line":140,"col":4},"hi":{"line":140,"col":28},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"DocComment":["Line"," Objects which can serve as loggers."]},"id":257,"style":"Outer","span":{"lo":{"line":133,"col":0},"hi":{"line":133,"col":39},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line",""]},"id":258,"style":"Outer","span":{"lo":{"line":134,"col":0},"hi":{"line":134,"col":3},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," Logging functionality can be used by smart contracts to record events that"]},"id":259,"style":"Outer","span":{"lo":{"line":135,"col":0},"hi":{"line":135,"col":78},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," might be of interest to external parties. These events are not used on the"]},"id":260,"style":"Outer","span":{"lo":{"line":136,"col":0},"hi":{"line":136,"col":78},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," chain, and cannot be observed by other contracts, but they are stored by the"]},"id":261,"style":"Outer","span":{"lo":{"line":137,"col":0},"hi":{"line":137,"col":80},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," node, and can be queried to provide information to off-chain actors."]},"id":262,"style":"Outer","span":{"lo":{"line":138,"col":0},"hi":{"line":138,"col":72},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}},{"ident":["log_raw",{"lo":{"line":145,"col":7},"hi":{"line":145,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasLogger"},"disambiguator":0},{"data":{"ValueNs":"log_raw"},"disambiguator":0}],"index":[0,133]},"generics":{"params":[{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasLogger"},"disambiguator":0},{"data":{"ValueNs":"log_raw"},"disambiguator":0}],"index":[0,133]},"local_id":1},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasLogger"},"disambiguator":0},{"data":{"ValueNs":"log_raw"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,260]},"name":"Fresh","span":{"lo":{"line":145,"col":15},"hi":{"line":145,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]},{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasLogger"},"disambiguator":0},{"data":{"ValueNs":"log_raw"},"disambiguator":0}],"index":[0,133]},"local_id":2},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasLogger"},"disambiguator":0},{"data":{"ValueNs":"log_raw"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":1}],"index":[0,261]},"name":"Fresh","span":{"lo":{"line":145,"col":29},"hi":{"line":145,"col":30},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]}],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":145,"col":67},"hi":{"line":145,"col":67},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":145,"col":14},"hi":{"line":145,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"kind":{"RequiredFn":[{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"decl":{"inputs":[{"Ref":[{"kind":{"ReLateBound":[0,{"var":0,"kind":{"BrNamed":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasLogger"},"disambiguator":0},{"data":{"ValueNs":"log_raw"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,260]},"'_"]}}]}},{"Param":{"index":0,"name":"Self"}},false]},{"Ref":[{"kind":{"ReLateBound":[0,{"var":1,"kind":{"BrNamed":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasLogger"},"disambiguator":0},{"data":{"ValueNs":"log_raw"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":1}],"index":[0,261]},"'_"]}}]}},{"Slice":{"Uint":"U8"}},false]}],"output":{"Return":{"Tuple":[{"Adt":{"generic_args":[{"Type":{"Tuple":[]}},{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"result"},"disambiguator":0},{"data":{"TypeNs":"Result"},"disambiguator":0}],"index":[1,41506]}}},{"Param":{"index":0,"name":"Self"}}]}},"c_variadic":false,"implicit_self":"ImmRef","lifetime_elision_allowed":true},"span":{"lo":{"line":145,"col":4},"hi":{"line":145,"col":68},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[["self",{"lo":{"line":145,"col":16},"hi":{"line":145,"col":20},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],["event",{"lo":{"line":145,"col":22},"hi":{"line":145,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}]]]},"span":{"lo":{"line":145,"col":4},"hi":{"line":145,"col":68},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"defaultness":{"Default":{"has_value":false}},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Log the given slice as-is. If logging is not successful an error will be"]},"id":264,"style":"Outer","span":{"lo":{"line":143,"col":4},"hi":{"line":143,"col":80},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," returned."]},"id":265,"style":"Outer","span":{"lo":{"line":144,"col":4},"hi":{"line":144,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"DocComment":["Line"," Objects which can serve as loggers."]},"id":257,"style":"Outer","span":{"lo":{"line":133,"col":0},"hi":{"line":133,"col":39},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line",""]},"id":258,"style":"Outer","span":{"lo":{"line":134,"col":0},"hi":{"line":134,"col":3},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," Logging functionality can be used by smart contracts to record events that"]},"id":259,"style":"Outer","span":{"lo":{"line":135,"col":0},"hi":{"line":135,"col":78},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," might be of interest to external parties. These events are not used on the"]},"id":260,"style":"Outer","span":{"lo":{"line":136,"col":0},"hi":{"line":136,"col":78},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," chain, and cannot be observed by other contracts, but they are stored by the"]},"id":261,"style":"Outer","span":{"lo":{"line":137,"col":0},"hi":{"line":137,"col":80},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," node, and can be queried to provide information to off-chain actors."]},"id":262,"style":"Outer","span":{"lo":{"line":138,"col":0},"hi":{"line":138,"col":72},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}},{"ident":["log",{"lo":{"line":149,"col":7},"hi":{"line":149,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasLogger"},"disambiguator":0},{"data":{"ValueNs":"log"},"disambiguator":0}],"index":[0,134]},"generics":{"params":[{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasLogger"},"disambiguator":0},{"data":{"ValueNs":"log"},"disambiguator":0}],"index":[0,134]},"local_id":6},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasLogger"},"disambiguator":0},{"data":{"ValueNs":"log"},"disambiguator":0},{"data":{"TypeNs":"S"},"disambiguator":0}],"index":[0,135]},"name":{"Plain":{"name":"S","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasLogger"},"disambiguator":0},{"data":{"ValueNs":"log"},"disambiguator":0}],"index":[0,134]},"local_id":6}}},"span":{"lo":{"line":149,"col":11},"hi":{"line":149,"col":12},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"pure_wrt_drop":false,"kind":{"Type":{"default":null,"synthetic":false}},"colon_span":{"lo":{"line":149,"col":12},"hi":{"line":149,"col":13},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"attributes":[]},{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasLogger"},"disambiguator":0},{"data":{"ValueNs":"log"},"disambiguator":0}],"index":[0,134]},"local_id":7},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasLogger"},"disambiguator":0},{"data":{"ValueNs":"log"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,262]},"name":"Fresh","span":{"lo":{"line":149,"col":22},"hi":{"line":149,"col":23},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]},{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasLogger"},"disambiguator":0},{"data":{"ValueNs":"log"},"disambiguator":0}],"index":[0,134]},"local_id":8},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasLogger"},"disambiguator":0},{"data":{"ValueNs":"log"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":1}],"index":[0,263]},"name":"Fresh","span":{"lo":{"line":149,"col":36},"hi":{"line":149,"col":37},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]}],"predicates":[{"BoundPredicate":{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasLogger"},"disambiguator":0},{"data":{"ValueNs":"log"},"disambiguator":0}],"index":[0,134]},"local_id":5},"span":{"lo":{"line":149,"col":12},"hi":{"line":149,"col":20},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"origin":"GenericParam","bound_generic_params":[],"bounded_ty":{"Param":{"index":1,"name":"S"}}}}],"bounds":[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"Sized"},"disambiguator":0}],"index":[1,2689]},"generic_args":[{"Type":{"Param":{"index":1,"name":"S"}}}]},"is_const":false,"is_positive":true}},"id":9272273951847800647}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"concordium_contracts_common","path":[{"data":{"TypeNs":"traits"},"disambiguator":0},{"data":{"TypeNs":"Serial"},"disambiguator":0}],"index":[5,55]},"generic_args":[{"Type":{"Param":{"index":1,"name":"S"}}}]},"is_const":false,"is_positive":true}},"id":9303391958149541291}}],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":149,"col":71},"hi":{"line":149,"col":71},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":149,"col":10},"hi":{"line":149,"col":21},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"kind":{"RequiredFn":[{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"decl":{"inputs":[{"Ref":[{"kind":{"ReLateBound":[0,{"var":0,"kind":{"BrNamed":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasLogger"},"disambiguator":0},{"data":{"ValueNs":"log"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,262]},"'_"]}}]}},{"Param":{"index":0,"name":"Self"}},false]},{"Ref":[{"kind":{"ReLateBound":[0,{"var":1,"kind":{"BrNamed":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasLogger"},"disambiguator":0},{"data":{"ValueNs":"log"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":1}],"index":[0,263]},"'_"]}}]}},{"Param":{"index":1,"name":"S"}},false]}],"output":{"Return":{"Tuple":[{"Adt":{"generic_args":[{"Type":{"Tuple":[]}},{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"result"},"disambiguator":0},{"data":{"TypeNs":"Result"},"disambiguator":0}],"index":[1,41506]}}},{"Param":{"index":0,"name":"Self"}}]}},"c_variadic":false,"implicit_self":"ImmRef","lifetime_elision_allowed":true},"span":{"lo":{"line":149,"col":4},"hi":{"line":149,"col":72},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[["self",{"lo":{"line":149,"col":23},"hi":{"line":149,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],["event",{"lo":{"line":149,"col":29},"hi":{"line":149,"col":34},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}]]]},"span":{"lo":{"line":149,"col":4},"hi":{"line":149,"col":72},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"defaultness":{"Default":{"has_value":false}},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Log a serializable event by serializing it with a supplied serializer."]},"id":266,"style":"Outer","span":{"lo":{"line":148,"col":4},"hi":{"line":148,"col":78},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"DocComment":["Line"," Objects which can serve as loggers."]},"id":257,"style":"Outer","span":{"lo":{"line":133,"col":0},"hi":{"line":133,"col":39},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line",""]},"id":258,"style":"Outer","span":{"lo":{"line":134,"col":0},"hi":{"line":134,"col":3},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," Logging functionality can be used by smart contracts to record events that"]},"id":259,"style":"Outer","span":{"lo":{"line":135,"col":0},"hi":{"line":135,"col":78},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," might be of interest to external parties. These events are not used on the"]},"id":260,"style":"Outer","span":{"lo":{"line":136,"col":0},"hi":{"line":136,"col":78},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," chain, and cannot be observed by other contracts, but they are stored by the"]},"id":261,"style":"Outer","span":{"lo":{"line":137,"col":0},"hi":{"line":137,"col":80},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," node, and can be queried to provide information to off-chain actors."]},"id":262,"style":"Outer","span":{"lo":{"line":138,"col":0},"hi":{"line":138,"col":72},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}}]]},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Objects which can serve as loggers."]},"id":257,"style":"Outer","span":{"lo":{"line":133,"col":0},"hi":{"line":133,"col":39},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line",""]},"id":258,"style":"Outer","span":{"lo":{"line":134,"col":0},"hi":{"line":134,"col":3},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," Logging functionality can be used by smart contracts to record events that"]},"id":259,"style":"Outer","span":{"lo":{"line":135,"col":0},"hi":{"line":135,"col":78},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," might be of interest to external parties. These events are not used on the"]},"id":260,"style":"Outer","span":{"lo":{"line":136,"col":0},"hi":{"line":136,"col":78},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," chain, and cannot be observed by other contracts, but they are stored by the"]},"id":261,"style":"Outer","span":{"lo":{"line":137,"col":0},"hi":{"line":137,"col":80},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," node, and can be queried to provide information to off-chain actors."]},"id":262,"style":"Outer","span":{"lo":{"line":138,"col":0},"hi":{"line":138,"col":72},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasActions"},"disambiguator":0}],"index":[0,136]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasActions"},"disambiguator":0}],"index":[0,136]},"span":{"lo":{"line":165,"col":0},"hi":{"line":186,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"vis_span":{"lo":{"line":165,"col":0},"hi":{"line":186,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"kind":{"Trait":["No","Normal",{"params":[],"predicates":[],"bounds":[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasActions"},"disambiguator":0}],"index":[0,136]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}}]},"is_const":false,"is_positive":true}},"id":7643429660763269667}}],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":165,"col":20},"hi":{"line":165,"col":20},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":165,"col":20},"hi":{"line":165,"col":20},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasActions"},"disambiguator":0}],"index":[0,136]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}}]},"is_const":false,"is_positive":true}},"id":7643429660763269667}}],[{"ident":["accept",{"lo":{"line":167,"col":7},"hi":{"line":167,"col":13},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasActions"},"disambiguator":0},{"data":{"ValueNs":"accept"},"disambiguator":0}],"index":[0,137]},"generics":{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":167,"col":23},"hi":{"line":167,"col":23},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":167,"col":13},"hi":{"line":167,"col":13},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"kind":{"RequiredFn":[{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"decl":{"inputs":[],"output":{"Return":{"Param":{"index":0,"name":"Self"}}},"c_variadic":false,"implicit_self":"None","lifetime_elision_allowed":false},"span":{"lo":{"line":167,"col":4},"hi":{"line":167,"col":24},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[]]},"span":{"lo":{"line":167,"col":4},"hi":{"line":167,"col":24},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"defaultness":{"Default":{"has_value":false}},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Default accept action."]},"id":272,"style":"Outer","span":{"lo":{"line":166,"col":4},"hi":{"line":166,"col":30},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"DocComment":["Line"," An object that can serve to construct actions."]},"id":267,"style":"Outer","span":{"lo":{"line":160,"col":0},"hi":{"line":160,"col":50},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line",""]},"id":268,"style":"Outer","span":{"lo":{"line":161,"col":0},"hi":{"line":161,"col":3},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," The actions that a smart contract can produce as a"]},"id":269,"style":"Outer","span":{"lo":{"line":162,"col":0},"hi":{"line":162,"col":54},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," result of its execution. These actions form a tree and are executed by"]},"id":270,"style":"Outer","span":{"lo":{"line":163,"col":0},"hi":{"line":163,"col":74},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," the scheduler in the predefined order."]},"id":271,"style":"Outer","span":{"lo":{"line":164,"col":0},"hi":{"line":164,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}},{"ident":["simple_transfer",{"lo":{"line":170,"col":7},"hi":{"line":170,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasActions"},"disambiguator":0},{"data":{"ValueNs":"simple_transfer"},"disambiguator":0}],"index":[0,138]},"generics":{"params":[{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasActions"},"disambiguator":0},{"data":{"ValueNs":"simple_transfer"},"disambiguator":0}],"index":[0,138]},"local_id":1},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasActions"},"disambiguator":0},{"data":{"ValueNs":"simple_transfer"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,264]},"name":"Fresh","span":{"lo":{"line":170,"col":28},"hi":{"line":170,"col":29},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]}],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":170,"col":68},"hi":{"line":170,"col":68},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":170,"col":22},"hi":{"line":170,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"kind":{"RequiredFn":[{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"decl":{"inputs":[{"Ref":[{"kind":{"ReLateBound":[0,{"var":0,"kind":{"BrNamed":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasActions"},"disambiguator":0},{"data":{"ValueNs":"simple_transfer"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,264]},"'_"]}}]}},{"Adt":{"generic_args":[],"def_id":{"krate":"concordium_contracts_common","path":[{"data":{"TypeNs":"types"},"disambiguator":0},{"data":{"TypeNs":"AccountAddress"},"disambiguator":0}],"index":[5,964]}}},false]},{"Adt":{"generic_args":[],"def_id":{"krate":"concordium_contracts_common","path":[{"data":{"TypeNs":"types"},"disambiguator":0},{"data":{"TypeNs":"Amount"},"disambiguator":0}],"index":[5,862]}}}],"output":{"Return":{"Param":{"index":0,"name":"Self"}}},"c_variadic":false,"implicit_self":"None","lifetime_elision_allowed":true},"span":{"lo":{"line":170,"col":4},"hi":{"line":170,"col":69},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[["acc",{"lo":{"line":170,"col":23},"hi":{"line":170,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],["amount",{"lo":{"line":170,"col":45},"hi":{"line":170,"col":51},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}]]]},"span":{"lo":{"line":170,"col":4},"hi":{"line":170,"col":69},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"defaultness":{"Default":{"has_value":false}},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Send a given amount to an account."]},"id":273,"style":"Outer","span":{"lo":{"line":169,"col":4},"hi":{"line":169,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"DocComment":["Line"," An object that can serve to construct actions."]},"id":267,"style":"Outer","span":{"lo":{"line":160,"col":0},"hi":{"line":160,"col":50},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line",""]},"id":268,"style":"Outer","span":{"lo":{"line":161,"col":0},"hi":{"line":161,"col":3},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," The actions that a smart contract can produce as a"]},"id":269,"style":"Outer","span":{"lo":{"line":162,"col":0},"hi":{"line":162,"col":54},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," result of its execution. These actions form a tree and are executed by"]},"id":270,"style":"Outer","span":{"lo":{"line":163,"col":0},"hi":{"line":163,"col":74},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," the scheduler in the predefined order."]},"id":271,"style":"Outer","span":{"lo":{"line":164,"col":0},"hi":{"line":164,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}},{"ident":["send_raw",{"lo":{"line":173,"col":7},"hi":{"line":173,"col":15},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasActions"},"disambiguator":0},{"data":{"ValueNs":"send_raw"},"disambiguator":0}],"index":[0,139]},"generics":{"params":[{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasActions"},"disambiguator":0},{"data":{"ValueNs":"send_raw"},"disambiguator":0}],"index":[0,139]},"local_id":1},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasActions"},"disambiguator":0},{"data":{"ValueNs":"send_raw"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,265]},"name":"Fresh","span":{"lo":{"line":174,"col":12},"hi":{"line":174,"col":13},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]},{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasActions"},"disambiguator":0},{"data":{"ValueNs":"send_raw"},"disambiguator":0}],"index":[0,139]},"local_id":2},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasActions"},"disambiguator":0},{"data":{"ValueNs":"send_raw"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":1}],"index":[0,266]},"name":"Fresh","span":{"lo":{"line":175,"col":22},"hi":{"line":175,"col":33},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]},{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasActions"},"disambiguator":0},{"data":{"ValueNs":"send_raw"},"disambiguator":0}],"index":[0,139]},"local_id":3},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasActions"},"disambiguator":0},{"data":{"ValueNs":"send_raw"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":2}],"index":[0,267]},"name":"Fresh","span":{"lo":{"line":177,"col":19},"hi":{"line":177,"col":20},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]}],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":178,"col":13},"hi":{"line":178,"col":13},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":173,"col":15},"hi":{"line":173,"col":15},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"kind":{"RequiredFn":[{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"decl":{"inputs":[{"Ref":[{"kind":{"ReLateBound":[0,{"var":0,"kind":{"BrNamed":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasActions"},"disambiguator":0},{"data":{"ValueNs":"send_raw"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,265]},"'_"]}}]}},{"Adt":{"generic_args":[],"def_id":{"krate":"concordium_contracts_common","path":[{"data":{"TypeNs":"types"},"disambiguator":0},{"data":{"TypeNs":"ContractAddress"},"disambiguator":0}],"index":[5,988]}}},false]},{"Adt":{"generic_args":[{"Lifetime":{"kind":{"ReLateBound":[0,{"var":1,"kind":{"BrNamed":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasActions"},"disambiguator":0},{"data":{"ValueNs":"send_raw"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":1}],"index":[0,266]},"'_"]}}]}}}],"def_id":{"krate":"concordium_contracts_common","path":[{"data":{"TypeNs":"types"},"disambiguator":0},{"data":{"TypeNs":"ReceiveName"},"disambiguator":0}],"index":[5,1083]}}},{"Adt":{"generic_args":[],"def_id":{"krate":"concordium_contracts_common","path":[{"data":{"TypeNs":"types"},"disambiguator":0},{"data":{"TypeNs":"Amount"},"disambiguator":0}],"index":[5,862]}}},{"Ref":[{"kind":{"ReLateBound":[0,{"var":2,"kind":{"BrNamed":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasActions"},"disambiguator":0},{"data":{"ValueNs":"send_raw"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":2}],"index":[0,267]},"'_"]}}]}},{"Slice":{"Uint":"U8"}},false]}],"output":{"Return":{"Param":{"index":0,"name":"Self"}}},"c_variadic":false,"implicit_self":"None","lifetime_elision_allowed":false},"span":{"lo":{"line":173,"col":4},"hi":{"line":178,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[["ca",{"lo":{"line":174,"col":8},"hi":{"line":174,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],["receive_name",{"lo":{"line":175,"col":8},"hi":{"line":175,"col":20},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],["amount",{"lo":{"line":176,"col":8},"hi":{"line":176,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],["parameter",{"lo":{"line":177,"col":8},"hi":{"line":177,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}]]]},"span":{"lo":{"line":173,"col":4},"hi":{"line":178,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"defaultness":{"Default":{"has_value":false}},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Send a message to a contract."]},"id":274,"style":"Outer","span":{"lo":{"line":172,"col":4},"hi":{"line":172,"col":37},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"DocComment":["Line"," An object that can serve to construct actions."]},"id":267,"style":"Outer","span":{"lo":{"line":160,"col":0},"hi":{"line":160,"col":50},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line",""]},"id":268,"style":"Outer","span":{"lo":{"line":161,"col":0},"hi":{"line":161,"col":3},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," The actions that a smart contract can produce as a"]},"id":269,"style":"Outer","span":{"lo":{"line":162,"col":0},"hi":{"line":162,"col":54},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," result of its execution. These actions form a tree and are executed by"]},"id":270,"style":"Outer","span":{"lo":{"line":163,"col":0},"hi":{"line":163,"col":74},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," the scheduler in the predefined order."]},"id":271,"style":"Outer","span":{"lo":{"line":164,"col":0},"hi":{"line":164,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}},{"ident":["and_then",{"lo":{"line":182,"col":7},"hi":{"line":182,"col":15},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasActions"},"disambiguator":0},{"data":{"ValueNs":"and_then"},"disambiguator":0}],"index":[0,140]},"generics":{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":182,"col":41},"hi":{"line":182,"col":41},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":182,"col":15},"hi":{"line":182,"col":15},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"kind":{"RequiredFn":[{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"decl":{"inputs":[{"Param":{"index":0,"name":"Self"}},{"Param":{"index":0,"name":"Self"}}],"output":{"Return":{"Param":{"index":0,"name":"Self"}}},"c_variadic":false,"implicit_self":"Imm","lifetime_elision_allowed":false},"span":{"lo":{"line":182,"col":4},"hi":{"line":182,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[["self",{"lo":{"line":182,"col":16},"hi":{"line":182,"col":20},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],["then",{"lo":{"line":182,"col":22},"hi":{"line":182,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}]]]},"span":{"lo":{"line":182,"col":4},"hi":{"line":182,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"defaultness":{"Default":{"has_value":false}},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," If the execution of the first action succeeds, run the second action"]},"id":275,"style":"Outer","span":{"lo":{"line":180,"col":4},"hi":{"line":180,"col":76},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," as well."]},"id":276,"style":"Outer","span":{"lo":{"line":181,"col":4},"hi":{"line":181,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"DocComment":["Line"," An object that can serve to construct actions."]},"id":267,"style":"Outer","span":{"lo":{"line":160,"col":0},"hi":{"line":160,"col":50},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line",""]},"id":268,"style":"Outer","span":{"lo":{"line":161,"col":0},"hi":{"line":161,"col":3},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," The actions that a smart contract can produce as a"]},"id":269,"style":"Outer","span":{"lo":{"line":162,"col":0},"hi":{"line":162,"col":54},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," result of its execution. These actions form a tree and are executed by"]},"id":270,"style":"Outer","span":{"lo":{"line":163,"col":0},"hi":{"line":163,"col":74},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," the scheduler in the predefined order."]},"id":271,"style":"Outer","span":{"lo":{"line":164,"col":0},"hi":{"line":164,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}},{"ident":["or_else",{"lo":{"line":185,"col":7},"hi":{"line":185,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasActions"},"disambiguator":0},{"data":{"ValueNs":"or_else"},"disambiguator":0}],"index":[0,141]},"generics":{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":185,"col":38},"hi":{"line":185,"col":38},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":185,"col":14},"hi":{"line":185,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"kind":{"RequiredFn":[{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"decl":{"inputs":[{"Param":{"index":0,"name":"Self"}},{"Param":{"index":0,"name":"Self"}}],"output":{"Return":{"Param":{"index":0,"name":"Self"}}},"c_variadic":false,"implicit_self":"Imm","lifetime_elision_allowed":false},"span":{"lo":{"line":185,"col":4},"hi":{"line":185,"col":39},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[["self",{"lo":{"line":185,"col":15},"hi":{"line":185,"col":19},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],["el",{"lo":{"line":185,"col":21},"hi":{"line":185,"col":23},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}]]]},"span":{"lo":{"line":185,"col":4},"hi":{"line":185,"col":39},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"defaultness":{"Default":{"has_value":false}},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," If the execution of the first action fails, try the second."]},"id":277,"style":"Outer","span":{"lo":{"line":184,"col":4},"hi":{"line":184,"col":67},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"DocComment":["Line"," An object that can serve to construct actions."]},"id":267,"style":"Outer","span":{"lo":{"line":160,"col":0},"hi":{"line":160,"col":50},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line",""]},"id":268,"style":"Outer","span":{"lo":{"line":161,"col":0},"hi":{"line":161,"col":3},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," The actions that a smart contract can produce as a"]},"id":269,"style":"Outer","span":{"lo":{"line":162,"col":0},"hi":{"line":162,"col":54},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," result of its execution. These actions form a tree and are executed by"]},"id":270,"style":"Outer","span":{"lo":{"line":163,"col":0},"hi":{"line":163,"col":74},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," the scheduler in the predefined order."]},"id":271,"style":"Outer","span":{"lo":{"line":164,"col":0},"hi":{"line":164,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}}]]},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," An object that can serve to construct actions."]},"id":267,"style":"Outer","span":{"lo":{"line":160,"col":0},"hi":{"line":160,"col":50},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line",""]},"id":268,"style":"Outer","span":{"lo":{"line":161,"col":0},"hi":{"line":161,"col":3},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," The actions that a smart contract can produce as a"]},"id":269,"style":"Outer","span":{"lo":{"line":162,"col":0},"hi":{"line":162,"col":54},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," result of its execution. These actions form a tree and are executed by"]},"id":270,"style":"Outer","span":{"lo":{"line":163,"col":0},"hi":{"line":163,"col":74},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," the scheduler in the predefined order."]},"id":271,"style":"Outer","span":{"lo":{"line":164,"col":0},"hi":{"line":164,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"UnwrapAbort"},"disambiguator":0}],"index":[0,142]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"UnwrapAbort"},"disambiguator":0}],"index":[0,142]},"span":{"lo":{"line":191,"col":0},"hi":{"line":201,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"vis_span":{"lo":{"line":191,"col":0},"hi":{"line":201,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"kind":{"Trait":["No","Normal",{"params":[],"predicates":[],"bounds":[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"UnwrapAbort"},"disambiguator":0}],"index":[0,142]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}}]},"is_const":false,"is_positive":true}},"id":18436060400986552328}}],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":191,"col":21},"hi":{"line":191,"col":21},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":191,"col":21},"hi":{"line":191,"col":21},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"UnwrapAbort"},"disambiguator":0}],"index":[0,142]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}}]},"is_const":false,"is_positive":true}},"id":18436060400986552328}}],[{"ident":["Unwrap",{"lo":{"line":193,"col":9},"hi":{"line":193,"col":15},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"UnwrapAbort"},"disambiguator":0},{"data":{"TypeNs":"Unwrap"},"disambiguator":0}],"index":[0,143]},"generics":{"params":[],"predicates":[],"bounds":[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"Sized"},"disambiguator":0}],"index":[1,2689]},"generic_args":[{"Type":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"UnwrapAbort"},"disambiguator":0}],"index":[0,142]},{"impl":{"LocalBound":{"clause_id":18436060400986552328,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"UnwrapAbort"},"disambiguator":0},{"data":{"TypeNs":"Unwrap"},"disambiguator":0}],"index":[0,143]}}]}}]},"is_const":false,"is_positive":true}},"id":7242937820828818005}}],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":193,"col":15},"hi":{"line":193,"col":15},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":193,"col":15},"hi":{"line":193,"col":15},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"kind":{"Type":[[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"Sized"},"disambiguator":0}],"index":[1,2689]},"generic_args":[{"Type":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"UnwrapAbort"},"disambiguator":0}],"index":[0,142]},{"impl":{"LocalBound":{"clause_id":18436060400986552328,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"UnwrapAbort"},"disambiguator":0},{"data":{"TypeNs":"Unwrap"},"disambiguator":0}],"index":[0,143]}}]}}]},"is_const":false,"is_positive":true}},"id":7242937820828818005}}],null]},"span":{"lo":{"line":193,"col":4},"hi":{"line":193,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"defaultness":{"Default":{"has_value":false}},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," The underlying result type of the unwrap, in case of success."]},"id":280,"style":"Outer","span":{"lo":{"line":192,"col":4},"hi":{"line":192,"col":69},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"DocComment":["Line"," Add optimized unwrap behaviour that aborts the process instead of"]},"id":278,"style":"Outer","span":{"lo":{"line":189,"col":0},"hi":{"line":189,"col":69},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," panicking."]},"id":279,"style":"Outer","span":{"lo":{"line":190,"col":0},"hi":{"line":190,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}},{"ident":["unwrap_abort",{"lo":{"line":200,"col":7},"hi":{"line":200,"col":19},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"UnwrapAbort"},"disambiguator":0},{"data":{"ValueNs":"unwrap_abort"},"disambiguator":0}],"index":[0,144]},"generics":{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":200,"col":41},"hi":{"line":200,"col":41},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":200,"col":19},"hi":{"line":200,"col":19},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"kind":{"RequiredFn":[{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"decl":{"inputs":[{"Param":{"index":0,"name":"Self"}}],"output":{"Return":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"UnwrapAbort"},"disambiguator":0}],"index":[0,142]},{"impl":{"LocalBound":{"clause_id":18436060400986552328,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"UnwrapAbort"},"disambiguator":0},{"data":{"TypeNs":"Unwrap"},"disambiguator":0}],"index":[0,143]}}]}},"c_variadic":false,"implicit_self":"Imm","lifetime_elision_allowed":false},"span":{"lo":{"line":200,"col":4},"hi":{"line":200,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[["self",{"lo":{"line":200,"col":20},"hi":{"line":200,"col":24},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}]]]},"span":{"lo":{"line":200,"col":4},"hi":{"line":200,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"defaultness":{"Default":{"has_value":false}},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Unwrap or call [trap](../fn.trap.html). In contrast to"]},"id":281,"style":"Outer","span":{"lo":{"line":194,"col":4},"hi":{"line":194,"col":62},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," the unwrap methods on [Option::unwrap](https://doc.rust-lang.org/std/option/enum.Option.html#method.unwrap)"]},"id":282,"style":"Outer","span":{"lo":{"line":195,"col":4},"hi":{"line":195,"col":115},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," this method will tend to produce smaller code, at the cost of the"]},"id":283,"style":"Outer","span":{"lo":{"line":196,"col":4},"hi":{"line":196,"col":73},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," ability to handle the panic."]},"id":284,"style":"Outer","span":{"lo":{"line":197,"col":4},"hi":{"line":197,"col":36},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," This is intended to be used only in `Wasm` code, where panics cannot be"]},"id":285,"style":"Outer","span":{"lo":{"line":198,"col":4},"hi":{"line":198,"col":79},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," handled anyhow."]},"id":286,"style":"Outer","span":{"lo":{"line":199,"col":4},"hi":{"line":199,"col":23},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"DocComment":["Line"," Add optimized unwrap behaviour that aborts the process instead of"]},"id":278,"style":"Outer","span":{"lo":{"line":189,"col":0},"hi":{"line":189,"col":69},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," panicking."]},"id":279,"style":"Outer","span":{"lo":{"line":190,"col":0},"hi":{"line":190,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}}]]},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Add optimized unwrap behaviour that aborts the process instead of"]},"id":278,"style":"Outer","span":{"lo":{"line":189,"col":0},"hi":{"line":189,"col":69},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," panicking."]},"id":279,"style":"Outer","span":{"lo":{"line":190,"col":0},"hi":{"line":190,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"ExpectReport"},"disambiguator":0}],"index":[0,145]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"ExpectReport"},"disambiguator":0}],"index":[0,145]},"span":{"lo":{"line":206,"col":0},"hi":{"line":211,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"vis_span":{"lo":{"line":206,"col":0},"hi":{"line":211,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"kind":{"Trait":["No","Normal",{"params":[],"predicates":[],"bounds":[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"ExpectReport"},"disambiguator":0}],"index":[0,145]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}}]},"is_const":false,"is_positive":true}},"id":4563165526448952423}}],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":206,"col":22},"hi":{"line":206,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":206,"col":22},"hi":{"line":206,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"ExpectReport"},"disambiguator":0}],"index":[0,145]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}}]},"is_const":false,"is_positive":true}},"id":4563165526448952423}}],[{"ident":["Unwrap",{"lo":{"line":207,"col":9},"hi":{"line":207,"col":15},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"ExpectReport"},"disambiguator":0},{"data":{"TypeNs":"Unwrap"},"disambiguator":0}],"index":[0,146]},"generics":{"params":[],"predicates":[],"bounds":[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"Sized"},"disambiguator":0}],"index":[1,2689]},"generic_args":[{"Type":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"ExpectReport"},"disambiguator":0}],"index":[0,145]},{"impl":{"LocalBound":{"clause_id":4563165526448952423,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"ExpectReport"},"disambiguator":0},{"data":{"TypeNs":"Unwrap"},"disambiguator":0}],"index":[0,146]}}]}}]},"is_const":false,"is_positive":true}},"id":6926846262952482198}}],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":207,"col":15},"hi":{"line":207,"col":15},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":207,"col":15},"hi":{"line":207,"col":15},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"kind":{"Type":[[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"Sized"},"disambiguator":0}],"index":[1,2689]},"generic_args":[{"Type":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"ExpectReport"},"disambiguator":0}],"index":[0,145]},{"impl":{"LocalBound":{"clause_id":4563165526448952423,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"ExpectReport"},"disambiguator":0},{"data":{"TypeNs":"Unwrap"},"disambiguator":0}],"index":[0,146]}}]}}]},"is_const":false,"is_positive":true}},"id":6926846262952482198}}],null]},"span":{"lo":{"line":207,"col":4},"hi":{"line":207,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"defaultness":{"Default":{"has_value":false}},"attributes":{"attributes":[],"parent_attributes":[{"kind":{"DocComment":["Line"," Analogue of the `expect` methods on types such as [Option](https://doc.rust-lang.org/std/option/enum.Option.html),"]},"id":287,"style":"Outer","span":{"lo":{"line":204,"col":0},"hi":{"line":204,"col":118},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," but useful in a Wasm setting."]},"id":288,"style":"Outer","span":{"lo":{"line":205,"col":0},"hi":{"line":205,"col":33},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}},{"ident":["expect_report",{"lo":{"line":210,"col":7},"hi":{"line":210,"col":20},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"ExpectReport"},"disambiguator":0},{"data":{"ValueNs":"expect_report"},"disambiguator":0}],"index":[0,147]},"generics":{"params":[{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"ExpectReport"},"disambiguator":0},{"data":{"ValueNs":"expect_report"},"disambiguator":0}],"index":[0,147]},"local_id":1},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"ExpectReport"},"disambiguator":0},{"data":{"ValueNs":"expect_report"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,268]},"name":"Fresh","span":{"lo":{"line":210,"col":32},"hi":{"line":210,"col":33},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]}],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":210,"col":53},"hi":{"line":210,"col":53},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":210,"col":20},"hi":{"line":210,"col":20},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"kind":{"RequiredFn":[{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"decl":{"inputs":[{"Param":{"index":0,"name":"Self"}},{"Ref":[{"kind":{"ReLateBound":[0,{"var":0,"kind":{"BrNamed":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"ExpectReport"},"disambiguator":0},{"data":{"ValueNs":"expect_report"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,268]},"'_"]}}]}},"Str",false]}],"output":{"Return":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"ExpectReport"},"disambiguator":0}],"index":[0,145]},{"impl":{"LocalBound":{"clause_id":4563165526448952423,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"ExpectReport"},"disambiguator":0},{"data":{"TypeNs":"Unwrap"},"disambiguator":0}],"index":[0,146]}}]}},"c_variadic":false,"implicit_self":"Imm","lifetime_elision_allowed":true},"span":{"lo":{"line":210,"col":4},"hi":{"line":210,"col":54},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[["self",{"lo":{"line":210,"col":21},"hi":{"line":210,"col":25},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],["msg",{"lo":{"line":210,"col":27},"hi":{"line":210,"col":30},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}]]]},"span":{"lo":{"line":210,"col":4},"hi":{"line":210,"col":54},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"defaultness":{"Default":{"has_value":false}},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Like the default `expect` on, e.g., `Result`, but calling"]},"id":289,"style":"Outer","span":{"lo":{"line":208,"col":4},"hi":{"line":208,"col":65},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," [fail](macro.fail.html) with the given message, instead of `panic`."]},"id":290,"style":"Outer","span":{"lo":{"line":209,"col":4},"hi":{"line":209,"col":75},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"DocComment":["Line"," Analogue of the `expect` methods on types such as [Option](https://doc.rust-lang.org/std/option/enum.Option.html),"]},"id":287,"style":"Outer","span":{"lo":{"line":204,"col":0},"hi":{"line":204,"col":118},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," but useful in a Wasm setting."]},"id":288,"style":"Outer","span":{"lo":{"line":205,"col":0},"hi":{"line":205,"col":33},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}}]]},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Analogue of the `expect` methods on types such as [Option](https://doc.rust-lang.org/std/option/enum.Option.html),"]},"id":287,"style":"Outer","span":{"lo":{"line":204,"col":0},"hi":{"line":204,"col":118},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," but useful in a Wasm setting."]},"id":288,"style":"Outer","span":{"lo":{"line":205,"col":0},"hi":{"line":205,"col":33},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"ExpectErrReport"},"disambiguator":0}],"index":[0,148]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"ExpectErrReport"},"disambiguator":0}],"index":[0,148]},"span":{"lo":{"line":216,"col":0},"hi":{"line":221,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"vis_span":{"lo":{"line":216,"col":0},"hi":{"line":221,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"kind":{"Trait":["No","Normal",{"params":[],"predicates":[],"bounds":[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"ExpectErrReport"},"disambiguator":0}],"index":[0,148]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}}]},"is_const":false,"is_positive":true}},"id":18023446435381850670}}],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":216,"col":25},"hi":{"line":216,"col":25},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":216,"col":25},"hi":{"line":216,"col":25},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"ExpectErrReport"},"disambiguator":0}],"index":[0,148]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}}]},"is_const":false,"is_positive":true}},"id":18023446435381850670}}],[{"ident":["Unwrap",{"lo":{"line":217,"col":9},"hi":{"line":217,"col":15},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"ExpectErrReport"},"disambiguator":0},{"data":{"TypeNs":"Unwrap"},"disambiguator":0}],"index":[0,149]},"generics":{"params":[],"predicates":[],"bounds":[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"Sized"},"disambiguator":0}],"index":[1,2689]},"generic_args":[{"Type":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"ExpectErrReport"},"disambiguator":0}],"index":[0,148]},{"impl":{"LocalBound":{"clause_id":18023446435381850670,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"ExpectErrReport"},"disambiguator":0},{"data":{"TypeNs":"Unwrap"},"disambiguator":0}],"index":[0,149]}}]}}]},"is_const":false,"is_positive":true}},"id":8136654248162117203}}],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":217,"col":15},"hi":{"line":217,"col":15},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":217,"col":15},"hi":{"line":217,"col":15},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"kind":{"Type":[[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"Sized"},"disambiguator":0}],"index":[1,2689]},"generic_args":[{"Type":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"ExpectErrReport"},"disambiguator":0}],"index":[0,148]},{"impl":{"LocalBound":{"clause_id":18023446435381850670,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"ExpectErrReport"},"disambiguator":0},{"data":{"TypeNs":"Unwrap"},"disambiguator":0}],"index":[0,149]}}]}}]},"is_const":false,"is_positive":true}},"id":8136654248162117203}}],null]},"span":{"lo":{"line":217,"col":4},"hi":{"line":217,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"defaultness":{"Default":{"has_value":false}},"attributes":{"attributes":[],"parent_attributes":[{"kind":{"DocComment":["Line"," Analogue of the `expect_err` methods on [Result](https://doc.rust-lang.org/std/result/enum.Result.html),"]},"id":291,"style":"Outer","span":{"lo":{"line":214,"col":0},"hi":{"line":214,"col":108},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," but useful in a Wasm setting."]},"id":292,"style":"Outer","span":{"lo":{"line":215,"col":0},"hi":{"line":215,"col":33},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}},{"ident":["expect_err_report",{"lo":{"line":220,"col":7},"hi":{"line":220,"col":24},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"ExpectErrReport"},"disambiguator":0},{"data":{"ValueNs":"expect_err_report"},"disambiguator":0}],"index":[0,150]},"generics":{"params":[{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"ExpectErrReport"},"disambiguator":0},{"data":{"ValueNs":"expect_err_report"},"disambiguator":0}],"index":[0,150]},"local_id":1},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"ExpectErrReport"},"disambiguator":0},{"data":{"ValueNs":"expect_err_report"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,269]},"name":"Fresh","span":{"lo":{"line":220,"col":36},"hi":{"line":220,"col":37},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]}],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":220,"col":57},"hi":{"line":220,"col":57},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":220,"col":24},"hi":{"line":220,"col":24},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"kind":{"RequiredFn":[{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"decl":{"inputs":[{"Param":{"index":0,"name":"Self"}},{"Ref":[{"kind":{"ReLateBound":[0,{"var":0,"kind":{"BrNamed":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"ExpectErrReport"},"disambiguator":0},{"data":{"ValueNs":"expect_err_report"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,269]},"'_"]}}]}},"Str",false]}],"output":{"Return":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"ExpectErrReport"},"disambiguator":0}],"index":[0,148]},{"impl":{"LocalBound":{"clause_id":18023446435381850670,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"ExpectErrReport"},"disambiguator":0},{"data":{"TypeNs":"Unwrap"},"disambiguator":0}],"index":[0,149]}}]}},"c_variadic":false,"implicit_self":"Imm","lifetime_elision_allowed":true},"span":{"lo":{"line":220,"col":4},"hi":{"line":220,"col":58},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[["self",{"lo":{"line":220,"col":25},"hi":{"line":220,"col":29},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],["msg",{"lo":{"line":220,"col":31},"hi":{"line":220,"col":34},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}]]]},"span":{"lo":{"line":220,"col":4},"hi":{"line":220,"col":58},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"defaultness":{"Default":{"has_value":false}},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Like the default `expect_err` on, e.g., `Result`, but calling"]},"id":293,"style":"Outer","span":{"lo":{"line":218,"col":4},"hi":{"line":218,"col":69},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," [fail](macro.fail.html) with the given message, instead of `panic`."]},"id":294,"style":"Outer","span":{"lo":{"line":219,"col":4},"hi":{"line":219,"col":75},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"DocComment":["Line"," Analogue of the `expect_err` methods on [Result](https://doc.rust-lang.org/std/result/enum.Result.html),"]},"id":291,"style":"Outer","span":{"lo":{"line":214,"col":0},"hi":{"line":214,"col":108},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," but useful in a Wasm setting."]},"id":292,"style":"Outer","span":{"lo":{"line":215,"col":0},"hi":{"line":215,"col":33},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}}]]},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Analogue of the `expect_err` methods on [Result](https://doc.rust-lang.org/std/result/enum.Result.html),"]},"id":291,"style":"Outer","span":{"lo":{"line":214,"col":0},"hi":{"line":214,"col":108},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," but useful in a Wasm setting."]},"id":292,"style":"Outer","span":{"lo":{"line":215,"col":0},"hi":{"line":215,"col":33},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"ExpectNoneReport"},"disambiguator":0}],"index":[0,151]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"ExpectNoneReport"},"disambiguator":0}],"index":[0,151]},"span":{"lo":{"line":226,"col":0},"hi":{"line":230,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"vis_span":{"lo":{"line":226,"col":0},"hi":{"line":230,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"kind":{"Trait":["No","Normal",{"params":[],"predicates":[],"bounds":[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"ExpectNoneReport"},"disambiguator":0}],"index":[0,151]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}}]},"is_const":false,"is_positive":true}},"id":6816229183596714811}}],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":226,"col":26},"hi":{"line":226,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":226,"col":26},"hi":{"line":226,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"ExpectNoneReport"},"disambiguator":0}],"index":[0,151]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}}]},"is_const":false,"is_positive":true}},"id":6816229183596714811}}],[{"ident":["expect_none_report",{"lo":{"line":229,"col":7},"hi":{"line":229,"col":25},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"ExpectNoneReport"},"disambiguator":0},{"data":{"ValueNs":"expect_none_report"},"disambiguator":0}],"index":[0,152]},"generics":{"params":[{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"ExpectNoneReport"},"disambiguator":0},{"data":{"ValueNs":"expect_none_report"},"disambiguator":0}],"index":[0,152]},"local_id":1},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"ExpectNoneReport"},"disambiguator":0},{"data":{"ValueNs":"expect_none_report"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,270]},"name":"Fresh","span":{"lo":{"line":229,"col":37},"hi":{"line":229,"col":38},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]}],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":229,"col":42},"hi":{"line":229,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":229,"col":25},"hi":{"line":229,"col":25},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"kind":{"RequiredFn":[{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"decl":{"inputs":[{"Param":{"index":0,"name":"Self"}},{"Ref":[{"kind":{"ReLateBound":[0,{"var":0,"kind":{"BrNamed":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"ExpectNoneReport"},"disambiguator":0},{"data":{"ValueNs":"expect_none_report"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,270]},"'_"]}}]}},"Str",false]}],"output":{"DefaultReturn":{"lo":{"line":229,"col":42},"hi":{"line":229,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"c_variadic":false,"implicit_self":"Imm","lifetime_elision_allowed":true},"span":{"lo":{"line":229,"col":4},"hi":{"line":229,"col":43},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[["self",{"lo":{"line":229,"col":26},"hi":{"line":229,"col":30},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],["msg",{"lo":{"line":229,"col":32},"hi":{"line":229,"col":35},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}]]]},"span":{"lo":{"line":229,"col":4},"hi":{"line":229,"col":43},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"defaultness":{"Default":{"has_value":false}},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Like the default `expect_none_report` on, e.g., `Option`, but calling"]},"id":297,"style":"Outer","span":{"lo":{"line":227,"col":4},"hi":{"line":227,"col":77},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," [fail](macro.fail.html) with the given message, instead of `panic`."]},"id":298,"style":"Outer","span":{"lo":{"line":228,"col":4},"hi":{"line":228,"col":75},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"DocComment":["Line"," Analogue of the `expect_none` methods on [Option](https://doc.rust-lang.org/std/option/enum.Option.html),"]},"id":295,"style":"Outer","span":{"lo":{"line":224,"col":0},"hi":{"line":224,"col":109},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," but useful in a Wasm setting."]},"id":296,"style":"Outer","span":{"lo":{"line":225,"col":0},"hi":{"line":225,"col":33},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}}]]},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Analogue of the `expect_none` methods on [Option](https://doc.rust-lang.org/std/option/enum.Option.html),"]},"id":295,"style":"Outer","span":{"lo":{"line":224,"col":0},"hi":{"line":224,"col":109},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," but useful in a Wasm setting."]},"id":296,"style":"Outer","span":{"lo":{"line":225,"col":0},"hi":{"line":225,"col":33},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"SerialCtx"},"disambiguator":0}],"index":[0,153]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"SerialCtx"},"disambiguator":0}],"index":[0,153]},"span":{"lo":{"line":239,"col":0},"hi":{"line":251,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"vis_span":{"lo":{"line":239,"col":0},"hi":{"line":251,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"kind":{"Trait":["No","Normal",{"params":[],"predicates":[],"bounds":[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"SerialCtx"},"disambiguator":0}],"index":[0,153]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}}]},"is_const":false,"is_positive":true}},"id":14884518810587756718}}],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":239,"col":19},"hi":{"line":239,"col":19},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":239,"col":19},"hi":{"line":239,"col":19},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"SerialCtx"},"disambiguator":0}],"index":[0,153]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}}]},"is_const":false,"is_positive":true}},"id":14884518810587756718}}],[{"ident":["serial_ctx",{"lo":{"line":246,"col":7},"hi":{"line":246,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"SerialCtx"},"disambiguator":0},{"data":{"ValueNs":"serial_ctx"},"disambiguator":0}],"index":[0,154]},"generics":{"params":[{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"SerialCtx"},"disambiguator":0},{"data":{"ValueNs":"serial_ctx"},"disambiguator":0}],"index":[0,154]},"local_id":6},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"SerialCtx"},"disambiguator":0},{"data":{"ValueNs":"serial_ctx"},"disambiguator":0},{"data":{"TypeNs":"W"},"disambiguator":0}],"index":[0,155]},"name":{"Plain":{"name":"W","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"SerialCtx"},"disambiguator":0},{"data":{"ValueNs":"serial_ctx"},"disambiguator":0}],"index":[0,154]},"local_id":6}}},"span":{"lo":{"line":246,"col":18},"hi":{"line":246,"col":19},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"pure_wrt_drop":false,"kind":{"Type":{"default":null,"synthetic":false}},"colon_span":{"lo":{"line":246,"col":19},"hi":{"line":246,"col":20},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"attributes":[]},{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"SerialCtx"},"disambiguator":0},{"data":{"ValueNs":"serial_ctx"},"disambiguator":0}],"index":[0,154]},"local_id":7},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"SerialCtx"},"disambiguator":0},{"data":{"ValueNs":"serial_ctx"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,271]},"name":"Fresh","span":{"lo":{"line":247,"col":8},"hi":{"line":247,"col":9},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]},{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"SerialCtx"},"disambiguator":0},{"data":{"ValueNs":"serial_ctx"},"disambiguator":0}],"index":[0,154]},"local_id":8},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"SerialCtx"},"disambiguator":0},{"data":{"ValueNs":"serial_ctx"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":1}],"index":[0,272]},"name":"Fresh","span":{"lo":{"line":249,"col":13},"hi":{"line":249,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]}],"predicates":[{"BoundPredicate":{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"SerialCtx"},"disambiguator":0},{"data":{"ValueNs":"serial_ctx"},"disambiguator":0}],"index":[0,154]},"local_id":5},"span":{"lo":{"line":246,"col":19},"hi":{"line":246,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"origin":"GenericParam","bound_generic_params":[],"bounded_ty":{"Param":{"index":1,"name":"W"}}}}],"bounds":[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"Sized"},"disambiguator":0}],"index":[1,2689]},"generic_args":[{"Type":{"Param":{"index":1,"name":"W"}}}]},"is_const":false,"is_positive":true}},"id":12551622595042095548}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"concordium_contracts_common","path":[{"data":{"TypeNs":"traits"},"disambiguator":0},{"data":{"TypeNs":"Write"},"disambiguator":0}],"index":[5,37]},"generic_args":[{"Type":{"Param":{"index":1,"name":"W"}}}]},"is_const":false,"is_positive":true}},"id":8183547936778835857}}],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":250,"col":32},"hi":{"line":250,"col":32},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":246,"col":17},"hi":{"line":246,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"kind":{"RequiredFn":[{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"decl":{"inputs":[{"Ref":[{"kind":{"ReLateBound":[0,{"var":0,"kind":{"BrNamed":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"SerialCtx"},"disambiguator":0},{"data":{"ValueNs":"serial_ctx"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,271]},"'_"]}}]}},{"Param":{"index":0,"name":"Self"}},false]},{"Adt":{"generic_args":[],"def_id":{"krate":"concordium_contracts_common","path":[{"data":{"TypeNs":"schema"},"disambiguator":0},{"data":{"TypeNs":"SizeLength"},"disambiguator":0}],"index":[5,761]}}},{"Ref":[{"kind":{"ReLateBound":[0,{"var":1,"kind":{"BrNamed":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"SerialCtx"},"disambiguator":0},{"data":{"ValueNs":"serial_ctx"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":1}],"index":[0,272]},"'_"]}}]}},{"Param":{"index":1,"name":"W"}},false]}],"output":{"Return":{"Tuple":[{"Adt":{"generic_args":[{"Type":{"Tuple":[]}},{"Type":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":1,"name":"W"}}}],"trait_def_id":[{"krate":"concordium_contracts_common","path":[{"data":{"TypeNs":"traits"},"disambiguator":0},{"data":{"TypeNs":"Write"},"disambiguator":0}],"index":[5,37]},{"impl":{"LocalBound":{"clause_id":8183547936778835857,"path":[]}},"args":[]}],"def_id":{"krate":"concordium_contracts_common","path":[{"data":{"TypeNs":"traits"},"disambiguator":0},{"data":{"TypeNs":"Write"},"disambiguator":0},{"data":{"TypeNs":"Err"},"disambiguator":0}],"index":[5,38]}}]}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"result"},"disambiguator":0},{"data":{"TypeNs":"Result"},"disambiguator":0}],"index":[1,41506]}}},{"Param":{"index":1,"name":"W"}}]}},"c_variadic":false,"implicit_self":"ImmRef","lifetime_elision_allowed":true},"span":{"lo":{"line":246,"col":4},"hi":{"line":250,"col":33},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[["self",{"lo":{"line":247,"col":9},"hi":{"line":247,"col":13},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],["size_length",{"lo":{"line":248,"col":8},"hi":{"line":248,"col":19},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],["out",{"lo":{"line":249,"col":8},"hi":{"line":249,"col":11},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}]]]},"span":{"lo":{"line":246,"col":4},"hi":{"line":250,"col":33},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"defaultness":{"Default":{"has_value":false}},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Attempt to write the structure into the provided writer, failing if"]},"id":305,"style":"Outer","span":{"lo":{"line":240,"col":4},"hi":{"line":240,"col":75},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," if the length cannot be represented in the provided `size_length` or"]},"id":306,"style":"Outer","span":{"lo":{"line":241,"col":4},"hi":{"line":241,"col":76},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," only part of the structure could be written."]},"id":307,"style":"Outer","span":{"lo":{"line":242,"col":4},"hi":{"line":242,"col":52},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line",""]},"id":308,"style":"Outer","span":{"lo":{"line":243,"col":4},"hi":{"line":243,"col":7},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," NB: We use Result instead of Option for better composability with other"]},"id":309,"style":"Outer","span":{"lo":{"line":244,"col":4},"hi":{"line":244,"col":79},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," constructs."]},"id":310,"style":"Outer","span":{"lo":{"line":245,"col":4},"hi":{"line":245,"col":19},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"DocComment":["Line"," The `SerialCtx` trait provides a means of writing structures into byte-sinks"]},"id":299,"style":"Outer","span":{"lo":{"line":233,"col":0},"hi":{"line":233,"col":80},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," (`Write`) using contextual information."]},"id":300,"style":"Outer","span":{"lo":{"line":234,"col":0},"hi":{"line":234,"col":43},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," The contextual information is:"]},"id":301,"style":"Outer","span":{"lo":{"line":235,"col":0},"hi":{"line":235,"col":34},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line",""]},"id":302,"style":"Outer","span":{"lo":{"line":236,"col":0},"hi":{"line":236,"col":3},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," - `size_length`: The number of bytes used to record the length of the"]},"id":303,"style":"Outer","span":{"lo":{"line":237,"col":0},"hi":{"line":237,"col":75},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," data."]},"id":304,"style":"Outer","span":{"lo":{"line":238,"col":0},"hi":{"line":238,"col":13},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}}]]},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," The `SerialCtx` trait provides a means of writing structures into byte-sinks"]},"id":299,"style":"Outer","span":{"lo":{"line":233,"col":0},"hi":{"line":233,"col":80},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," (`Write`) using contextual information."]},"id":300,"style":"Outer","span":{"lo":{"line":234,"col":0},"hi":{"line":234,"col":43},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," The contextual information is:"]},"id":301,"style":"Outer","span":{"lo":{"line":235,"col":0},"hi":{"line":235,"col":34},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line",""]},"id":302,"style":"Outer","span":{"lo":{"line":236,"col":0},"hi":{"line":236,"col":3},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," - `size_length`: The number of bytes used to record the length of the"]},"id":303,"style":"Outer","span":{"lo":{"line":237,"col":0},"hi":{"line":237,"col":75},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," data."]},"id":304,"style":"Outer","span":{"lo":{"line":238,"col":0},"hi":{"line":238,"col":13},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"DeserialCtx"},"disambiguator":0}],"index":[0,156]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"DeserialCtx"},"disambiguator":0}],"index":[0,156]},"span":{"lo":{"line":262,"col":0},"hi":{"line":270,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"vis_span":{"lo":{"line":262,"col":0},"hi":{"line":270,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"kind":{"Trait":["No","Normal",{"params":[],"predicates":[],"bounds":[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"Sized"},"disambiguator":0}],"index":[1,2689]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}}]},"is_const":false,"is_positive":true}},"id":17322672367251655876}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"DeserialCtx"},"disambiguator":0}],"index":[0,156]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}}]},"is_const":false,"is_positive":true}},"id":16635740711172919924}}],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":262,"col":28},"hi":{"line":262,"col":28},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":262,"col":21},"hi":{"line":262,"col":21},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"Sized"},"disambiguator":0}],"index":[1,2689]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}}]},"is_const":false,"is_positive":true}},"id":17322672367251655876}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"DeserialCtx"},"disambiguator":0}],"index":[0,156]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}}]},"is_const":false,"is_positive":true}},"id":16635740711172919924}}],[{"ident":["deserial_ctx",{"lo":{"line":265,"col":7},"hi":{"line":265,"col":19},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"DeserialCtx"},"disambiguator":0},{"data":{"ValueNs":"deserial_ctx"},"disambiguator":0}],"index":[0,157]},"generics":{"params":[{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"DeserialCtx"},"disambiguator":0},{"data":{"ValueNs":"deserial_ctx"},"disambiguator":0}],"index":[0,157]},"local_id":6},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"DeserialCtx"},"disambiguator":0},{"data":{"ValueNs":"deserial_ctx"},"disambiguator":0},{"data":{"TypeNs":"R"},"disambiguator":0}],"index":[0,158]},"name":{"Plain":{"name":"R","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"DeserialCtx"},"disambiguator":0},{"data":{"ValueNs":"deserial_ctx"},"disambiguator":0}],"index":[0,157]},"local_id":6}}},"span":{"lo":{"line":265,"col":20},"hi":{"line":265,"col":21},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"pure_wrt_drop":false,"kind":{"Type":{"default":null,"synthetic":false}},"colon_span":{"lo":{"line":265,"col":21},"hi":{"line":265,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"attributes":[]},{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"DeserialCtx"},"disambiguator":0},{"data":{"ValueNs":"deserial_ctx"},"disambiguator":0}],"index":[0,157]},"local_id":7},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"DeserialCtx"},"disambiguator":0},{"data":{"ValueNs":"deserial_ctx"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,273]},"name":"Fresh","span":{"lo":{"line":268,"col":16},"hi":{"line":268,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]}],"predicates":[{"BoundPredicate":{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"DeserialCtx"},"disambiguator":0},{"data":{"ValueNs":"deserial_ctx"},"disambiguator":0}],"index":[0,157]},"local_id":5},"span":{"lo":{"line":265,"col":21},"hi":{"line":265,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"origin":"GenericParam","bound_generic_params":[],"bounded_ty":{"Param":{"index":1,"name":"R"}}}}],"bounds":[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"Sized"},"disambiguator":0}],"index":[1,2689]},"generic_args":[{"Type":{"Param":{"index":1,"name":"R"}}}]},"is_const":false,"is_positive":true}},"id":426491624962477427}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"concordium_contracts_common","path":[{"data":{"TypeNs":"traits"},"disambiguator":0},{"data":{"TypeNs":"Read"},"disambiguator":0}],"index":[5,26]},"generic_args":[{"Type":{"Param":{"index":1,"name":"R"}}}]},"is_const":false,"is_positive":true}},"id":7941244948656693720}}],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":269,"col":31},"hi":{"line":269,"col":31},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":265,"col":19},"hi":{"line":265,"col":28},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"kind":{"RequiredFn":[{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"decl":{"inputs":[{"Adt":{"generic_args":[],"def_id":{"krate":"concordium_contracts_common","path":[{"data":{"TypeNs":"schema"},"disambiguator":0},{"data":{"TypeNs":"SizeLength"},"disambiguator":0}],"index":[5,761]}}},"Bool",{"Ref":[{"kind":{"ReLateBound":[0,{"var":0,"kind":{"BrNamed":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"DeserialCtx"},"disambiguator":0},{"data":{"ValueNs":"deserial_ctx"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,273]},"'_"]}}]}},{"Param":{"index":1,"name":"R"}},false]}],"output":{"Return":{"Tuple":[{"Adt":{"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}},{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"concordium_contracts_common","path":[{"data":{"TypeNs":"types"},"disambiguator":0},{"data":{"TypeNs":"ParseError"},"disambiguator":0}],"index":[5,1172]}}}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"result"},"disambiguator":0},{"data":{"TypeNs":"Result"},"disambiguator":0}],"index":[1,41506]}}},{"Param":{"index":1,"name":"R"}}]}},"c_variadic":false,"implicit_self":"None","lifetime_elision_allowed":true},"span":{"lo":{"line":265,"col":4},"hi":{"line":269,"col":32},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[["size_length",{"lo":{"line":266,"col":8},"hi":{"line":266,"col":19},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],["ensure_ordered",{"lo":{"line":267,"col":8},"hi":{"line":267,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],["source",{"lo":{"line":268,"col":8},"hi":{"line":268,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}]]]},"span":{"lo":{"line":265,"col":4},"hi":{"line":269,"col":32},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"defaultness":{"Default":{"has_value":false}},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Attempt to read a structure from a given source and context, failing if"]},"id":319,"style":"Outer","span":{"lo":{"line":263,"col":4},"hi":{"line":263,"col":79},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," an error occurs during deserialization or reading."]},"id":320,"style":"Outer","span":{"lo":{"line":264,"col":4},"hi":{"line":264,"col":58},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"DocComment":["Line"," The `DeserialCtx` trait provides a means of reading structures from"]},"id":311,"style":"Outer","span":{"lo":{"line":254,"col":0},"hi":{"line":254,"col":71},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," byte-sources (`Read`) using contextual information."]},"id":312,"style":"Outer","span":{"lo":{"line":255,"col":0},"hi":{"line":255,"col":55},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," The contextual information is:"]},"id":313,"style":"Outer","span":{"lo":{"line":256,"col":0},"hi":{"line":256,"col":34},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line",""]},"id":314,"style":"Outer","span":{"lo":{"line":257,"col":0},"hi":{"line":257,"col":3},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," - `size_length`: The expected number of bytes used for the length of the"]},"id":315,"style":"Outer","span":{"lo":{"line":258,"col":0},"hi":{"line":258,"col":78},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," data."]},"id":316,"style":"Outer","span":{"lo":{"line":259,"col":0},"hi":{"line":259,"col":13},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," - `ensure_ordered`: Whether the ordering should be ensured, for example"]},"id":317,"style":"Outer","span":{"lo":{"line":260,"col":0},"hi":{"line":260,"col":77},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," that keys in `BTreeMap` and `BTreeSet` are in strictly increasing order."]},"id":318,"style":"Outer","span":{"lo":{"line":261,"col":0},"hi":{"line":261,"col":80},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}}]]},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," The `DeserialCtx` trait provides a means of reading structures from"]},"id":311,"style":"Outer","span":{"lo":{"line":254,"col":0},"hi":{"line":254,"col":71},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," byte-sources (`Read`) using contextual information."]},"id":312,"style":"Outer","span":{"lo":{"line":255,"col":0},"hi":{"line":255,"col":55},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," The contextual information is:"]},"id":313,"style":"Outer","span":{"lo":{"line":256,"col":0},"hi":{"line":256,"col":34},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line",""]},"id":314,"style":"Outer","span":{"lo":{"line":257,"col":0},"hi":{"line":257,"col":3},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," - `size_length`: The expected number of bytes used for the length of the"]},"id":315,"style":"Outer","span":{"lo":{"line":258,"col":0},"hi":{"line":258,"col":78},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," data."]},"id":316,"style":"Outer","span":{"lo":{"line":259,"col":0},"hi":{"line":259,"col":13},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," - `ensure_ordered`: Whether the ordering should be ensured, for example"]},"id":317,"style":"Outer","span":{"lo":{"line":260,"col":0},"hi":{"line":260,"col":77},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," that keys in `BTreeMap` and `BTreeSet` are in strictly increasing order."]},"id":318,"style":"Outer","span":{"lo":{"line":261,"col":0},"hi":{"line":261,"col":80},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]}]},"attributes":{"attributes":[],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":"Use","disambiguator":0}],"index":[0,90]},"span":{"lo":{"line":5,"col":0},"hi":{"line":5,"col":13},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"vis_span":{"lo":{"line":5,"col":0},"hi":{"line":5,"col":13},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"kind":{"Use":[{"span":{"lo":{"line":5,"col":4},"hi":{"line":5,"col":9},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"res":[{"Def":[{"DefKind":{"todo":"Mod"}},{"krate":"hacspec_concordium","path":[],"index":[0,0]}]}],"segments":[{"ident":["crate",{"lo":{"line":5,"col":4},"hi":{"line":5,"col":9},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":"Use","disambiguator":0}],"index":[0,90]},"local_id":1},"res":"Err","args":null,"infer_args":false}],"rename":null},"Glob"]},"attributes":{"attributes":[],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasParameter"},"disambiguator":0}],"index":[0,91]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasParameter"},"disambiguator":0}],"index":[0,91]},"span":{"lo":{"line":14,"col":0},"hi":{"line":17,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"vis_span":{"lo":{"line":14,"col":0},"hi":{"line":17,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"kind":{"Trait":["No","Normal",{"params":[],"predicates":[],"bounds":[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"concordium_contracts_common","path":[{"data":{"TypeNs":"traits"},"disambiguator":0},{"data":{"TypeNs":"Read"},"disambiguator":0}],"index":[5,26]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}}]},"is_const":false,"is_positive":true}},"id":2437756474506696380}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasParameter"},"disambiguator":0}],"index":[0,91]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}}]},"is_const":false,"is_positive":true}},"id":6468282439157936302}}],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":14,"col":28},"hi":{"line":14,"col":28},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":14,"col":22},"hi":{"line":14,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"concordium_contracts_common","path":[{"data":{"TypeNs":"traits"},"disambiguator":0},{"data":{"TypeNs":"Read"},"disambiguator":0}],"index":[5,26]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}}]},"is_const":false,"is_positive":true}},"id":2437756474506696380}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasParameter"},"disambiguator":0}],"index":[0,91]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}}]},"is_const":false,"is_positive":true}},"id":6468282439157936302}}],[{"ident":["size",{"lo":{"line":16,"col":7},"hi":{"line":16,"col":11},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasParameter"},"disambiguator":0},{"data":{"ValueNs":"size"},"disambiguator":0}],"index":[0,92]},"generics":{"params":[{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasParameter"},"disambiguator":0},{"data":{"ValueNs":"size"},"disambiguator":0}],"index":[0,92]},"local_id":1},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasParameter"},"disambiguator":0},{"data":{"ValueNs":"size"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,243]},"name":"Fresh","span":{"lo":{"line":16,"col":12},"hi":{"line":16,"col":13},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]}],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":16,"col":25},"hi":{"line":16,"col":25},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":16,"col":11},"hi":{"line":16,"col":11},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"kind":{"RequiredFn":[{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"decl":{"inputs":[{"Ref":[{"kind":{"ReLateBound":[0,{"var":0,"kind":{"BrNamed":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasParameter"},"disambiguator":0},{"data":{"ValueNs":"size"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,243]},"'_"]}}]}},{"Param":{"index":0,"name":"Self"}},false]}],"output":{"Return":{"Uint":"U32"}},"c_variadic":false,"implicit_self":"ImmRef","lifetime_elision_allowed":true},"span":{"lo":{"line":16,"col":4},"hi":{"line":16,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[["self",{"lo":{"line":16,"col":13},"hi":{"line":16,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}]]]},"span":{"lo":{"line":16,"col":4},"hi":{"line":16,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"defaultness":{"Default":{"has_value":false}},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Get the size of the parameter to the method."]},"id":201,"style":"Outer","span":{"lo":{"line":15,"col":4},"hi":{"line":15,"col":52},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"DocComment":["Line"," Objects which can access parameters to contracts."]},"id":194,"style":"Outer","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":53},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line",""]},"id":195,"style":"Outer","span":{"lo":{"line":8,"col":0},"hi":{"line":8,"col":3},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," This trait has a Read supertrait which means that structured parameters can"]},"id":196,"style":"Outer","span":{"lo":{"line":9,"col":0},"hi":{"line":9,"col":79},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," be directly deserialized by using `.get()` function from the `Get` trait."]},"id":197,"style":"Outer","span":{"lo":{"line":10,"col":0},"hi":{"line":10,"col":77},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line",""]},"id":198,"style":"Outer","span":{"lo":{"line":11,"col":0},"hi":{"line":11,"col":3},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," The reuse of `Read` methods is the reason for the slightly strange choice of"]},"id":199,"style":"Outer","span":{"lo":{"line":12,"col":0},"hi":{"line":12,"col":80},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," methods of this trait."]},"id":200,"style":"Outer","span":{"lo":{"line":13,"col":0},"hi":{"line":13,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}}]]},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Objects which can access parameters to contracts."]},"id":194,"style":"Outer","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":53},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line",""]},"id":195,"style":"Outer","span":{"lo":{"line":8,"col":0},"hi":{"line":8,"col":3},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," This trait has a Read supertrait which means that structured parameters can"]},"id":196,"style":"Outer","span":{"lo":{"line":9,"col":0},"hi":{"line":9,"col":79},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," be directly deserialized by using `.get()` function from the `Get` trait."]},"id":197,"style":"Outer","span":{"lo":{"line":10,"col":0},"hi":{"line":10,"col":77},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line",""]},"id":198,"style":"Outer","span":{"lo":{"line":11,"col":0},"hi":{"line":11,"col":3},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," The reuse of `Read` methods is the reason for the slightly strange choice of"]},"id":199,"style":"Outer","span":{"lo":{"line":12,"col":0},"hi":{"line":12,"col":80},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," methods of this trait."]},"id":200,"style":"Outer","span":{"lo":{"line":13,"col":0},"hi":{"line":13,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasChainMetadata"},"disambiguator":0}],"index":[0,93]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasChainMetadata"},"disambiguator":0}],"index":[0,93]},"span":{"lo":{"line":20,"col":0},"hi":{"line":23,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"vis_span":{"lo":{"line":20,"col":0},"hi":{"line":23,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"kind":{"Trait":["No","Normal",{"params":[],"predicates":[],"bounds":[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasChainMetadata"},"disambiguator":0}],"index":[0,93]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}}]},"is_const":false,"is_positive":true}},"id":10432781440892472764}}],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":20,"col":26},"hi":{"line":20,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":20,"col":26},"hi":{"line":20,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasChainMetadata"},"disambiguator":0}],"index":[0,93]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}}]},"is_const":false,"is_positive":true}},"id":10432781440892472764}}],[{"ident":["slot_time",{"lo":{"line":22,"col":7},"hi":{"line":22,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasChainMetadata"},"disambiguator":0},{"data":{"ValueNs":"slot_time"},"disambiguator":0}],"index":[0,94]},"generics":{"params":[{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasChainMetadata"},"disambiguator":0},{"data":{"ValueNs":"slot_time"},"disambiguator":0}],"index":[0,94]},"local_id":1},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasChainMetadata"},"disambiguator":0},{"data":{"ValueNs":"slot_time"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,244]},"name":"Fresh","span":{"lo":{"line":22,"col":17},"hi":{"line":22,"col":18},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]}],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":22,"col":35},"hi":{"line":22,"col":35},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":22,"col":16},"hi":{"line":22,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"kind":{"RequiredFn":[{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"decl":{"inputs":[{"Ref":[{"kind":{"ReLateBound":[0,{"var":0,"kind":{"BrNamed":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasChainMetadata"},"disambiguator":0},{"data":{"ValueNs":"slot_time"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,244]},"'_"]}}]}},{"Param":{"index":0,"name":"Self"}},false]}],"output":{"Return":{"Adt":{"generic_args":[],"def_id":{"krate":"concordium_contracts_common","path":[{"data":{"TypeNs":"types"},"disambiguator":0},{"data":{"TypeNs":"Timestamp"},"disambiguator":0}],"index":[5,906]}}}},"c_variadic":false,"implicit_self":"ImmRef","lifetime_elision_allowed":true},"span":{"lo":{"line":22,"col":4},"hi":{"line":22,"col":36},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[["self",{"lo":{"line":22,"col":18},"hi":{"line":22,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}]]]},"span":{"lo":{"line":22,"col":4},"hi":{"line":22,"col":36},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"defaultness":{"Default":{"has_value":false}},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Get time in milliseconds at the beginning of this block."]},"id":203,"style":"Outer","span":{"lo":{"line":21,"col":4},"hi":{"line":21,"col":64},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"DocComment":["Line"," Objects which can access chain metadata."]},"id":202,"style":"Outer","span":{"lo":{"line":19,"col":0},"hi":{"line":19,"col":44},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}}]]},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Objects which can access chain metadata."]},"id":202,"style":"Outer","span":{"lo":{"line":19,"col":0},"hi":{"line":19,"col":44},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasPolicy"},"disambiguator":0}],"index":[0,95]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasPolicy"},"disambiguator":0}],"index":[0,95]},"span":{"lo":{"line":30,"col":0},"hi":{"line":51,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"vis_span":{"lo":{"line":30,"col":0},"hi":{"line":51,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"kind":{"Trait":["No","Normal",{"params":[],"predicates":[],"bounds":[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasPolicy"},"disambiguator":0}],"index":[0,95]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}}]},"is_const":false,"is_positive":true}},"id":9008509554905379750}}],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":30,"col":19},"hi":{"line":30,"col":19},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":30,"col":19},"hi":{"line":30,"col":19},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasPolicy"},"disambiguator":0}],"index":[0,95]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}}]},"is_const":false,"is_positive":true}},"id":9008509554905379750}}],[{"ident":["identity_provider",{"lo":{"line":33,"col":7},"hi":{"line":33,"col":24},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasPolicy"},"disambiguator":0},{"data":{"ValueNs":"identity_provider"},"disambiguator":0}],"index":[0,96]},"generics":{"params":[{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasPolicy"},"disambiguator":0},{"data":{"ValueNs":"identity_provider"},"disambiguator":0}],"index":[0,96]},"local_id":1},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasPolicy"},"disambiguator":0},{"data":{"ValueNs":"identity_provider"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,245]},"name":"Fresh","span":{"lo":{"line":33,"col":25},"hi":{"line":33,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]}],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":33,"col":51},"hi":{"line":33,"col":51},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":33,"col":24},"hi":{"line":33,"col":24},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"kind":{"RequiredFn":[{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"decl":{"inputs":[{"Ref":[{"kind":{"ReLateBound":[0,{"var":0,"kind":{"BrNamed":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasPolicy"},"disambiguator":0},{"data":{"ValueNs":"identity_provider"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,245]},"'_"]}}]}},{"Param":{"index":0,"name":"Self"}},false]}],"output":{"Return":{"Uint":"U32"}},"c_variadic":false,"implicit_self":"ImmRef","lifetime_elision_allowed":true},"span":{"lo":{"line":33,"col":4},"hi":{"line":33,"col":52},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[["self",{"lo":{"line":33,"col":26},"hi":{"line":33,"col":30},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}]]]},"span":{"lo":{"line":33,"col":4},"hi":{"line":33,"col":52},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"defaultness":{"Default":{"has_value":false}},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Identity provider who signed the identity object the credential is"]},"id":208,"style":"Outer","span":{"lo":{"line":31,"col":4},"hi":{"line":31,"col":74},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," derived from."]},"id":209,"style":"Outer","span":{"lo":{"line":32,"col":4},"hi":{"line":32,"col":21},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"DocComment":["Line"," A type which has access to a policy of a credential."]},"id":204,"style":"Outer","span":{"lo":{"line":26,"col":0},"hi":{"line":26,"col":56},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," Since policies can be large this is deliberately written in a relatively"]},"id":205,"style":"Outer","span":{"lo":{"line":27,"col":0},"hi":{"line":27,"col":76},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," low-level style to enable efficient traversal of all the attributes without"]},"id":206,"style":"Outer","span":{"lo":{"line":28,"col":0},"hi":{"line":28,"col":79},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," any allocations."]},"id":207,"style":"Outer","span":{"lo":{"line":29,"col":0},"hi":{"line":29,"col":20},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}},{"ident":["created_at",{"lo":{"line":36,"col":7},"hi":{"line":36,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasPolicy"},"disambiguator":0},{"data":{"ValueNs":"created_at"},"disambiguator":0}],"index":[0,97]},"generics":{"params":[{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasPolicy"},"disambiguator":0},{"data":{"ValueNs":"created_at"},"disambiguator":0}],"index":[0,97]},"local_id":1},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasPolicy"},"disambiguator":0},{"data":{"ValueNs":"created_at"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,246]},"name":"Fresh","span":{"lo":{"line":36,"col":18},"hi":{"line":36,"col":19},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]}],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":36,"col":37},"hi":{"line":36,"col":37},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":36,"col":17},"hi":{"line":36,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"kind":{"RequiredFn":[{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"decl":{"inputs":[{"Ref":[{"kind":{"ReLateBound":[0,{"var":0,"kind":{"BrNamed":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasPolicy"},"disambiguator":0},{"data":{"ValueNs":"created_at"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,246]},"'_"]}}]}},{"Param":{"index":0,"name":"Self"}},false]}],"output":{"Return":{"Adt":{"generic_args":[],"def_id":{"krate":"concordium_contracts_common","path":[{"data":{"TypeNs":"types"},"disambiguator":0},{"data":{"TypeNs":"Timestamp"},"disambiguator":0}],"index":[5,906]}}}},"c_variadic":false,"implicit_self":"ImmRef","lifetime_elision_allowed":true},"span":{"lo":{"line":36,"col":4},"hi":{"line":36,"col":38},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[["self",{"lo":{"line":36,"col":19},"hi":{"line":36,"col":23},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}]]]},"span":{"lo":{"line":36,"col":4},"hi":{"line":36,"col":38},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"defaultness":{"Default":{"has_value":false}},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Beginning of the month in milliseconds since unix epoch when the"]},"id":210,"style":"Outer","span":{"lo":{"line":34,"col":4},"hi":{"line":34,"col":72},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," credential was created."]},"id":211,"style":"Outer","span":{"lo":{"line":35,"col":4},"hi":{"line":35,"col":31},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"DocComment":["Line"," A type which has access to a policy of a credential."]},"id":204,"style":"Outer","span":{"lo":{"line":26,"col":0},"hi":{"line":26,"col":56},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," Since policies can be large this is deliberately written in a relatively"]},"id":205,"style":"Outer","span":{"lo":{"line":27,"col":0},"hi":{"line":27,"col":76},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," low-level style to enable efficient traversal of all the attributes without"]},"id":206,"style":"Outer","span":{"lo":{"line":28,"col":0},"hi":{"line":28,"col":79},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," any allocations."]},"id":207,"style":"Outer","span":{"lo":{"line":29,"col":0},"hi":{"line":29,"col":20},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}},{"ident":["valid_to",{"lo":{"line":39,"col":7},"hi":{"line":39,"col":15},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasPolicy"},"disambiguator":0},{"data":{"ValueNs":"valid_to"},"disambiguator":0}],"index":[0,98]},"generics":{"params":[{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasPolicy"},"disambiguator":0},{"data":{"ValueNs":"valid_to"},"disambiguator":0}],"index":[0,98]},"local_id":1},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasPolicy"},"disambiguator":0},{"data":{"ValueNs":"valid_to"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,247]},"name":"Fresh","span":{"lo":{"line":39,"col":16},"hi":{"line":39,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]}],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":39,"col":35},"hi":{"line":39,"col":35},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":39,"col":15},"hi":{"line":39,"col":15},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"kind":{"RequiredFn":[{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"decl":{"inputs":[{"Ref":[{"kind":{"ReLateBound":[0,{"var":0,"kind":{"BrNamed":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasPolicy"},"disambiguator":0},{"data":{"ValueNs":"valid_to"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,247]},"'_"]}}]}},{"Param":{"index":0,"name":"Self"}},false]}],"output":{"Return":{"Adt":{"generic_args":[],"def_id":{"krate":"concordium_contracts_common","path":[{"data":{"TypeNs":"types"},"disambiguator":0},{"data":{"TypeNs":"Timestamp"},"disambiguator":0}],"index":[5,906]}}}},"c_variadic":false,"implicit_self":"ImmRef","lifetime_elision_allowed":true},"span":{"lo":{"line":39,"col":4},"hi":{"line":39,"col":36},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[["self",{"lo":{"line":39,"col":17},"hi":{"line":39,"col":21},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}]]]},"span":{"lo":{"line":39,"col":4},"hi":{"line":39,"col":36},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"defaultness":{"Default":{"has_value":false}},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Beginning of the month where the credential is no longer valid, in"]},"id":212,"style":"Outer","span":{"lo":{"line":37,"col":4},"hi":{"line":37,"col":74},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," milliseconds since unix epoch."]},"id":213,"style":"Outer","span":{"lo":{"line":38,"col":4},"hi":{"line":38,"col":38},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"DocComment":["Line"," A type which has access to a policy of a credential."]},"id":204,"style":"Outer","span":{"lo":{"line":26,"col":0},"hi":{"line":26,"col":56},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," Since policies can be large this is deliberately written in a relatively"]},"id":205,"style":"Outer","span":{"lo":{"line":27,"col":0},"hi":{"line":27,"col":76},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," low-level style to enable efficient traversal of all the attributes without"]},"id":206,"style":"Outer","span":{"lo":{"line":28,"col":0},"hi":{"line":28,"col":79},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," any allocations."]},"id":207,"style":"Outer","span":{"lo":{"line":29,"col":0},"hi":{"line":29,"col":20},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}},{"ident":["next_item",{"lo":{"line":50,"col":7},"hi":{"line":50,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasPolicy"},"disambiguator":0},{"data":{"ValueNs":"next_item"},"disambiguator":0}],"index":[0,99]},"generics":{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":50,"col":85},"hi":{"line":50,"col":85},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":50,"col":16},"hi":{"line":50,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"kind":{"RequiredFn":[{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"decl":{"inputs":[{"Param":{"index":0,"name":"Self"}},{"Array":[{"Uint":"U8"},{"ty":{"Uint":"Usize"},"span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":0},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"contents":{"Literal":{"Int":{"Uint":[31,"Usize"]}}},"hir_id":null,"attributes":[]}]}],"output":{"Return":{"Tuple":[{"Adt":{"generic_args":[{"Type":{"Tuple":[{"Adt":{"generic_args":[],"def_id":{"krate":"concordium_contracts_common","path":[{"data":{"TypeNs":"types"},"disambiguator":0},{"data":{"TypeNs":"AttributeTag"},"disambiguator":0}],"index":[5,1142]}}},{"Uint":"U8"}]}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"option"},"disambiguator":0},{"data":{"TypeNs":"Option"},"disambiguator":0}],"index":[1,41362]}}},{"Array":[{"Uint":"U8"},{"ty":{"Uint":"Usize"},"span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":0},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"contents":{"Literal":{"Int":{"Uint":[31,"Usize"]}}},"hir_id":null,"attributes":[]}]},{"Param":{"index":0,"name":"Self"}}]}},"c_variadic":false,"implicit_self":"Imm","lifetime_elision_allowed":false},"span":{"lo":{"line":50,"col":4},"hi":{"line":50,"col":86},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[["self",{"lo":{"line":50,"col":17},"hi":{"line":50,"col":21},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],["buf",{"lo":{"line":50,"col":23},"hi":{"line":50,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}]]]},"span":{"lo":{"line":50,"col":4},"hi":{"line":50,"col":86},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"defaultness":{"Default":{"has_value":false}},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Get the next attribute, storing it in the provided buffer."]},"id":214,"style":"Outer","span":{"lo":{"line":40,"col":4},"hi":{"line":40,"col":66},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," The return value, if `Some`, is a pair of an attribute tag, and the"]},"id":215,"style":"Outer","span":{"lo":{"line":41,"col":4},"hi":{"line":41,"col":75},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," length, `n` of the attribute value. In this case, the attribute"]},"id":216,"style":"Outer","span":{"lo":{"line":42,"col":4},"hi":{"line":42,"col":71},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," value is written in the first `n` bytes of the provided buffer. The"]},"id":217,"style":"Outer","span":{"lo":{"line":43,"col":4},"hi":{"line":43,"col":75},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," rest of the buffer is unchanged."]},"id":218,"style":"Outer","span":{"lo":{"line":44,"col":4},"hi":{"line":44,"col":40},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line",""]},"id":219,"style":"Outer","span":{"lo":{"line":45,"col":4},"hi":{"line":45,"col":7},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," The reason this function is added here, and we don't simply implement"]},"id":220,"style":"Outer","span":{"lo":{"line":46,"col":4},"hi":{"line":46,"col":77},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," an Iterator for this type is that with the supplied buffer we can"]},"id":221,"style":"Outer","span":{"lo":{"line":47,"col":4},"hi":{"line":47,"col":73},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," iterate through the elements more efficiently, without any allocations,"]},"id":222,"style":"Outer","span":{"lo":{"line":48,"col":4},"hi":{"line":48,"col":79},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," the consumer being responsible for allocating the buffer."]},"id":223,"style":"Outer","span":{"lo":{"line":49,"col":4},"hi":{"line":49,"col":65},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"DocComment":["Line"," A type which has access to a policy of a credential."]},"id":204,"style":"Outer","span":{"lo":{"line":26,"col":0},"hi":{"line":26,"col":56},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," Since policies can be large this is deliberately written in a relatively"]},"id":205,"style":"Outer","span":{"lo":{"line":27,"col":0},"hi":{"line":27,"col":76},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," low-level style to enable efficient traversal of all the attributes without"]},"id":206,"style":"Outer","span":{"lo":{"line":28,"col":0},"hi":{"line":28,"col":79},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," any allocations."]},"id":207,"style":"Outer","span":{"lo":{"line":29,"col":0},"hi":{"line":29,"col":20},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}}]]},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," A type which has access to a policy of a credential."]},"id":204,"style":"Outer","span":{"lo":{"line":26,"col":0},"hi":{"line":26,"col":56},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," Since policies can be large this is deliberately written in a relatively"]},"id":205,"style":"Outer","span":{"lo":{"line":27,"col":0},"hi":{"line":27,"col":76},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," low-level style to enable efficient traversal of all the attributes without"]},"id":206,"style":"Outer","span":{"lo":{"line":28,"col":0},"hi":{"line":28,"col":79},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," any allocations."]},"id":207,"style":"Outer","span":{"lo":{"line":29,"col":0},"hi":{"line":29,"col":20},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0}],"index":[0,102]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0}],"index":[0,102]},"span":{"lo":{"line":55,"col":0},"hi":{"line":72,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"vis_span":{"lo":{"line":55,"col":0},"hi":{"line":72,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"kind":{"Trait":["No","Normal",{"params":[],"predicates":[],"bounds":[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0}],"index":[0,102]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}}]},"is_const":false,"is_positive":true}},"id":9900215877253420355}}],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":55,"col":23},"hi":{"line":55,"col":23},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":55,"col":23},"hi":{"line":55,"col":23},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0}],"index":[0,102]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}}]},"is_const":false,"is_positive":true}},"id":9900215877253420355}}],[{"ident":["PolicyType",{"lo":{"line":56,"col":9},"hi":{"line":56,"col":19},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"TypeNs":"PolicyType"},"disambiguator":0}],"index":[0,103]},"generics":{"params":[],"predicates":[],"bounds":[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasPolicy"},"disambiguator":0}],"index":[0,95]},"generic_args":[{"Type":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0}],"index":[0,102]},{"impl":{"LocalBound":{"clause_id":9900215877253420355,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"TypeNs":"PolicyType"},"disambiguator":0}],"index":[0,103]}}]}}]},"is_const":false,"is_positive":true}},"id":2875386292472038087}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"Sized"},"disambiguator":0}],"index":[1,2689]},"generic_args":[{"Type":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0}],"index":[0,102]},{"impl":{"LocalBound":{"clause_id":9900215877253420355,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"TypeNs":"PolicyType"},"disambiguator":0}],"index":[0,103]}}]}}]},"is_const":false,"is_positive":true}},"id":6518296602871724256}}],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":56,"col":30},"hi":{"line":56,"col":30},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":56,"col":19},"hi":{"line":56,"col":19},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"kind":{"Type":[[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasPolicy"},"disambiguator":0}],"index":[0,95]},"generic_args":[{"Type":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0}],"index":[0,102]},{"impl":{"LocalBound":{"clause_id":9900215877253420355,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"TypeNs":"PolicyType"},"disambiguator":0}],"index":[0,103]}}]}}]},"is_const":false,"is_positive":true}},"id":2875386292472038087}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"Sized"},"disambiguator":0}],"index":[1,2689]},"generic_args":[{"Type":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0}],"index":[0,102]},{"impl":{"LocalBound":{"clause_id":9900215877253420355,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"TypeNs":"PolicyType"},"disambiguator":0}],"index":[0,103]}}]}}]},"is_const":false,"is_positive":true}},"id":6518296602871724256}}],null]},"span":{"lo":{"line":56,"col":4},"hi":{"line":56,"col":31},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"defaultness":{"Default":{"has_value":false}},"attributes":{"attributes":[],"parent_attributes":[{"kind":{"DocComment":["Line"," Common data accessible to both init and receive methods."]},"id":224,"style":"Outer","span":{"lo":{"line":54,"col":0},"hi":{"line":54,"col":60},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}},{"ident":["MetadataType",{"lo":{"line":57,"col":9},"hi":{"line":57,"col":21},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"TypeNs":"MetadataType"},"disambiguator":0}],"index":[0,104]},"generics":{"params":[],"predicates":[],"bounds":[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasChainMetadata"},"disambiguator":0}],"index":[0,93]},"generic_args":[{"Type":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0}],"index":[0,102]},{"impl":{"LocalBound":{"clause_id":9900215877253420355,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"TypeNs":"MetadataType"},"disambiguator":0}],"index":[0,104]}}]}}]},"is_const":false,"is_positive":true}},"id":1873832837790077758}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"Sized"},"disambiguator":0}],"index":[1,2689]},"generic_args":[{"Type":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0}],"index":[0,102]},{"impl":{"LocalBound":{"clause_id":9900215877253420355,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"TypeNs":"MetadataType"},"disambiguator":0}],"index":[0,104]}}]}}]},"is_const":false,"is_positive":true}},"id":5350708720984506472}}],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":57,"col":39},"hi":{"line":57,"col":39},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":57,"col":21},"hi":{"line":57,"col":21},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"kind":{"Type":[[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasChainMetadata"},"disambiguator":0}],"index":[0,93]},"generic_args":[{"Type":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0}],"index":[0,102]},{"impl":{"LocalBound":{"clause_id":9900215877253420355,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"TypeNs":"MetadataType"},"disambiguator":0}],"index":[0,104]}}]}}]},"is_const":false,"is_positive":true}},"id":1873832837790077758}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"Sized"},"disambiguator":0}],"index":[1,2689]},"generic_args":[{"Type":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0}],"index":[0,102]},{"impl":{"LocalBound":{"clause_id":9900215877253420355,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"TypeNs":"MetadataType"},"disambiguator":0}],"index":[0,104]}}]}}]},"is_const":false,"is_positive":true}},"id":5350708720984506472}}],null]},"span":{"lo":{"line":57,"col":4},"hi":{"line":57,"col":40},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"defaultness":{"Default":{"has_value":false}},"attributes":{"attributes":[],"parent_attributes":[{"kind":{"DocComment":["Line"," Common data accessible to both init and receive methods."]},"id":224,"style":"Outer","span":{"lo":{"line":54,"col":0},"hi":{"line":54,"col":60},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}},{"ident":["ParamType",{"lo":{"line":58,"col":9},"hi":{"line":58,"col":18},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"TypeNs":"ParamType"},"disambiguator":0}],"index":[0,105]},"generics":{"params":[],"predicates":[],"bounds":[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"concordium_contracts_common","path":[{"data":{"TypeNs":"traits"},"disambiguator":0},{"data":{"TypeNs":"Read"},"disambiguator":0}],"index":[5,26]},"generic_args":[{"Type":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0}],"index":[0,102]},{"impl":{"LocalBound":{"clause_id":9900215877253420355,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"TypeNs":"ParamType"},"disambiguator":0}],"index":[0,105]}}]}}]},"is_const":false,"is_positive":true}},"id":1840492096314216500}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasParameter"},"disambiguator":0}],"index":[0,91]},"generic_args":[{"Type":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0}],"index":[0,102]},{"impl":{"LocalBound":{"clause_id":9900215877253420355,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"TypeNs":"ParamType"},"disambiguator":0}],"index":[0,105]}}]}}]},"is_const":false,"is_positive":true}},"id":6955721314586481954}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"Sized"},"disambiguator":0}],"index":[1,2689]},"generic_args":[{"Type":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0}],"index":[0,102]},{"impl":{"LocalBound":{"clause_id":9900215877253420355,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"TypeNs":"ParamType"},"disambiguator":0}],"index":[0,105]}}]}}]},"is_const":false,"is_positive":true}},"id":13512498811560697081}}],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":58,"col":39},"hi":{"line":58,"col":39},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":58,"col":18},"hi":{"line":58,"col":18},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"kind":{"Type":[[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"concordium_contracts_common","path":[{"data":{"TypeNs":"traits"},"disambiguator":0},{"data":{"TypeNs":"Read"},"disambiguator":0}],"index":[5,26]},"generic_args":[{"Type":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0}],"index":[0,102]},{"impl":{"LocalBound":{"clause_id":9900215877253420355,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"TypeNs":"ParamType"},"disambiguator":0}],"index":[0,105]}}]}}]},"is_const":false,"is_positive":true}},"id":1840492096314216500}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasParameter"},"disambiguator":0}],"index":[0,91]},"generic_args":[{"Type":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0}],"index":[0,102]},{"impl":{"LocalBound":{"clause_id":9900215877253420355,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"TypeNs":"ParamType"},"disambiguator":0}],"index":[0,105]}}]}}]},"is_const":false,"is_positive":true}},"id":6955721314586481954}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"Sized"},"disambiguator":0}],"index":[1,2689]},"generic_args":[{"Type":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0}],"index":[0,102]},{"impl":{"LocalBound":{"clause_id":9900215877253420355,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"TypeNs":"ParamType"},"disambiguator":0}],"index":[0,105]}}]}}]},"is_const":false,"is_positive":true}},"id":13512498811560697081}}],null]},"span":{"lo":{"line":58,"col":4},"hi":{"line":58,"col":40},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"defaultness":{"Default":{"has_value":false}},"attributes":{"attributes":[],"parent_attributes":[{"kind":{"DocComment":["Line"," Common data accessible to both init and receive methods."]},"id":224,"style":"Outer","span":{"lo":{"line":54,"col":0},"hi":{"line":54,"col":60},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}},{"ident":["PolicyIteratorType",{"lo":{"line":59,"col":9},"hi":{"line":59,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"TypeNs":"PolicyIteratorType"},"disambiguator":0}],"index":[0,106]},"generics":{"params":[],"predicates":[],"bounds":[{"Clause":{"kind":{"Projection":{"projection_ty":{"substs":[{"Type":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0}],"index":[0,102]},{"impl":{"LocalBound":{"clause_id":9900215877253420355,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"TypeNs":"PolicyIteratorType"},"disambiguator":0}],"index":[0,106]}}]}}],"trait_def_id":[{"krate":"core","path":[{"data":{"TypeNs":"iter"},"disambiguator":0},{"data":{"TypeNs":"traits"},"disambiguator":0},{"data":{"TypeNs":"iterator"},"disambiguator":0},{"data":{"TypeNs":"Iterator"},"disambiguator":0}],"index":[1,7315]},{"impl":{"LocalBound":{"clause_id":9900215877253420355,"path":[{"AssocItem":[{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"TypeNs":"PolicyIteratorType"},"disambiguator":0}],"index":[0,106]},"name":"PolicyIteratorType","kind":"Type","container":"TraitContainer","trait_item_def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"TypeNs":"PolicyIteratorType"},"disambiguator":0}],"index":[0,106]},"fn_has_self_parameter":false,"opt_rpitit_info":null},{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"iter"},"disambiguator":0},{"data":{"TypeNs":"traits"},"disambiguator":0},{"data":{"TypeNs":"exact_size"},"disambiguator":0},{"data":{"TypeNs":"ExactSizeIterator"},"disambiguator":0}],"index":[1,7260]},"generic_args":[{"Type":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0}],"index":[0,102]},{"impl":{"LocalBound":{"clause_id":9900215877253420355,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"TypeNs":"PolicyIteratorType"},"disambiguator":0}],"index":[0,106]}}]}}]},"is_const":false,"is_positive":true}]},{"Parent":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"iter"},"disambiguator":0},{"data":{"TypeNs":"traits"},"disambiguator":0},{"data":{"TypeNs":"iterator"},"disambiguator":0},{"data":{"TypeNs":"Iterator"},"disambiguator":0}],"index":[1,7315]},"generic_args":[{"Type":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0}],"index":[0,102]},{"impl":{"LocalBound":{"clause_id":9900215877253420355,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"TypeNs":"PolicyIteratorType"},"disambiguator":0}],"index":[0,106]}}]}}]},"is_const":false,"is_positive":true}}]}},"args":[]}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"iter"},"disambiguator":0},{"data":{"TypeNs":"traits"},"disambiguator":0},{"data":{"TypeNs":"iterator"},"disambiguator":0},{"data":{"TypeNs":"Iterator"},"disambiguator":0},{"data":{"TypeNs":"Item"},"disambiguator":0}],"index":[1,7316]}},"term":{"Ty":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0}],"index":[0,102]},{"impl":{"LocalBound":{"clause_id":9900215877253420355,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"TypeNs":"PolicyType"},"disambiguator":0}],"index":[0,103]}}]}}}},"id":16765557715264579028}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"iter"},"disambiguator":0},{"data":{"TypeNs":"traits"},"disambiguator":0},{"data":{"TypeNs":"exact_size"},"disambiguator":0},{"data":{"TypeNs":"ExactSizeIterator"},"disambiguator":0}],"index":[1,7260]},"generic_args":[{"Type":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0}],"index":[0,102]},{"impl":{"LocalBound":{"clause_id":9900215877253420355,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"TypeNs":"PolicyIteratorType"},"disambiguator":0}],"index":[0,106]}}]}}]},"is_const":false,"is_positive":true}},"id":2524192090353092294}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"iter"},"disambiguator":0},{"data":{"TypeNs":"traits"},"disambiguator":0},{"data":{"TypeNs":"iterator"},"disambiguator":0},{"data":{"TypeNs":"Iterator"},"disambiguator":0}],"index":[1,7315]},"generic_args":[{"Type":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0}],"index":[0,102]},{"impl":{"LocalBound":{"clause_id":9900215877253420355,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"TypeNs":"PolicyIteratorType"},"disambiguator":0}],"index":[0,106]}}]}}]},"is_const":false,"is_positive":true}},"id":7479269235389803660}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"Sized"},"disambiguator":0}],"index":[1,2689]},"generic_args":[{"Type":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0}],"index":[0,102]},{"impl":{"LocalBound":{"clause_id":9900215877253420355,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"TypeNs":"PolicyIteratorType"},"disambiguator":0}],"index":[0,106]}}]}}]},"is_const":false,"is_positive":true}},"id":10873437583130849907}}],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":59,"col":71},"hi":{"line":59,"col":71},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":59,"col":27},"hi":{"line":59,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"kind":{"Type":[[{"Clause":{"kind":{"Projection":{"projection_ty":{"substs":[{"Type":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0}],"index":[0,102]},{"impl":{"LocalBound":{"clause_id":9900215877253420355,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"TypeNs":"PolicyIteratorType"},"disambiguator":0}],"index":[0,106]}}]}}],"trait_def_id":[{"krate":"core","path":[{"data":{"TypeNs":"iter"},"disambiguator":0},{"data":{"TypeNs":"traits"},"disambiguator":0},{"data":{"TypeNs":"iterator"},"disambiguator":0},{"data":{"TypeNs":"Iterator"},"disambiguator":0}],"index":[1,7315]},{"impl":{"LocalBound":{"clause_id":9900215877253420355,"path":[{"AssocItem":[{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"TypeNs":"PolicyIteratorType"},"disambiguator":0}],"index":[0,106]},"name":"PolicyIteratorType","kind":"Type","container":"TraitContainer","trait_item_def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"TypeNs":"PolicyIteratorType"},"disambiguator":0}],"index":[0,106]},"fn_has_self_parameter":false,"opt_rpitit_info":null},{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"iter"},"disambiguator":0},{"data":{"TypeNs":"traits"},"disambiguator":0},{"data":{"TypeNs":"exact_size"},"disambiguator":0},{"data":{"TypeNs":"ExactSizeIterator"},"disambiguator":0}],"index":[1,7260]},"generic_args":[{"Type":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0}],"index":[0,102]},{"impl":{"LocalBound":{"clause_id":9900215877253420355,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"TypeNs":"PolicyIteratorType"},"disambiguator":0}],"index":[0,106]}}]}}]},"is_const":false,"is_positive":true}]},{"Parent":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"iter"},"disambiguator":0},{"data":{"TypeNs":"traits"},"disambiguator":0},{"data":{"TypeNs":"iterator"},"disambiguator":0},{"data":{"TypeNs":"Iterator"},"disambiguator":0}],"index":[1,7315]},"generic_args":[{"Type":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0}],"index":[0,102]},{"impl":{"LocalBound":{"clause_id":9900215877253420355,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"TypeNs":"PolicyIteratorType"},"disambiguator":0}],"index":[0,106]}}]}}]},"is_const":false,"is_positive":true}}]}},"args":[]}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"iter"},"disambiguator":0},{"data":{"TypeNs":"traits"},"disambiguator":0},{"data":{"TypeNs":"iterator"},"disambiguator":0},{"data":{"TypeNs":"Iterator"},"disambiguator":0},{"data":{"TypeNs":"Item"},"disambiguator":0}],"index":[1,7316]}},"term":{"Ty":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0}],"index":[0,102]},{"impl":{"LocalBound":{"clause_id":9900215877253420355,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"TypeNs":"PolicyType"},"disambiguator":0}],"index":[0,103]}}]}}}},"id":16765557715264579028}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"iter"},"disambiguator":0},{"data":{"TypeNs":"traits"},"disambiguator":0},{"data":{"TypeNs":"exact_size"},"disambiguator":0},{"data":{"TypeNs":"ExactSizeIterator"},"disambiguator":0}],"index":[1,7260]},"generic_args":[{"Type":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0}],"index":[0,102]},{"impl":{"LocalBound":{"clause_id":9900215877253420355,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"TypeNs":"PolicyIteratorType"},"disambiguator":0}],"index":[0,106]}}]}}]},"is_const":false,"is_positive":true}},"id":2524192090353092294}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"iter"},"disambiguator":0},{"data":{"TypeNs":"traits"},"disambiguator":0},{"data":{"TypeNs":"iterator"},"disambiguator":0},{"data":{"TypeNs":"Iterator"},"disambiguator":0}],"index":[1,7315]},"generic_args":[{"Type":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0}],"index":[0,102]},{"impl":{"LocalBound":{"clause_id":9900215877253420355,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"TypeNs":"PolicyIteratorType"},"disambiguator":0}],"index":[0,106]}}]}}]},"is_const":false,"is_positive":true}},"id":7479269235389803660}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"Sized"},"disambiguator":0}],"index":[1,2689]},"generic_args":[{"Type":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0}],"index":[0,102]},{"impl":{"LocalBound":{"clause_id":9900215877253420355,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"TypeNs":"PolicyIteratorType"},"disambiguator":0}],"index":[0,106]}}]}}]},"is_const":false,"is_positive":true}},"id":10873437583130849907}}],null]},"span":{"lo":{"line":59,"col":4},"hi":{"line":59,"col":72},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"defaultness":{"Default":{"has_value":false}},"attributes":{"attributes":[],"parent_attributes":[{"kind":{"DocComment":["Line"," Common data accessible to both init and receive methods."]},"id":224,"style":"Outer","span":{"lo":{"line":54,"col":0},"hi":{"line":54,"col":60},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}},{"ident":["policies",{"lo":{"line":67,"col":7},"hi":{"line":67,"col":15},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"ValueNs":"policies"},"disambiguator":0}],"index":[0,107]},"generics":{"params":[{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"ValueNs":"policies"},"disambiguator":0}],"index":[0,107]},"local_id":1},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"ValueNs":"policies"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,248]},"name":"Fresh","span":{"lo":{"line":67,"col":16},"hi":{"line":67,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]}],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":67,"col":50},"hi":{"line":67,"col":50},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":67,"col":15},"hi":{"line":67,"col":15},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"kind":{"RequiredFn":[{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"decl":{"inputs":[{"Ref":[{"kind":{"ReLateBound":[0,{"var":0,"kind":{"BrNamed":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"ValueNs":"policies"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,248]},"'_"]}}]}},{"Param":{"index":0,"name":"Self"}},false]}],"output":{"Return":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0}],"index":[0,102]},{"impl":{"LocalBound":{"clause_id":9900215877253420355,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"TypeNs":"PolicyIteratorType"},"disambiguator":0}],"index":[0,106]}}]}},"c_variadic":false,"implicit_self":"ImmRef","lifetime_elision_allowed":true},"span":{"lo":{"line":67,"col":4},"hi":{"line":67,"col":51},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[["self",{"lo":{"line":67,"col":17},"hi":{"line":67,"col":21},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}]]]},"span":{"lo":{"line":67,"col":4},"hi":{"line":67,"col":51},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"defaultness":{"Default":{"has_value":false}},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Policies of the sender of the message."]},"id":225,"style":"Outer","span":{"lo":{"line":60,"col":4},"hi":{"line":60,"col":46},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," For init methods this is the would-be creator of the contract,"]},"id":226,"style":"Outer","span":{"lo":{"line":61,"col":4},"hi":{"line":61,"col":70},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," for the receive this is the policies of the immediate sender."]},"id":227,"style":"Outer","span":{"lo":{"line":62,"col":4},"hi":{"line":62,"col":69},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line",""]},"id":228,"style":"Outer","span":{"lo":{"line":63,"col":4},"hi":{"line":63,"col":7},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," In the latter case, if the sender is an account then it is the policies"]},"id":229,"style":"Outer","span":{"lo":{"line":64,"col":4},"hi":{"line":64,"col":79},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," of the account, if it is a contract then it is the policies of the"]},"id":230,"style":"Outer","span":{"lo":{"line":65,"col":4},"hi":{"line":65,"col":74},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," creator of the contract."]},"id":231,"style":"Outer","span":{"lo":{"line":66,"col":4},"hi":{"line":66,"col":32},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"DocComment":["Line"," Common data accessible to both init and receive methods."]},"id":224,"style":"Outer","span":{"lo":{"line":54,"col":0},"hi":{"line":54,"col":60},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}},{"ident":["metadata",{"lo":{"line":69,"col":7},"hi":{"line":69,"col":15},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"ValueNs":"metadata"},"disambiguator":0}],"index":[0,108]},"generics":{"params":[{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"ValueNs":"metadata"},"disambiguator":0}],"index":[0,108]},"local_id":1},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"ValueNs":"metadata"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,249]},"name":"Fresh","span":{"lo":{"line":69,"col":16},"hi":{"line":69,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]}],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":69,"col":45},"hi":{"line":69,"col":45},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":69,"col":15},"hi":{"line":69,"col":15},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"kind":{"RequiredFn":[{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"decl":{"inputs":[{"Ref":[{"kind":{"ReLateBound":[0,{"var":0,"kind":{"BrNamed":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"ValueNs":"metadata"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,249]},"'_"]}}]}},{"Param":{"index":0,"name":"Self"}},false]}],"output":{"Return":{"Ref":[{"kind":{"ReLateBound":[0,{"var":0,"kind":{"BrNamed":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"ValueNs":"metadata"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,249]},"'_"]}}]}},{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0}],"index":[0,102]},{"impl":{"LocalBound":{"clause_id":9900215877253420355,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"TypeNs":"MetadataType"},"disambiguator":0}],"index":[0,104]}}]},false]}},"c_variadic":false,"implicit_self":"ImmRef","lifetime_elision_allowed":true},"span":{"lo":{"line":69,"col":4},"hi":{"line":69,"col":46},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[["self",{"lo":{"line":69,"col":17},"hi":{"line":69,"col":21},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}]]]},"span":{"lo":{"line":69,"col":4},"hi":{"line":69,"col":46},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"defaultness":{"Default":{"has_value":false}},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Get the reference to chain metadata"]},"id":232,"style":"Outer","span":{"lo":{"line":68,"col":4},"hi":{"line":68,"col":43},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"DocComment":["Line"," Common data accessible to both init and receive methods."]},"id":224,"style":"Outer","span":{"lo":{"line":54,"col":0},"hi":{"line":54,"col":60},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}},{"ident":["parameter_cursor",{"lo":{"line":71,"col":7},"hi":{"line":71,"col":23},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"ValueNs":"parameter_cursor"},"disambiguator":0}],"index":[0,109]},"generics":{"params":[{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"ValueNs":"parameter_cursor"},"disambiguator":0}],"index":[0,109]},"local_id":1},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"ValueNs":"parameter_cursor"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,250]},"name":"Fresh","span":{"lo":{"line":71,"col":24},"hi":{"line":71,"col":25},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]}],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":71,"col":49},"hi":{"line":71,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":71,"col":23},"hi":{"line":71,"col":23},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"kind":{"RequiredFn":[{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"decl":{"inputs":[{"Ref":[{"kind":{"ReLateBound":[0,{"var":0,"kind":{"BrNamed":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"ValueNs":"parameter_cursor"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,250]},"'_"]}}]}},{"Param":{"index":0,"name":"Self"}},false]}],"output":{"Return":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0}],"index":[0,102]},{"impl":{"LocalBound":{"clause_id":9900215877253420355,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0},{"data":{"TypeNs":"ParamType"},"disambiguator":0}],"index":[0,105]}}]}},"c_variadic":false,"implicit_self":"ImmRef","lifetime_elision_allowed":true},"span":{"lo":{"line":71,"col":4},"hi":{"line":71,"col":50},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[["self",{"lo":{"line":71,"col":25},"hi":{"line":71,"col":29},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}]]]},"span":{"lo":{"line":71,"col":4},"hi":{"line":71,"col":50},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"defaultness":{"Default":{"has_value":false}},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Get the cursor to the parameter."]},"id":233,"style":"Outer","span":{"lo":{"line":70,"col":4},"hi":{"line":70,"col":40},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"DocComment":["Line"," Common data accessible to both init and receive methods."]},"id":224,"style":"Outer","span":{"lo":{"line":54,"col":0},"hi":{"line":54,"col":60},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}}]]},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Common data accessible to both init and receive methods."]},"id":224,"style":"Outer","span":{"lo":{"line":54,"col":0},"hi":{"line":54,"col":60},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasInitContext"},"disambiguator":0}],"index":[0,110]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasInitContext"},"disambiguator":0}],"index":[0,110]},"span":{"lo":{"line":76,"col":0},"hi":{"line":83,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"vis_span":{"lo":{"line":76,"col":0},"hi":{"line":83,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"kind":{"Trait":["No","Normal",{"params":[{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasInitContext"},"disambiguator":0}],"index":[0,110]},"local_id":7},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasInitContext"},"disambiguator":0},{"data":{"TypeNs":"Error"},"disambiguator":0}],"index":[0,111]},"name":{"Plain":{"name":"Error","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasInitContext"},"disambiguator":0}],"index":[0,110]},"local_id":7}}},"span":{"lo":{"line":76,"col":25},"hi":{"line":76,"col":44},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"pure_wrt_drop":false,"kind":{"Type":{"default":{"Tuple":[]},"synthetic":false}},"colon_span":{"lo":{"line":76,"col":30},"hi":{"line":76,"col":31},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"attributes":[]}],"predicates":[{"BoundPredicate":{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasInitContext"},"disambiguator":0}],"index":[0,110]},"local_id":5},"span":{"lo":{"line":76,"col":30},"hi":{"line":76,"col":39},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"origin":"GenericParam","bound_generic_params":[],"bounded_ty":{"Param":{"index":1,"name":"Error"}}}}],"bounds":[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0}],"index":[0,102]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}}]},"is_const":false,"is_positive":true}},"id":9900215877253420355}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"Sized"},"disambiguator":0}],"index":[1,2689]},"generic_args":[{"Type":{"Param":{"index":1,"name":"Error"}}}]},"is_const":false,"is_positive":true}},"id":13656839978771590325}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"default"},"disambiguator":0},{"data":{"TypeNs":"Default"},"disambiguator":0}],"index":[1,2587]},"generic_args":[{"Type":{"Param":{"index":1,"name":"Error"}}}]},"is_const":false,"is_positive":true}},"id":468573141220163386}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasInitContext"},"disambiguator":0}],"index":[0,110]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}},{"Type":{"Param":{"index":1,"name":"Error"}}}]},"is_const":false,"is_positive":true}},"id":6451289350237964709}}],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":76,"col":60},"hi":{"line":76,"col":60},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":76,"col":24},"hi":{"line":76,"col":45},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0}],"index":[0,102]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}}]},"is_const":false,"is_positive":true}},"id":9900215877253420355}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"Sized"},"disambiguator":0}],"index":[1,2689]},"generic_args":[{"Type":{"Param":{"index":1,"name":"Error"}}}]},"is_const":false,"is_positive":true}},"id":13656839978771590325}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"default"},"disambiguator":0},{"data":{"TypeNs":"Default"},"disambiguator":0}],"index":[1,2587]},"generic_args":[{"Type":{"Param":{"index":1,"name":"Error"}}}]},"is_const":false,"is_positive":true}},"id":468573141220163386}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasInitContext"},"disambiguator":0}],"index":[0,110]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}},{"Type":{"Param":{"index":1,"name":"Error"}}}]},"is_const":false,"is_positive":true}},"id":6451289350237964709}}],[{"ident":["InitData",{"lo":{"line":78,"col":9},"hi":{"line":78,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasInitContext"},"disambiguator":0},{"data":{"TypeNs":"InitData"},"disambiguator":0}],"index":[0,112]},"generics":{"params":[],"predicates":[],"bounds":[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"Sized"},"disambiguator":0}],"index":[1,2689]},"generic_args":[{"Type":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}},{"Type":{"Param":{"index":1,"name":"Error"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasInitContext"},"disambiguator":0}],"index":[0,110]},{"impl":{"LocalBound":{"clause_id":6451289350237964709,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasInitContext"},"disambiguator":0},{"data":{"TypeNs":"InitData"},"disambiguator":0}],"index":[0,112]}}]}}]},"is_const":false,"is_positive":true}},"id":12058970868310053901}}],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":78,"col":17},"hi":{"line":78,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":78,"col":17},"hi":{"line":78,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"kind":{"Type":[[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"Sized"},"disambiguator":0}],"index":[1,2689]},"generic_args":[{"Type":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}},{"Type":{"Param":{"index":1,"name":"Error"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasInitContext"},"disambiguator":0}],"index":[0,110]},{"impl":{"LocalBound":{"clause_id":6451289350237964709,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasInitContext"},"disambiguator":0},{"data":{"TypeNs":"InitData"},"disambiguator":0}],"index":[0,112]}}]}}]},"is_const":false,"is_positive":true}},"id":12058970868310053901}}],null]},"span":{"lo":{"line":78,"col":4},"hi":{"line":78,"col":18},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"defaultness":{"Default":{"has_value":false}},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Data needed to open the context."]},"id":235,"style":"Outer","span":{"lo":{"line":77,"col":4},"hi":{"line":77,"col":40},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"DocComment":["Line"," Types which can act as init contexts."]},"id":234,"style":"Outer","span":{"lo":{"line":75,"col":0},"hi":{"line":75,"col":41},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}},{"ident":["open",{"lo":{"line":80,"col":7},"hi":{"line":80,"col":11},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasInitContext"},"disambiguator":0},{"data":{"ValueNs":"open"},"disambiguator":0}],"index":[0,113]},"generics":{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":80,"col":41},"hi":{"line":80,"col":41},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":80,"col":11},"hi":{"line":80,"col":11},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"kind":{"RequiredFn":[{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"decl":{"inputs":[{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}},{"Type":{"Param":{"index":1,"name":"Error"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasInitContext"},"disambiguator":0}],"index":[0,110]},{"impl":{"LocalBound":{"clause_id":6451289350237964709,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasInitContext"},"disambiguator":0},{"data":{"TypeNs":"InitData"},"disambiguator":0}],"index":[0,112]}}]}],"output":{"Return":{"Param":{"index":0,"name":"Self"}}},"c_variadic":false,"implicit_self":"None","lifetime_elision_allowed":false},"span":{"lo":{"line":80,"col":4},"hi":{"line":80,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[["data",{"lo":{"line":80,"col":12},"hi":{"line":80,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}]]]},"span":{"lo":{"line":80,"col":4},"hi":{"line":80,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"defaultness":{"Default":{"has_value":false}},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Open the init context for reading and accessing values."]},"id":236,"style":"Outer","span":{"lo":{"line":79,"col":4},"hi":{"line":79,"col":63},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"DocComment":["Line"," Types which can act as init contexts."]},"id":234,"style":"Outer","span":{"lo":{"line":75,"col":0},"hi":{"line":75,"col":41},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}},{"ident":["init_origin",{"lo":{"line":82,"col":7},"hi":{"line":82,"col":18},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasInitContext"},"disambiguator":0},{"data":{"ValueNs":"init_origin"},"disambiguator":0}],"index":[0,114]},"generics":{"params":[{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasInitContext"},"disambiguator":0},{"data":{"ValueNs":"init_origin"},"disambiguator":0}],"index":[0,114]},"local_id":1},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasInitContext"},"disambiguator":0},{"data":{"ValueNs":"init_origin"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,251]},"name":"Fresh","span":{"lo":{"line":82,"col":19},"hi":{"line":82,"col":20},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]}],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":82,"col":43},"hi":{"line":82,"col":43},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":82,"col":18},"hi":{"line":82,"col":18},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"kind":{"RequiredFn":[{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"decl":{"inputs":[{"Ref":[{"kind":{"ReLateBound":[0,{"var":0,"kind":{"BrNamed":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasInitContext"},"disambiguator":0},{"data":{"ValueNs":"init_origin"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,251]},"'_"]}}]}},{"Param":{"index":0,"name":"Self"}},false]}],"output":{"Return":{"Adt":{"generic_args":[],"def_id":{"krate":"concordium_contracts_common","path":[{"data":{"TypeNs":"types"},"disambiguator":0},{"data":{"TypeNs":"AccountAddress"},"disambiguator":0}],"index":[5,964]}}}},"c_variadic":false,"implicit_self":"ImmRef","lifetime_elision_allowed":true},"span":{"lo":{"line":82,"col":4},"hi":{"line":82,"col":44},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[["self",{"lo":{"line":82,"col":20},"hi":{"line":82,"col":24},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}]]]},"span":{"lo":{"line":82,"col":4},"hi":{"line":82,"col":44},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"defaultness":{"Default":{"has_value":false}},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Who invoked this init call."]},"id":237,"style":"Outer","span":{"lo":{"line":81,"col":4},"hi":{"line":81,"col":35},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"DocComment":["Line"," Types which can act as init contexts."]},"id":234,"style":"Outer","span":{"lo":{"line":75,"col":0},"hi":{"line":75,"col":41},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}}]]},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Types which can act as init contexts."]},"id":234,"style":"Outer","span":{"lo":{"line":75,"col":0},"hi":{"line":75,"col":41},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasReceiveContext"},"disambiguator":0}],"index":[0,115]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasReceiveContext"},"disambiguator":0}],"index":[0,115]},"span":{"lo":{"line":87,"col":0},"hi":{"line":104,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"vis_span":{"lo":{"line":87,"col":0},"hi":{"line":104,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"kind":{"Trait":["No","Normal",{"params":[{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasReceiveContext"},"disambiguator":0}],"index":[0,115]},"local_id":7},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasReceiveContext"},"disambiguator":0},{"data":{"TypeNs":"Error"},"disambiguator":0}],"index":[0,116]},"name":{"Plain":{"name":"Error","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasReceiveContext"},"disambiguator":0}],"index":[0,115]},"local_id":7}}},"span":{"lo":{"line":87,"col":28},"hi":{"line":87,"col":47},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"pure_wrt_drop":false,"kind":{"Type":{"default":{"Tuple":[]},"synthetic":false}},"colon_span":{"lo":{"line":87,"col":33},"hi":{"line":87,"col":34},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"attributes":[]}],"predicates":[{"BoundPredicate":{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasReceiveContext"},"disambiguator":0}],"index":[0,115]},"local_id":5},"span":{"lo":{"line":87,"col":33},"hi":{"line":87,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"origin":"GenericParam","bound_generic_params":[],"bounded_ty":{"Param":{"index":1,"name":"Error"}}}}],"bounds":[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0}],"index":[0,102]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}}]},"is_const":false,"is_positive":true}},"id":9900215877253420355}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"Sized"},"disambiguator":0}],"index":[1,2689]},"generic_args":[{"Type":{"Param":{"index":1,"name":"Error"}}}]},"is_const":false,"is_positive":true}},"id":13656839978771590325}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"default"},"disambiguator":0},{"data":{"TypeNs":"Default"},"disambiguator":0}],"index":[1,2587]},"generic_args":[{"Type":{"Param":{"index":1,"name":"Error"}}}]},"is_const":false,"is_positive":true}},"id":468573141220163386}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasReceiveContext"},"disambiguator":0}],"index":[0,115]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}},{"Type":{"Param":{"index":1,"name":"Error"}}}]},"is_const":false,"is_positive":true}},"id":3139667756981812396}}],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":87,"col":63},"hi":{"line":87,"col":63},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":87,"col":27},"hi":{"line":87,"col":48},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasCommonData"},"disambiguator":0}],"index":[0,102]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}}]},"is_const":false,"is_positive":true}},"id":9900215877253420355}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"Sized"},"disambiguator":0}],"index":[1,2689]},"generic_args":[{"Type":{"Param":{"index":1,"name":"Error"}}}]},"is_const":false,"is_positive":true}},"id":13656839978771590325}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"default"},"disambiguator":0},{"data":{"TypeNs":"Default"},"disambiguator":0}],"index":[1,2587]},"generic_args":[{"Type":{"Param":{"index":1,"name":"Error"}}}]},"is_const":false,"is_positive":true}},"id":468573141220163386}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasReceiveContext"},"disambiguator":0}],"index":[0,115]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}},{"Type":{"Param":{"index":1,"name":"Error"}}}]},"is_const":false,"is_positive":true}},"id":3139667756981812396}}],[{"ident":["ReceiveData",{"lo":{"line":88,"col":9},"hi":{"line":88,"col":20},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasReceiveContext"},"disambiguator":0},{"data":{"TypeNs":"ReceiveData"},"disambiguator":0}],"index":[0,117]},"generics":{"params":[],"predicates":[],"bounds":[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"Sized"},"disambiguator":0}],"index":[1,2689]},"generic_args":[{"Type":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}},{"Type":{"Param":{"index":1,"name":"Error"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasReceiveContext"},"disambiguator":0}],"index":[0,115]},{"impl":{"LocalBound":{"clause_id":3139667756981812396,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasReceiveContext"},"disambiguator":0},{"data":{"TypeNs":"ReceiveData"},"disambiguator":0}],"index":[0,117]}}]}}]},"is_const":false,"is_positive":true}},"id":16141720423459337414}}],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":88,"col":20},"hi":{"line":88,"col":20},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":88,"col":20},"hi":{"line":88,"col":20},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"kind":{"Type":[[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"Sized"},"disambiguator":0}],"index":[1,2689]},"generic_args":[{"Type":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}},{"Type":{"Param":{"index":1,"name":"Error"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasReceiveContext"},"disambiguator":0}],"index":[0,115]},{"impl":{"LocalBound":{"clause_id":3139667756981812396,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasReceiveContext"},"disambiguator":0},{"data":{"TypeNs":"ReceiveData"},"disambiguator":0}],"index":[0,117]}}]}}]},"is_const":false,"is_positive":true}},"id":16141720423459337414}}],null]},"span":{"lo":{"line":88,"col":4},"hi":{"line":88,"col":21},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"defaultness":{"Default":{"has_value":false}},"attributes":{"attributes":[],"parent_attributes":[{"kind":{"DocComment":["Line"," Types which can act as receive contexts."]},"id":238,"style":"Outer","span":{"lo":{"line":86,"col":0},"hi":{"line":86,"col":44},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}},{"ident":["open",{"lo":{"line":91,"col":7},"hi":{"line":91,"col":11},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasReceiveContext"},"disambiguator":0},{"data":{"ValueNs":"open"},"disambiguator":0}],"index":[0,118]},"generics":{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":91,"col":44},"hi":{"line":91,"col":44},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":91,"col":11},"hi":{"line":91,"col":11},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"kind":{"RequiredFn":[{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"decl":{"inputs":[{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}},{"Type":{"Param":{"index":1,"name":"Error"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasReceiveContext"},"disambiguator":0}],"index":[0,115]},{"impl":{"LocalBound":{"clause_id":3139667756981812396,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasReceiveContext"},"disambiguator":0},{"data":{"TypeNs":"ReceiveData"},"disambiguator":0}],"index":[0,117]}}]}],"output":{"Return":{"Param":{"index":0,"name":"Self"}}},"c_variadic":false,"implicit_self":"None","lifetime_elision_allowed":false},"span":{"lo":{"line":91,"col":4},"hi":{"line":91,"col":45},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[["data",{"lo":{"line":91,"col":12},"hi":{"line":91,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}]]]},"span":{"lo":{"line":91,"col":4},"hi":{"line":91,"col":45},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"defaultness":{"Default":{"has_value":false}},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Open the receive context for reading and accessing values."]},"id":239,"style":"Outer","span":{"lo":{"line":90,"col":4},"hi":{"line":90,"col":66},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"DocComment":["Line"," Types which can act as receive contexts."]},"id":238,"style":"Outer","span":{"lo":{"line":86,"col":0},"hi":{"line":86,"col":44},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}},{"ident":["invoker",{"lo":{"line":94,"col":7},"hi":{"line":94,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasReceiveContext"},"disambiguator":0},{"data":{"ValueNs":"invoker"},"disambiguator":0}],"index":[0,119]},"generics":{"params":[{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasReceiveContext"},"disambiguator":0},{"data":{"ValueNs":"invoker"},"disambiguator":0}],"index":[0,119]},"local_id":1},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasReceiveContext"},"disambiguator":0},{"data":{"ValueNs":"invoker"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,252]},"name":"Fresh","span":{"lo":{"line":94,"col":15},"hi":{"line":94,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]}],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":94,"col":39},"hi":{"line":94,"col":39},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":94,"col":14},"hi":{"line":94,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"kind":{"RequiredFn":[{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"decl":{"inputs":[{"Ref":[{"kind":{"ReLateBound":[0,{"var":0,"kind":{"BrNamed":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasReceiveContext"},"disambiguator":0},{"data":{"ValueNs":"invoker"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,252]},"'_"]}}]}},{"Param":{"index":0,"name":"Self"}},false]}],"output":{"Return":{"Adt":{"generic_args":[],"def_id":{"krate":"concordium_contracts_common","path":[{"data":{"TypeNs":"types"},"disambiguator":0},{"data":{"TypeNs":"AccountAddress"},"disambiguator":0}],"index":[5,964]}}}},"c_variadic":false,"implicit_self":"ImmRef","lifetime_elision_allowed":true},"span":{"lo":{"line":94,"col":4},"hi":{"line":94,"col":40},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[["self",{"lo":{"line":94,"col":16},"hi":{"line":94,"col":20},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}]]]},"span":{"lo":{"line":94,"col":4},"hi":{"line":94,"col":40},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"defaultness":{"Default":{"has_value":false}},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Who is the account that initiated the top-level transaction this"]},"id":240,"style":"Outer","span":{"lo":{"line":92,"col":4},"hi":{"line":92,"col":72},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," invocation is a part of."]},"id":241,"style":"Outer","span":{"lo":{"line":93,"col":4},"hi":{"line":93,"col":32},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"DocComment":["Line"," Types which can act as receive contexts."]},"id":238,"style":"Outer","span":{"lo":{"line":86,"col":0},"hi":{"line":86,"col":44},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}},{"ident":["self_address",{"lo":{"line":96,"col":7},"hi":{"line":96,"col":19},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasReceiveContext"},"disambiguator":0},{"data":{"ValueNs":"self_address"},"disambiguator":0}],"index":[0,120]},"generics":{"params":[{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasReceiveContext"},"disambiguator":0},{"data":{"ValueNs":"self_address"},"disambiguator":0}],"index":[0,120]},"local_id":1},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasReceiveContext"},"disambiguator":0},{"data":{"ValueNs":"self_address"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,253]},"name":"Fresh","span":{"lo":{"line":96,"col":20},"hi":{"line":96,"col":21},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]}],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":96,"col":45},"hi":{"line":96,"col":45},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":96,"col":19},"hi":{"line":96,"col":19},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"kind":{"RequiredFn":[{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"decl":{"inputs":[{"Ref":[{"kind":{"ReLateBound":[0,{"var":0,"kind":{"BrNamed":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasReceiveContext"},"disambiguator":0},{"data":{"ValueNs":"self_address"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,253]},"'_"]}}]}},{"Param":{"index":0,"name":"Self"}},false]}],"output":{"Return":{"Adt":{"generic_args":[],"def_id":{"krate":"concordium_contracts_common","path":[{"data":{"TypeNs":"types"},"disambiguator":0},{"data":{"TypeNs":"ContractAddress"},"disambiguator":0}],"index":[5,988]}}}},"c_variadic":false,"implicit_self":"ImmRef","lifetime_elision_allowed":true},"span":{"lo":{"line":96,"col":4},"hi":{"line":96,"col":46},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[["self",{"lo":{"line":96,"col":21},"hi":{"line":96,"col":25},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}]]]},"span":{"lo":{"line":96,"col":4},"hi":{"line":96,"col":46},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"defaultness":{"Default":{"has_value":false}},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," The address of the contract being invoked."]},"id":242,"style":"Outer","span":{"lo":{"line":95,"col":4},"hi":{"line":95,"col":50},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"DocComment":["Line"," Types which can act as receive contexts."]},"id":238,"style":"Outer","span":{"lo":{"line":86,"col":0},"hi":{"line":86,"col":44},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}},{"ident":["self_balance",{"lo":{"line":98,"col":7},"hi":{"line":98,"col":19},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasReceiveContext"},"disambiguator":0},{"data":{"ValueNs":"self_balance"},"disambiguator":0}],"index":[0,121]},"generics":{"params":[{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasReceiveContext"},"disambiguator":0},{"data":{"ValueNs":"self_balance"},"disambiguator":0}],"index":[0,121]},"local_id":1},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasReceiveContext"},"disambiguator":0},{"data":{"ValueNs":"self_balance"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,254]},"name":"Fresh","span":{"lo":{"line":98,"col":20},"hi":{"line":98,"col":21},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]}],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":98,"col":36},"hi":{"line":98,"col":36},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":98,"col":19},"hi":{"line":98,"col":19},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"kind":{"RequiredFn":[{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"decl":{"inputs":[{"Ref":[{"kind":{"ReLateBound":[0,{"var":0,"kind":{"BrNamed":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasReceiveContext"},"disambiguator":0},{"data":{"ValueNs":"self_balance"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,254]},"'_"]}}]}},{"Param":{"index":0,"name":"Self"}},false]}],"output":{"Return":{"Adt":{"generic_args":[],"def_id":{"krate":"concordium_contracts_common","path":[{"data":{"TypeNs":"types"},"disambiguator":0},{"data":{"TypeNs":"Amount"},"disambiguator":0}],"index":[5,862]}}}},"c_variadic":false,"implicit_self":"ImmRef","lifetime_elision_allowed":true},"span":{"lo":{"line":98,"col":4},"hi":{"line":98,"col":37},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[["self",{"lo":{"line":98,"col":21},"hi":{"line":98,"col":25},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}]]]},"span":{"lo":{"line":98,"col":4},"hi":{"line":98,"col":37},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"defaultness":{"Default":{"has_value":false}},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Balance on the contract before the call was made."]},"id":243,"style":"Outer","span":{"lo":{"line":97,"col":4},"hi":{"line":97,"col":57},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"DocComment":["Line"," Types which can act as receive contexts."]},"id":238,"style":"Outer","span":{"lo":{"line":86,"col":0},"hi":{"line":86,"col":44},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}},{"ident":["sender",{"lo":{"line":101,"col":7},"hi":{"line":101,"col":13},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasReceiveContext"},"disambiguator":0},{"data":{"ValueNs":"sender"},"disambiguator":0}],"index":[0,122]},"generics":{"params":[{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasReceiveContext"},"disambiguator":0},{"data":{"ValueNs":"sender"},"disambiguator":0}],"index":[0,122]},"local_id":1},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasReceiveContext"},"disambiguator":0},{"data":{"ValueNs":"sender"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,255]},"name":"Fresh","span":{"lo":{"line":101,"col":14},"hi":{"line":101,"col":15},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]}],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":101,"col":31},"hi":{"line":101,"col":31},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":101,"col":13},"hi":{"line":101,"col":13},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"kind":{"RequiredFn":[{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"decl":{"inputs":[{"Ref":[{"kind":{"ReLateBound":[0,{"var":0,"kind":{"BrNamed":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasReceiveContext"},"disambiguator":0},{"data":{"ValueNs":"sender"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,255]},"'_"]}}]}},{"Param":{"index":0,"name":"Self"}},false]}],"output":{"Return":{"Adt":{"generic_args":[],"def_id":{"krate":"concordium_contracts_common","path":[{"data":{"TypeNs":"types"},"disambiguator":0},{"data":{"TypeNs":"Address"},"disambiguator":0}],"index":[5,1009]}}}},"c_variadic":false,"implicit_self":"ImmRef","lifetime_elision_allowed":true},"span":{"lo":{"line":101,"col":4},"hi":{"line":101,"col":32},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[["self",{"lo":{"line":101,"col":15},"hi":{"line":101,"col":19},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}]]]},"span":{"lo":{"line":101,"col":4},"hi":{"line":101,"col":32},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"defaultness":{"Default":{"has_value":false}},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," The immediate sender of the message. In general different from the"]},"id":244,"style":"Outer","span":{"lo":{"line":99,"col":4},"hi":{"line":99,"col":74},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," invoker."]},"id":245,"style":"Outer","span":{"lo":{"line":100,"col":4},"hi":{"line":100,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"DocComment":["Line"," Types which can act as receive contexts."]},"id":238,"style":"Outer","span":{"lo":{"line":86,"col":0},"hi":{"line":86,"col":44},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}},{"ident":["owner",{"lo":{"line":103,"col":7},"hi":{"line":103,"col":12},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasReceiveContext"},"disambiguator":0},{"data":{"ValueNs":"owner"},"disambiguator":0}],"index":[0,123]},"generics":{"params":[{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasReceiveContext"},"disambiguator":0},{"data":{"ValueNs":"owner"},"disambiguator":0}],"index":[0,123]},"local_id":1},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasReceiveContext"},"disambiguator":0},{"data":{"ValueNs":"owner"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,256]},"name":"Fresh","span":{"lo":{"line":103,"col":13},"hi":{"line":103,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]}],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":103,"col":37},"hi":{"line":103,"col":37},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":103,"col":12},"hi":{"line":103,"col":12},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"kind":{"RequiredFn":[{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"decl":{"inputs":[{"Ref":[{"kind":{"ReLateBound":[0,{"var":0,"kind":{"BrNamed":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasReceiveContext"},"disambiguator":0},{"data":{"ValueNs":"owner"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,256]},"'_"]}}]}},{"Param":{"index":0,"name":"Self"}},false]}],"output":{"Return":{"Adt":{"generic_args":[],"def_id":{"krate":"concordium_contracts_common","path":[{"data":{"TypeNs":"types"},"disambiguator":0},{"data":{"TypeNs":"AccountAddress"},"disambiguator":0}],"index":[5,964]}}}},"c_variadic":false,"implicit_self":"ImmRef","lifetime_elision_allowed":true},"span":{"lo":{"line":103,"col":4},"hi":{"line":103,"col":38},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[["self",{"lo":{"line":103,"col":14},"hi":{"line":103,"col":18},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}]]]},"span":{"lo":{"line":103,"col":4},"hi":{"line":103,"col":38},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"defaultness":{"Default":{"has_value":false}},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Account which created the contract instance."]},"id":246,"style":"Outer","span":{"lo":{"line":102,"col":4},"hi":{"line":102,"col":52},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"DocComment":["Line"," Types which can act as receive contexts."]},"id":238,"style":"Outer","span":{"lo":{"line":86,"col":0},"hi":{"line":86,"col":44},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}}]]},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Types which can act as receive contexts."]},"id":238,"style":"Outer","span":{"lo":{"line":86,"col":0},"hi":{"line":86,"col":44},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasContractState"},"disambiguator":0}],"index":[0,124]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasContractState"},"disambiguator":0}],"index":[0,124]},"span":{"lo":{"line":108,"col":0},"hi":{"line":130,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"vis_span":{"lo":{"line":108,"col":0},"hi":{"line":130,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"kind":{"Trait":["No","Normal",{"params":[{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasContractState"},"disambiguator":0}],"index":[0,124]},"local_id":28},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasContractState"},"disambiguator":0},{"data":{"TypeNs":"Error"},"disambiguator":0}],"index":[0,125]},"name":{"Plain":{"name":"Error","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasContractState"},"disambiguator":0}],"index":[0,124]},"local_id":28}}},"span":{"lo":{"line":108,"col":27},"hi":{"line":108,"col":46},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"pure_wrt_drop":false,"kind":{"Type":{"default":{"Tuple":[]},"synthetic":false}},"colon_span":{"lo":{"line":108,"col":32},"hi":{"line":108,"col":33},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"attributes":[]}],"predicates":[{"BoundPredicate":{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasContractState"},"disambiguator":0}],"index":[0,124]},"local_id":5},"span":{"lo":{"line":108,"col":32},"hi":{"line":108,"col":41},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"origin":"GenericParam","bound_generic_params":[],"bounded_ty":{"Param":{"index":1,"name":"Error"}}}},{"BoundPredicate":{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasContractState"},"disambiguator":0}],"index":[0,124]},"local_id":6},"span":{"lo":{"line":110,"col":4},"hi":{"line":110,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"origin":"WhereClause","bound_generic_params":[],"bounded_ty":{"Param":{"index":0,"name":"Self"}}}},{"BoundPredicate":{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasContractState"},"disambiguator":0}],"index":[0,124]},"local_id":11},"span":{"lo":{"line":111,"col":4},"hi":{"line":111,"col":28},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"origin":"WhereClause","bound_generic_params":[],"bounded_ty":{"Param":{"index":0,"name":"Self"}}}},{"BoundPredicate":{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasContractState"},"disambiguator":0}],"index":[0,124]},"local_id":19},"span":{"lo":{"line":112,"col":4},"hi":{"line":112,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"origin":"WhereClause","bound_generic_params":[],"bounded_ty":{"Param":{"index":0,"name":"Self"}}}}],"bounds":[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"Sized"},"disambiguator":0}],"index":[1,2689]},"generic_args":[{"Type":{"Param":{"index":1,"name":"Error"}}}]},"is_const":false,"is_positive":true}},"id":13656839978771590325}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"default"},"disambiguator":0},{"data":{"TypeNs":"Default"},"disambiguator":0}],"index":[1,2587]},"generic_args":[{"Type":{"Param":{"index":1,"name":"Error"}}}]},"is_const":false,"is_positive":true}},"id":468573141220163386}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"concordium_contracts_common","path":[{"data":{"TypeNs":"traits"},"disambiguator":0},{"data":{"TypeNs":"Read"},"disambiguator":0}],"index":[5,26]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}}]},"is_const":false,"is_positive":true}},"id":2437756474506696380}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"concordium_contracts_common","path":[{"data":{"TypeNs":"traits"},"disambiguator":0},{"data":{"TypeNs":"Write"},"disambiguator":0}],"index":[5,37]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}}]},"is_const":false,"is_positive":true}},"id":14362174564524012008}},{"Clause":{"kind":{"Projection":{"projection_ty":{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}}],"trait_def_id":[{"krate":"concordium_contracts_common","path":[{"data":{"TypeNs":"traits"},"disambiguator":0},{"data":{"TypeNs":"Write"},"disambiguator":0}],"index":[5,37]},{"impl":{"LocalBound":{"clause_id":14362174564524012008,"path":[]}},"args":[]}],"def_id":{"krate":"concordium_contracts_common","path":[{"data":{"TypeNs":"traits"},"disambiguator":0},{"data":{"TypeNs":"Write"},"disambiguator":0},{"data":{"TypeNs":"Err"},"disambiguator":0}],"index":[5,38]}},"term":{"Ty":{"Param":{"index":1,"name":"Error"}}}}},"id":4054745027042689359}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"concordium_contracts_common","path":[{"data":{"TypeNs":"traits"},"disambiguator":0},{"data":{"TypeNs":"Seek"},"disambiguator":0}],"index":[5,22]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}}]},"is_const":false,"is_positive":true}},"id":1025623541863160082}},{"Clause":{"kind":{"Projection":{"projection_ty":{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}}],"trait_def_id":[{"krate":"concordium_contracts_common","path":[{"data":{"TypeNs":"traits"},"disambiguator":0},{"data":{"TypeNs":"Seek"},"disambiguator":0}],"index":[5,22]},{"impl":{"LocalBound":{"clause_id":1025623541863160082,"path":[]}},"args":[]}],"def_id":{"krate":"concordium_contracts_common","path":[{"data":{"TypeNs":"traits"},"disambiguator":0},{"data":{"TypeNs":"Seek"},"disambiguator":0},{"data":{"TypeNs":"Err"},"disambiguator":0}],"index":[5,23]}},"term":{"Ty":{"Param":{"index":1,"name":"Error"}}}}},"id":12486526404069431600}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasContractState"},"disambiguator":0}],"index":[0,124]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}},{"Type":{"Param":{"index":1,"name":"Error"}}}]},"is_const":false,"is_positive":true}},"id":16350532459756314912}}],"has_where_clause_predicates":true,"where_clause_span":{"lo":{"line":109,"col":0},"hi":{"line":112,"col":28},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":108,"col":26},"hi":{"line":108,"col":47},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"Sized"},"disambiguator":0}],"index":[1,2689]},"generic_args":[{"Type":{"Param":{"index":1,"name":"Error"}}}]},"is_const":false,"is_positive":true}},"id":13656839978771590325}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"default"},"disambiguator":0},{"data":{"TypeNs":"Default"},"disambiguator":0}],"index":[1,2587]},"generic_args":[{"Type":{"Param":{"index":1,"name":"Error"}}}]},"is_const":false,"is_positive":true}},"id":468573141220163386}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"concordium_contracts_common","path":[{"data":{"TypeNs":"traits"},"disambiguator":0},{"data":{"TypeNs":"Read"},"disambiguator":0}],"index":[5,26]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}}]},"is_const":false,"is_positive":true}},"id":2437756474506696380}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"concordium_contracts_common","path":[{"data":{"TypeNs":"traits"},"disambiguator":0},{"data":{"TypeNs":"Write"},"disambiguator":0}],"index":[5,37]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}}]},"is_const":false,"is_positive":true}},"id":14362174564524012008}},{"Clause":{"kind":{"Projection":{"projection_ty":{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}}],"trait_def_id":[{"krate":"concordium_contracts_common","path":[{"data":{"TypeNs":"traits"},"disambiguator":0},{"data":{"TypeNs":"Write"},"disambiguator":0}],"index":[5,37]},{"impl":{"LocalBound":{"clause_id":14362174564524012008,"path":[]}},"args":[]}],"def_id":{"krate":"concordium_contracts_common","path":[{"data":{"TypeNs":"traits"},"disambiguator":0},{"data":{"TypeNs":"Write"},"disambiguator":0},{"data":{"TypeNs":"Err"},"disambiguator":0}],"index":[5,38]}},"term":{"Ty":{"Param":{"index":1,"name":"Error"}}}}},"id":4054745027042689359}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"concordium_contracts_common","path":[{"data":{"TypeNs":"traits"},"disambiguator":0},{"data":{"TypeNs":"Seek"},"disambiguator":0}],"index":[5,22]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}}]},"is_const":false,"is_positive":true}},"id":1025623541863160082}},{"Clause":{"kind":{"Projection":{"projection_ty":{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}}],"trait_def_id":[{"krate":"concordium_contracts_common","path":[{"data":{"TypeNs":"traits"},"disambiguator":0},{"data":{"TypeNs":"Seek"},"disambiguator":0}],"index":[5,22]},{"impl":{"LocalBound":{"clause_id":1025623541863160082,"path":[]}},"args":[]}],"def_id":{"krate":"concordium_contracts_common","path":[{"data":{"TypeNs":"traits"},"disambiguator":0},{"data":{"TypeNs":"Seek"},"disambiguator":0},{"data":{"TypeNs":"Err"},"disambiguator":0}],"index":[5,23]}},"term":{"Ty":{"Param":{"index":1,"name":"Error"}}}}},"id":12486526404069431600}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasContractState"},"disambiguator":0}],"index":[0,124]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}},{"Type":{"Param":{"index":1,"name":"Error"}}}]},"is_const":false,"is_positive":true}},"id":16350532459756314912}}],[{"ident":["ContractStateData",{"lo":{"line":113,"col":9},"hi":{"line":113,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasContractState"},"disambiguator":0},{"data":{"TypeNs":"ContractStateData"},"disambiguator":0}],"index":[0,126]},"generics":{"params":[],"predicates":[],"bounds":[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"Sized"},"disambiguator":0}],"index":[1,2689]},"generic_args":[{"Type":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}},{"Type":{"Param":{"index":1,"name":"Error"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasContractState"},"disambiguator":0}],"index":[0,124]},{"impl":{"LocalBound":{"clause_id":16350532459756314912,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasContractState"},"disambiguator":0},{"data":{"TypeNs":"ContractStateData"},"disambiguator":0}],"index":[0,126]}}]}}]},"is_const":false,"is_positive":true}},"id":9003714832965411642}}],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":113,"col":26},"hi":{"line":113,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":113,"col":26},"hi":{"line":113,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"kind":{"Type":[[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"Sized"},"disambiguator":0}],"index":[1,2689]},"generic_args":[{"Type":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}},{"Type":{"Param":{"index":1,"name":"Error"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasContractState"},"disambiguator":0}],"index":[0,124]},{"impl":{"LocalBound":{"clause_id":16350532459756314912,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasContractState"},"disambiguator":0},{"data":{"TypeNs":"ContractStateData"},"disambiguator":0}],"index":[0,126]}}]}}]},"is_const":false,"is_positive":true}},"id":9003714832965411642}}],null]},"span":{"lo":{"line":113,"col":4},"hi":{"line":113,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"defaultness":{"Default":{"has_value":false}},"attributes":{"attributes":[],"parent_attributes":[{"kind":{"DocComment":["Line"," A type that can serve as the contract state type."]},"id":247,"style":"Outer","span":{"lo":{"line":107,"col":0},"hi":{"line":107,"col":53},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}},{"ident":["open",{"lo":{"line":116,"col":7},"hi":{"line":116,"col":11},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasContractState"},"disambiguator":0},{"data":{"ValueNs":"open"},"disambiguator":0}],"index":[0,127]},"generics":{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":116,"col":47},"hi":{"line":116,"col":47},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":116,"col":11},"hi":{"line":116,"col":11},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"kind":{"RequiredFn":[{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"decl":{"inputs":[{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}},{"Type":{"Param":{"index":1,"name":"Error"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasContractState"},"disambiguator":0}],"index":[0,124]},{"impl":{"LocalBound":{"clause_id":16350532459756314912,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasContractState"},"disambiguator":0},{"data":{"TypeNs":"ContractStateData"},"disambiguator":0}],"index":[0,126]}}]}],"output":{"Return":{"Param":{"index":0,"name":"Self"}}},"c_variadic":false,"implicit_self":"None","lifetime_elision_allowed":false},"span":{"lo":{"line":116,"col":4},"hi":{"line":116,"col":48},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[["",{"lo":{"line":116,"col":12},"hi":{"line":116,"col":13},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}]]]},"span":{"lo":{"line":116,"col":4},"hi":{"line":116,"col":48},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"defaultness":{"Default":{"has_value":false}},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Open the contract state. Only one instance can be opened at the same"]},"id":248,"style":"Outer","span":{"lo":{"line":114,"col":4},"hi":{"line":114,"col":76},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," time."]},"id":249,"style":"Outer","span":{"lo":{"line":115,"col":4},"hi":{"line":115,"col":13},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"DocComment":["Line"," A type that can serve as the contract state type."]},"id":247,"style":"Outer","span":{"lo":{"line":107,"col":0},"hi":{"line":107,"col":53},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}},{"ident":["size",{"lo":{"line":119,"col":7},"hi":{"line":119,"col":11},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasContractState"},"disambiguator":0},{"data":{"ValueNs":"size"},"disambiguator":0}],"index":[0,128]},"generics":{"params":[{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasContractState"},"disambiguator":0},{"data":{"ValueNs":"size"},"disambiguator":0}],"index":[0,128]},"local_id":1},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasContractState"},"disambiguator":0},{"data":{"ValueNs":"size"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,257]},"name":"Fresh","span":{"lo":{"line":119,"col":12},"hi":{"line":119,"col":13},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]}],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":119,"col":25},"hi":{"line":119,"col":25},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":119,"col":11},"hi":{"line":119,"col":11},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"kind":{"RequiredFn":[{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"decl":{"inputs":[{"Ref":[{"kind":{"ReLateBound":[0,{"var":0,"kind":{"BrNamed":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasContractState"},"disambiguator":0},{"data":{"ValueNs":"size"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,257]},"'_"]}}]}},{"Param":{"index":0,"name":"Self"}},false]}],"output":{"Return":{"Uint":"U32"}},"c_variadic":false,"implicit_self":"ImmRef","lifetime_elision_allowed":true},"span":{"lo":{"line":119,"col":4},"hi":{"line":119,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[["self",{"lo":{"line":119,"col":13},"hi":{"line":119,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}]]]},"span":{"lo":{"line":119,"col":4},"hi":{"line":119,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"defaultness":{"Default":{"has_value":false}},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Get the current size of contract state."]},"id":250,"style":"Outer","span":{"lo":{"line":118,"col":4},"hi":{"line":118,"col":47},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"DocComment":["Line"," A type that can serve as the contract state type."]},"id":247,"style":"Outer","span":{"lo":{"line":107,"col":0},"hi":{"line":107,"col":53},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}},{"ident":["truncate",{"lo":{"line":124,"col":7},"hi":{"line":124,"col":15},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasContractState"},"disambiguator":0},{"data":{"ValueNs":"truncate"},"disambiguator":0}],"index":[0,129]},"generics":{"params":[{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasContractState"},"disambiguator":0},{"data":{"ValueNs":"truncate"},"disambiguator":0}],"index":[0,129]},"local_id":1},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasContractState"},"disambiguator":0},{"data":{"ValueNs":"truncate"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,258]},"name":"Fresh","span":{"lo":{"line":124,"col":16},"hi":{"line":124,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]}],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":124,"col":45},"hi":{"line":124,"col":45},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":124,"col":15},"hi":{"line":124,"col":15},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"kind":{"RequiredFn":[{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"decl":{"inputs":[{"Ref":[{"kind":{"ReLateBound":[0,{"var":0,"kind":{"BrNamed":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasContractState"},"disambiguator":0},{"data":{"ValueNs":"truncate"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,258]},"'_"]}}]}},{"Param":{"index":0,"name":"Self"}},false]},{"Uint":"U32"}],"output":{"Return":{"Param":{"index":0,"name":"Self"}}},"c_variadic":false,"implicit_self":"ImmRef","lifetime_elision_allowed":true},"span":{"lo":{"line":124,"col":4},"hi":{"line":124,"col":46},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[["self",{"lo":{"line":124,"col":17},"hi":{"line":124,"col":21},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],["new_size",{"lo":{"line":124,"col":23},"hi":{"line":124,"col":31},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}]]]},"span":{"lo":{"line":124,"col":4},"hi":{"line":124,"col":46},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"defaultness":{"Default":{"has_value":false}},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Truncate the state to the given size. If the given size is more than the"]},"id":251,"style":"Outer","span":{"lo":{"line":121,"col":4},"hi":{"line":121,"col":80},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," current state size this operation does nothing. The new position is at"]},"id":252,"style":"Outer","span":{"lo":{"line":122,"col":4},"hi":{"line":122,"col":78},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," most at the end of the stream."]},"id":253,"style":"Outer","span":{"lo":{"line":123,"col":4},"hi":{"line":123,"col":38},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"DocComment":["Line"," A type that can serve as the contract state type."]},"id":247,"style":"Outer","span":{"lo":{"line":107,"col":0},"hi":{"line":107,"col":53},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}},{"ident":["reserve",{"lo":{"line":129,"col":7},"hi":{"line":129,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasContractState"},"disambiguator":0},{"data":{"ValueNs":"reserve"},"disambiguator":0}],"index":[0,130]},"generics":{"params":[{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasContractState"},"disambiguator":0},{"data":{"ValueNs":"reserve"},"disambiguator":0}],"index":[0,130]},"local_id":1},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasContractState"},"disambiguator":0},{"data":{"ValueNs":"reserve"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,259]},"name":"Fresh","span":{"lo":{"line":129,"col":15},"hi":{"line":129,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]}],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":129,"col":47},"hi":{"line":129,"col":47},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":129,"col":14},"hi":{"line":129,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"kind":{"RequiredFn":[{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"decl":{"inputs":[{"Ref":[{"kind":{"ReLateBound":[0,{"var":0,"kind":{"BrNamed":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasContractState"},"disambiguator":0},{"data":{"ValueNs":"reserve"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,259]},"'_"]}}]}},{"Param":{"index":0,"name":"Self"}},false]},{"Uint":"U32"}],"output":{"Return":{"Tuple":["Bool",{"Param":{"index":0,"name":"Self"}}]}},"c_variadic":false,"implicit_self":"ImmRef","lifetime_elision_allowed":true},"span":{"lo":{"line":129,"col":4},"hi":{"line":129,"col":48},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[["self",{"lo":{"line":129,"col":16},"hi":{"line":129,"col":20},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],["len",{"lo":{"line":129,"col":22},"hi":{"line":129,"col":25},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}]]]},"span":{"lo":{"line":129,"col":4},"hi":{"line":129,"col":48},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"defaultness":{"Default":{"has_value":false}},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Make sure that the memory size is at least that many bytes in size."]},"id":254,"style":"Outer","span":{"lo":{"line":126,"col":4},"hi":{"line":126,"col":75},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," Returns true iff this was successful. The new bytes are initialized as"]},"id":255,"style":"Outer","span":{"lo":{"line":127,"col":4},"hi":{"line":127,"col":78},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," 0."]},"id":256,"style":"Outer","span":{"lo":{"line":128,"col":4},"hi":{"line":128,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"DocComment":["Line"," A type that can serve as the contract state type."]},"id":247,"style":"Outer","span":{"lo":{"line":107,"col":0},"hi":{"line":107,"col":53},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}}]]},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," A type that can serve as the contract state type."]},"id":247,"style":"Outer","span":{"lo":{"line":107,"col":0},"hi":{"line":107,"col":53},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasLogger"},"disambiguator":0}],"index":[0,131]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasLogger"},"disambiguator":0}],"index":[0,131]},"span":{"lo":{"line":139,"col":0},"hi":{"line":157,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"vis_span":{"lo":{"line":139,"col":0},"hi":{"line":157,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"kind":{"Trait":["No","Normal",{"params":[],"predicates":[],"bounds":[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasLogger"},"disambiguator":0}],"index":[0,131]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}}]},"is_const":false,"is_positive":true}},"id":17916136383929855154}}],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":139,"col":19},"hi":{"line":139,"col":19},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":139,"col":19},"hi":{"line":139,"col":19},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasLogger"},"disambiguator":0}],"index":[0,131]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}}]},"is_const":false,"is_positive":true}},"id":17916136383929855154}}],[{"ident":["init",{"lo":{"line":141,"col":7},"hi":{"line":141,"col":11},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasLogger"},"disambiguator":0},{"data":{"ValueNs":"init"},"disambiguator":0}],"index":[0,132]},"generics":{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":141,"col":21},"hi":{"line":141,"col":21},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":141,"col":11},"hi":{"line":141,"col":11},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"kind":{"RequiredFn":[{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"decl":{"inputs":[],"output":{"Return":{"Param":{"index":0,"name":"Self"}}},"c_variadic":false,"implicit_self":"None","lifetime_elision_allowed":false},"span":{"lo":{"line":141,"col":4},"hi":{"line":141,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[]]},"span":{"lo":{"line":141,"col":4},"hi":{"line":141,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"defaultness":{"Default":{"has_value":false}},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Initialize a logger."]},"id":263,"style":"Outer","span":{"lo":{"line":140,"col":4},"hi":{"line":140,"col":28},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"DocComment":["Line"," Objects which can serve as loggers."]},"id":257,"style":"Outer","span":{"lo":{"line":133,"col":0},"hi":{"line":133,"col":39},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line",""]},"id":258,"style":"Outer","span":{"lo":{"line":134,"col":0},"hi":{"line":134,"col":3},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," Logging functionality can be used by smart contracts to record events that"]},"id":259,"style":"Outer","span":{"lo":{"line":135,"col":0},"hi":{"line":135,"col":78},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," might be of interest to external parties. These events are not used on the"]},"id":260,"style":"Outer","span":{"lo":{"line":136,"col":0},"hi":{"line":136,"col":78},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," chain, and cannot be observed by other contracts, but they are stored by the"]},"id":261,"style":"Outer","span":{"lo":{"line":137,"col":0},"hi":{"line":137,"col":80},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," node, and can be queried to provide information to off-chain actors."]},"id":262,"style":"Outer","span":{"lo":{"line":138,"col":0},"hi":{"line":138,"col":72},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}},{"ident":["log_raw",{"lo":{"line":145,"col":7},"hi":{"line":145,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasLogger"},"disambiguator":0},{"data":{"ValueNs":"log_raw"},"disambiguator":0}],"index":[0,133]},"generics":{"params":[{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasLogger"},"disambiguator":0},{"data":{"ValueNs":"log_raw"},"disambiguator":0}],"index":[0,133]},"local_id":1},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasLogger"},"disambiguator":0},{"data":{"ValueNs":"log_raw"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,260]},"name":"Fresh","span":{"lo":{"line":145,"col":15},"hi":{"line":145,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]},{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasLogger"},"disambiguator":0},{"data":{"ValueNs":"log_raw"},"disambiguator":0}],"index":[0,133]},"local_id":2},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasLogger"},"disambiguator":0},{"data":{"ValueNs":"log_raw"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":1}],"index":[0,261]},"name":"Fresh","span":{"lo":{"line":145,"col":29},"hi":{"line":145,"col":30},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]}],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":145,"col":67},"hi":{"line":145,"col":67},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":145,"col":14},"hi":{"line":145,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"kind":{"RequiredFn":[{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"decl":{"inputs":[{"Ref":[{"kind":{"ReLateBound":[0,{"var":0,"kind":{"BrNamed":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasLogger"},"disambiguator":0},{"data":{"ValueNs":"log_raw"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,260]},"'_"]}}]}},{"Param":{"index":0,"name":"Self"}},false]},{"Ref":[{"kind":{"ReLateBound":[0,{"var":1,"kind":{"BrNamed":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasLogger"},"disambiguator":0},{"data":{"ValueNs":"log_raw"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":1}],"index":[0,261]},"'_"]}}]}},{"Slice":{"Uint":"U8"}},false]}],"output":{"Return":{"Tuple":[{"Adt":{"generic_args":[{"Type":{"Tuple":[]}},{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"result"},"disambiguator":0},{"data":{"TypeNs":"Result"},"disambiguator":0}],"index":[1,41506]}}},{"Param":{"index":0,"name":"Self"}}]}},"c_variadic":false,"implicit_self":"ImmRef","lifetime_elision_allowed":true},"span":{"lo":{"line":145,"col":4},"hi":{"line":145,"col":68},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[["self",{"lo":{"line":145,"col":16},"hi":{"line":145,"col":20},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],["event",{"lo":{"line":145,"col":22},"hi":{"line":145,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}]]]},"span":{"lo":{"line":145,"col":4},"hi":{"line":145,"col":68},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"defaultness":{"Default":{"has_value":false}},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Log the given slice as-is. If logging is not successful an error will be"]},"id":264,"style":"Outer","span":{"lo":{"line":143,"col":4},"hi":{"line":143,"col":80},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," returned."]},"id":265,"style":"Outer","span":{"lo":{"line":144,"col":4},"hi":{"line":144,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"DocComment":["Line"," Objects which can serve as loggers."]},"id":257,"style":"Outer","span":{"lo":{"line":133,"col":0},"hi":{"line":133,"col":39},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line",""]},"id":258,"style":"Outer","span":{"lo":{"line":134,"col":0},"hi":{"line":134,"col":3},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," Logging functionality can be used by smart contracts to record events that"]},"id":259,"style":"Outer","span":{"lo":{"line":135,"col":0},"hi":{"line":135,"col":78},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," might be of interest to external parties. These events are not used on the"]},"id":260,"style":"Outer","span":{"lo":{"line":136,"col":0},"hi":{"line":136,"col":78},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," chain, and cannot be observed by other contracts, but they are stored by the"]},"id":261,"style":"Outer","span":{"lo":{"line":137,"col":0},"hi":{"line":137,"col":80},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," node, and can be queried to provide information to off-chain actors."]},"id":262,"style":"Outer","span":{"lo":{"line":138,"col":0},"hi":{"line":138,"col":72},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}},{"ident":["log",{"lo":{"line":149,"col":7},"hi":{"line":149,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasLogger"},"disambiguator":0},{"data":{"ValueNs":"log"},"disambiguator":0}],"index":[0,134]},"generics":{"params":[{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasLogger"},"disambiguator":0},{"data":{"ValueNs":"log"},"disambiguator":0}],"index":[0,134]},"local_id":6},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasLogger"},"disambiguator":0},{"data":{"ValueNs":"log"},"disambiguator":0},{"data":{"TypeNs":"S"},"disambiguator":0}],"index":[0,135]},"name":{"Plain":{"name":"S","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasLogger"},"disambiguator":0},{"data":{"ValueNs":"log"},"disambiguator":0}],"index":[0,134]},"local_id":6}}},"span":{"lo":{"line":149,"col":11},"hi":{"line":149,"col":12},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"pure_wrt_drop":false,"kind":{"Type":{"default":null,"synthetic":false}},"colon_span":{"lo":{"line":149,"col":12},"hi":{"line":149,"col":13},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"attributes":[]},{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasLogger"},"disambiguator":0},{"data":{"ValueNs":"log"},"disambiguator":0}],"index":[0,134]},"local_id":7},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasLogger"},"disambiguator":0},{"data":{"ValueNs":"log"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,262]},"name":"Fresh","span":{"lo":{"line":149,"col":22},"hi":{"line":149,"col":23},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]},{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasLogger"},"disambiguator":0},{"data":{"ValueNs":"log"},"disambiguator":0}],"index":[0,134]},"local_id":8},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasLogger"},"disambiguator":0},{"data":{"ValueNs":"log"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":1}],"index":[0,263]},"name":"Fresh","span":{"lo":{"line":149,"col":36},"hi":{"line":149,"col":37},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]}],"predicates":[{"BoundPredicate":{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasLogger"},"disambiguator":0},{"data":{"ValueNs":"log"},"disambiguator":0}],"index":[0,134]},"local_id":5},"span":{"lo":{"line":149,"col":12},"hi":{"line":149,"col":20},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"origin":"GenericParam","bound_generic_params":[],"bounded_ty":{"Param":{"index":1,"name":"S"}}}}],"bounds":[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"Sized"},"disambiguator":0}],"index":[1,2689]},"generic_args":[{"Type":{"Param":{"index":1,"name":"S"}}}]},"is_const":false,"is_positive":true}},"id":9272273951847800647}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"concordium_contracts_common","path":[{"data":{"TypeNs":"traits"},"disambiguator":0},{"data":{"TypeNs":"Serial"},"disambiguator":0}],"index":[5,55]},"generic_args":[{"Type":{"Param":{"index":1,"name":"S"}}}]},"is_const":false,"is_positive":true}},"id":9303391958149541291}}],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":149,"col":71},"hi":{"line":149,"col":71},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":149,"col":10},"hi":{"line":149,"col":21},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"kind":{"RequiredFn":[{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"decl":{"inputs":[{"Ref":[{"kind":{"ReLateBound":[0,{"var":0,"kind":{"BrNamed":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasLogger"},"disambiguator":0},{"data":{"ValueNs":"log"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,262]},"'_"]}}]}},{"Param":{"index":0,"name":"Self"}},false]},{"Ref":[{"kind":{"ReLateBound":[0,{"var":1,"kind":{"BrNamed":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasLogger"},"disambiguator":0},{"data":{"ValueNs":"log"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":1}],"index":[0,263]},"'_"]}}]}},{"Param":{"index":1,"name":"S"}},false]}],"output":{"Return":{"Tuple":[{"Adt":{"generic_args":[{"Type":{"Tuple":[]}},{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0},{"data":{"TypeNs":"LogError"},"disambiguator":0}],"index":[0,189]}}}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"result"},"disambiguator":0},{"data":{"TypeNs":"Result"},"disambiguator":0}],"index":[1,41506]}}},{"Param":{"index":0,"name":"Self"}}]}},"c_variadic":false,"implicit_self":"ImmRef","lifetime_elision_allowed":true},"span":{"lo":{"line":149,"col":4},"hi":{"line":149,"col":72},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[["self",{"lo":{"line":149,"col":23},"hi":{"line":149,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],["event",{"lo":{"line":149,"col":29},"hi":{"line":149,"col":34},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}]]]},"span":{"lo":{"line":149,"col":4},"hi":{"line":149,"col":72},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"defaultness":{"Default":{"has_value":false}},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Log a serializable event by serializing it with a supplied serializer."]},"id":266,"style":"Outer","span":{"lo":{"line":148,"col":4},"hi":{"line":148,"col":78},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"DocComment":["Line"," Objects which can serve as loggers."]},"id":257,"style":"Outer","span":{"lo":{"line":133,"col":0},"hi":{"line":133,"col":39},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line",""]},"id":258,"style":"Outer","span":{"lo":{"line":134,"col":0},"hi":{"line":134,"col":3},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," Logging functionality can be used by smart contracts to record events that"]},"id":259,"style":"Outer","span":{"lo":{"line":135,"col":0},"hi":{"line":135,"col":78},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," might be of interest to external parties. These events are not used on the"]},"id":260,"style":"Outer","span":{"lo":{"line":136,"col":0},"hi":{"line":136,"col":78},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," chain, and cannot be observed by other contracts, but they are stored by the"]},"id":261,"style":"Outer","span":{"lo":{"line":137,"col":0},"hi":{"line":137,"col":80},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," node, and can be queried to provide information to off-chain actors."]},"id":262,"style":"Outer","span":{"lo":{"line":138,"col":0},"hi":{"line":138,"col":72},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}}]]},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Objects which can serve as loggers."]},"id":257,"style":"Outer","span":{"lo":{"line":133,"col":0},"hi":{"line":133,"col":39},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line",""]},"id":258,"style":"Outer","span":{"lo":{"line":134,"col":0},"hi":{"line":134,"col":3},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," Logging functionality can be used by smart contracts to record events that"]},"id":259,"style":"Outer","span":{"lo":{"line":135,"col":0},"hi":{"line":135,"col":78},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," might be of interest to external parties. These events are not used on the"]},"id":260,"style":"Outer","span":{"lo":{"line":136,"col":0},"hi":{"line":136,"col":78},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," chain, and cannot be observed by other contracts, but they are stored by the"]},"id":261,"style":"Outer","span":{"lo":{"line":137,"col":0},"hi":{"line":137,"col":80},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," node, and can be queried to provide information to off-chain actors."]},"id":262,"style":"Outer","span":{"lo":{"line":138,"col":0},"hi":{"line":138,"col":72},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasActions"},"disambiguator":0}],"index":[0,136]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasActions"},"disambiguator":0}],"index":[0,136]},"span":{"lo":{"line":165,"col":0},"hi":{"line":186,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"vis_span":{"lo":{"line":165,"col":0},"hi":{"line":186,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"kind":{"Trait":["No","Normal",{"params":[],"predicates":[],"bounds":[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasActions"},"disambiguator":0}],"index":[0,136]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}}]},"is_const":false,"is_positive":true}},"id":7643429660763269667}}],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":165,"col":20},"hi":{"line":165,"col":20},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":165,"col":20},"hi":{"line":165,"col":20},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasActions"},"disambiguator":0}],"index":[0,136]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}}]},"is_const":false,"is_positive":true}},"id":7643429660763269667}}],[{"ident":["accept",{"lo":{"line":167,"col":7},"hi":{"line":167,"col":13},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasActions"},"disambiguator":0},{"data":{"ValueNs":"accept"},"disambiguator":0}],"index":[0,137]},"generics":{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":167,"col":23},"hi":{"line":167,"col":23},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":167,"col":13},"hi":{"line":167,"col":13},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"kind":{"RequiredFn":[{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"decl":{"inputs":[],"output":{"Return":{"Param":{"index":0,"name":"Self"}}},"c_variadic":false,"implicit_self":"None","lifetime_elision_allowed":false},"span":{"lo":{"line":167,"col":4},"hi":{"line":167,"col":24},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[]]},"span":{"lo":{"line":167,"col":4},"hi":{"line":167,"col":24},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"defaultness":{"Default":{"has_value":false}},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Default accept action."]},"id":272,"style":"Outer","span":{"lo":{"line":166,"col":4},"hi":{"line":166,"col":30},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"DocComment":["Line"," An object that can serve to construct actions."]},"id":267,"style":"Outer","span":{"lo":{"line":160,"col":0},"hi":{"line":160,"col":50},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line",""]},"id":268,"style":"Outer","span":{"lo":{"line":161,"col":0},"hi":{"line":161,"col":3},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," The actions that a smart contract can produce as a"]},"id":269,"style":"Outer","span":{"lo":{"line":162,"col":0},"hi":{"line":162,"col":54},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," result of its execution. These actions form a tree and are executed by"]},"id":270,"style":"Outer","span":{"lo":{"line":163,"col":0},"hi":{"line":163,"col":74},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," the scheduler in the predefined order."]},"id":271,"style":"Outer","span":{"lo":{"line":164,"col":0},"hi":{"line":164,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}},{"ident":["simple_transfer",{"lo":{"line":170,"col":7},"hi":{"line":170,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasActions"},"disambiguator":0},{"data":{"ValueNs":"simple_transfer"},"disambiguator":0}],"index":[0,138]},"generics":{"params":[{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasActions"},"disambiguator":0},{"data":{"ValueNs":"simple_transfer"},"disambiguator":0}],"index":[0,138]},"local_id":1},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasActions"},"disambiguator":0},{"data":{"ValueNs":"simple_transfer"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,264]},"name":"Fresh","span":{"lo":{"line":170,"col":28},"hi":{"line":170,"col":29},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]}],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":170,"col":68},"hi":{"line":170,"col":68},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":170,"col":22},"hi":{"line":170,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"kind":{"RequiredFn":[{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"decl":{"inputs":[{"Ref":[{"kind":{"ReLateBound":[0,{"var":0,"kind":{"BrNamed":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasActions"},"disambiguator":0},{"data":{"ValueNs":"simple_transfer"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,264]},"'_"]}}]}},{"Adt":{"generic_args":[],"def_id":{"krate":"concordium_contracts_common","path":[{"data":{"TypeNs":"types"},"disambiguator":0},{"data":{"TypeNs":"AccountAddress"},"disambiguator":0}],"index":[5,964]}}},false]},{"Adt":{"generic_args":[],"def_id":{"krate":"concordium_contracts_common","path":[{"data":{"TypeNs":"types"},"disambiguator":0},{"data":{"TypeNs":"Amount"},"disambiguator":0}],"index":[5,862]}}}],"output":{"Return":{"Param":{"index":0,"name":"Self"}}},"c_variadic":false,"implicit_self":"None","lifetime_elision_allowed":true},"span":{"lo":{"line":170,"col":4},"hi":{"line":170,"col":69},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[["acc",{"lo":{"line":170,"col":23},"hi":{"line":170,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],["amount",{"lo":{"line":170,"col":45},"hi":{"line":170,"col":51},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}]]]},"span":{"lo":{"line":170,"col":4},"hi":{"line":170,"col":69},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"defaultness":{"Default":{"has_value":false}},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Send a given amount to an account."]},"id":273,"style":"Outer","span":{"lo":{"line":169,"col":4},"hi":{"line":169,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"DocComment":["Line"," An object that can serve to construct actions."]},"id":267,"style":"Outer","span":{"lo":{"line":160,"col":0},"hi":{"line":160,"col":50},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line",""]},"id":268,"style":"Outer","span":{"lo":{"line":161,"col":0},"hi":{"line":161,"col":3},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," The actions that a smart contract can produce as a"]},"id":269,"style":"Outer","span":{"lo":{"line":162,"col":0},"hi":{"line":162,"col":54},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," result of its execution. These actions form a tree and are executed by"]},"id":270,"style":"Outer","span":{"lo":{"line":163,"col":0},"hi":{"line":163,"col":74},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," the scheduler in the predefined order."]},"id":271,"style":"Outer","span":{"lo":{"line":164,"col":0},"hi":{"line":164,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}},{"ident":["send_raw",{"lo":{"line":173,"col":7},"hi":{"line":173,"col":15},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasActions"},"disambiguator":0},{"data":{"ValueNs":"send_raw"},"disambiguator":0}],"index":[0,139]},"generics":{"params":[{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasActions"},"disambiguator":0},{"data":{"ValueNs":"send_raw"},"disambiguator":0}],"index":[0,139]},"local_id":1},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasActions"},"disambiguator":0},{"data":{"ValueNs":"send_raw"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,265]},"name":"Fresh","span":{"lo":{"line":174,"col":12},"hi":{"line":174,"col":13},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]},{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasActions"},"disambiguator":0},{"data":{"ValueNs":"send_raw"},"disambiguator":0}],"index":[0,139]},"local_id":2},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasActions"},"disambiguator":0},{"data":{"ValueNs":"send_raw"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":1}],"index":[0,266]},"name":"Fresh","span":{"lo":{"line":175,"col":22},"hi":{"line":175,"col":33},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]},{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasActions"},"disambiguator":0},{"data":{"ValueNs":"send_raw"},"disambiguator":0}],"index":[0,139]},"local_id":3},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasActions"},"disambiguator":0},{"data":{"ValueNs":"send_raw"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":2}],"index":[0,267]},"name":"Fresh","span":{"lo":{"line":177,"col":19},"hi":{"line":177,"col":20},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]}],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":178,"col":13},"hi":{"line":178,"col":13},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":173,"col":15},"hi":{"line":173,"col":15},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"kind":{"RequiredFn":[{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"decl":{"inputs":[{"Ref":[{"kind":{"ReLateBound":[0,{"var":0,"kind":{"BrNamed":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasActions"},"disambiguator":0},{"data":{"ValueNs":"send_raw"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,265]},"'_"]}}]}},{"Adt":{"generic_args":[],"def_id":{"krate":"concordium_contracts_common","path":[{"data":{"TypeNs":"types"},"disambiguator":0},{"data":{"TypeNs":"ContractAddress"},"disambiguator":0}],"index":[5,988]}}},false]},{"Adt":{"generic_args":[{"Lifetime":{"kind":{"ReLateBound":[0,{"var":1,"kind":{"BrNamed":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasActions"},"disambiguator":0},{"data":{"ValueNs":"send_raw"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":1}],"index":[0,266]},"'_"]}}]}}}],"def_id":{"krate":"concordium_contracts_common","path":[{"data":{"TypeNs":"types"},"disambiguator":0},{"data":{"TypeNs":"ReceiveName"},"disambiguator":0}],"index":[5,1083]}}},{"Adt":{"generic_args":[],"def_id":{"krate":"concordium_contracts_common","path":[{"data":{"TypeNs":"types"},"disambiguator":0},{"data":{"TypeNs":"Amount"},"disambiguator":0}],"index":[5,862]}}},{"Ref":[{"kind":{"ReLateBound":[0,{"var":2,"kind":{"BrNamed":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasActions"},"disambiguator":0},{"data":{"ValueNs":"send_raw"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":2}],"index":[0,267]},"'_"]}}]}},{"Slice":{"Uint":"U8"}},false]}],"output":{"Return":{"Param":{"index":0,"name":"Self"}}},"c_variadic":false,"implicit_self":"None","lifetime_elision_allowed":false},"span":{"lo":{"line":173,"col":4},"hi":{"line":178,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[["ca",{"lo":{"line":174,"col":8},"hi":{"line":174,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],["receive_name",{"lo":{"line":175,"col":8},"hi":{"line":175,"col":20},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],["amount",{"lo":{"line":176,"col":8},"hi":{"line":176,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],["parameter",{"lo":{"line":177,"col":8},"hi":{"line":177,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}]]]},"span":{"lo":{"line":173,"col":4},"hi":{"line":178,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"defaultness":{"Default":{"has_value":false}},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Send a message to a contract."]},"id":274,"style":"Outer","span":{"lo":{"line":172,"col":4},"hi":{"line":172,"col":37},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"DocComment":["Line"," An object that can serve to construct actions."]},"id":267,"style":"Outer","span":{"lo":{"line":160,"col":0},"hi":{"line":160,"col":50},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line",""]},"id":268,"style":"Outer","span":{"lo":{"line":161,"col":0},"hi":{"line":161,"col":3},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," The actions that a smart contract can produce as a"]},"id":269,"style":"Outer","span":{"lo":{"line":162,"col":0},"hi":{"line":162,"col":54},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," result of its execution. These actions form a tree and are executed by"]},"id":270,"style":"Outer","span":{"lo":{"line":163,"col":0},"hi":{"line":163,"col":74},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," the scheduler in the predefined order."]},"id":271,"style":"Outer","span":{"lo":{"line":164,"col":0},"hi":{"line":164,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}},{"ident":["and_then",{"lo":{"line":182,"col":7},"hi":{"line":182,"col":15},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasActions"},"disambiguator":0},{"data":{"ValueNs":"and_then"},"disambiguator":0}],"index":[0,140]},"generics":{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":182,"col":41},"hi":{"line":182,"col":41},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":182,"col":15},"hi":{"line":182,"col":15},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"kind":{"RequiredFn":[{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"decl":{"inputs":[{"Param":{"index":0,"name":"Self"}},{"Param":{"index":0,"name":"Self"}}],"output":{"Return":{"Param":{"index":0,"name":"Self"}}},"c_variadic":false,"implicit_self":"Imm","lifetime_elision_allowed":false},"span":{"lo":{"line":182,"col":4},"hi":{"line":182,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[["self",{"lo":{"line":182,"col":16},"hi":{"line":182,"col":20},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],["then",{"lo":{"line":182,"col":22},"hi":{"line":182,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}]]]},"span":{"lo":{"line":182,"col":4},"hi":{"line":182,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"defaultness":{"Default":{"has_value":false}},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," If the execution of the first action succeeds, run the second action"]},"id":275,"style":"Outer","span":{"lo":{"line":180,"col":4},"hi":{"line":180,"col":76},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," as well."]},"id":276,"style":"Outer","span":{"lo":{"line":181,"col":4},"hi":{"line":181,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"DocComment":["Line"," An object that can serve to construct actions."]},"id":267,"style":"Outer","span":{"lo":{"line":160,"col":0},"hi":{"line":160,"col":50},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line",""]},"id":268,"style":"Outer","span":{"lo":{"line":161,"col":0},"hi":{"line":161,"col":3},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," The actions that a smart contract can produce as a"]},"id":269,"style":"Outer","span":{"lo":{"line":162,"col":0},"hi":{"line":162,"col":54},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," result of its execution. These actions form a tree and are executed by"]},"id":270,"style":"Outer","span":{"lo":{"line":163,"col":0},"hi":{"line":163,"col":74},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," the scheduler in the predefined order."]},"id":271,"style":"Outer","span":{"lo":{"line":164,"col":0},"hi":{"line":164,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}},{"ident":["or_else",{"lo":{"line":185,"col":7},"hi":{"line":185,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"HasActions"},"disambiguator":0},{"data":{"ValueNs":"or_else"},"disambiguator":0}],"index":[0,141]},"generics":{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":185,"col":38},"hi":{"line":185,"col":38},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":185,"col":14},"hi":{"line":185,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"kind":{"RequiredFn":[{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"decl":{"inputs":[{"Param":{"index":0,"name":"Self"}},{"Param":{"index":0,"name":"Self"}}],"output":{"Return":{"Param":{"index":0,"name":"Self"}}},"c_variadic":false,"implicit_self":"Imm","lifetime_elision_allowed":false},"span":{"lo":{"line":185,"col":4},"hi":{"line":185,"col":39},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[["self",{"lo":{"line":185,"col":15},"hi":{"line":185,"col":19},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],["el",{"lo":{"line":185,"col":21},"hi":{"line":185,"col":23},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}]]]},"span":{"lo":{"line":185,"col":4},"hi":{"line":185,"col":39},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"defaultness":{"Default":{"has_value":false}},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," If the execution of the first action fails, try the second."]},"id":277,"style":"Outer","span":{"lo":{"line":184,"col":4},"hi":{"line":184,"col":67},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"DocComment":["Line"," An object that can serve to construct actions."]},"id":267,"style":"Outer","span":{"lo":{"line":160,"col":0},"hi":{"line":160,"col":50},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line",""]},"id":268,"style":"Outer","span":{"lo":{"line":161,"col":0},"hi":{"line":161,"col":3},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," The actions that a smart contract can produce as a"]},"id":269,"style":"Outer","span":{"lo":{"line":162,"col":0},"hi":{"line":162,"col":54},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," result of its execution. These actions form a tree and are executed by"]},"id":270,"style":"Outer","span":{"lo":{"line":163,"col":0},"hi":{"line":163,"col":74},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," the scheduler in the predefined order."]},"id":271,"style":"Outer","span":{"lo":{"line":164,"col":0},"hi":{"line":164,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}}]]},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," An object that can serve to construct actions."]},"id":267,"style":"Outer","span":{"lo":{"line":160,"col":0},"hi":{"line":160,"col":50},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line",""]},"id":268,"style":"Outer","span":{"lo":{"line":161,"col":0},"hi":{"line":161,"col":3},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," The actions that a smart contract can produce as a"]},"id":269,"style":"Outer","span":{"lo":{"line":162,"col":0},"hi":{"line":162,"col":54},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," result of its execution. These actions form a tree and are executed by"]},"id":270,"style":"Outer","span":{"lo":{"line":163,"col":0},"hi":{"line":163,"col":74},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," the scheduler in the predefined order."]},"id":271,"style":"Outer","span":{"lo":{"line":164,"col":0},"hi":{"line":164,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"UnwrapAbort"},"disambiguator":0}],"index":[0,142]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"UnwrapAbort"},"disambiguator":0}],"index":[0,142]},"span":{"lo":{"line":191,"col":0},"hi":{"line":201,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"vis_span":{"lo":{"line":191,"col":0},"hi":{"line":201,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"kind":{"Trait":["No","Normal",{"params":[],"predicates":[],"bounds":[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"UnwrapAbort"},"disambiguator":0}],"index":[0,142]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}}]},"is_const":false,"is_positive":true}},"id":18436060400986552328}}],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":191,"col":21},"hi":{"line":191,"col":21},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":191,"col":21},"hi":{"line":191,"col":21},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"UnwrapAbort"},"disambiguator":0}],"index":[0,142]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}}]},"is_const":false,"is_positive":true}},"id":18436060400986552328}}],[{"ident":["Unwrap",{"lo":{"line":193,"col":9},"hi":{"line":193,"col":15},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"UnwrapAbort"},"disambiguator":0},{"data":{"TypeNs":"Unwrap"},"disambiguator":0}],"index":[0,143]},"generics":{"params":[],"predicates":[],"bounds":[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"Sized"},"disambiguator":0}],"index":[1,2689]},"generic_args":[{"Type":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"UnwrapAbort"},"disambiguator":0}],"index":[0,142]},{"impl":{"LocalBound":{"clause_id":18436060400986552328,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"UnwrapAbort"},"disambiguator":0},{"data":{"TypeNs":"Unwrap"},"disambiguator":0}],"index":[0,143]}}]}}]},"is_const":false,"is_positive":true}},"id":7242937820828818005}}],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":193,"col":15},"hi":{"line":193,"col":15},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":193,"col":15},"hi":{"line":193,"col":15},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"kind":{"Type":[[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"Sized"},"disambiguator":0}],"index":[1,2689]},"generic_args":[{"Type":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"UnwrapAbort"},"disambiguator":0}],"index":[0,142]},{"impl":{"LocalBound":{"clause_id":18436060400986552328,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"UnwrapAbort"},"disambiguator":0},{"data":{"TypeNs":"Unwrap"},"disambiguator":0}],"index":[0,143]}}]}}]},"is_const":false,"is_positive":true}},"id":7242937820828818005}}],null]},"span":{"lo":{"line":193,"col":4},"hi":{"line":193,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"defaultness":{"Default":{"has_value":false}},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," The underlying result type of the unwrap, in case of success."]},"id":280,"style":"Outer","span":{"lo":{"line":192,"col":4},"hi":{"line":192,"col":69},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"DocComment":["Line"," Add optimized unwrap behaviour that aborts the process instead of"]},"id":278,"style":"Outer","span":{"lo":{"line":189,"col":0},"hi":{"line":189,"col":69},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," panicking."]},"id":279,"style":"Outer","span":{"lo":{"line":190,"col":0},"hi":{"line":190,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}},{"ident":["unwrap_abort",{"lo":{"line":200,"col":7},"hi":{"line":200,"col":19},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"UnwrapAbort"},"disambiguator":0},{"data":{"ValueNs":"unwrap_abort"},"disambiguator":0}],"index":[0,144]},"generics":{"params":[],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":200,"col":41},"hi":{"line":200,"col":41},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":200,"col":19},"hi":{"line":200,"col":19},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"kind":{"RequiredFn":[{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"decl":{"inputs":[{"Param":{"index":0,"name":"Self"}}],"output":{"Return":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"UnwrapAbort"},"disambiguator":0}],"index":[0,142]},{"impl":{"LocalBound":{"clause_id":18436060400986552328,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"UnwrapAbort"},"disambiguator":0},{"data":{"TypeNs":"Unwrap"},"disambiguator":0}],"index":[0,143]}}]}},"c_variadic":false,"implicit_self":"Imm","lifetime_elision_allowed":false},"span":{"lo":{"line":200,"col":4},"hi":{"line":200,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[["self",{"lo":{"line":200,"col":20},"hi":{"line":200,"col":24},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}]]]},"span":{"lo":{"line":200,"col":4},"hi":{"line":200,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"defaultness":{"Default":{"has_value":false}},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Unwrap or call [trap](../fn.trap.html). In contrast to"]},"id":281,"style":"Outer","span":{"lo":{"line":194,"col":4},"hi":{"line":194,"col":62},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," the unwrap methods on [Option::unwrap](https://doc.rust-lang.org/std/option/enum.Option.html#method.unwrap)"]},"id":282,"style":"Outer","span":{"lo":{"line":195,"col":4},"hi":{"line":195,"col":115},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," this method will tend to produce smaller code, at the cost of the"]},"id":283,"style":"Outer","span":{"lo":{"line":196,"col":4},"hi":{"line":196,"col":73},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," ability to handle the panic."]},"id":284,"style":"Outer","span":{"lo":{"line":197,"col":4},"hi":{"line":197,"col":36},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," This is intended to be used only in `Wasm` code, where panics cannot be"]},"id":285,"style":"Outer","span":{"lo":{"line":198,"col":4},"hi":{"line":198,"col":79},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," handled anyhow."]},"id":286,"style":"Outer","span":{"lo":{"line":199,"col":4},"hi":{"line":199,"col":23},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"DocComment":["Line"," Add optimized unwrap behaviour that aborts the process instead of"]},"id":278,"style":"Outer","span":{"lo":{"line":189,"col":0},"hi":{"line":189,"col":69},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," panicking."]},"id":279,"style":"Outer","span":{"lo":{"line":190,"col":0},"hi":{"line":190,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}}]]},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Add optimized unwrap behaviour that aborts the process instead of"]},"id":278,"style":"Outer","span":{"lo":{"line":189,"col":0},"hi":{"line":189,"col":69},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," panicking."]},"id":279,"style":"Outer","span":{"lo":{"line":190,"col":0},"hi":{"line":190,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"ExpectReport"},"disambiguator":0}],"index":[0,145]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"ExpectReport"},"disambiguator":0}],"index":[0,145]},"span":{"lo":{"line":206,"col":0},"hi":{"line":211,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"vis_span":{"lo":{"line":206,"col":0},"hi":{"line":211,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"kind":{"Trait":["No","Normal",{"params":[],"predicates":[],"bounds":[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"ExpectReport"},"disambiguator":0}],"index":[0,145]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}}]},"is_const":false,"is_positive":true}},"id":4563165526448952423}}],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":206,"col":22},"hi":{"line":206,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":206,"col":22},"hi":{"line":206,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"ExpectReport"},"disambiguator":0}],"index":[0,145]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}}]},"is_const":false,"is_positive":true}},"id":4563165526448952423}}],[{"ident":["Unwrap",{"lo":{"line":207,"col":9},"hi":{"line":207,"col":15},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"ExpectReport"},"disambiguator":0},{"data":{"TypeNs":"Unwrap"},"disambiguator":0}],"index":[0,146]},"generics":{"params":[],"predicates":[],"bounds":[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"Sized"},"disambiguator":0}],"index":[1,2689]},"generic_args":[{"Type":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"ExpectReport"},"disambiguator":0}],"index":[0,145]},{"impl":{"LocalBound":{"clause_id":4563165526448952423,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"ExpectReport"},"disambiguator":0},{"data":{"TypeNs":"Unwrap"},"disambiguator":0}],"index":[0,146]}}]}}]},"is_const":false,"is_positive":true}},"id":6926846262952482198}}],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":207,"col":15},"hi":{"line":207,"col":15},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":207,"col":15},"hi":{"line":207,"col":15},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"kind":{"Type":[[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"Sized"},"disambiguator":0}],"index":[1,2689]},"generic_args":[{"Type":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"ExpectReport"},"disambiguator":0}],"index":[0,145]},{"impl":{"LocalBound":{"clause_id":4563165526448952423,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"ExpectReport"},"disambiguator":0},{"data":{"TypeNs":"Unwrap"},"disambiguator":0}],"index":[0,146]}}]}}]},"is_const":false,"is_positive":true}},"id":6926846262952482198}}],null]},"span":{"lo":{"line":207,"col":4},"hi":{"line":207,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"defaultness":{"Default":{"has_value":false}},"attributes":{"attributes":[],"parent_attributes":[{"kind":{"DocComment":["Line"," Analogue of the `expect` methods on types such as [Option](https://doc.rust-lang.org/std/option/enum.Option.html),"]},"id":287,"style":"Outer","span":{"lo":{"line":204,"col":0},"hi":{"line":204,"col":118},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," but useful in a Wasm setting."]},"id":288,"style":"Outer","span":{"lo":{"line":205,"col":0},"hi":{"line":205,"col":33},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}},{"ident":["expect_report",{"lo":{"line":210,"col":7},"hi":{"line":210,"col":20},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"ExpectReport"},"disambiguator":0},{"data":{"ValueNs":"expect_report"},"disambiguator":0}],"index":[0,147]},"generics":{"params":[{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"ExpectReport"},"disambiguator":0},{"data":{"ValueNs":"expect_report"},"disambiguator":0}],"index":[0,147]},"local_id":1},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"ExpectReport"},"disambiguator":0},{"data":{"ValueNs":"expect_report"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,268]},"name":"Fresh","span":{"lo":{"line":210,"col":32},"hi":{"line":210,"col":33},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]}],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":210,"col":53},"hi":{"line":210,"col":53},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":210,"col":20},"hi":{"line":210,"col":20},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"kind":{"RequiredFn":[{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"decl":{"inputs":[{"Param":{"index":0,"name":"Self"}},{"Ref":[{"kind":{"ReLateBound":[0,{"var":0,"kind":{"BrNamed":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"ExpectReport"},"disambiguator":0},{"data":{"ValueNs":"expect_report"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,268]},"'_"]}}]}},"Str",false]}],"output":{"Return":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"ExpectReport"},"disambiguator":0}],"index":[0,145]},{"impl":{"LocalBound":{"clause_id":4563165526448952423,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"ExpectReport"},"disambiguator":0},{"data":{"TypeNs":"Unwrap"},"disambiguator":0}],"index":[0,146]}}]}},"c_variadic":false,"implicit_self":"Imm","lifetime_elision_allowed":true},"span":{"lo":{"line":210,"col":4},"hi":{"line":210,"col":54},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[["self",{"lo":{"line":210,"col":21},"hi":{"line":210,"col":25},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],["msg",{"lo":{"line":210,"col":27},"hi":{"line":210,"col":30},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}]]]},"span":{"lo":{"line":210,"col":4},"hi":{"line":210,"col":54},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"defaultness":{"Default":{"has_value":false}},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Like the default `expect` on, e.g., `Result`, but calling"]},"id":289,"style":"Outer","span":{"lo":{"line":208,"col":4},"hi":{"line":208,"col":65},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," [fail](macro.fail.html) with the given message, instead of `panic`."]},"id":290,"style":"Outer","span":{"lo":{"line":209,"col":4},"hi":{"line":209,"col":75},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"DocComment":["Line"," Analogue of the `expect` methods on types such as [Option](https://doc.rust-lang.org/std/option/enum.Option.html),"]},"id":287,"style":"Outer","span":{"lo":{"line":204,"col":0},"hi":{"line":204,"col":118},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," but useful in a Wasm setting."]},"id":288,"style":"Outer","span":{"lo":{"line":205,"col":0},"hi":{"line":205,"col":33},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}}]]},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Analogue of the `expect` methods on types such as [Option](https://doc.rust-lang.org/std/option/enum.Option.html),"]},"id":287,"style":"Outer","span":{"lo":{"line":204,"col":0},"hi":{"line":204,"col":118},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," but useful in a Wasm setting."]},"id":288,"style":"Outer","span":{"lo":{"line":205,"col":0},"hi":{"line":205,"col":33},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"ExpectErrReport"},"disambiguator":0}],"index":[0,148]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"ExpectErrReport"},"disambiguator":0}],"index":[0,148]},"span":{"lo":{"line":216,"col":0},"hi":{"line":221,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"vis_span":{"lo":{"line":216,"col":0},"hi":{"line":221,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"kind":{"Trait":["No","Normal",{"params":[],"predicates":[],"bounds":[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"ExpectErrReport"},"disambiguator":0}],"index":[0,148]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}}]},"is_const":false,"is_positive":true}},"id":18023446435381850670}}],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":216,"col":25},"hi":{"line":216,"col":25},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":216,"col":25},"hi":{"line":216,"col":25},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"ExpectErrReport"},"disambiguator":0}],"index":[0,148]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}}]},"is_const":false,"is_positive":true}},"id":18023446435381850670}}],[{"ident":["Unwrap",{"lo":{"line":217,"col":9},"hi":{"line":217,"col":15},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"ExpectErrReport"},"disambiguator":0},{"data":{"TypeNs":"Unwrap"},"disambiguator":0}],"index":[0,149]},"generics":{"params":[],"predicates":[],"bounds":[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"Sized"},"disambiguator":0}],"index":[1,2689]},"generic_args":[{"Type":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"ExpectErrReport"},"disambiguator":0}],"index":[0,148]},{"impl":{"LocalBound":{"clause_id":18023446435381850670,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"ExpectErrReport"},"disambiguator":0},{"data":{"TypeNs":"Unwrap"},"disambiguator":0}],"index":[0,149]}}]}}]},"is_const":false,"is_positive":true}},"id":8136654248162117203}}],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":217,"col":15},"hi":{"line":217,"col":15},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":217,"col":15},"hi":{"line":217,"col":15},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"kind":{"Type":[[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"Sized"},"disambiguator":0}],"index":[1,2689]},"generic_args":[{"Type":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"ExpectErrReport"},"disambiguator":0}],"index":[0,148]},{"impl":{"LocalBound":{"clause_id":18023446435381850670,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"ExpectErrReport"},"disambiguator":0},{"data":{"TypeNs":"Unwrap"},"disambiguator":0}],"index":[0,149]}}]}}]},"is_const":false,"is_positive":true}},"id":8136654248162117203}}],null]},"span":{"lo":{"line":217,"col":4},"hi":{"line":217,"col":16},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"defaultness":{"Default":{"has_value":false}},"attributes":{"attributes":[],"parent_attributes":[{"kind":{"DocComment":["Line"," Analogue of the `expect_err` methods on [Result](https://doc.rust-lang.org/std/result/enum.Result.html),"]},"id":291,"style":"Outer","span":{"lo":{"line":214,"col":0},"hi":{"line":214,"col":108},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," but useful in a Wasm setting."]},"id":292,"style":"Outer","span":{"lo":{"line":215,"col":0},"hi":{"line":215,"col":33},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}},{"ident":["expect_err_report",{"lo":{"line":220,"col":7},"hi":{"line":220,"col":24},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"ExpectErrReport"},"disambiguator":0},{"data":{"ValueNs":"expect_err_report"},"disambiguator":0}],"index":[0,150]},"generics":{"params":[{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"ExpectErrReport"},"disambiguator":0},{"data":{"ValueNs":"expect_err_report"},"disambiguator":0}],"index":[0,150]},"local_id":1},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"ExpectErrReport"},"disambiguator":0},{"data":{"ValueNs":"expect_err_report"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,269]},"name":"Fresh","span":{"lo":{"line":220,"col":36},"hi":{"line":220,"col":37},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]}],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":220,"col":57},"hi":{"line":220,"col":57},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":220,"col":24},"hi":{"line":220,"col":24},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"kind":{"RequiredFn":[{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"decl":{"inputs":[{"Param":{"index":0,"name":"Self"}},{"Ref":[{"kind":{"ReLateBound":[0,{"var":0,"kind":{"BrNamed":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"ExpectErrReport"},"disambiguator":0},{"data":{"ValueNs":"expect_err_report"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,269]},"'_"]}}]}},"Str",false]}],"output":{"Return":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":0,"name":"Self"}}}],"trait_def_id":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"ExpectErrReport"},"disambiguator":0}],"index":[0,148]},{"impl":{"LocalBound":{"clause_id":18023446435381850670,"path":[]}},"args":[]}],"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"ExpectErrReport"},"disambiguator":0},{"data":{"TypeNs":"Unwrap"},"disambiguator":0}],"index":[0,149]}}]}},"c_variadic":false,"implicit_self":"Imm","lifetime_elision_allowed":true},"span":{"lo":{"line":220,"col":4},"hi":{"line":220,"col":58},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[["self",{"lo":{"line":220,"col":25},"hi":{"line":220,"col":29},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],["msg",{"lo":{"line":220,"col":31},"hi":{"line":220,"col":34},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}]]]},"span":{"lo":{"line":220,"col":4},"hi":{"line":220,"col":58},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"defaultness":{"Default":{"has_value":false}},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Like the default `expect_err` on, e.g., `Result`, but calling"]},"id":293,"style":"Outer","span":{"lo":{"line":218,"col":4},"hi":{"line":218,"col":69},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," [fail](macro.fail.html) with the given message, instead of `panic`."]},"id":294,"style":"Outer","span":{"lo":{"line":219,"col":4},"hi":{"line":219,"col":75},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"DocComment":["Line"," Analogue of the `expect_err` methods on [Result](https://doc.rust-lang.org/std/result/enum.Result.html),"]},"id":291,"style":"Outer","span":{"lo":{"line":214,"col":0},"hi":{"line":214,"col":108},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," but useful in a Wasm setting."]},"id":292,"style":"Outer","span":{"lo":{"line":215,"col":0},"hi":{"line":215,"col":33},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}}]]},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Analogue of the `expect_err` methods on [Result](https://doc.rust-lang.org/std/result/enum.Result.html),"]},"id":291,"style":"Outer","span":{"lo":{"line":214,"col":0},"hi":{"line":214,"col":108},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," but useful in a Wasm setting."]},"id":292,"style":"Outer","span":{"lo":{"line":215,"col":0},"hi":{"line":215,"col":33},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"ExpectNoneReport"},"disambiguator":0}],"index":[0,151]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"ExpectNoneReport"},"disambiguator":0}],"index":[0,151]},"span":{"lo":{"line":226,"col":0},"hi":{"line":230,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"vis_span":{"lo":{"line":226,"col":0},"hi":{"line":230,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"kind":{"Trait":["No","Normal",{"params":[],"predicates":[],"bounds":[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"ExpectNoneReport"},"disambiguator":0}],"index":[0,151]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}}]},"is_const":false,"is_positive":true}},"id":6816229183596714811}}],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":226,"col":26},"hi":{"line":226,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":226,"col":26},"hi":{"line":226,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"ExpectNoneReport"},"disambiguator":0}],"index":[0,151]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}}]},"is_const":false,"is_positive":true}},"id":6816229183596714811}}],[{"ident":["expect_none_report",{"lo":{"line":229,"col":7},"hi":{"line":229,"col":25},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"ExpectNoneReport"},"disambiguator":0},{"data":{"ValueNs":"expect_none_report"},"disambiguator":0}],"index":[0,152]},"generics":{"params":[{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"ExpectNoneReport"},"disambiguator":0},{"data":{"ValueNs":"expect_none_report"},"disambiguator":0}],"index":[0,152]},"local_id":1},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"ExpectNoneReport"},"disambiguator":0},{"data":{"ValueNs":"expect_none_report"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,270]},"name":"Fresh","span":{"lo":{"line":229,"col":37},"hi":{"line":229,"col":38},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]}],"predicates":[],"bounds":[],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":229,"col":42},"hi":{"line":229,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":229,"col":25},"hi":{"line":229,"col":25},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"kind":{"RequiredFn":[{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"decl":{"inputs":[{"Param":{"index":0,"name":"Self"}},{"Ref":[{"kind":{"ReLateBound":[0,{"var":0,"kind":{"BrNamed":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"ExpectNoneReport"},"disambiguator":0},{"data":{"ValueNs":"expect_none_report"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,270]},"'_"]}}]}},"Str",false]}],"output":{"DefaultReturn":{"lo":{"line":229,"col":42},"hi":{"line":229,"col":42},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"c_variadic":false,"implicit_self":"Imm","lifetime_elision_allowed":true},"span":{"lo":{"line":229,"col":4},"hi":{"line":229,"col":43},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[["self",{"lo":{"line":229,"col":26},"hi":{"line":229,"col":30},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],["msg",{"lo":{"line":229,"col":32},"hi":{"line":229,"col":35},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}]]]},"span":{"lo":{"line":229,"col":4},"hi":{"line":229,"col":43},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"defaultness":{"Default":{"has_value":false}},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Like the default `expect_none_report` on, e.g., `Option`, but calling"]},"id":297,"style":"Outer","span":{"lo":{"line":227,"col":4},"hi":{"line":227,"col":77},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," [fail](macro.fail.html) with the given message, instead of `panic`."]},"id":298,"style":"Outer","span":{"lo":{"line":228,"col":4},"hi":{"line":228,"col":75},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"DocComment":["Line"," Analogue of the `expect_none` methods on [Option](https://doc.rust-lang.org/std/option/enum.Option.html),"]},"id":295,"style":"Outer","span":{"lo":{"line":224,"col":0},"hi":{"line":224,"col":109},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," but useful in a Wasm setting."]},"id":296,"style":"Outer","span":{"lo":{"line":225,"col":0},"hi":{"line":225,"col":33},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}}]]},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Analogue of the `expect_none` methods on [Option](https://doc.rust-lang.org/std/option/enum.Option.html),"]},"id":295,"style":"Outer","span":{"lo":{"line":224,"col":0},"hi":{"line":224,"col":109},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," but useful in a Wasm setting."]},"id":296,"style":"Outer","span":{"lo":{"line":225,"col":0},"hi":{"line":225,"col":33},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"SerialCtx"},"disambiguator":0}],"index":[0,153]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"SerialCtx"},"disambiguator":0}],"index":[0,153]},"span":{"lo":{"line":239,"col":0},"hi":{"line":251,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"vis_span":{"lo":{"line":239,"col":0},"hi":{"line":251,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"kind":{"Trait":["No","Normal",{"params":[],"predicates":[],"bounds":[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"SerialCtx"},"disambiguator":0}],"index":[0,153]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}}]},"is_const":false,"is_positive":true}},"id":14884518810587756718}}],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":239,"col":19},"hi":{"line":239,"col":19},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":239,"col":19},"hi":{"line":239,"col":19},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"SerialCtx"},"disambiguator":0}],"index":[0,153]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}}]},"is_const":false,"is_positive":true}},"id":14884518810587756718}}],[{"ident":["serial_ctx",{"lo":{"line":246,"col":7},"hi":{"line":246,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"SerialCtx"},"disambiguator":0},{"data":{"ValueNs":"serial_ctx"},"disambiguator":0}],"index":[0,154]},"generics":{"params":[{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"SerialCtx"},"disambiguator":0},{"data":{"ValueNs":"serial_ctx"},"disambiguator":0}],"index":[0,154]},"local_id":6},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"SerialCtx"},"disambiguator":0},{"data":{"ValueNs":"serial_ctx"},"disambiguator":0},{"data":{"TypeNs":"W"},"disambiguator":0}],"index":[0,155]},"name":{"Plain":{"name":"W","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"SerialCtx"},"disambiguator":0},{"data":{"ValueNs":"serial_ctx"},"disambiguator":0}],"index":[0,154]},"local_id":6}}},"span":{"lo":{"line":246,"col":18},"hi":{"line":246,"col":19},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"pure_wrt_drop":false,"kind":{"Type":{"default":null,"synthetic":false}},"colon_span":{"lo":{"line":246,"col":19},"hi":{"line":246,"col":20},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"attributes":[]},{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"SerialCtx"},"disambiguator":0},{"data":{"ValueNs":"serial_ctx"},"disambiguator":0}],"index":[0,154]},"local_id":7},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"SerialCtx"},"disambiguator":0},{"data":{"ValueNs":"serial_ctx"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,271]},"name":"Fresh","span":{"lo":{"line":247,"col":8},"hi":{"line":247,"col":9},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]},{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"SerialCtx"},"disambiguator":0},{"data":{"ValueNs":"serial_ctx"},"disambiguator":0}],"index":[0,154]},"local_id":8},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"SerialCtx"},"disambiguator":0},{"data":{"ValueNs":"serial_ctx"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":1}],"index":[0,272]},"name":"Fresh","span":{"lo":{"line":249,"col":13},"hi":{"line":249,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]}],"predicates":[{"BoundPredicate":{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"SerialCtx"},"disambiguator":0},{"data":{"ValueNs":"serial_ctx"},"disambiguator":0}],"index":[0,154]},"local_id":5},"span":{"lo":{"line":246,"col":19},"hi":{"line":246,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"origin":"GenericParam","bound_generic_params":[],"bounded_ty":{"Param":{"index":1,"name":"W"}}}}],"bounds":[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"Sized"},"disambiguator":0}],"index":[1,2689]},"generic_args":[{"Type":{"Param":{"index":1,"name":"W"}}}]},"is_const":false,"is_positive":true}},"id":12551622595042095548}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"concordium_contracts_common","path":[{"data":{"TypeNs":"traits"},"disambiguator":0},{"data":{"TypeNs":"Write"},"disambiguator":0}],"index":[5,37]},"generic_args":[{"Type":{"Param":{"index":1,"name":"W"}}}]},"is_const":false,"is_positive":true}},"id":8183547936778835857}}],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":250,"col":32},"hi":{"line":250,"col":32},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":246,"col":17},"hi":{"line":246,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"kind":{"RequiredFn":[{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"decl":{"inputs":[{"Ref":[{"kind":{"ReLateBound":[0,{"var":0,"kind":{"BrNamed":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"SerialCtx"},"disambiguator":0},{"data":{"ValueNs":"serial_ctx"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,271]},"'_"]}}]}},{"Param":{"index":0,"name":"Self"}},false]},{"Adt":{"generic_args":[],"def_id":{"krate":"concordium_contracts_common","path":[{"data":{"TypeNs":"schema"},"disambiguator":0},{"data":{"TypeNs":"SizeLength"},"disambiguator":0}],"index":[5,761]}}},{"Ref":[{"kind":{"ReLateBound":[0,{"var":1,"kind":{"BrNamed":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"SerialCtx"},"disambiguator":0},{"data":{"ValueNs":"serial_ctx"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":1}],"index":[0,272]},"'_"]}}]}},{"Param":{"index":1,"name":"W"}},false]}],"output":{"Return":{"Tuple":[{"Adt":{"generic_args":[{"Type":{"Tuple":[]}},{"Type":{"Alias":["Projection",{"substs":[{"Type":{"Param":{"index":1,"name":"W"}}}],"trait_def_id":[{"krate":"concordium_contracts_common","path":[{"data":{"TypeNs":"traits"},"disambiguator":0},{"data":{"TypeNs":"Write"},"disambiguator":0}],"index":[5,37]},{"impl":{"LocalBound":{"clause_id":8183547936778835857,"path":[]}},"args":[]}],"def_id":{"krate":"concordium_contracts_common","path":[{"data":{"TypeNs":"traits"},"disambiguator":0},{"data":{"TypeNs":"Write"},"disambiguator":0},{"data":{"TypeNs":"Err"},"disambiguator":0}],"index":[5,38]}}]}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"result"},"disambiguator":0},{"data":{"TypeNs":"Result"},"disambiguator":0}],"index":[1,41506]}}},{"Param":{"index":1,"name":"W"}}]}},"c_variadic":false,"implicit_self":"ImmRef","lifetime_elision_allowed":true},"span":{"lo":{"line":246,"col":4},"hi":{"line":250,"col":33},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[["self",{"lo":{"line":247,"col":9},"hi":{"line":247,"col":13},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],["size_length",{"lo":{"line":248,"col":8},"hi":{"line":248,"col":19},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],["out",{"lo":{"line":249,"col":8},"hi":{"line":249,"col":11},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}]]]},"span":{"lo":{"line":246,"col":4},"hi":{"line":250,"col":33},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"defaultness":{"Default":{"has_value":false}},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Attempt to write the structure into the provided writer, failing if"]},"id":305,"style":"Outer","span":{"lo":{"line":240,"col":4},"hi":{"line":240,"col":75},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," if the length cannot be represented in the provided `size_length` or"]},"id":306,"style":"Outer","span":{"lo":{"line":241,"col":4},"hi":{"line":241,"col":76},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," only part of the structure could be written."]},"id":307,"style":"Outer","span":{"lo":{"line":242,"col":4},"hi":{"line":242,"col":52},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line",""]},"id":308,"style":"Outer","span":{"lo":{"line":243,"col":4},"hi":{"line":243,"col":7},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," NB: We use Result instead of Option for better composability with other"]},"id":309,"style":"Outer","span":{"lo":{"line":244,"col":4},"hi":{"line":244,"col":79},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," constructs."]},"id":310,"style":"Outer","span":{"lo":{"line":245,"col":4},"hi":{"line":245,"col":19},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"DocComment":["Line"," The `SerialCtx` trait provides a means of writing structures into byte-sinks"]},"id":299,"style":"Outer","span":{"lo":{"line":233,"col":0},"hi":{"line":233,"col":80},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," (`Write`) using contextual information."]},"id":300,"style":"Outer","span":{"lo":{"line":234,"col":0},"hi":{"line":234,"col":43},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," The contextual information is:"]},"id":301,"style":"Outer","span":{"lo":{"line":235,"col":0},"hi":{"line":235,"col":34},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line",""]},"id":302,"style":"Outer","span":{"lo":{"line":236,"col":0},"hi":{"line":236,"col":3},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," - `size_length`: The number of bytes used to record the length of the"]},"id":303,"style":"Outer","span":{"lo":{"line":237,"col":0},"hi":{"line":237,"col":75},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," data."]},"id":304,"style":"Outer","span":{"lo":{"line":238,"col":0},"hi":{"line":238,"col":13},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}}]]},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," The `SerialCtx` trait provides a means of writing structures into byte-sinks"]},"id":299,"style":"Outer","span":{"lo":{"line":233,"col":0},"hi":{"line":233,"col":80},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," (`Write`) using contextual information."]},"id":300,"style":"Outer","span":{"lo":{"line":234,"col":0},"hi":{"line":234,"col":43},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," The contextual information is:"]},"id":301,"style":"Outer","span":{"lo":{"line":235,"col":0},"hi":{"line":235,"col":34},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line",""]},"id":302,"style":"Outer","span":{"lo":{"line":236,"col":0},"hi":{"line":236,"col":3},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," - `size_length`: The number of bytes used to record the length of the"]},"id":303,"style":"Outer","span":{"lo":{"line":237,"col":0},"hi":{"line":237,"col":75},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," data."]},"id":304,"style":"Outer","span":{"lo":{"line":238,"col":0},"hi":{"line":238,"col":13},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"DeserialCtx"},"disambiguator":0}],"index":[0,156]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"DeserialCtx"},"disambiguator":0}],"index":[0,156]},"span":{"lo":{"line":262,"col":0},"hi":{"line":270,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"vis_span":{"lo":{"line":262,"col":0},"hi":{"line":270,"col":1},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"kind":{"Trait":["No","Normal",{"params":[],"predicates":[],"bounds":[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"Sized"},"disambiguator":0}],"index":[1,2689]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}}]},"is_const":false,"is_positive":true}},"id":17322672367251655876}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"DeserialCtx"},"disambiguator":0}],"index":[0,156]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}}]},"is_const":false,"is_positive":true}},"id":16635740711172919924}}],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":262,"col":28},"hi":{"line":262,"col":28},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":262,"col":21},"hi":{"line":262,"col":21},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"Sized"},"disambiguator":0}],"index":[1,2689]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}}]},"is_const":false,"is_positive":true}},"id":17322672367251655876}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"DeserialCtx"},"disambiguator":0}],"index":[0,156]},"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}}]},"is_const":false,"is_positive":true}},"id":16635740711172919924}}],[{"ident":["deserial_ctx",{"lo":{"line":265,"col":7},"hi":{"line":265,"col":19},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"DeserialCtx"},"disambiguator":0},{"data":{"ValueNs":"deserial_ctx"},"disambiguator":0}],"index":[0,157]},"generics":{"params":[{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"DeserialCtx"},"disambiguator":0},{"data":{"ValueNs":"deserial_ctx"},"disambiguator":0}],"index":[0,157]},"local_id":6},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"DeserialCtx"},"disambiguator":0},{"data":{"ValueNs":"deserial_ctx"},"disambiguator":0},{"data":{"TypeNs":"R"},"disambiguator":0}],"index":[0,158]},"name":{"Plain":{"name":"R","id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"DeserialCtx"},"disambiguator":0},{"data":{"ValueNs":"deserial_ctx"},"disambiguator":0}],"index":[0,157]},"local_id":6}}},"span":{"lo":{"line":265,"col":20},"hi":{"line":265,"col":21},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"pure_wrt_drop":false,"kind":{"Type":{"default":null,"synthetic":false}},"colon_span":{"lo":{"line":265,"col":21},"hi":{"line":265,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"attributes":[]},{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"DeserialCtx"},"disambiguator":0},{"data":{"ValueNs":"deserial_ctx"},"disambiguator":0}],"index":[0,157]},"local_id":7},"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"DeserialCtx"},"disambiguator":0},{"data":{"ValueNs":"deserial_ctx"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,273]},"name":"Fresh","span":{"lo":{"line":268,"col":16},"hi":{"line":268,"col":17},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"pure_wrt_drop":false,"kind":{"Lifetime":{"kind":"Elided"}},"colon_span":null,"attributes":[]}],"predicates":[{"BoundPredicate":{"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"DeserialCtx"},"disambiguator":0},{"data":{"ValueNs":"deserial_ctx"},"disambiguator":0}],"index":[0,157]},"local_id":5},"span":{"lo":{"line":265,"col":21},"hi":{"line":265,"col":27},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"origin":"GenericParam","bound_generic_params":[],"bounded_ty":{"Param":{"index":1,"name":"R"}}}}],"bounds":[{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"core","path":[{"data":{"TypeNs":"marker"},"disambiguator":0},{"data":{"TypeNs":"Sized"},"disambiguator":0}],"index":[1,2689]},"generic_args":[{"Type":{"Param":{"index":1,"name":"R"}}}]},"is_const":false,"is_positive":true}},"id":426491624962477427}},{"Clause":{"kind":{"Trait":{"trait_ref":{"def_id":{"krate":"concordium_contracts_common","path":[{"data":{"TypeNs":"traits"},"disambiguator":0},{"data":{"TypeNs":"Read"},"disambiguator":0}],"index":[5,26]},"generic_args":[{"Type":{"Param":{"index":1,"name":"R"}}}]},"is_const":false,"is_positive":true}},"id":7941244948656693720}}],"has_where_clause_predicates":false,"where_clause_span":{"lo":{"line":269,"col":31},"hi":{"line":269,"col":31},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"span":{"lo":{"line":265,"col":19},"hi":{"line":265,"col":28},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},"kind":{"RequiredFn":[{"header":{"unsafety":"Normal","constness":"NotConst","asyncness":"NotAsync","abi":{"Abi":{"todo":"Rust"}}},"decl":{"inputs":[{"Adt":{"generic_args":[],"def_id":{"krate":"concordium_contracts_common","path":[{"data":{"TypeNs":"schema"},"disambiguator":0},{"data":{"TypeNs":"SizeLength"},"disambiguator":0}],"index":[5,761]}}},"Bool",{"Ref":[{"kind":{"ReLateBound":[0,{"var":0,"kind":{"BrNamed":[{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0},{"data":{"TypeNs":"DeserialCtx"},"disambiguator":0},{"data":{"ValueNs":"deserial_ctx"},"disambiguator":0},{"data":{"LifetimeNs":"'_"},"disambiguator":0}],"index":[0,273]},"'_"]}}]}},{"Param":{"index":1,"name":"R"}},false]}],"output":{"Return":{"Tuple":[{"Adt":{"generic_args":[{"Type":{"Param":{"index":0,"name":"Self"}}},{"Type":{"Adt":{"generic_args":[],"def_id":{"krate":"concordium_contracts_common","path":[{"data":{"TypeNs":"types"},"disambiguator":0},{"data":{"TypeNs":"ParseError"},"disambiguator":0}],"index":[5,1172]}}}}],"def_id":{"krate":"core","path":[{"data":{"TypeNs":"result"},"disambiguator":0},{"data":{"TypeNs":"Result"},"disambiguator":0}],"index":[1,41506]}}},{"Param":{"index":1,"name":"R"}}]}},"c_variadic":false,"implicit_self":"None","lifetime_elision_allowed":true},"span":{"lo":{"line":265,"col":4},"hi":{"line":269,"col":32},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},[["size_length",{"lo":{"line":266,"col":8},"hi":{"line":266,"col":19},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],["ensure_ordered",{"lo":{"line":267,"col":8},"hi":{"line":267,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}],["source",{"lo":{"line":268,"col":8},"hi":{"line":268,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}]]]},"span":{"lo":{"line":265,"col":4},"hi":{"line":269,"col":32},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}},"defaultness":{"Default":{"has_value":false}},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," Attempt to read a structure from a given source and context, failing if"]},"id":319,"style":"Outer","span":{"lo":{"line":263,"col":4},"hi":{"line":263,"col":79},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," an error occurs during deserialization or reading."]},"id":320,"style":"Outer","span":{"lo":{"line":264,"col":4},"hi":{"line":264,"col":58},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"DocComment":["Line"," The `DeserialCtx` trait provides a means of reading structures from"]},"id":311,"style":"Outer","span":{"lo":{"line":254,"col":0},"hi":{"line":254,"col":71},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," byte-sources (`Read`) using contextual information."]},"id":312,"style":"Outer","span":{"lo":{"line":255,"col":0},"hi":{"line":255,"col":55},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," The contextual information is:"]},"id":313,"style":"Outer","span":{"lo":{"line":256,"col":0},"hi":{"line":256,"col":34},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line",""]},"id":314,"style":"Outer","span":{"lo":{"line":257,"col":0},"hi":{"line":257,"col":3},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," - `size_length`: The expected number of bytes used for the length of the"]},"id":315,"style":"Outer","span":{"lo":{"line":258,"col":0},"hi":{"line":258,"col":78},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," data."]},"id":316,"style":"Outer","span":{"lo":{"line":259,"col":0},"hi":{"line":259,"col":13},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," - `ensure_ordered`: Whether the ordering should be ensured, for example"]},"id":317,"style":"Outer","span":{"lo":{"line":260,"col":0},"hi":{"line":260,"col":77},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," that keys in `BTreeMap` and `BTreeSet` are in strictly increasing order."]},"id":318,"style":"Outer","span":{"lo":{"line":261,"col":0},"hi":{"line":261,"col":80},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]}}]]},"attributes":{"attributes":[{"kind":{"DocComment":["Line"," The `DeserialCtx` trait provides a means of reading structures from"]},"id":311,"style":"Outer","span":{"lo":{"line":254,"col":0},"hi":{"line":254,"col":71},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," byte-sources (`Read`) using contextual information."]},"id":312,"style":"Outer","span":{"lo":{"line":255,"col":0},"hi":{"line":255,"col":55},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," The contextual information is:"]},"id":313,"style":"Outer","span":{"lo":{"line":256,"col":0},"hi":{"line":256,"col":34},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line",""]},"id":314,"style":"Outer","span":{"lo":{"line":257,"col":0},"hi":{"line":257,"col":3},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," - `size_length`: The expected number of bytes used for the length of the"]},"id":315,"style":"Outer","span":{"lo":{"line":258,"col":0},"hi":{"line":258,"col":78},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," data."]},"id":316,"style":"Outer","span":{"lo":{"line":259,"col":0},"hi":{"line":259,"col":13},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," - `ensure_ordered`: Whether the ordering should be ensured, for example"]},"id":317,"style":"Outer","span":{"lo":{"line":260,"col":0},"hi":{"line":260,"col":77},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}},{"kind":{"DocComment":["Line"," that keys in `BTreeMap` and `BTreeSet` are in strictly increasing order."]},"id":318,"style":"Outer","span":{"lo":{"line":261,"col":0},"hi":{"line":261,"col":80},"filename":{"Real":{"LocalPath":"concordium/src/concordium_traits.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":"Use","disambiguator":16}],"index":[0,159]},"span":{"lo":{"line":60,"col":0},"hi":{"line":60,"col":24},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"vis_span":{"lo":{"line":60,"col":0},"hi":{"line":60,"col":24},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"kind":{"Use":[{"span":{"lo":{"line":60,"col":4},"hi":{"line":60,"col":20},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"res":[{"Def":[{"DefKind":{"todo":"Mod"}},{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0}],"index":[0,25]}]}],"segments":[{"ident":["concordium_prims",{"lo":{"line":60,"col":4},"hi":{"line":60,"col":20},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}],"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":"Use","disambiguator":16}],"index":[0,159]},"local_id":1},"res":{"Def":[{"DefKind":{"todo":"Mod"}},{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_prims"},"disambiguator":0}],"index":[0,25]}]},"args":null,"infer_args":false}],"rename":null},"Glob"]},"attributes":{"attributes":[],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":"Use","disambiguator":17}],"index":[0,160]},"span":{"lo":{"line":61,"col":0},"hi":{"line":61,"col":28},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"vis_span":{"lo":{"line":61,"col":0},"hi":{"line":61,"col":28},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"kind":{"Use":[{"span":{"lo":{"line":61,"col":8},"hi":{"line":61,"col":24},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"res":[{"Def":[{"DefKind":{"todo":"Mod"}},{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0}],"index":[0,64]}]}],"segments":[{"ident":["concordium_types",{"lo":{"line":61,"col":8},"hi":{"line":61,"col":24},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}],"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":"Use","disambiguator":17}],"index":[0,160]},"local_id":1},"res":{"Def":[{"DefKind":{"todo":"Mod"}},{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_types"},"disambiguator":0}],"index":[0,64]}]},"args":null,"infer_args":false}],"rename":null},"Glob"]},"attributes":{"attributes":[],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":"Use","disambiguator":18}],"index":[0,161]},"span":{"lo":{"line":62,"col":0},"hi":{"line":62,"col":29},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"vis_span":{"lo":{"line":62,"col":0},"hi":{"line":62,"col":29},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"kind":{"Use":[{"span":{"lo":{"line":62,"col":8},"hi":{"line":62,"col":25},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"res":[{"Def":[{"DefKind":{"todo":"Mod"}},{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0}],"index":[0,89]}]}],"segments":[{"ident":["concordium_traits",{"lo":{"line":62,"col":8},"hi":{"line":62,"col":25},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}],"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":"Use","disambiguator":18}],"index":[0,161]},"local_id":1},"res":{"Def":[{"DefKind":{"todo":"Mod"}},{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_traits"},"disambiguator":0}],"index":[0,89]}]},"args":null,"infer_args":false}],"rename":null},"Glob"]},"attributes":{"attributes":[],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_contracts_common"},"disambiguator":0}],"index":[0,162]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"concordium_contracts_common"},"disambiguator":0}],"index":[0,162]},"span":{"lo":{"line":65,"col":0},"hi":{"line":65,"col":41},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"vis_span":{"lo":{"line":65,"col":0},"hi":{"line":65,"col":41},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"kind":{"ExternCrate":null},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"cfg","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:64:6: 64:7 (#0), close: concordium/src/concordium.rs:64:31: 64:32 (#0) }"}},"delim":"Parenthesis","tokens":"not(feature = \"hacspec\")"}},"tokens":null},"tokens":null}},"id":27,"style":"Outer","span":{"lo":{"line":64,"col":0},"hi":{"line":64,"col":32},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":"Use","disambiguator":19}],"index":[0,163]},"span":{"lo":{"line":69,"col":0},"hi":{"line":69,"col":39},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"vis_span":{"lo":{"line":69,"col":0},"hi":{"line":69,"col":39},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"kind":{"Use":[{"span":{"lo":{"line":69,"col":8},"hi":{"line":69,"col":35},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"res":[{"Def":[{"DefKind":{"todo":"Mod"}},{"krate":"concordium_contracts_common","path":[],"index":[5,0]}]}],"segments":[{"ident":["concordium_contracts_common",{"lo":{"line":69,"col":8},"hi":{"line":69,"col":35},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}],"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":"Use","disambiguator":19}],"index":[0,163]},"local_id":1},"res":{"Def":[{"DefKind":{"todo":"Mod"}},{"krate":"concordium_contracts_common","path":[],"index":[5,0]}]},"args":null,"infer_args":false}],"rename":null},"Glob"]},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"cfg","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:66:6: 66:7 (#0), close: concordium/src/concordium.rs:66:31: 66:32 (#0) }"}},"delim":"Parenthesis","tokens":"not(feature = \"hacspec\")"}},"tokens":null},"tokens":null}},"id":28,"style":"Outer","span":{"lo":{"line":66,"col":0},"hi":{"line":66,"col":32},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"DocComment":["Line"," Chain constants that impose limits on various aspects of smart contract"]},"id":29,"style":"Outer","span":{"lo":{"line":67,"col":0},"hi":{"line":67,"col":75},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"DocComment":["Line"," execution."]},"id":30,"style":"Outer","span":{"lo":{"line":68,"col":0},"hi":{"line":68,"col":14},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"hacspec_concordium_derive"},"disambiguator":0}],"index":[0,164]},"owner_id":{"krate":"hacspec_concordium","path":[{"data":{"TypeNs":"hacspec_concordium_derive"},"disambiguator":0}],"index":[0,164]},"span":{"lo":{"line":73,"col":0},"hi":{"line":73,"col":39},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"vis_span":{"lo":{"line":73,"col":0},"hi":{"line":73,"col":39},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"kind":{"ExternCrate":null},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"cfg","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:72:6: 72:7 (#0), close: concordium/src/concordium.rs:72:31: 72:32 (#0) }"}},"delim":"Parenthesis","tokens":"not(feature = \"hacspec\")"}},"tokens":null},"tokens":null}},"id":31,"style":"Outer","span":{"lo":{"line":72,"col":0},"hi":{"line":72,"col":32},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]},{"def_id":null,"owner_id":{"krate":"hacspec_concordium","path":[{"data":"Use","disambiguator":20}],"index":[0,165]},"span":{"lo":{"line":75,"col":0},"hi":{"line":75,"col":37},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"vis_span":{"lo":{"line":75,"col":0},"hi":{"line":75,"col":37},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"kind":{"Use":[{"span":{"lo":{"line":75,"col":8},"hi":{"line":75,"col":33},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}},"res":[{"Def":[{"DefKind":{"todo":"Mod"}},{"krate":"hacspec_concordium_derive","path":[],"index":[8,0]}]}],"segments":[{"ident":["hacspec_concordium_derive",{"lo":{"line":75,"col":8},"hi":{"line":75,"col":33},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}],"hir_id":{"owner":{"krate":"hacspec_concordium","path":[{"data":"Use","disambiguator":20}],"index":[0,165]},"local_id":1},"res":{"Def":[{"DefKind":{"todo":"Mod"}},{"krate":"hacspec_concordium_derive","path":[],"index":[8,0]}]},"args":null,"infer_args":false}],"rename":null},"Glob"]},"attributes":{"attributes":[{"kind":{"Normal":{"item":{"path":"cfg","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:74:6: 74:7 (#0), close: concordium/src/concordium.rs:74:31: 74:32 (#0) }"}},"delim":"Parenthesis","tokens":"not(feature = \"hacspec\")"}},"tokens":null},"tokens":null}},"id":32,"style":"Outer","span":{"lo":{"line":74,"col":0},"hi":{"line":74,"col":32},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}}],"parent_attributes":[{"kind":{"Normal":{"item":{"path":"no_std","args":"Empty","tokens":null},"tokens":null}},"id":39,"style":"Inner","span":{"lo":{"line":3,"col":4},"hi":{"line":3,"col":10},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:4:12: 4:13 (#0), close: concordium/src/concordium.rs:4:49: 4:50 (#0) }"}},"delim":"Parenthesis","tokens":"alloc_error_handler, core_intrinsics"}},"tokens":null},"tokens":null}},"id":40,"style":"Inner","span":{"lo":{"line":4,"col":4},"hi":{"line":4,"col":49},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"feature","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:6:11: 6:12 (#0), close: concordium/src/concordium.rs:6:25: 6:26 (#0) }"}},"delim":"Parenthesis","tokens":"register_tool"}},"tokens":null},"tokens":null}},"id":1,"style":"Inner","span":{"lo":{"line":6,"col":0},"hi":{"line":6,"col":26},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: concordium/src/concordium.rs:7:17: 7:18 (#0), close: concordium/src/concordium.rs:7:21: 7:22 (#0) }"}},"delim":"Parenthesis","tokens":"hax"}},"tokens":null},"tokens":null}},"id":2,"style":"Inner","span":{"lo":{"line":7,"col":0},"hi":{"line":7,"col":22},"filename":{"Real":{"LocalPath":"concordium/src/concordium.rs"}}}},{"kind":{"Normal":{"item":{"path":"register_tool","args":{"Delimited":{"dspan":{"DelimSpan":{"todo":"DelimSpan { open: :1:14: 1:15 (#0), close: :1:19: 1:20 (#0) }"}},"delim":"Parenthesis","tokens":"_hax"}},"tokens":null},"tokens":null}},"id":33,"style":"Inner","span":{"lo":{"line":1,"col":0},"hi":{"line":1,"col":19},"filename":{"CliCrateAttr":4528390502165333492}}}]},"expn_backtrace":[]}] \ No newline at end of file diff --git a/concordium/proofs/ssprove/extraction/.Hacspec_concordium.aux b/concordium/proofs/ssprove/extraction/.Hacspec_concordium.aux new file mode 100644 index 0000000..b86194a --- /dev/null +++ b/concordium/proofs/ssprove/extraction/.Hacspec_concordium.aux @@ -0,0 +1,2 @@ +COQAUX1 1fd1617ec37cda10bbc5e53eee59a9a9 /home/au538501/Documents/LocalHacspec/specs/concordium/proofs/ssprove/extraction/Hacspec_concordium.v +0 0 vo_compile_time "4.101" diff --git a/concordium/proofs/ssprove/extraction/.Hacspec_concordium_Concordium_traits.aux b/concordium/proofs/ssprove/extraction/.Hacspec_concordium_Concordium_traits.aux new file mode 100644 index 0000000..2f9b48d --- /dev/null +++ b/concordium/proofs/ssprove/extraction/.Hacspec_concordium_Concordium_traits.aux @@ -0,0 +1 @@ +COQAUX1 a86cb56e39100c5212166bcaa90fb20d /home/au538501/Documents/LocalHacspec/specs/concordium/proofs/ssprove/extraction/Hacspec_concordium_Concordium_traits.v diff --git a/concordium/proofs/ssprove/extraction/.Makefile.d b/concordium/proofs/ssprove/extraction/.Makefile.d new file mode 100644 index 0000000..a1b20b8 --- /dev/null +++ b/concordium/proofs/ssprove/extraction/.Makefile.d @@ -0,0 +1,15 @@ +Hacspec_concordium.vo Hacspec_concordium.glob Hacspec_concordium.v.beautified Hacspec_concordium.required_vo: Hacspec_concordium.v +Hacspec_concordium.vio: Hacspec_concordium.v +Hacspec_concordium.vos Hacspec_concordium.vok Hacspec_concordium.required_vos: Hacspec_concordium.v +Hacspec_concordium_Concordium_traits.vo Hacspec_concordium_Concordium_traits.glob Hacspec_concordium_Concordium_traits.v.beautified Hacspec_concordium_Concordium_traits.required_vo: Hacspec_concordium_Concordium_traits.v +Hacspec_concordium_Concordium_traits.vio: Hacspec_concordium_Concordium_traits.v +Hacspec_concordium_Concordium_traits.vos Hacspec_concordium_Concordium_traits.vok Hacspec_concordium_Concordium_traits.required_vos: Hacspec_concordium_Concordium_traits.v +Hacspec_concordium_Concordium_types.vo Hacspec_concordium_Concordium_types.glob Hacspec_concordium_Concordium_types.v.beautified Hacspec_concordium_Concordium_types.required_vo: Hacspec_concordium_Concordium_types.v +Hacspec_concordium_Concordium_types.vio: Hacspec_concordium_Concordium_types.v +Hacspec_concordium_Concordium_types.vos Hacspec_concordium_Concordium_types.vok Hacspec_concordium_Concordium_types.required_vos: Hacspec_concordium_Concordium_types.v +Hacspec_concordium_Concordium_types_Sealed.vo Hacspec_concordium_Concordium_types_Sealed.glob Hacspec_concordium_Concordium_types_Sealed.v.beautified Hacspec_concordium_Concordium_types_Sealed.required_vo: Hacspec_concordium_Concordium_types_Sealed.v +Hacspec_concordium_Concordium_types_Sealed.vio: Hacspec_concordium_Concordium_types_Sealed.v +Hacspec_concordium_Concordium_types_Sealed.vos Hacspec_concordium_Concordium_types_Sealed.vok Hacspec_concordium_Concordium_types_Sealed.required_vos: Hacspec_concordium_Concordium_types_Sealed.v +Hacspec_concordium_Constants.vo Hacspec_concordium_Constants.glob Hacspec_concordium_Constants.v.beautified Hacspec_concordium_Constants.required_vo: Hacspec_concordium_Constants.v +Hacspec_concordium_Constants.vio: Hacspec_concordium_Constants.v +Hacspec_concordium_Constants.vos Hacspec_concordium_Constants.vok Hacspec_concordium_Constants.required_vos: Hacspec_concordium_Constants.v diff --git a/concordium/proofs/ssprove/extraction/Hacspec_concordium.glob b/concordium/proofs/ssprove/extraction/Hacspec_concordium.glob new file mode 100644 index 0000000..f8f21c2 --- /dev/null +++ b/concordium/proofs/ssprove/extraction/Hacspec_concordium.glob @@ -0,0 +1,45 @@ +DIGEST 1fd1617ec37cda10bbc5e53eee59a9a9 +FExamples.Hacspec_concordium +R126:136 Crypt.choice_type <> <> lib +R138:144 Crypt.Package <> <> lib +R146:152 Crypt.Prelude <> <> lib +R162:176 Crypt.package.pkg_notation PackageNotation <> mod +R211:213 extructures.ord <> <> lib +R215:218 extructures.fset <> <> lib +R250:258 mathcomp.word.word_ssrZ <> <> lib +R260:263 mathcomp.word.word <> <> lib +R293:296 Jasmin.word <> <> lib +R324:329 Coq.ZArith.ZArith <> <> lib +R356:369 Coq.Strings.String <> <> lib +R379:396 Coq.Lists.List ListNotations <> mod +R494:507 Hacspec.ChoiceEquality <> <> lib +R538:552 Hacspec.LocationUtility <> <> lib +R583:604 Hacspec.Hacspec_Lib_Comparable <> <> lib +R635:649 Hacspec.Hacspec_Lib_Pre <> <> lib +R680:690 Hacspec.Hacspec_Lib <> <> lib +R727:747 mathcomp.ssreflect.choice Choice.Exports <> mod +def 941:947 <> t_Never +R951:961 Crypt.choice_type <> choice_type ind +R966:970 Crypt.package.pkg_notation PackageNotation ::package_scope:'''unit' not +def 984:988 <> abort +R992:995 Hacspec.ChoiceEquality <> both rec +R1017:1023 Examples.Hacspec_concordium <> t_Never def +R1008:1011 extructures.fset <> fset def +R1013:1014 Coq.Lists.List ListNotations ::list_scope:'['_']' not +R998:1001 extructures.fset <> fset def +R1003:1004 Coq.Lists.List ListNotations ::list_scope:'['_']' not +R1028:1038 Hacspec.Hacspec_Lib <> :::'ret_both'_'tt' not +def 1051:1054 <> trap +R1061:1066 extructures.fset FSet.Exports ::type_scope:'{'_'fset'_x_'}' not +R1075:1075 extructures.fset FSet.Exports ::type_scope:'{'_'fset'_x_'}' not +R1067:1074 Crypt.package.pkg_core_definition <> Location def +binder 1057:1057 <> L:1 +R1083:1091 Crypt.package.pkg_core_definition <> Interface def +binder 1079:1079 <> I:2 +R1096:1099 Hacspec.ChoiceEquality <> both rec +R1106:1112 Examples.Hacspec_concordium <> t_Never def +R1120:1123 Examples.Hacspec_concordium <> trap:4 def +R1152:1155 Hacspec.ChoiceEquality <> both rec +R1162:1168 Examples.Hacspec_concordium <> t_Never def +R1133:1143 Hacspec.ChoiceEquality <> :::'solve_lift'_x not +R1144:1148 Examples.Hacspec_concordium <> abort def diff --git a/concordium/proofs/ssprove/extraction/Hacspec_concordium.v b/concordium/proofs/ssprove/extraction/Hacspec_concordium.v new file mode 100644 index 0000000..e56a0b3 --- /dev/null +++ b/concordium/proofs/ssprove/extraction/Hacspec_concordium.v @@ -0,0 +1,151 @@ +(* File automatically generated by Hacspec *) +Set Warnings "-notation-overridden,-ambiguous-paths". +From Crypt Require Import choice_type Package Prelude. +Import PackageNotation. +From extructures Require Import ord fset. +From mathcomp Require Import word_ssrZ word. +From Jasmin Require Import word. + +From Coq Require Import ZArith. +From Coq Require Import Strings.String. +Import List.ListNotations. +Open Scope list_scope. +Open Scope Z_scope. +Open Scope bool_scope. + +From Hacspec Require Import ChoiceEquality. +From Hacspec Require Import LocationUtility. +From Hacspec Require Import Hacspec_Lib_Comparable. +From Hacspec Require Import Hacspec_Lib_Pre. +From Hacspec Require Import Hacspec_Lib. + +Open Scope hacspec_scope. +Import choice.Choice.Exports. + +Obligation Tactic := (* try timeout 8 *) solve_ssprove_obligations. + +Require Import Alloc. +Export Alloc. + +Require Import ToOwned. +Export ToOwned. + +Require Import string. +Export string. + +Require Import String. +Export String. + +Require Import ToString. +Export ToString. + +Require Import vec. +Export vec. + +Require Import Vec. +Export Vec. + +Require Import Core. +Export Core. + +Require Import convert. +Export convert. + +Require Import hash. +Export hash. + +Require Import marker. +Export marker. + +Require Import mem. +Export mem. + +Require Import num. +Export num. + +Require Import Core_Result. +Export Core_Result. + +Require Import collections. +Export collections. + +Require Import Concordium_prims. +Export Concordium_prims. + +Require Import Concordium_impls. +Export Concordium_impls. + +Require Import Concordium_types. +Export Concordium_types. + +Require Import Concordium_traits. +Export Concordium_traits. + +Require Import Concordium_contracts_common. +Export Concordium_contracts_common. + +Require Import Hacspec_concordium_derive. +Export Hacspec_concordium_derive. + +(*Not implemented yet? todo(item)*) + +(*Not implemented yet? todo(item)*) + +(*Not implemented yet? todo(item)*) + +(*Not implemented yet? todo(item)*) + +(*Not implemented yet? todo(item)*) + +(*Not implemented yet? todo(item)*) + +(*Not implemented yet? todo(item)*) + +(*Not implemented yet? todo(item)*) + +(*Not implemented yet? todo(item)*) + +(*Not implemented yet? todo(item)*) + +(*Not implemented yet? todo(item)*) + +(*Not implemented yet? todo(item)*) + +(*Not implemented yet? todo(item)*) + +(*Not implemented yet? todo(item)*) + +(*Not implemented yet? todo(item)*) + +(*Not implemented yet? todo(item)*) + +(*Not implemented yet? todo(item)*) + +(*Not implemented yet? todo(item)*) + +(*Not implemented yet? todo(item)*) + +(*Not implemented yet? todo(item)*) + +(*Not implemented yet? todo(item)*) + +(*Not implemented yet? todo(item)*) + +(*Not implemented yet? todo(item)*) + +(*Not implemented yet? todo(item)*) + +(*Not implemented yet? todo(item)*) + +(*Not implemented yet? todo(item)*) + +(*Not implemented yet? todo(item)*) + +(*Not implemented yet? todo(item)*) + +(*Not implemented yet? todo(item)*) + +Equations trap {L1 : {fset Location}} {I1 : Interface} (_ : both L1 I1 ('unit)) : both L1 I1 (t_Never) := + trap _ := + solve_lift (abort (ret_both (tt : 'unit))) : both L1 I1 (t_Never). +Fail Next Obligation. diff --git a/concordium/proofs/ssprove/extraction/Hacspec_concordium.vo b/concordium/proofs/ssprove/extraction/Hacspec_concordium.vo new file mode 100644 index 0000000..6f254c0 Binary files /dev/null and b/concordium/proofs/ssprove/extraction/Hacspec_concordium.vo differ diff --git a/concordium/proofs/ssprove/extraction/Hacspec_concordium.vok b/concordium/proofs/ssprove/extraction/Hacspec_concordium.vok new file mode 100644 index 0000000..e69de29 diff --git a/concordium/proofs/ssprove/extraction/Hacspec_concordium.vos b/concordium/proofs/ssprove/extraction/Hacspec_concordium.vos new file mode 100644 index 0000000..e69de29 diff --git a/concordium/proofs/ssprove/extraction/Hacspec_concordium_Concordium_traits.v b/concordium/proofs/ssprove/extraction/Hacspec_concordium_Concordium_traits.v new file mode 100644 index 0000000..9d43613 --- /dev/null +++ b/concordium/proofs/ssprove/extraction/Hacspec_concordium_Concordium_traits.v @@ -0,0 +1,40 @@ +(* File automatically generated by Hacspec *) +Set Warnings "-notation-overridden,-ambiguous-paths". +From Crypt Require Import choice_type Package Prelude. +Import PackageNotation. +From extructures Require Import ord fset. +From mathcomp Require Import word_ssrZ word. +From Jasmin Require Import word. + +From Coq Require Import ZArith. +From Coq Require Import Strings.String. +Import List.ListNotations. +Open Scope list_scope. +Open Scope Z_scope. +Open Scope bool_scope. + +From Hacspec Require Import ChoiceEquality. +From Hacspec Require Import LocationUtility. +From Hacspec Require Import Hacspec_Lib_Comparable. +From Hacspec Require Import Hacspec_Lib_Pre. +From Hacspec Require Import Hacspec_Lib. + +Open Scope hacspec_scope. +Import choice.Choice.Exports. + +Obligation Tactic := (* try timeout 8 *) solve_ssprove_obligations. + +Require Import Hacspec_concordium. +Export Hacspec_concordium. + +Class t_HasChainMetadata (Self : choice_type) := { + f_slot_time_loc : {fset Location} ; + f_slot_time : forall {L1 I1}, both L1 I1 (Self) -> both (L1 :|: f_slot_time_loc) I1 (t_Timestamp) ; +}. +Hint Unfold f_slot_time_loc. + +Class t_HasParameter (Self : choice_type) := { + f_size_loc : {fset Location} ; + f_size : forall {L1 I1}, both L1 I1 (Self) -> both (L1 :|: f_size_loc) I1 (int32) ; +}. +Hint Unfold f_size_loc. diff --git a/concordium/proofs/ssprove/extraction/Hacspec_concordium_Concordium_types.v b/concordium/proofs/ssprove/extraction/Hacspec_concordium_Concordium_types.v new file mode 100644 index 0000000..ca4ab12 --- /dev/null +++ b/concordium/proofs/ssprove/extraction/Hacspec_concordium_Concordium_types.v @@ -0,0 +1,200 @@ +(* File automatically generated by Hacspec *) +Set Warnings "-notation-overridden,-ambiguous-paths". +From Crypt Require Import choice_type Package Prelude. +Import PackageNotation. +From extructures Require Import ord fset. +From mathcomp Require Import word_ssrZ word. +From Jasmin Require Import word. + +From Coq Require Import ZArith. +From Coq Require Import Strings.String. +Import List.ListNotations. +Open Scope list_scope. +Open Scope Z_scope. +Open Scope bool_scope. + +From Hacspec Require Import ChoiceEquality. +From Hacspec Require Import LocationUtility. +From Hacspec Require Import Hacspec_Lib_Comparable. +From Hacspec Require Import Hacspec_Lib_Pre. +From Hacspec Require Import Hacspec_Lib. + +Open Scope hacspec_scope. +Import choice.Choice.Exports. + +Obligation Tactic := (* try timeout 8 *) solve_ssprove_obligations. + +Definition t_LogError : choice_type := + ('unit ∐ 'unit). +Notation "'LogError_Full_case'" := (inl tt) (at level 100). +Equations LogError_Full {L : {fset Location}} {I : Interface} : both L I (t_LogError) := + LogError_Full := + solve_lift (ret_both (inl (tt : 'unit) : t_LogError)) : both L I (t_LogError). +Fail Next Obligation. +Notation "'LogError_Malformed_case'" := (inr tt) (at level 100). +Equations LogError_Malformed {L : {fset Location}} {I : Interface} : both L I (t_LogError) := + LogError_Malformed := + solve_lift (ret_both (inr (tt : 'unit) : t_LogError)) : both L I (t_LogError). +Fail Next Obligation. + +(*Not implemented yet? todo(item)*) + +(*Not implemented yet? todo(item)*) + +(*Not implemented yet? todo(item)*) + +(*Not implemented yet? todo(item)*) + +(*Not implemented yet? todo(item)*) + +(*Not implemented yet? todo(item)*) + +(*Not implemented yet? todo(item)*) + +(*Not implemented yet? todo(item)*) + +(*Not implemented yet? todo(item)*) + +Definition t_Action : choice_type := + (int32). +Equations f__private_action {L : {fset Location}} {I : Interface} (s : both L I (t_Action)) : both L I (int32) := + f__private_action s := + bind_both s (fun x => + solve_lift (ret_both (x : int32))) : both L I (int32). +Fail Next Obligation. +Equations Build_t_Action {L0 : {fset Location}} {I0 : Interface} {f__private_action : both L0 I0 (int32)} : both L0 I0 (t_Action) := + Build_t_Action := + bind_both f__private_action (fun f__private_action => + solve_lift (ret_both ((f__private_action) : (t_Action)))) : both L0 I0 (t_Action). +Fail Next Obligation. +Notation "'Build_t_Action' '[' x ']' '(' 'f__private_action' ':=' y ')'" := (Build_t_Action (f__private_action := y)). + +Equations impl__Action__tag {L1 : {fset Location}} {I1 : Interface} (self : both L1 I1 (t_Action)) : both L1 I1 (int32) := + impl__Action__tag self := + solve_lift (f__private_action self) : both L1 I1 (int32). +Fail Next Obligation. + +Definition t_AttributesCursor : choice_type := + (int32 × int16). +Equations f_current_attribute_cursor_position {L : {fset Location}} {I : Interface} (s : both L I (t_AttributesCursor)) : both L I (int32) := + f_current_attribute_cursor_position s := + bind_both s (fun x => + solve_lift (ret_both (fst x : int32))) : both L I (int32). +Fail Next Obligation. +Equations f_remaining_items {L : {fset Location}} {I : Interface} (s : both L I (t_AttributesCursor)) : both L I (int16) := + f_remaining_items s := + bind_both s (fun x => + solve_lift (ret_both (snd x : int16))) : both L I (int16). +Fail Next Obligation. +Equations Build_t_AttributesCursor {L0 : {fset Location}} {L1 : {fset Location}} {I0 : Interface} {I1 : Interface} {f_current_attribute_cursor_position : both L0 I0 (int32)} {f_remaining_items : both L1 I1 (int16)} : both (L0:|:L1) (I0:|:I1) (t_AttributesCursor) := + Build_t_AttributesCursor := + bind_both f_remaining_items (fun f_remaining_items => + bind_both f_current_attribute_cursor_position (fun f_current_attribute_cursor_position => + solve_lift (ret_both ((f_current_attribute_cursor_position,f_remaining_items) : (t_AttributesCursor))))) : both (L0:|:L1) (I0:|:I1) (t_AttributesCursor). +Fail Next Obligation. +Notation "'Build_t_AttributesCursor' '[' x ']' '(' 'f_current_attribute_cursor_position' ':=' y ')'" := (Build_t_AttributesCursor (f_current_attribute_cursor_position := y) (f_remaining_items := f_remaining_items x)). +Notation "'Build_t_AttributesCursor' '[' x ']' '(' 'f_remaining_items' ':=' y ')'" := (Build_t_AttributesCursor (f_current_attribute_cursor_position := f_current_attribute_cursor_position x) (f_remaining_items := y)). + +Definition t_ChainMetaExtern : choice_type := + 'unit. +Equations Build_t_ChainMetaExtern : both (fset []) (fset []) (t_ChainMetaExtern) := + Build_t_ChainMetaExtern := + solve_lift (ret_both (tt (* Empty tuple *) : (t_ChainMetaExtern))) : both (fset []) (fset []) (t_ChainMetaExtern). +Fail Next Obligation. + +Definition t_ContractState : choice_type := + (int32). +Equations f_current_contract_state_position {L : {fset Location}} {I : Interface} (s : both L I (t_ContractState)) : both L I (int32) := + f_current_contract_state_position s := + bind_both s (fun x => + solve_lift (ret_both (x : int32))) : both L I (int32). +Fail Next Obligation. +Equations Build_t_ContractState {L0 : {fset Location}} {I0 : Interface} {f_current_contract_state_position : both L0 I0 (int32)} : both L0 I0 (t_ContractState) := + Build_t_ContractState := + bind_both f_current_contract_state_position (fun f_current_contract_state_position => + solve_lift (ret_both ((f_current_contract_state_position) : (t_ContractState)))) : both L0 I0 (t_ContractState). +Fail Next Obligation. +Notation "'Build_t_ContractState' '[' x ']' '(' 'f_current_contract_state_position' ':=' y ')'" := (Build_t_ContractState (f_current_contract_state_position := y)). + +Definition t_ExternContext {v_T : _} `{ t_Sized (v_T)} `{ t_ContextType (v_T)} : choice_type := + (t_PhantomData (v_T)). +Equations f_marker {L : {fset Location}} {I : Interface} {v_T : _} `{ t_Sized (v_T)} `{ t_ContextType (v_T)} (s : both L I (t_ExternContext)) : both L I (t_PhantomData (v_T)) := + f_marker s := + bind_both s (fun x => + solve_lift (ret_both (x : t_PhantomData (v_T)))) : both L I (t_PhantomData (v_T)). +Fail Next Obligation. +Equations Build_t_ExternContext {L0 : {fset Location}} {I0 : Interface} {v_T : _} `{ t_Sized (v_T)} `{ t_ContextType (v_T)} {f_marker : both L0 I0 (t_PhantomData (v_T))} : both L0 I0 (t_ExternContext) := + Build_t_ExternContext := + bind_both f_marker (fun f_marker => + solve_lift (ret_both ((f_marker) : (t_ExternContext)))) : both L0 I0 (t_ExternContext). +Fail Next Obligation. +Notation "'Build_t_ExternContext' '[' x ']' '(' 'f_marker' ':=' y ')'" := (Build_t_ExternContext (f_marker := y)). + +Definition t_InitContextExtern : choice_type := + 'unit. +Equations Build_t_InitContextExtern : both (fset []) (fset []) (t_InitContextExtern) := + Build_t_InitContextExtern := + solve_lift (ret_both (tt (* Empty tuple *) : (t_InitContextExtern))) : both (fset []) (fset []) (t_InitContextExtern). +Fail Next Obligation. + +Definition t_Logger : choice_type := + ('unit). +Equations f__private_logger {L : {fset Location}} {I : Interface} (s : both L I (t_Logger)) : both L I ('unit) := + f__private_logger s := + bind_both s (fun x => + solve_lift (ret_both (x : 'unit))) : both L I ('unit). +Fail Next Obligation. +Equations Build_t_Logger {L0 : {fset Location}} {I0 : Interface} {f__private_logger : both L0 I0 ('unit)} : both L0 I0 (t_Logger) := + Build_t_Logger := + bind_both f__private_logger (fun f__private_logger => + solve_lift (ret_both ((f__private_logger) : (t_Logger)))) : both L0 I0 (t_Logger). +Fail Next Obligation. +Notation "'Build_t_Logger' '[' x ']' '(' 'f__private_logger' ':=' y ')'" := (Build_t_Logger (f__private_logger := y)). + +Definition t_NotPayableError : choice_type := + 'unit. +Equations Build_t_NotPayableError : both (fset []) (fset []) (t_NotPayableError) := + Build_t_NotPayableError := + solve_lift (ret_both (tt (* Empty tuple *) : (t_NotPayableError))) : both (fset []) (fset []) (t_NotPayableError). +Fail Next Obligation. + +Definition t_Parameter : choice_type := + (int32). +Equations f_current_parameter_position {L : {fset Location}} {I : Interface} (s : both L I (t_Parameter)) : both L I (int32) := + f_current_parameter_position s := + bind_both s (fun x => + solve_lift (ret_both (x : int32))) : both L I (int32). +Fail Next Obligation. +Equations Build_t_Parameter {L0 : {fset Location}} {I0 : Interface} {f_current_parameter_position : both L0 I0 (int32)} : both L0 I0 (t_Parameter) := + Build_t_Parameter := + bind_both f_current_parameter_position (fun f_current_parameter_position => + solve_lift (ret_both ((f_current_parameter_position) : (t_Parameter)))) : both L0 I0 (t_Parameter). +Fail Next Obligation. +Notation "'Build_t_Parameter' '[' x ']' '(' 'f_current_parameter_position' ':=' y ')'" := (Build_t_Parameter (f_current_parameter_position := y)). + +Definition t_ReceiveContextExtern : choice_type := + 'unit. +Equations Build_t_ReceiveContextExtern : both (fset []) (fset []) (t_ReceiveContextExtern) := + Build_t_ReceiveContextExtern := + solve_lift (ret_both (tt (* Empty tuple *) : (t_ReceiveContextExtern))) : both (fset []) (fset []) (t_ReceiveContextExtern). +Fail Next Obligation. + +Definition t_Reject : choice_type := + (t_NonZeroI32). +Equations f_error_code {L : {fset Location}} {I : Interface} (s : both L I (t_Reject)) : both L I (t_NonZeroI32) := + f_error_code s := + bind_both s (fun x => + solve_lift (ret_both (x : t_NonZeroI32))) : both L I (t_NonZeroI32). +Fail Next Obligation. +Equations Build_t_Reject {L0 : {fset Location}} {I0 : Interface} {f_error_code : both L0 I0 (t_NonZeroI32)} : both L0 I0 (t_Reject) := + Build_t_Reject := + bind_both f_error_code (fun f_error_code => + solve_lift (ret_both ((f_error_code) : (t_Reject)))) : both L0 I0 (t_Reject). +Fail Next Obligation. +Notation "'Build_t_Reject' '[' x ']' '(' 'f_error_code' ':=' y ')'" := (Build_t_Reject (f_error_code := y)). + +Definition t_InitResult {v_S : _} `{ t_Sized (v_S)} : choice_type := + t_Result (v_S) (t_Reject). + +Definition t_ReceiveResult {v_A : _} `{ t_Sized (v_A)} : choice_type := + t_Result (v_A) (t_Reject). diff --git a/concordium/proofs/ssprove/extraction/Hacspec_concordium_Concordium_types_Sealed.v b/concordium/proofs/ssprove/extraction/Hacspec_concordium_Concordium_types_Sealed.v new file mode 100644 index 0000000..2db0b3b --- /dev/null +++ b/concordium/proofs/ssprove/extraction/Hacspec_concordium_Concordium_types_Sealed.v @@ -0,0 +1,41 @@ +(* File automatically generated by Hacspec *) +Set Warnings "-notation-overridden,-ambiguous-paths". +From Crypt Require Import choice_type Package Prelude. +Import PackageNotation. +From extructures Require Import ord fset. +From mathcomp Require Import word_ssrZ word. +From Jasmin Require Import word. + +From Coq Require Import ZArith. +From Coq Require Import Strings.String. +Import List.ListNotations. +Open Scope list_scope. +Open Scope Z_scope. +Open Scope bool_scope. + +From Hacspec Require Import ChoiceEquality. +From Hacspec Require Import LocationUtility. +From Hacspec Require Import Hacspec_Lib_Comparable. +From Hacspec Require Import Hacspec_Lib_Pre. +From Hacspec Require Import Hacspec_Lib. + +Open Scope hacspec_scope. +Import choice.Choice.Exports. + +Obligation Tactic := (* try timeout 8 *) solve_ssprove_obligations. + +Require Import Super. +Export Super. + +Class t_ContextType (Self : choice_type) := { +}. + +#[global] Program Instance t_InitContextExtern_t_ContextType : t_ContextType t_InitContextExtern := + _. +Fail Next Obligation. +Hint Unfold t_InitContextExtern_t_ContextType. + +#[global] Program Instance t_ReceiveContextExtern_t_ContextType : t_ContextType t_ReceiveContextExtern := + _. +Fail Next Obligation. +Hint Unfold t_ReceiveContextExtern_t_ContextType. diff --git a/concordium/proofs/ssprove/extraction/Hacspec_concordium_Constants.v b/concordium/proofs/ssprove/extraction/Hacspec_concordium_Constants.v new file mode 100644 index 0000000..6fb3f63 --- /dev/null +++ b/concordium/proofs/ssprove/extraction/Hacspec_concordium_Constants.v @@ -0,0 +1,40 @@ +(* File automatically generated by Hacspec *) +Set Warnings "-notation-overridden,-ambiguous-paths". +From Crypt Require Import choice_type Package Prelude. +Import PackageNotation. +From extructures Require Import ord fset. +From mathcomp Require Import word_ssrZ word. +From Jasmin Require Import word. + +From Coq Require Import ZArith. +From Coq Require Import Strings.String. +Import List.ListNotations. +Open Scope list_scope. +Open Scope Z_scope. +Open Scope bool_scope. + +From Hacspec Require Import ChoiceEquality. +From Hacspec Require Import LocationUtility. +From Hacspec Require Import Hacspec_Lib_Comparable. +From Hacspec Require Import Hacspec_Lib_Pre. +From Hacspec Require Import Hacspec_Lib. + +Open Scope hacspec_scope. +Import choice.Choice.Exports. + +Obligation Tactic := (* try timeout 8 *) solve_ssprove_obligations. + +Equations v_MAX_CONTRACT_STATE_SIZE {L : {fset Location}} {I : Interface} : both L I (int32) := + v_MAX_CONTRACT_STATE_SIZE := + solve_lift (ret_both (16384 : int32)) : both L I (int32). +Fail Next Obligation. + +Equations v_MAX_LOG_SIZE {L : {fset Location}} {I : Interface} : both L I (uint_size) := + v_MAX_LOG_SIZE := + solve_lift (ret_both (512 : uint_size)) : both L I (uint_size). +Fail Next Obligation. + +Equations v_MAX_NUM_LOGS {L : {fset Location}} {I : Interface} : both L I (uint_size) := + v_MAX_NUM_LOGS := + solve_lift (ret_both (64 : uint_size)) : both L I (uint_size). +Fail Next Obligation. diff --git a/concordium/proofs/ssprove/extraction/Makefile b/concordium/proofs/ssprove/extraction/Makefile new file mode 100644 index 0000000..42626b6 --- /dev/null +++ b/concordium/proofs/ssprove/extraction/Makefile @@ -0,0 +1,989 @@ +########################################################################## +## # The Coq Proof Assistant / The Coq Development Team ## +## v # Copyright INRIA, CNRS and contributors ## +## /dev/null 2>/dev/null; echo $$?)) +STDTIME?=command time -f $(TIMEFMT) +else +ifeq (0,$(shell gtime -f "" true >/dev/null 2>/dev/null; echo $$?)) +STDTIME?=gtime -f $(TIMEFMT) +else +STDTIME?=command time +endif +endif +else +STDTIME?=command time -f $(TIMEFMT) +endif + +COQBIN?= +ifneq (,$(COQBIN)) +# add an ending / +COQBIN:=$(COQBIN)/ +endif + +# Coq binaries +COQC ?= "$(COQBIN)coqc" +COQTOP ?= "$(COQBIN)coqtop" +COQCHK ?= "$(COQBIN)coqchk" +COQNATIVE ?= "$(COQBIN)coqnative" +COQDEP ?= "$(COQBIN)coqdep" +COQDOC ?= "$(COQBIN)coqdoc" +COQPP ?= "$(COQBIN)coqpp" +COQMKFILE ?= "$(COQBIN)coq_makefile" +OCAMLLIBDEP ?= "$(COQBIN)ocamllibdep" + +# Timing scripts +COQMAKE_ONE_TIME_FILE ?= "$(COQCORELIB)/tools/make-one-time-file.py" +COQMAKE_BOTH_TIME_FILES ?= "$(COQCORELIB)/tools/make-both-time-files.py" +COQMAKE_BOTH_SINGLE_TIMING_FILES ?= "$(COQCORELIB)/tools/make-both-single-timing-files.py" +BEFORE ?= +AFTER ?= + +# OCaml binaries +CAMLC ?= "$(OCAMLFIND)" ocamlc -c +CAMLOPTC ?= "$(OCAMLFIND)" opt -c +CAMLLINK ?= "$(OCAMLFIND)" ocamlc -linkall +CAMLOPTLINK ?= "$(OCAMLFIND)" opt -linkall +CAMLDOC ?= "$(OCAMLFIND)" ocamldoc +CAMLDEP ?= "$(OCAMLFIND)" ocamldep -slash -ml-synonym .mlpack + +# DESTDIR is prepended to all installation paths +DESTDIR ?= + +# Debug builds, typically -g to OCaml, -debug to Coq. +CAMLDEBUG ?= +COQDEBUG ?= + +# Extra packages to be linked in (as in findlib -package) +CAMLPKGS ?= +FINDLIBPKGS = -package coq-core.plugins.ltac $(CAMLPKGS) + +# Option for making timing files +TIMING?= +# Option for changing sorting of timing output file +TIMING_SORT_BY ?= auto +# Option for changing the fuzz parameter on the output file +TIMING_FUZZ ?= 0 +# Option for changing whether to use real or user time for timing tables +TIMING_REAL?= +# Option for including the memory column(s) +TIMING_INCLUDE_MEM?= +# Option for sorting by the memory column +TIMING_SORT_BY_MEM?= +# Output file names for timed builds +TIME_OF_BUILD_FILE ?= time-of-build.log +TIME_OF_BUILD_BEFORE_FILE ?= time-of-build-before.log +TIME_OF_BUILD_AFTER_FILE ?= time-of-build-after.log +TIME_OF_PRETTY_BUILD_FILE ?= time-of-build-pretty.log +TIME_OF_PRETTY_BOTH_BUILD_FILE ?= time-of-build-both.log +TIME_OF_PRETTY_BUILD_EXTRA_FILES ?= - # also output to the command line + +TGTS ?= + +# Retro compatibility (DESTDIR is standard on Unix, DSTROOT is not) +ifdef DSTROOT +DESTDIR := $(DSTROOT) +endif + +# Substitution of the path by appending $(DESTDIR) if needed. +# The variable $(COQMF_WINDRIVE) can be needed for Cygwin environments. +windrive_path = $(if $(COQMF_WINDRIVE),$(subst $(COQMF_WINDRIVE),/,$(1)),$(1)) +destination_path = $(if $(DESTDIR),$(DESTDIR)/$(call windrive_path,$(1)),$(1)) + +# Installation paths of libraries and documentation. +COQLIBINSTALL ?= $(call destination_path,$(COQLIB)/user-contrib) +COQDOCINSTALL ?= $(call destination_path,$(DOCDIR)/coq/user-contrib) +COQPLUGININSTALL ?= $(call destination_path,$(COQCORELIB)/..) +COQTOPINSTALL ?= $(call destination_path,$(COQLIB)/toploop) # FIXME: Unused variable? + +# findlib files installation +FINDLIBPREINST= mkdir -p "$(COQPLUGININSTALL)/" +FINDLIBDESTDIR= -destdir "$(COQPLUGININSTALL)/" + +# we need to move out of sight $(METAFILE) otherwise findlib thinks the +# package is already installed +findlib_install = \ + $(HIDE)if [ "$(METAFILE)" ]; then \ + $(FINDLIBPREINST) && \ + mv "$(METAFILE)" "$(METAFILE).skip" ; \ + "$(OCAMLFIND)" install $(2) $(FINDLIBDESTDIR) $(FINDLIBPACKAGE) $(1); \ + rc=$$?; \ + mv "$(METAFILE).skip" "$(METAFILE)"; \ + exit $$rc; \ + fi +findlib_remove = \ + $(HIDE)if [ ! -z "$(METAFILE)" ]; then\ + "$(OCAMLFIND)" remove $(FINDLIBDESTDIR) $(FINDLIBPACKAGE); \ + fi + + +########## End of parameters ################################################## +# What follows may be relevant to you only if you need to +# extend this Makefile. If so, look for 'Extension point' here and +# put in Makefile.local double colon rules accordingly. +# E.g. to perform some work after the all target completes you can write +# +# post-all:: +# echo "All done!" +# +# in Makefile.local +# +############################################################################### + + + + +# Flags ####################################################################### +# +# We define a bunch of variables combining the parameters. +# To add additional flags to coq, coqchk or coqdoc, set the +# {COQ,COQCHK,COQDOC}EXTRAFLAGS variable to whatever you want to add. +# To overwrite the default choice and set your own flags entirely, set the +# {COQ,COQCHK,COQDOC}FLAGS variable. + +SHOW := $(if $(VERBOSE),@true "",@echo "") +HIDE := $(if $(VERBOSE),,@) + +TIMER=$(if $(TIMED), $(STDTIME), $(TIMECMD)) + +OPT?= + +# The DYNOBJ and DYNLIB variables are used by "coqdep -dyndep var" in .v.d +ifeq '$(OPT)' '-byte' +USEBYTE:=true +DYNOBJ:=.cma +DYNLIB:=.cma +else +USEBYTE:= +DYNOBJ:=.cmxs +DYNLIB:=.cmxs +endif + +# these variables are meant to be overridden if you want to add *extra* flags +COQEXTRAFLAGS?= +COQCHKEXTRAFLAGS?= +COQDOCEXTRAFLAGS?= + +# Find the last argument of the form "-native-compiler FLAG" +COQUSERNATIVEFLAG:=$(strip \ +$(subst -native-compiler-,,\ +$(lastword \ +$(filter -native-compiler-%,\ +$(subst -native-compiler ,-native-compiler-,\ +$(strip $(COQEXTRAFLAGS))))))) + +COQFILTEREDEXTRAFLAGS:=$(strip \ +$(filter-out -native-compiler-%,\ +$(subst -native-compiler ,-native-compiler-,\ +$(strip $(COQEXTRAFLAGS))))) + +COQACTUALNATIVEFLAG:=$(lastword $(COQMF_COQ_NATIVE_COMPILER_DEFAULT) $(COQMF_COQPROJECTNATIVEFLAG) $(COQUSERNATIVEFLAG)) + +ifeq '$(COQACTUALNATIVEFLAG)' 'yes' + COQNATIVEFLAG="-w" "-deprecated-native-compiler-option" "-native-compiler" "ondemand" + COQDONATIVE="yes" +else +ifeq '$(COQACTUALNATIVEFLAG)' 'ondemand' + COQNATIVEFLAG="-w" "-deprecated-native-compiler-option" "-native-compiler" "ondemand" + COQDONATIVE="no" +else + COQNATIVEFLAG="-w" "-deprecated-native-compiler-option" "-native-compiler" "no" + COQDONATIVE="no" +endif +endif + +# these flags do NOT contain the libraries, to make them easier to overwrite +COQFLAGS?=-q $(OTHERFLAGS) $(COQFILTEREDEXTRAFLAGS) $(COQNATIVEFLAG) +COQCHKFLAGS?=-silent -o $(COQCHKEXTRAFLAGS) +COQDOCFLAGS?=-interpolate -utf8 $(COQDOCEXTRAFLAGS) + +COQDOCLIBS?=$(COQLIBS_NOML) + +# The version of Coq being run and the version of coq_makefile that +# generated this makefile +COQ_VERSION:=$(shell $(COQC) --print-version | cut -d " " -f 1) +COQMAKEFILE_VERSION:=8.18.0 + +# COQ_SRC_SUBDIRS is for user-overriding, usually to add +# `user-contrib/Foo` to the includes, we keep COQCORE_SRC_SUBDIRS for +# Coq's own core libraries, which should be replaced by ocamlfind +# options at some point. +COQ_SRC_SUBDIRS?= +COQSRCLIBS?= $(foreach d,$(COQ_SRC_SUBDIRS), -I "$(COQLIB)/$(d)") + +CAMLFLAGS+=$(OCAMLLIBS) $(COQSRCLIBS) +# ocamldoc fails with unknown argument otherwise +CAMLDOCFLAGS:=$(filter-out -annot, $(filter-out -bin-annot, $(CAMLFLAGS))) +CAMLFLAGS+=$(OCAMLWARN) + +ifneq (,$(TIMING)) + ifeq (after,$(TIMING)) + TIMING_EXT=after-timing + else + ifeq (before,$(TIMING)) + TIMING_EXT=before-timing + else + TIMING_EXT=timing + endif + endif + TIMING_ARG=-time-file $<.$(TIMING_EXT) +else + TIMING_ARG= +endif + +# Files ####################################################################### +# +# We here define a bunch of variables about the files being part of the +# Coq project in order to ease the writing of build target and build rules + +VDFILE := .Makefile.d + +ALLSRCFILES := \ + $(MLGFILES) \ + $(MLFILES) \ + $(MLPACKFILES) \ + $(MLLIBFILES) \ + $(MLIFILES) + +# helpers +vo_to_obj = $(addsuffix .o,\ + $(filter-out Warning: Error:,\ + $(shell $(COQTOP) -q -noinit -batch -quiet -print-mod-uid $(1)))) +strip_dotslash = $(patsubst ./%,%,$(1)) + +# without this we get undefined variables in the expansion for the +# targets of the [deprecated,use-mllib-or-mlpack] rule +with_undef = $(if $(filter-out undefined, $(origin $(1))),$($(1))) + +VO = vo +VOS = vos + +VOFILES = $(VFILES:.v=.$(VO)) +GLOBFILES = $(VFILES:.v=.glob) +HTMLFILES = $(VFILES:.v=.html) +GHTMLFILES = $(VFILES:.v=.g.html) +BEAUTYFILES = $(addsuffix .beautified,$(VFILES)) +TEXFILES = $(VFILES:.v=.tex) +GTEXFILES = $(VFILES:.v=.g.tex) +CMOFILES = \ + $(MLGFILES:.mlg=.cmo) \ + $(MLFILES:.ml=.cmo) \ + $(MLPACKFILES:.mlpack=.cmo) +CMXFILES = $(CMOFILES:.cmo=.cmx) +OFILES = $(CMXFILES:.cmx=.o) +CMAFILES = $(MLLIBFILES:.mllib=.cma) $(MLPACKFILES:.mlpack=.cma) +CMXAFILES = $(CMAFILES:.cma=.cmxa) +CMIFILES = \ + $(CMOFILES:.cmo=.cmi) \ + $(MLIFILES:.mli=.cmi) +# the /if/ is because old _CoqProject did not list a .ml(pack|lib) but just +# a .mlg file +CMXSFILES = \ + $(MLPACKFILES:.mlpack=.cmxs) \ + $(CMXAFILES:.cmxa=.cmxs) \ + $(if $(MLPACKFILES)$(CMXAFILES),,\ + $(MLGFILES:.mlg=.cmxs) $(MLFILES:.ml=.cmxs)) + +# files that are packed into a plugin (no extension) +PACKEDFILES = \ + $(call strip_dotslash, \ + $(foreach lib, \ + $(call strip_dotslash, \ + $(MLPACKFILES:.mlpack=_MLPACK_DEPENDENCIES)),$(call with_undef,$(lib)))) +# files that are archived into a .cma (mllib) +LIBEDFILES = \ + $(call strip_dotslash, \ + $(foreach lib, \ + $(call strip_dotslash, \ + $(MLLIBFILES:.mllib=_MLLIB_DEPENDENCIES)),$(call with_undef,$(lib)))) +CMIFILESTOINSTALL = $(filter-out $(addsuffix .cmi,$(PACKEDFILES)),$(CMIFILES)) +CMOFILESTOINSTALL = $(filter-out $(addsuffix .cmo,$(PACKEDFILES)),$(CMOFILES)) +OBJFILES = $(call vo_to_obj,$(VOFILES)) +ALLNATIVEFILES = \ + $(OBJFILES:.o=.cmi) \ + $(OBJFILES:.o=.cmx) \ + $(OBJFILES:.o=.cmxs) +FINDLIBPACKAGE=$(patsubst .%,%,$(suffix $(METAFILE))) + +# trick: wildcard filters out non-existing files, so that `install` doesn't show +# warnings and `clean` doesn't pass to rm a list of files that is too long for +# the shell. +NATIVEFILES = $(wildcard $(ALLNATIVEFILES)) +FILESTOINSTALL = \ + $(VOFILES) \ + $(VFILES) \ + $(GLOBFILES) \ + $(NATIVEFILES) \ + $(CMXSFILES) # to be removed when we remove legacy loading +FINDLIBFILESTOINSTALL = \ + $(CMIFILESTOINSTALL) +ifeq '$(HASNATDYNLINK)' 'true' +DO_NATDYNLINK = yes +FINDLIBFILESTOINSTALL += $(CMXSFILES) $(CMXAFILES) $(CMOFILESTOINSTALL:.cmo=.cmx) +else +DO_NATDYNLINK = +endif + +ALLDFILES = $(addsuffix .d,$(ALLSRCFILES)) $(VDFILE) + +# Compilation targets ######################################################### + +all: + $(HIDE)$(MAKE) --no-print-directory -f "$(SELF)" pre-all + $(HIDE)$(MAKE) --no-print-directory -f "$(SELF)" real-all + $(HIDE)$(MAKE) --no-print-directory -f "$(SELF)" post-all +.PHONY: all + +all.timing.diff: + $(HIDE)$(MAKE) --no-print-directory -f "$(SELF)" pre-all + $(HIDE)$(MAKE) --no-print-directory -f "$(SELF)" real-all.timing.diff TIME_OF_PRETTY_BUILD_EXTRA_FILES="" + $(HIDE)$(MAKE) --no-print-directory -f "$(SELF)" post-all +.PHONY: all.timing.diff + +ifeq (0,$(TIMING_REAL)) +TIMING_REAL_ARG := +TIMING_USER_ARG := --user +else +ifeq (1,$(TIMING_REAL)) +TIMING_REAL_ARG := --real +TIMING_USER_ARG := +else +TIMING_REAL_ARG := +TIMING_USER_ARG := +endif +endif + +ifeq (0,$(TIMING_INCLUDE_MEM)) +TIMING_INCLUDE_MEM_ARG := --no-include-mem +else +TIMING_INCLUDE_MEM_ARG := +endif + +ifeq (1,$(TIMING_SORT_BY_MEM)) +TIMING_SORT_BY_MEM_ARG := --sort-by-mem +else +TIMING_SORT_BY_MEM_ARG := +endif + +make-pretty-timed-before:: TIME_OF_BUILD_FILE=$(TIME_OF_BUILD_BEFORE_FILE) +make-pretty-timed-after:: TIME_OF_BUILD_FILE=$(TIME_OF_BUILD_AFTER_FILE) +make-pretty-timed make-pretty-timed-before make-pretty-timed-after:: + $(HIDE)rm -f pretty-timed-success.ok + $(HIDE)($(MAKE) --no-print-directory -f "$(PARENT)" $(TGTS) TIMED=1 2>&1 && touch pretty-timed-success.ok) | tee -a $(TIME_OF_BUILD_FILE) + $(HIDE)rm pretty-timed-success.ok # must not be -f; must fail if the touch failed +print-pretty-timed:: + $(HIDE)$(COQMAKE_ONE_TIME_FILE) $(TIMING_INCLUDE_MEM_ARG) $(TIMING_SORT_BY_MEM_ARG) $(TIMING_REAL_ARG) $(TIME_OF_BUILD_FILE) $(TIME_OF_PRETTY_BUILD_FILE) $(TIME_OF_PRETTY_BUILD_EXTRA_FILES) +print-pretty-timed-diff:: + $(HIDE)$(COQMAKE_BOTH_TIME_FILES) --sort-by=$(TIMING_SORT_BY) $(TIMING_INCLUDE_MEM_ARG) $(TIMING_SORT_BY_MEM_ARG) $(TIMING_REAL_ARG) $(TIME_OF_BUILD_AFTER_FILE) $(TIME_OF_BUILD_BEFORE_FILE) $(TIME_OF_PRETTY_BOTH_BUILD_FILE) $(TIME_OF_PRETTY_BUILD_EXTRA_FILES) +ifeq (,$(BEFORE)) +print-pretty-single-time-diff:: + @echo 'Error: Usage: $(MAKE) print-pretty-single-time-diff AFTER=path/to/file.v.after-timing BEFORE=path/to/file.v.before-timing' + $(HIDE)false +else +ifeq (,$(AFTER)) +print-pretty-single-time-diff:: + @echo 'Error: Usage: $(MAKE) print-pretty-single-time-diff AFTER=path/to/file.v.after-timing BEFORE=path/to/file.v.before-timing' + $(HIDE)false +else +print-pretty-single-time-diff:: + $(HIDE)$(COQMAKE_BOTH_SINGLE_TIMING_FILES) --fuzz=$(TIMING_FUZZ) --sort-by=$(TIMING_SORT_BY) $(TIMING_USER_ARG) $(AFTER) $(BEFORE) $(TIME_OF_PRETTY_BUILD_FILE) $(TIME_OF_PRETTY_BUILD_EXTRA_FILES) +endif +endif +pretty-timed: + $(HIDE)$(MAKE) --no-print-directory -f "$(PARENT)" make-pretty-timed + $(HIDE)$(MAKE) --no-print-directory -f "$(SELF)" print-pretty-timed +.PHONY: pretty-timed make-pretty-timed make-pretty-timed-before make-pretty-timed-after print-pretty-timed print-pretty-timed-diff print-pretty-single-time-diff + +# Extension points for actions to be performed before/after the all target +pre-all:: + @# Extension point + $(HIDE)if [ "$(COQMAKEFILE_VERSION)" != "$(COQ_VERSION)" ]; then\ + echo "W: This Makefile was generated by Coq $(COQMAKEFILE_VERSION)";\ + echo "W: while the current Coq version is $(COQ_VERSION)";\ + fi +.PHONY: pre-all + +post-all:: + @# Extension point +.PHONY: post-all + +real-all: $(VOFILES) $(if $(USEBYTE),bytefiles,optfiles) +.PHONY: real-all + +real-all.timing.diff: $(VOFILES:.vo=.v.timing.diff) +.PHONY: real-all.timing.diff + +bytefiles: $(CMOFILES) $(CMAFILES) +.PHONY: bytefiles + +optfiles: $(if $(DO_NATDYNLINK),$(CMXSFILES)) +.PHONY: optfiles + +# FIXME, see Ralf's bugreport +# quick is deprecated, now renamed vio +vio: $(VOFILES:.vo=.vio) +.PHONY: vio +quick: vio + $(warning "'make quick' is deprecated, use 'make vio' or consider using 'vos' files") +.PHONY: quick + +vio2vo: + $(TIMER) $(COQC) $(COQDEBUG) $(COQFLAGS) $(COQLIBS) \ + -schedule-vio2vo $(J) $(VOFILES:%.vo=%.vio) +.PHONY: vio2vo + +# quick2vo is undocumented +quick2vo: + $(HIDE)make -j $(J) vio + $(HIDE)VIOFILES=$$(for vofile in $(VOFILES); do \ + viofile="$$(echo "$$vofile" | sed "s/\.vo$$/.vio/")"; \ + if [ "$$vofile" -ot "$$viofile" -o ! -e "$$vofile" ]; then printf "$$viofile "; fi; \ + done); \ + echo "VIO2VO: $$VIOFILES"; \ + if [ -n "$$VIOFILES" ]; then \ + $(TIMER) $(COQC) $(COQDEBUG) $(COQFLAGS) $(COQLIBS) -schedule-vio2vo $(J) $$VIOFILES; \ + fi +.PHONY: quick2vo + +checkproofs: + $(TIMER) $(COQC) $(COQDEBUG) $(COQFLAGS) $(COQLIBS) \ + -schedule-vio-checking $(J) $(VOFILES:%.vo=%.vio) +.PHONY: checkproofs + +vos: $(VOFILES:%.vo=%.vos) +.PHONY: vos + +vok: $(VOFILES:%.vo=%.vok) +.PHONY: vok + +validate: $(VOFILES) + $(TIMER) $(COQCHK) $(COQCHKFLAGS) $(COQLIBS_NOML) $^ +.PHONY: validate + +only: $(TGTS) +.PHONY: only + +# Documentation targets ####################################################### + +html: $(GLOBFILES) $(VFILES) + $(SHOW)'COQDOC -d html $(GAL)' + $(HIDE)mkdir -p html + $(HIDE)$(COQDOC) \ + -toc $(COQDOCFLAGS) -html $(GAL) $(COQDOCLIBS) -d html $(VFILES) + +mlihtml: $(MLIFILES:.mli=.cmi) + $(SHOW)'CAMLDOC -d $@' + $(HIDE)mkdir $@ || rm -rf $@/* + $(HIDE)$(CAMLDOC) -html \ + -d $@ -m A $(CAMLDEBUG) $(CAMLDOCFLAGS) $(MLIFILES) $(FINDLIBPKGS) + +all-mli.tex: $(MLIFILES:.mli=.cmi) + $(SHOW)'CAMLDOC -latex $@' + $(HIDE)$(CAMLDOC) -latex \ + -o $@ -m A $(CAMLDEBUG) $(CAMLDOCFLAGS) $(MLIFILES) $(FINDLIBPKGS) + +all.ps: $(VFILES) + $(SHOW)'COQDOC -ps $(GAL)' + $(HIDE)$(COQDOC) \ + -toc $(COQDOCFLAGS) -ps $(GAL) $(COQDOCLIBS) \ + -o $@ `$(COQDEP) -sort $(VFILES)` + +all.pdf: $(VFILES) + $(SHOW)'COQDOC -pdf $(GAL)' + $(HIDE)$(COQDOC) \ + -toc $(COQDOCFLAGS) -pdf $(GAL) $(COQDOCLIBS) \ + -o $@ `$(COQDEP) -sort $(VFILES)` + +# FIXME: not quite right, since the output name is different +gallinahtml: GAL=-g +gallinahtml: html + +all-gal.ps: GAL=-g +all-gal.ps: all.ps + +all-gal.pdf: GAL=-g +all-gal.pdf: all.pdf + +# ? +beautify: $(BEAUTYFILES) + for file in $^; do mv $${file%.beautified} $${file%beautified}old && mv $${file} $${file%.beautified}; done + @echo 'Do not do "make clean" until you are sure that everything went well!' + @echo 'If there were a problem, execute "for file in $$(find . -name \*.v.old -print); do mv $${file} $${file%.old}; done" in your shell/' +.PHONY: beautify + +# Installation targets ######################################################## +# +# There rules can be extended in Makefile.local +# Extensions can't assume when they run. + +# We use $(file) to avoid generating a very long command string to pass to the shell +# (cf https://coq.zulipchat.com/#narrow/stream/250632-Coq-Platform-devs-.26-users/topic/Strange.20command.20length.20limit.20on.20Linux) +# However Apple ships old make which doesn't have $(file) so we need a fallback +$(file >.hasfile,1) +HASFILE:=$(shell if [ -e .hasfile ]; then echo 1; rm .hasfile; fi) + +MKFILESTOINSTALL= $(if $(HASFILE),$(file >.filestoinstall,$(FILESTOINSTALL)),\ + $(shell rm -f .filestoinstall) \ + $(foreach x,$(FILESTOINSTALL),$(shell printf '%s\n' "$x" >> .filestoinstall))) + +# findlib needs the package to not be installed, so we remove it before +# installing it (see the call to findlib_remove) +install: META + @$(MKFILESTOINSTALL) + $(HIDE)code=0; for f in $$(cat .filestoinstall); do\ + if ! [ -f "$$f" ]; then >&2 echo $$f does not exist; code=1; fi \ + done; exit $$code + $(HIDE)for f in $$(cat .filestoinstall); do\ + df="`$(COQMKFILE) -destination-of "$$f" $(COQLIBS)`";\ + if [ "$$?" != "0" -o -z "$$df" ]; then\ + echo SKIP "$$f" since it has no logical path;\ + else\ + install -d "$(COQLIBINSTALL)/$$df" &&\ + install -m 0644 "$$f" "$(COQLIBINSTALL)/$$df" &&\ + echo INSTALL "$$f" "$(COQLIBINSTALL)/$$df";\ + fi;\ + done + $(call findlib_remove) + $(call findlib_install, META $(FINDLIBFILESTOINSTALL)) + $(HIDE)$(MAKE) install-extra -f "$(SELF)" + @rm -f .filestoinstall +install-extra:: + @# Extension point +.PHONY: install install-extra + +META: $(METAFILE) + $(HIDE)if [ "$(METAFILE)" ]; then \ + cat "$(METAFILE)" | grep -v 'directory.*=.*' > META; \ + fi + +install-byte: + $(call findlib_install, $(CMAFILES) $(CMOFILESTOINSTALL), -add) + +install-doc:: html mlihtml + @# Extension point + $(HIDE)install -d "$(COQDOCINSTALL)/$(INSTALLCOQDOCROOT)/html" + $(HIDE)for i in html/*; do \ + dest="$(COQDOCINSTALL)/$(INSTALLCOQDOCROOT)/$$i";\ + install -m 0644 "$$i" "$$dest";\ + echo INSTALL "$$i" "$$dest";\ + done + $(HIDE)install -d \ + "$(COQDOCINSTALL)/$(INSTALLCOQDOCROOT)/mlihtml" + $(HIDE)for i in mlihtml/*; do \ + dest="$(COQDOCINSTALL)/$(INSTALLCOQDOCROOT)/$$i";\ + install -m 0644 "$$i" "$$dest";\ + echo INSTALL "$$i" "$$dest";\ + done +.PHONY: install-doc + +uninstall:: + @# Extension point + @$(MKFILESTOINSTALL) + $(call findlib_remove) + $(HIDE)for f in $$(cat .filestoinstall); do \ + df="`$(COQMKFILE) -destination-of "$$f" $(COQLIBS)`" &&\ + instf="$(COQLIBINSTALL)/$$df/`basename $$f`" &&\ + rm -f "$$instf" &&\ + echo RM "$$instf" ;\ + done + $(HIDE)for f in $$(cat .filestoinstall); do \ + df="`$(COQMKFILE) -destination-of "$$f" $(COQLIBS)`" &&\ + echo RMDIR "$(COQLIBINSTALL)/$$df/" &&\ + (rmdir "$(COQLIBINSTALL)/$$df/" 2>/dev/null || true); \ + done + @rm -f .filestoinstall + +.PHONY: uninstall + +uninstall-doc:: + @# Extension point + $(SHOW)'RM $(COQDOCINSTALL)/$(INSTALLCOQDOCROOT)/html' + $(HIDE)rm -rf "$(COQDOCINSTALL)/$(INSTALLCOQDOCROOT)/html" + $(SHOW)'RM $(COQDOCINSTALL)/$(INSTALLCOQDOCROOT)/mlihtml' + $(HIDE)rm -rf "$(COQDOCINSTALL)/$(INSTALLCOQDOCROOT)/mlihtml" + $(HIDE) rmdir "$(COQDOCINSTALL)/$(INSTALLCOQDOCROOT)/" || true +.PHONY: uninstall-doc + +# Cleaning #################################################################### +# +# There rules can be extended in Makefile.local +# Extensions can't assume when they run. + +clean:: + @# Extension point + $(SHOW)'CLEAN' + $(HIDE)rm -f $(CMOFILES) + $(HIDE)rm -f $(CMIFILES) + $(HIDE)rm -f $(CMAFILES) + $(HIDE)rm -f $(CMXFILES) + $(HIDE)rm -f $(CMXAFILES) + $(HIDE)rm -f $(CMXSFILES) + $(HIDE)rm -f $(OFILES) + $(HIDE)rm -f $(CMXAFILES:.cmxa=.a) + $(HIDE)rm -f $(MLGFILES:.mlg=.ml) + $(HIDE)rm -f $(CMXFILES:.cmx=.cmt) + $(HIDE)rm -f $(MLIFILES:.mli=.cmti) + $(HIDE)rm -f $(ALLDFILES) + $(HIDE)rm -f $(NATIVEFILES) + $(HIDE)find . -name .coq-native -type d -empty -delete + $(HIDE)rm -f $(VOFILES) + $(HIDE)rm -f $(VOFILES:.vo=.vio) + $(HIDE)rm -f $(VOFILES:.vo=.vos) + $(HIDE)rm -f $(VOFILES:.vo=.vok) + $(HIDE)rm -f $(BEAUTYFILES) $(VFILES:=.old) + $(HIDE)rm -f all.ps all-gal.ps all.pdf all-gal.pdf all.glob all-mli.tex + $(HIDE)rm -f $(VFILES:.v=.glob) + $(HIDE)rm -f $(VFILES:.v=.tex) + $(HIDE)rm -f $(VFILES:.v=.g.tex) + $(HIDE)rm -f pretty-timed-success.ok + $(HIDE)rm -f META + $(HIDE)rm -rf html mlihtml +.PHONY: clean + +cleanall:: clean + @# Extension point + $(SHOW)'CLEAN *.aux *.timing' + $(HIDE)rm -f $(foreach f,$(VFILES:.v=),$(dir $(f)).$(notdir $(f)).aux) + $(HIDE)rm -f $(TIME_OF_BUILD_FILE) $(TIME_OF_BUILD_BEFORE_FILE) $(TIME_OF_BUILD_AFTER_FILE) $(TIME_OF_PRETTY_BUILD_FILE) $(TIME_OF_PRETTY_BOTH_BUILD_FILE) + $(HIDE)rm -f $(VOFILES:.vo=.v.timing) + $(HIDE)rm -f $(VOFILES:.vo=.v.before-timing) + $(HIDE)rm -f $(VOFILES:.vo=.v.after-timing) + $(HIDE)rm -f $(VOFILES:.vo=.v.timing.diff) + $(HIDE)rm -f .lia.cache .nia.cache +.PHONY: cleanall + +archclean:: + @# Extension point + $(SHOW)'CLEAN *.cmx *.o' + $(HIDE)rm -f $(NATIVEFILES) + $(HIDE)rm -f $(CMOFILES:%.cmo=%.cmx) +.PHONY: archclean + + +# Compilation rules ########################################################### + +$(MLIFILES:.mli=.cmi): %.cmi: %.mli + $(SHOW)'CAMLC -c $<' + $(HIDE)$(TIMER) $(CAMLC) $(CAMLDEBUG) $(CAMLFLAGS) $(FINDLIBPKGS) $< + +$(MLGFILES:.mlg=.ml): %.ml: %.mlg + $(SHOW)'COQPP $<' + $(HIDE)$(COQPP) $< + +# Stupid hack around a deficient syntax: we cannot concatenate two expansions +$(filter %.cmo, $(MLFILES:.ml=.cmo) $(MLGFILES:.mlg=.cmo)): %.cmo: %.ml + $(SHOW)'CAMLC -c $<' + $(HIDE)$(TIMER) $(CAMLC) $(CAMLDEBUG) $(CAMLFLAGS) $(FINDLIBPKGS) $< + +# Same hack +$(filter %.cmx, $(MLFILES:.ml=.cmx) $(MLGFILES:.mlg=.cmx)): %.cmx: %.ml + $(SHOW)'CAMLOPT -c $(FOR_PACK) $<' + $(HIDE)$(TIMER) $(CAMLOPTC) $(CAMLDEBUG) $(CAMLFLAGS) $(FINDLIBPKGS) $(FOR_PACK) $< + + +$(MLLIBFILES:.mllib=.cmxs): %.cmxs: %.cmxa + $(SHOW)'CAMLOPT -shared -o $@' + $(HIDE)$(TIMER) $(CAMLOPTLINK) $(CAMLDEBUG) $(CAMLFLAGS) $(FINDLIBPKGS) \ + -shared -o $@ $< + +$(MLLIBFILES:.mllib=.cma): %.cma: | %.mllib + $(SHOW)'CAMLC -a -o $@' + $(HIDE)$(TIMER) $(CAMLLINK) $(CAMLDEBUG) $(CAMLFLAGS) $(FINDLIBPKGS) -a -o $@ $^ + +$(MLLIBFILES:.mllib=.cmxa): %.cmxa: | %.mllib + $(SHOW)'CAMLOPT -a -o $@' + $(HIDE)$(TIMER) $(CAMLOPTLINK) $(CAMLDEBUG) $(CAMLFLAGS) $(FINDLIBPKGS) -a -o $@ $^ + + +$(MLPACKFILES:.mlpack=.cmxs): %.cmxs: %.cmxa + $(SHOW)'CAMLOPT -shared -o $@' + $(HIDE)$(TIMER) $(CAMLOPTLINK) $(CAMLDEBUG) $(CAMLFLAGS) $(FINDLIBPKGS) \ + -shared -o $@ $< + +$(MLPACKFILES:.mlpack=.cmxa): %.cmxa: %.cmx | %.mlpack + $(SHOW)'CAMLOPT -a -o $@' + $(HIDE)$(TIMER) $(CAMLOPTLINK) $(CAMLDEBUG) $(CAMLFLAGS) $(FINDLIBPKGS) -a -o $@ $< + +$(MLPACKFILES:.mlpack=.cma): %.cma: %.cmo | %.mlpack + $(SHOW)'CAMLC -a -o $@' + $(HIDE)$(TIMER) $(CAMLLINK) $(CAMLDEBUG) $(CAMLFLAGS) $(FINDLIBPKGS) -a -o $@ $^ + +$(MLPACKFILES:.mlpack=.cmo): %.cmo: | %.mlpack + $(SHOW)'CAMLC -pack -o $@' + $(HIDE)$(TIMER) $(CAMLLINK) $(CAMLDEBUG) $(CAMLFLAGS) $(FINDLIBPKGS) -pack -o $@ $^ + +$(MLPACKFILES:.mlpack=.cmx): %.cmx: | %.mlpack + $(SHOW)'CAMLOPT -pack -o $@' + $(HIDE)$(TIMER) $(CAMLOPTLINK) $(CAMLDEBUG) $(CAMLFLAGS) $(FINDLIBPKGS) -pack -o $@ $^ + +# This rule is for _CoqProject with no .mllib nor .mlpack +$(filter-out $(MLLIBFILES:.mllib=.cmxs) $(MLPACKFILES:.mlpack=.cmxs) $(addsuffix .cmxs,$(PACKEDFILES)) $(addsuffix .cmxs,$(LIBEDFILES)),$(MLFILES:.ml=.cmxs) $(MLGFILES:.mlg=.cmxs)): %.cmxs: %.cmx + $(SHOW)'[deprecated,use-mllib-or-mlpack] CAMLOPT -shared -o $@' + $(HIDE)$(TIMER) $(CAMLOPTLINK) $(CAMLDEBUG) $(CAMLFLAGS) $(FINDLIBPKGS) \ + -shared -o $@ $< + +# can't make +# https://www.gnu.org/software/make/manual/make.html#Static-Pattern +# work with multiple target rules +# so use eval in a loop instead +# with grouped targets https://www.gnu.org/software/make/manual/make.html#Multiple-Targets +# if available (GNU Make >= 4.3) +ifneq (,$(filter grouped-target,$(.FEATURES))) +define globvorule= + +# take care to $$ variables using $< etc + $(1).vo $(1).glob &: $(1).v | $(VDFILE) + $(SHOW)COQC $(1).v + $(HIDE)$$(TIMER) $(COQC) $(COQDEBUG) $$(TIMING_ARG) $(COQFLAGS) $(COQLIBS) $(1).v +ifeq ($(COQDONATIVE), "yes") + $(SHOW)COQNATIVE $(1).vo + $(HIDE)$(call TIMER,$(1).vo.native) $(COQNATIVE) $(COQLIBS) $(1).vo +endif + +endef +else + +$(VOFILES): %.vo: %.v | $(VDFILE) + $(SHOW)COQC $< + $(HIDE)$(TIMER) $(COQC) $(COQDEBUG) $(TIMING_ARG) $(COQFLAGS) $(COQLIBS) $< +ifeq ($(COQDONATIVE), "yes") + $(SHOW)COQNATIVE $@ + $(HIDE)$(call TIMER,$@.native) $(COQNATIVE) $(COQLIBS) $@ +endif + +# this is broken :( todo fix if we ever find a solution that doesn't need grouped targets +$(GLOBFILES): %.glob: %.v + $(SHOW)'COQC $< (for .glob)' + $(HIDE)$(TIMER) $(COQC) $(COQDEBUG) $(COQFLAGS) $(COQLIBS) $< + +endif + +$(foreach vfile,$(VFILES:.v=),$(eval $(call globvorule,$(vfile)))) + +$(VFILES:.v=.vio): %.vio: %.v + $(SHOW)COQC -vio $< + $(HIDE)$(TIMER) $(COQC) -vio $(COQDEBUG) $(COQFLAGS) $(COQLIBS) $< + +$(VFILES:.v=.vos): %.vos: %.v + $(SHOW)COQC -vos $< + $(HIDE)$(TIMER) $(COQC) -vos $(COQDEBUG) $(COQFLAGS) $(COQLIBS) $< + +$(VFILES:.v=.vok): %.vok: %.v + $(SHOW)COQC -vok $< + $(HIDE)$(TIMER) $(COQC) -vok $(COQDEBUG) $(COQFLAGS) $(COQLIBS) $< + +$(addsuffix .timing.diff,$(VFILES)): %.timing.diff : %.before-timing %.after-timing + $(SHOW)PYTHON TIMING-DIFF $*.{before,after}-timing + $(HIDE)$(MAKE) --no-print-directory -f "$(SELF)" print-pretty-single-time-diff BEFORE=$*.before-timing AFTER=$*.after-timing TIME_OF_PRETTY_BUILD_FILE="$@" + +$(BEAUTYFILES): %.v.beautified: %.v + $(SHOW)'BEAUTIFY $<' + $(HIDE)$(TIMER) $(COQC) $(COQDEBUG) $(COQFLAGS) $(COQLIBS) -beautify $< + +$(TEXFILES): %.tex: %.v + $(SHOW)'COQDOC -latex $<' + $(HIDE)$(COQDOC) $(COQDOCFLAGS) -latex $< -o $@ + +$(GTEXFILES): %.g.tex: %.v + $(SHOW)'COQDOC -latex -g $<' + $(HIDE)$(COQDOC) $(COQDOCFLAGS) -latex -g $< -o $@ + +$(HTMLFILES): %.html: %.v %.glob + $(SHOW)'COQDOC -html $<' + $(HIDE)$(COQDOC) $(COQDOCFLAGS) -html $< -o $@ + +$(GHTMLFILES): %.g.html: %.v %.glob + $(SHOW)'COQDOC -html -g $<' + $(HIDE)$(COQDOC) $(COQDOCFLAGS) -html -g $< -o $@ + +# Dependency files ############################################################ + +ifndef MAKECMDGOALS + -include $(ALLDFILES) +else + ifneq ($(filter-out archclean clean cleanall printenv make-pretty-timed make-pretty-timed-before make-pretty-timed-after print-pretty-timed print-pretty-timed-diff print-pretty-single-time-diff,$(MAKECMDGOALS)),) + -include $(ALLDFILES) + endif +endif + +.SECONDARY: $(ALLDFILES) + +redir_if_ok = > "$@" || ( RV=$$?; rm -f "$@"; exit $$RV ) + +GENMLFILES:=$(MLGFILES:.mlg=.ml) +$(addsuffix .d,$(ALLSRCFILES)): $(GENMLFILES) + +$(addsuffix .d,$(MLIFILES)): %.mli.d: %.mli + $(SHOW)'CAMLDEP $<' + $(HIDE)$(CAMLDEP) $(OCAMLLIBS) "$<" $(redir_if_ok) + +$(addsuffix .d,$(MLGFILES)): %.mlg.d: %.ml + $(SHOW)'CAMLDEP $<' + $(HIDE)$(CAMLDEP) $(OCAMLLIBS) "$<" $(redir_if_ok) + +$(addsuffix .d,$(MLFILES)): %.ml.d: %.ml + $(SHOW)'CAMLDEP $<' + $(HIDE)$(CAMLDEP) $(OCAMLLIBS) "$<" $(redir_if_ok) + +$(addsuffix .d,$(MLLIBFILES)): %.mllib.d: %.mllib + $(SHOW)'OCAMLLIBDEP $<' + $(HIDE)$(OCAMLLIBDEP) -c $(OCAMLLIBS) "$<" $(redir_if_ok) + +$(addsuffix .d,$(MLPACKFILES)): %.mlpack.d: %.mlpack + $(SHOW)'OCAMLLIBDEP $<' + $(HIDE)$(OCAMLLIBDEP) -c $(OCAMLLIBS) "$<" $(redir_if_ok) + +# If this makefile is created using a _CoqProject we have coqdep get +# options from it. This avoids argument length limits for pathological +# projects. Note that extra options might be on the command line. +VDFILE_FLAGS:=$(if _CoqProject,-f _CoqProject,) $(CMDLINE_COQLIBS) $(CMDLINE_VFILES) + +$(VDFILE): _CoqProject $(VFILES) + $(SHOW)'COQDEP VFILES' + $(HIDE)$(COQDEP) $(if $(strip $(METAFILE)),-m "$(METAFILE)") -vos -dyndep var $(VDFILE_FLAGS) $(redir_if_ok) + +# Misc ######################################################################## + +byte: + $(HIDE)$(MAKE) all "OPT:=-byte" -f "$(SELF)" +.PHONY: byte + +opt: + $(HIDE)$(MAKE) all "OPT:=-opt" -f "$(SELF)" +.PHONY: opt + +# This is deprecated. To extend this makefile use +# extension points and Makefile.local +printenv:: + $(warning printenv is deprecated) + $(warning write extensions in Makefile.local or include Makefile.conf) + @echo 'COQLIB = $(COQLIB)' + @echo 'COQCORELIB = $(COQCORELIB)' + @echo 'DOCDIR = $(DOCDIR)' + @echo 'OCAMLFIND = $(OCAMLFIND)' + @echo 'HASNATDYNLINK = $(HASNATDYNLINK)' + @echo 'SRC_SUBDIRS = $(SRC_SUBDIRS)' + @echo 'COQ_SRC_SUBDIRS = $(COQ_SRC_SUBDIRS)' + @echo 'COQCORE_SRC_SUBDIRS = $(COQCORE_SRC_SUBDIRS)' + @echo 'OCAMLFIND = $(OCAMLFIND)' + @echo 'PP = $(PP)' + @echo 'COQFLAGS = $(COQFLAGS)' + @echo 'COQLIB = $(COQLIBS)' + @echo 'COQLIBINSTALL = $(COQLIBINSTALL)' + @echo 'COQDOCINSTALL = $(COQDOCINSTALL)' +.PHONY: printenv + +# Generate a .merlin file. If you need to append directives to this +# file you can extend the merlin-hook target in Makefile.local +.merlin: + $(SHOW)'FILL .merlin' + $(HIDE)echo 'FLG $(COQMF_CAMLFLAGS)' > .merlin + $(HIDE)echo 'B $(COQCORELIB)' >> .merlin + $(HIDE)echo 'S $(COQCORELIB)' >> .merlin + $(HIDE)$(foreach d,$(COQCORE_SRC_SUBDIRS), \ + echo 'B $(COQCORELIB)$(d)' >> .merlin;) + $(HIDE)$(foreach d,$(COQ_SRC_SUBDIRS), \ + echo 'S $(COQLIB)$(d)' >> .merlin;) + $(HIDE)$(foreach d,$(SRC_SUBDIRS), echo 'B $(d)' >> .merlin;) + $(HIDE)$(foreach d,$(SRC_SUBDIRS), echo 'S $(d)' >> .merlin;) + $(HIDE)$(MAKE) merlin-hook -f "$(SELF)" +.PHONY: merlin + +merlin-hook:: + @# Extension point +.PHONY: merlin-hook + +# prints all variables +debug: + $(foreach v,\ + $(sort $(filter-out $(INITIAL_VARS) INITIAL_VARS,\ + $(.VARIABLES))),\ + $(info $(v) = $($(v)))) +.PHONY: debug + +.DEFAULT_GOAL := all + +# Users can create Makefile.local-late to hook into double-colon rules +# or add other needed Makefile code, using defined +# variables if necessary. +-include Makefile.local-late + +# Local Variables: +# mode: makefile-gmake +# End: diff --git a/concordium/proofs/ssprove/extraction/Makefile.conf b/concordium/proofs/ssprove/extraction/Makefile.conf new file mode 100644 index 0000000..fd82bd8 --- /dev/null +++ b/concordium/proofs/ssprove/extraction/Makefile.conf @@ -0,0 +1,71 @@ +# This configuration file was generated by running: +# coq_makefile -f _CoqProject -o Makefile + +COQBIN?= +ifneq (,$(COQBIN)) +# add an ending / +COQBIN:=$(COQBIN)/ +endif +COQMKFILE ?= "$(COQBIN)coq_makefile" + +############################################################################### +# # +# Project files. # +# # +############################################################################### + +COQMF_CMDLINE_VFILES := +COQMF_SOURCES := $(shell $(COQMKFILE) -sources-of -f _CoqProject $(COQMF_CMDLINE_VFILES)) +COQMF_VFILES := $(filter %.v, $(COQMF_SOURCES)) +COQMF_MLIFILES := $(filter %.mli, $(COQMF_SOURCES)) +COQMF_MLFILES := $(filter %.ml, $(COQMF_SOURCES)) +COQMF_MLGFILES := $(filter %.mlg, $(COQMF_SOURCES)) +COQMF_MLPACKFILES := $(filter %.mlpack, $(COQMF_SOURCES)) +COQMF_MLLIBFILES := $(filter %.mllib, $(COQMF_SOURCES)) +COQMF_METAFILE = + +############################################################################### +# # +# Path directives (-I, -R, -Q). # +# # +############################################################################### + +COQMF_OCAMLLIBS = +COQMF_SRC_SUBDIRS = +COQMF_COQLIBS = -R . Examples +COQMF_COQLIBS_NOML = -R . Examples +COQMF_CMDLINE_COQLIBS = + +############################################################################### +# # +# Coq configuration. # +# # +############################################################################### + +COQMF_COQLIB=/home/au538501/.opam/hacspec/lib/coq/ +COQMF_COQCORELIB=/home/au538501/.opam/hacspec/lib/coq/../coq-core/ +COQMF_DOCDIR=/home/au538501/.opam/hacspec/share/doc/ +COQMF_OCAMLFIND=/home/au538501/.opam/hacspec/bin/ocamlfind +COQMF_CAMLFLAGS=-thread -bin-annot -strict-sequence -w -a+1..3-4+5..8-9+10..26-27+28..39-40-41-42+43-44-45+46..47-48+49..57-58+59..66-67-68+69-70 +COQMF_WARN=-warn-error +a-3 +COQMF_HASNATDYNLINK=true +COQMF_COQ_SRC_SUBDIRS=boot config lib clib kernel library engine pretyping interp gramlib parsing proofs tactics toplevel printing ide stm vernac plugins/btauto plugins/cc plugins/derive plugins/extraction plugins/firstorder plugins/funind plugins/ltac plugins/ltac2 plugins/micromega plugins/nsatz plugins/ring plugins/rtauto plugins/ssr plugins/ssrmatching plugins/syntax +COQMF_COQ_NATIVE_COMPILER_DEFAULT=no +COQMF_WINDRIVE= + +############################################################################### +# # +# Native compiler. # +# # +############################################################################### + +COQMF_COQPROJECTNATIVEFLAG = + +############################################################################### +# # +# Extra variables. # +# # +############################################################################### + +COQMF_OTHERFLAGS = '-w' 'all' +COQMF_INSTALLCOQDOCROOT = Examples diff --git a/concordium/proofs/ssprove/extraction/_CoqProject b/concordium/proofs/ssprove/extraction/_CoqProject new file mode 100644 index 0000000..016d7e3 --- /dev/null +++ b/concordium/proofs/ssprove/extraction/_CoqProject @@ -0,0 +1,9 @@ +-R . Examples +-arg -w +-arg all + +./Hacspec_concordium.v +./Hacspec_concordium_Concordium_traits.v +./Hacspec_concordium_Concordium_types.v +./Hacspec_concordium_Concordium_types_Sealed.v +./Hacspec_concordium_Constants.v \ No newline at end of file diff --git a/concordium/src/concordium.rs b/concordium/src/concordium.rs new file mode 100644 index 0000000..d793169 --- /dev/null +++ b/concordium/src/concordium.rs @@ -0,0 +1,78 @@ +#![cfg_attr( + not(feature = "std"), + no_std, + feature(alloc_error_handler, core_intrinsics) +)] +#![feature(register_tool)] +#![register_tool(hax)] + +#[hax_lib_macros::exclude] +extern crate hax_lib_macros; +#[hax_lib_macros::exclude] +use hax_lib_macros::*; + +#[cfg(not(feature = "hacspec"))] +#[cfg(not(feature = "std"))] +pub extern crate alloc; + +/// Terminate execution immediately without panicking. +/// When the `std` feature is enabled this is just [std::process::abort](https://doc.rust-lang.org/std/process/fn.abort.html). +/// When `std` is not present and the target architecture is `wasm32` this will +/// simply emit the [unreachable](https://doc.rust-lang.org/core/arch/wasm32/fn.unreachable.html) instruction. +#[cfg(not(feature = "hacspec"))] +#[cfg(feature = "std")] +pub use std::process::abort as trap; +#[cfg(not(feature = "hacspec"))] +#[cfg(all(not(feature = "std"), target_arch = "wasm32"))] +#[inline(always)] +pub fn trap() -> ! { + unsafe { core::arch::wasm32::unreachable() } +} +#[cfg(not(feature = "hacspec"))] +#[cfg(all(not(feature = "std"), not(target_arch = "wasm32")))] +#[inline(always)] +pub fn trap() -> ! { + core::intrinsics::abort() +} + +// Provide some re-exports to make it easier to use the library. +// This should be expanded in the future. +/// Re-export. +#[cfg(not(feature = "hacspec"))] +#[cfg(not(feature = "std"))] +pub use alloc::{borrow::ToOwned, string, string::String, string::ToString, vec, vec::Vec}; +/// Re-export. +#[cfg(not(feature = "hacspec"))] +#[cfg(not(feature = "std"))] +pub use core::{convert, hash, marker, mem, num, result::*}; + +#[cfg(not(feature = "hacspec"))] +#[cfg(not(feature = "std"))] +pub use alloc::collections; + +pub mod constants; +mod concordium_prims; +mod concordium_impls; +mod concordium_types; +mod concordium_traits; + +pub mod test_infrastructure; + +use concordium_prims::*; // TODO: Does not re-export anything, nothing is public enough (removed pub) +pub use concordium_impls::*; +pub use concordium_types::*; +pub use concordium_traits::*; + + +#[cfg(not(feature = "hacspec"))] +extern crate concordium_contracts_common; +#[cfg(not(feature = "hacspec"))] +/// Chain constants that impose limits on various aspects of smart contract +/// execution. +pub use concordium_contracts_common::*; + +// TODO: Need derive +#[cfg(not(feature = "hacspec"))] +extern crate hacspec_concordium_derive; +#[cfg(not(feature = "hacspec"))] +pub use hacspec_concordium_derive::*; diff --git a/concordium/src/concordium_impls.rs b/concordium/src/concordium_impls.rs new file mode 100644 index 0000000..d083747 --- /dev/null +++ b/concordium/src/concordium_impls.rs @@ -0,0 +1,667 @@ + // use crate::{convert, mem, num, // prims, + // concordium_prims::*, concordium_traits::*, concordium_types::*}; +// use concordium_contracts_common::*; + +// impl convert::From<()> for Reject { +// #[inline(always)] +// fn from(_: ()) -> Self { +// Reject { +// error_code: unsafe { num::NonZeroI32::new_unchecked(i32::MIN + 1) }, +// } +// } +// } + +// impl convert::From for Reject { +// #[inline(always)] +// fn from(_: ParseError) -> Self { +// Reject { +// error_code: unsafe { num::NonZeroI32::new_unchecked(i32::MIN + 2) }, +// } +// } +// } + +// /// Full is mapped to i32::MIN+3, Malformed is mapped to i32::MIN+4. +// impl From for Reject { +// #[inline(always)] +// fn from(le: LogError) -> Self { +// let error_code = match le { +// LogError::Full => unsafe { crate::num::NonZeroI32::new_unchecked(i32::MIN + 3) }, +// LogError::Malformed => unsafe { crate::num::NonZeroI32::new_unchecked(i32::MIN + 4) }, +// }; +// Self { +// error_code, +// } +// } +// } + +// /// MissingInitPrefix is mapped to i32::MIN + 5, and TooLong is mapped to +// /// i32::MIN + 6. +// impl From for Reject { +// fn from(nre: NewContractNameError) -> Self { +// let error_code = match nre { +// NewContractNameError::MissingInitPrefix => unsafe { +// crate::num::NonZeroI32::new_unchecked(i32::MIN + 5) +// }, +// NewContractNameError::TooLong => unsafe { +// crate::num::NonZeroI32::new_unchecked(i32::MIN + 6) +// }, +// }; +// Self { +// error_code, +// } +// } +// } + +// /// MissingDotSeparator is mapped to i32::MIN + 7, and TooLong is mapped to +// /// i32::MIN + 8. +// impl From for Reject { +// fn from(nre: NewReceiveNameError) -> Self { +// let error_code = match nre { +// NewReceiveNameError::MissingDotSeparator => unsafe { +// crate::num::NonZeroI32::new_unchecked(i32::MIN + 7) +// }, +// NewReceiveNameError::TooLong => unsafe { +// crate::num::NonZeroI32::new_unchecked(i32::MIN + 8) +// }, +// }; +// Self { +// error_code, +// } +// } +// } + +// /// # Contract state trait implementations. +// impl Seek for ContractState { +// type Err = (); + +// fn seek(&mut self, pos: SeekFrom) -> Result { +// use core::convert::TryFrom; +// use SeekFrom::*; +// match pos { +// Start(offset) => match u32::try_from(offset) { +// Ok(offset_u32) => { +// self.current_position = offset_u32; +// Ok(offset) +// } +// _ => Err(()), +// }, +// End(delta) => { +// let end = self.size(); +// if delta >= 0 { +// match u32::try_from(delta) +// .ok() +// .and_then(|x| self.current_position.checked_add(x)) +// { +// Some(offset_u32) => { +// self.current_position = offset_u32; +// Ok(u64::from(offset_u32)) +// } +// _ => Err(()), +// } +// } else { +// match delta.checked_abs().and_then(|x| u32::try_from(x).ok()) { +// Some(before) if before <= end => { +// let new_pos = end - before; +// self.current_position = new_pos; +// Ok(u64::from(new_pos)) +// } +// _ => Err(()), +// } +// } +// } +// Current(delta) => { +// let new_offset = if delta >= 0 { +// u32::try_from(delta).ok().and_then(|x| self.current_position.checked_add(x)) +// } else { +// delta +// .checked_abs() +// .and_then(|x| u32::try_from(x).ok()) +// .and_then(|x| self.current_position.checked_sub(x)) +// }; +// match new_offset { +// Some(offset) => { +// self.current_position = offset; +// Ok(u64::from(offset)) +// } +// _ => Err(()), +// } +// } +// } +// } +// } + +// impl Read for ContractState { +// fn read(&mut self, buf: &mut [u8]) -> ParseResult { +// use core::convert::TryInto; +// let len: u32 = { +// match buf.len().try_into() { +// Ok(v) => v, +// _ => return Err(ParseError::default()), +// } +// }; +// let num_read = unsafe { load_state(buf.as_mut_ptr(), len, self.current_position) }; +// self.current_position += num_read; +// Ok(num_read as usize) +// } + +// /// Read a `u32` in little-endian format. This is optimized to not +// /// initialize a dummy value before calling an external function. +// fn read_u64(&mut self) -> ParseResult { +// let mut bytes: MaybeUninit<[u8; 8]> = MaybeUninit::uninit(); +// let num_read = +// unsafe { load_state(bytes.as_mut_ptr() as *mut u8, 8, self.current_position) }; +// self.current_position += num_read; +// if num_read == 8 { +// unsafe { Ok(u64::from_le_bytes(bytes.assume_init())) } +// } else { +// Err(ParseError::default()) +// } +// } + +// /// Read a `u32` in little-endian format. This is optimized to not +// /// initialize a dummy value before calling an external function. +// fn read_u32(&mut self) -> ParseResult { +// let mut bytes: MaybeUninit<[u8; 4]> = MaybeUninit::uninit(); +// let num_read = +// unsafe { load_state(bytes.as_mut_ptr() as *mut u8, 4, self.current_position) }; +// self.current_position += num_read; +// if num_read == 4 { +// unsafe { Ok(u32::from_le_bytes(bytes.assume_init())) } +// } else { +// Err(ParseError::default()) +// } +// } + +// /// Read a `u8` in little-endian format. This is optimized to not +// /// initialize a dummy value before calling an external function. +// fn read_u8(&mut self) -> ParseResult { +// let mut bytes: MaybeUninit<[u8; 1]> = MaybeUninit::uninit(); +// let num_read = +// unsafe { load_state(bytes.as_mut_ptr() as *mut u8, 1, self.current_position) }; +// self.current_position += num_read; +// if num_read == 1 { +// unsafe { Ok(bytes.assume_init()[0]) } +// } else { +// Err(ParseError::default()) +// } +// } +// } + +// impl Write for ContractState { +// type Err = (); + +// fn write(&mut self, buf: &[u8]) -> Result { +// use core::convert::TryInto; +// let len: u32 = { +// match buf.len().try_into() { +// Ok(v) => v, +// _ => return Err(()), +// } +// }; +// if self.current_position.checked_add(len).is_none() { +// return Err(()); +// } +// let num_bytes = unsafe { write_state(buf.as_ptr(), len, self.current_position) }; +// self.current_position += num_bytes; // safe because of check above that len + pos is small enough +// Ok(num_bytes as usize) +// } +// } + +// impl HasContractState<()> for ContractState { +// type ContractStateData = (); + +// #[inline(always)] +// fn open(_: Self::ContractStateData) -> Self { +// ContractState { +// current_position: 0, +// } +// } + +// fn reserve(&mut self, len: u32) -> bool { +// let cur_size = unsafe { state_size() }; +// if cur_size < len { +// let res = unsafe { resize_state(len) }; +// res == 1 +// } else { +// true +// } +// } + +// #[inline(always)] +// fn size(&self) -> u32 { unsafe { state_size() } } + +// fn truncate(&mut self, new_size: u32) { +// let cur_size = self.size(); +// if cur_size > new_size { +// unsafe { resize_state(new_size) }; +// } +// if new_size < self.current_position { +// self.current_position = new_size +// } +// } +// } + +// /// # Trait implementations for Parameter +// impl Read for Parameter { +// fn read(&mut self, buf: &mut [u8]) -> ParseResult { +// use core::convert::TryInto; +// let len: u32 = { +// match buf.len().try_into() { +// Ok(v) => v, +// _ => return Err(ParseError::default()), +// } +// }; +// let num_read = +// unsafe { get_parameter_section(buf.as_mut_ptr(), len, self.current_position) }; +// self.current_position += num_read; +// Ok(num_read as usize) +// } +// } + +// impl HasParameter for Parameter { +// #[inline(always)] +// fn size(&self) -> u32 { unsafe { get_parameter_size() } } +// } + +// /// # Trait implementations for the chain metadata. +// impl HasChainMetadata for ChainMetaExtern { +// #[inline(always)] +// fn slot_time(&self) -> SlotTime { Timestamp::from_timestamp_millis(unsafe { get_slot_time() }) } +// } + +// impl HasPolicy for Policy { +// fn identity_provider(&self) -> IdentityProvider { self.identity_provider } + +// fn created_at(&self) -> Timestamp { self.created_at } + +// fn valid_to(&self) -> Timestamp { self.valid_to } + +// fn next_item(&mut self, buf: &mut [u8; 31]) -> Option<(AttributeTag, u8)> { +// if self.items.remaining_items == 0 { +// return None; +// } + +// let (tag_value_len, num_read) = unsafe { +// let mut tag_value_len = MaybeUninit::<[u8; 2]>::uninit(); +// // Should succeed, otherwise host violated precondition. +// let num_read = get_policy_section( +// tag_value_len.as_mut_ptr() as *mut u8, +// 2, +// self.items.current_position, +// ); +// (tag_value_len.assume_init(), num_read) +// }; +// self.items.current_position += num_read; +// if tag_value_len[1] > 31 { +// // Should not happen because all attributes fit into 31 bytes. +// return None; +// } +// let num_read = unsafe { +// get_policy_section( +// buf.as_mut_ptr(), +// u32::from(tag_value_len[1]), +// self.items.current_position, +// ) +// }; +// self.items.current_position += num_read; +// self.items.remaining_items -= 1; +// Some((AttributeTag(tag_value_len[0]), tag_value_len[1])) +// } +// } + +// /// An iterator over policies using host functions to supply the data. +// /// The main interface to using this type is via the methods of the [Iterator](https://doc.rust-lang.org/std/iter/trait.Iterator.html) +// /// and [ExactSizeIterator](https://doc.rust-lang.org/std/iter/trait.ExactSizeIterator.html) traits. +// pub struct PoliciesIterator { +// /// Position in the policies binary serialization. +// pos: u32, +// /// Number of remaining items in the stream. +// remaining_items: u16, +// } + +// impl Iterator for PoliciesIterator { +// type Item = Policy; + +// fn next(&mut self) -> Option { +// if self.remaining_items == 0 { +// return None; +// } +// // 2 for total size of this section, 4 for identity_provider, +// // 8 bytes for created_at, 8 for valid_to, and 2 for +// // the length +// let mut buf: MaybeUninit<[u8; 2 + 4 + 8 + 8 + 2]> = MaybeUninit::uninit(); +// let buf = unsafe { +// get_policy_section(buf.as_mut_ptr() as *mut u8, 2 + 4 + 8 + 8 + 2, self.pos); +// buf.assume_init() +// }; +// use convert::TryInto; +// let skip_part: [u8; 2] = buf[0..2].try_into().unwrap_abort(); +// let ip_part: [u8; 4] = buf[2..2 + 4].try_into().unwrap_abort(); +// let created_at_part: [u8; 8] = buf[2 + 4..2 + 4 + 8].try_into().unwrap_abort(); +// let valid_to_part: [u8; 8] = buf[2 + 4 + 8..2 + 4 + 8 + 8].try_into().unwrap_abort(); +// let len_part: [u8; 2] = buf[2 + 4 + 8 + 8..2 + 4 + 8 + 8 + 2].try_into().unwrap_abort(); +// let identity_provider = IdentityProvider::from_le_bytes(ip_part); +// let created_at = Timestamp::from_timestamp_millis(u64::from_le_bytes(created_at_part)); +// let valid_to = Timestamp::from_timestamp_millis(u64::from_le_bytes(valid_to_part)); +// let remaining_items = u16::from_le_bytes(len_part); +// let attributes_start = self.pos + 2 + 4 + 8 + 8 + 2; +// self.pos += u32::from(u16::from_le_bytes(skip_part)) + 2; +// self.remaining_items -= 1; +// Some(Policy { +// identity_provider, +// created_at, +// valid_to, +// items: AttributesCursor { +// current_position: attributes_start, +// remaining_items, +// }, +// }) +// } + +// fn size_hint(&self) -> (usize, Option) { +// let rem = self.remaining_items as usize; +// (rem, Some(rem)) +// } +// } + +// impl ExactSizeIterator for PoliciesIterator { +// #[inline(always)] +// fn len(&self) -> usize { self.remaining_items as usize } +// } + +// impl HasCommonData for ExternContext { +// type MetadataType = ChainMetaExtern; +// type ParamType = Parameter; +// type PolicyIteratorType = PoliciesIterator; +// type PolicyType = Policy; + +// #[inline(always)] +// fn metadata(&self) -> &Self::MetadataType { &ChainMetaExtern {} } + +// fn policies(&self) -> PoliciesIterator { +// let mut buf: MaybeUninit<[u8; 2]> = MaybeUninit::uninit(); +// let buf = unsafe { +// get_policy_section(buf.as_mut_ptr() as *mut u8, 2, 0); +// buf.assume_init() +// }; +// PoliciesIterator { +// pos: 2, // 2 because we already read 2 bytes. +// remaining_items: u16::from_le_bytes(buf), +// } +// } + +// #[inline(always)] +// fn parameter_cursor(&self) -> Self::ParamType { +// Parameter { +// current_position: 0, +// } +// } +// } + +// /// # Trait implementations for the init context +// impl HasInitContext for ExternContext { +// type InitData = (); + +// /// Create a new init context by using an external call. +// fn open(_: Self::InitData) -> Self { ExternContext::default() } + +// #[inline(always)] +// fn init_origin(&self) -> AccountAddress { +// let mut bytes: MaybeUninit<[u8; ACCOUNT_ADDRESS_SIZE]> = MaybeUninit::uninit(); +// let ptr = bytes.as_mut_ptr(); +// let address = unsafe { +// get_init_origin(ptr as *mut u8); +// bytes.assume_init() +// }; +// AccountAddress(address) +// } +// } + +// /// # Trait implementations for the receive context +// impl HasReceiveContext for ExternContext { +// type ReceiveData = (); + +// /// Create a new receive context +// fn open(_: Self::ReceiveData) -> Self { ExternContext::default() } + +// #[inline(always)] +// fn invoker(&self) -> AccountAddress { +// let mut bytes: MaybeUninit<[u8; ACCOUNT_ADDRESS_SIZE]> = MaybeUninit::uninit(); +// let ptr = bytes.as_mut_ptr(); +// let address = unsafe { +// get_receive_invoker(ptr as *mut u8); +// bytes.assume_init() +// }; +// AccountAddress(address) +// } + +// #[inline(always)] +// fn self_address(&self) -> ContractAddress { +// let mut bytes: MaybeUninit<[u8; 16]> = MaybeUninit::uninit(); +// let ptr = bytes.as_mut_ptr(); +// let address = unsafe { +// get_receive_self_address(ptr as *mut u8); +// bytes.assume_init() +// }; +// match from_bytes(&address) { +// Ok(v) => v, +// Err(_) => crate::trap(), +// } +// } + +// #[inline(always)] +// fn self_balance(&self) -> Amount { +// Amount::from_micro_gtu(unsafe { get_receive_self_balance() }) +// } + +// #[inline(always)] +// fn sender(&self) -> Address { +// let mut bytes: MaybeUninit<[u8; 33]> = MaybeUninit::uninit(); +// let ptr = bytes.as_mut_ptr() as *mut u8; +// unsafe { +// get_receive_sender(ptr); +// let tag = *ptr; +// match tag { +// 0u8 => { +// match from_bytes(core::slice::from_raw_parts(ptr.add(1), ACCOUNT_ADDRESS_SIZE)) +// { +// Ok(v) => Address::Account(v), +// Err(_) => crate::trap(), +// } +// } +// 1u8 => match from_bytes(core::slice::from_raw_parts(ptr.add(1), 16)) { +// Ok(v) => Address::Contract(v), +// Err(_) => crate::trap(), +// }, +// _ => crate::trap(), // unreachable!("Host violated precondition."), +// } +// } +// } + +// #[inline(always)] +// fn owner(&self) -> AccountAddress { +// let mut bytes: MaybeUninit<[u8; ACCOUNT_ADDRESS_SIZE]> = MaybeUninit::uninit(); +// let ptr = bytes.as_mut_ptr(); +// let address = unsafe { +// get_receive_owner(ptr as *mut u8); +// bytes.assume_init() +// }; +// AccountAddress(address) +// } +// } + +// /// #Implementations of the logger. + +// impl HasLogger for Logger { +// #[inline(always)] +// fn init() -> Self { +// Self { +// _private: (), +// } +// } + +// fn log_raw(&mut self, event: &[u8]) -> Result<(), LogError> { +// let res = unsafe { log_event(event.as_ptr(), event.len() as u32) }; +// match res { +// 1 => Ok(()), +// 0 => Err(LogError::Full), +// _ => Err(LogError::Malformed), +// } +// } +// } + +// /// #Implementation of actions. +// /// These actions are implemented by direct calls to host functions. +// impl HasActions for Action { +// #[inline(always)] +// fn accept() -> Self { +// Action { +// _private: unsafe { accept() }, +// } +// } + +// #[inline(always)] +// fn simple_transfer(acc: &AccountAddress, amount: Amount) -> Self { +// let res = unsafe { simple_transfer(acc.0.as_ptr(), amount.micro_gtu) }; +// Action { +// _private: res, +// } +// } + +// #[inline(always)] +// fn send_raw( +// ca: &ContractAddress, +// receive_name: ReceiveName, +// amount: Amount, +// parameter: &[u8], +// ) -> Self { +// let receive_bytes = receive_name.get_chain_name().as_bytes(); +// let res = unsafe { +// prims::send( +// ca.index, +// ca.subindex, +// receive_bytes.as_ptr(), +// receive_bytes.len() as u32, +// amount.micro_gtu, +// parameter.as_ptr(), +// parameter.len() as u32, +// ) +// }; +// Action { +// _private: res, +// } +// } + +// #[inline(always)] +// fn and_then(self, then: Self) -> Self { +// let res = unsafe { combine_and(self._private, then._private) }; +// Action { +// _private: res, +// } +// } + +// #[inline(always)] +// fn or_else(self, el: Self) -> Self { +// let res = unsafe { combine_or(self._private, el._private) }; +// Action { +// _private: res, +// } +// } +// } + +// /// Allocates a Vec of bytes prepended with its length as a `u32` into memory, +// /// and prevents them from being dropped. Returns the pointer. +// /// Used to pass bytes from a Wasm module to its host. +// #[doc(hidden)] +// pub fn put_in_memory(input: &[u8]) -> *mut u8 { +// let bytes_length = input.len() as u32; +// let mut bytes = to_bytes(&bytes_length); +// bytes.extend_from_slice(input); +// let ptr = bytes.as_mut_ptr(); +// #[cfg(feature = "std")] +// ::std::mem::forget(bytes); +// #[cfg(not(feature = "std"))] +// core::mem::forget(bytes); +// ptr +// } + +// /// Wrapper for +// /// [HasActions::send_raw](./trait.HasActions.html#tymethod.send_raw), which +// /// automatically serializes the parameter. Note that if the parameter is +// /// already a byte array or convertible to a byte array without allocations it +// /// is preferrable to use [send_raw](./trait.HasActions.html#tymethod.send_raw). +// /// It is more efficient and avoids memory allocations. +// pub fn send( +// ca: &ContractAddress, +// receive_name: ReceiveName, +// amount: Amount, +// parameter: &P, +// ) -> A { +// let param_bytes = to_bytes(parameter); +// A::send_raw(ca, receive_name, amount, ¶m_bytes) +// } + +// impl UnwrapAbort for Result { +// type Unwrap = A; + +// #[inline] +// fn unwrap_abort(self) -> Self::Unwrap { +// match self { +// Ok(x) => x, +// Err(_) => crate::trap(), +// } +// } +// } + +// #[cfg(not(feature = "std"))] +// use core::fmt; +// #[cfg(feature = "std")] +// use std::fmt; + +// impl ExpectReport for Result { +// type Unwrap = A; + +// fn expect_report(self, msg: &str) -> Self::Unwrap { +// match self { +// Ok(x) => x, +// Err(e) => crate::fail!("{}: {:?}", msg, e), +// } +// } +// } + +// impl ExpectErrReport for Result { +// type Unwrap = E; + +// fn expect_err_report(self, msg: &str) -> Self::Unwrap { +// match self { +// Ok(a) => crate::fail!("{}: {:?}", msg, a), +// Err(e) => e, +// } +// } +// } + +// impl UnwrapAbort for Option { +// type Unwrap = A; + +// #[inline(always)] +// fn unwrap_abort(self) -> Self::Unwrap { self.unwrap_or_else(|| crate::trap()) } +// } + +// impl ExpectReport for Option { +// type Unwrap = A; + +// fn expect_report(self, msg: &str) -> Self::Unwrap { +// match self { +// Some(v) => v, +// None => crate::fail!("{}", msg), +// } +// } +// } + +// impl ExpectNoneReport for Option { +// fn expect_none_report(self, msg: &str) { +// if let Some(x) = self { +// crate::fail!("{}: {:?}", msg, x) +// } +// } +// } diff --git a/concordium/src/concordium_prims.rs b/concordium/src/concordium_prims.rs new file mode 100644 index 0000000..d786193 --- /dev/null +++ b/concordium/src/concordium_prims.rs @@ -0,0 +1,123 @@ +#![feature(register_tool)] +#![register_tool(hax)] + +#[hax_lib_macros::exclude] +extern crate hax_lib_macros; +#[hax_lib_macros::exclude] +use hax_lib_macros::*; + +#[exclude] +use crate::*; + +extern "C" { + pub(crate) fn accept() -> u32; +} + +extern "C" { + // Basic action to send tokens to an account. + pub(crate) fn simple_transfer(addr_bytes: *const u8, amount: u64) -> u32; +} + +extern "C" { + // Send a message to a smart contract. + pub// (crate) + fn send( + addr_index: u64, + addr_subindex: u64, + receive_name: *const u8, + receive_name_len: u32, + amount: u64, + parameter: *const u8, + parameter_len: u32, + ) -> u32; +} + +extern "C" { + // Combine two actions using normal sequencing. This is using the stack of + // actions already produced. + pub(crate) fn combine_and(l: u32, r: u32) -> u32; +} + +extern "C" { + // Combine two actions using normal sequencing. This is using the stack of + // actions already produced. + pub(crate) fn combine_or(l: u32, r: u32) -> u32; +} + +extern "C" { + // Get the size of the parameter to the method (either init or receive). + pub(crate) fn get_parameter_size() -> u32; +} + +extern "C" { + // Write a section of the parameter to the given location. Return the number + // of bytes written. The location is assumed to contain enough memory to + // write the requested length into. + pub(crate) fn get_parameter_section(param_bytes: *mut u8, length: u32, offset: u32) -> u32; +} + +extern "C" { + // Write a section of the policy to the given location. Return the number + // of bytes written. The location is assumed to contain enough memory to + // write the requested length into. + pub(crate) fn get_policy_section(policy_bytes: *mut u8, length: u32, offset: u32) -> u32; +} + +extern "C" { + // Add a log item. Return values are + // - -1 if logging failed due to the message being too long + // - 0 if the log is already full + // - 1 if data was successfully logged. + pub(crate) fn log_event(start: *const u8, length: u32) -> i32; +} + +extern "C" { + pub(crate) fn load_state(start: *mut u8, length: u32, offset: u32) -> u32; +} + +extern "C" { + pub(crate) fn write_state(start: *mut u8, length: u32, offset: u32) -> u32; +} + +extern "C" { + // Resize state to the new value (truncate if new size is smaller). Return 0 if + // this was unsuccesful (new state too big), or 1 if successful. + pub(crate) fn resize_state(new_size: u32) -> u32; // returns 0 or 1. + // get current state size in bytes. +} + +extern "C" { + pub(crate) fn state_size() -> u32; +} + +extern "C" { + // Getter for the init context. + /// Address of the sender, 32 bytes + pub(crate) fn get_init_origin(start: *mut u8); +} + +extern "C" { + /// Invoker of the top-level transaction, AccountAddress. + pub(crate) fn get_receive_invoker(start: *mut u8); +} + +extern "C" { + /// Address of the contract itself, ContractAddress. + pub(crate) fn get_receive_self_address(start: *mut u8); +} + +extern "C" { + /// Self-balance of the contract, returns the amount + pub(crate) fn get_receive_self_balance() -> u64; +} + +extern "C" { + /// Immediate sender of the message (either contract or account). + pub(crate) fn get_receive_sender(start: *mut u8); +} + +extern "C" { + // Getters for the chain meta data + /// Slot time (in milliseconds) from chain meta data + pub(crate) fn get_slot_time() -> u64; +} diff --git a/concordium/src/concordium_traits.rs b/concordium/src/concordium_traits.rs new file mode 100644 index 0000000..e76ff3f --- /dev/null +++ b/concordium/src/concordium_traits.rs @@ -0,0 +1,270 @@ +// //! This module implements traits for the contract interface. +// //! This allows setting-up mock objects for testing individual +// //! contract invocations. + +use crate::*; + +/// Objects which can access parameters to contracts. +/// +/// This trait has a Read supertrait which means that structured parameters can +/// be directly deserialized by using `.get()` function from the `Get` trait. +/// +/// The reuse of `Read` methods is the reason for the slightly strange choice of +/// methods of this trait. +pub trait HasParameter: Read { + /// Get the size of the parameter to the method. + fn size(&self) -> u32; +} + +/// Objects which can access chain metadata. +pub trait HasChainMetadata { + /// Get time in milliseconds at the beginning of this block. + fn slot_time(&self) -> SlotTime; +} + + +/// A type which has access to a policy of a credential. +/// Since policies can be large this is deliberately written in a relatively +/// low-level style to enable efficient traversal of all the attributes without +/// any allocations. +pub trait HasPolicy { + /// Identity provider who signed the identity object the credential is + /// derived from. + fn identity_provider(&self) -> IdentityProvider; + /// Beginning of the month in milliseconds since unix epoch when the + /// credential was created. + fn created_at(&self) -> Timestamp; + /// Beginning of the month where the credential is no longer valid, in + /// milliseconds since unix epoch. + fn valid_to(&self) -> Timestamp; + /// Get the next attribute, storing it in the provided buffer. + /// The return value, if `Some`, is a pair of an attribute tag, and the + /// length, `n` of the attribute value. In this case, the attribute + /// value is written in the first `n` bytes of the provided buffer. The + /// rest of the buffer is unchanged. + /// + /// The reason this function is added here, and we don't simply implement + /// an Iterator for this type is that with the supplied buffer we can + /// iterate through the elements more efficiently, without any allocations, + /// the consumer being responsible for allocating the buffer. + fn next_item(self, buf: [u8; 31]) -> (Option<(AttributeTag, u8)>, [u8; 31], Self); +} + + +/// Common data accessible to both init and receive methods. +pub trait HasCommonData { + type PolicyType: HasPolicy; + type MetadataType: HasChainMetadata; + type ParamType: HasParameter + Read; + type PolicyIteratorType: ExactSizeIterator; + /// Policies of the sender of the message. + /// For init methods this is the would-be creator of the contract, + /// for the receive this is the policies of the immediate sender. + /// + /// In the latter case, if the sender is an account then it is the policies + /// of the account, if it is a contract then it is the policies of the + /// creator of the contract. + fn policies(&self) -> Self::PolicyIteratorType; + /// Get the reference to chain metadata + fn metadata(&self) -> &Self::MetadataType; + /// Get the cursor to the parameter. + fn parameter_cursor(&self) -> Self::ParamType; +} + + +/// Types which can act as init contexts. +pub trait HasInitContext: HasCommonData { + /// Data needed to open the context. + type InitData; + /// Open the init context for reading and accessing values. + fn open(data: Self::InitData) -> Self; + /// Who invoked this init call. + fn init_origin(&self) -> AccountAddress; +} + + +/// Types which can act as receive contexts. +pub trait HasReceiveContext: HasCommonData { + type ReceiveData; + + /// Open the receive context for reading and accessing values. + fn open(data: Self::ReceiveData) -> Self; + /// Who is the account that initiated the top-level transaction this + /// invocation is a part of. + fn invoker(&self) -> AccountAddress; + /// The address of the contract being invoked. + fn self_address(&self) -> ContractAddress; + /// Balance on the contract before the call was made. + fn self_balance(&self) -> Amount; + /// The immediate sender of the message. In general different from the + /// invoker. + fn sender(&self) -> Address; + /// Account which created the contract instance. + fn owner(&self) -> AccountAddress; +} + + +/// A type that can serve as the contract state type. +pub trait HasContractState +where + Self: Read, + Self: Write, + Self: Seek, { + type ContractStateData; + /// Open the contract state. Only one instance can be opened at the same + /// time. + fn open(_: Self::ContractStateData) -> Self; + + /// Get the current size of contract state. + fn size(&self) -> u32; + + /// Truncate the state to the given size. If the given size is more than the + /// current state size this operation does nothing. The new position is at + /// most at the end of the stream. + fn truncate(self, new_size: u32) -> Self; + + /// Make sure that the memory size is at least that many bytes in size. + /// Returns true iff this was successful. The new bytes are initialized as + /// 0. + fn reserve(self, len: u32) -> (bool, Self); +} + + +/// Objects which can serve as loggers. +/// +/// Logging functionality can be used by smart contracts to record events that +/// might be of interest to external parties. These events are not used on the +/// chain, and cannot be observed by other contracts, but they are stored by the +/// node, and can be queried to provide information to off-chain actors. +pub trait HasLogger { + /// Initialize a logger. + fn init() -> Self; + + /// Log the given slice as-is. If logging is not successful an error will be + /// returned. + fn log_raw(self, event: &[u8]) -> (Result<(), LogError>, Self); + + // #[inline(always)] + // /// Log a serializable event by serializing it with a supplied serializer. + // fn log(self, event: &S) -> (Result<(), LogError>, Self); + // { + // let mut out = Vec::new(); + // // if event.serial(&mut out).is_err() { + // // trap(); // should not happen + // // } + // self.log_raw(&out) + // } +} + + +/// An object that can serve to construct actions. +/// +/// The actions that a smart contract can produce as a +/// result of its execution. These actions form a tree and are executed by +/// the scheduler in the predefined order. +pub trait HasActions { + /// Default accept action. + fn accept() -> Self; + + /// Send a given amount to an account. + fn simple_transfer(acc: &AccountAddress, amount: Amount) -> Self; + + /// Send a message to a contract. + fn send_raw( + ca: &ContractAddress, + receive_name: ReceiveName, + amount: Amount, + parameter: &[u8], + ) -> Self; + + /// If the execution of the first action succeeds, run the second action + /// as well. + fn and_then(self, then: Self) -> Self; + + /// If the execution of the first action fails, try the second. + fn or_else(self, el: Self) -> Self; +} + + +/// Add optimized unwrap behaviour that aborts the process instead of +/// panicking. +pub trait UnwrapAbort { + /// The underlying result type of the unwrap, in case of success. + type Unwrap; + /// Unwrap or call [trap](../fn.trap.html). In contrast to + /// the unwrap methods on [Option::unwrap](https://doc.rust-lang.org/std/option/enum.Option.html#method.unwrap) + /// this method will tend to produce smaller code, at the cost of the + /// ability to handle the panic. + /// This is intended to be used only in `Wasm` code, where panics cannot be + /// handled anyhow. + fn unwrap_abort(self) -> Self::Unwrap; +} + + +/// Analogue of the `expect` methods on types such as [Option](https://doc.rust-lang.org/std/option/enum.Option.html), +/// but useful in a Wasm setting. +pub trait ExpectReport { + type Unwrap; + /// Like the default `expect` on, e.g., `Result`, but calling + /// [fail](macro.fail.html) with the given message, instead of `panic`. + fn expect_report(self, msg: &str) -> Self::Unwrap; +} + + +/// Analogue of the `expect_err` methods on [Result](https://doc.rust-lang.org/std/result/enum.Result.html), +/// but useful in a Wasm setting. +pub trait ExpectErrReport { + type Unwrap; + /// Like the default `expect_err` on, e.g., `Result`, but calling + /// [fail](macro.fail.html) with the given message, instead of `panic`. + fn expect_err_report(self, msg: &str) -> Self::Unwrap; +} + + +/// Analogue of the `expect_none` methods on [Option](https://doc.rust-lang.org/std/option/enum.Option.html), +/// but useful in a Wasm setting. +pub trait ExpectNoneReport { + /// Like the default `expect_none_report` on, e.g., `Option`, but calling + /// [fail](macro.fail.html) with the given message, instead of `panic`. + fn expect_none_report(self, msg: &str); +} + + +/// The `SerialCtx` trait provides a means of writing structures into byte-sinks +/// (`Write`) using contextual information. +/// The contextual information is: +/// +/// - `size_length`: The number of bytes used to record the length of the +/// data. +pub trait SerialCtx { + /// Attempt to write the structure into the provided writer, failing if + /// if the length cannot be represented in the provided `size_length` or + /// only part of the structure could be written. + /// + /// NB: We use Result instead of Option for better composability with other + /// constructs. + fn serial_ctx( + &self, + size_length: schema::SizeLength, + out: &W, + ) -> (Result<(), W::Err>, W); +} + + +/// The `DeserialCtx` trait provides a means of reading structures from +/// byte-sources (`Read`) using contextual information. +/// The contextual information is: +/// +/// - `size_length`: The expected number of bytes used for the length of the +/// data. +/// - `ensure_ordered`: Whether the ordering should be ensured, for example +/// that keys in `BTreeMap` and `BTreeSet` are in strictly increasing order. +pub trait DeserialCtx: Sized { + /// Attempt to read a structure from a given source and context, failing if + /// an error occurs during deserialization or reading. + fn deserial_ctx( + size_length: schema::SizeLength, + ensure_ordered: bool, + source: &R, + ) -> (ParseResult, R); +} diff --git a/concordium/src/concordium_types.rs b/concordium/src/concordium_types.rs new file mode 100644 index 0000000..ae08fd4 --- /dev/null +++ b/concordium/src/concordium_types.rs @@ -0,0 +1,342 @@ +#![feature(register_tool)] +#![register_tool(hax)] + +#[hax_lib_macros::exclude] +extern crate hax_lib_macros; +#[hax_lib_macros::exclude] +use hax_lib_macros::*; + +#[exclude] +use crate::num::*; + +/// A type representing the constract state bytes. +#[derive(Default)] +pub struct ContractState { + pub(crate) current_contract_state_position: u32, +} + +#[derive(Default)] +/// A type representing the parameter to init and receive methods. +pub struct Parameter { + pub(crate) current_parameter_position: u32, +} + +/// A type representing the attributes, lazily acquired from the host. +#[derive(Default)] +pub struct AttributesCursor { + /// Current position of the cursor, starting from 0. + /// Note that this is only for the variable attributes. + /// `created_at` and `valid_to` will require. + pub(crate) current_attribute_cursor_position: u32, + /// The number of remaining items in the policy. + pub(crate) remaining_items: u16, +} + +/// A type representing the logger. +#[derive(Default)] +pub struct Logger { + pub(crate) _private_logger: (), +} + +// /// Errors that can occur during logging. +#[derive(Debug, Copy, Clone, Eq, PartialEq)] +#[repr(u8)] +pub enum LogError { + /// The log is full. + Full, + /// The message to log was malformed (e.g., too long) + Malformed, +} + +/// Error triggered when a non-zero amount of CCD is sent to a contract +/// init or receive function that is not marked as `payable`. +#[derive(Clone, Copy, Debug)] +pub struct NotPayableError; + +/// Actions that can be produced at the end of a contract execution. This +/// type is deliberately not cloneable so that we can enforce that +/// `and_then` and `or_else` can only be used when more than one event is +/// created. +/// +/// This type is marked as `must_use` since functions that produce +/// values of the type are effectful. +#[must_use] +pub struct Action { + pub(crate) _private_action: u32, +} + +impl Action { + pub fn tag(&self) -> u32 { + self._private_action + } +} + +/// An error message, signalling rejection of a smart contract invocation. +/// The client will see the error code as a reject reason; if a schema is +/// provided, the error message corresponding to the error code will be +/// displayed. The valid range for an error code is from i32::MIN to -1. +#[derive(Debug, Eq, PartialEq)] // TODO: Creusot issue re-add "Debug" attribute +#[repr(transparent)] +// #[hax_lib_macros::hax_attributes] +pub struct Reject { + // #[refine(true)] + pub error_code: NonZeroI32, +} + +// /// Default error is i32::MIN. +// impl Default for Reject { +// #[inline(always)] +// #[exclude] // TODO: Unsafe +// fn default() -> Self { +// Self { +// error_code: unsafe {NonZeroI32::new_unchecked(i32::MIN)}, +// } +// } +// } + +// impl Reject { +// /// This returns `None` for all values >= 0 and `Some` otherwise. +// #[exclude] +// pub fn new(x: i32) -> Option { +// if x < 0 { +// let error_code = unsafe { NonZeroI32::new_unchecked(x) }; +// Some(Reject { error_code }) +// } else { +// None +// } +// } +// } + +// Macros for failing a contract function + +/// The `bail` macro can be used for cleaner error handling. If the function has +/// result type `Result` invoking `bail` will terminate execution early with an +/// error. +/// If an argument is supplied, this will be used as the error, otherwise it +/// requires the type `E` in `Result<_, E>` to implement the `Default` trait. +#[macro_export] +macro_rules! bail { + () => {{ + return Err(Default::default()); + }}; + ($arg:expr) => {{ + // format_err!-like formatting + // logs are only retained in case of rejection when testing. + return Err($arg); + }}; +} + +/// The `ensure` macro can be used for cleaner error handling. It is analogous +/// to `assert`, but instead of panicking it uses `bail` to terminate execution +/// of the function early. +#[macro_export] +macro_rules! ensure { + ($p:expr) => { + if !$p { + $crate::bail!(); + } + }; + ($p:expr, $arg:expr) => {{ + if !$p { + $crate::bail!($arg); + } + }}; +} + +/// ## Variants of `ensure` for ease of use in certain contexts. +/// Ensure the first two arguments are equal, using `bail` otherwise. +#[macro_export] +macro_rules! ensure_eq { + ($l:expr, $r:expr) => { + $crate::ensure!($l == $r) + }; + ($l:expr, $r:expr, $arg:expr) => { + $crate::ensure!($l == $r, $arg) + }; +} + +#[macro_export] +/// Ensure the first two arguments are __not__ equal, using `bail` otherwise. +macro_rules! ensure_ne { + ($l:expr, $r:expr) => { + $crate::ensure!($l != $r) + }; + ($l:expr, $r:expr, $arg:expr) => { + $crate::ensure!($l != $r, $arg) + }; +} + +// Macros for failing a test + +/// The `fail` macro is used for testing as a substitute for the panic macro. +/// It reports back error information to the host. +/// Used only in testing. +#[cfg(feature = "std")] +#[macro_export] +macro_rules! fail { + () => { + { + $crate::test_infrastructure::report_error("", file!(), line!(), column!()); + panic!() + } + }; + ($($arg:tt),+) => { + { + let msg = format!($($arg),+); + $crate::test_infrastructure::report_error(&msg, file!(), line!(), column!()); + panic!("{}", msg) + } + }; +} + +/// The `fail` macro is used for testing as a substitute for the panic macro. +/// It reports back error information to the host. +/// Used only in testing. +#[cfg(not(feature = "std"))] +#[macro_export] +macro_rules! fail { + () => { + { + $crate::test_infrastructure::report_error("", file!(), line!(), column!()); + panic!() + } + }; + ($($arg:tt),+) => { + { + let msg = &$crate::alloc::format!($($arg),+); + $crate::test_infrastructure::report_error(&msg, file!(), line!(), column!()); + panic!("{}", msg) + } + }; +} + +/// The `claim` macro is used for testing as a substitute for the assert macro. +/// It checks the condition and if false it reports back an error. +/// Used only in testing. +#[macro_export] +macro_rules! claim { + ($cond:expr) => { + if !$cond { + $crate::fail!() + } + }; + ($cond:expr,) => { + if !$cond { + $crate::fail!() + } + }; + ($cond:expr, $($arg:tt),+) => { + if !$cond { + $crate::fail!($($arg),+) + } + }; +} + +/// Ensure the first two arguments are equal, just like `assert_eq!`, otherwise +/// reports an error. Used only in testing. +#[macro_export] +macro_rules! claim_eq { + ($left:expr, $right:expr) => { + $crate::claim!($left == $right, "left and right are not equal\nleft: {:?}\nright: {:?}", $left, $right) + }; + ($left:expr, $right:expr,) => { + $crate::claim_eq!($left, $right) + }; + ($left:expr, $right:expr, $($arg:tt),+) => { + $crate::claim!($left == $right, $($arg),+) + }; +} + +/// Ensure the first two arguments are *not* equal, just like `assert_ne!`, +/// otherwise reports an error. +/// Used only in testing. +#[macro_export] +macro_rules! claim_ne { + ($left:expr, $right:expr) => { + $crate::claim!($left != $right) + }; + ($left:expr, $right:expr,) => { + $crate::claim!($left != $right) + }; + ($left:expr, $right:expr, $($arg:tt),+) => { + $crate::claim!($left != $right, $($arg),+) + }; +} + +/// The expected return type of the receive method of a smart contract. +/// +/// Optionally, to define a custom type for error instead of using +/// Reject, allowing to track the reason for rejection, *but only in unit +/// tests*. +/// +/// See also the documentation for [bail!](macro.bail.html) for how to use +/// custom error types. +/// +/// # Example +/// Defining a custom error type +/// // ```rust +/// // enum MyCustomError { +/// // SomeError +/// // } +/// // +/// // #[receive(contract = "mycontract", name = "receive")] +/// // fn contract_receive( +/// // ctx: &R, +/// // receive_amount: Amount, +/// // logger: &mut L, +/// // state: &mut State, +/// // ) -> Result { ... } +/// // ``` +pub type ReceiveResult = Result; + +/// The expected return type of the init method of the smart contract, +/// parametrized by the state type of the smart contract. +/// +/// Optionally, to define a custom type for error instead of using Reject, +/// allowing the track the reason for rejection, *but only in unit tests*. +/// +/// See also the documentation for [bail!](macro.bail.html) for how to use +/// custom error types. +/// +/// # Example +/// Defining a custom error type +/// // ```rust +/// // enum MyCustomError { +/// // SomeError +/// // } +/// // +/// // #[init(contract = "mycontract")] +/// // fn contract_init( +/// // ctx: &R, +/// // receive_amount: Amount, +/// // logger: &mut L, +/// // ) -> Result { ... } +/// // ``` +pub type InitResult = Result; + +pub(crate) mod sealed { + use super::*; + /// Marker trait intended to indicate which context type we have. + /// This is deliberately a sealed trait, so that it is only implementable + /// by types in this crate. + pub trait ContextType {} + impl ContextType for InitContextExtern {} + impl ContextType for ReceiveContextExtern {} +} + +/// Context backed by host functions. +#[derive(Default)] +#[doc(hidden)] +pub struct ExternContext { + marker: crate::marker::PhantomData, +} + +#[doc(hidden)] +pub struct ChainMetaExtern {} + +#[derive(Default)] +#[doc(hidden)] +pub struct InitContextExtern; +#[derive(Default)] +#[doc(hidden)] +pub struct ReceiveContextExtern; diff --git a/concordium/src/constants.rs b/concordium/src/constants.rs new file mode 100644 index 0000000..23d5262 --- /dev/null +++ b/concordium/src/constants.rs @@ -0,0 +1,8 @@ +/// Maximum size of the contract state in bytes. +pub const MAX_CONTRACT_STATE_SIZE: u32 = 16384u32; + +/// Maximum log size. +pub const MAX_LOG_SIZE: usize = 512usize; + +/// Maximum number of log items. +pub const MAX_NUM_LOGS: usize = 64usize; diff --git a/concordium/src/test_infrastructure.rs b/concordium/src/test_infrastructure.rs new file mode 100644 index 0000000..f4b43e6 --- /dev/null +++ b/concordium/src/test_infrastructure.rs @@ -0,0 +1,846 @@ +//! The test infrastructure module provides alternative implementations of +//! `HasInitContext`, `HasReceiveContext`, `HasParameter`, `HasActions`, and +//! `HasContractState` traits intended for testing. +//! +//! They allow writing unit tests directly in contract modules with little to no +//! external tooling, depending on what is required. +//! +//! +//! # Example +//! +//! ```rust +//! // Some contract +//! #[init(contract = "noop")] +//! fn contract_init( +//! ctx: &I, +//! ) -> InitResult { ... } +//! +//! #[receive(contract = "noop", name = "receive", payable, enable_logger)] +//! fn contract_receive( +//! ctx: &R, +//! amount: Amount, +//! logger: &mut L, +//! state: &mut State, +//! ) -> ReceiveResult { ... } +//! +//! #[cfg(test)] +//! mod tests { +//! use super::*; +//! use concordium_sc_base::test_infrastructure::*; +//! #[test] +//! fn test_init() { +//! let mut ctx = InitContextTest::empty(); +//! ctx.set_init_origin(AccountAddress([0u8; 32])); +//! ... +//! let result = contract_init(&ctx); +//! claim!(...) +//! ... +//! } +//! +//! #[test] +//! fn test_receive() { +//! let mut ctx = ReceiveContextTest::empty(); +//! ctx.set_owner(AccountAddress([0u8; 32])); +//! ... +//! let mut logger = LogRecorder::init(); +//! let result: ReceiveResult = contract_receive(&ctx, 0, &mut logger, state); +//! claim!(...) +//! ... +//! } +//! } +//! ``` +#[cfg(not(feature = "hacspec"))] +use crate::{constants::MAX_CONTRACT_STATE_SIZE, *}; + +#[cfg(not(feature = "hacspec"))] +#[cfg(not(feature = "std"))] +use alloc::boxed::Box; +#[cfg(not(feature = "hacspec"))] +use convert::TryInto; +#[cfg(not(feature = "hacspec"))] +#[cfg(not(feature = "std"))] +use core::{cmp, num}; +#[cfg(not(feature = "hacspec"))] +#[cfg(feature = "std")] +use std::{boxed::Box, cmp, num}; + +#[cfg(not(feature = "hacspec"))] +/// Placeholder for the context chain meta data. +/// All the fields are optionally set and the getting an unset field will result +/// in test failing. +/// For most cases it is used as part of either +/// [`InitContextTest`](struct.InitContextTest.html) or +/// [`ReceiveContextTest`](struct.ReceiveContextTest.html). +/// Use only in unit tests! +/// +/// Defaults to having all of the fields unset +#[derive(Default, Clone)] +pub struct ChainMetaTest { + pub(crate) slot_time: Option, +} + +#[cfg(not(feature = "hacspec"))] +/// Policy type used by init and receive contexts for testing. +/// This type should not be used directly, but rather through +/// its `HasPolicy` interface. +#[derive(Debug, Clone)] +pub struct TestPolicy { + /// Current position in the vector of policies. Used to implement + /// `next_item`. + position: usize, + policy: OwnedPolicy, +} + +#[cfg(not(feature = "hacspec"))] +impl TestPolicy { + fn new(policy: OwnedPolicy) -> Self { + Self { + position: 0, + policy, + } + } +} + +#[cfg(not(feature = "hacspec"))] +/// Placeholder for the common data shared between the `InitContext` and +/// `ReceiveContext`. This type is a technicality, see `InitContext` and +/// `ReceiveContext` for the types to use. +/// +/// # Default +/// Defaults to having all the fields unset, and constructing +/// [`ChainMetaTest`](struct.ChainMetaTest.html) using default. +#[derive(Default, Clone)] +#[doc(hidden)] +pub struct CommonDataTest<'a> { + pub(crate) metadata: ChainMetaTest, + pub(crate) parameter: Option<&'a [u8]>, + /// Policy of the creator. We keep the `Option` wrapper + /// in order that the user can be warned that they are using a policy. + /// Thus there is a distinction between `Some(Vec::new())` and `None`. + pub(crate) policies: Option>, +} + +#[cfg(not(feature = "hacspec"))] +/// Context used for testing. The type parameter C is used to determine whether +/// this will be an init or receive context. +#[derive(Default, Clone)] +pub struct ContextTest<'a, C> { + pub(crate) common: CommonDataTest<'a>, + pub(crate) custom: C, +} + +/// Placeholder for the initial context. All the fields can be set optionally +/// and the getting an unset field will result in calling +/// [`fail!`](../macro.fail.html). Use only in tests! +/// +/// # Setters +/// Every field has a setter function prefixed with `set_`. + +/// ### Example +/// Creating an empty context and setting the `init_origin`. +/// ``` +/// let mut ctx = InitContextTest::empty(); +/// ctx.set_init_origin(AccountAddress([0u8; 32])); +/// ``` +/// ## Set chain meta data +/// Chain meta data is set using setters on the context or by setters on a +/// mutable reference of [`ChainMetaTest`](struct.ChainMetaTest.html). +/// +/// ### Example +/// Creating an empty context and setting the `slot_time` metadata. +/// ``` +/// let mut ctx = InitContextTest::empty(); +/// ctx.set_metadata_slot_time(1609459200); +/// ``` +/// or +/// ``` +/// let mut ctx = InitContextTest::empty(); +/// ctx.metadata_mut().set_slot_time(1609459200); +/// ``` +/// +/// # Use case example +/// +/// ```rust +/// #[init(contract = "noop")] +/// fn contract_init( +/// ctx: &I, +/// _amount: Amount, +/// _logger: &mut L, +/// ) -> InitResult<()> { +/// let init_origin = ctx.init_origin(); +/// let parameter: SomeParameterType = ctx.parameter_cursor().get()?; +/// Ok(()) +/// } +/// +/// #[cfg(test)] +/// mod tests { +/// use super::*; +/// use concordium_sc_base::test_infrastructure::*; +/// #[test] +/// fn test() { +/// let mut ctx = InitContextTest::empty(); +/// ctx.set_init_origin(AccountAddress([0u8; 32])); +/// ... +/// let result = contract_init(&ctx, 0, &mut logger); +/// // Reads the init_origin without any problems. +/// // But then fails because the parameter is not set. +/// } +/// } +/// ``` +#[cfg(not(feature = "hacspec"))] +pub type InitContextTest<'a> = ContextTest<'a, InitOnlyDataTest>; + +#[cfg(not(feature = "hacspec"))] +#[derive(Default)] +#[doc(hidden)] +pub struct InitOnlyDataTest { + init_origin: Option, +} + +/// Placeholder for the receiving context. All the fields can be set optionally +/// and the getting an unset field will result in calling +/// [`fail!`](../macro.fail.html). Use only in tests! +/// +/// # Setters +/// Every field have a setter function prefixed with `set_`. +/// +/// ### Example +/// Creating an empty context and setting the `init_origin`. +/// ``` +/// let owner = AccountAddress([0u8; 32]); +/// let mut ctx = ReceiveContextTest::empty(); +/// ctx.set_owner(owner); +/// ctx.set_sender(Address::Account(owner)); +/// ``` +/// ## Set chain meta data +/// Chain meta data is set using setters on the context or by setters on a +/// mutable reference of [`ChainMetaTest`](struct.ChainMetaTest.html). +/// +/// ### Example +/// Creating an empty context and setting the `slot_time` metadata. +/// ``` +/// let mut ctx = ReceiveContextTest::empty(); +/// ctx.set_metadata_slot_time(1609459200); +/// ``` +/// or +/// ``` +/// let mut ctx = ReceiveContextTest::empty(); +/// ctx.metadata_mut().set_slot_time(1609459200); +/// ``` +/// +/// # Use case example +/// Creating a context for running unit tests +/// ```rust +/// #[receive(contract = "mycontract", name = "receive")] +/// fn contract_receive( +/// ctx: &R, +/// amount: Amount, +/// logger: &mut L, +/// state: &mut State, +/// ) -> ReceiveResult { +/// ensure!(ctx.sender().matches_account(&ctx.owner()), "Only the owner can increment."); +/// Ok(A::accept()) +/// } +/// +/// #[cfg(test)] +/// mod tests { +/// use super::*; +/// use concordium_sc_base::test_infrastructure::*; +/// #[test] +/// fn test() { +/// let owner = AccountAddress([0u8; 32]); +/// let mut ctx = ReceiveContextTest::empty(); +/// ctx.set_owner(owner); +/// ctx.set_sender(Address::Account(owner)); +/// ... +/// let result: ReceiveResult = contract_receive(&ctx, 0, &mut logger, state); +/// } +/// } +/// ``` +#[cfg(not(feature = "hacspec"))] +pub type ReceiveContextTest<'a> = ContextTest<'a, ReceiveOnlyDataTest>; + +#[cfg(not(feature = "hacspec"))] +#[derive(Default, Clone)] +#[doc(hidden)] +pub struct ReceiveOnlyDataTest { + pub(crate) invoker: Option, + pub(crate) self_address: Option, + pub(crate) self_balance: Option, + pub(crate) sender: Option
, + pub(crate) owner: Option, +} + +#[cfg(not(feature = "hacspec"))] +// Setters for testing-context +impl ChainMetaTest { + /// Create an `ChainMetaTest` where every field is unset, and getting any of + /// the fields will result in [`fail!`](../macro.fail.html). + pub fn empty() -> Self { Default::default() } + + /// Set the block slot time + pub fn set_slot_time(&mut self, value: SlotTime) -> &mut Self { + self.slot_time = Some(value); + self + } +} + +#[cfg(not(feature = "hacspec"))] +impl<'a, C> ContextTest<'a, C> { + /// Push a new sender policy to the context. + /// When the first policy is pushed this will set the policy vector + /// to 'Some', even if it was undefined previously. + pub fn push_policy(&mut self, value: OwnedPolicy) -> &mut Self { + if let Some(policies) = self.common.policies.as_mut() { + policies.push(TestPolicy::new(value)); + } else { + self.common.policies = Some(vec![TestPolicy::new(value)]) + } + self + } + + /// Set the policies to be defined, but an empty list. + /// Such a situation can not realistically happen on the chain, + /// but we provide functionality for it in case smart contract + /// writers wish to program defensively. + pub fn empty_policies(&mut self) -> &mut Self { + self.common.policies = Some(Vec::new()); + self + } + + pub fn set_parameter(self, value: &'a [u8]) -> Self { + Self { common: CommonDataTest { parameter: Some(value), ..self.common }, ..self } + } + + /// Get a mutable reference to the chain meta data placeholder + pub fn metadata_mut(&mut self) -> &mut ChainMetaTest { &mut self.common.metadata } + + /// Set the metadata block slot time + pub fn set_metadata_slot_time(&mut self, value: SlotTime) -> &mut Self { + self.metadata_mut().set_slot_time(value); + self + } +} + +#[cfg(not(feature = "hacspec"))] +impl<'a> InitContextTest<'a> { + /// Create an `InitContextTest` where every field is unset, and getting any + /// of the fields will result in [`fail!`](../macro.fail.html). + pub fn empty() -> Self { Default::default() } + + /// Set `init_origin` in the `InitContextTest` + pub fn set_init_origin(&mut self, value: AccountAddress) -> &mut Self { + self.custom.init_origin = Some(value); + self + } +} + +#[cfg(not(feature = "hacspec"))] +impl<'a> ReceiveContextTest<'a> { + /// Create a `ReceiveContextTest` where every field is unset, and getting + /// any of the fields will result in [`fail!`](../macro.fail.html). + pub fn empty() -> Self { Default::default() } + + pub fn set_invoker(&mut self, value: AccountAddress) -> &mut Self { + self.custom.invoker = Some(value); + self + } + + pub fn set_self_address(&mut self, value: ContractAddress) -> &mut Self { + self.custom.self_address = Some(value); + self + } + + pub fn set_self_balance(&mut self, value: Amount) -> &mut Self { + self.custom.self_balance = Some(value); + self + } + + pub fn set_sender(&mut self, value: Address) -> &mut Self { + self.custom.sender = Some(value); + self + } + + pub fn set_owner(&mut self, value: AccountAddress) -> &mut Self { + self.custom.owner = Some(value); + self + } +} + +#[cfg(not(feature = "hacspec"))] +// Error handling when unwrapping +fn unwrap_ctx_field(opt: Option, name: &str) -> A { + match opt { + Some(v) => v, + None => fail!( + "Unset field on test context '{}', make sure to set all the field necessary for the \ + contract", + name + ), + } +} + +#[cfg(not(feature = "hacspec"))] +// Getters for testing-context +impl HasChainMetadata for ChainMetaTest { + fn slot_time(&self) -> SlotTime { unwrap_ctx_field(self.slot_time, "metadata.slot_time") } +} + +#[cfg(not(feature = "hacspec"))] +impl HasPolicy for TestPolicy { + fn identity_provider(&self) -> IdentityProvider { self.policy.identity_provider } + + fn created_at(&self) -> Timestamp { self.policy.created_at } + + fn valid_to(&self) -> Timestamp { self.policy.valid_to } + + fn next_item(self, buf: [u8; 31]) -> (Option<(AttributeTag, u8)>, [u8; 31], Self) { + if let Some(item) = self.policy.items.get(self.position) { + let len = item.1.len(); + let mut temp_buf : [u8; 31] = [0; 31]; + temp_buf[0..len].copy_from_slice(&item.1); + (Some((item.0, len as u8)), temp_buf, Self { position: self.position + 1, policy: self.policy }) + } else { + (None, buf, self) + } + } +} + +#[cfg(not(feature = "hacspec"))] +impl<'a, C> HasCommonData for ContextTest<'a, C> { + type MetadataType = ChainMetaTest; + type ParamType = Cursor<&'a [u8]>; + type PolicyIteratorType = crate::vec::IntoIter; + type PolicyType = TestPolicy; + + fn parameter_cursor(&self) -> Self::ParamType { + Cursor::new(unwrap_ctx_field(self.common.parameter, "parameter")) + } + + fn metadata(&self) -> &Self::MetadataType { &self.common.metadata } + + fn policies(&self) -> Self::PolicyIteratorType { + unwrap_ctx_field(self.common.policies.clone(), "policies").into_iter() + } +} + +#[cfg(not(feature = "hacspec"))] +impl<'a> HasInitContext for InitContextTest<'a> { + type InitData = (); + + fn open(_data: Self::InitData) -> Self { InitContextTest::default() } + + fn init_origin(&self) -> AccountAddress { + unwrap_ctx_field(self.custom.init_origin, "init_origin") + } +} + +#[cfg(not(feature = "hacspec"))] +impl<'a> HasReceiveContext for ReceiveContextTest<'a> { + type ReceiveData = (); + + fn open(_data: Self::ReceiveData) -> Self { ReceiveContextTest::default() } + + fn invoker(&self) -> AccountAddress { unwrap_ctx_field(self.custom.invoker, "invoker") } + + fn self_address(&self) -> ContractAddress { + unwrap_ctx_field(self.custom.self_address, "self_address") + } + + fn self_balance(&self) -> Amount { unwrap_ctx_field(self.custom.self_balance, "self_balance") } + + fn sender(&self) -> Address { unwrap_ctx_field(self.custom.sender, "sender") } + + fn owner(&self) -> AccountAddress { unwrap_ctx_field(self.custom.owner, "owner") } +} + +#[cfg(not(feature = "hacspec"))] +impl<'a> HasParameter for Cursor<&'a [u8]> { + fn size(&self) -> u32 { self.data.len() as u32 } +} + +/// A logger that simply accumulates all the logged items to be inspected at the +/// end of execution. +#[cfg(not(feature = "hacspec"))] +pub struct LogRecorder { + pub logs: Vec>, +} + +#[cfg(not(feature = "hacspec"))] +impl HasLogger for LogRecorder { + fn init() -> Self { + Self { + logs: Vec::new(), + } + } + + fn log_raw(self, event: &[u8]) -> (Result<(), LogError>, Self) { + if event.len() > constants::MAX_LOG_SIZE { + return (Err(LogError::Malformed), self); + } + if self.logs.len() >= constants::MAX_NUM_LOGS { + return (Err(LogError::Full), self); + } + let mut temp_logs = self.logs; + temp_logs.push(event.to_vec()); + (Ok(()), Self {logs: temp_logs}) + } +} + +#[cfg(not(feature = "hacspec"))] +/// An actions tree, used to provide a simpler presentation for testing. +#[derive(Eq, PartialEq, Debug)] +pub enum ActionsTree { + Accept, + SimpleTransfer { + to: AccountAddress, + amount: Amount, + }, + Send { + to: ContractAddress, + receive_name: OwnedReceiveName, + amount: Amount, + parameter: Vec, + }, + AndThen { + left: Box, + right: Box, + }, + OrElse { + left: Box, + right: Box, + }, +} + +#[cfg(not(feature = "hacspec"))] +impl HasActions for ActionsTree { + fn accept() -> Self { ActionsTree::Accept } + + fn simple_transfer(acc: &AccountAddress, amount: Amount) -> Self { + ActionsTree::SimpleTransfer { + to: *acc, + amount, + } + } + + fn send_raw( + ca: &ContractAddress, + receive_name: ReceiveName, + amount: Amount, + parameter: &[u8], + ) -> Self { + ActionsTree::Send { + to: *ca, + receive_name: receive_name.to_owned(), + amount, + parameter: parameter.to_vec(), + } + } + + fn and_then(self, then: Self) -> Self { + ActionsTree::AndThen { + left: Box::new(self), + right: Box::new(then), + } + } + + fn or_else(self, el: Self) -> Self { + ActionsTree::OrElse { + left: Box::new(self), + right: Box::new(el), + } + } +} + +#[cfg(not(feature = "hacspec"))] +/// Reports back an error to the host when compiled to wasm +/// Used internally, not meant to be called directly by contract writers +#[doc(hidden)] +#[cfg(all(feature = "wasm-test", target_arch = "wasm32"))] +pub fn report_error(message: &str, filename: &str, line: u32, column: u32) { + let msg_bytes = message.as_bytes(); + let filename_bytes = filename.as_bytes(); + unsafe { + crate::prims::report_error( + msg_bytes.as_ptr(), + msg_bytes.len() as u32, + filename_bytes.as_ptr(), + filename_bytes.len() as u32, + line, + column, + ) + }; +} + +#[cfg(not(feature = "hacspec"))] +/// Reports back an error to the host when compiled to wasm +/// Used internally, not meant to be called directly by contract writers +#[doc(hidden)] +#[cfg(not(all(feature = "wasm-test", target_arch = "wasm32")))] +pub fn report_error(_message: &str, _filename: &str, _line: u32, _column: u32) {} + +/// Contract state for testing, mimicking the operations the scheduler allows, +/// including the limit on the size of the maximum size of the contract state. +#[cfg(not(feature = "hacspec"))] +pub struct ContractStateTest { + pub cursor: Cursor, +} + +#[cfg(not(feature = "hacspec"))] +/// A borrowed instantiation of `ContractStateTest`. +pub type ContractStateTestBorrowed<'a> = ContractStateTest<&'a mut Vec>; + +#[cfg(not(feature = "hacspec"))] +/// An owned variant that can be more convenient for testing since the type +/// itself owns the data. +pub type ContractStateTestOwned = ContractStateTest>; + +#[cfg(not(feature = "hacspec"))] +#[derive(Debug, PartialEq, Eq)] +/// An error that is raised when operating with `Seek`, `Write`, or `Read` trait +/// methods of the `ContractStateTest` type. +pub enum ContractStateError { + /// The computation of the new offset would result in an overflow. + Overflow, + /// An error occurred when writing to the contract state. + Write, + /// The new offset would be out of bounds of the state. + Offset, + /// Some other error occurred. + Default, +} + +#[cfg(not(feature = "hacspec"))] +impl> Read for ContractStateTest { + fn read(&mut self, buf: &mut [u8]) -> ParseResult { self.cursor.read(buf) } +} + +#[cfg(not(feature = "hacspec"))] +impl>> Write for ContractStateTest { + type Err = ContractStateError; + + fn write(&mut self, buf: &[u8]) -> Result { + // The chain automatically resizes the state up until MAX_CONTRACT_STATE_SIZE. + let end = cmp::min(MAX_CONTRACT_STATE_SIZE as usize, self.cursor.offset + buf.len()); + if self.cursor.data.as_mut().len() < end { + self.cursor.data.as_mut().resize(end as usize, 0u8); + } + let data = &mut self.cursor.data.as_mut()[self.cursor.offset..]; + let to_write = cmp::min(data.len(), buf.len()); + data[..to_write].copy_from_slice(&buf[..to_write]); + self.cursor.offset += to_write; + Ok(to_write) + } +} + +#[cfg(not(feature = "hacspec"))] +impl> + AsMut<[u8]> + AsRef<[u8]>> HasContractState + for ContractStateTest +{ + type ContractStateData = T; + + fn open(data: Self::ContractStateData) -> Self { + Self { + cursor: Cursor::new(data), + } + } + + fn size(&self) -> u32 { self.cursor.data.as_ref().len() as u32 } + + fn truncate(self, new_size: u32) -> Self { + if self.size() > new_size { + let new_size = new_size as usize; + // TODO: + let data: Self::ContractStateData = self.cursor.data; + // data.truncate(new_size); // TODO + let mut offset = self.cursor.offset; + if offset > new_size { + offset = new_size + } + Self { cursor: Cursor { offset: offset, data: data } } + } + else { + self // TODO + } + } + + fn reserve(self, len: u32) -> (bool, Self) { + if len <= constants::MAX_CONTRACT_STATE_SIZE { + // TODO: + // if self.size() < len { + // let data: T = self.cursor.data; + // data.resize(len as usize, 0u8); + // } + (true, self) // TODO + } else { + (false, self) // TODO + } + } +} + +#[cfg(not(feature = "hacspec"))] +impl Default for ContractStateError { + fn default() -> Self { Self::Default } +} + +#[cfg(not(feature = "hacspec"))] +impl From for ContractStateError { + fn from(_: num::TryFromIntError) -> Self { ContractStateError::Overflow } +} + +#[cfg(not(feature = "hacspec"))] +impl> Seek for ContractStateTest { + type Err = ContractStateError; + + fn seek(&mut self, pos: SeekFrom) -> Result { + use ContractStateError::*; + match pos { + SeekFrom::Start(x) => { + // We can set the position to just after the end of the current length. + let new_offset = x.try_into()?; + if new_offset <= self.cursor.data.as_ref().len() { + self.cursor.offset = new_offset; + Ok(x) + } else { + Err(Offset) + } + } + SeekFrom::End(x) => { + // cannot seek beyond end, nor before beginning + if x <= 0 { + let end: u32 = self.cursor.data.as_ref().len().try_into()?; + let minus_x = x.checked_abs().ok_or(Overflow)?; + if let Some(new_pos) = end.checked_sub(minus_x.try_into()?) { + self.cursor.offset = new_pos.try_into()?; + Ok(u64::from(new_pos)) + } else { + Err(Offset) + } + } else { + Err(Offset) + } + } + SeekFrom::Current(x) => match x { + 0 => Ok(self.cursor.offset.try_into()?), + x if x > 0 => { + let x = x.try_into()?; + let new_pos = self.cursor.offset.checked_add(x).ok_or(Overflow)?; + if new_pos <= self.cursor.data.as_ref().len() { + self.cursor.offset = new_pos; + new_pos.try_into().map_err(Self::Err::from) + } else { + Err(Offset) + } + } + x => { + let x = (-x).try_into()?; + let new_pos = self.cursor.offset.checked_sub(x).ok_or(Overflow)?; + self.cursor.offset = new_pos; + new_pos.try_into().map_err(Self::Err::from) + } + }, + } + } +} + +#[cfg(not(feature = "hacspec"))] +#[cfg(test)] +mod test { + use concordium_contracts_common::{Read, Seek, SeekFrom, Write}; + + use super::ContractStateTest; + use crate::{constants, traits::HasContractState}; + + #[test] + // Perform a number of operations from Seek, Read, Write and HasContractState + // classes on the ContractStateTest structure and check that they behave as + // specified. + fn test_contract_state() { + let data = vec![1; 100]; + let mut state = ContractStateTest::open(data); + assert_eq!(state.seek(SeekFrom::Start(100)), Ok(100), "Seeking to the end failed."); + assert_eq!( + state.seek(SeekFrom::Current(0)), + Ok(100), + "Seeking from current position with offset 0 failed." + ); + assert!( + state.seek(SeekFrom::Current(1)).is_err(), + "Seeking from current position with offset 1 succeeded." + ); + assert_eq!(state.cursor.offset, 100, "Cursor position changed on failed seek."); + assert_eq!( + state.seek(SeekFrom::Current(-1)), + Ok(99), + "Seeking from current position backwards with offset 1 failed." + ); + assert!(state.seek(SeekFrom::Current(-100)).is_err(), "Seeking beyond beginning succeeds"); + assert_eq!(state.seek(SeekFrom::Current(-99)), Ok(0), "Seeking to the beginning fails."); + assert_eq!(state.seek(SeekFrom::End(0)), Ok(100), "Seeking from end fails."); + assert!( + state.seek(SeekFrom::End(1)).is_err(), + "Seeking beyond the end succeeds but should fail." + ); + assert_eq!(state.cursor.offset, 100, "Cursor position changed on failed seek."); + assert_eq!( + state.seek(SeekFrom::End(-20)), + Ok(80), + "Seeking from end leads to incorrect position." + ); + assert_eq!(state.write(&[0; 21]), Ok(21), "Writing writes an incorrect amount of data."); + assert_eq!(state.cursor.offset, 101, "After writing the cursor is at the end."); + assert_eq!(state.write(&[0; 21]), Ok(21), "Writing again writes incorrect amount of data."); + let mut buf = [0; 30]; + assert_eq!(state.read(&mut buf), Ok(0), "Reading from the end should read 0 bytes."); + assert_eq!(state.seek(SeekFrom::End(-20)), Ok(102)); + assert_eq!(state.read(&mut buf), Ok(20), "Reading from offset 80 should read 20 bytes."); + assert_eq!(&buf[0..20], &state.cursor.data[80..100], "Incorrect data was read."); + assert_eq!( + state.cursor.offset, 122, + "After reading the offset is in the correct position." + ); + assert!(state.reserve(222), "Could not increase state to 222."); + assert!( + !state.reserve(constants::MAX_CONTRACT_STATE_SIZE + 1), + "State should not be resizable beyond max limit." + ); + assert_eq!(state.write(&[2; 100]), Ok(100), "Should have written 100 bytes."); + assert_eq!(state.cursor.offset, 222, "After writing the offset should be 200."); + state.truncate(50); + assert_eq!(state.cursor.offset, 50, "After truncation the state should be 50."); + assert!(state.reserve(constants::MAX_CONTRACT_STATE_SIZE), "Could not increase state MAX."); + assert_eq!( + state.seek(SeekFrom::End(0)), + Ok(u64::from(constants::MAX_CONTRACT_STATE_SIZE)), + "State should be full now." + ); + assert_eq!( + state.write(&[1; 1000]), + Ok(0), + "Writing at the end after truncation should do nothing." + ); + assert_eq!( + state.cursor.data.len(), + constants::MAX_CONTRACT_STATE_SIZE as usize, + "State size should not increase beyond max." + ) + } + + #[test] + fn test_contract_state_write() { + let data = vec![0u8; 10]; + let mut state = ContractStateTest::open(data); + assert_eq!(state.write(&1u64.to_le_bytes()), Ok(8), "Incorrect number of bytes written."); + assert_eq!( + state.write(&2u64.to_le_bytes()), + Ok(8), + "State should be resized automatically." + ); + assert_eq!(state.cursor.offset, 16, "Pos should be at the end."); + assert_eq!( + state.cursor.data, + vec![1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], + "Correct data was written." + ); + } +} diff --git a/curve25519/proofs/ssprove/extraction/Hacspec_curve25519.v b/curve25519/proofs/ssprove/extraction/Hacspec_curve25519.v new file mode 100644 index 0000000..c5882cc --- /dev/null +++ b/curve25519/proofs/ssprove/extraction/Hacspec_curve25519.v @@ -0,0 +1,137 @@ +(* File automatically generated by Hacspec *) +Set Warnings "-notation-overridden,-ambiguous-paths". +From Crypt Require Import choice_type Package Prelude. +Import PackageNotation. +From extructures Require Import ord fset. +From mathcomp Require Import word_ssrZ word. +(* From Jasmin Require Import word. *) + +From Coq Require Import ZArith. +From Coq Require Import Strings.String. +Import List.ListNotations. +Open Scope list_scope. +Open Scope Z_scope. +Open Scope bool_scope. + +From Hacspec Require Import ChoiceEquality. +From Hacspec Require Import LocationUtility. +From Hacspec Require Import Hacspec_Lib_Comparable. +From Hacspec Require Import Hacspec_Lib_Pre. +From Hacspec Require Import Hacspec_Lib. + +Open Scope hacspec_scope. +Import choice.Choice.Exports. + +Obligation Tactic := (* try timeout 8 *) solve_ssprove_obligations. + +Require Import Hacspec_lib. +Export Hacspec_lib. + +Notation "'t_Point'" := (t_X25519FieldElement × t_X25519FieldElement). + +(*Not implemented yet? todo(item)*) + +Equations point_add_and_double (q : both (t_X25519FieldElement × t_X25519FieldElement)) (np : both (t_X25519FieldElement × t_X25519FieldElement × t_X25519FieldElement × t_X25519FieldElement)) : both (t_X25519FieldElement × t_X25519FieldElement × t_X25519FieldElement × t_X25519FieldElement) := + point_add_and_double q np := + letb '(nq,nqp1) := np in + letb '(x_1_,v__z_1_) := q in + letb '(x_2_,z_2_) := nq in + letb '(x_3_,z_3_) := nqp1 in + letb a := x_2_ .+ z_2_ in + letb aa := impl__X25519FieldElement__pow a (ret_both (2 : int128)) in + letb b := x_2_ .- z_2_ in + letb bb := b .* b in + letb e := aa .- bb in + letb c := x_3_ .+ z_3_ in + letb d := x_3_ .- z_3_ in + letb da := d .* a in + letb cb := c .* b in + letb x_3_ := impl__X25519FieldElement__pow (da .+ cb) (ret_both (2 : int128)) in + letb z_3_ := x_1_ .* (impl__X25519FieldElement__pow (da .- cb) (ret_both (2 : int128))) in + letb x_2_ := aa .* bb in + letb e121665 := impl__X25519FieldElement__from_literal (ret_both (121665 : int128)) in + letb z_2_ := e .* (aa .+ (e121665 .* e)) in + solve_lift (prod_b (prod_b (x_2_,z_2_),prod_b (x_3_,z_3_))) : both (t_X25519FieldElement × t_X25519FieldElement × t_X25519FieldElement × t_X25519FieldElement). +Fail Next Obligation. + +Equations swap (x : both (t_X25519FieldElement × t_X25519FieldElement × t_X25519FieldElement × t_X25519FieldElement)) : both (t_X25519FieldElement × t_X25519FieldElement × t_X25519FieldElement × t_X25519FieldElement) := + swap x := + letb '(x0,x1) := x in + solve_lift (prod_b (x1,x0)) : both (t_X25519FieldElement × t_X25519FieldElement × t_X25519FieldElement × t_X25519FieldElement). +Fail Next Obligation. + +Notation "'t_X25519SerializedPoint'" := (nseq int8 32). +Definition X25519SerializedPoint : both t_X25519SerializedPoint -> both t_X25519SerializedPoint := + id. + +Notation "'t_X25519SerializedScalar'" := (nseq int8 32). +Definition X25519SerializedScalar : both t_X25519SerializedScalar -> both t_X25519SerializedScalar := + id. + +Notation "'t_X25519FieldElement'" := (nat_mod 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffed). +Definition X25519FieldElement : both t_X25519FieldElement -> both t_X25519FieldElement := + id. + +Notation "'t_Scalar'" := (nat_mod 0x8000000000000000000000000000000000000000000000000000000000000000). +Definition Scalar : both t_Scalar -> both t_Scalar := + id. + +Equations montgomery_ladder (k : both t_Scalar) (init : both (t_X25519FieldElement × t_X25519FieldElement)) : both (t_X25519FieldElement × t_X25519FieldElement) := + montgomery_ladder k init := + letb inf := prod_b (impl__X25519FieldElement__from_literal (ret_both (1 : int128)),impl__X25519FieldElement__from_literal (ret_both (0 : int128))) in + letb (acc : t_X25519FieldElement × t_X25519FieldElement × t_X25519FieldElement × t_X25519FieldElement) := prod_b (inf,init) in + letb acc := f_fold (f_into_iter (Build_t_Range (f_start := ret_both (0 : uint_size)) (f_end := ret_both (256 : uint_size)))) acc (fun acc => fun i => + ifb impl__Scalar__bit k ((ret_both (255 : uint_size)) .- i) + then letb acc := swap acc in + letb acc := point_add_and_double init acc in + letb acc := swap acc in + acc + else letb acc := point_add_and_double init acc in + acc) in + letb '(out,_) := acc in + solve_lift out : both (t_X25519FieldElement × t_X25519FieldElement). +Fail Next Obligation. + +Equations encode_point (p : both (t_X25519FieldElement × t_X25519FieldElement)) : both t_X25519SerializedPoint := + encode_point p := + letb '(x,y) := p in + letb b := x .* (impl__X25519FieldElement__inv y) in + solve_lift (f_update_start (impl__X25519SerializedPoint__new (ret_both (tt : 'unit))) (impl__X25519FieldElement__to_byte_seq_le b)) : both t_X25519SerializedPoint. +Fail Next Obligation. + +Equations decode_point (u : both t_X25519SerializedPoint) : both (t_X25519FieldElement × t_X25519FieldElement) := + decode_point u := + letb u___ := u in + letb u___ := update_at u___ (ret_both (31 : int32)) ((u___.a[(ret_both (31 : int32))]) .& (U8 (ret_both (127 : int8)))) in + solve_lift (prod_b (impl__X25519FieldElement__from_byte_seq_le u___,impl__X25519FieldElement__from_literal (ret_both (1 : int128)))) : both (t_X25519FieldElement × t_X25519FieldElement). +Fail Next Obligation. + +Equations mask_scalar (s : both t_X25519SerializedScalar) : both t_X25519SerializedScalar := + mask_scalar s := + letb k := s in + letb k := update_at k (ret_both (0 : int32)) ((k.a[(ret_both (0 : int32))]) .& (U8 (ret_both (248 : int8)))) in + letb k := update_at k (ret_both (31 : int32)) ((k.a[(ret_both (31 : int32))]) .& (U8 (ret_both (127 : int8)))) in + letb k := update_at k (ret_both (31 : int32)) ((k.a[(ret_both (31 : int32))]) .| (U8 (ret_both (64 : int8)))) in + solve_lift k : both t_X25519SerializedScalar. +Fail Next Obligation. + +Equations decode_scalar (s : both t_X25519SerializedScalar) : both t_Scalar := + decode_scalar s := + letb k := mask_scalar s in + solve_lift (impl__Scalar__from_byte_seq_le k) : both t_Scalar. +Fail Next Obligation. + +Equations x25519_scalarmult (s : both t_X25519SerializedScalar) (p : both t_X25519SerializedPoint) : both t_X25519SerializedPoint := + x25519_scalarmult s p := + letb s___ := decode_scalar s in + letb p___ := decode_point p in + letb r := montgomery_ladder s___ p___ in + solve_lift (encode_point r) : both t_X25519SerializedPoint. +Fail Next Obligation. + +Equations x25519_secret_to_public (s : both t_X25519SerializedScalar) : both t_X25519SerializedPoint := + x25519_secret_to_public s := + letb base := impl__X25519SerializedPoint__new (ret_both (tt : 'unit)) in + letb base := update_at base (ret_both (0 : int32)) (U8 (ret_both (9 : int8))) in + solve_lift (x25519_scalarmult s base) : both t_X25519SerializedPoint. +Fail Next Obligation. diff --git a/edwards25519/proofs/coq/extraction/Hacspec_edwards25519.v b/edwards25519/proofs/coq/extraction/Hacspec_edwards25519.v new file mode 100644 index 0000000..aaef9e7 --- /dev/null +++ b/edwards25519/proofs/coq/extraction/Hacspec_edwards25519.v @@ -0,0 +1,490 @@ +(* File automatically generated by Hacspec *) +From Hacspec Require Import Hacspec_Lib MachineIntegers. +From Coq Require Import ZArith. +Import List.ListNotations. +Open Scope Z_scope. +Open Scope bool_scope. + +Require Import Hacspec_lib. + +Notation t_EdPoint_t := ((t_Ed25519FieldElement_t × t_Ed25519FieldElement_t × t_Ed25519FieldElement_t × t_Ed25519FieldElement_t)). + +Inductive t_Error : Type := +| Error_InvalidPublickeyt_Error +| Error_InvalidSignaturet_Error +| Error_InvalidSt_Error +| Error_InvalidRt_Error +| Error_SmallOrderPointt_Error +| Error_NotEnoughRandomnesst_Error. + +Notation t_VerifyResult_t := (t_Result_t (unit) (t_Error_t)). + +(*Not implemented yet? todo(item)*) + +Definition point_eq (p : (t_Ed25519FieldElement_t × t_Ed25519FieldElement_t × t_Ed25519FieldElement_t × t_Ed25519FieldElement_t)) (q : (t_Ed25519FieldElement_t × t_Ed25519FieldElement_t × t_Ed25519FieldElement_t × t_Ed25519FieldElement_t)) : bool := + let '(x1,y1,z1,_) := (p) : (t_Ed25519FieldElement_t × t_Ed25519FieldElement_t × t_Ed25519FieldElement_t × t_Ed25519FieldElement_t) in + let '(x2,y2,z2,_) := (q) : (t_Ed25519FieldElement_t × t_Ed25519FieldElement_t × t_Ed25519FieldElement_t × t_Ed25519FieldElement_t) in + andb ((x1.*z2)=.?(x2.*z1)) ((y1.*z2)=.?(y2.*z1)). + +Notation CompressedEdPoint_t := (nseq int8 32). +Definition CompressedEdPoint : CompressedEdPoint_t -> CompressedEdPoint_t := + id. + +Notation t_PublicKey_t := (t_CompressedEdPoint_t). + +Notation SerializedScalar_t := (nseq int8 32). +Definition SerializedScalar : SerializedScalar_t -> SerializedScalar_t := + id. + +Notation t_SecretKey_t := (t_SerializedScalar_t). + +Notation Signature_t := (nseq int8 64). +Definition Signature : Signature_t -> Signature_t := + id. + +Notation BigIntegerCanvas := (nseq int8 256). +Notation BigInteger_t := (nat_mod 0x8000000000000000000000000000000080000000000000000000000000000000). +Definition BigInteger : BigInteger_t -> BigInteger_t := + id. + +Notation BigScalarCanvas := (nseq int8 512). +Notation BigScalar_t := (nat_mod 0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3ed). +Definition BigScalar : BigScalar_t -> BigScalar_t := + id. + +Notation FieldCanvas := (nseq int8 256). +Notation Ed25519FieldElement_t := (nat_mod 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffed). +Definition Ed25519FieldElement : Ed25519FieldElement_t -> Ed25519FieldElement_t := + id. + +Notation ScalarCanvas := (nseq int8 256). +Notation Scalar_t := (nat_mod 0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3ed). +Definition Scalar : Scalar_t -> Scalar_t := + id. + +Definition point_normalize (q : (t_Ed25519FieldElement_t × t_Ed25519FieldElement_t × t_Ed25519FieldElement_t × t_Ed25519FieldElement_t)) : (t_Ed25519FieldElement_t × t_Ed25519FieldElement_t × t_Ed25519FieldElement_t × t_Ed25519FieldElement_t) := + let '(qx,qy,qz,_) := (q) : (t_Ed25519FieldElement_t × t_Ed25519FieldElement_t × t_Ed25519FieldElement_t × t_Ed25519FieldElement_t) in + let px := (qx.*(impl__Ed25519FieldElement__inv qz)) : t_Ed25519FieldElement_t in + let py := (qy.*(impl__Ed25519FieldElement__inv qz)) : t_Ed25519FieldElement_t in + let pz := (f_ONE) : t_Ed25519FieldElement_t in + let pt := (px.*py) : t_Ed25519FieldElement_t in + (px,py,pz,pt). + +Definition point_identity : (t_Ed25519FieldElement_t × t_Ed25519FieldElement_t × t_Ed25519FieldElement_t × t_Ed25519FieldElement_t) := + (f_ZERO,f_ONE,f_ONE,f_ZERO). + +Definition point_neg (p : (t_Ed25519FieldElement_t × t_Ed25519FieldElement_t × t_Ed25519FieldElement_t × t_Ed25519FieldElement_t)) : (t_Ed25519FieldElement_t × t_Ed25519FieldElement_t × t_Ed25519FieldElement_t × t_Ed25519FieldElement_t) := + let '(x,y,z,t) := (p) : (t_Ed25519FieldElement_t × t_Ed25519FieldElement_t × t_Ed25519FieldElement_t × t_Ed25519FieldElement_t) in + (f_ZERO.-x,y,z,f_ZERO.-t). + +Definition secret_expand : t_Never_t := + failure (AST import) Fatal error: something we considered as impossible occurred! Please report this by submitting an issue on GitHub! +Details: [import_thir:literal] got an error literal: this means the Rust compiler or Hax's frontend probably reported errors above. + { Types.attributes = []; + contents = + Types.Literal { + lit = + { Types.node = Types.Err; + span = + { Types.filename = + (Types.Real (Types.LocalPath "edwards25519/src/edwards25519.rs")); + hi = { Types.col = "0"; line = "1" }; + lo = { Types.col = "0"; line = "1" } } + }; + neg = false}; + hir_id = None; + span = + { Types.filename = + (Types.Real (Types.LocalPath "edwards25519/src/edwards25519.rs")); + hi = { Types.col = "75"; line = "297" }; + lo = { Types.col = "0"; line = "297" } }; + ty = Types.Never }. + +Definition v_BASE : t_CompressedEdPoint_t := + CompressedEdPoint (array_from_list [U8 (@repr WORDSIZE8 88); + U8 (@repr WORDSIZE8 102); + U8 (@repr WORDSIZE8 102); + U8 (@repr WORDSIZE8 102); + U8 (@repr WORDSIZE8 102); + U8 (@repr WORDSIZE8 102); + U8 (@repr WORDSIZE8 102); + U8 (@repr WORDSIZE8 102); + U8 (@repr WORDSIZE8 102); + U8 (@repr WORDSIZE8 102); + U8 (@repr WORDSIZE8 102); + U8 (@repr WORDSIZE8 102); + U8 (@repr WORDSIZE8 102); + U8 (@repr WORDSIZE8 102); + U8 (@repr WORDSIZE8 102); + U8 (@repr WORDSIZE8 102); + U8 (@repr WORDSIZE8 102); + U8 (@repr WORDSIZE8 102); + U8 (@repr WORDSIZE8 102); + U8 (@repr WORDSIZE8 102); + U8 (@repr WORDSIZE8 102); + U8 (@repr WORDSIZE8 102); + U8 (@repr WORDSIZE8 102); + U8 (@repr WORDSIZE8 102); + U8 (@repr WORDSIZE8 102); + U8 (@repr WORDSIZE8 102); + U8 (@repr WORDSIZE8 102); + U8 (@repr WORDSIZE8 102); + U8 (@repr WORDSIZE8 102); + U8 (@repr WORDSIZE8 102); + U8 (@repr WORDSIZE8 102); + U8 (@repr WORDSIZE8 102)]). + +Definition v_CONSTANT_D : t_SerializedScalar_t := + SerializedScalar (array_from_list [U8 (@repr WORDSIZE8 163); + U8 (@repr WORDSIZE8 120); + U8 (@repr WORDSIZE8 89); + U8 (@repr WORDSIZE8 19); + U8 (@repr WORDSIZE8 202); + U8 (@repr WORDSIZE8 77); + U8 (@repr WORDSIZE8 235); + U8 (@repr WORDSIZE8 117); + U8 (@repr WORDSIZE8 171); + U8 (@repr WORDSIZE8 216); + U8 (@repr WORDSIZE8 65); + U8 (@repr WORDSIZE8 65); + U8 (@repr WORDSIZE8 77); + U8 (@repr WORDSIZE8 10); + U8 (@repr WORDSIZE8 112); + U8 (@repr WORDSIZE8 0); + U8 (@repr WORDSIZE8 152); + U8 (@repr WORDSIZE8 232); + U8 (@repr WORDSIZE8 121); + U8 (@repr WORDSIZE8 119); + U8 (@repr WORDSIZE8 121); + U8 (@repr WORDSIZE8 64); + U8 (@repr WORDSIZE8 199); + U8 (@repr WORDSIZE8 140); + U8 (@repr WORDSIZE8 115); + U8 (@repr WORDSIZE8 254); + U8 (@repr WORDSIZE8 111); + U8 (@repr WORDSIZE8 43); + U8 (@repr WORDSIZE8 238); + U8 (@repr WORDSIZE8 108); + U8 (@repr WORDSIZE8 3); + U8 (@repr WORDSIZE8 82)]). + +Definition v_CONSTANT_L : t_SerializedScalar_t := + SerializedScalar (array_from_list [U8 (@repr WORDSIZE8 237); + U8 (@repr WORDSIZE8 211); + U8 (@repr WORDSIZE8 245); + U8 (@repr WORDSIZE8 92); + U8 (@repr WORDSIZE8 26); + U8 (@repr WORDSIZE8 99); + U8 (@repr WORDSIZE8 18); + U8 (@repr WORDSIZE8 88); + U8 (@repr WORDSIZE8 214); + U8 (@repr WORDSIZE8 156); + U8 (@repr WORDSIZE8 247); + U8 (@repr WORDSIZE8 162); + U8 (@repr WORDSIZE8 222); + U8 (@repr WORDSIZE8 249); + U8 (@repr WORDSIZE8 222); + U8 (@repr WORDSIZE8 20); + U8 (@repr WORDSIZE8 0); + U8 (@repr WORDSIZE8 0); + U8 (@repr WORDSIZE8 0); + U8 (@repr WORDSIZE8 0); + U8 (@repr WORDSIZE8 0); + U8 (@repr WORDSIZE8 0); + U8 (@repr WORDSIZE8 0); + U8 (@repr WORDSIZE8 0); + U8 (@repr WORDSIZE8 0); + U8 (@repr WORDSIZE8 0); + U8 (@repr WORDSIZE8 0); + U8 (@repr WORDSIZE8 0); + U8 (@repr WORDSIZE8 0); + U8 (@repr WORDSIZE8 0); + U8 (@repr WORDSIZE8 0); + U8 (@repr WORDSIZE8 16)]). + +Definition v_CONSTANT_P : t_SerializedScalar_t := + SerializedScalar (array_from_list [U8 (@repr WORDSIZE8 237); + U8 (@repr WORDSIZE8 255); + U8 (@repr WORDSIZE8 255); + U8 (@repr WORDSIZE8 255); + U8 (@repr WORDSIZE8 255); + U8 (@repr WORDSIZE8 255); + U8 (@repr WORDSIZE8 255); + U8 (@repr WORDSIZE8 255); + U8 (@repr WORDSIZE8 255); + U8 (@repr WORDSIZE8 255); + U8 (@repr WORDSIZE8 255); + U8 (@repr WORDSIZE8 255); + U8 (@repr WORDSIZE8 255); + U8 (@repr WORDSIZE8 255); + U8 (@repr WORDSIZE8 255); + U8 (@repr WORDSIZE8 255); + U8 (@repr WORDSIZE8 255); + U8 (@repr WORDSIZE8 255); + U8 (@repr WORDSIZE8 255); + U8 (@repr WORDSIZE8 255); + U8 (@repr WORDSIZE8 255); + U8 (@repr WORDSIZE8 255); + U8 (@repr WORDSIZE8 255); + U8 (@repr WORDSIZE8 255); + U8 (@repr WORDSIZE8 255); + U8 (@repr WORDSIZE8 255); + U8 (@repr WORDSIZE8 255); + U8 (@repr WORDSIZE8 255); + U8 (@repr WORDSIZE8 255); + U8 (@repr WORDSIZE8 255); + U8 (@repr WORDSIZE8 255); + U8 (@repr WORDSIZE8 127)]). + +Definition v_CONSTANT_P1_4_ : t_SerializedScalar_t := + SerializedScalar (array_from_list [U8 (@repr WORDSIZE8 251); + U8 (@repr WORDSIZE8 255); + U8 (@repr WORDSIZE8 255); + U8 (@repr WORDSIZE8 255); + U8 (@repr WORDSIZE8 255); + U8 (@repr WORDSIZE8 255); + U8 (@repr WORDSIZE8 255); + U8 (@repr WORDSIZE8 255); + U8 (@repr WORDSIZE8 255); + U8 (@repr WORDSIZE8 255); + U8 (@repr WORDSIZE8 255); + U8 (@repr WORDSIZE8 255); + U8 (@repr WORDSIZE8 255); + U8 (@repr WORDSIZE8 255); + U8 (@repr WORDSIZE8 255); + U8 (@repr WORDSIZE8 255); + U8 (@repr WORDSIZE8 255); + U8 (@repr WORDSIZE8 255); + U8 (@repr WORDSIZE8 255); + U8 (@repr WORDSIZE8 255); + U8 (@repr WORDSIZE8 255); + U8 (@repr WORDSIZE8 255); + U8 (@repr WORDSIZE8 255); + U8 (@repr WORDSIZE8 255); + U8 (@repr WORDSIZE8 255); + U8 (@repr WORDSIZE8 255); + U8 (@repr WORDSIZE8 255); + U8 (@repr WORDSIZE8 255); + U8 (@repr WORDSIZE8 255); + U8 (@repr WORDSIZE8 255); + U8 (@repr WORDSIZE8 255); + U8 (@repr WORDSIZE8 31)]). + +Definition v_CONSTANT_P3_8_ : t_SerializedScalar_t := + SerializedScalar (array_from_list [U8 (@repr WORDSIZE8 254); + U8 (@repr WORDSIZE8 255); + U8 (@repr WORDSIZE8 255); + U8 (@repr WORDSIZE8 255); + U8 (@repr WORDSIZE8 255); + U8 (@repr WORDSIZE8 255); + U8 (@repr WORDSIZE8 255); + U8 (@repr WORDSIZE8 255); + U8 (@repr WORDSIZE8 255); + U8 (@repr WORDSIZE8 255); + U8 (@repr WORDSIZE8 255); + U8 (@repr WORDSIZE8 255); + U8 (@repr WORDSIZE8 255); + U8 (@repr WORDSIZE8 255); + U8 (@repr WORDSIZE8 255); + U8 (@repr WORDSIZE8 255); + U8 (@repr WORDSIZE8 255); + U8 (@repr WORDSIZE8 255); + U8 (@repr WORDSIZE8 255); + U8 (@repr WORDSIZE8 255); + U8 (@repr WORDSIZE8 255); + U8 (@repr WORDSIZE8 255); + U8 (@repr WORDSIZE8 255); + U8 (@repr WORDSIZE8 255); + U8 (@repr WORDSIZE8 255); + U8 (@repr WORDSIZE8 255); + U8 (@repr WORDSIZE8 255); + U8 (@repr WORDSIZE8 255); + U8 (@repr WORDSIZE8 255); + U8 (@repr WORDSIZE8 255); + U8 (@repr WORDSIZE8 255); + U8 (@repr WORDSIZE8 15)]). + +Definition check_canonical_point (x : t_CompressedEdPoint_t) : bool := + let x := (update_at x (@repr WORDSIZE32 31) ((x.[(@repr WORDSIZE32 31)]).&(U8 (@repr WORDSIZE8 127)))) : t_CompressedEdPoint_t in + let x := (impl__BigInteger__from_byte_seq_le x) : t_BigInteger_t in + x<.?(impl__BigInteger__from_byte_seq_le v_CONSTANT_P). + +Definition check_canonical_scalar (s : t_SerializedScalar_t) : bool := + if + (impl__U8__declassify ((s.[(@repr WORDSIZE32 31)]).&(U8 (@repr WORDSIZE8 224))))<>(@repr WORDSIZE8 0) + then + false + else + (impl__BigInteger__from_byte_seq_le s)<.?(impl__BigInteger__from_byte_seq_le v_CONSTANT_L). + +Definition is_negative (x : t_Ed25519FieldElement_t) : t_U8_t := + if + impl__Ed25519FieldElement__bit x (@repr WORDSIZE32 0) + then + U8 (@repr WORDSIZE8 1) + else + U8 (@repr WORDSIZE8 0). + +Definition compress (p : (t_Ed25519FieldElement_t × t_Ed25519FieldElement_t × t_Ed25519FieldElement_t × t_Ed25519FieldElement_t)) : t_CompressedEdPoint_t := + let '(x,y,z,_) := (p) : (t_Ed25519FieldElement_t × t_Ed25519FieldElement_t × t_Ed25519FieldElement_t × t_Ed25519FieldElement_t) in + let z_inv := (impl__Ed25519FieldElement__inv z) : t_Ed25519FieldElement_t in + let x := (x.*z_inv) : t_Ed25519FieldElement_t in + let y := (y.*z_inv) : t_Ed25519FieldElement_t in + let s := (impl__Ed25519FieldElement__to_byte_seq_le y) : t_Seq_t t_U8_t in + let s := (update_at s (@repr WORDSIZE32 31) ((s.[(@repr WORDSIZE32 31)]).^((is_negative x) shift_left (@repr WORDSIZE32 7)))) : t_Seq_t t_U8_t in + impl__CompressedEdPoint__from_slice s (@repr WORDSIZE32 0) (@repr WORDSIZE32 32). + +Definition encode (p : (t_Ed25519FieldElement_t × t_Ed25519FieldElement_t × t_Ed25519FieldElement_t × t_Ed25519FieldElement_t)) : t_Seq_t t_U8_t := + let '(x,y,z,_) := (p) : (t_Ed25519FieldElement_t × t_Ed25519FieldElement_t × t_Ed25519FieldElement_t × t_Ed25519FieldElement_t) in + let z_inv := (impl__Ed25519FieldElement__inv z) : t_Ed25519FieldElement_t in + let x := (x.*z_inv) : t_Ed25519FieldElement_t in + let y := (y.*z_inv) : t_Ed25519FieldElement_t in + let s := (impl__Ed25519FieldElement__to_byte_seq_le y) : t_Seq_t t_U8_t in + let s := (update_at s (@repr WORDSIZE32 31) ((s.[(@repr WORDSIZE32 31)]).^((is_negative x) shift_left (@repr WORDSIZE32 7)))) : t_Seq_t t_U8_t in + s. + +Definition point_add (p : (t_Ed25519FieldElement_t × t_Ed25519FieldElement_t × t_Ed25519FieldElement_t × t_Ed25519FieldElement_t)) (q : (t_Ed25519FieldElement_t × t_Ed25519FieldElement_t × t_Ed25519FieldElement_t × t_Ed25519FieldElement_t)) : (t_Ed25519FieldElement_t × t_Ed25519FieldElement_t × t_Ed25519FieldElement_t × t_Ed25519FieldElement_t) := + let d_c := (impl__Ed25519FieldElement__from_byte_seq_le v_CONSTANT_D) : t_Ed25519FieldElement_t in + let two := (f_TWO) : t_Ed25519FieldElement_t in + let '(x1,y1,z1,t1) := (p) : (t_Ed25519FieldElement_t × t_Ed25519FieldElement_t × t_Ed25519FieldElement_t × t_Ed25519FieldElement_t) in + let '(x2,y2,z2,t2) := (q) : (t_Ed25519FieldElement_t × t_Ed25519FieldElement_t × t_Ed25519FieldElement_t × t_Ed25519FieldElement_t) in + let a := ((y1.-x1).*(y2.-x2)) : t_Ed25519FieldElement_t in + let b := ((y1.+x1).*(y2.+x2)) : t_Ed25519FieldElement_t in + let c := (((t1.*two).*d_c).*t2) : t_Ed25519FieldElement_t in + let d := ((z1.*two).*z2) : t_Ed25519FieldElement_t in + let e := (b.-a) : t_Ed25519FieldElement_t in + let f := (d.-c) : t_Ed25519FieldElement_t in + let g := (d.+c) : t_Ed25519FieldElement_t in + let h := (b.+a) : t_Ed25519FieldElement_t in + let x3 := (e.*f) : t_Ed25519FieldElement_t in + let y3 := (g.*h) : t_Ed25519FieldElement_t in + let t3 := (e.*h) : t_Ed25519FieldElement_t in + let z3 := (f.*g) : t_Ed25519FieldElement_t in + (x3,y3,z3,t3). + +Definition point_mul (s : t_Scalar_t) (p : (t_Ed25519FieldElement_t × t_Ed25519FieldElement_t × t_Ed25519FieldElement_t × t_Ed25519FieldElement_t)) : (t_Ed25519FieldElement_t × t_Ed25519FieldElement_t × t_Ed25519FieldElement_t × t_Ed25519FieldElement_t) := + let p := (p) : (t_Ed25519FieldElement_t × t_Ed25519FieldElement_t × t_Ed25519FieldElement_t × t_Ed25519FieldElement_t) in + let q := (point_identity) : (t_Ed25519FieldElement_t × t_Ed25519FieldElement_t × t_Ed25519FieldElement_t × t_Ed25519FieldElement_t) in + let '(p,q) := (f_fold (f_into_iter (Build_Range (@repr WORDSIZE32 0)(@repr WORDSIZE32 256))) (p,q) (fun '(p,q) i => + let q := (if + impl__Scalar__bit s i + then + let q := (point_add q p) : (t_Ed25519FieldElement_t × t_Ed25519FieldElement_t × t_Ed25519FieldElement_t × t_Ed25519FieldElement_t) in + q + else + q) : (t_Ed25519FieldElement_t × t_Ed25519FieldElement_t × t_Ed25519FieldElement_t × t_Ed25519FieldElement_t) in + let p := (point_add p p) : (t_Ed25519FieldElement_t × t_Ed25519FieldElement_t × t_Ed25519FieldElement_t × t_Ed25519FieldElement_t) in + (p,q))) : ((t_Ed25519FieldElement_t × t_Ed25519FieldElement_t × t_Ed25519FieldElement_t × t_Ed25519FieldElement_t) × (t_Ed25519FieldElement_t × t_Ed25519FieldElement_t × t_Ed25519FieldElement_t × t_Ed25519FieldElement_t)) in + q. + +Definition point_mul_by_cofactor (p : (t_Ed25519FieldElement_t × t_Ed25519FieldElement_t × t_Ed25519FieldElement_t × t_Ed25519FieldElement_t)) : (t_Ed25519FieldElement_t × t_Ed25519FieldElement_t × t_Ed25519FieldElement_t × t_Ed25519FieldElement_t) := + let p2 := (point_add p p) : (t_Ed25519FieldElement_t × t_Ed25519FieldElement_t × t_Ed25519FieldElement_t × t_Ed25519FieldElement_t) in + let p4 := (point_add p2 p2) : (t_Ed25519FieldElement_t × t_Ed25519FieldElement_t × t_Ed25519FieldElement_t × t_Ed25519FieldElement_t) in + point_add p4 p4. + +Definition sqrt (a : t_Ed25519FieldElement_t) : t_Option_t t_Ed25519FieldElement_t := + let p3_8 := (impl__Ed25519FieldElement__from_byte_seq_le v_CONSTANT_P3_8_) : t_Ed25519FieldElement_t in + let p1_4 := (impl__Ed25519FieldElement__from_byte_seq_le v_CONSTANT_P1_4_) : t_Ed25519FieldElement_t in + let x_c := (f_pow_self a p3_8) : t_Ed25519FieldElement_t in + let result := (Option_Nonet_Option_t t_Ed25519FieldElement_t) : t_Option_t t_Ed25519FieldElement_t in + let result := (if + (x_c.*x_c)=.?a + then + let result := (Option_Some x_c) : t_Option_t t_Ed25519FieldElement_t in + result + else + result) : t_Option_t t_Ed25519FieldElement_t in + let result := (if + (x_c.*x_c)=.?(f_ZERO.-a) + then + let x := ((f_pow_self f_TWO p1_4).*x_c) : t_Ed25519FieldElement_t in + let result := (Option_Some x) : t_Option_t t_Ed25519FieldElement_t in + result + else + result) : t_Option_t t_Ed25519FieldElement_t in + result. + +Definition decompress (q : t_CompressedEdPoint_t) : t_Option_t (t_Ed25519FieldElement_t × t_Ed25519FieldElement_t × t_Ed25519FieldElement_t × t_Ed25519FieldElement_t) := + run (let d := (impl__Ed25519FieldElement__from_byte_seq_le v_CONSTANT_D) : t_Ed25519FieldElement_t in + let x_s := (((q.[(@repr WORDSIZE32 31)]).&(U8 (@repr WORDSIZE8 128))) shift_right (@repr WORDSIZE32 7)) : t_U8_t in + let y_s := (q) : t_CompressedEdPoint_t in + let y_s := (update_at y_s (@repr WORDSIZE32 31) ((y_s.[(@repr WORDSIZE32 31)]).&(U8 (@repr WORDSIZE8 127)))) : t_CompressedEdPoint_t in + let _ := (if + not (check_canonical_point y_s) + then + let _ := (match f_branch Option_Nonet_Option_t (t_Ed25519FieldElement_t × t_Ed25519FieldElement_t × t_Ed25519FieldElement_t × t_Ed25519FieldElement_t) with + | ControlFlow_Break residual => let hoist1 := (v_Break (f_from_residual residual)) : t_Never_t in + ControlFlow_Continue (never_to_any hoist1) + | ControlFlow_Continue val => ControlFlow_Continue val + end) : (t_Ed25519FieldElement_t × t_Ed25519FieldElement_t × t_Ed25519FieldElement_t × t_Ed25519FieldElement_t) in + ControlFlow_Continue tt + else + ControlFlow_Continue tt) : unit in + let y := (impl__Ed25519FieldElement__from_byte_seq_le y_s) : t_Ed25519FieldElement_t in + let z := (f_ONE) : t_Ed25519FieldElement_t in + let yy := (y.*y) : t_Ed25519FieldElement_t in + let u := (yy.-z) : t_Ed25519FieldElement_t in + let v := ((d.*yy).+z) : t_Ed25519FieldElement_t in + let xx := (u.*(impl__Ed25519FieldElement__inv v)) : t_Ed25519FieldElement_t in + let x := (match f_branch (sqrt xx) with + | ControlFlow_Break residual => let hoist2 := (v_Break (f_from_residual residual)) : t_Never_t in + ControlFlow_Continue (never_to_any hoist2) + | ControlFlow_Continue val => ControlFlow_Continue val + end) : t_Ed25519FieldElement_t in + let x_r := (is_negative x) : t_U8_t in + let _ := (if + andb (x=.?f_ZERO) ((impl__U8__declassify x_s)=.?(@repr WORDSIZE8 1)) + then + let _ := (match f_branch Option_Nonet_Option_t (t_Ed25519FieldElement_t × t_Ed25519FieldElement_t × t_Ed25519FieldElement_t × t_Ed25519FieldElement_t) with + | ControlFlow_Break residual => let hoist3 := (v_Break (f_from_residual residual)) : t_Never_t in + ControlFlow_Continue (never_to_any hoist3) + | ControlFlow_Continue val => ControlFlow_Continue val + end) : (t_Ed25519FieldElement_t × t_Ed25519FieldElement_t × t_Ed25519FieldElement_t × t_Ed25519FieldElement_t) in + ControlFlow_Continue tt + else + ControlFlow_Continue tt) : unit in + ControlFlow_Continue (let x := (if + (impl__U8__declassify x_r)<>(impl__U8__declassify x_s) + then + let x := (f_ZERO.-x) : t_Ed25519FieldElement_t in + x + else + x) : t_Ed25519FieldElement_t in + Option_Some (x,y,z,x.*y))). + +Definition decode (q_s : t_Seq_t t_U8_t) : t_Option_t (t_Ed25519FieldElement_t × t_Ed25519FieldElement_t × t_Ed25519FieldElement_t × t_Ed25519FieldElement_t) := + let q := (impl__CompressedEdPoint__from_slice q_s (@repr WORDSIZE32 0) (@repr WORDSIZE32 32)) : t_CompressedEdPoint_t in + decompress q. + +Definition decompress_non_canonical (p : t_CompressedEdPoint_t) : t_Option_t (t_Ed25519FieldElement_t × t_Ed25519FieldElement_t × t_Ed25519FieldElement_t × t_Ed25519FieldElement_t) := + run (let d := (impl__Ed25519FieldElement__from_byte_seq_le v_CONSTANT_D) : t_Ed25519FieldElement_t in + let x_s := (((p.[(@repr WORDSIZE32 31)]).&(U8 (@repr WORDSIZE8 128))) shift_right (@repr WORDSIZE32 7)) : t_U8_t in + let y_s := (p) : t_CompressedEdPoint_t in + let y_s := (update_at y_s (@repr WORDSIZE32 31) ((y_s.[(@repr WORDSIZE32 31)]).&(U8 (@repr WORDSIZE8 127)))) : t_CompressedEdPoint_t in + let y := (impl__Ed25519FieldElement__from_byte_seq_le y_s) : t_Ed25519FieldElement_t in + let z := (f_ONE) : t_Ed25519FieldElement_t in + let yy := (y.*y) : t_Ed25519FieldElement_t in + let u := (yy.-z) : t_Ed25519FieldElement_t in + let v := ((d.*yy).+z) : t_Ed25519FieldElement_t in + let xx := (u.*(impl__Ed25519FieldElement__inv v)) : t_Ed25519FieldElement_t in + let x := (match f_branch (sqrt xx) with + | ControlFlow_Break residual => let hoist4 := (v_Break (f_from_residual residual)) : t_Never_t in + ControlFlow_Continue (never_to_any hoist4) + | ControlFlow_Continue val => ControlFlow_Continue val + end) : t_Ed25519FieldElement_t in + ControlFlow_Continue (let x_r := (is_negative x) : t_U8_t in + let x := (if + (impl__U8__declassify x_r)<>(impl__U8__declassify x_s) + then + let x := (f_ZERO.-x) : t_Ed25519FieldElement_t in + x + else + x) : t_Ed25519FieldElement_t in + Option_Some (x,y,z,x.*y))). + +Definition secret_to_public (sk : t_SerializedScalar_t) : t_CompressedEdPoint_t := + let '(s,_) := (secret_expand sk) : (t_SerializedScalar_t × t_SerializedScalar_t) in + let base := (impl__unwrap (decompress v_BASE)) : (t_Ed25519FieldElement_t × t_Ed25519FieldElement_t × t_Ed25519FieldElement_t × t_Ed25519FieldElement_t) in + let ss := (impl__Scalar__from_byte_seq_le s) : t_Scalar_t in + let a := (point_mul ss base) : (t_Ed25519FieldElement_t × t_Ed25519FieldElement_t × t_Ed25519FieldElement_t × t_Ed25519FieldElement_t) in + compress a. diff --git a/edwards25519/proofs/ssprove/extraction/Hacspec_edwards25519.v b/edwards25519/proofs/ssprove/extraction/Hacspec_edwards25519.v new file mode 100644 index 0000000..b42a957 --- /dev/null +++ b/edwards25519/proofs/ssprove/extraction/Hacspec_edwards25519.v @@ -0,0 +1,525 @@ +(* File automatically generated by Hacspec *) +Set Warnings "-notation-overridden,-ambiguous-paths". +From Crypt Require Import choice_type Package Prelude. +Import PackageNotation. +From extructures Require Import ord fset. +From mathcomp Require Import word_ssrZ word. +(* From Jasmin Require Import word. *) + +From Coq Require Import ZArith. +From Coq Require Import Strings.String. +Import List.ListNotations. +Open Scope list_scope. +Open Scope Z_scope. +Open Scope bool_scope. + +From Hacspec Require Import ChoiceEquality. +From Hacspec Require Import LocationUtility. +From Hacspec Require Import Hacspec_Lib_Comparable. +From Hacspec Require Import Hacspec_Lib_Pre. +From Hacspec Require Import Hacspec_Lib. + +Open Scope hacspec_scope. +Import choice.Choice.Exports. + +Obligation Tactic := (* try timeout 8 *) solve_ssprove_obligations. + +Require Import Hacspec_lib. +Export Hacspec_lib. + +Require Import Hacspec_sha512. +Export Hacspec_sha512. + +Notation "'t_EdPoint'" := (t_Ed25519FieldElement × t_Ed25519FieldElement × t_Ed25519FieldElement × t_Ed25519FieldElement). + +Definition t_Error : choice_type := + ('unit ∐ 'unit ∐ 'unit ∐ 'unit ∐ 'unit ∐ 'unit). +Notation "'Error_InvalidPublickey_case'" := (inl (inl (inl (inl (inl tt))))) (at level 100). +Equations Error_InvalidPublickey : both t_Error := + Error_InvalidPublickey := + solve_lift (ret_both (inl (inl (inl (inl (inl (tt : 'unit))))) : t_Error)) : both t_Error. +Fail Next Obligation. +Notation "'Error_InvalidSignature_case'" := (inl (inl (inl (inl (inr tt))))) (at level 100). +Equations Error_InvalidSignature : both t_Error := + Error_InvalidSignature := + solve_lift (ret_both (inl (inl (inl (inl (inr (tt : 'unit))))) : t_Error)) : both t_Error. +Fail Next Obligation. +Notation "'Error_InvalidS_case'" := (inl (inl (inl (inr tt)))) (at level 100). +Equations Error_InvalidS : both t_Error := + Error_InvalidS := + solve_lift (ret_both (inl (inl (inl (inr (tt : 'unit)))) : t_Error)) : both t_Error. +Fail Next Obligation. +Notation "'Error_InvalidR_case'" := (inl (inl (inr tt))) (at level 100). +Equations Error_InvalidR : both t_Error := + Error_InvalidR := + solve_lift (ret_both (inl (inl (inr (tt : 'unit))) : t_Error)) : both t_Error. +Fail Next Obligation. +Notation "'Error_SmallOrderPoint_case'" := (inl (inr tt)) (at level 100). +Equations Error_SmallOrderPoint : both t_Error := + Error_SmallOrderPoint := + solve_lift (ret_both (inl (inr (tt : 'unit)) : t_Error)) : both t_Error. +Fail Next Obligation. +Notation "'Error_NotEnoughRandomness_case'" := (inr tt) (at level 100). +Equations Error_NotEnoughRandomness : both t_Error := + Error_NotEnoughRandomness := + solve_lift (ret_both (inr (tt : 'unit) : t_Error)) : both t_Error. +Fail Next Obligation. + +Notation "'t_VerifyResult'" := (t_Result 'unit t_Error). + +(*Not implemented yet? todo(item)*) + +Equations point_eq (p : both (t_Ed25519FieldElement × t_Ed25519FieldElement × t_Ed25519FieldElement × t_Ed25519FieldElement)) (q : both (t_Ed25519FieldElement × t_Ed25519FieldElement × t_Ed25519FieldElement × t_Ed25519FieldElement)) : both 'bool := + point_eq p q := + letb '(x1,y1,z1,_) := p in + letb '(x2,y2,z2,_) := q in + solve_lift (andb ((x1 .* z2) =.? (x2 .* z1)) ((y1 .* z2) =.? (y2 .* z1))) : both 'bool. +Fail Next Obligation. + +Notation "'t_CompressedEdPoint'" := (nseq int8 32). +Definition CompressedEdPoint : both t_CompressedEdPoint -> both t_CompressedEdPoint := + id. + +Notation "'t_PublicKey'" := t_CompressedEdPoint. + +Notation "'t_SerializedScalar'" := (nseq int8 32). +Definition SerializedScalar : both t_SerializedScalar -> both t_SerializedScalar := + id. + +Notation "'t_SecretKey'" := t_SerializedScalar. + +Notation "'t_Signature'" := (nseq int8 64). +Definition Signature : both t_Signature -> both t_Signature := + id. + +Notation "'t_BigInteger'" := (nat_mod 0x8000000000000000000000000000000080000000000000000000000000000000). +Definition BigInteger : both t_BigInteger -> both t_BigInteger := + id. + +Notation "'t_BigScalar'" := (nat_mod 0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3ed). +Definition BigScalar : both t_BigScalar -> both t_BigScalar := + id. + +Notation "'t_Ed25519FieldElement'" := (nat_mod 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffed). +Definition Ed25519FieldElement : both t_Ed25519FieldElement -> both t_Ed25519FieldElement := + id. + +Notation "'t_Scalar'" := (nat_mod 0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3ed). +Definition Scalar : both t_Scalar -> both t_Scalar := + id. + +Equations point_normalize (q : both (t_Ed25519FieldElement × t_Ed25519FieldElement × t_Ed25519FieldElement × t_Ed25519FieldElement)) : both (t_Ed25519FieldElement × t_Ed25519FieldElement × t_Ed25519FieldElement × t_Ed25519FieldElement) := + point_normalize q := + letb '(qx,qy,qz,_) := q in + letb px := qx .* (impl__Ed25519FieldElement__inv qz) in + letb py := qy .* (impl__Ed25519FieldElement__inv qz) in + letb pz := f_ONE (ret_both (tt : 'unit)) in + letb pt := px .* py in + solve_lift (prod_b (px,py,pz,pt)) : both (t_Ed25519FieldElement × t_Ed25519FieldElement × t_Ed25519FieldElement × t_Ed25519FieldElement). +Fail Next Obligation. + +Equations point_identity (_ : both 'unit) : both (t_Ed25519FieldElement × t_Ed25519FieldElement × t_Ed25519FieldElement × t_Ed25519FieldElement) := + point_identity _ := + solve_lift (prod_b (f_ZERO (ret_both (tt : 'unit)),f_ONE (ret_both (tt : 'unit)),f_ONE (ret_both (tt : 'unit)),f_ZERO (ret_both (tt : 'unit)))) : both (t_Ed25519FieldElement × t_Ed25519FieldElement × t_Ed25519FieldElement × t_Ed25519FieldElement). +Fail Next Obligation. + +Equations point_neg (p : both (t_Ed25519FieldElement × t_Ed25519FieldElement × t_Ed25519FieldElement × t_Ed25519FieldElement)) : both (t_Ed25519FieldElement × t_Ed25519FieldElement × t_Ed25519FieldElement × t_Ed25519FieldElement) := + point_neg p := + letb '(x,y,z,t) := p in + solve_lift (prod_b ((f_ZERO (ret_both (tt : 'unit))) .- x,y,z,(f_ZERO (ret_both (tt : 'unit))) .- t)) : both (t_Ed25519FieldElement × t_Ed25519FieldElement × t_Ed25519FieldElement × t_Ed25519FieldElement). +Fail Next Obligation. + +Equations v_BASE : both t_CompressedEdPoint := + v_BASE := + CompressedEdPoint (array_from_list [U8 (solve_lift (ret_both (88 : int8))); + U8 (solve_lift (ret_both (102 : int8))); + U8 (solve_lift (ret_both (102 : int8))); + U8 (solve_lift (ret_both (102 : int8))); + U8 (solve_lift (ret_both (102 : int8))); + U8 (solve_lift (ret_both (102 : int8))); + U8 (solve_lift (ret_both (102 : int8))); + U8 (solve_lift (ret_both (102 : int8))); + U8 (solve_lift (ret_both (102 : int8))); + U8 (solve_lift (ret_both (102 : int8))); + U8 (solve_lift (ret_both (102 : int8))); + U8 (solve_lift (ret_both (102 : int8))); + U8 (solve_lift (ret_both (102 : int8))); + U8 (solve_lift (ret_both (102 : int8))); + U8 (solve_lift (ret_both (102 : int8))); + U8 (solve_lift (ret_both (102 : int8))); + U8 (solve_lift (ret_both (102 : int8))); + U8 (solve_lift (ret_both (102 : int8))); + U8 (solve_lift (ret_both (102 : int8))); + U8 (solve_lift (ret_both (102 : int8))); + U8 (solve_lift (ret_both (102 : int8))); + U8 (solve_lift (ret_both (102 : int8))); + U8 (solve_lift (ret_both (102 : int8))); + U8 (solve_lift (ret_both (102 : int8))); + U8 (solve_lift (ret_both (102 : int8))); + U8 (solve_lift (ret_both (102 : int8))); + U8 (solve_lift (ret_both (102 : int8))); + U8 (solve_lift (ret_both (102 : int8))); + U8 (solve_lift (ret_both (102 : int8))); + U8 (solve_lift (ret_both (102 : int8))); + U8 (solve_lift (ret_both (102 : int8))); + U8 (solve_lift (ret_both (102 : int8)))]) : both t_CompressedEdPoint. +Fail Next Obligation. + +Equations v_CONSTANT_D : both t_SerializedScalar := + v_CONSTANT_D := + SerializedScalar (array_from_list [U8 (solve_lift (ret_both (163 : int8))); + U8 (solve_lift (ret_both (120 : int8))); + U8 (solve_lift (ret_both (89 : int8))); + U8 (solve_lift (ret_both (19 : int8))); + U8 (solve_lift (ret_both (202 : int8))); + U8 (solve_lift (ret_both (77 : int8))); + U8 (solve_lift (ret_both (235 : int8))); + U8 (solve_lift (ret_both (117 : int8))); + U8 (solve_lift (ret_both (171 : int8))); + U8 (solve_lift (ret_both (216 : int8))); + U8 (solve_lift (ret_both (65 : int8))); + U8 (solve_lift (ret_both (65 : int8))); + U8 (solve_lift (ret_both (77 : int8))); + U8 (solve_lift (ret_both (10 : int8))); + U8 (solve_lift (ret_both (112 : int8))); + U8 (solve_lift (ret_both (0 : int8))); + U8 (solve_lift (ret_both (152 : int8))); + U8 (solve_lift (ret_both (232 : int8))); + U8 (solve_lift (ret_both (121 : int8))); + U8 (solve_lift (ret_both (119 : int8))); + U8 (solve_lift (ret_both (121 : int8))); + U8 (solve_lift (ret_both (64 : int8))); + U8 (solve_lift (ret_both (199 : int8))); + U8 (solve_lift (ret_both (140 : int8))); + U8 (solve_lift (ret_both (115 : int8))); + U8 (solve_lift (ret_both (254 : int8))); + U8 (solve_lift (ret_both (111 : int8))); + U8 (solve_lift (ret_both (43 : int8))); + U8 (solve_lift (ret_both (238 : int8))); + U8 (solve_lift (ret_both (108 : int8))); + U8 (solve_lift (ret_both (3 : int8))); + U8 (solve_lift (ret_both (82 : int8)))]) : both t_SerializedScalar. +Fail Next Obligation. + +Equations v_CONSTANT_L : both t_SerializedScalar := + v_CONSTANT_L := + SerializedScalar (array_from_list [U8 (solve_lift (ret_both (237 : int8))); + U8 (solve_lift (ret_both (211 : int8))); + U8 (solve_lift (ret_both (245 : int8))); + U8 (solve_lift (ret_both (92 : int8))); + U8 (solve_lift (ret_both (26 : int8))); + U8 (solve_lift (ret_both (99 : int8))); + U8 (solve_lift (ret_both (18 : int8))); + U8 (solve_lift (ret_both (88 : int8))); + U8 (solve_lift (ret_both (214 : int8))); + U8 (solve_lift (ret_both (156 : int8))); + U8 (solve_lift (ret_both (247 : int8))); + U8 (solve_lift (ret_both (162 : int8))); + U8 (solve_lift (ret_both (222 : int8))); + U8 (solve_lift (ret_both (249 : int8))); + U8 (solve_lift (ret_both (222 : int8))); + U8 (solve_lift (ret_both (20 : int8))); + U8 (solve_lift (ret_both (0 : int8))); + U8 (solve_lift (ret_both (0 : int8))); + U8 (solve_lift (ret_both (0 : int8))); + U8 (solve_lift (ret_both (0 : int8))); + U8 (solve_lift (ret_both (0 : int8))); + U8 (solve_lift (ret_both (0 : int8))); + U8 (solve_lift (ret_both (0 : int8))); + U8 (solve_lift (ret_both (0 : int8))); + U8 (solve_lift (ret_both (0 : int8))); + U8 (solve_lift (ret_both (0 : int8))); + U8 (solve_lift (ret_both (0 : int8))); + U8 (solve_lift (ret_both (0 : int8))); + U8 (solve_lift (ret_both (0 : int8))); + U8 (solve_lift (ret_both (0 : int8))); + U8 (solve_lift (ret_both (0 : int8))); + U8 (solve_lift (ret_both (16 : int8)))]) : both t_SerializedScalar. +Fail Next Obligation. + +Equations v_CONSTANT_P : both t_SerializedScalar := + v_CONSTANT_P := + SerializedScalar (array_from_list [U8 (solve_lift (ret_both (237 : int8))); + U8 (solve_lift (ret_both (255 : int8))); + U8 (solve_lift (ret_both (255 : int8))); + U8 (solve_lift (ret_both (255 : int8))); + U8 (solve_lift (ret_both (255 : int8))); + U8 (solve_lift (ret_both (255 : int8))); + U8 (solve_lift (ret_both (255 : int8))); + U8 (solve_lift (ret_both (255 : int8))); + U8 (solve_lift (ret_both (255 : int8))); + U8 (solve_lift (ret_both (255 : int8))); + U8 (solve_lift (ret_both (255 : int8))); + U8 (solve_lift (ret_both (255 : int8))); + U8 (solve_lift (ret_both (255 : int8))); + U8 (solve_lift (ret_both (255 : int8))); + U8 (solve_lift (ret_both (255 : int8))); + U8 (solve_lift (ret_both (255 : int8))); + U8 (solve_lift (ret_both (255 : int8))); + U8 (solve_lift (ret_both (255 : int8))); + U8 (solve_lift (ret_both (255 : int8))); + U8 (solve_lift (ret_both (255 : int8))); + U8 (solve_lift (ret_both (255 : int8))); + U8 (solve_lift (ret_both (255 : int8))); + U8 (solve_lift (ret_both (255 : int8))); + U8 (solve_lift (ret_both (255 : int8))); + U8 (solve_lift (ret_both (255 : int8))); + U8 (solve_lift (ret_both (255 : int8))); + U8 (solve_lift (ret_both (255 : int8))); + U8 (solve_lift (ret_both (255 : int8))); + U8 (solve_lift (ret_both (255 : int8))); + U8 (solve_lift (ret_both (255 : int8))); + U8 (solve_lift (ret_both (255 : int8))); + U8 (solve_lift (ret_both (127 : int8)))]) : both t_SerializedScalar. +Fail Next Obligation. + +Equations v_CONSTANT_P1_4_ : both t_SerializedScalar := + v_CONSTANT_P1_4_ := + SerializedScalar (array_from_list [U8 (solve_lift (ret_both (251 : int8))); + U8 (solve_lift (ret_both (255 : int8))); + U8 (solve_lift (ret_both (255 : int8))); + U8 (solve_lift (ret_both (255 : int8))); + U8 (solve_lift (ret_both (255 : int8))); + U8 (solve_lift (ret_both (255 : int8))); + U8 (solve_lift (ret_both (255 : int8))); + U8 (solve_lift (ret_both (255 : int8))); + U8 (solve_lift (ret_both (255 : int8))); + U8 (solve_lift (ret_both (255 : int8))); + U8 (solve_lift (ret_both (255 : int8))); + U8 (solve_lift (ret_both (255 : int8))); + U8 (solve_lift (ret_both (255 : int8))); + U8 (solve_lift (ret_both (255 : int8))); + U8 (solve_lift (ret_both (255 : int8))); + U8 (solve_lift (ret_both (255 : int8))); + U8 (solve_lift (ret_both (255 : int8))); + U8 (solve_lift (ret_both (255 : int8))); + U8 (solve_lift (ret_both (255 : int8))); + U8 (solve_lift (ret_both (255 : int8))); + U8 (solve_lift (ret_both (255 : int8))); + U8 (solve_lift (ret_both (255 : int8))); + U8 (solve_lift (ret_both (255 : int8))); + U8 (solve_lift (ret_both (255 : int8))); + U8 (solve_lift (ret_both (255 : int8))); + U8 (solve_lift (ret_both (255 : int8))); + U8 (solve_lift (ret_both (255 : int8))); + U8 (solve_lift (ret_both (255 : int8))); + U8 (solve_lift (ret_both (255 : int8))); + U8 (solve_lift (ret_both (255 : int8))); + U8 (solve_lift (ret_both (255 : int8))); + U8 (solve_lift (ret_both (31 : int8)))]) : both t_SerializedScalar. +Fail Next Obligation. + +Equations v_CONSTANT_P3_8_ : both t_SerializedScalar := + v_CONSTANT_P3_8_ := + SerializedScalar (array_from_list [U8 (solve_lift (ret_both (254 : int8))); + U8 (solve_lift (ret_both (255 : int8))); + U8 (solve_lift (ret_both (255 : int8))); + U8 (solve_lift (ret_both (255 : int8))); + U8 (solve_lift (ret_both (255 : int8))); + U8 (solve_lift (ret_both (255 : int8))); + U8 (solve_lift (ret_both (255 : int8))); + U8 (solve_lift (ret_both (255 : int8))); + U8 (solve_lift (ret_both (255 : int8))); + U8 (solve_lift (ret_both (255 : int8))); + U8 (solve_lift (ret_both (255 : int8))); + U8 (solve_lift (ret_both (255 : int8))); + U8 (solve_lift (ret_both (255 : int8))); + U8 (solve_lift (ret_both (255 : int8))); + U8 (solve_lift (ret_both (255 : int8))); + U8 (solve_lift (ret_both (255 : int8))); + U8 (solve_lift (ret_both (255 : int8))); + U8 (solve_lift (ret_both (255 : int8))); + U8 (solve_lift (ret_both (255 : int8))); + U8 (solve_lift (ret_both (255 : int8))); + U8 (solve_lift (ret_both (255 : int8))); + U8 (solve_lift (ret_both (255 : int8))); + U8 (solve_lift (ret_both (255 : int8))); + U8 (solve_lift (ret_both (255 : int8))); + U8 (solve_lift (ret_both (255 : int8))); + U8 (solve_lift (ret_both (255 : int8))); + U8 (solve_lift (ret_both (255 : int8))); + U8 (solve_lift (ret_both (255 : int8))); + U8 (solve_lift (ret_both (255 : int8))); + U8 (solve_lift (ret_both (255 : int8))); + U8 (solve_lift (ret_both (255 : int8))); + U8 (solve_lift (ret_both (15 : int8)))]) : both t_SerializedScalar. +Fail Next Obligation. + +Equations check_canonical_point (x : both t_CompressedEdPoint) : both 'bool := + check_canonical_point x := + letb x := update_at x (ret_both (31 : int32)) ((x.a[(ret_both (31 : int32))]) .& (U8 (ret_both (127 : int8)))) in + letb x := impl__BigInteger__from_byte_seq_le x in + solve_lift (x <.? (impl__BigInteger__from_byte_seq_le v_CONSTANT_P)) : both 'bool. +Fail Next Obligation. + +Equations check_canonical_scalar (s : both t_SerializedScalar) : both 'bool := + check_canonical_scalar s := + solve_lift (ifb (impl__U8__declassify ((s.a[(ret_both (31 : uint_size))]) .& (U8 (ret_both (224 : int8))))) <> (ret_both (0 : int8)) + then ret_both (false : 'bool) + else (impl__BigInteger__from_byte_seq_le s) <.? (impl__BigInteger__from_byte_seq_le v_CONSTANT_L)) : both 'bool. +Fail Next Obligation. + +Equations is_negative (x : both t_Ed25519FieldElement) : both t_U8 := + is_negative x := + solve_lift (ifb impl__Ed25519FieldElement__bit x (ret_both (0 : uint_size)) + then U8 (ret_both (1 : int8)) + else U8 (ret_both (0 : int8))) : both t_U8. +Fail Next Obligation. + +Equations compress (p : both (t_Ed25519FieldElement × t_Ed25519FieldElement × t_Ed25519FieldElement × t_Ed25519FieldElement)) : both t_CompressedEdPoint := + compress p := + letb '(x,y,z,_) := p in + letb z_inv := impl__Ed25519FieldElement__inv z in + letb x := x .* z_inv in + letb y := y .* z_inv in + letb (s : t_Seq t_U8) := impl__Ed25519FieldElement__to_byte_seq_le y in + letb s := update_at s (ret_both (31 : int32)) ((s.a[(ret_both (31 : int32))]) .^ ((is_negative x) shift_left (ret_both (7 : uint_size)))) in + solve_lift (impl__CompressedEdPoint__from_slice s (ret_both (0 : uint_size)) (ret_both (32 : uint_size))) : both t_CompressedEdPoint. +Fail Next Obligation. + +Equations encode (p : both (t_Ed25519FieldElement × t_Ed25519FieldElement × t_Ed25519FieldElement × t_Ed25519FieldElement)) : both (t_Seq t_U8) := + encode p := + letb '(x,y,z,_) := p in + letb z_inv := impl__Ed25519FieldElement__inv z in + letb x := x .* z_inv in + letb y := y .* z_inv in + letb (s : t_Seq t_U8) := impl__Ed25519FieldElement__to_byte_seq_le y in + letb s := update_at s (ret_both (31 : int32)) ((s.a[(ret_both (31 : int32))]) .^ ((is_negative x) shift_left (ret_both (7 : uint_size)))) in + solve_lift s : both (t_Seq t_U8). +Fail Next Obligation. + +Equations point_add (p : both (t_Ed25519FieldElement × t_Ed25519FieldElement × t_Ed25519FieldElement × t_Ed25519FieldElement)) (q : both (t_Ed25519FieldElement × t_Ed25519FieldElement × t_Ed25519FieldElement × t_Ed25519FieldElement)) : both (t_Ed25519FieldElement × t_Ed25519FieldElement × t_Ed25519FieldElement × t_Ed25519FieldElement) := + point_add p q := + letb d_c := impl__Ed25519FieldElement__from_byte_seq_le v_CONSTANT_D in + letb two := f_TWO (ret_both (tt : 'unit)) in + letb '(x1,y1,z1,t1) := p in + letb '(x2,y2,z2,t2) := q in + letb a := (y1 .- x1) .* (y2 .- x2) in + letb b := (y1 .+ x1) .* (y2 .+ x2) in + letb c := ((t1 .* two) .* d_c) .* t2 in + letb d := (z1 .* two) .* z2 in + letb e := b .- a in + letb f := d .- c in + letb g := d .+ c in + letb h := b .+ a in + letb x3 := e .* f in + letb y3 := g .* h in + letb t3 := e .* h in + letb z3 := f .* g in + solve_lift (prod_b (x3,y3,z3,t3)) : both (t_Ed25519FieldElement × t_Ed25519FieldElement × t_Ed25519FieldElement × t_Ed25519FieldElement). +Fail Next Obligation. + +Equations point_mul (s : both t_Scalar) (p : both (t_Ed25519FieldElement × t_Ed25519FieldElement × t_Ed25519FieldElement × t_Ed25519FieldElement)) : both (t_Ed25519FieldElement × t_Ed25519FieldElement × t_Ed25519FieldElement × t_Ed25519FieldElement) := + point_mul s p := + letb p := p in + letb q := point_identity (ret_both (tt : 'unit)) in + letb '(p,q) := f_fold (f_into_iter (Build_t_Range (f_start := ret_both (0 : uint_size)) (f_end := ret_both (256 : uint_size)))) (prod_b (p,q)) (fun '(p,q) => fun i => + letb q := ifb impl__Scalar__bit s i + then letb q := point_add q p in + q + else q in + letb p := point_add p p in + prod_b (p,q)) in + solve_lift q : both (t_Ed25519FieldElement × t_Ed25519FieldElement × t_Ed25519FieldElement × t_Ed25519FieldElement). +Fail Next Obligation. + +Equations point_mul_by_cofactor (p : both (t_Ed25519FieldElement × t_Ed25519FieldElement × t_Ed25519FieldElement × t_Ed25519FieldElement)) : both (t_Ed25519FieldElement × t_Ed25519FieldElement × t_Ed25519FieldElement × t_Ed25519FieldElement) := + point_mul_by_cofactor p := + letb p2 := point_add p p in + letb p4 := point_add p2 p2 in + solve_lift (point_add p4 p4) : both (t_Ed25519FieldElement × t_Ed25519FieldElement × t_Ed25519FieldElement × t_Ed25519FieldElement). +Fail Next Obligation. + +Equations secret_expand (sk : both t_SerializedScalar) : both (t_SerializedScalar × t_SerializedScalar) := + secret_expand sk := + letb h := sha512 (impl_41__from_slice sk (ret_both (0 : uint_size)) (ret_both (32 : uint_size))) in + letb h_d := impl__SerializedScalar__from_slice h (ret_both (32 : uint_size)) (ret_both (32 : uint_size)) in + letb s := impl__SerializedScalar__from_slice h (ret_both (0 : uint_size)) (ret_both (32 : uint_size)) in + letb s := update_at s (ret_both (0 : int32)) ((s.a[(ret_both (0 : int32))]) .& (U8 (ret_both (248 : int8)))) in + letb s := update_at s (ret_both (31 : int32)) ((s.a[(ret_both (31 : int32))]) .& (U8 (ret_both (127 : int8)))) in + letb s := update_at s (ret_both (31 : int32)) ((s.a[(ret_both (31 : int32))]) .| (U8 (ret_both (64 : int8)))) in + solve_lift (prod_b (s,h_d)) : both (t_SerializedScalar × t_SerializedScalar). +Fail Next Obligation. + +Equations sqrt (a : both t_Ed25519FieldElement) : both (t_Option t_Ed25519FieldElement) := + sqrt a := + letb p3_8_ := impl__Ed25519FieldElement__from_byte_seq_le v_CONSTANT_P3_8_ in + letb p1_4_ := impl__Ed25519FieldElement__from_byte_seq_le v_CONSTANT_P1_4_ in + letb x_c := f_pow_self a p3_8_ in + letb (result : t_Option t_Ed25519FieldElement) := Option_None in + letb result := ifb (x_c .* x_c) =.? a + then letb result := Option_Some x_c in + result + else result in + letb result := ifb (x_c .* x_c) =.? ((f_ZERO (ret_both (tt : 'unit))) .- a) + then letb x := (f_pow_self (f_TWO (ret_both (tt : 'unit))) p1_4_) .* x_c in + letb result := Option_Some x in + result + else result in + solve_lift result : both (t_Option t_Ed25519FieldElement). +Fail Next Obligation. + +Equations decompress (q : both t_CompressedEdPoint) : both (t_Option (t_Ed25519FieldElement × t_Ed25519FieldElement × t_Ed25519FieldElement × t_Ed25519FieldElement)) := + decompress q := + solve_lift (run (letb d := impl__Ed25519FieldElement__from_byte_seq_le v_CONSTANT_D in + letb x_s := ((q.a[(ret_both (31 : uint_size))]) .& (U8 (ret_both (128 : int8)))) shift_right (ret_both (7 : uint_size)) in + letb y_s := q in + letb y_s := update_at y_s (ret_both (31 : int32)) ((y_s.a[(ret_both (31 : int32))]) .& (U8 (ret_both (127 : int8)))) in + letm[choice_typeMonad.option_bind_code] _ := ifb not (check_canonical_point y_s) + then letm[choice_typeMonad.option_bind_code] _ := Option_None in + Option_Some (ret_both (tt : 'unit)) + else Option_Some (ret_both (tt : 'unit)) in + letb y := impl__Ed25519FieldElement__from_byte_seq_le y_s in + letb z := f_ONE (ret_both (tt : 'unit)) in + letb yy := y .* y in + letb u := yy .- z in + letb v := (d .* yy) .+ z in + letb xx := u .* (impl__Ed25519FieldElement__inv v) in + letm[choice_typeMonad.option_bind_code] x := sqrt xx in + letb x_r := is_negative x in + letm[choice_typeMonad.option_bind_code] _ := ifb andb (x =.? (f_ZERO (ret_both (tt : 'unit)))) ((impl__U8__declassify x_s) =.? (ret_both (1 : int8))) + then letm[choice_typeMonad.option_bind_code] _ := Option_None in + Option_Some (ret_both (tt : 'unit)) + else Option_Some (ret_both (tt : 'unit)) in + Option_Some (letb x := ifb (impl__U8__declassify x_r) <> (impl__U8__declassify x_s) + then letb x := (f_ZERO (ret_both (tt : 'unit))) .- x in + x + else x in + Option_Some (prod_b (x,y,z,x .* y))))) : both (t_Option (t_Ed25519FieldElement × t_Ed25519FieldElement × t_Ed25519FieldElement × t_Ed25519FieldElement)). +Fail Next Obligation. + +Equations decode (q_s : both (t_Seq t_U8)) : both (t_Option (t_Ed25519FieldElement × t_Ed25519FieldElement × t_Ed25519FieldElement × t_Ed25519FieldElement)) := + decode q_s := + letb q := impl__CompressedEdPoint__from_slice q_s (ret_both (0 : uint_size)) (ret_both (32 : uint_size)) in + solve_lift (decompress q) : both (t_Option (t_Ed25519FieldElement × t_Ed25519FieldElement × t_Ed25519FieldElement × t_Ed25519FieldElement)). +Fail Next Obligation. + +Equations decompress_non_canonical (p : both t_CompressedEdPoint) : both (t_Option (t_Ed25519FieldElement × t_Ed25519FieldElement × t_Ed25519FieldElement × t_Ed25519FieldElement)) := + decompress_non_canonical p := + solve_lift (run (letb d := impl__Ed25519FieldElement__from_byte_seq_le v_CONSTANT_D in + letb x_s := ((p.a[(ret_both (31 : uint_size))]) .& (U8 (ret_both (128 : int8)))) shift_right (ret_both (7 : uint_size)) in + letb y_s := p in + letb y_s := update_at y_s (ret_both (31 : int32)) ((y_s.a[(ret_both (31 : int32))]) .& (U8 (ret_both (127 : int8)))) in + letb y := impl__Ed25519FieldElement__from_byte_seq_le y_s in + letb z := f_ONE (ret_both (tt : 'unit)) in + letb yy := y .* y in + letb u := yy .- z in + letb v := (d .* yy) .+ z in + letb xx := u .* (impl__Ed25519FieldElement__inv v) in + letm[choice_typeMonad.option_bind_code] x := sqrt xx in + Option_Some (letb x_r := is_negative x in + letb x := ifb (impl__U8__declassify x_r) <> (impl__U8__declassify x_s) + then letb x := (f_ZERO (ret_both (tt : 'unit))) .- x in + x + else x in + Option_Some (prod_b (x,y,z,x .* y))))) : both (t_Option (t_Ed25519FieldElement × t_Ed25519FieldElement × t_Ed25519FieldElement × t_Ed25519FieldElement)). +Fail Next Obligation. + +Equations secret_to_public (sk : both t_SerializedScalar) : both t_CompressedEdPoint := + secret_to_public sk := + letb '(s,_) := secret_expand sk in + letb base := impl__unwrap (decompress v_BASE) in + letb ss := impl__Scalar__from_byte_seq_le s in + letb a := point_mul ss base in + solve_lift (compress a) : both t_CompressedEdPoint. +Fail Next Obligation. diff --git a/gf128/proofs/ssprove/extraction/Hacspec_gf128.v b/gf128/proofs/ssprove/extraction/Hacspec_gf128.v new file mode 100644 index 0000000..eece7a4 --- /dev/null +++ b/gf128/proofs/ssprove/extraction/Hacspec_gf128.v @@ -0,0 +1,121 @@ +(* File automatically generated by Hacspec *) +Set Warnings "-notation-overridden,-ambiguous-paths". +From Crypt Require Import choice_type Package Prelude. +Import PackageNotation. +From extructures Require Import ord fset. +From mathcomp Require Import word_ssrZ word. +(* From Jasmin Require Import word. *) + +From Coq Require Import ZArith. +From Coq Require Import Strings.String. +Import List.ListNotations. +Open Scope list_scope. +Open Scope Z_scope. +Open Scope bool_scope. + +From Hacspec Require Import ChoiceEquality. +From Hacspec Require Import LocationUtility. +From Hacspec Require Import Hacspec_Lib_Comparable. +From Hacspec Require Import Hacspec_Lib_Pre. +From Hacspec Require Import Hacspec_Lib. + +Open Scope hacspec_scope. +Import choice.Choice.Exports. + +Obligation Tactic := (* try timeout 8 *) solve_ssprove_obligations. + +Require Import Hacspec_lib. +Export Hacspec_lib. + +(*Not implemented yet? todo(item)*) + +Equations v_BLOCKSIZE : both uint_size := + v_BLOCKSIZE := + solve_lift (ret_both (16 : uint_size)) : both uint_size. +Fail Next Obligation. + +Notation "'t_Gf128Block'" := (nseq int8 BLOCKSIZE). +Definition Gf128Block : both t_Gf128Block -> both t_Gf128Block := + id. + +Notation "'t_Gf128Key'" := (nseq int8 BLOCKSIZE). +Definition Gf128Key : both t_Gf128Key -> both t_Gf128Key := + id. + +Notation "'t_Gf128Tag'" := (nseq int8 BLOCKSIZE). +Definition Gf128Tag : both t_Gf128Tag -> both t_Gf128Tag := + id. + +Notation "'t_Element'" := t_U128. + +Equations decode (e : both t_U128) : both t_Gf128Block := + decode e := + solve_lift (impl__Gf128Block__from_seq (v_U128_to_be_bytes e)) : both t_Gf128Block. +Fail Next Obligation. + +Equations encode (block : both t_Gf128Block) : both t_U128 := + encode block := + solve_lift (v_U128_from_be_bytes (impl__U128Word__from_seq block)) : both t_U128. +Fail Next Obligation. + +Equations fadd (x : both t_U128) (y : both t_U128) : both t_U128 := + fadd x y := + solve_lift (x .^ y) : both t_U128. +Fail Next Obligation. + +Equations v_IRRED : both t_U128 := + v_IRRED := + U128 (solve_lift (ret_both (299076299051606071403356588563077529600 : int128))) : both t_U128. +Fail Next Obligation. + +Equations fmul (x : both t_U128) (y : both t_U128) : both t_U128 := + fmul x y := + letb (res : t_U128) := U128 (ret_both (0 : int128)) in + letb sh := x in + letb '(res,sh) := f_fold (f_into_iter (Build_t_Range (f_start := ret_both (0 : uint_size)) (f_end := ret_both (128 : uint_size)))) (prod_b (res,sh)) (fun '(res,sh) => fun i => + letb res := ifb (impl__U128__declassify (y .& ((U128 (ret_both (1 : int128))) shift_left ((ret_both (127 : uint_size)) .- i)))) <> (impl__U128__declassify (U128 (ret_both (0 : int128)))) + then letb res := res .^ sh in + res + else res in + ifb (impl__U128__declassify (sh .& (U128 (ret_both (1 : int128))))) <> (impl__U128__declassify (U128 (ret_both (0 : int128)))) + then letb sh := (sh shift_right (ret_both (1 : uint_size))) .^ v_IRRED in + prod_b (res,sh) + else letb sh := sh shift_right (ret_both (1 : uint_size)) in + prod_b (res,sh)) in + solve_lift res : both t_U128. +Fail Next Obligation. + +Equations update (r : both t_U128) (block : both t_Gf128Block) (acc : both t_U128) : both t_U128 := + update r block acc := + solve_lift (fmul (fadd (encode block) acc) r) : both t_U128. +Fail Next Obligation. + +Equations poly (msg : both (t_Seq t_U8)) (r : both t_U128) : both t_U128 := + poly msg r := + letb l := impl_41__len msg in + letb (n_blocks : uint_size) := l ./ v_BLOCKSIZE in + letb rem := l .% v_BLOCKSIZE in + letb acc := U128 (ret_both (0 : int128)) in + letb acc := f_fold (f_into_iter (Build_t_Range (f_start := ret_both (0 : uint_size)) (f_end := n_blocks))) acc (fun acc => fun i => + letb k := i .* v_BLOCKSIZE in + letb block := impl__Gf128Block__new (ret_both (tt : 'unit)) in + letb block := f_update_start block (impl_41__slice_range msg (Build_t_Range (f_start := k) (f_end := k .+ v_BLOCKSIZE))) in + letb acc := update r block acc in + acc) in + letb acc := ifb rem <> (ret_both (0 : uint_size)) + then letb k := n_blocks .* v_BLOCKSIZE in + letb last_block := impl__Gf128Block__new (ret_both (tt : 'unit)) in + letb last_block := f_update_slice last_block (ret_both (0 : uint_size)) msg k rem in + letb acc := update r last_block acc in + acc + else acc in + solve_lift acc : both t_U128. +Fail Next Obligation. + +Equations gmac (text : both (t_Seq t_U8)) (k : both t_Gf128Key) : both t_Gf128Tag := + gmac text k := + letb s := impl__Gf128Block__new (ret_both (tt : 'unit)) in + letb r := encode (impl__Gf128Block__from_seq k) in + letb a := poly text r in + solve_lift (impl__Gf128Tag__from_seq (decode (fadd a (encode s)))) : both t_Gf128Tag. +Fail Next Obligation. diff --git a/gimli/proofs/ssprove/extraction/Hacspec_gimli.v b/gimli/proofs/ssprove/extraction/Hacspec_gimli.v new file mode 100644 index 0000000..213b403 --- /dev/null +++ b/gimli/proofs/ssprove/extraction/Hacspec_gimli.v @@ -0,0 +1,256 @@ +(* File automatically generated by Hacspec *) +Set Warnings "-notation-overridden,-ambiguous-paths". +From Crypt Require Import choice_type Package Prelude. +Import PackageNotation. +From extructures Require Import ord fset. +From mathcomp Require Import word_ssrZ word. +(* From Jasmin Require Import word. *) + +From Coq Require Import ZArith. +From Coq Require Import Strings.String. +Import List.ListNotations. +Open Scope list_scope. +Open Scope Z_scope. +Open Scope bool_scope. + +From Hacspec Require Import ChoiceEquality. +From Hacspec Require Import LocationUtility. +From Hacspec Require Import Hacspec_Lib_Comparable. +From Hacspec Require Import Hacspec_Lib_Pre. +From Hacspec Require Import Hacspec_Lib. + +Open Scope hacspec_scope. +Import choice.Choice.Exports. + +Obligation Tactic := (* try timeout 8 *) solve_ssprove_obligations. + +Require Import Hacspec_lib. +Export Hacspec_lib. + +(*Not implemented yet? todo(item)*) + +Notation "'t_State'" := (nseq int32 12). +Definition State : both t_State -> both t_State := + id. + +Notation "'t_Block'" := (nseq int8 16). +Definition Block : both t_Block -> both t_Block := + id. + +Notation "'t_Digest'" := (nseq int8 32). +Definition Digest : both t_Digest -> both t_Digest := + id. + +Notation "'t_Key'" := (nseq int8 32). +Definition Key : both t_Key -> both t_Key := + id. + +Notation "'t_Nonce'" := (nseq int8 16). +Definition Nonce : both t_Nonce -> both t_Nonce := + id. + +Notation "'t_Tag'" := (nseq int8 16). +Definition Tag : both t_Tag -> both t_Tag := + id. + +Equations key_to_u32s (key : both t_Key) : both (t_Seq t_U32) := + key_to_u32s key := + letb uints := impl_41__new (ret_both (8 : uint_size)) in + letb uints := update_at uints (ret_both (0 : int32)) (v_U32_from_le_bytes (impl__U32Word__from_slice_range key (Build_t_Range (f_start := ret_both (0 : uint_size)) (f_end := ret_both (4 : uint_size))))) in + letb uints := update_at uints (ret_both (1 : int32)) (v_U32_from_le_bytes (impl__U32Word__from_slice_range key (Build_t_Range (f_start := ret_both (4 : uint_size)) (f_end := ret_both (8 : uint_size))))) in + letb uints := update_at uints (ret_both (2 : int32)) (v_U32_from_le_bytes (impl__U32Word__from_slice_range key (Build_t_Range (f_start := ret_both (8 : uint_size)) (f_end := ret_both (12 : uint_size))))) in + letb uints := update_at uints (ret_both (3 : int32)) (v_U32_from_le_bytes (impl__U32Word__from_slice_range key (Build_t_Range (f_start := ret_both (12 : uint_size)) (f_end := ret_both (16 : uint_size))))) in + letb uints := update_at uints (ret_both (4 : int32)) (v_U32_from_le_bytes (impl__U32Word__from_slice_range key (Build_t_Range (f_start := ret_both (16 : uint_size)) (f_end := ret_both (20 : uint_size))))) in + letb uints := update_at uints (ret_both (5 : int32)) (v_U32_from_le_bytes (impl__U32Word__from_slice_range key (Build_t_Range (f_start := ret_both (20 : uint_size)) (f_end := ret_both (24 : uint_size))))) in + letb uints := update_at uints (ret_both (6 : int32)) (v_U32_from_le_bytes (impl__U32Word__from_slice_range key (Build_t_Range (f_start := ret_both (24 : uint_size)) (f_end := ret_both (28 : uint_size))))) in + letb uints := update_at uints (ret_both (7 : int32)) (v_U32_from_le_bytes (impl__U32Word__from_slice_range key (Build_t_Range (f_start := ret_both (28 : uint_size)) (f_end := ret_both (32 : uint_size))))) in + solve_lift uints : both (t_Seq t_U32). +Fail Next Obligation. + +Equations nonce_to_u32s (nonce : both t_Nonce) : both (t_Seq t_U32) := + nonce_to_u32s nonce := + letb uints := impl_41__new (ret_both (4 : uint_size)) in + letb uints := update_at uints (ret_both (0 : int32)) (v_U32_from_le_bytes (impl__U32Word__from_slice_range nonce (Build_t_Range (f_start := ret_both (0 : uint_size)) (f_end := ret_both (4 : uint_size))))) in + letb uints := update_at uints (ret_both (1 : int32)) (v_U32_from_le_bytes (impl__U32Word__from_slice_range nonce (Build_t_Range (f_start := ret_both (4 : uint_size)) (f_end := ret_both (8 : uint_size))))) in + letb uints := update_at uints (ret_both (2 : int32)) (v_U32_from_le_bytes (impl__U32Word__from_slice_range nonce (Build_t_Range (f_start := ret_both (8 : uint_size)) (f_end := ret_both (12 : uint_size))))) in + letb uints := update_at uints (ret_both (3 : int32)) (v_U32_from_le_bytes (impl__U32Word__from_slice_range nonce (Build_t_Range (f_start := ret_both (12 : uint_size)) (f_end := ret_both (16 : uint_size))))) in + solve_lift uints : both (t_Seq t_U32). +Fail Next Obligation. + +Equations swap (s : both t_State) (i : both uint_size) (j : both uint_size) : both t_State := + swap s i j := + letb tmp := s.a[i] in + letb s := update_at_usize s i (s.a[j]) in + letb s := update_at_usize s j tmp in + solve_lift s : both t_State. +Fail Next Obligation. + +Equations gimli_round (s : both t_State) (r : both int32) : both t_State := + gimli_round s r := + letb s := f_fold (f_into_iter (Build_t_Range (f_start := ret_both (0 : uint_size)) (f_end := ret_both (4 : uint_size)))) s (fun s => fun col => + letb x := impl__U32__rotate_left (s.a[col]) (ret_both (24 : uint_size)) in + letb y := impl__U32__rotate_left (s.a[(col .+ (ret_both (4 : uint_size)))]) (ret_both (9 : uint_size)) in + letb z := s.a[(col .+ (ret_both (8 : uint_size)))] in + letb s := update_at_usize s (col .+ (ret_both (8 : uint_size))) ((x .^ (z shift_left (ret_both (1 : uint_size)))) .^ ((y .& z) shift_left (ret_both (2 : uint_size)))) in + letb s := update_at_usize s (col .+ (ret_both (4 : uint_size))) ((y .^ x) .^ ((x .| z) shift_left (ret_both (1 : uint_size)))) in + letb s := update_at_usize s col ((z .^ y) .^ ((x .& y) shift_left (ret_both (3 : uint_size)))) in + s) in + letb s := ifb (r .& (ret_both (3 : int32))) =.? (ret_both (0 : int32)) + then letb s := swap s (ret_both (0 : uint_size)) (ret_both (1 : uint_size)) in + letb s := swap s (ret_both (2 : uint_size)) (ret_both (3 : uint_size)) in + s + else s in + letb s := ifb (r .& (ret_both (3 : int32))) =.? (ret_both (2 : int32)) + then letb s := swap s (ret_both (0 : uint_size)) (ret_both (2 : uint_size)) in + letb s := swap s (ret_both (1 : uint_size)) (ret_both (3 : uint_size)) in + s + else s in + letb s := ifb (r .& (ret_both (3 : int32))) =.? (ret_both (0 : int32)) + then update_at s (ret_both (0 : int32)) ((s.a[(ret_both (0 : int32))]) .^ ((U32 (ret_both (2654435584 : int32))) .| (U32 r))) + else s in + solve_lift s : both t_State. +Fail Next Obligation. + +Equations gimli (s : both t_State) : both t_State := + gimli s := + letb s := f_fold (f_into_iter (Build_t_Range (f_start := ret_both (0 : int32)) (f_end := ret_both (24 : int32)))) s (fun s => fun rnd => + letb rnd := cast_int (WS2 := _) ((ret_both (24 : int32)) .- rnd) in + letb s := gimli_round s rnd in + s) in + solve_lift s : both t_State. +Fail Next Obligation. + +Equations absorb_block (input_block : both t_Block) (s : both t_State) : both t_State := + absorb_block input_block s := + letb input_bytes := impl__Block__to_le_U32s input_block in + letb s := update_at s (ret_both (0 : int32)) ((s.a[(ret_both (0 : int32))]) .^ (input_bytes.a[(ret_both (0 : int32))])) in + letb s := update_at s (ret_both (1 : int32)) ((s.a[(ret_both (1 : int32))]) .^ (input_bytes.a[(ret_both (1 : int32))])) in + letb s := update_at s (ret_both (2 : int32)) ((s.a[(ret_both (2 : int32))]) .^ (input_bytes.a[(ret_both (2 : int32))])) in + letb s := update_at s (ret_both (3 : int32)) ((s.a[(ret_both (3 : int32))]) .^ (input_bytes.a[(ret_both (3 : int32))])) in + solve_lift (gimli s) : both t_State. +Fail Next Obligation. + +Equations squeeze_block (s : both t_State) : both t_Block := + squeeze_block s := + letb block := impl__Block__new (ret_both (tt : 'unit)) in + letb block := f_fold (f_into_iter (Build_t_Range (f_start := ret_both (0 : int32)) (f_end := ret_both (4 : int32)))) block (fun block => fun i => + letb (s_i : t_U32) := s.a[i] in + letb s_i_bytes := f_to_le_bytes s_i in + letb block := update_at block ((ret_both (4 : int32)) .* i) (s_i_bytes.a[(ret_both (0 : int32))]) in + letb block := update_at block (((ret_both (4 : int32)) .* i) .+ (ret_both (1 : int32))) (s_i_bytes.a[(ret_both (1 : int32))]) in + letb block := update_at block (((ret_both (4 : int32)) .* i) .+ (ret_both (2 : int32))) (s_i_bytes.a[(ret_both (2 : int32))]) in + letb block := update_at block (((ret_both (4 : int32)) .* i) .+ (ret_both (3 : int32))) (s_i_bytes.a[(ret_both (3 : int32))]) in + block) in + solve_lift block : both t_Block. +Fail Next Obligation. + +Equations gimli_hash_state (input : both (t_Seq t_U8)) (s : both t_State) : both t_State := + gimli_hash_state input s := + letb rate := impl__Block__length (ret_both (tt : 'unit)) in + letb chunks := impl_41__num_exact_chunks input rate in + letb s := f_fold (f_into_iter (Build_t_Range (f_start := ret_both (0 : uint_size)) (f_end := chunks))) s (fun s => fun i => + letb input_block := impl_41__get_exact_chunk input rate i in + letb full_block := impl__Block__from_seq input_block in + letb s := absorb_block full_block s in + s) in + letb input_block := impl_41__get_remainder_chunk input rate in + letb input_block_padded := impl__Block__new (ret_both (tt : 'unit)) in + letb input_block_padded := f_update_start input_block_padded input_block in + letb input_block_padded := update_at_usize input_block_padded (impl_41__len input_block) (U8 (ret_both (1 : int8))) in + letb s := update_at s (ret_both (11 : int32)) ((s.a[(ret_both (11 : int32))]) .^ (U32 (ret_both (16777216 : int32)))) in + letb s := absorb_block input_block_padded s in + solve_lift s : both t_State. +Fail Next Obligation. + +Equations gimli_hash (input_bytes : both (t_Seq t_U8)) : both t_Digest := + gimli_hash input_bytes := + letb s := impl__State__new (ret_both (tt : 'unit)) in + letb s := gimli_hash_state input_bytes s in + letb output := impl__Digest__new (ret_both (tt : 'unit)) in + letb output := f_update_start output (squeeze_block s) in + letb s := gimli s in + solve_lift (f_update output (impl__Block__length (ret_both (tt : 'unit))) (squeeze_block s)) : both t_Digest. +Fail Next Obligation. + +Equations process_ad (ad : both (t_Seq t_U8)) (s : both t_State) : both t_State := + process_ad ad s := + solve_lift (gimli_hash_state ad s) : both t_State. +Fail Next Obligation. + +Equations process_ct (ciphertext : both (t_Seq t_U8)) (s : both t_State) : both (t_State × t_Seq t_U8) := + process_ct ciphertext s := + letb message := impl_41__new (impl_41__len ciphertext) in + letb rate := impl__Block__length (ret_both (tt : 'unit)) in + letb num_chunks := impl_41__num_exact_chunks ciphertext rate in + letb '(message,s) := f_fold (f_into_iter (Build_t_Range (f_start := ret_both (0 : uint_size)) (f_end := num_chunks))) (prod_b (message,s)) (fun '(message,s) => fun i => + letb key_block := squeeze_block s in + letb ct_block := impl_41__get_exact_chunk ciphertext rate i in + letb ct_block := impl__Block__from_seq ct_block in + letb msg_block := ct_block .^ key_block in + letb message := impl_41__set_exact_chunk message rate i (ct_block .^ key_block) in + letb s := absorb_block msg_block s in + prod_b (message,s)) in + letb key_block := squeeze_block s in + letb ct_final := impl_41__get_remainder_chunk ciphertext rate in + letb block_len := impl_41__len ct_final in + letb ct_block_padded := impl__Block__new (ret_both (tt : 'unit)) in + letb ct_block_padded := f_update_start ct_block_padded ct_final in + letb msg_block := ct_block_padded .^ key_block in + letb message := impl_41__set_chunk message rate num_chunks (impl__Block__slice_range msg_block (Build_t_Range (f_start := ret_both (0 : uint_size)) (f_end := block_len))) in + letb msg_block := impl__Block__from_slice_range msg_block (Build_t_Range (f_start := ret_both (0 : uint_size)) (f_end := block_len)) in + letb msg_block := update_at_usize msg_block block_len ((msg_block.a[block_len]) .^ (U8 (ret_both (1 : int8)))) in + letb s := update_at s (ret_both (11 : int32)) ((s.a[(ret_both (11 : int32))]) .^ (U32 (ret_both (16777216 : int32)))) in + letb s := absorb_block msg_block s in + solve_lift (prod_b (s,message)) : both (t_State × t_Seq t_U8). +Fail Next Obligation. + +Equations gimli_aead_decrypt (ciphertext : both (t_Seq t_U8)) (ad : both (t_Seq t_U8)) (tag : both t_Tag) (nonce : both t_Nonce) (key : both t_Key) : both (t_Seq t_U8) := + gimli_aead_decrypt ciphertext ad tag nonce key := + letb s := impl__State__from_seq (impl_41__concat (nonce_to_u32s nonce) (key_to_u32s key)) in + letb s := gimli s in + letb s := process_ad ad s in + letb '(s,message) := process_ct ciphertext s in + letb my_tag := squeeze_block s in + letb my_tag := impl__Tag__from_seq my_tag in + letb out := impl_41__new (ret_both (0 : uint_size)) in + letb out := ifb f_equal my_tag tag + then letb out := message in + out + else out in + solve_lift out : both (t_Seq t_U8). +Fail Next Obligation. + +Equations process_msg (message : both (t_Seq t_U8)) (s : both t_State) : both (t_State × t_Seq t_U8) := + process_msg message s := + letb ciphertext := impl_41__new (impl_41__len message) in + letb rate := impl__Block__length (ret_both (tt : 'unit)) in + letb num_chunks := impl_41__num_exact_chunks message rate in + letb '(ciphertext,s) := f_fold (f_into_iter (Build_t_Range (f_start := ret_both (0 : uint_size)) (f_end := num_chunks))) (prod_b (ciphertext,s)) (fun '(ciphertext,s) => fun i => + letb key_block := squeeze_block s in + letb msg_block := impl_41__get_exact_chunk message rate i in + letb msg_block := impl__Block__from_seq msg_block in + letb ciphertext := impl_41__set_exact_chunk ciphertext rate i (msg_block .^ key_block) in + letb s := absorb_block msg_block s in + prod_b (ciphertext,s)) in + letb key_block := squeeze_block s in + letb last_block := impl_41__get_remainder_chunk message rate in + letb block_len := impl_41__len last_block in + letb msg_block_padded := impl__Block__new (ret_both (tt : 'unit)) in + letb msg_block_padded := f_update_start msg_block_padded last_block in + letb ciphertext := impl_41__set_chunk ciphertext rate num_chunks (impl__Block__slice_range (msg_block_padded .^ key_block) (Build_t_Range (f_start := ret_both (0 : uint_size)) (f_end := block_len))) in + letb msg_block_padded := update_at_usize msg_block_padded block_len ((msg_block_padded.a[block_len]) .^ (U8 (ret_both (1 : int8)))) in + letb s := update_at s (ret_both (11 : int32)) ((s.a[(ret_both (11 : int32))]) .^ (U32 (ret_both (16777216 : int32)))) in + letb s := absorb_block msg_block_padded s in + solve_lift (prod_b (s,ciphertext)) : both (t_State × t_Seq t_U8). +Fail Next Obligation. + +Equations gimli_aead_encrypt (message : both (t_Seq t_U8)) (ad : both (t_Seq t_U8)) (nonce : both t_Nonce) (key : both t_Key) : both (t_Seq t_U8 × t_Tag) := + gimli_aead_encrypt message ad nonce key := + letb s := impl__State__from_seq (impl_41__concat (nonce_to_u32s nonce) (key_to_u32s key)) in + letb s := gimli s in + letb s := process_ad ad s in + letb '(s,ciphertext) := process_msg message s in + letb tag := squeeze_block s in + letb tag := impl__Tag__from_seq tag in + solve_lift (prod_b (ciphertext,tag)) : both (t_Seq t_U8 × t_Tag). +Fail Next Obligation. diff --git a/halo2/proofs/ssprove/extraction/Hacspec_halo2.v b/halo2/proofs/ssprove/extraction/Hacspec_halo2.v new file mode 100644 index 0000000..b8defe1 --- /dev/null +++ b/halo2/proofs/ssprove/extraction/Hacspec_halo2.v @@ -0,0 +1,738 @@ +(* File automatically generated by Hacspec *) +Set Warnings "-notation-overridden,-ambiguous-paths". +From Crypt Require Import choice_type Package Prelude. +Import PackageNotation. +From extructures Require Import ord fset. +From mathcomp Require Import word_ssrZ word. +(* From Jasmin Require Import word. *) + +From Coq Require Import ZArith. +From Coq Require Import Strings.String. +Import List.ListNotations. +Open Scope list_scope. +Open Scope Z_scope. +Open Scope bool_scope. + +From Hacspec Require Import ChoiceEquality. +From Hacspec Require Import LocationUtility. +From Hacspec Require Import Hacspec_Lib_Comparable. +From Hacspec Require Import Hacspec_Lib_Pre. +From Hacspec Require Import Hacspec_Lib. + +Open Scope hacspec_scope. +Import choice.Choice.Exports. + +Obligation Tactic := (* try timeout 8 *) solve_ssprove_obligations. + +Require Import Hacspec_lib. +Export Hacspec_lib. + +Require Import Hacspec_pasta. +Export Hacspec_pasta. + +(*Not implemented yet? todo(item)*) + +Equations sigma (i : both uint_size) (sigma_list : both (t_Seq uint_size)) (q : both (t_Seq (t_Seq uint_size))) : both (t_Seq uint_size) := + sigma i sigma_list q := + letb idx := sigma_list.a[i] in + solve_lift (f_clone (q.a[idx])) : both (t_Seq uint_size). +Fail Next Obligation. + +Notation "'t_CRS'" := (t_Seq (t_FpPallas × t_FpPallas × 'bool) × t_FpPallas × t_FpPallas × 'bool). + +Notation "'t_Polyx'" := (t_Seq t_FpVesta). + +Equations gen_zero_polyx (_ : both 'unit) : both (t_Seq t_FpVesta) := + gen_zero_polyx _ := + solve_lift (f_create (ret_both (1 : uint_size))) : both (t_Seq t_FpVesta). +Fail Next Obligation. + +Equations step_15_ (x_3_ : both t_FpVesta) : both t_FpVesta := + step_15_ x_3_ := + solve_lift x_3_ : both t_FpVesta. +Fail Next Obligation. + +Equations step_17_ (x_4_ : both t_FpVesta) : both t_FpVesta := + step_17_ x_4_ := + solve_lift x_4_ : both t_FpVesta. +Fail Next Obligation. + +Equations step_21_ (xi : both t_FpVesta) (z : both t_FpVesta) : both (t_FpVesta × t_FpVesta) := + step_21_ xi z := + solve_lift (prod_b (xi,z)) : both (t_FpVesta × t_FpVesta). +Fail Next Obligation. + +Equations step_22_ (p : both (t_FpPallas × t_FpPallas × 'bool)) (g0 : both (t_FpPallas × t_FpPallas × 'bool)) (s : both (t_FpPallas × t_FpPallas × 'bool)) (v : both t_FpVesta) (xi : both t_FpVesta) : both (t_FpPallas × t_FpPallas × 'bool) := + step_22_ p g0 s v xi := + letb (prod1 : t_FpPallas × t_FpPallas × 'bool) := g1mul_pallas v g0 in + letb (prod1_neg : t_FpPallas × t_FpPallas × 'bool) := g1neg_pallas prod1 in + letb (prod2 : t_FpPallas × t_FpPallas × 'bool) := g1mul_pallas xi s in + letb (lhs_sum : t_FpPallas × t_FpPallas × 'bool) := g1add_pallas p prod1_neg in + letb (p_prime : t_FpPallas × t_FpPallas × 'bool) := g1add_pallas lhs_sum prod2 in + solve_lift p_prime : both (t_FpPallas × t_FpPallas × 'bool). +Fail Next Obligation. + +Equations add_scalar_polyx (p : both (t_Seq t_FpVesta)) (s : both t_FpVesta) : both (t_Seq t_FpVesta) := + add_scalar_polyx p s := + letb res := f_clone p in + letb res := ifb (impl_41__len res) =.? (ret_both (0 : uint_size)) + then letb res := f_create (ret_both (1 : uint_size)) in + res + else res in + letb res := update_at_usize res (f_zero (ret_both (tt : 'unit))) ((res.a[(f_zero (ret_both (tt : 'unit)))]) .+ s) in + solve_lift res : both (t_Seq t_FpVesta). +Fail Next Obligation. + +Equations gen_one_polyx (_ : both 'unit) : both (t_Seq t_FpVesta) := + gen_one_polyx _ := + letb poly := f_create (ret_both (1 : uint_size)) in + letb poly := update_at_usize poly (f_zero (ret_both (tt : 'unit))) (f_ONE (ret_both (tt : 'unit))) in + solve_lift poly : both (t_Seq t_FpVesta). +Fail Next Obligation. + +Equations sub_scalar_polyx (p : both (t_Seq t_FpVesta)) (s : both t_FpVesta) : both (t_Seq t_FpVesta) := + sub_scalar_polyx p s := + letb res := f_clone p in + letb res := ifb (impl_41__len res) =.? (ret_both (0 : uint_size)) + then letb res := f_create (ret_both (1 : uint_size)) in + res + else res in + letb res := update_at_usize res (f_zero (ret_both (tt : 'unit))) ((res.a[(f_zero (ret_both (tt : 'unit)))]) .- s) in + solve_lift res : both (t_Seq t_FpVesta). +Fail Next Obligation. + +Equations check_not_zero_polyx (p : both (t_Seq t_FpVesta)) : both 'bool := + check_not_zero_polyx p := + letb sum := f_ZERO (ret_both (tt : 'unit)) in + letb all_zero := ret_both (false : 'bool) in + letb all_zero := f_fold (f_into_iter (Build_t_Range (f_start := ret_both (0 : uint_size)) (f_end := impl_41__len p))) all_zero (fun all_zero => fun i => + ifb (p.a[i]) >.? (f_ZERO (ret_both (tt : 'unit))) + then letb all_zero := ret_both (true : 'bool) in + all_zero + else all_zero) in + solve_lift all_zero : both 'bool. +Fail Next Obligation. + +Equations eval_polyx (p : both (t_Seq t_FpVesta)) (x : both t_FpVesta) : both t_FpVesta := + eval_polyx p x := + letb res := f_ZERO (ret_both (tt : 'unit)) in + letb res := f_fold (f_into_iter (Build_t_Range (f_start := ret_both (0 : uint_size)) (f_end := impl_41__len p))) res (fun res => fun i => + res .+ ((p.a[i]) .* (f_exp x (cast_int (WS2 := _) i)))) in + solve_lift res : both t_FpVesta. +Fail Next Obligation. + +Equations inner_product (u : both (t_Seq t_FpVesta)) (v : both (t_Seq t_FpVesta)) : both t_FpVesta := + inner_product u v := + letb res := f_ZERO (ret_both (tt : 'unit)) in + letb res := f_fold (f_into_iter (Build_t_Range (f_start := ret_both (0 : uint_size)) (f_end := impl_41__len u))) res (fun res => fun i => + res .+ ((u.a[i]) .* (v.a[i]))) in + solve_lift res : both t_FpVesta. +Fail Next Obligation. + +Equations msm (a : both (t_Seq t_FpVesta)) (g : both (t_Seq (t_FpPallas × t_FpPallas × 'bool))) : both (t_FpPallas × t_FpPallas × 'bool) := + msm a g := + letb (res : t_FpPallas × t_FpPallas × 'bool) := prod_b (f_ZERO (ret_both (tt : 'unit)),f_ZERO (ret_both (tt : 'unit)),ret_both (true : 'bool)) in + letb res := f_fold (f_into_iter (Build_t_Range (f_start := ret_both (0 : uint_size)) (f_end := impl_41__len a))) res (fun res => fun i => + g1add_pallas res (g1mul_pallas (a.a[i]) (g.a[i]))) in + solve_lift res : both (t_FpPallas × t_FpPallas × 'bool). +Fail Next Obligation. + +Equations calculate_L_or_R (p_part : both (t_Seq t_FpVesta)) (b_part : both (t_Seq t_FpVesta)) (g_part : both (t_Seq (t_FpPallas × t_FpPallas × 'bool))) (z : both t_FpVesta) (v_U : both (t_FpPallas × t_FpPallas × 'bool)) (v_W : both (t_FpPallas × t_FpPallas × 'bool)) (blinding : both t_FpVesta) : both (t_FpPallas × t_FpPallas × 'bool) := + calculate_L_or_R p_part b_part g_part z v_U v_W blinding := + letb (p_g_msm : t_FpPallas × t_FpPallas × 'bool) := msm (f_clone p_part) g_part in + letb (p_b_ip : t_FpVesta) := inner_product p_part b_part in + letb (z_ip : t_FpVesta) := z .* p_b_ip in + letb (z_ip_U : t_FpPallas × t_FpPallas × 'bool) := g1mul_pallas z_ip v_U in + letb (multed_W : t_FpPallas × t_FpPallas × 'bool) := g1mul_pallas blinding v_W in + letb (part_j : t_FpPallas × t_FpPallas × 'bool) := g1add_pallas p_g_msm z_ip_U in + letb part_j := g1add_pallas part_j multed_W in + solve_lift part_j : both (t_FpPallas × t_FpPallas × 'bool). +Fail Next Obligation. + +Equations commit_polyx (crs : both (t_Seq (t_FpPallas × t_FpPallas × 'bool) × t_FpPallas × t_FpPallas × 'bool)) (a : both (t_Seq t_FpVesta)) (blinding : both t_FpVesta) : both (t_FpPallas × t_FpPallas × 'bool) := + commit_polyx crs a blinding := + letb '(v_G,v_W) := crs in + letb '(f1,f2,b) := v_W in + letb (lhs : t_FpPallas × t_FpPallas × 'bool) := msm a (f_clone v_G) in + letb (rhs : t_FpPallas × t_FpPallas × 'bool) := g1mul_pallas blinding (prod_b (f_clone f1,f_clone f2,f_clone b)) in + letb (res : t_FpPallas × t_FpPallas × 'bool) := g1add_pallas lhs rhs in + solve_lift res : both (t_FpPallas × t_FpPallas × 'bool). +Fail Next Obligation. + +Equations mul_scalar_polyx (p : both (t_Seq t_FpVesta)) (s : both t_FpVesta) : both (t_Seq t_FpVesta) := + mul_scalar_polyx p s := + letb res := f_clone p in + letb res := f_fold (f_into_iter (Build_t_Range (f_start := ret_both (0 : uint_size)) (f_end := impl_41__len res))) res (fun res => fun i => + update_at_usize res i ((p.a[i]) .* s)) in + solve_lift res : both (t_Seq t_FpVesta). +Fail Next Obligation. + +Equations rotate_polyx (p : both (t_Seq t_FpVesta)) (rotation : both t_FpVesta) : both (t_Seq t_FpVesta) := + rotate_polyx p rotation := + letb res := p in + letb res := f_fold (f_into_iter (Build_t_Range (f_start := ret_both (0 : uint_size)) (f_end := impl_41__len res))) res (fun res => fun i => + letb coef := res.a[i] in + letb rot := impl__FpVesta__pow rotation (cast_int (WS2 := _) i) in + letb res := update_at_usize res i (coef .* rot) in + res) in + solve_lift res : both (t_Seq t_FpVesta). +Fail Next Obligation. + +Equations step_11_ (n_a : both uint_size) (x1 : both t_FpVesta) (x2 : both t_FpVesta) (v_H_prime : both (t_FpPallas × t_FpPallas × 'bool)) (v_R : both (t_FpPallas × t_FpPallas × 'bool)) (a : both (t_Seq (t_FpPallas × t_FpPallas × 'bool))) (q : both (t_Seq (t_Seq uint_size))) (sigma_list : both (t_Seq uint_size)) : both (t_Seq (t_FpPallas × t_FpPallas × 'bool) × t_FpVesta × t_FpVesta) := + step_11_ n_a x1 x2 v_H_prime v_R a q sigma_list := + letb (n_q : uint_size) := impl_41__len q in + letb (qs : t_Seq (t_FpPallas × t_FpPallas × 'bool)) := f_create n_q in + letb qs := f_fold (f_into_iter (Build_t_Range (f_start := ret_both (0 : uint_size)) (f_end := impl_41__len qs))) qs (fun qs => fun i => + update_at_usize qs i (g1_default_pallas (ret_both (tt : 'unit)))) in + letb qs := f_fold (f_into_iter (Build_t_Range (f_start := ret_both (0 : uint_size)) (f_end := n_a))) qs (fun qs => fun i => + letb (a_i : t_FpPallas × t_FpPallas × 'bool) := a.a[i] in + letb sigma_i := sigma i (f_clone sigma_list) (f_clone q) in + f_fold (f_into_iter (Build_t_Range (f_start := ret_both (0 : uint_size)) (f_end := impl_41__len sigma_i))) qs (fun qs => fun k => + letb (j : uint_size) := sigma_i.a[k] in + letb (q_sigma_i : t_FpPallas × t_FpPallas × 'bool) := qs.a[j] in + letb (product : t_FpPallas × t_FpPallas × 'bool) := g1mul_pallas x1 q_sigma_i in + letb qs := update_at_usize qs j (g1add_pallas product a_i) in + qs)) in + letb (x1_squared : t_FpVesta) := x1 .* x1 in + letb (q0 : t_FpPallas × t_FpPallas × 'bool) := qs.a[(f_zero (ret_both (tt : 'unit)))] in + letb (product1 : t_FpPallas × t_FpPallas × 'bool) := g1mul_pallas x1_squared q0 in + letb (product2 : t_FpPallas × t_FpPallas × 'bool) := g1mul_pallas x1 v_H_prime in + letb (sum1 : t_FpPallas × t_FpPallas × 'bool) := g1add_pallas product1 product2 in + letb (final_sum : t_FpPallas × t_FpPallas × 'bool) := g1add_pallas sum1 v_R in + letb qs := update_at_usize qs (f_zero (ret_both (tt : 'unit))) final_sum in + solve_lift (prod_b (qs,x1,x2)) : both (t_Seq (t_FpPallas × t_FpPallas × 'bool) × t_FpVesta × t_FpVesta). +Fail Next Obligation. + +Equations step_16_ (n_q : both uint_size) (x3 : both t_FpVesta) (q_polys : both (t_Seq (t_Seq t_FpVesta))) : both (t_Seq t_FpVesta) := + step_16_ n_q x3 q_polys := + letb (u : t_Seq t_FpVesta) := f_create n_q in + letb u := f_fold (f_into_iter (Build_t_Range (f_start := ret_both (0 : uint_size)) (f_end := n_q))) u (fun u => fun i => + letb (q_i : t_Seq t_FpVesta) := f_clone (q_polys.a[i]) in + letb (u_i : t_FpVesta) := eval_polyx q_i x3 in + letb u := update_at_usize u i u_i in + u) in + solve_lift u : both (t_Seq t_FpVesta). +Fail Next Obligation. + +Equations step_18_ (x : both t_FpVesta) (x1 : both t_FpVesta) (x2 : both t_FpVesta) (x3 : both t_FpVesta) (x4 : both t_FpVesta) (omega : both t_FpVesta) (v_Q_prime : both (t_FpPallas × t_FpPallas × 'bool)) (v_Q : both (t_Seq (t_FpPallas × t_FpPallas × 'bool))) (u : both (t_Seq t_FpVesta)) (r : both (t_Seq (t_Seq t_FpVesta))) (q : both (t_Seq (t_Seq uint_size))) : both (t_FpPallas × t_FpPallas × 'bool × t_FpVesta) := + step_18_ x x1 x2 x3 x4 omega v_Q_prime v_Q u r q := + letb n_q := impl_41__len q in + letb v := f_ZERO (ret_both (tt : 'unit)) in + letb (v_P_sum : t_FpPallas × t_FpPallas × 'bool) := g1_default_pallas (ret_both (tt : 'unit)) in + letb v_P_sum := f_fold (f_into_iter (Build_t_Range (f_start := ret_both (0 : uint_size)) (f_end := n_q))) v_P_sum (fun v_P_sum => fun i => + letb (v_Q_i : t_FpPallas × t_FpPallas × 'bool) := v_Q.a[i] in + letb (term : t_FpPallas × t_FpPallas × 'bool) := g1mul_pallas (impl__FpVesta__pow x4 (cast_int (WS2 := _) ((n_q .- i) .- (ret_both (1 : uint_size))))) v_Q_i in + g1add_pallas v_P_sum term) in + letb (first_term : t_FpPallas × t_FpPallas × 'bool) := g1mul_pallas (impl__FpVesta__pow x4 (cast_int (WS2 := _) n_q)) v_Q_prime in + letb (v_P : t_FpPallas × t_FpPallas × 'bool) := g1add_pallas first_term v_P_sum in + letb (vv_first_sum : t_FpVesta) := f_ZERO (ret_both (tt : 'unit)) in + letb vv_first_sum := f_fold (f_into_iter (Build_t_Range (f_start := ret_both (0 : uint_size)) (f_end := n_q))) vv_first_sum (fun vv_first_sum => fun i => + letb (q_i : t_Seq uint_size) := f_clone (q.a[i]) in + letb (n_e : uint_size) := impl_41__len q_i in + letb (u_i : t_FpVesta) := u.a[i] in + letb (r_i : t_Seq t_FpVesta) := f_clone (r.a[i]) in + letb (r_i_x3 : t_FpVesta) := eval_polyx r_i x3 in + letb (numerator : t_FpVesta) := u_i .- r_i_x3 in + letb (product : t_FpVesta) := f_ONE (ret_both (tt : 'unit)) in + letb product := f_fold (f_into_iter (Build_t_Range (f_start := ret_both (0 : uint_size)) (f_end := n_e))) product (fun product => fun j => + letb (q_i_j : uint_size) := q_i.a[j] in + letb rhs := (impl__FpVesta__pow omega (cast_int (WS2 := _) q_i_j)) .* x in + letb term := x3 .- rhs in + letb product := product .* term in + product) in + letb (sum_term : t_FpVesta) := (impl__FpVesta__pow x2 (cast_int (WS2 := _) ((n_q .- i) .- (ret_both (1 : uint_size))))) .* (numerator ./ product) in + letb vv_first_sum := vv_first_sum .+ sum_term in + vv_first_sum) in + letb vv_first_sum := vv_first_sum .* (impl__FpVesta__pow x4 (cast_int (WS2 := _) n_q)) in + letb (vv_second_sum : t_FpVesta) := f_ZERO (ret_both (tt : 'unit)) in + letb vv_second_sum := f_fold (f_into_iter (Build_t_Range (f_start := ret_both (0 : uint_size)) (f_end := n_q))) vv_second_sum (fun vv_second_sum => fun i => + letb (u_i : t_FpVesta) := u.a[i] in + letb (term : t_FpVesta) := (impl__FpVesta__pow x4 (cast_int (WS2 := _) ((n_q .- (ret_both (1 : uint_size))) .- i))) .* u_i in + letb vv_second_sum := vv_second_sum .+ term in + vv_second_sum) in + letb v := vv_first_sum .+ vv_second_sum in + solve_lift (prod_b (v_P,v)) : both (t_FpPallas × t_FpPallas × 'bool × t_FpVesta). +Fail Next Obligation. + +Equations step_20_ (s : both (t_Seq t_FpVesta)) (crs : both (t_Seq (t_FpPallas × t_FpPallas × 'bool) × t_FpPallas × t_FpPallas × 'bool)) (r : both t_FpVesta) : both (t_FpPallas × t_FpPallas × 'bool × t_FpVesta) := + step_20_ s crs r := + letb (v_S : t_FpPallas × t_FpPallas × 'bool) := commit_polyx crs s r in + solve_lift (prod_b (v_S,r)) : both (t_FpPallas × t_FpPallas × 'bool × t_FpVesta). +Fail Next Obligation. + +Equations step_25_ (p_prime : both (t_Seq t_FpVesta)) (v_L_blinding : both (t_Seq t_FpVesta)) (v_R_blinding : both (t_Seq t_FpVesta)) (p_prime_blind : both t_FpVesta) (u : both (t_Seq t_FpVesta)) : both (t_FpVesta × t_FpVesta) := + step_25_ p_prime v_L_blinding v_R_blinding p_prime_blind u := + letb c := p_prime.a[(f_zero (ret_both (tt : 'unit)))] in + letb (f : t_FpVesta) := p_prime_blind in + letb f := f_fold (f_into_iter (Build_t_Range (f_start := ret_both (0 : uint_size)) (f_end := impl_41__len v_L_blinding))) f (fun f => fun j => + letb (u_j : t_FpVesta) := u.a[j] in + letb (u_j_inv : t_FpVesta) := impl__FpVesta__inv u_j in + letb (v_L_j_blinding : t_FpVesta) := v_L_blinding.a[j] in + letb (v_R_j_blinding : t_FpVesta) := v_R_blinding.a[j] in + letb f := f .+ (v_L_j_blinding .* u_j_inv) in + letb f := f .+ (v_R_j_blinding .* u_j) in + f) in + solve_lift (prod_b (c,f)) : both (t_FpVesta × t_FpVesta). +Fail Next Obligation. + +Equations step_26_ (u : both (t_Seq t_FpVesta)) (v_L : both (t_Seq (t_FpPallas × t_FpPallas × 'bool))) (v_P_prime : both (t_FpPallas × t_FpPallas × 'bool)) (v_R : both (t_Seq (t_FpPallas × t_FpPallas × 'bool))) (c : both t_FpVesta) (v_G_prime_0_ : both (t_FpPallas × t_FpPallas × 'bool)) (b_0_ : both t_FpVesta) (z : both t_FpVesta) (v_U : both (t_FpPallas × t_FpPallas × 'bool)) (f : both t_FpVesta) (v_W : both (t_FpPallas × t_FpPallas × 'bool)) : both 'bool := + step_26_ u v_L v_P_prime v_R c v_G_prime_0_ b_0_ z v_U f v_W := + letb (first_sum : t_FpPallas × t_FpPallas × 'bool) := g1_default_pallas (ret_both (tt : 'unit)) in + letb first_sum := f_fold (f_into_iter (Build_t_Range (f_start := ret_both (0 : uint_size)) (f_end := impl_41__len u))) first_sum (fun first_sum => fun j => + letb (u_j_inv : t_FpVesta) := impl__FpVesta__inv (u.a[j]) in + letb (v_L_j : t_FpPallas × t_FpPallas × 'bool) := v_L.a[j] in + letb (prod_j : t_FpPallas × t_FpPallas × 'bool) := g1mul_pallas u_j_inv v_L_j in + letb first_sum := g1add_pallas first_sum prod_j in + first_sum) in + letb (second_sum : t_FpPallas × t_FpPallas × 'bool) := g1_default_pallas (ret_both (tt : 'unit)) in + letb second_sum := f_fold (f_into_iter (Build_t_Range (f_start := ret_both (0 : uint_size)) (f_end := impl_41__len u))) second_sum (fun second_sum => fun j => + letb (u_j : t_FpVesta) := u.a[j] in + letb (v_R_j : t_FpPallas × t_FpPallas × 'bool) := v_R.a[j] in + letb (prod_j : t_FpPallas × t_FpPallas × 'bool) := g1mul_pallas u_j v_R_j in + letb second_sum := g1add_pallas second_sum prod_j in + second_sum) in + letb (lhs : t_FpPallas × t_FpPallas × 'bool) := g1add_pallas first_sum (g1add_pallas v_P_prime second_sum) in + letb (rhs_term_1_ : t_FpPallas × t_FpPallas × 'bool) := g1mul_pallas c v_G_prime_0_ in + letb (cb_0z : t_FpVesta) := (c .* b_0_) .* z in + letb (rhs_term_2_ : t_FpPallas × t_FpPallas × 'bool) := g1mul_pallas cb_0z v_U in + letb (rhs_term_3_ : t_FpPallas × t_FpPallas × 'bool) := g1mul_pallas f v_W in + letb (rhs : t_FpPallas × t_FpPallas × 'bool) := g1add_pallas rhs_term_1_ (g1add_pallas rhs_term_2_ rhs_term_3_) in + letb (check : 'bool) := lhs =.? rhs in + solve_lift check : both 'bool. +Fail Next Obligation. + +Equations step_6_ (poly_parts : both (t_Seq (t_Seq t_FpVesta))) (crs : both (t_Seq (t_FpPallas × t_FpPallas × 'bool) × t_FpPallas × t_FpPallas × 'bool)) (blindings : both (t_Seq t_FpVesta)) : both (t_Seq (t_FpPallas × t_FpPallas × 'bool)) := + step_6_ poly_parts crs blindings := + letb (commitment_seq : t_Seq (t_FpPallas × t_FpPallas × 'bool)) := f_create (impl_41__len poly_parts) in + letb commitment_seq := f_fold (f_into_iter (Build_t_Range (f_start := ret_both (0 : uint_size)) (f_end := impl_41__len poly_parts))) commitment_seq (fun commitment_seq => fun i => + letb (commitment : t_FpPallas × t_FpPallas × 'bool) := commit_polyx crs (f_clone (poly_parts.a[i])) (blindings.a[i]) in + letb commitment_seq := update_at_usize commitment_seq i commitment in + commitment_seq) in + solve_lift commitment_seq : both (t_Seq (t_FpPallas × t_FpPallas × 'bool)). +Fail Next Obligation. + +Equations step_7_ (commitment_seq : both (t_Seq (t_FpPallas × t_FpPallas × 'bool))) (x : both t_FpVesta) (n : both uint_size) : both (t_FpPallas × t_FpPallas × 'bool) := + step_7_ commitment_seq x n := + letb (result : t_FpPallas × t_FpPallas × 'bool) := g1_default_pallas (ret_both (tt : 'unit)) in + letb result := f_fold (f_into_iter (Build_t_Range (f_start := ret_both (0 : uint_size)) (f_end := impl_41__len commitment_seq))) result (fun result => fun i => + letb (power : uint_size) := n .* i in + letb x_raised := impl__FpVesta__pow x (cast_int (WS2 := _) power) in + letb (intemidiate : t_FpPallas × t_FpPallas × 'bool) := g1mul_pallas x_raised (commitment_seq.a[i]) in + letb result := g1add_pallas result intemidiate in + result) in + solve_lift result : both (t_FpPallas × t_FpPallas × 'bool). +Fail Next Obligation. + +Equations step_9_ (r : both (t_Seq t_FpVesta)) (a_prime_seq : both (t_Seq (t_Seq t_FpVesta))) (omega : both t_FpVesta) (p : both (t_Seq (t_Seq uint_size))) (x : both t_FpVesta) : both (t_FpVesta × t_Seq (t_Seq t_FpVesta)) := + step_9_ r a_prime_seq omega p x := + letb (n_a : uint_size) := impl_41__len a_prime_seq in + letb (a_seq : t_Seq (t_Seq t_FpVesta)) := f_create n_a in + letb a_seq := f_fold (f_into_iter (Build_t_Range (f_start := ret_both (0 : uint_size)) (f_end := n_a))) a_seq (fun a_seq => fun i => + letb (p_i : t_Seq uint_size) := f_clone (p.a[i]) in + letb (n_e : uint_size) := impl_41__len p_i in + letb (a_prime_i : t_Seq t_FpVesta) := f_clone (a_prime_seq.a[i]) in + letb (a_i_seq : t_Seq t_FpVesta) := f_create n_e in + letb a_i_seq := f_fold (f_into_iter (Build_t_Range (f_start := ret_both (0 : uint_size)) (f_end := n_e))) a_i_seq (fun a_i_seq => fun j => + letb (p_i_j : uint_size) := p_i.a[j] in + letb (argument : t_FpVesta) := (impl__FpVesta__pow omega (cast_int (WS2 := _) p_i_j)) .* x in + letb (a_i_j : t_FpVesta) := eval_polyx (f_clone a_prime_i) argument in + letb a_i_seq := update_at_usize a_i_seq j a_i_j in + a_i_seq) in + letb a_seq := update_at_usize a_seq i a_i_seq in + a_seq) in + letb r_x := eval_polyx r x in + solve_lift (prod_b (r_x,a_seq)) : both (t_FpVesta × t_Seq (t_Seq t_FpVesta)). +Fail Next Obligation. + +Equations trim_polyx (p : both (t_Seq t_FpVesta)) : both (t_Seq t_FpVesta) := + trim_polyx p := + letb last_val_idx := ret_both (1 : uint_size) in + letb last_val_idx := f_fold (f_into_iter (Build_t_Range (f_start := ret_both (0 : uint_size)) (f_end := impl_41__len p))) last_val_idx (fun last_val_idx => fun i => + ifb (p.a[i]) <> (f_ZERO (ret_both (tt : 'unit))) + then letb last_val_idx := i .+ (ret_both (1 : uint_size)) in + last_val_idx + else last_val_idx) in + letb res := f_create last_val_idx in + letb res := ifb (impl_41__len p) <> (ret_both (0 : uint_size)) + then f_fold (f_into_iter (Build_t_Range (f_start := ret_both (0 : uint_size)) (f_end := impl_41__len res))) res (fun res => fun i => + update_at_usize res i (p.a[i])) + else res in + letb res := ifb (impl_41__len p) =.? (ret_both (0 : uint_size)) + then letb res := p in + res + else res in + solve_lift res : both (t_Seq t_FpVesta). +Fail Next Obligation. + +Equations add_polyx (p1 : both (t_Seq t_FpVesta)) (p2 : both (t_Seq t_FpVesta)) : both (t_Seq t_FpVesta) := + add_polyx p1 p2 := + letb res := f_create (ret_both (0 : uint_size)) in + letb short_len := ret_both (0 : uint_size) in + letb '(res,short_len) := ifb (impl_41__len p1) >.? (impl_41__len p2) + then letb res := f_clone p1 in + letb short_len := impl_41__len p2 in + prod_b (res,short_len) + else letb res := f_clone p2 in + letb short_len := impl_41__len p1 in + prod_b (res,short_len) in + letb res := f_fold (f_into_iter (Build_t_Range (f_start := ret_both (0 : uint_size)) (f_end := short_len))) res (fun res => fun i => + update_at_usize res i ((p1.a[i]) .+ (p2.a[i]))) in + solve_lift (trim_polyx res) : both (t_Seq t_FpVesta). +Fail Next Obligation. + +Equations check_equal_polyx (p1 : both (t_Seq t_FpVesta)) (p2 : both (t_Seq t_FpVesta)) : both 'bool := + check_equal_polyx p1 p2 := + letb is_equal := ret_both (false : 'bool) in + letb is_equal := ifb (impl_41__len (trim_polyx (f_clone p1))) =.? (impl_41__len (trim_polyx (f_clone p2))) + then letb is_equal := ret_both (true : 'bool) in + f_fold (f_into_iter (Build_t_Range (f_start := ret_both (0 : uint_size)) (f_end := impl_41__len (trim_polyx (f_clone p1))))) is_equal (fun is_equal => fun i => + letb p1_scaler_i := f_clone (p1.a[i]) in + letb p2_scaler_i := f_clone (p2.a[i]) in + ifb p1_scaler_i <> p2_scaler_i + then letb is_equal := ret_both (false : 'bool) in + is_equal + else is_equal) + else is_equal in + solve_lift is_equal : both 'bool. +Fail Next Obligation. + +Equations degree_polyx (p : both (t_Seq t_FpVesta)) : both uint_size := + degree_polyx p := + letb len := impl_41__len (trim_polyx p) in + solve_lift (ifb len =.? (ret_both (0 : uint_size)) + then ret_both (0 : uint_size) + else len .- (ret_both (1 : uint_size))) : both uint_size. +Fail Next Obligation. + +Equations divide_leading_terms (n : both (t_Seq t_FpVesta)) (d : both (t_Seq t_FpVesta)) : both (t_Seq t_FpVesta) := + divide_leading_terms n d := + letb (n : t_Seq t_FpVesta) := trim_polyx n in + letb (d : t_Seq t_FpVesta) := trim_polyx d in + letb (x_pow : uint_size) := (impl_41__len n) .- (impl_41__len d) in + letb (n_coeff : t_FpVesta) := n.a[((impl_41__len n) .- (ret_both (1 : uint_size)))] in + letb (d_coeff : t_FpVesta) := d.a[((impl_41__len d) .- (ret_both (1 : uint_size)))] in + letb (coeff : t_FpVesta) := n_coeff ./ d_coeff in + letb (res : t_Seq t_FpVesta) := f_create (x_pow .+ (ret_both (1 : uint_size))) in + letb res := update_at_usize res x_pow coeff in + solve_lift res : both (t_Seq t_FpVesta). +Fail Next Obligation. + +Equations mul_polyx (a : both (t_Seq t_FpVesta)) (b : both (t_Seq t_FpVesta)) : both (t_Seq t_FpVesta) := + mul_polyx a b := + letb result := f_create ((impl_41__len a) .+ (impl_41__len b)) in + letb result := f_fold (f_into_iter (Build_t_Range (f_start := ret_both (0 : uint_size)) (f_end := impl_41__len a))) result (fun result => fun i => + ifb not (f_equal (a.a[i]) (f_default (ret_both (tt : 'unit)))) + then f_fold (f_into_iter (Build_t_Range (f_start := ret_both (0 : uint_size)) (f_end := impl_41__len b))) result (fun result => fun j => + ifb not (f_equal (b.a[j]) (f_default (ret_both (tt : 'unit)))) + then letb result := update_at_usize result (i .+ j) ((result.a[(i .+ j)]) .+ ((a.a[i]) .* (b.a[j]))) in + result + else result) + else result) in + solve_lift (trim_polyx result) : both (t_Seq t_FpVesta). +Fail Next Obligation. + +Equations multi_poly_with_x_pow (p : both (t_Seq t_FpVesta)) (power : both uint_size) : both (t_Seq t_FpVesta) := + multi_poly_with_x_pow p power := + letb (p : t_Seq t_FpVesta) := trim_polyx p in + letb (res : t_Seq t_FpVesta) := f_create ((impl_41__len p) .+ power) in + letb res := f_fold (f_into_iter (Build_t_Range (f_start := ret_both (0 : uint_size)) (f_end := impl_41__len p))) res (fun res => fun i => + update_at_usize res (i .+ power) (p.a[i])) in + solve_lift res : both (t_Seq t_FpVesta). +Fail Next Obligation. + +Equations multi_poly_with_x (p : both (t_Seq t_FpVesta)) : both (t_Seq t_FpVesta) := + multi_poly_with_x p := + solve_lift (multi_poly_with_x_pow p (ret_both (1 : uint_size))) : both (t_Seq t_FpVesta). +Fail Next Obligation. + +Equations compute_vanishing_polynomial (omega : both t_FpVesta) (n : both uint_size) : both (t_Seq t_FpVesta) := + compute_vanishing_polynomial omega n := + letb (vanishing_poly : t_Seq t_FpVesta) := f_create (ret_both (1 : uint_size)) in + letb vanishing_poly := update_at_usize vanishing_poly (f_zero (ret_both (tt : 'unit))) (f_ONE (ret_both (tt : 'unit))) in + letb vanishing_poly := f_fold (f_into_iter (Build_t_Range (f_start := ret_both (0 : uint_size)) (f_end := n))) vanishing_poly (fun vanishing_poly => fun i => + letb eval_point := impl__FpVesta__pow omega (cast_int (WS2 := _) i) in + letb poly_mul_x := multi_poly_with_x (f_clone vanishing_poly) in + letb (poly_mul_scalar : t_Seq t_FpVesta) := mul_scalar_polyx (f_clone vanishing_poly) (impl__FpVesta__neg eval_point) in + letb vanishing_poly := add_polyx poly_mul_x poly_mul_scalar in + vanishing_poly) in + solve_lift vanishing_poly : both (t_Seq t_FpVesta). +Fail Next Obligation. + +Equations step_12_ (n_a : both uint_size) (x1 : both t_FpVesta) (h_prime : both (t_Seq t_FpVesta)) (r : both (t_Seq t_FpVesta)) (a_prime : both (t_Seq (t_Seq t_FpVesta))) (q : both (t_Seq (t_Seq uint_size))) (sigma_list : both (t_Seq uint_size)) (a_blinds : both (t_Seq t_FpVesta)) (r_blind : both t_FpVesta) (h_prime_blind : both t_FpVesta) : both (t_Seq (t_Seq t_FpVesta) × t_Seq t_FpVesta) := + step_12_ n_a x1 h_prime r a_prime q sigma_list a_blinds r_blind h_prime_blind := + letb (n_q : uint_size) := impl_41__len q in + letb (qs : t_Seq (t_Seq t_FpVesta)) := f_create n_q in + letb q_blinds := f_create n_q in + letb qs := f_fold (f_into_iter (Build_t_Range (f_start := ret_both (0 : uint_size)) (f_end := impl_41__len qs))) qs (fun qs => fun i => + update_at_usize qs i (f_create (ret_both (1 : uint_size)))) in + letb '(q_blinds,qs) := f_fold (f_into_iter (Build_t_Range (f_start := ret_both (0 : uint_size)) (f_end := n_a))) (prod_b (q_blinds,qs)) (fun '(q_blinds,qs) => fun i => + letb (a_i : t_Seq t_FpVesta) := f_clone (a_prime.a[i]) in + letb (a_blind_i : t_FpVesta) := a_blinds.a[i] in + letb (sigma_i : t_Seq uint_size) := sigma i (f_clone sigma_list) (f_clone q) in + f_fold (f_into_iter (Build_t_Range (f_start := ret_both (0 : uint_size)) (f_end := impl_41__len sigma_i))) (prod_b (q_blinds,qs)) (fun '(q_blinds,qs) => fun j => + letb (j : uint_size) := sigma_i.a[j] in + letb (q_sigma_i : t_Seq t_FpVesta) := f_clone (qs.a[j]) in + letb (product : t_Seq t_FpVesta) := mul_scalar_polyx (f_clone q_sigma_i) x1 in + letb qs := update_at_usize qs j (add_polyx product (f_clone a_i)) in + letb q_blinds := update_at_usize q_blinds j ((x1 .* (q_blinds.a[j])) .+ a_blind_i) in + prod_b (q_blinds,qs))) in + letb (x1_squared : t_FpVesta) := x1 .* x1 in + letb (q0 : t_Seq t_FpVesta) := f_clone (qs.a[(f_zero (ret_both (tt : 'unit)))]) in + letb (product1 : t_Seq t_FpVesta) := mul_scalar_polyx q0 x1_squared in + letb (product2 : t_Seq t_FpVesta) := mul_scalar_polyx h_prime x1 in + letb (sum1 : t_Seq t_FpVesta) := add_polyx product1 product2 in + letb (final_sum : t_Seq t_FpVesta) := add_polyx sum1 r in + letb qs := update_at_usize qs (f_zero (ret_both (tt : 'unit))) final_sum in + letb q_blinds := update_at_usize q_blinds (f_zero (ret_both (tt : 'unit))) (x1_squared .* (q_blinds.a[(f_zero (ret_both (tt : 'unit)))])) in + letb q_blinds := update_at_usize q_blinds (f_zero (ret_both (tt : 'unit))) ((q_blinds.a[(f_zero (ret_both (tt : 'unit)))]) .+ r_blind) in + letb q_blinds := update_at_usize q_blinds (f_zero (ret_both (tt : 'unit))) ((q_blinds.a[(f_zero (ret_both (tt : 'unit)))]) .+ (h_prime_blind .* x1)) in + solve_lift (prod_b (qs,q_blinds)) : both (t_Seq (t_Seq t_FpVesta) × t_Seq t_FpVesta). +Fail Next Obligation. + +Equations step_13_ (n : both uint_size) (omega : both t_FpVesta) (x : both t_FpVesta) (x1 : both t_FpVesta) (r : both t_FpVesta) (s : both (t_Seq (t_Seq t_FpVesta))) (q : both (t_Seq (t_Seq uint_size))) (sigma_list : both (t_Seq uint_size)) (g_prime_eval_combined_from_a : both t_FpVesta) (g_prime : both (t_Seq t_FpVesta)) : both (t_Seq (t_Seq t_FpVesta) × t_Seq (t_Seq t_FpVesta)) := + step_13_ n omega x x1 r s q sigma_list g_prime_eval_combined_from_a g_prime := + letb (n_a : uint_size) := impl_41__len s in + letb (n_q : uint_size) := impl_41__len q in + letb (rs : t_Seq (t_Seq t_FpVesta)) := f_create n_q in + letb rs := f_fold (f_into_iter (Build_t_Range (f_start := ret_both (0 : uint_size)) (f_end := impl_41__len rs))) rs (fun rs => fun i => + update_at_usize rs i (f_create (ret_both (1 : uint_size)))) in + letb rs := f_fold (f_into_iter (Build_t_Range (f_start := ret_both (0 : uint_size)) (f_end := n_a))) rs (fun rs => fun i => + letb (s_i : t_Seq t_FpVesta) := f_clone (s.a[i]) in + letb (sigma_i : t_Seq uint_size) := sigma i (f_clone sigma_list) (f_clone q) in + f_fold (f_into_iter (Build_t_Range (f_start := ret_both (0 : uint_size)) (f_end := impl_41__len sigma_i))) rs (fun rs => fun j => + letb j := sigma_i.a[j] in + letb r_sigma_i := f_clone (rs.a[j]) in + letb product := mul_scalar_polyx (f_clone r_sigma_i) x1 in + letb rs := update_at_usize rs j (add_polyx product (f_clone s_i)) in + rs)) in + letb rs_verifier := f_clone rs in + letb rs_prover := rs in + letb (g_prime_x : t_FpVesta) := eval_polyx g_prime x in + letb (vanishing_poly : t_Seq t_FpVesta) := compute_vanishing_polynomial omega n in + letb (vanishing_poly_x : t_FpVesta) := eval_polyx vanishing_poly x in + letb h := g_prime_x ./ vanishing_poly_x in + letb (x1_squared : t_FpVesta) := x1 .* x1 in + letb (r0 : t_Seq t_FpVesta) := f_clone (rs_prover.a[(f_zero (ret_both (tt : 'unit)))]) in + letb product1 := mul_scalar_polyx r0 x1_squared in + letb product2 := h .* x1 in + letb sum1 := add_scalar_polyx product1 product2 in + letb final_sum := add_scalar_polyx sum1 r in + letb rs_prover := update_at_usize rs_prover (f_zero (ret_both (tt : 'unit))) final_sum in + letb (vanishing_poly : t_Seq t_FpVesta) := compute_vanishing_polynomial omega n in + letb (vanishing_poly_x : t_FpVesta) := eval_polyx vanishing_poly x in + letb h := g_prime_eval_combined_from_a ./ vanishing_poly_x in + letb (x1_squared : t_FpVesta) := x1 .* x1 in + letb (r0 : t_Seq t_FpVesta) := f_clone (rs_verifier.a[(f_zero (ret_both (tt : 'unit)))]) in + letb product1 := mul_scalar_polyx r0 x1_squared in + letb product2 := h .* x1 in + letb sum1 := add_scalar_polyx product1 product2 in + letb final_sum := add_scalar_polyx sum1 r in + letb rs_verifier := update_at_usize rs_verifier (f_zero (ret_both (tt : 'unit))) final_sum in + solve_lift (prod_b (rs_prover,rs_verifier)) : both (t_Seq (t_Seq t_FpVesta) × t_Seq (t_Seq t_FpVesta)). +Fail Next Obligation. + +Equations step_19_ (x4 : both t_FpVesta) (q_prime : both (t_Seq t_FpVesta)) (q_polys : both (t_Seq (t_Seq t_FpVesta))) (q_blinds : both (t_Seq t_FpVesta)) (q_prime_blind : both t_FpVesta) : both (t_Seq t_FpVesta × t_FpVesta) := + step_19_ x4 q_prime q_polys q_blinds q_prime_blind := + letb p := f_create (ret_both (1 : uint_size)) in + letb (n_q : uint_size) := impl_41__len q_polys in + letb p_blind := f_ZERO (ret_both (tt : 'unit)) in + letb '(p,p_blind) := f_fold (f_into_iter (Build_t_Range (f_start := ret_both (0 : uint_size)) (f_end := n_q))) (prod_b (p,p_blind)) (fun '(p,p_blind) => fun i => + letb (power : uint_size) := (n_q .- (ret_both (1 : uint_size))) .- i in + letb x4_powered := impl__FpVesta__pow x4 (cast_int (WS2 := _) power) in + letb q_i := f_clone (q_polys.a[i]) in + letb multed_poly := mul_scalar_polyx q_i x4_powered in + letb p := add_polyx p multed_poly in + letb p_blind := p_blind .+ (x4_powered .* (q_blinds.a[i])) in + prod_b (p,p_blind)) in + letb (x4n_q : t_FpVesta) := impl__FpVesta__pow x4 (cast_int (WS2 := _) n_q) in + letb (first_term : t_Seq t_FpVesta) := mul_scalar_polyx q_prime x4n_q in + letb p := add_polyx p first_term in + letb p_blind := p_blind .+ (x4n_q .* q_prime_blind) in + solve_lift (prod_b (p,p_blind)) : both (t_Seq t_FpVesta × t_FpVesta). +Fail Next Obligation. + +Equations step_23_ (p : both (t_Seq t_FpVesta)) (s : both (t_Seq t_FpVesta)) (x3 : both t_FpVesta) (xi : both t_FpVesta) (p_blind : both t_FpVesta) (s_blind : both t_FpVesta) : both (t_Seq t_FpVesta × t_FpVesta) := + step_23_ p s x3 xi p_blind s_blind := + letb p_eval_x3 := eval_polyx (f_clone p) x3 in + letb xi_mul_s := mul_scalar_polyx s xi in + letb p_prime := p in + letb p_prime := sub_scalar_polyx p_prime p_eval_x3 in + letb p_prime := add_polyx p_prime xi_mul_s in + letb p_prime_blind := (s_blind .* xi) .+ p_blind in + solve_lift (prod_b (p_prime,p_prime_blind)) : both (t_Seq t_FpVesta × t_FpVesta). +Fail Next Obligation. + +Equations step_24_ (p_prime_poly : both (t_Seq t_FpVesta)) (v_G : both (t_Seq (t_FpPallas × t_FpPallas × 'bool))) (x3 : both t_FpVesta) (z : both t_FpVesta) (v_U : both (t_FpPallas × t_FpPallas × 'bool)) (v_W : both (t_FpPallas × t_FpPallas × 'bool)) (n : both uint_size) (k : both uint_size) (u : both (t_Seq t_FpVesta)) (v_L_blinding : both (t_Seq t_FpVesta)) (v_R_blinding : both (t_Seq t_FpVesta)) : both (t_Seq t_FpVesta × t_Seq (t_FpPallas × t_FpPallas × 'bool) × t_Seq t_FpVesta × t_Seq (t_FpPallas × t_FpPallas × 'bool) × t_Seq (t_FpPallas × t_FpPallas × 'bool) × t_Seq t_FpVesta × t_Seq t_FpVesta) := + step_24_ p_prime_poly v_G x3 z v_U v_W n k u v_L_blinding v_R_blinding := + letb (p_prime : t_Seq t_FpVesta) := p_prime_poly in + letb (g_prime : t_Seq (t_FpPallas × t_FpPallas × 'bool)) := v_G in + letb (b : t_Seq t_FpVesta) := f_create n in + letb (v_L : t_Seq (t_FpPallas × t_FpPallas × 'bool)) := f_create k in + letb (v_R : t_Seq (t_FpPallas × t_FpPallas × 'bool)) := f_create k in + letb b := f_fold (f_into_iter (Build_t_Range (f_start := ret_both (0 : uint_size)) (f_end := impl_41__len b))) b (fun b => fun i => + letb (x3_powered : t_FpVesta) := impl__FpVesta__pow x3 (cast_int (WS2 := _) i) in + letb b := update_at_usize b i x3_powered in + b) in + letb '(v_L,v_R,b,g_prime,p_prime) := f_fold (f_into_iter (Build_t_Range (f_start := ret_both (0 : uint_size)) (f_end := k))) (prod_b (v_L,v_R,b,g_prime,p_prime)) (fun '(v_L,v_R,b,g_prime,p_prime) => fun j => + letb (p_prime_half : uint_size) := (impl_41__len p_prime) ./ (ret_both (2 : uint_size)) in + letb (g_prime_half : uint_size) := (impl_41__len g_prime) ./ (ret_both (2 : uint_size)) in + letb (b_half : uint_size) := (impl_41__len b) ./ (ret_both (2 : uint_size)) in + letb (p_prime_lo : t_Seq t_FpVesta) := impl_41__slice p_prime (ret_both (0 : uint_size)) p_prime_half in + letb (p_prime_hi : t_Seq t_FpVesta) := impl_41__slice p_prime p_prime_half p_prime_half in + letb (g_prime_lo : t_Seq (t_FpPallas × t_FpPallas × 'bool)) := impl_41__slice g_prime (ret_both (0 : uint_size)) g_prime_half in + letb (g_prime_hi : t_Seq (t_FpPallas × t_FpPallas × 'bool)) := impl_41__slice g_prime g_prime_half g_prime_half in + letb (b_lo : t_Seq t_FpVesta) := impl_41__slice b (ret_both (0 : uint_size)) b_half in + letb (b_hi : t_Seq t_FpVesta) := impl_41__slice b b_half b_half in + letb (v_L_j : t_FpPallas × t_FpPallas × 'bool) := calculate_L_or_R (f_clone p_prime_hi) (f_clone b_lo) (f_clone g_prime_lo) z v_U v_W (v_L_blinding.a[j]) in + letb v_L := update_at_usize v_L j v_L_j in + letb (v_R_j : t_FpPallas × t_FpPallas × 'bool) := calculate_L_or_R (f_clone p_prime_lo) (f_clone b_hi) (f_clone g_prime_hi) z v_U v_W (v_R_blinding.a[j]) in + letb v_R := update_at_usize v_R j v_R_j in + letb (u_j : t_FpVesta) := u.a[j] in + letb (new_g_prime : t_Seq (t_FpPallas × t_FpPallas × 'bool)) := f_create g_prime_half in + letb new_g_prime := f_fold (f_into_iter (Build_t_Range (f_start := ret_both (0 : uint_size)) (f_end := impl_41__len new_g_prime))) new_g_prime (fun new_g_prime => fun i => + letb (g_prime_hi_indexed : t_FpPallas × t_FpPallas × 'bool) := g_prime_hi.a[i] in + letb (g_prime_lo_indexed : t_FpPallas × t_FpPallas × 'bool) := g_prime_lo.a[i] in + letb (rhs_product : t_FpPallas × t_FpPallas × 'bool) := g1mul_pallas u_j g_prime_hi_indexed in + letb (sum : t_FpPallas × t_FpPallas × 'bool) := g1add_pallas g_prime_lo_indexed rhs_product in + letb new_g_prime := update_at_usize new_g_prime i sum in + new_g_prime) in + letb g_prime := new_g_prime in + letb (rhs : t_Seq t_FpVesta) := mul_scalar_polyx (f_clone b_hi) u_j in + letb (new_b : t_Seq t_FpVesta) := add_polyx (f_clone b_lo) rhs in + letb b := new_b in + letb (u_j_inv : t_FpVesta) := impl__FpVesta__inv u_j in + letb (rhs : t_Seq t_FpVesta) := mul_scalar_polyx (f_clone p_prime_hi) u_j_inv in + letb (new_p_prime : t_Seq t_FpVesta) := add_polyx (f_clone p_prime_lo) rhs in + letb p_prime := new_p_prime in + prod_b (v_L,v_R,b,g_prime,p_prime)) in + solve_lift (prod_b (p_prime,g_prime,b,v_L,v_R,v_L_blinding,v_R_blinding)) : both (t_Seq t_FpVesta × t_Seq (t_FpPallas × t_FpPallas × 'bool) × t_Seq t_FpVesta × t_Seq (t_FpPallas × t_FpPallas × 'bool) × t_Seq (t_FpPallas × t_FpPallas × 'bool) × t_Seq t_FpVesta × t_Seq t_FpVesta). +Fail Next Obligation. + +Equations step_5_ (h : both (t_Seq t_FpVesta)) (n : both uint_size) (n_g : both uint_size) : both (t_Seq (t_Seq t_FpVesta)) := + step_5_ h n n_g := + letb h := trim_polyx h in + letb n_g := n_g in + letb n := n in + letb index_in_h := ret_both (0 : uint_size) in + letb poly_parts := f_create (n_g .- (ret_both (1 : uint_size))) in + letb '(index_in_h,poly_parts) := f_fold (f_into_iter (Build_t_Range (f_start := ret_both (0 : uint_size)) (f_end := n_g .- (ret_both (1 : uint_size))))) (prod_b (index_in_h,poly_parts)) (fun '(index_in_h,poly_parts) => fun i => + letb current_poly_part := f_create n in + letb '(current_poly_part,index_in_h) := f_fold (f_into_iter (Build_t_Range (f_start := ret_both (0 : uint_size)) (f_end := n))) (prod_b (current_poly_part,index_in_h)) (fun '(current_poly_part,index_in_h) => fun j => + ifb index_in_h <.? (impl_41__len h) + then letb current_poly_part := update_at_usize current_poly_part j (h.a[index_in_h]) in + letb index_in_h := index_in_h .+ (ret_both (1 : uint_size)) in + prod_b (current_poly_part,index_in_h) + else prod_b (current_poly_part,index_in_h)) in + letb poly_parts := update_at_usize poly_parts i current_poly_part in + prod_b (index_in_h,poly_parts)) in + solve_lift poly_parts : both (t_Seq (t_Seq t_FpVesta)). +Fail Next Obligation. + +Equations step_8_ (h_parts : both (t_Seq (t_Seq t_FpVesta))) (x : both t_FpVesta) (n : both uint_size) (h_blinds : both (t_Seq t_FpVesta)) : both (t_Seq t_FpVesta × t_FpVesta) := + step_8_ h_parts x n h_blinds := + letb (res : t_Seq t_FpVesta) := f_create (ret_both (1 : uint_size)) in + letb h_prime_blind := f_ZERO (ret_both (tt : 'unit)) in + letb '(h_prime_blind,res) := f_fold (f_into_iter (Build_t_Range (f_start := ret_both (0 : uint_size)) (f_end := impl_41__len h_parts))) (prod_b (h_prime_blind,res)) (fun '(h_prime_blind,res) => fun i => + letb (power : uint_size) := n .* i in + letb (x_raised : t_FpVesta) := impl__FpVesta__pow x (cast_int (WS2 := _) power) in + letb (h_i : t_Seq t_FpVesta) := f_clone (h_parts.a[i]) in + letb (aux_prod : t_Seq t_FpVesta) := mul_scalar_polyx h_i x_raised in + letb res := add_polyx res aux_prod in + letb h_prime_blind := h_prime_blind .+ ((h_blinds.a[i]) .* x_raised) in + prod_b (h_prime_blind,res)) in + solve_lift (prod_b (res,h_prime_blind)) : both (t_Seq t_FpVesta × t_FpVesta). +Fail Next Obligation. + +Equations sub_polyx (p1 : both (t_Seq t_FpVesta)) (p2 : both (t_Seq t_FpVesta)) : both (t_Seq t_FpVesta) := + sub_polyx p1 p2 := + letb largest := impl_41__len p1 in + letb largest := ifb (impl_41__len p2) >.? (impl_41__len p1) + then letb largest := impl_41__len p2 in + largest + else largest in + letb res := f_create largest in + letb res := f_fold (f_into_iter (Build_t_Range (f_start := ret_both (0 : uint_size)) (f_end := impl_41__len p1))) res (fun res => fun i => + update_at_usize res i (p1.a[i])) in + letb res := f_fold (f_into_iter (Build_t_Range (f_start := ret_both (0 : uint_size)) (f_end := impl_41__len p2))) res (fun res => fun i => + update_at_usize res i ((res.a[i]) .- (p2.a[i]))) in + solve_lift (trim_polyx res) : both (t_Seq t_FpVesta). +Fail Next Obligation. + +Equations divide_polyx (n : both (t_Seq t_FpVesta)) (d : both (t_Seq t_FpVesta)) : both (t_Seq t_FpVesta × t_Seq t_FpVesta) := + divide_polyx n d := + letb (q : t_Seq t_FpVesta) := f_create (impl_41__len n) in + letb (r : t_Seq t_FpVesta) := f_clone n in + letb loop_upper_bound := impl_41__len d in + letb loop_upper_bound := ifb (impl_41__len q) >.? (impl_41__len d) + then letb loop_upper_bound := impl_41__len q in + loop_upper_bound + else loop_upper_bound in + letb '(q,r) := f_fold (f_into_iter (Build_t_Range (f_start := ret_both (0 : uint_size)) (f_end := loop_upper_bound))) (prod_b (q,r)) (fun '(q,r) => fun _ => + ifb andb (check_not_zero_polyx (f_clone r)) ((degree_polyx (f_clone r)) >=.? (degree_polyx (f_clone d))) + then letb (t : t_Seq t_FpVesta) := divide_leading_terms (f_clone r) (f_clone d) in + letb q := add_polyx q (f_clone t) in + letb (aux_prod : t_Seq t_FpVesta) := mul_polyx (f_clone d) (f_clone t) in + letb r := sub_polyx r aux_prod in + prod_b (q,r) + else prod_b (q,r)) in + solve_lift (prod_b (trim_polyx q,trim_polyx r)) : both (t_Seq t_FpVesta × t_Seq t_FpVesta). +Fail Next Obligation. + +(*item error backend*) + +(*item error backend*) + +Equations step_10_ (omega : both t_FpVesta) (p : both (t_Seq (t_Seq uint_size))) (x : both t_FpVesta) (a : both (t_Seq (t_Seq t_FpVesta))) : both (t_Seq (t_Seq t_FpVesta)) := + step_10_ omega p x a := + letb n_a := impl_41__len a in + letb s := f_create n_a in + letb s := f_fold (f_into_iter (Build_t_Range (f_start := ret_both (0 : uint_size)) (f_end := n_a))) s (fun s => fun i => + letb a_i := f_clone (a.a[i]) in + letb p_i := f_clone (p.a[i]) in + letb n_e := impl_41__len p_i in + letb (points : t_Seq (t_FpVesta × t_FpVesta)) := f_create n_e in + letb points := f_fold (f_into_iter (Build_t_Range (f_start := ret_both (0 : uint_size)) (f_end := n_e))) points (fun points => fun j => + letb (p_i_j : uint_size) := p_i.a[j] in + letb x_j := (impl__FpVesta__pow omega (cast_int (WS2 := _) p_i_j)) .* x in + letb y_j := a_i.a[j] in + letb points := update_at_usize points j (prod_b (x_j,y_j)) in + points) in + letb (s_i : t_Seq t_FpVesta) := lagrange_polyx points in + letb s := update_at_usize s i s_i in + s) in + solve_lift s : both (t_Seq (t_Seq t_FpVesta)). +Fail Next Obligation. + +Equations step_14_ (crs : both (t_Seq (t_FpPallas × t_FpPallas × 'bool) × t_FpPallas × t_FpPallas × 'bool)) (x2 : both t_FpVesta) (q_polys : both (t_Seq (t_Seq t_FpVesta))) (r_polys : both (t_Seq (t_Seq t_FpVesta))) (q : both (t_Seq (t_Seq uint_size))) (blinding : both t_FpVesta) (omega : both t_FpVesta) (x : both t_FpVesta) : both (t_FpPallas × t_FpPallas × 'bool × t_Seq t_FpVesta × t_FpVesta) := + step_14_ crs x2 q_polys r_polys q blinding omega x := + letb (q_prime : t_Seq t_FpVesta) := f_create (ret_both (1 : uint_size)) in + letb (n_q : uint_size) := impl_41__len q in + letb q_prime := f_fold (f_into_iter (Build_t_Range (f_start := ret_both (0 : uint_size)) (f_end := n_q))) q_prime (fun q_prime => fun i => + letb (x2_powered : t_FpVesta) := impl__FpVesta__pow x2 (cast_int (WS2 := _) ((n_q .- (ret_both (1 : uint_size))) .- i)) in + letb (q_poly_i : t_Seq t_FpVesta) := f_clone (q_polys.a[i]) in + letb (r_i : t_Seq t_FpVesta) := f_clone (r_polys.a[i]) in + letb (q_i_sub_r_i : t_Seq t_FpVesta) := sub_polyx q_poly_i r_i in + letb (q_i : t_Seq uint_size) := f_clone (q.a[i]) in + letb (divisor : t_Seq t_FpVesta) := f_create (ret_both (1 : uint_size)) in + letb divisor := update_at_usize divisor (f_zero (ret_both (tt : 'unit))) (f_ONE (ret_both (tt : 'unit))) in + letb divisor := f_fold (f_into_iter (Build_t_Range (f_start := ret_both (0 : uint_size)) (f_end := impl_41__len q_i))) divisor (fun divisor => fun j => + letb (q_i_j : uint_size) := q_i.a[j] in + letb (scalar : t_FpVesta) := (impl__FpVesta__pow omega (cast_int (WS2 := _) q_i_j)) .* x in + letb (divisor_mul_x : t_Seq t_FpVesta) := multi_poly_with_x (f_clone divisor) in + letb (divisor_mul_scalar : t_Seq t_FpVesta) := mul_scalar_polyx (f_clone divisor) (impl__FpVesta__neg scalar) in + letb divisor := add_polyx divisor_mul_x divisor_mul_scalar in + divisor) in + letb '(divided_poly,remainder) := divide_polyx (f_clone q_i_sub_r_i) divisor in + letb (multed_poly : t_Seq t_FpVesta) := mul_scalar_polyx divided_poly x2_powered in + letb q_prime := add_polyx q_prime multed_poly in + q_prime) in + letb (commitment : t_FpPallas × t_FpPallas × 'bool) := commit_polyx crs (f_clone q_prime) blinding in + solve_lift (prod_b (commitment,q_prime,blinding)) : both (t_FpPallas × t_FpPallas × 'bool × t_Seq t_FpVesta × t_FpVesta). +Fail Next Obligation. + +Equations step_4_ (g_prime : both (t_Seq t_FpVesta)) (omega : both t_FpVesta) (n : both uint_size) : both (t_Seq t_FpVesta) := + step_4_ g_prime omega n := + letb vanishing := compute_vanishing_polynomial omega n in + letb '(h,remainder) := divide_polyx g_prime vanishing in + solve_lift h : both (t_Seq t_FpVesta). +Fail Next Obligation. diff --git a/ovn/Cargo.toml b/ovn/Cargo.toml new file mode 100644 index 0000000..ce7359a --- /dev/null +++ b/ovn/Cargo.toml @@ -0,0 +1,33 @@ +[package] +name = "hacspec-ovn" +version = "0.1.0" +authors = ["Lasse Letager Hanse "] +edition = "2018" + +[lib] +path = "src/lib.rs" + +[dependencies] +hacspec-lib = { git = "https://github.com/hacspec/hacspec.git" } +hax-lib-macros = { path = "../../hax/hax-lib-macros/" } +hacspec-bip-340 = { path = "../bip-340/" } + +group = "0.13" +rand_core = "0.6" + +hacspec-concordium = { path = "../concordium" } # 4d4b024b547a1f120f6d6951cbc409c94f8f146a +hacspec-concordium-derive = { path = "../concordium-derive" } # 4d4b024b547a1f120f6d6951cbc409c94f8f146a + +quickcheck = "1" +quickcheck_macros = "1" +bls12_381 = "0.8" + +hax-lib = { git = "https://github.com/hacspec/hax", version = "0.1.0-pre.1" } + + +[dev-dependencies] +criterion = "0.4" +rand = "0.8" + +[features] +hax_compilation = [] diff --git a/ovn/concordium.org b/ovn/concordium.org new file mode 100644 index 0000000..2591944 --- /dev/null +++ b/ovn/concordium.org @@ -0,0 +1,4786 @@ +#+TITLE: Concordium Smartcontract Infrastructure Implementations +#+AUTHOR: Lasse Letager Hansen + +# (rev: 4d4b024b547a1f120f6d6951cbc409c94f8f146a) + +#+HTML_HEAD: +#+PROPERTY: header-args:coq :session *Coq* + +# C-c C-v t - export this files +# C-c C-v b - create results / run this file +# C-c C-v s - create results / run subtree + +* General information +:PROPERTIES: +:header-args: sh :eval never :results output silent +:END: +** Resulting output +#+begin_src sh +cargo clean +#+end_src + +#+begin_src sh +cargo install --path language +#+end_src + +#+begin_src sh +cargo build +#+end_src + +#+begin_src sh +cargo hacspec -e v --dir coq/src --org-file concordium.org hacspec-concordium --vc-update --vc-dir coq/_vc +#+end_src + +* Concordium specification +** Config +#+BEGIN_SRC toml :tangle ../concordium/Cargo.toml :mkdirp yes :eval never +[package] +name = "hacspec-concordium" +version = "0.1.0" +authors = [""] +edition = "2018" + +[lib] +path = "src/concordium.rs" + +[dependencies] +hacspec-lib = { git = "https://github.com/hacspec/hacspec.git" } +# hacspec-attributes = { path = "../../utils/attributes", version = "0.1.0-beta.1" , features = ["print_attributes", "hacspec_unsafe"] } # , features = ["hacspec_unsafe"] , , optional = true +# creusot-contracts = { git = "https://github.com/xldenis/creusot", rev = "7763b3ae77205fba83182b9a6c3e69ad0b12fec7" } +concordium-contracts-common = { git = "https://github.com/Concordium/concordium-contracts-common", rev = "84ff7db509ca1fbf958b47e5e5903b7662295850", version = "=2.0.0", default-features = false } +hacspec-concordium-derive = { path = "../concordium-derive" } + +# Reduce code size, at the cost of performance in allocation heavy-code. +wee_alloc="0.4.5" + +# [features] +# use_attributes = ["hacspec-attributes/print_attributes", "hacspec-attributes/hacspec_unsafe"] + +[dev-dependencies] +# hacspec-dev = { path = "../../utils/dev" } +criterion = "0.3" +rand = "0.8" +quickcheck = "1" +quickcheck_macros = "1" +#+END_SRC +*** Imports +#+BEGIN_SRC rust :tangle ../concordium/src/concordium.rs :mkdirp yes :eval never +#![cfg_attr( + not(feature = "std"), + no_std, + feature(alloc_error_handler, core_intrinsics) +)] + +#[cfg(not(feature = "hacspec"))] +#[cfg(not(feature = "std"))] +pub extern crate alloc; + +// TODO: +// #[cfg(not(feature = "hacspec"))] +// #[cfg(not(feature = "std"))] +// #[alloc_error_handler] +// fn on_oom(_layout: alloc::alloc::Layout) -> ! { +// #[cfg(target_arch = "wasm32")] +// unsafe { +// core::arch::wasm32::unreachable() +// } +// #[cfg(not(target_arch = "wasm32"))] +// loop {} +// } + +/// Terminate execution immediately without panicking. +/// When the `std` feature is enabled this is just [std::process::abort](https://doc.rust-lang.org/std/process/fn.abort.html). +/// When `std` is not present and the target architecture is `wasm32` this will +/// simply emit the [unreachable](https://doc.rust-lang.org/core/arch/wasm32/fn.unreachable.html) instruction. +#[cfg(not(feature = "hacspec"))] +#[cfg(feature = "std")] +pub use std::process::abort as trap; +#[cfg(not(feature = "hacspec"))] +#[cfg(all(not(feature = "std"), target_arch = "wasm32"))] +#[inline(always)] +pub fn trap() -> ! { + unsafe { core::arch::wasm32::unreachable() } +} +#[cfg(not(feature = "hacspec"))] +#[cfg(all(not(feature = "std"), not(target_arch = "wasm32")))] +#[inline(always)] +pub fn trap() -> ! { + core::intrinsics::abort() +} + +// TODO: +// #[cfg(not(feature = "hacspec"))] +// #[cfg(not(feature = "std"))] +// #[panic_handler] +// fn abort_panic(_info: &core::panic::PanicInfo) -> ! { +// #[cfg(target_arch = "wasm32")] +// unsafe { +// core::arch::wasm32::unreachable() +// } +// #[cfg(not(target_arch = "wasm32"))] +// loop {} +// } + +// Provide some re-exports to make it easier to use the library. +// This should be expanded in the future. +/// Re-export. +#[cfg(not(feature = "hacspec"))] +#[cfg(not(feature = "std"))] +pub use alloc::{borrow::ToOwned, string, string::String, string::ToString, vec, vec::Vec}; +/// Re-export. +#[cfg(not(feature = "hacspec"))] +#[cfg(not(feature = "std"))] +pub use core::{convert, hash, marker, mem, num, result::*}; +#[cfg(not(feature = "hacspec"))] +#[cfg(feature = "std")] +pub(crate) use std::vec; + +/// Re-export. +#[cfg(not(feature = "hacspec"))] +#[cfg(feature = "std")] +pub use std::{convert, hash, marker, mem, num, string::String, vec::Vec}; + +#[cfg(not(feature = "hacspec"))] +#[cfg(not(feature = "std"))] +pub use alloc::collections; +#[cfg(not(feature = "hacspec"))] +#[cfg(feature = "std")] +pub use std::collections; + +pub mod constants; +mod concordium_prims; +mod concordium_types; +mod concordium_traits; +mod concordium_impls; + +pub mod test_infrastructure; + +use concordium_prims::*; // TODO: Does not re-export anything, nothing is public enough (removed pub) +pub use concordium_types::*; +pub use concordium_traits::*; +pub use concordium_impls::*; + +// TODO: Package into module +// #[cfg(not(feature = "hacspec"))] +// pub mod collections { +// #[cfg(not(feature = "std"))] +// use alloc::collections; +// #[cfg(feature = "std")] +// use std::collections; + +// pub use collections::*; +// pub use collections::{BTreeMap, BTreeSet}; +// pub use concordium_contracts_common::{HashMap, HashSet}; +// } + +#[cfg(not(feature = "hacspec"))] +extern crate concordium_contracts_common; +#[cfg(not(feature = "hacspec"))] +/// Chain constants that impose limits on various aspects of smart contract +/// execution. +pub use concordium_contracts_common::*; + +// TODO: Need derive +#[cfg(not(feature = "hacspec"))] +extern crate hacspec_concordium_derive; +#[cfg(not(feature = "hacspec"))] +pub use hacspec_concordium_derive::*; + +#[cfg(not(feature = "hacspec"))] +extern crate wee_alloc; +// Use `wee_alloc` as the global allocator to reduce code size. +#[cfg(not(feature = "hacspec"))] +#[global_allocator] +static ALLOC: wee_alloc::WeeAlloc = wee_alloc::WeeAlloc::INIT; + +#[cfg(not(feature = "hacspec"))] +extern crate hacspec_lib; +// pub use hacspec_lib::*; + +// #[cfg(feature = "hacspec")] +// use hacspec_attributes::*; + +// #[cfg(not(feature = "hacspec"))] +// extern crate creusot_contracts; +// #[cfg(not(feature = "hacspec"))] +// use creusot_contracts::*; // {ensures, trusted}; // requires, +#+END_SRC + +** Coq code + +#+begin_src elisp :var SOURCE-CODE-FILE="Hacspec_Concordium.v" :results output silent :tangle no +(org-babel-detangle SOURCE-CODE-FILE) +#+end_src + +*** concordium - Coq code +:PROPERTIES: +:header-args: coq :tangle Hacspec_Concordium.v :mkdirp yes :comments link +:header-args: coq :eval never :results output silent +:END: + +#+begin_src coq + +(** This file was automatically generated using Hacspec **) +Require Import Hacspec_Lib MachineIntegers. +From Coq Require Import ZArith. +From Coq Require Import List. +Import ListNotations. +Open Scope Z_scope. +Open Scope bool_scope. +Open Scope hacspec_scope. +#+end_src + +#+begin_src coq +Require Import Concordium_Prims. +Export Concordium_Prims. +#+end_src + +#+begin_src coq +Require Import Concordium_Types. +Export Concordium_Types. +#+end_src + +#+begin_src coq +Require Import Concordium_Traits. +Export Concordium_Traits. +#+end_src + +#+begin_src coq +Require Import Concordium_Impls. +Export Concordium_Impls. +#+end_src +# 5 code sections + +* Concordium "Types" specification +** Rust code +:PROPERTIES: +:header-args: :tangle ../concordium/src/concordium_types.rs :mkdirp yes :eval never +:END: + +*** Imports +#+BEGIN_SRC rust +#[cfg(not(feature = "hacspec"))] +use crate::num::NonZeroI32; +#+END_SRC + +*** Types code +#+BEGIN_SRC rust +#[cfg(not(feature = "hacspec"))] +/// A type representing the constract state bytes. +#[derive(Default)] +pub struct ContractState { + pub(crate) current_position: u32, +} + +#[cfg(not(feature = "hacspec"))] +#[derive(Default)] +/// A type representing the parameter to init and receive methods. +pub struct Parameter { + pub(crate) current_position: u32, +} + +#[cfg(not(feature = "hacspec"))] +/// A type representing the attributes, lazily acquired from the host. +#[derive(Default)] +pub struct AttributesCursor { + /// Current position of the cursor, starting from 0. + /// Note that this is only for the variable attributes. + /// `created_at` and `valid_to` will require. + pub(crate) current_position: u32, + /// The number of remaining items in the policy. + pub(crate) remaining_items: u16, +} + +#[cfg(not(feature = "hacspec"))] +/// A type representing the logger. +#[derive(Default)] +pub struct Logger { + pub(crate) _private: (), +} + +// #[cfg(not(feature = "hacspec"))] +/// Errors that can occur during logging. +#[derive(Debug, Copy, Clone, Eq, PartialEq)] +#[repr(u8)] +pub enum LogError { + /// The log is full. + Full, + /// The message to log was malformed (e.g., too long) + Malformed, +} + +#[cfg(not(feature = "hacspec"))] +/// Error triggered when a non-zero amount of CCD is sent to a contract +/// init or receive function that is not marked as `payable`. +#[derive(Clone, Copy, Debug)] +pub struct NotPayableError; + +#[cfg(not(feature = "hacspec"))] +/// Actions that can be produced at the end of a contract execution. This +/// type is deliberately not cloneable so that we can enforce that +/// `and_then` and `or_else` can only be used when more than one event is +/// created. +/// +/// This type is marked as `must_use` since functions that produce +/// values of the type are effectful. +#[must_use] +pub struct Action { + pub(crate) _private: u32, +} + +#[cfg(not(feature = "hacspec"))] +impl Action { + pub fn tag(&self) -> u32 { + self._private + } +} + +#[cfg(not(feature = "hacspec"))] +/// An error message, signalling rejection of a smart contract invocation. +/// The client will see the error code as a reject reason; if a schema is +/// provided, the error message corresponding to the error code will be +/// displayed. The valid range for an error code is from i32::MIN to -1. +#[derive(Debug, Eq, PartialEq)] // TODO: Creusot issue re-add "Debug" attribute +#[repr(transparent)] +pub struct Reject { + pub error_code: NonZeroI32, +} + +#[cfg(not(feature = "hacspec"))] +/// Default error is i32::MIN. +impl Default for Reject { + #[inline(always)] + fn default() -> Self { + Self { + error_code: unsafe { NonZeroI32::new_unchecked(i32::MIN) }, + } + } +} + +#[cfg(not(feature = "hacspec"))] +impl Reject { + /// This returns `None` for all values >= 0 and `Some` otherwise. + pub fn new(x: i32) -> Option { + if x < 0 { + let error_code = unsafe { NonZeroI32::new_unchecked(x) }; + Some(Reject { error_code }) + } else { + None + } + } +} + +// Macros for failing a contract function + +#[cfg(not(feature = "hacspec"))] +/// The `bail` macro can be used for cleaner error handling. If the function has +/// result type `Result` invoking `bail` will terminate execution early with an +/// error. +/// If an argument is supplied, this will be used as the error, otherwise it +/// requires the type `E` in `Result<_, E>` to implement the `Default` trait. +#[macro_export] +macro_rules! bail { + () => {{ + return Err(Default::default()); + }}; + ($arg:expr) => {{ + // format_err!-like formatting + // logs are only retained in case of rejection when testing. + return Err($arg); + }}; +} + +#[cfg(not(feature = "hacspec"))] +/// The `ensure` macro can be used for cleaner error handling. It is analogous +/// to `assert`, but instead of panicking it uses `bail` to terminate execution +/// of the function early. +#[macro_export] +macro_rules! ensure { + ($p:expr) => { + if !$p { + $crate::bail!(); + } + }; + ($p:expr, $arg:expr) => {{ + if !$p { + $crate::bail!($arg); + } + }}; +} + +#[cfg(not(feature = "hacspec"))] +/// ## Variants of `ensure` for ease of use in certain contexts. +/// Ensure the first two arguments are equal, using `bail` otherwise. +#[macro_export] +macro_rules! ensure_eq { + ($l:expr, $r:expr) => { + $crate::ensure!($l == $r) + }; + ($l:expr, $r:expr, $arg:expr) => { + $crate::ensure!($l == $r, $arg) + }; +} + +#[cfg(not(feature = "hacspec"))] +#[macro_export] +/// Ensure the first two arguments are __not__ equal, using `bail` otherwise. +macro_rules! ensure_ne { + ($l:expr, $r:expr) => { + $crate::ensure!($l != $r) + }; + ($l:expr, $r:expr, $arg:expr) => { + $crate::ensure!($l != $r, $arg) + }; +} + +// Macros for failing a test + +#[cfg(not(feature = "hacspec"))] +/// The `fail` macro is used for testing as a substitute for the panic macro. +/// It reports back error information to the host. +/// Used only in testing. +#[cfg(feature = "std")] +#[macro_export] +macro_rules! fail { + () => { + { + $crate::test_infrastructure::report_error("", file!(), line!(), column!()); + panic!() + } + }; + ($($arg:tt),+) => { + { + let msg = format!($($arg),+); + $crate::test_infrastructure::report_error(&msg, file!(), line!(), column!()); + panic!("{}", msg) + } + }; +} + +#[cfg(not(feature = "hacspec"))] +/// The `fail` macro is used for testing as a substitute for the panic macro. +/// It reports back error information to the host. +/// Used only in testing. +#[cfg(not(feature = "std"))] +#[macro_export] +macro_rules! fail { + () => { + { + $crate::test_infrastructure::report_error("", file!(), line!(), column!()); + panic!() + } + }; + ($($arg:tt),+) => { + { + let msg = &$crate::alloc::format!($($arg),+); + $crate::test_infrastructure::report_error(&msg, file!(), line!(), column!()); + panic!("{}", msg) + } + }; +} + +#[cfg(not(feature = "hacspec"))] +/// The `claim` macro is used for testing as a substitute for the assert macro. +/// It checks the condition and if false it reports back an error. +/// Used only in testing. +#[macro_export] +macro_rules! claim { + ($cond:expr) => { + if !$cond { + $crate::fail!() + } + }; + ($cond:expr,) => { + if !$cond { + $crate::fail!() + } + }; + ($cond:expr, $($arg:tt),+) => { + if !$cond { + $crate::fail!($($arg),+) + } + }; +} + +#[cfg(not(feature = "hacspec"))] +/// Ensure the first two arguments are equal, just like `assert_eq!`, otherwise +/// reports an error. Used only in testing. +#[macro_export] +macro_rules! claim_eq { + ($left:expr, $right:expr) => { + $crate::claim!($left == $right, "left and right are not equal\nleft: {:?}\nright: {:?}", $left, $right) + }; + ($left:expr, $right:expr,) => { + $crate::claim_eq!($left, $right) + }; + ($left:expr, $right:expr, $($arg:tt),+) => { + $crate::claim!($left == $right, $($arg),+) + }; +} + +#[cfg(not(feature = "hacspec"))] +/// Ensure the first two arguments are *not* equal, just like `assert_ne!`, +/// otherwise reports an error. +/// Used only in testing. +#[macro_export] +macro_rules! claim_ne { + ($left:expr, $right:expr) => { + $crate::claim!($left != $right) + }; + ($left:expr, $right:expr,) => { + $crate::claim!($left != $right) + }; + ($left:expr, $right:expr, $($arg:tt),+) => { + $crate::claim!($left != $right, $($arg),+) + }; +} + +#[cfg(not(feature = "hacspec"))] +/// The expected return type of the receive method of a smart contract. +/// +/// Optionally, to define a custom type for error instead of using +/// Reject, allowing to track the reason for rejection, *but only in unit +/// tests*. +/// +/// See also the documentation for [bail!](macro.bail.html) for how to use +/// custom error types. +/// +/// # Example +/// Defining a custom error type +/// // ```rust +/// // enum MyCustomError { +/// // SomeError +/// // } +/// // +/// // #[receive(contract = "mycontract", name = "receive")] +/// // fn contract_receive( +/// // ctx: &R, +/// // receive_amount: Amount, +/// // logger: &mut L, +/// // state: &mut State, +/// // ) -> Result { ... } +/// // ``` +pub type ReceiveResult = Result; + +#[cfg(not(feature = "hacspec"))] +/// The expected return type of the init method of the smart contract, +/// parametrized by the state type of the smart contract. +/// +/// Optionally, to define a custom type for error instead of using Reject, +/// allowing the track the reason for rejection, *but only in unit tests*. +/// +/// See also the documentation for [bail!](macro.bail.html) for how to use +/// custom error types. +/// +/// # Example +/// Defining a custom error type +/// // ```rust +/// // enum MyCustomError { +/// // SomeError +/// // } +/// // +/// // #[init(contract = "mycontract")] +/// // fn contract_init( +/// // ctx: &R, +/// // receive_amount: Amount, +/// // logger: &mut L, +/// // ) -> Result { ... } +/// // ``` +pub type InitResult = Result; + +#[cfg(not(feature = "hacspec"))] +/// Context backed by host functions. +#[derive(Default)] +#[doc(hidden)] +pub struct ExternContext { + marker: crate::marker::PhantomData, +} + +#[cfg(not(feature = "hacspec"))] +#[doc(hidden)] +pub struct ChainMetaExtern {} + +#[cfg(not(feature = "hacspec"))] +#[derive(Default)] +#[doc(hidden)] +pub struct InitContextExtern; +#[cfg(not(feature = "hacspec"))] +#[derive(Default)] +#[doc(hidden)] +pub struct ReceiveContextExtern; + +#[cfg(not(feature = "hacspec"))] +pub(crate) mod sealed { + use super::*; + /// Marker trait intended to indicate which context type we have. + /// This is deliberately a sealed trait, so that it is only implementable + /// by types in this crate. + pub trait ContextType {} + impl ContextType for InitContextExtern {} + impl ContextType for ReceiveContextExtern {} +} +#+END_SRC + +** Coq code + +#+begin_src elisp :var SOURCE-CODE-FILE="Concordium_Types.v" :results output silent :tangle no +(org-babel-detangle SOURCE-CODE-FILE) +#+end_src + +*** concordium_types - Coq code +:PROPERTIES: +:header-args: coq :tangle Concordium_Types.v :mkdirp yes :comments link +:header-args: coq :eval never :results output silent +:END: + +#+begin_src coq + +(** This file was automatically generated using Hacspec **) +Require Import Hacspec_Lib MachineIntegers. +From Coq Require Import ZArith. +From Coq Require Import List. +Import ListNotations. +Open Scope Z_scope. +Open Scope bool_scope. +Open Scope hacspec_scope. +#+end_src + +#+begin_src coq +Inductive log_error_t := +| Full : log_error_t +| Malformed : log_error_t. + +Definition eqb_log_error_t (x y : log_error_t) : bool := +match x with + | Full => match y with | Full=> true | _ => false end + | Malformed => match y with | Malformed=> true | _ => false end + end. + +Definition eqb_leibniz_log_error_t (x y : log_error_t) : eqb_log_error_t x y = true <-> x = y. +Proof. split. intros; destruct x ; destruct y ; try (f_equal ; apply eqb_leibniz) ; easy. intros ; subst ; destruct y ; try reflexivity ; try (apply eqb_refl). Qed. + +Instance eq_dec_log_error_t : EqDec (log_error_t) := + Build_EqDec (log_error_t) (eqb_log_error_t) (eqb_leibniz_log_error_t). +#+end_src + +* Concordium "Traits" specification +** Rust code +:PROPERTIES: +:header-args: rust :tangle ../concordium/src/concordium_traits.rs :mkdirp yes :eval never +:END: +*** Imports +#+BEGIN_SRC rust +#[cfg(not(feature = "hacspec"))] +use crate::*; +#+END_SRC + +*** Traits code +#+BEGIN_SRC rust +// //! This module implements traits for the contract interface. +// //! This allows setting-up mock objects for testing individual +// //! contract invocations. + +#[cfg(not(feature = "hacspec"))] +/// Objects which can access parameters to contracts. +/// +/// This trait has a Read supertrait which means that structured parameters can +/// be directly deserialized by using `.get()` function from the `Get` trait. +/// +/// The reuse of `Read` methods is the reason for the slightly strange choice of +/// methods of this trait. +pub trait HasParameter: Read { + /// Get the size of the parameter to the method. + fn size(&self) -> u32; +} + +#[cfg(not(feature = "hacspec"))] +/// Objects which can access chain metadata. +pub trait HasChainMetadata { + /// Get time in milliseconds at the beginning of this block. + fn slot_time(&self) -> SlotTime; +} + +#[cfg(not(feature = "hacspec"))] +/// A type which has access to a policy of a credential. +/// Since policies can be large this is deliberately written in a relatively +/// low-level style to enable efficient traversal of all the attributes without +/// any allocations. +pub trait HasPolicy { + /// Identity provider who signed the identity object the credential is + /// derived from. + fn identity_provider(&self) -> IdentityProvider; + /// Beginning of the month in milliseconds since unix epoch when the + /// credential was created. + fn created_at(&self) -> Timestamp; + /// Beginning of the month where the credential is no longer valid, in + /// milliseconds since unix epoch. + fn valid_to(&self) -> Timestamp; + /// Get the next attribute, storing it in the provided buffer. + /// The return value, if `Some`, is a pair of an attribute tag, and the + /// length, `n` of the attribute value. In this case, the attribute + /// value is written in the first `n` bytes of the provided buffer. The + /// rest of the buffer is unchanged. + /// + /// The reason this function is added here, and we don't simply implement + /// an Iterator for this type is that with the supplied buffer we can + /// iterate through the elements more efficiently, without any allocations, + /// the consumer being responsible for allocating the buffer. + fn next_item(&mut self, buf: &mut [u8; 31]) -> Option<(AttributeTag, u8)>; +} + +#[cfg(not(feature = "hacspec"))] +/// Common data accessible to both init and receive methods. +pub trait HasCommonData { + type PolicyType: HasPolicy; + type MetadataType: HasChainMetadata; + type ParamType: HasParameter + Read; + type PolicyIteratorType: ExactSizeIterator; + /// Policies of the sender of the message. + /// For init methods this is the would-be creator of the contract, + /// for the receive this is the policies of the immediate sender. + /// + /// In the latter case, if the sender is an account then it is the policies + /// of the account, if it is a contract then it is the policies of the + /// creator of the contract. + fn policies(&self) -> Self::PolicyIteratorType; + /// Get the reference to chain metadata + fn metadata(&self) -> &Self::MetadataType; + /// Get the cursor to the parameter. + fn parameter_cursor(&self) -> Self::ParamType; +} + +#[cfg(not(feature = "hacspec"))] +/// Types which can act as init contexts. +pub trait HasInitContext: HasCommonData { + /// Data needed to open the context. + type InitData; + /// Open the init context for reading and accessing values. + fn open(data: Self::InitData) -> Self; + /// Who invoked this init call. + fn init_origin(&self) -> AccountAddress; +} + +#[cfg(not(feature = "hacspec"))] +/// Types which can act as receive contexts. +pub trait HasReceiveContext: HasCommonData { + type ReceiveData; + + /// Open the receive context for reading and accessing values. + fn open(data: Self::ReceiveData) -> Self; + /// Who is the account that initiated the top-level transaction this + /// invocation is a part of. + fn invoker(&self) -> AccountAddress; + /// The address of the contract being invoked. + fn self_address(&self) -> ContractAddress; + /// Balance on the contract before the call was made. + fn self_balance(&self) -> Amount; + /// The immediate sender of the message. In general different from the + /// invoker. + fn sender(&self) -> Address; + /// Account which created the contract instance. + fn owner(&self) -> AccountAddress; +} + +#[cfg(not(feature = "hacspec"))] +/// A type that can serve as the contract state type. +pub trait HasContractState +where + Self: Read, + Self: Write, + Self: Seek, { + type ContractStateData; + /// Open the contract state. Only one instance can be opened at the same + /// time. + fn open(_: Self::ContractStateData) -> Self; + + /// Get the current size of contract state. + fn size(&self) -> u32; + + /// Truncate the state to the given size. If the given size is more than the + /// current state size this operation does nothing. The new position is at + /// most at the end of the stream. + fn truncate(&mut self, new_size: u32); + + /// Make sure that the memory size is at least that many bytes in size. + /// Returns true iff this was successful. The new bytes are initialized as + /// 0. + fn reserve(&mut self, len: u32) -> bool; +} + +#[cfg(not(feature = "hacspec"))] +/// Objects which can serve as loggers. +/// +/// Logging functionality can be used by smart contracts to record events that +/// might be of interest to external parties. These events are not used on the +/// chain, and cannot be observed by other contracts, but they are stored by the +/// node, and can be queried to provide information to off-chain actors. +pub trait HasLogger { + /// Initialize a logger. + fn init() -> Self; + + /// Log the given slice as-is. If logging is not successful an error will be + /// returned. + fn log_raw(&mut self, event: &[u8]) -> Result<(), LogError>; + + #[inline(always)] + /// Log a serializable event by serializing it with a supplied serializer. + fn log(&mut self, event: &S) -> Result<(), LogError> { + let mut out = Vec::new(); + if event.serial(&mut out).is_err() { + trap(); // should not happen + } + self.log_raw(&out) + } +} + +#[cfg(not(feature = "hacspec"))] +/// An object that can serve to construct actions. +/// +/// The actions that a smart contract can produce as a +/// result of its execution. These actions form a tree and are executed by +/// the scheduler in the predefined order. +pub trait HasActions { + /// Default accept action. + fn accept() -> Self; + + /// Send a given amount to an account. + fn simple_transfer(acc: &AccountAddress, amount: Amount) -> Self; + + /// Send a message to a contract. + fn send_raw( + ca: &ContractAddress, + receive_name: ReceiveName, + amount: Amount, + parameter: &[u8], + ) -> Self; + + /// If the execution of the first action succeeds, run the second action + /// as well. + fn and_then(self, then: Self) -> Self; + + /// If the execution of the first action fails, try the second. + fn or_else(self, el: Self) -> Self; +} + +#[cfg(not(feature = "hacspec"))] +/// Add optimized unwrap behaviour that aborts the process instead of +/// panicking. +pub trait UnwrapAbort { + /// The underlying result type of the unwrap, in case of success. + type Unwrap; + /// Unwrap or call [trap](../fn.trap.html). In contrast to + /// the unwrap methods on [Option::unwrap](https://doc.rust-lang.org/std/option/enum.Option.html#method.unwrap) + /// this method will tend to produce smaller code, at the cost of the + /// ability to handle the panic. + /// This is intended to be used only in `Wasm` code, where panics cannot be + /// handled anyhow. + fn unwrap_abort(self) -> Self::Unwrap; +} + +#[cfg(not(feature = "hacspec"))] +/// Analogue of the `expect` methods on types such as [Option](https://doc.rust-lang.org/std/option/enum.Option.html), +/// but useful in a Wasm setting. +pub trait ExpectReport { + type Unwrap; + /// Like the default `expect` on, e.g., `Result`, but calling + /// [fail](macro.fail.html) with the given message, instead of `panic`. + fn expect_report(self, msg: &str) -> Self::Unwrap; +} + +#[cfg(not(feature = "hacspec"))] +/// Analogue of the `expect_err` methods on [Result](https://doc.rust-lang.org/std/result/enum.Result.html), +/// but useful in a Wasm setting. +pub trait ExpectErrReport { + type Unwrap; + /// Like the default `expect_err` on, e.g., `Result`, but calling + /// [fail](macro.fail.html) with the given message, instead of `panic`. + fn expect_err_report(self, msg: &str) -> Self::Unwrap; +} + +#[cfg(not(feature = "hacspec"))] +/// Analogue of the `expect_none` methods on [Option](https://doc.rust-lang.org/std/option/enum.Option.html), +/// but useful in a Wasm setting. +pub trait ExpectNoneReport { + /// Like the default `expect_none_report` on, e.g., `Option`, but calling + /// [fail](macro.fail.html) with the given message, instead of `panic`. + fn expect_none_report(self, msg: &str); +} + +#[cfg(not(feature = "hacspec"))] +/// The `SerialCtx` trait provides a means of writing structures into byte-sinks +/// (`Write`) using contextual information. +/// The contextual information is: +/// +/// - `size_length`: The number of bytes used to record the length of the +/// data. +pub trait SerialCtx { + /// Attempt to write the structure into the provided writer, failing if + /// if the length cannot be represented in the provided `size_length` or + /// only part of the structure could be written. + /// + /// NB: We use Result instead of Option for better composability with other + /// constructs. + fn serial_ctx( + &self, + size_length: schema::SizeLength, + out: &mut W, + ) -> Result<(), W::Err>; +} + +#[cfg(not(feature = "hacspec"))] +/// The `DeserialCtx` trait provides a means of reading structures from +/// byte-sources (`Read`) using contextual information. +/// The contextual information is: +/// +/// - `size_length`: The expected number of bytes used for the length of the +/// data. +/// - `ensure_ordered`: Whether the ordering should be ensured, for example +/// that keys in `BTreeMap` and `BTreeSet` are in strictly increasing order. +pub trait DeserialCtx: Sized { + /// Attempt to read a structure from a given source and context, failing if + /// an error occurs during deserialization or reading. + fn deserial_ctx( + size_length: schema::SizeLength, + ensure_ordered: bool, + source: &mut R, + ) -> ParseResult; +} +#+END_SRC + +** Coq code + +#+begin_src elisp :var SOURCE-CODE-FILE="Concordium_Traits.v" :results output silent :tangle no +(org-babel-detangle SOURCE-CODE-FILE) +#+end_src + +*** concordium_traits - Coq code +:PROPERTIES: +:header-args: coq :tangle Concordium_Traits.v :mkdirp yes :comments link +:header-args: coq :eval never :results output silent +:END: + +#+begin_src coq + +(** This file was automatically generated using Hacspec **) +Require Import Hacspec_Lib MachineIntegers. +From Coq Require Import ZArith. +From Coq Require Import List. +Import ListNotations. +Open Scope Z_scope. +Open Scope bool_scope. +Open Scope hacspec_scope. +#+end_src + +* Concordium "Prims" specification +** Rust code +:PROPERTIES: +:header-args: rust :tangle ../concordium/src/concordium_prims.rs :mkdirp yes :eval never +:END: + +*** Imports +#+BEGIN_SRC rust +#[cfg(not(feature = "hacspec"))] +use crate::*; + +use hacspec_lib::*; +#+END_SRC + +*** Externs +Coerce for public byte sequences. +#+begin_src rust + #[cfg(not(feature = "hacspec"))] + pub fn coerce_rust_to_hacspec_public_byte_seq(buf: &[u8]) -> PublicByteSeq { + PublicByteSeq::from_native_slice(buf) + } + + // TODO: Make creusot friendly version + #[cfg(not(feature = "hacspec"))] + pub fn coerce_hacspec_to_rust_public_byte_seq(buf: PublicByteSeq) -> Vec { + // buf.native_slice().iter().collect(); + let mut temp_vec: Vec = Vec::new(); + for i in 0..buf.len() { + temp_vec.push(buf.index(i).clone()) + } + temp_vec + } +#+end_src + +Extern accept +#+begin_src rust +#[cfg(not(feature = "hacspec"))] +extern "C" { + pub(crate) fn accept() -> u32; +} + +#[cfg(not(feature = "hacspec"))] +// #[trusted] +pub(crate) fn accept_creusot() -> u32 { + unsafe { accept() } +} + +#[cfg(feature = "hacspec")] +pub(crate) fn accept_hacspec() -> u32 { + 1u32 +} + +#[cfg(not(feature = "hacspec"))] +pub(crate) fn accept_hacspec() -> u32 { + accept_creusot() +} + +#+end_src +Extern simple transfer +#+begin_src rust + #[cfg(not(feature = "hacspec"))] + extern "C" { + // Basic action to send tokens to an account. + pub(crate) fn simple_transfer(addr_bytes: *const u8, amount: u64) -> u32; + } + + #[cfg(not(feature = "hacspec"))] + // #[trusted] + pub(crate) fn simple_transfer_creusot(addr_bytes: *const u8, amount: u64) -> u32 { + unsafe { simple_transfer(addr_bytes, amount) } + } + + #[cfg(feature = "hacspec")] + pub(crate) fn simple_transfer_hacspec(buf: PublicByteSeq, amount: u64) -> u32 { + 1u32 + } + + #[cfg(not(feature = "hacspec"))] + pub(crate) fn simple_transfer_hacspec(buf: PublicByteSeq, amount: u64) -> u32 { + let temp = &mut coerce_hacspec_to_rust_public_byte_seq(buf.clone())[..]; + simple_transfer_creusot(temp.as_ptr(), amount) + } + +#+end_src +Extern send +#+begin_src rust + #[cfg(not(feature = "hacspec"))] + extern "C" { + // Send a message to a smart contract. + pub(crate) fn send( + addr_index: u64, + addr_subindex: u64, + receive_name: *const u8, + receive_name_len: u32, + amount: u64, + parameter: *const u8, + parameter_len: u32, + ) -> u32; + } + + #[cfg(not(feature = "hacspec"))] + // #[trusted] + pub(crate) fn send_creusot( + addr_index: u64, + addr_subindex: u64, + receive_name: *const u8, + receive_name_len: u32, + amount: u64, + parameter: *const u8, + parameter_len: u32, + ) -> u32 { + unsafe { send(addr_index, addr_subindex, receive_name, receive_name_len, amount, parameter, parameter_len) } + } + + #[cfg(feature = "hacspec")] + pub(crate) fn send_hacspec( + addr_index: u64, + addr_subindex: u64, + receive_name: PublicByteSeq, + amount: u64, + parameter: PublicByteSeq, + ) -> u32 { + 1u32 + } + + #[cfg(not(feature = "hacspec"))] + pub(crate) fn send_hacspec( + addr_index: u64, + addr_subindex: u64, + receive_name: PublicByteSeq, + amount: u64, + parameter: PublicByteSeq, + ) -> u32 { + let temp_receive_name = &mut coerce_hacspec_to_rust_public_byte_seq(receive_name.clone())[..]; + let temp_parameter = &mut coerce_hacspec_to_rust_public_byte_seq(parameter.clone())[..]; + send_creusot(addr_index, addr_subindex, temp_receive_name.as_ptr(), receive_name.len() as u32, amount, temp_parameter.as_ptr(), parameter.len() as u32) + } + +#+end_src +Extern combine and +#+begin_src rust +#[cfg(not(feature = "hacspec"))] +extern "C" { + // Combine two actions using normal sequencing. This is using the stack of + // actions already produced. + pub(crate) fn combine_and(l: u32, r: u32) -> u32; +} + +#[cfg(not(feature = "hacspec"))] +// #[trusted] +pub(crate) fn combine_and_creusot(l: u32, r: u32) -> u32 { + unsafe { combine_and(l, r) } +} + +#[cfg(feature = "hacspec")] +pub(crate) fn combine_and_hacspec(l: u32, r: u32) -> u32 { + 1u32 +} + +#[cfg(not(feature = "hacspec"))] +pub(crate) fn combine_and_hacspec(l: u32, r: u32) -> u32 { + combine_and_creusot(l,r) +} + +#+end_src +Extern combine or +#+begin_src rust +#[cfg(not(feature = "hacspec"))] +extern "C" { + // Combine two actions using normal sequencing. This is using the stack of + // actions already produced. + pub(crate) fn combine_or(l: u32, r: u32) -> u32; +} + +#[cfg(not(feature = "hacspec"))] +// #[trusted] +pub(crate) fn combine_or_creusot(l: u32, r: u32) -> u32 { + unsafe { combine_or(l, r) } +} + +#[cfg(feature = "hacspec")] +pub(crate) fn combine_or_hacspec(l: u32, r: u32) -> u32 { + 1u32 +} + +#[cfg(not(feature = "hacspec"))] +pub(crate) fn combine_or_hacspec(l: u32, r: u32) -> u32 { + combine_or_creusot(l,r) +} + +#+end_src +Extern parameter size +#+begin_src rust + #[cfg(not(feature = "hacspec"))] + extern "C" { + // Get the size of the parameter to the method (either init or receive). + pub(crate) fn get_parameter_size() -> u32; + } + + #[cfg(not(feature = "hacspec"))] + // #[trusted] + pub(crate) fn get_parameter_size_creusot() -> u32 { + unsafe { get_parameter_size() } + } + + #[cfg(feature = "hacspec")] + pub(crate) fn get_parameter_size_hacspec() -> u32 { + 1u32 + } + + #[cfg(not(feature = "hacspec"))] + pub(crate) fn get_parameter_size_hacspec() -> u32 { + get_parameter_size_creusot() + } + +#+end_src +Extern for parameter section +#+begin_src rust + #[cfg(not(feature = "hacspec"))] + extern "C" { + // Write a section of the parameter to the given location. Return the number + // of bytes written. The location is assumed to contain enough memory to + // write the requested length into. + pub(crate) fn get_parameter_section(param_bytes: *mut u8, length: u32, offset: u32) -> u32; + } + + #[cfg(not(feature = "hacspec"))] + // #[trusted] + pub(crate) fn get_parameter_section_creusot(start: *mut u8, length: u32, offset: u32) -> u32 { + unsafe { get_parameter_section(start, length, offset) } + } + + #[cfg(feature = "hacspec")] + pub(crate) fn get_parameter_section_hacspec(buf: PublicByteSeq, offset: u32) -> (PublicByteSeq, u32) { + (buf, 1u32) + } + + #[cfg(not(feature = "hacspec"))] + pub(crate) fn get_parameter_section_hacspec(buf: PublicByteSeq, offset: u32) -> (PublicByteSeq, u32) { + let temp = &mut coerce_hacspec_to_rust_public_byte_seq(buf.clone())[..]; + let result = get_parameter_section_creusot(temp.as_mut_ptr(), buf.len() as u32, offset); + ( + coerce_rust_to_hacspec_public_byte_seq(&temp), + result, + ) + } + +#+end_src +Get policy section extern +#+begin_src rust + #[cfg(not(feature = "hacspec"))] + extern "C" { + // Write a section of the policy to the given location. Return the number + // of bytes written. The location is assumed to contain enough memory to + // write the requested length into. + pub(crate) fn get_policy_section(policy_bytes: *mut u8, length: u32, offset: u32) -> u32; + } + + #[cfg(not(feature = "hacspec"))] + // #[trusted] + pub(crate) fn get_policy_section_creusot(policy_bytes: *mut u8, length: u32, offset: u32) -> u32 { + unsafe { get_policy_section(policy_bytes, length, offset) } + } + + #[cfg(feature = "hacspec")] + pub(crate) fn get_policy_section_hacspec(policy_bytes: PublicByteSeq, offset: u32) -> (PublicByteSeq, u32) { + (policy_bytes, 1u32) + } + + #[cfg(not(feature = "hacspec"))] + pub(crate) fn get_policy_section_hacspec(policy_bytes: PublicByteSeq, offset: u32) -> (PublicByteSeq, u32) { + let temp = &mut coerce_hacspec_to_rust_public_byte_seq(policy_bytes.clone())[..]; + let result = get_policy_section_creusot(temp.as_mut_ptr(), policy_bytes.len() as u32, offset); + ( + coerce_rust_to_hacspec_public_byte_seq(&temp), + result, + ) + } + +#+end_src +Log event extern +#+begin_src rust + #[cfg(not(feature = "hacspec"))] + extern "C" { + // Add a log item. Return values are + // - -1 if logging failed due to the message being too long + // - 0 if the log is already full + // - 1 if data was successfully logged. + pub(crate) fn log_event(start: *const u8, length: u32) -> i32; + } + + #[cfg(not(feature = "hacspec"))] + // #[trusted] + pub(crate) fn log_event_creusot(start: *const u8, length: u32) -> i32 { + unsafe { log_event(start, length) } + } + + #[cfg(feature = "hacspec")] + pub(crate) fn log_event_hacspec(start: PublicByteSeq) -> (PublicByteSeq, i32) { + (start, 1i32) + } + + #[cfg(not(feature = "hacspec"))] + pub(crate) fn log_event_hacspec(start: PublicByteSeq) -> (PublicByteSeq, i32) { + let temp = &mut coerce_hacspec_to_rust_public_byte_seq(start.clone())[..]; + let result = log_event_creusot(temp.as_ptr(), start.len() as u32); + (coerce_rust_to_hacspec_public_byte_seq(&temp), result) + } + +#+end_src +Load state extern +#+begin_src rust +#[cfg(not(feature = "hacspec"))] +extern "C" { + pub(crate) fn load_state(start: *mut u8, length: u32, offset: u32) -> u32; +} + +#[cfg(not(feature = "hacspec"))] +// #[trusted] +pub(crate) fn load_state_creusot(start: *mut u8, length: u32, offset: u32) -> u32 { + unsafe { load_state(start, length, offset) } +} + +#[cfg(feature = "hacspec")] +pub(crate) fn load_state_hacspec(buf: PublicByteSeq, offset: u32) -> (PublicByteSeq, u32) { + (buf, 1u32) +} + +#[cfg(not(feature = "hacspec"))] +pub(crate) fn load_state_hacspec(buf: PublicByteSeq, offset: u32) -> (PublicByteSeq, u32) { + let temp = &mut coerce_hacspec_to_rust_public_byte_seq(buf.clone())[..]; + let result = load_state_creusot(temp.as_mut_ptr(), buf.len() as u32, offset); + (coerce_rust_to_hacspec_public_byte_seq(&temp), result) +} +#+end_src +Write state extern +#+begin_src rust +#[cfg(not(feature = "hacspec"))] +extern "C" { + pub(crate) fn write_state(start: *mut u8, length: u32, offset: u32) -> u32; +} + +#[cfg(not(feature = "hacspec"))] +// #[trusted] +pub(crate) fn write_state_creusot(start: *mut u8, length: u32, offset: u32) -> u32 { + unsafe { write_state(start, length, offset) } +} + +#[cfg(feature = "hacspec")] +pub(crate) fn write_state_hacspec(buf: PublicByteSeq, offset: u32) -> (PublicByteSeq, u32) { + (buf, 1u32) +} + +#[cfg(not(feature = "hacspec"))] +pub(crate) fn write_state_hacspec(buf: PublicByteSeq, offset: u32) -> (PublicByteSeq, u32) { + let temp = &mut coerce_hacspec_to_rust_public_byte_seq(buf.clone())[..]; + let result = write_state_creusot(temp.as_mut_ptr(), buf.len() as u32, offset); + (coerce_rust_to_hacspec_public_byte_seq(&temp), result) +} +#+end_src +Resize state extern +#+begin_src rust + #[cfg(not(feature = "hacspec"))] + extern "C" { + // Resize state to the new value (truncate if new size is smaller). Return 0 if + // this was unsuccesful (new state too big), or 1 if successful. + pub(crate) fn resize_state(new_size: u32) -> u32; // returns 0 or 1. + // get current state size in bytes. + } + + #[cfg(not(feature = "hacspec"))] + // #[trusted] + pub(crate) fn resize_state_creusot(new_size: u32) -> u32 { + unsafe { resize_state(new_size) } + } + + #[cfg(feature = "hacspec")] + pub(crate) fn resize_state_hacspec(new_size: u32) -> u32 { + 1u32 + } + + #[cfg(not(feature = "hacspec"))] + pub(crate) fn resize_state_hacspec(new_size: u32) -> u32 { + resize_state_creusot(new_size) + } +#+end_src +State size extern +#+begin_src rust +#[cfg(not(feature = "hacspec"))] +extern "C" { + pub(crate) fn state_size() -> u32; +} + +#[cfg(not(feature = "hacspec"))] +// #[trusted] +pub(crate) fn state_size_creusot() -> u32 { + unsafe { state_size() } +} + +#[cfg(feature = "hacspec")] +pub(crate) fn state_size_hacspec() -> u32 { + 1u32 +} + +#[cfg(not(feature = "hacspec"))] +pub(crate) fn state_size_hacspec() -> u32 { + state_size_creusot() +} +#+end_src +Get init origin extern +#+begin_src rust + #[cfg(not(feature = "hacspec"))] + extern "C" { + // Getter for the init context. + /// Address of the sender, 32 bytes + pub(crate) fn get_init_origin(start: *mut u8); + } + + #[cfg(not(feature = "hacspec"))] + // #[trusted] + pub(crate) fn get_init_origin_creusot(start: *mut u8) { + unsafe { get_init_origin(start) } + } + + #[cfg(feature = "hacspec")] + pub(crate) fn get_init_origin_hacspec(start: PublicByteSeq) -> PublicByteSeq { + start + } + + #[cfg(not(feature = "hacspec"))] + pub(crate) fn get_init_origin_hacspec(start: PublicByteSeq) -> PublicByteSeq { + let temp = &mut coerce_hacspec_to_rust_public_byte_seq(start.clone())[..]; + get_init_origin_creusot(temp.as_mut_ptr()); + coerce_rust_to_hacspec_public_byte_seq(&temp) + } + +#+end_src +Get receive invoker extern +#+begin_src rust + #[cfg(not(feature = "hacspec"))] + extern "C" { + /// Invoker of the top-level transaction, AccountAddress. + pub(crate) fn get_receive_invoker(start: *mut u8); + } + + #[cfg(not(feature = "hacspec"))] + // #[trusted] + pub(crate) fn get_receive_invoker_creusot(start: *mut u8) { + unsafe { get_receive_invoker(start) } + } + + #[cfg(feature = "hacspec")] + pub(crate) fn get_receive_invoker_hacspec(start: PublicByteSeq) -> PublicByteSeq { + start + } + + #[cfg(not(feature = "hacspec"))] + pub(crate) fn get_receive_invoker_hacspec(start: PublicByteSeq) -> PublicByteSeq { + let temp = &mut coerce_hacspec_to_rust_public_byte_seq(start.clone())[..]; + get_receive_invoker_creusot(temp.as_mut_ptr()); + coerce_rust_to_hacspec_public_byte_seq(&temp) + } + +#+end_src +Get receive self address extern +#+begin_src rust + #[cfg(not(feature = "hacspec"))] + extern "C" { + /// Address of the contract itself, ContractAddress. + pub(crate) fn get_receive_self_address(start: *mut u8); + } + + #[cfg(not(feature = "hacspec"))] + // #[trusted] + pub(crate) fn get_receive_self_address_creusot(start: *mut u8) { + unsafe { get_receive_self_address(start) } + } + + #[cfg(feature = "hacspec")] + pub(crate) fn get_receive_self_address_hacspec(start: PublicByteSeq) -> PublicByteSeq { + start + } + + #[cfg(not(feature = "hacspec"))] + pub(crate) fn get_receive_self_address_hacspec(start: PublicByteSeq) -> PublicByteSeq { + let temp = &mut coerce_hacspec_to_rust_public_byte_seq(start.clone())[..]; + get_receive_self_address_creusot(temp.as_mut_ptr()); + coerce_rust_to_hacspec_public_byte_seq(&temp) + } + +#+end_src +Get receive self balance extern +#+begin_src rust + #[cfg(not(feature = "hacspec"))] + extern "C" { + /// Self-balance of the contract, returns the amount + pub(crate) fn get_receive_self_balance() -> u64; + } + + #[cfg(not(feature = "hacspec"))] + // #[trusted] + pub(crate) fn get_receive_self_balance_creusot() -> u64 { + unsafe { get_receive_self_balance() } + } + + #[cfg(feature = "hacspec")] + pub(crate) fn get_receive_self_balance_hacspec() -> u64 { + 1u64 + } + + #[cfg(not(feature = "hacspec"))] + pub(crate) fn get_receive_self_balance_hacspec() -> u64 { + get_receive_self_balance_creusot() + } + +#+end_src +Get receive sender extern +#+begin_src rust + #[cfg(not(feature = "hacspec"))] + extern "C" { + /// Immediate sender of the message (either contract or account). + pub(crate) fn get_receive_sender(start: *mut u8); + } + + #[cfg(not(feature = "hacspec"))] + // #[trusted] + pub(crate) fn get_receive_sender_creusot(start: *mut u8) { + unsafe { get_receive_sender(start) } + } + + #[cfg(feature = "hacspec")] + pub(crate) fn get_receive_sender_hacspec(start: PublicByteSeq) -> PublicByteSeq { + start + } + + #[cfg(not(feature = "hacspec"))] + pub(crate) fn get_receive_sender_hacspec(start: PublicByteSeq) -> PublicByteSeq { + let temp = &mut coerce_hacspec_to_rust_public_byte_seq(start.clone())[..]; + get_receive_sender_creusot(temp.as_mut_ptr()); + coerce_rust_to_hacspec_public_byte_seq(&temp) + } + +#+end_src +Get receive owner extern (unused) +#+begin_src rust :tangle no +#[cfg(not(feature = "hacspec"))] +extern "C" { + /// Owner of the contract, AccountAddress. + pub(crate) fn get_receive_owner(start: *mut u8); +} + +#[cfg(not(feature = "hacspec"))] +// #[trusted] +pub(crate) fn get_receive_owner_creusot(start: *mut u8) { + unsafe { get_receive_owner(start) } +} + +#[cfg(feature = "hacspec")] +pub(crate) fn get_receive_owner_hacspec(start: PublicByteSeq) -> PublicByteSeq { + start +} + +#[cfg(not(feature = "hacspec"))] +pub(crate) fn get_receive_owner_hacspec(start: PublicByteSeq) -> PublicByteSeq { + let temp = &mut coerce_hacspec_to_rust_public_byte_seq(start.clone())[..]; + get_receive_owner_creusot(temp.as_mut_ptr()); + coerce_rust_to_hacspec_public_byte_seq(&temp) +} +#+end_src +Get slot time extern +#+begin_src rust + #[cfg(not(feature = "hacspec"))] + extern "C" { + // Getters for the chain meta data + /// Slot time (in milliseconds) from chain meta data + pub(crate) fn get_slot_time() -> u64; + } + + #[cfg(not(feature = "hacspec"))] + // #[trusted] + pub(crate) fn get_slot_time_creusot() -> u64 { + unsafe { get_slot_time() } + } + + #[cfg(feature = "hacspec")] + pub(crate) fn get_slot_time_hacspec() -> u64 { + 1u64 + } + + #[cfg(not(feature = "hacspec"))] + pub(crate) fn get_slot_time_hacspec() -> u64 { + get_slot_time_creusot() + } +#+end_src +Report Error (TODO) + +** Coq code + +#+begin_src elisp :var SOURCE-CODE-FILE="Concordium_Prims.v" :results output silent :tangle no +(org-babel-detangle SOURCE-CODE-FILE) +#+end_src + +*** concordium_prims - Coq code +:PROPERTIES: +:header-args: coq :tangle Concordium_Prims.v :mkdirp yes :comments link +:header-args: coq :eval never :results output silent +:END: + +#+begin_src coq + +(** This file was automatically generated using Hacspec **) +Require Import Hacspec_Lib MachineIntegers. +From Coq Require Import ZArith. +From Coq Require Import List. +Import ListNotations. +Open Scope Z_scope. +Open Scope bool_scope. +Open Scope hacspec_scope. +#+end_src + +#+begin_src coq +Require Import Hacspec_Lib. +Export Hacspec_Lib. +#+end_src + +#+begin_src coq +Definition accept_hacspec : int32 := + @repr WORDSIZE32 1. +#+end_src + +#+begin_src coq +Definition simple_transfer_hacspec + (buf_0 : public_byte_seq) + (amount_1 : int64): int32 := + @repr WORDSIZE32 1. +#+end_src + +#+begin_src coq +Definition send_hacspec + (addr_index_2 : int64) + (addr_subindex_3 : int64) + (receive_name_4 : public_byte_seq) + (amount_5 : int64) + (parameter_6 : public_byte_seq): int32 := + @repr WORDSIZE32 1. +#+end_src + +#+begin_src coq +Definition combine_and_hacspec (l_7 : int32) (r_8 : int32): int32 := + @repr WORDSIZE32 1. +#+end_src + +#+begin_src coq +Definition combine_or_hacspec (l_9 : int32) (r_10 : int32): int32 := + @repr WORDSIZE32 1. +#+end_src + +#+begin_src coq +Definition get_parameter_size_hacspec : int32 := + @repr WORDSIZE32 1. +#+end_src + +#+begin_src coq +Definition get_parameter_section_hacspec + (buf_11 : public_byte_seq) + (offset_12 : int32): (public_byte_seq ∏ int32) := + (buf_11, @repr WORDSIZE32 1). +#+end_src + +#+begin_src coq +Definition get_policy_section_hacspec + (policy_bytes_13 : public_byte_seq) + (offset_14 : int32): (public_byte_seq ∏ int32) := + (policy_bytes_13, @repr WORDSIZE32 1). +#+end_src + +#+begin_src coq +Definition log_event_hacspec + (start_15 : public_byte_seq): (public_byte_seq ∏ int32) := + (start_15, @repr WORDSIZE32 1). +#+end_src + +#+begin_src coq +Definition load_state_hacspec + (buf_16 : public_byte_seq) + (offset_17 : int32): (public_byte_seq ∏ int32) := + (buf_16, @repr WORDSIZE32 1). +#+end_src + +#+begin_src coq +Definition write_state_hacspec + (buf_18 : public_byte_seq) + (offset_19 : int32): (public_byte_seq ∏ int32) := + (buf_18, @repr WORDSIZE32 1). +#+end_src + +#+begin_src coq +Definition resize_state_hacspec (new_size_20 : int32): int32 := + @repr WORDSIZE32 1. +#+end_src + +#+begin_src coq +Definition state_size_hacspec : int32 := + @repr WORDSIZE32 1. +#+end_src + +#+begin_src coq +Definition get_init_origin_hacspec + (start_21 : public_byte_seq): public_byte_seq := + start_21. +#+end_src + +#+begin_src coq +Definition get_receive_invoker_hacspec + (start_22 : public_byte_seq): public_byte_seq := + start_22. +#+end_src + +#+begin_src coq +Definition get_receive_self_address_hacspec + (start_23 : public_byte_seq): public_byte_seq := + start_23. +#+end_src + +#+begin_src coq +Definition get_receive_self_balance_hacspec : int64 := + @repr WORDSIZE64 1. +#+end_src + +#+begin_src coq +Definition get_receive_sender_hacspec + (start_24 : public_byte_seq): public_byte_seq := + start_24. +#+end_src + +#+begin_src coq +Definition get_slot_time_hacspec : int64 := + @repr WORDSIZE64 1. +#+end_src +# 21 code sections + +* Concordium "Impls" specification +** Rust code +:PROPERTIES: +:header-args: :tangle ../concordium/src/concordium_impls.rs :mkdirp yes :eval never +:END: + +*** Imports +#+BEGIN_SRC rust +#[cfg(not(feature = "hacspec"))] +use crate::{ + // collections::{BTreeMap, BTreeSet}, + convert::{self}, // , TryFrom, TryInto + // hash::Hash, + num::NonZeroI32, + trap, + vec::Vec, + // String, + ,* +}; + +#[cfg(not(feature = "hacspec"))] +extern crate hacspec_lib; + +use hacspec_lib::*; + +#[cfg(not(feature = "hacspec"))] +use hacspec_lib::Seq; // TODO: fix name collision + +use concordium_prims::*; +use concordium_types::*; +use concordium_traits::*; +#+END_SRC + +*** Reject +We modle reject as the underlying data, that is the src_rust[:eval never]{i32} error code. The default constructor is i32 min. +#+begin_src rust +pub type RejectHacspec = i32; + +pub fn reject_impl_deafult() -> RejectHacspec { + -2_147_483_648i32 // i32::MIN +} + +#+end_src +We then implement the new operations for Reject. +#+begin_src rust +pub fn new_reject_impl(x: i32) -> Option:: { // Option + // TODO: fix 'identifier is not a constant' error (Seems to be fixed by some import?) + if x < 0i32 { + Option::::Some(x) + } else { + Option::::None + } +} + +#+end_src +We define the coercion function for Reject, and implement the traits +#+begin_src rust +#[cfg(not(feature = "hacspec"))] +// #[trusted] +// #[ensures(!(result == 0i32))] +pub fn non_zero_i32(v : i32) -> NonZeroI32 { + unsafe { NonZeroI32::new_unchecked(v) } +} + +#[cfg(not(feature = "hacspec"))] +pub fn coerce_hacspec_to_rust_reject(hacspec_reject: RejectHacspec) -> Reject { + Reject { + error_code: non_zero_i32(hacspec_reject), + } +} +#+end_src + +**** Reject - From trait +We modle the unsafe block with unchecked non zero as a precondition using requires giving us the hacspec equivalent +#+begin_src rust +// #[ensures(!(result == 0i32))] // != +pub fn reject_impl_convert_from_unit() -> RejectHacspec { + -2_147_483_648i32 + 1i32 // i32::MIN +} + +// #[ensures(!(result == 0i32))] // != +pub fn reject_impl_convert_from_parse_error() -> RejectHacspec { + -2_147_483_648i32 + 2i32 // i32::MIN +} +#+end_src +We then implement the traits +#+begin_src rust +#[cfg(not(feature = "hacspec"))] +impl convert::From<()> for Reject { + #[inline(always)] + fn from(_: ()) -> Self { + coerce_hacspec_to_rust_reject(reject_impl_convert_from_unit()) + } +} + +#[cfg(not(feature = "hacspec"))] +impl convert::From for Reject { + #[inline(always)] + fn from(_: ParseError) -> Self { + coerce_hacspec_to_rust_reject(reject_impl_convert_from_parse_error()) + } +} +#+end_src +We define a log error type and function converting from it to the reject type +#+begin_src rust +// #[ensures(!(result == 0i32))] // != +pub fn reject_impl_from_log_error(le: LogError) -> RejectHacspec { + match le { + LogError::Full => -2_147_483_648i32 + 3i32, // i32::MIN + LogError::Malformed => -2_147_483_648i32 + 4i32, // i32::MIN + } +} + +#+end_src +We then implement the traits +#+begin_src rust +#[cfg(not(feature = "hacspec"))] +/// Full is mapped to i32::MIN+3, Malformed is mapped to i32::MIN+4. +impl From for Reject { + #[inline(always)] + fn from(le: LogError) -> Self { + coerce_hacspec_to_rust_reject(reject_impl_from_log_error(le)) + } +} + +#+end_src +We define a type for new contract name errors and conversion from it to reject +#+begin_src rust +#[derive(Clone)] // , Debug, PartialEq, Eq +pub enum NewContractNameError { + NewContractNameErrorMissingInitPrefix, + NewContractNameErrorTooLong, + NewContractNameErrorContainsDot, + NewContractNameErrorInvalidCharacters, +} + +// #[ensures(!(result == 0i32))] // != +pub fn reject_impl_from_new_contract_name_error(nre: NewContractNameError) -> RejectHacspec { + match nre { + NewContractNameError::NewContractNameErrorMissingInitPrefix => -2_147_483_648i32 + 5i32, // i32::MIN + NewContractNameError::NewContractNameErrorTooLong => -2_147_483_648i32 + 6i32, // i32::MIN + NewContractNameError::NewContractNameErrorContainsDot => -2_147_483_648i32 + 9i32, // i32::MIN + NewContractNameError::NewContractNameErrorInvalidCharacters => -2_147_483_648i32 + 10i32, // i32::MIN + } +} + +#+end_src +We then implement the traits +#+begin_src rust +#[cfg(not(feature = "hacspec"))] +/// MissingInitPrefix is mapped to i32::MIN + 5, +/// TooLong to i32::MIN + 6, +/// ContainsDot to i32::MIN + 9, and +/// InvalidCharacters to i32::MIN + 10. +impl From for Reject { + fn from(nre: NewContractNameError) -> Self { + coerce_hacspec_to_rust_reject(reject_impl_from_new_contract_name_error(nre)) + } +} + +#+end_src +We define a type for new receive name errors and conversion from it to reject +#+begin_src rust +#[derive(Clone)] // , Debug, PartialEq, Eq +pub enum NewReceiveNameError { + NewReceiveNameErrorMissingDotSeparator, + NewReceiveNameErrorTooLong, + NewReceiveNameErrorInvalidCharacters, +} + +// #[ensures(!(result == 0i32))] // != +pub fn reject_impl_from_new_receive_name_error(nre: NewReceiveNameError) -> RejectHacspec { + match nre { + NewReceiveNameError::NewReceiveNameErrorMissingDotSeparator => -2_147_483_648i32 + 7i32, // i32::MIN + NewReceiveNameError::NewReceiveNameErrorTooLong => -2_147_483_648i32 + 8i32, // i32::MIN + NewReceiveNameError::NewReceiveNameErrorInvalidCharacters => -2_147_483_648i32 + 11i32, // i32::MIN + } +} + +#+end_src +We then implement the traits +#+begin_src rust + #[cfg(not(feature = "hacspec"))] + /// MissingDotSeparator is mapped to i32::MIN + 7, + /// TooLong to i32::MIN + 8, and + /// InvalidCharacters to i32::MIN + 11. + impl From for Reject { + fn from(nre: NewReceiveNameError) -> Self { + coerce_hacspec_to_rust_reject(reject_impl_from_new_receive_name_error(nre)) + } + } + +#+end_src + +We then implement the traits +#+begin_src rust +// #[ensures(!(result == 0i32))] // != +pub fn reject_impl_from_not_payable_error() -> RejectHacspec { + -2_147_483_648i32 + 12i32 // i32::MIN +} +#+end_src + +#+begin_src rust +#[cfg(not(feature = "hacspec"))] +/// The error code is i32::MIN + 12 +impl From for Reject { + #[inline(always)] + fn from(_: NotPayableError) -> Self { + coerce_hacspec_to_rust_reject(reject_impl_from_not_payable_error()) + } +} +#+end_src + +*** Contract state +We define contract state as its inner state namely the current position of the src_rust[:eval never]{u32} type. +#+begin_src rust + pub type ContractStateHacspec = u32; + +#+end_src +**** Contract State -- Seek +#+begin_src rust +#[derive(Copy, Clone)] // , Debug, PartialEq, Eq +pub enum SeekFromHacspec { + /// Sets the offset to the provided number of bytes. + Start(u64), + + /// Sets the offset to the size of this object plus the specified number of + /// bytes. + /// + /// It is possible to seek beyond the end of an object, but it's an error to + /// seek before byte 0. + End(i64), + + /// Sets the offset to the current position plus the specified number of + /// bytes. + /// + /// It is possible to seek beyond the end of an object, but it's an error to + /// seek before byte 0. + Current(i64), +} + +pub type U32Option = Option; +pub type I64Option = Option; + +// #[requires(forall pos === SeekFrom::End(delta) ==> exists current_position.checked_add(delta as u32) == U32Option::Some(b))] +pub fn contract_state_impl_seek(current_position: ContractStateHacspec, end : u32, pos: SeekFromHacspec) -> Result<(ContractStateHacspec, u64), ()> { + match pos { + SeekFromHacspec::Start(offset) => Result::<(ContractStateHacspec, u64), ()>::Ok((offset as u32, offset)), + SeekFromHacspec::End(delta) => { + if delta >= 0_i64 { + match current_position.checked_add(delta as u32) { + U32Option::Some(b) => Result::<(ContractStateHacspec, u64), ()>::Ok((b, b as u64)), + U32Option::None => Result::<(ContractStateHacspec, u64), ()>::Err(()), + } + } else { + match delta.checked_abs() { + I64Option::Some(before) => + { + if (before as u32) <= end { + Result::<(ContractStateHacspec, u64), ()>::Ok(((end - (before as u32)), (end - (before as u32)) as u64)) + } + else { + Result::<(ContractStateHacspec, u64), ()>::Err(()) + } + } + I64Option::None => Result::<(ContractStateHacspec, u64), ()>::Err(()), + } + } + } + SeekFromHacspec::Current(delta) => { + if delta >= 0_i64 { + match current_position.checked_add(delta as u32) { + U32Option::Some(offset) => Result::<(ContractStateHacspec, u64), ()>::Ok((offset, offset as u64)), + U32Option::None => Result::<(ContractStateHacspec, u64), ()>::Err(()), + } + } else { + match delta.checked_abs() { + I64Option::Some(b) => match current_position.checked_sub(b as u32) { + U32Option::Some(offset) => Result::<(ContractStateHacspec, u64), ()>::Ok((offset, offset as u64)), + U32Option::None => Result::<(ContractStateHacspec, u64), ()>::Err(()), + }, + I64Option::None => Result::<(ContractStateHacspec, u64), ()>::Err(()), + } + } + } + } +} +#+end_src +We then implement the traits +#+begin_src rust +#[cfg(not(feature = "hacspec"))] +pub fn coerce_rust_to_hacspec_contract_state( + rust_contract_state: &mut ContractState, +) -> ContractStateHacspec { + rust_contract_state.current_position.clone() +} + +#[cfg(not(feature = "hacspec"))] +pub fn coerce_hacspec_to_rust_contract_state( + rust_contract_state: &mut ContractState, + hacspec_contract_state: ContractStateHacspec, +) { + rust_contract_state.current_position = hacspec_contract_state; +} + +#[cfg(not(feature = "hacspec"))] +pub fn coerce_hacspec_to_rust_seek_result( + rust_contract_state: &mut ContractState, + hacspec_seek_result: Result<(ContractStateHacspec, u64), ()>, +) -> Result { + let (hacspec_result, rust_result) = hacspec_seek_result?; + coerce_hacspec_to_rust_contract_state(rust_contract_state, hacspec_result); + Ok(rust_result) +} + +#[cfg(not(feature = "hacspec"))] +pub fn coerce_rust_to_hacspec_seek_from(rust_seek_from: SeekFrom) -> SeekFromHacspec { + match rust_seek_from { + SeekFrom::Start(v) => SeekFromHacspec::Start(v), + SeekFrom::End(v) => SeekFromHacspec::End(v), + SeekFrom::Current(v) => SeekFromHacspec::Current(v), + } +} + +#[cfg(not(feature = "hacspec"))] +/// # Contract state trait implementations. +impl Seek for ContractState { + type Err = (); + + fn seek(&mut self, pos: SeekFrom) -> Result { + let contract_state = coerce_rust_to_hacspec_contract_state(self); + coerce_hacspec_to_rust_seek_result( + self, + contract_state_impl_seek( + contract_state, + self.size(), + coerce_rust_to_hacspec_seek_from(pos), + ), + ) + } +} +#+end_src +**** Contract State -- Read +#+begin_src rust +pub fn contract_state_impl_read_read( + current_position: ContractStateHacspec, + buf : PublicByteSeq, +) -> (ContractStateHacspec, usize) { + let (_buf, num_read) = load_state_hacspec(buf, current_position); + (current_position + num_read, num_read as usize) +} + +/// Read a u32 in little-endian format. This is optimized to not +/// initialize a dummy value before calling an external function. +pub fn contract_state_impl_read_read_u64( + current_position: ContractStateHacspec, +) -> (ContractStateHacspec, Result) { + // let mut bytes: MaybeUninit<[u8; 8]> = MaybeUninit::uninit(); + let buf = PublicByteSeq::new(8); + let (buf, num_read) = load_state_hacspec(buf, current_position); + (current_position + num_read, + if num_read == 8u32 { + Result::::Ok(u64_from_le_bytes(u64Word::from_seq(&buf))) + } else { + Result::::Err(()) + }) // num_read as u64 +} + +/// Read a u32 in little-endian format. This is optimized to not +/// initialize a dummy value before calling an external function. +pub fn contract_state_impl_read_read_u32( + current_position: ContractStateHacspec, +) -> (ContractStateHacspec, Result) { + // let mut bytes: MaybeUninit<[u8; 4]> = MaybeUninit::uninit(); + let buf = PublicByteSeq::new(4); + let (buf, num_read) = load_state_hacspec(buf, current_position); + (current_position + num_read, + if num_read == 4u32 { + Result::::Ok(u32_from_le_bytes(u32Word::from_seq(&buf))) + } else { + Result::::Err(()) + }) // num_read as u64 +} + +/// Read a u8 in little-endian format. This is optimized to not +/// initialize a dummy value before calling an external function. +pub fn contract_state_impl_read_read_u8( + current_position: ContractStateHacspec, +) -> (ContractStateHacspec, Result) { + let buf = PublicByteSeq::new(1); + let (buf, num_read) = load_state_hacspec(buf, current_position); + (current_position + num_read, + if num_read == 1u32 { + Result::::Ok(buf[0]) + } else { + Result::::Err(()) + }) // num_read as u64 +} + +#+end_src +We then implement the traits +#+begin_src rust +#[cfg(not(feature = "hacspec"))] +impl Read for ContractState { + fn read(&mut self, buf: &mut [u8]) -> ParseResult { + let (cs, nr) = contract_state_impl_read_read( + coerce_rust_to_hacspec_contract_state(self), + coerce_rust_to_hacspec_public_byte_seq(buf), + ); + coerce_hacspec_to_rust_contract_state(self, cs); + Ok(nr) + } + + // TODO: !! Probably incorrect !! + /// Read a `u32` in little-endian format. This is optimized to not + /// initialize a dummy value before calling an external function. + fn read_u64(&mut self) -> ParseResult { + let (cs, nr) = + contract_state_impl_read_read_u64(coerce_rust_to_hacspec_contract_state(self)); + coerce_hacspec_to_rust_contract_state(self, cs); + match nr { + Result::::Ok(a) => ParseResult::::Ok(a), + Result::::Err(_) => ParseResult::::Err(ParseError::default()), + } + } + + /// Read a `u32` in little-endian format. This is optimized to not + /// initialize a dummy value before calling an external function. + fn read_u32(&mut self) -> ParseResult { + let (cs, nr) = + contract_state_impl_read_read_u32(coerce_rust_to_hacspec_contract_state(self)); + coerce_hacspec_to_rust_contract_state(self, cs); + match nr { + Result::::Ok(a) => ParseResult::::Ok(a), + Result::::Err(_) => ParseResult::::Err(ParseError::default()), + } + } + + /// Read a `u8` in little-endian format. This is optimized to not + /// initialize a dummy value before calling an external function. + fn read_u8(&mut self) -> ParseResult { + let (cs, nr) = + contract_state_impl_read_read_u8(coerce_rust_to_hacspec_contract_state(self)); + coerce_hacspec_to_rust_contract_state(self, cs); + match nr { + Result::::Ok(a) => ParseResult::::Ok(a), + Result::::Err(_) => ParseResult::::Err(ParseError::default()), + } + } +} +#+end_src + +**** Contract State -- Write +#+begin_src rust +pub fn contract_state_impl_write( + current_position: ContractStateHacspec, + buf: PublicByteSeq, +) -> Result<(ContractStateHacspec, usize), ()> { + if current_position.checked_add(buf.len() as u32).is_none() { + Result::<(ContractStateHacspec, usize), ()>::Err(())?; + } + let (_buf, num_bytes) = write_state_hacspec(buf, current_position); + Result::<(ContractStateHacspec, usize), ()>::Ok(( + current_position + num_bytes, + num_bytes as usize, + )) +} + +#+end_src +We then implement the traits +#+begin_src rust +#[cfg(not(feature = "hacspec"))] +impl Write for ContractState { + type Err = (); + + fn write(&mut self, buf: &[u8]) -> Result { + let (cs, nr) = contract_state_impl_write( + coerce_rust_to_hacspec_contract_state(self), + coerce_rust_to_hacspec_public_byte_seq(buf), + )?; + coerce_hacspec_to_rust_contract_state(self, cs); + Ok(nr) + } +} +#+end_src + +**** Contract State -- Misc. + +#+begin_src rust +pub fn has_contract_state_impl_for_contract_state_open() -> ContractStateHacspec { + 0_u32 +} + +pub fn has_contract_state_impl_for_contract_state_reserve( + len: u32, +) -> bool { + let cur_size = state_size_hacspec(); + if cur_size < len { + resize_state_hacspec(len) == 1_u32 + } else { + true + } +} + +pub fn has_contract_state_impl_for_contract_state_truncate( + current_position : ContractStateHacspec, + cur_size: u32, + new_size: u32, +) -> ContractStateHacspec { + if cur_size > new_size { + resize_state_hacspec(new_size); + } + if new_size < current_position { + new_size + } + else { + current_position + } +} +#+end_src +We then implement the traits +#+begin_src rust +#[cfg(not(feature = "hacspec"))] +impl HasContractState<()> for ContractState { + type ContractStateData = (); + + #[inline(always)] + fn open(_: Self::ContractStateData) -> Self { + ContractState { + current_position: has_contract_state_impl_for_contract_state_open(), + } + } + + fn reserve(&mut self, len: u32) -> bool { + has_contract_state_impl_for_contract_state_reserve(len) + } + + #[inline(always)] + fn size(&self) -> u32 { + state_size_hacspec() + } + + fn truncate(&mut self, new_size: u32) { + let current_position = coerce_rust_to_hacspec_contract_state(self); + coerce_hacspec_to_rust_contract_state( + self, + has_contract_state_impl_for_contract_state_truncate( + current_position, + self.size(), + new_size, + ), + ) + } +} + +#+end_src + +*** Parameter +We define parameter +#+begin_src rust + pub type ParameterHacspec = u32; + + pub fn read_impl_for_parameter_read( + current_position: ParameterHacspec, + buf: PublicByteSeq, + ) -> (ParameterHacspec, usize) { + let (_buf, num_read) = get_parameter_section_hacspec(buf, current_position); + (current_position + num_read, num_read as usize) + } + +#+end_src +We then implement the traits +#+begin_src rust +#[cfg(not(feature = "hacspec"))] +pub fn coerce_rust_to_hacspec_parameter( + rust_parameter: &mut concordium_types::Parameter, +) -> ParameterHacspec { + rust_parameter.current_position.clone() +} + +#[cfg(not(feature = "hacspec"))] +pub fn coerce_hacspec_to_rust_parameter( + rust_parameter: &mut concordium_types::Parameter, + hacspec_parameter: ParameterHacspec, +) { + rust_parameter.current_position = hacspec_parameter; +} + + +#[cfg(not(feature = "hacspec"))] +/// # Trait implementations for Parameter +impl Read for concordium_types::Parameter { + fn read(&mut self, buf: &mut [u8]) -> ParseResult { + let (cs, nr) = read_impl_for_parameter_read( + coerce_rust_to_hacspec_parameter(self), + coerce_rust_to_hacspec_public_byte_seq(buf), + ); + coerce_hacspec_to_rust_parameter(self, cs); + Ok(nr) + } +} + +#[cfg(not(feature = "hacspec"))] +impl HasParameter for concordium_types::Parameter { + #[inline(always)] + fn size(&self) -> u32 { + get_parameter_size_hacspec() + } +} +#+end_src +*** ChainMetaExtern +We define and implement traits for ~ChainMetaExtern~. +#+begin_src rust + #[cfg(not(feature = "hacspec"))] + /// # Trait implementations for the chain metadata. + impl HasChainMetadata for ChainMetaExtern { + #[inline(always)] + fn slot_time(&self) -> SlotTime { + Timestamp::from_timestamp_millis(get_slot_time_hacspec() ) + } + } +#+end_src + +*** AttributesCursor +#+begin_src rust + // pub struct AttributeTag(pub u8); + pub type AttributesCursorHacspec = (u32, u16); + + // pub fn has_policy_impl_for_policy_attributes_cursor_next_test( + // policy_attribute_items: AttributesCursorHacspec, + // ) -> bool { + // let (_, remaining_items) = policy_attribute_items; + // remaining_items == 0_u16 + // } + + // pub fn has_policy_impl_for_policy_attributes_cursor_next_tag_invalid( + // policy_attribute_items: AttributesCursorHacspec, + // tag_value_len_1: u8, + // num_read: u32, + // ) -> (AttributesCursorHacspec, bool) { + // let (current_position, remaining_items) = policy_attribute_items; + // let policy_attribute_items = (current_position + num_read, remaining_items); + // (policy_attribute_items, tag_value_len_1 > 31_u8) + // } + + pub fn has_policy_impl_for_policy_attributes_cursor_next_item( + policy_attribute_items: AttributesCursorHacspec, + buf: PublicByteSeq, + ) -> Option<(AttributesCursorHacspec, (u8, u8))> { + + let (mut current_position, mut remaining_items) = policy_attribute_items; + + if remaining_items == 0u16 { + Option::<(AttributesCursorHacspec, (u8, u8))>::None?; + } + + let (tag_value_len, num_read) = get_policy_section_hacspec(PublicByteSeq::new(2), current_position); + current_position = current_position + num_read; + + if tag_value_len[1] > 31u8 { + // Should not happen because all attributes fit into 31 bytes. + Option::<(AttributesCursorHacspec, (u8, u8))>::None?; + } + + let (_buf, num_read) = get_policy_section_hacspec(buf, current_position); + current_position = current_position + num_read; + remaining_items = remaining_items - 1u16; + Option::<(AttributesCursorHacspec, (u8, u8))>::Some(((current_position, remaining_items), (tag_value_len[0], tag_value_len[1]))) + } + +#+end_src +We then define traits +#+begin_src rust +#[cfg(not(feature = "hacspec"))] +pub fn coerce_rust_to_hacspec_attributes_cursor( + rust_attributes_cursor: &mut AttributesCursor, +) -> AttributesCursorHacspec { + ( + rust_attributes_cursor.current_position.clone(), + rust_attributes_cursor.remaining_items.clone(), + ) +} + +#[cfg(not(feature = "hacspec"))] +pub fn coerce_hacspec_to_rust_attributes_cursor( + rust_attributes_cursor: &mut AttributesCursor, + hacspec_attributes_cursor: AttributesCursorHacspec, +) { + let (current_position, remaining_items) = hacspec_attributes_cursor; + rust_attributes_cursor.current_position = current_position; + rust_attributes_cursor.remaining_items = remaining_items; +} + +// TODO: Creusot issues? +#[cfg(not(feature = "hacspec"))] +impl HasPolicy for Policy { + fn identity_provider(&self) -> IdentityProvider { + self.identity_provider + } + + fn created_at(&self) -> Timestamp { + self.created_at + } + + fn valid_to(&self) -> Timestamp { + self.valid_to + } + + fn next_item(&mut self, buf: &mut [u8; 31]) -> Option<(AttributeTag, u8)> { + let (ac, (at, v)) = has_policy_impl_for_policy_attributes_cursor_next_item( + coerce_rust_to_hacspec_attributes_cursor(&mut self.items), + coerce_rust_to_hacspec_public_byte_seq(&mut buf[..]), + )?; + coerce_hacspec_to_rust_attributes_cursor(&mut self.items, ac); + Some((AttributeTag(at), v)) + } +} +#+end_src + +*** Policy iterator +#+begin_src rust +#[cfg(not(feature = "hacspec"))] +/// An iterator over policies using host functions to supply the data. +/// The main interface to using this type is via the methods of the [Iterator](https://doc.rust-lang.org/std/iter/trait.Iterator.html) +/// and [ExactSizeIterator](https://doc.rust-lang.org/std/iter/trait.ExactSizeIterator.html) traits. +pub struct PoliciesIterator { + /// Position in the policies binary serialization. + pos: u32, + /// Number of remaining items in the stream. + remaining_items: u16, +} + +pub type PoliciesIteratorHacspec = (u32, u16); + +// TODO: use PolicyAttributesCursorHacspec for implementation above instead of just AttributesCursorHacspec +pub type PolicyAttributesCursorHacspec = (u32, u64, u64, AttributesCursorHacspec); // IdentityProvider, Timestamp, Timestamp, AttributesCursor + +// TODO: Fix creusot issues? +fn iterator_impl_for_policies_iterator_next( + policies_iterator: PoliciesIteratorHacspec, +) -> Option<(PoliciesIteratorHacspec, PolicyAttributesCursorHacspec)> { + let (mut pos, remaining_items) = policies_iterator; + if remaining_items == 0u16 { + Option::<(PoliciesIteratorHacspec, PolicyAttributesCursorHacspec)>::None?; + } + + // 2 for total size of this section, 4 for identity_provider, + // 8 bytes for created_at, 8 for valid_to, and 2 for + // the length + let (buf, _) = get_policy_section_hacspec(PublicByteSeq::new(2 + 4 + 8 + 8 + 2), pos); + let skip_part: PublicByteSeq = buf.slice_range(0..2); + let ip_part: PublicByteSeq = buf.slice_range(2..2 + 4); + let created_at_part: PublicByteSeq = buf.slice_range(2 + 4..2 + 4 + 8); + let valid_to_part: PublicByteSeq = buf.slice_range(2 + 4 + 8..2 + 4 + 8 + 8); + let len_part: PublicByteSeq = buf.slice_range(2 + 4 + 8 + 8..2 + 4 + 8 + 8 + 2); + let identity_provider = u32_from_le_bytes(u32Word::from_seq(&ip_part)); // IdentityProvider = u32 // UnsignedPublicInteger + let created_at = u64_from_le_bytes(u64Word::from_seq(&created_at_part)); // Timestamp = Timestamp::from_timestamp_millis(u64) + let valid_to = u64_from_le_bytes(u64Word::from_seq(&valid_to_part)); // Timestamp = u64) + let mut remaining_items = u16_from_le_bytes(u16Word::from_seq(&len_part)); + let attributes_start = pos + 2u32 + 4u32 + 8u32 + 8u32 + 2u32; + pos = pos + (u16_from_le_bytes(u16Word::from_seq(&skip_part)) as u32) + 2u32; + remaining_items = remaining_items - 1u16; + Option::<(PoliciesIteratorHacspec, PolicyAttributesCursorHacspec)>::Some(( + (pos, remaining_items), + ( + identity_provider, + created_at, + valid_to, + (attributes_start, remaining_items), + ), + )) +} + +// TODO: Fix creusot issues? +#[cfg(not(feature = "hacspec"))] +impl Iterator for PoliciesIterator { + type Item = Policy; + + fn next(&mut self) -> Option { + let ((pos, remaining_items), (identity_provider, created_at, valid_to, (cp, ri))) = + iterator_impl_for_policies_iterator_next((self.pos, self.remaining_items))?; + + // TODO: make into coerce function + self.pos = pos; + self.remaining_items = remaining_items; + + Some(Policy { + identity_provider, + created_at: Timestamp::from_timestamp_millis(created_at), + valid_to: Timestamp::from_timestamp_millis(valid_to), + items: AttributesCursor { + current_position: cp, + remaining_items: ri, + }, + }) + } + + fn size_hint(&self) -> (usize, Option) { + let rem = self.remaining_items as usize; + (rem, Some(rem)) + } +} + +#[cfg(not(feature = "hacspec"))] +impl ExactSizeIterator for PoliciesIterator { + #[inline(always)] + fn len(&self) -> usize { + self.remaining_items.into() // as usize + } +} +#+end_src + +*** External context +#+begin_src rust + +#[cfg(not(feature = "hacspec"))] +impl HasCommonData for ExternContext { + type MetadataType = ChainMetaExtern; + type ParamType = concordium_types::Parameter; + type PolicyIteratorType = PoliciesIterator; + type PolicyType = Policy; + + // TODO: fix creusot issue + #[inline(always)] + fn metadata(&self) -> &Self::MetadataType { + &ChainMetaExtern {} + } + + fn policies(&self) -> PoliciesIterator { + let (buf, _) = get_policy_section_hacspec(PublicByteSeq::new(2), 0); + PoliciesIterator { + pos: 2, // 2 because we already read 2 bytes. + remaining_items: u16_from_le_bytes(u16Word::from_seq(&buf)), + } + } + + #[inline(always)] + fn parameter_cursor(&self) -> Self::ParamType { + concordium_types::Parameter { + current_position: 0, + } + } +} + +#[cfg(not(feature = "hacspec"))] +/// # Trait implementations for the init context +impl HasInitContext for ExternContext { + type InitData = (); + + /// Create a new init context by using an external call. + fn open(_: Self::InitData) -> Self { + ExternContext::default() + } + + #[inline(always)] + fn init_origin(&self) -> AccountAddress { + let mut address : [u8; ACCOUNT_ADDRESS_SIZE] = Default::default(); + let temp = coerce_hacspec_to_rust_public_byte_seq(get_init_origin_hacspec( + PublicByteSeq::new(ACCOUNT_ADDRESS_SIZE), + )); + address.clone_from_slice(temp.as_slice()); + AccountAddress(address) + } +} + +#[cfg(not(feature = "hacspec"))] +/// # Trait implementations for the receive context +impl HasReceiveContext for ExternContext { + type ReceiveData = (); + + /// Create a new receive context + fn open(_: Self::ReceiveData) -> Self { + ExternContext::default() + } + + // TODO: Make usable by creusot + #[inline(always)] + fn invoker(&self) -> AccountAddress { + let mut address: [u8; ACCOUNT_ADDRESS_SIZE] = Default::default(); + address.clone_from_slice( + &mut coerce_hacspec_to_rust_public_byte_seq(get_receive_invoker_hacspec( + PublicByteSeq::new(ACCOUNT_ADDRESS_SIZE), + ))[..], + ); + AccountAddress(address) + } + + // TODO: Make usable by creusot + #[inline(always)] + fn self_address(&self) -> ContractAddress { + let mut address: [u8; ACCOUNT_ADDRESS_SIZE] = Default::default(); + address.clone_from_slice( + &mut coerce_hacspec_to_rust_public_byte_seq(get_receive_self_address_hacspec( + PublicByteSeq::new(ACCOUNT_ADDRESS_SIZE), + ))[..], + ); + match concordium_contracts_common::from_bytes(&address) { + Ok(v) => v, + Err(_) => trap(), + } + } + + #[inline(always)] + fn self_balance(&self) -> Amount { + Amount::from_micro_ccd(get_receive_self_balance_hacspec()) + } + + // TODO: Make usable by creusot + // TODO: Remove/replace unsafe code ! + #[inline(always)] + fn sender(&self) -> Address { + let ptr : *mut u8 = (&mut coerce_hacspec_to_rust_public_byte_seq(get_receive_sender_hacspec( + PublicByteSeq::new(ACCOUNT_ADDRESS_SIZE), + ))[..]).as_mut_ptr(); + let tag = unsafe { *ptr }; + match tag { + 0u8 => { + match concordium_contracts_common::from_bytes(unsafe { core::slice::from_raw_parts( + ptr.add(1), + ACCOUNT_ADDRESS_SIZE, + )} ) { + Ok(v) => Address::Account(v), + Err(_) => trap(), + } + } + 1u8 => match concordium_contracts_common::from_bytes(unsafe { core::slice::from_raw_parts(ptr.add(1), 16) }) { + Ok(v) => Address::Contract(v), + Err(_) => trap(), + }, + _ => trap(), // unreachable!("Host violated precondition."), + } + } + + // TODO: Make usable by creusot + #[inline(always)] + fn owner(&self) -> AccountAddress { + let mut address: [u8; ACCOUNT_ADDRESS_SIZE] = Default::default(); + address.clone_from_slice( + &mut coerce_hacspec_to_rust_public_byte_seq(get_receive_self_address_hacspec( + PublicByteSeq::new(ACCOUNT_ADDRESS_SIZE), + ))[..], + ); + AccountAddress(address) + } +} +#+end_src + +*** Logger +#+begin_src rust + #[cfg(not(feature = "hacspec"))] + /// #Implementations of the logger. + impl HasLogger for Logger { + #[inline(always)] + fn init() -> Self { + Self { _private: () } + } + + fn log_raw(&mut self, event: &[u8]) -> Result<(), LogError> { + let (_, res) = log_event_hacspec(coerce_rust_to_hacspec_public_byte_seq(event)); + match res { + 1 => Ok(()), + 0 => Err(LogError::Full), + _ => Err(LogError::Malformed), + } + } + } +#+end_src +*** Action +#+begin_src rust :eval never +// #[cfg(feature = "hacspec")] +array!(UserAddress, 32, u8); + +#[cfg(not(feature = "hacspec"))] +pub fn coerce_hacspec_to_rust_account_address(ua: UserAddress) -> AccountAddress { + AccountAddress([ + ua[0], ua[1], ua[2], ua[3], ua[4], ua[5], ua[6], ua[7], ua[8], ua[9], ua[10], ua[11], + ua[12], ua[13], ua[14], ua[15], ua[16], ua[17], ua[18], ua[19], ua[20], ua[21], ua[22], + ua[23], ua[24], ua[25], ua[26], ua[27], ua[28], ua[29], ua[30], ua[31], + ]) +} + +#[cfg(not(feature = "hacspec"))] +pub fn coerce_rust_to_hacspec_account_address(aa: &AccountAddress) -> UserAddress { + UserAddress::from_native_slice(&aa.0) +} + +#+end_src + +#+begin_src rust + +// #[cfg(feature = "hacspec")] +// #[cfg_attr(feature = "use_attributes", in_hacspec(Action))] +pub enum HasAction { + Accept(), + SimpleTransfer(UserAddress, u64), + // TODO: add send_raw + SendRaw( + UserAddress, + String, // TODO: Should be ReceiveName => string + u64, + PublicByteSeq, + ), + // AND_THEN(HasAction, HasAction), + // OR_ELSE(HasAction, HasAction) +} +#[cfg(feature = "hacspec")] +pub type ListAction = Seq; + +// #[cfg(feature = "hacspec")] +pub fn accept_action() -> HasAction { + HasAction::Accept() +} + +// pub type ContextState = (Context, ()); + +// #[cfg(feature = "hacspec")] +// #[init(contract = "auction")] +// pub fn auction_init(ctx : Context) -> ContextState { +// // Always succeeds +// (ctx, ()) +// } + +// pub fn auction_init2(ctx : Context) -> ContextState { +// // Always succeeds +// (ctx, ()) +// } + +// Owner, Sender, Balance, Data / time +pub struct Context(pub UserAddress, pub UserAddress, pub u64, pub u64); + +#[cfg(not(feature = "hacspec"))] +pub fn coerce_rust_to_hacspec_context(ctx: &impl HasReceiveContext) -> Context { + Context( + coerce_rust_to_hacspec_account_address(&ctx.owner()), + match ctx.sender() { + Address::Contract(_) => panic!(), + Address::Account(account_address) => coerce_rust_to_hacspec_account_address(&account_address), + }, + ctx.self_balance().micro_ccd, + ctx.metadata().slot_time().timestamp_millis(), + ) +} + +#[cfg(not(feature = "hacspec"))] +/// #Implementation of actions. +/// These actions are implemented by direct calls to host functions. +impl HasActions for Action { + #[inline(always)] + fn accept() -> Self { + Action { + _private: accept_hacspec(), + } + } + + #[inline(always)] + fn simple_transfer(acc: &AccountAddress, amount: Amount) -> Self { + let res = simple_transfer_hacspec(coerce_rust_to_hacspec_public_byte_seq(&acc.0), amount.micro_ccd); + Action { _private: res } + } + + #[inline(always)] + fn send_raw( + ca: &ContractAddress, + receive_name: ReceiveName, + amount: Amount, + parameter: &[u8], + ) -> Self { + let receive_bytes = receive_name.get_chain_name().as_bytes(); + let res = + send_hacspec( + ca.index, + ca.subindex, + coerce_rust_to_hacspec_public_byte_seq(&receive_bytes), + amount.micro_ccd, + coerce_rust_to_hacspec_public_byte_seq(¶meter), + ); + Action { _private: res } + } + + #[inline(always)] + fn and_then(self, then: Self) -> Self { + let res = combine_and_hacspec(self._private, then._private); + Action { _private: res } + } + + #[inline(always)] + fn or_else(self, el: Self) -> Self { + let res = combine_or_hacspec(self._private, el._private); + Action { _private: res } + } +} +#+end_src + +*** Used as is +# TODO: Get functionlity of everything into hacspec +#+begin_src rust +// TODO: Define functionality in hacspec instead! +#[cfg(not(feature = "hacspec"))] +/// Allocates a Vec of bytes prepended with its length as a `u32` into memory, +/// and prevents them from being dropped. Returns the pointer. +/// Used to pass bytes from a Wasm module to its host. +#[doc(hidden)] +pub fn put_in_memory(input: &[u8]) -> *mut u8 { + let bytes_length = input.len() as u32; + let mut bytes = concordium_contracts_common::to_bytes(&bytes_length); + bytes.extend_from_slice(input); + let ptr = bytes.as_mut_ptr(); + #[cfg(feature = "std")] + ::std::mem::forget(bytes); + #[cfg(not(feature = "std"))] + core::mem::forget(bytes); + ptr +} + +#+end_src + +# TODO: Get functionlity of everything into hacspec +#+begin_src rust +// #[cfg(feature = "hacspec")] +/// Wrapper for +/// [HasActions::send_raw](../trait.HasActions.html#tymethod.send_raw), which +/// automatically serializes the parameter. Note that if the parameter is +/// already a byte array or convertible to a byte array without allocations it +/// is preferrable to use [send_raw](../trait.HasActions.html#tymethod.send_raw). +/// It is more efficient and avoids memory allocations. +pub fn send_wrap_hacspec( + ca_index: u64, + ca_subindex: u64, + receive_name_bytes: PublicByteSeq, + amount: u64, + param_bytes: PublicByteSeq, +) -> u32 { + send_hacspec( + ca_index, + ca_subindex, + receive_name_bytes, + amount, + param_bytes, + ) +} + + +// TODO: Get functionlity of everything into hacspec +#[allow(dead_code)] +#[cfg(not(feature = "hacspec"))] +/// Wrapper for +/// [HasActions::send_raw](../trait.HasActions.html#tymethod.send_raw), which +/// automatically serializes the parameter. Note that if the parameter is +/// already a byte array or convertible to a byte array without allocations it +/// is preferrable to use [send_raw](../trait.HasActions.html#tymethod.send_raw). +/// It is more efficient and avoids memory allocations. +pub fn send_wrap( + ca: &ContractAddress, + receive_name: ReceiveName, + amount: Amount, + parameter: &P, +) -> A { + let param_bytes = concordium_contracts_common::to_bytes(parameter); + A::send_raw(ca, receive_name, amount, ¶m_bytes) +} +#+end_src + +*** Remaining todo +:PROPERTIES: +:header-args: rust :tangle no :eval never +:END: + + +#+begin_src rust +#[cfg(not(feature = "hacspec"))] +impl UnwrapAbort for Result { + type Unwrap = A; + + #[inline] + fn unwrap_abort(self) -> Self::Unwrap { + match self { + Ok(x) => x, + Err(_) => trap(), + } + } +} + +#+end_src + +#+begin_src rust +// TODO: +// #[cfg(not(feature = "hacspec"))] +// #[cfg(not(feature = "std"))] +// use crate::concordium_contracts_common::fmt; // core::fmt; + +#[cfg(not(feature = "hacspec"))] +#[cfg(feature = "std")] +use std::fmt; + +#[cfg(not(feature = "hacspec"))] +#[cfg(feature = "std")] +impl ExpectReport for Result { + type Unwrap = A; + + fn expect_report(self, msg: &str) -> Self::Unwrap { + match self { + Ok(x) => x, + Err(e) => fail!("{}: {:?}", msg, e), + } + } +} + +#+end_src + +#+begin_src rust +// TODO: +#[cfg(not(feature = "hacspec"))] +#[cfg(feature = "std")] +impl ExpectErrReport for Result { + type Unwrap = E; + + fn expect_err_report(self, msg: &str) -> Self::Unwrap { + match self { + Ok(a) => fail!("{}: {:?}", msg, a), + Err(e) => e, + } + } +} + +#+end_src + +#+begin_src rust + #[cfg(not(feature = "hacspec"))] + impl UnwrapAbort for Option { + type Unwrap = A; + + #[inline(always)] + fn unwrap_abort(self) -> Self::Unwrap { + self.unwrap_or_else(|| trap()) + } + } + +#+end_src + +#+begin_src rust + // TODO: + #[cfg(not(feature = "hacspec"))] + impl ExpectReport for Option { + type Unwrap = A; + + fn expect_report(self, msg: &str) -> Self::Unwrap { + match self { + Some(v) => v, + None => fail!("{}", msg), + } + } + } + +#+end_src + +#+begin_src rust +// TODO: +#[cfg(not(feature = "hacspec"))] +#[cfg(feature = "std")] +impl ExpectNoneReport for Option { + fn expect_none_report(self, msg: &str) { + if let Some(x) = self { + fail!("{}: {:?}", msg, x) + } + } +} + +#+end_src + +#+begin_src rust +// TODO: Remove / is not in concordium-std?? +#[cfg(not(feature = "hacspec"))] +/// Write a [BTreeSet](https://doc.rust-lang.org/std/collections/struct.BTreeSet.html) as an ascending list of keys, without the length information. +pub fn serial_set_no_length( + map: &BTreeSet, + out: &mut W, +) -> Result<(), W::Err> { + for k in map.iter() { + k.serial(out)?; + } + Ok(()) +} + +#[cfg(not(feature = "hacspec"))] +impl SerialCtx for BTreeSet { + fn serial_ctx( + &self, + size_len: concordium_contracts_common::schema::SizeLength, + out: &mut W, + ) -> Result<(), W::Err> { + concordium_contracts_common::schema::serial_length(self.len(), size_len, out)?; + // concordium_std:: + serial_set_no_length(self, out) + } +} + +#+end_src + +#+begin_src rust +// TODO: Remove / is not in concordium-std?? +#[cfg(not(feature = "hacspec"))] +/// Read a [BTreeSet](https://doc.rust-lang.org/std/collections/struct.BTreeSet.html) as a list of keys, given some length. +/// NB: This ensures there are no duplicates, hence the specialized type. +/// Moreover this will only succeed if keys are listed in order. +pub fn deserial_set_no_length( + source: &mut R, + len: usize, +) -> ParseResult> { + let mut out = BTreeSet::new(); + let mut prev = None; + for _ in 0..len { + let key = source.get()?; + let next = Some(key); + if next <= prev { + return Err(ParseError::default()); + } + out.insert(key); + prev = next; + } + Ok(out) +} + +// TODO: Remove / is not in concordium-std?? +#[cfg(not(feature = "hacspec"))] +/// Read a [BTreeSet](https://doc.rust-lang.org/std/collections/struct.BTreeSet.html) as an list of key-value pairs given some length. +/// Slightly faster version of `deserial_set_no_length` as it is skipping the +/// order checking. The only check that is made to the set is that there are no +/// duplicates. +pub fn deserial_set_no_length_no_order_check( + source: &mut R, + len: usize, +) -> ParseResult> { + let mut out = BTreeSet::new(); + for _ in 0..len { + let key = source.get()?; + if !out.insert(key) { + return Err(ParseError::default()); + } + } + Ok(out) +} + +#[cfg(not(feature = "hacspec"))] +impl DeserialCtx for BTreeSet { + fn deserial_ctx( + size_len: concordium_contracts_common::schema::SizeLength, + ensure_ordered: bool, + source: &mut R, + ) -> ParseResult { + let len = concordium_contracts_common::schema::deserial_length(source, size_len)?; + if ensure_ordered { + // concordium_std:: + deserial_set_no_length(source, len) + } else { + // concordium_std:: + deserial_set_no_length_no_order_check(source, len) + } + } +} +#+end_src + +#+begin_src rust +// TODO: Remove / is not in concordium-std?? +#[cfg(not(feature = "hacspec"))] +/// Write a Map as a list of key-value pairs ordered by the key, without the +/// length information. +pub fn serial_map_no_length( + map: &BTreeMap, + out: &mut W, +) -> Result<(), W::Err> { + for (k, v) in map.iter() { + k.serial(out)?; + v.serial(out)?; + } + Ok(()) +} + +#[cfg(not(feature = "hacspec"))] +impl SerialCtx for BTreeMap { + fn serial_ctx( + &self, + size_len: concordium_contracts_common::schema::SizeLength, + out: &mut W, + ) -> Result<(), W::Err> { + concordium_contracts_common::schema::serial_length(self.len(), size_len, out)?; + // concordium_std:: + serial_map_no_length(self, out) + } +} + +#+end_src + +#+begin_src rust +// TODO: Remove / is not in concordium-std?? +#[cfg(not(feature = "hacspec"))] +/// Read a [BTreeMap](https://doc.rust-lang.org/std/collections/struct.BTreeMap.html) as a list of key-value pairs given some length. +/// NB: This ensures there are no duplicates, hence the specialized type. +/// Moreover this will only succeed if keys are listed in order. +pub fn deserial_map_no_length( + source: &mut R, + len: usize, +) -> ParseResult> { + let mut out = BTreeMap::new(); + let mut x = None; + for _ in 0..len { + let k = source.get()?; + let v = source.get()?; + match x { + None => { + out.insert(k, v); + } + Some(kk) => { + if k > kk { + out.insert(k, v); + } else { + return Err(ParseError::default()); + } + } + } + x = Some(k); + } + Ok(out) +} + +// TODO: Remove / is not in concordium-std?? +#[cfg(not(feature = "hacspec"))] +/// Read a [BTreeMap](https://doc.rust-lang.org/std/collections/struct.BTreeMap.html) as a list of key-value pairs given some length. +/// Slightly faster version of `deserial_map_no_length` as it is skipping the +/// order checking +pub fn deserial_map_no_length_no_order_check( + source: &mut R, + len: usize, +) -> ParseResult> { + let mut out = BTreeMap::new(); + for _ in 0..len { + let k = source.get()?; + let v = source.get()?; + if out.insert(k, v).is_some() { + return Err(ParseError::default()); + } + } + Ok(out) +} + +#[cfg(not(feature = "hacspec"))] +impl DeserialCtx for BTreeMap { + fn deserial_ctx( + size_len: concordium_contracts_common::schema::SizeLength, + ensure_ordered: bool, + source: &mut R, + ) -> ParseResult { + let len = concordium_contracts_common::schema::deserial_length(source, size_len)?; + if ensure_ordered { + // concordium_std:: + deserial_map_no_length(source, len) + } else { + // concordium_std:: + deserial_map_no_length_no_order_check(source, len) + } + } +} + +#+end_src + +#+begin_src rust +// TODO: Remove / is not in concordium-std?? +#[cfg(not(feature = "hacspec"))] +/// Write a [HashSet](https://doc.rust-lang.org/std/collections/struct.HashSet.html) as a list of keys in no particular order, without the length information. +pub fn serial_hashset_no_length( + map: &HashSet, + out: &mut W, +) -> Result<(), W::Err> { + for k in map.iter() { + k.serial(out)?; + } + Ok(()) +} + +#[cfg(not(feature = "hacspec"))] +/// Serialization for HashSet given a size_len. +/// Values are not serialized in any particular order. +impl SerialCtx for HashSet { + fn serial_ctx( + &self, + size_len: concordium_contracts_common::schema::SizeLength, + out: &mut W, + ) -> Result<(), W::Err> { + concordium_contracts_common::schema::serial_length(self.len(), size_len, out)?; + // concordium_std:: + serial_hashset_no_length(self, out) + } +} + +#+end_src + +#+begin_src rust +// TODO: Remove / is not in concordium-std?? +#[cfg(not(feature = "hacspec"))] +/// Read a [HashSet](https://doc.rust-lang.org/std/collections/struct.HashSet.html) as a list of keys, given some length. +/// NB: This ensures there are no duplicates. +pub fn deserial_hashset_no_length( + source: &mut R, + len: usize, +) -> ParseResult> { + let mut out = HashSet::default(); + for _ in 0..len { + let key = source.get()?; + if !out.insert(key) { + return Err(ParseError::default()); + } + } + Ok(out) +} + +#[cfg(not(feature = "hacspec"))] +/// Deserialization for HashSet given a size_len. +/// Values are not verified to be in any particular order and setting +/// ensure_ordering have no effect. +impl DeserialCtx for HashSet { + fn deserial_ctx( + size_len: concordium_contracts_common::schema::SizeLength, + _ensure_ordered: bool, + source: &mut R, + ) -> ParseResult { + let len = concordium_contracts_common::schema::deserial_length(source, size_len)?; + deserial_hashset_no_length(source, len) + } +} + +#+end_src + +#+begin_src rust +// TODO: Remove / is not in concordium-std?? +#[cfg(not(feature = "hacspec"))] +/// Write a HashMap as a list of key-value pairs in to particular order, without +/// the length information. +pub fn serial_hashmap_no_length( + map: &HashMap, + out: &mut W, +) -> Result<(), W::Err> { + for (k, v) in map.iter() { + k.serial(out)?; + v.serial(out)?; + } + Ok(()) +} + +#[cfg(not(feature = "hacspec"))] +/// Serialization for HashMap given a size_len. +/// Keys are not serialized in any particular order. +impl SerialCtx for HashMap { + fn serial_ctx( + &self, + size_len: concordium_contracts_common::schema::SizeLength, + out: &mut W, + ) -> Result<(), W::Err> { + concordium_contracts_common::schema::serial_length(self.len(), size_len, out)?; + serial_hashmap_no_length(self, out) + } +} + +#+end_src + +#+begin_src rust +// TODO: Remove / is not in concordium-std?? +#[cfg(not(feature = "hacspec"))] +/// Read a [HashMap](https://doc.rust-lang.org/std/collections/struct.HashMap.html) as a list of key-value pairs given some length. +pub fn deserial_hashmap_no_length( + source: &mut R, + len: usize, +) -> ParseResult> { + let mut out = HashMap::default(); + for _ in 0..len { + let k = source.get()?; + let v = source.get()?; + if out.insert(k, v).is_some() { + return Err(ParseError::default()); + } + } + Ok(out) +} + +#[cfg(not(feature = "hacspec"))] +/// Deserialization for HashMap given a size_len. +/// Keys are not verified to be in any particular order and setting +/// ensure_ordering have no effect. +impl DeserialCtx for HashMap { + fn deserial_ctx( + size_len: concordium_contracts_common::schema::SizeLength, + _ensure_ordered: bool, + source: &mut R, + ) -> ParseResult { + let len = concordium_contracts_common::schema::deserial_length(source, size_len)?; + // concordium_std:: + deserial_hashmap_no_length(source, len) + } +} +#+end_src + +#+begin_src rust +// TODO: Remove / is not in concordium-std?? +#[cfg(not(feature = "hacspec"))] +/// Write a slice of elements, without including length information. +/// This is intended to be used either when the length is statically known, +/// or when the length is serialized independently as part of a bigger +/// structure. +pub fn serial_vector_no_length(xs: &[T], out: &mut W) -> Result<(), W::Err> { + for x in xs { + x.serial(out)?; + } + Ok(()) +} + +#[cfg(not(feature = "hacspec"))] +impl SerialCtx for &[T] { + fn serial_ctx( + &self, + size_len: concordium_contracts_common::schema::SizeLength, + out: &mut W, + ) -> Result<(), W::Err> { + concordium_contracts_common::schema::serial_length(self.len(), size_len, out)?; + serial_vector_no_length(self, out) + } +} + +#[cfg(not(feature = "hacspec"))] +impl SerialCtx for Vec { + fn serial_ctx( + &self, + size_len: schema::SizeLength, + out: &mut W, + ) -> Result<(), W::Err> { + self.as_slice().serial_ctx(size_len, out) + } +} + +#+end_src + +#+begin_src rust +// TODO: Remove / is not in concordium-std?? +#[cfg(not(feature = "hacspec"))] +pub(crate) static MAX_PREALLOCATED_CAPACITY: usize = 4096; + +// TODO: Remove / is not in concordium-std?? +#[cfg(not(feature = "hacspec"))] +/// Read a vector given a length. +pub fn deserial_vector_no_length( + reader: &mut R, + len: usize, +) -> ParseResult> { + let mut vec = Vec::with_capacity(core::cmp::min(len, MAX_PREALLOCATED_CAPACITY)); + for _ in 0..len { + vec.push(T::deserial(reader)?); + } + Ok(vec) +} + +#[cfg(not(feature = "hacspec"))] +impl DeserialCtx for Vec { + fn deserial_ctx( + size_len: concordium_contracts_common::schema::SizeLength, + _ensure_ordered: bool, + source: &mut R, + ) -> ParseResult { + let len = concordium_contracts_common::schema::deserial_length(source, size_len)?; + deserial_vector_no_length(source, len) + } +} +#+end_src + +#+begin_src rust +#[cfg(not(feature = "hacspec"))] +impl SerialCtx for &str { + fn serial_ctx( + &self, + size_len: concordium_contracts_common::schema::SizeLength, + out: &mut W, + ) -> Result<(), W::Err> { + concordium_contracts_common::schema::serial_length(self.len(), size_len, out)?; + serial_vector_no_length(&self.as_bytes().to_vec(), out) + } +} +#+end_src + +#+begin_src rust +#[cfg(not(feature = "hacspec"))] +impl SerialCtx for String { + fn serial_ctx( + &self, + size_len: concordium_contracts_common::schema::SizeLength, + out: &mut W, + ) -> Result<(), W::Err> { + self.as_str().serial_ctx(size_len, out) + } +} +#+end_src + +#+begin_src rust +#[cfg(not(feature = "hacspec"))] +impl DeserialCtx for String { + fn deserial_ctx( + size_len: concordium_contracts_common::schema::SizeLength, + _ensure_ordered: bool, + source: &mut R, + ) -> ParseResult { + let len = concordium_contracts_common::schema::deserial_length(source, size_len)?; + let bytes = deserial_vector_no_length(source, len)?; + let res = String::from_utf8(bytes).map_err(|_| ParseError::default())?; + Ok(res) + } +} +#+end_src + +*** Rust Tests +#+begin_src rust + +#+end_src + +** Coq code + +#+begin_src elisp :var SOURCE-CODE-FILE="Concordium_Impls.v" :results output silent :tangle no +(org-babel-detangle SOURCE-CODE-FILE) +#+end_src + +*** concordium_impls - Coq code +:PROPERTIES: +:header-args: coq :tangle Concordium_Impls.v :mkdirp yes :comments link +:header-args: coq :eval never :results output silent +:END: + +#+begin_src coq + +(** This file was automatically generated using Hacspec **) +Require Import Hacspec_Lib MachineIntegers. +From Coq Require Import ZArith. +From Coq Require Import List. +Import ListNotations. +Open Scope Z_scope. +Open Scope bool_scope. +Open Scope hacspec_scope. +#+end_src + +#+begin_src coq +Require Import Hacspec_Lib. +Export Hacspec_Lib. +#+end_src + +#+begin_src coq +Require Import Concordium_Prims. +Export Concordium_Prims. +#+end_src + +#+begin_src coq +Require Import Concordium_Types. +Export Concordium_Types. +#+end_src + +#+begin_src coq +Require Import Concordium_Traits. +Export Concordium_Traits. +#+end_src + +#+begin_src coq +Notation "'reject_hacspec_t'" := (int32) : hacspec_scope. +#+end_src + +#+begin_src coq +Definition reject_impl_deafult : reject_hacspec_t := + min_v. +#+end_src + +#+begin_src coq +Definition new_reject_impl (x_25 : int32): (option int32) := + (if ((x_25) <.? (@repr WORDSIZE32 0)):bool then (@Some int32 (x_25)) else ( + @None int32)). +#+end_src + +#+begin_src coq +Definition reject_impl_convert_from_unit : reject_hacspec_t := + (min_v) .+ (@repr WORDSIZE32 1). + + +Theorem ensures_reject_impl_convert_from_unit : forall result_26 , + @reject_impl_convert_from_unit = result_26 -> + ~ ((result_26) =.? (@repr WORDSIZE32 0)). + Proof. Admitted. +#+end_src + +#+begin_src coq +Definition reject_impl_convert_from_parse_error : reject_hacspec_t := + (min_v) .+ (@repr WORDSIZE32 2). + + +Theorem ensures_reject_impl_convert_from_parse_error : forall result_26 , + @reject_impl_convert_from_parse_error = result_26 -> + ~ ((result_26) =.? (@repr WORDSIZE32 0)). + Proof. Admitted. +#+end_src + +#+begin_src coq +Definition reject_impl_from_log_error (le_27 : log_error_t): reject_hacspec_t := + match le_27 with + | Full => (min_v) .+ (@repr WORDSIZE32 3) + | Malformed => (min_v) .+ (@repr WORDSIZE32 4) + end. + + +Theorem ensures_reject_impl_from_log_error : forall result_26 ( + le_27 : log_error_t), + @reject_impl_from_log_error le_27 = result_26 -> + ~ ((result_26) =.? (@repr WORDSIZE32 0)). + Proof. Admitted. +#+end_src + +#+begin_src coq +Inductive new_contract_name_error_t := +| NewContractNameErrorMissingInitPrefix : new_contract_name_error_t +| NewContractNameErrorTooLong : new_contract_name_error_t +| NewContractNameErrorContainsDot : new_contract_name_error_t +| NewContractNameErrorInvalidCharacters : new_contract_name_error_t. +#+end_src + +#+begin_src coq +Definition reject_impl_from_new_contract_name_error + (nre_28 : new_contract_name_error_t): reject_hacspec_t := + match nre_28 with + | NewContractNameErrorMissingInitPrefix => (min_v) .+ (@repr WORDSIZE32 5) + | NewContractNameErrorTooLong => (min_v) .+ (@repr WORDSIZE32 6) + | NewContractNameErrorContainsDot => (min_v) .+ (@repr WORDSIZE32 9) + | NewContractNameErrorInvalidCharacters => (min_v) .+ (@repr WORDSIZE32 10) + end. + + +Theorem ensures_reject_impl_from_new_contract_name_error : forall result_26 ( + nre_28 : new_contract_name_error_t), + @reject_impl_from_new_contract_name_error nre_28 = result_26 -> + ~ ((result_26) =.? (@repr WORDSIZE32 0)). + Proof. Admitted. +#+end_src + +#+begin_src coq +Inductive new_receive_name_error_t := +| NewReceiveNameErrorMissingDotSeparator : new_receive_name_error_t +| NewReceiveNameErrorTooLong : new_receive_name_error_t +| NewReceiveNameErrorInvalidCharacters : new_receive_name_error_t. +#+end_src + +#+begin_src coq +Definition reject_impl_from_new_receive_name_error + (nre_29 : new_receive_name_error_t): reject_hacspec_t := + match nre_29 with + | NewReceiveNameErrorMissingDotSeparator => (min_v) .+ (@repr WORDSIZE32 7) + | NewReceiveNameErrorTooLong => (min_v) .+ (@repr WORDSIZE32 8) + | NewReceiveNameErrorInvalidCharacters => (min_v) .+ (@repr WORDSIZE32 11) + end. + + +Theorem ensures_reject_impl_from_new_receive_name_error : forall result_26 ( + nre_29 : new_receive_name_error_t), + @reject_impl_from_new_receive_name_error nre_29 = result_26 -> + ~ ((result_26) =.? (@repr WORDSIZE32 0)). + Proof. Admitted. +#+end_src + +#+begin_src coq +Definition reject_impl_from_not_payable_error : reject_hacspec_t := + (min_v) .+ (@repr WORDSIZE32 12). + + +Theorem ensures_reject_impl_from_not_payable_error : forall result_26 , + @reject_impl_from_not_payable_error = result_26 -> + ~ ((result_26) =.? (@repr WORDSIZE32 0)). + Proof. Admitted. +#+end_src + +#+begin_src coq +Notation "'contract_state_hacspec_t'" := (int32) : hacspec_scope. +#+end_src + +#+begin_src coq +Inductive seek_from_hacspec_t := +| Start : int64 -> seek_from_hacspec_t +| End : int64 -> seek_from_hacspec_t +| Current : int64 -> seek_from_hacspec_t. +#+end_src + +#+begin_src coq +Notation "'uint32_option_t'" := ((option int32)) : hacspec_scope. +#+end_src + +#+begin_src coq +Notation "'iint64_option_t'" := ((option int64)) : hacspec_scope. +#+end_src + +#+begin_src coq +Definition contract_state_impl_seek + (current_position_30 : contract_state_hacspec_t) + (end_31 : int32) + (pos_32 : seek_from_hacspec_t): (result (contract_state_hacspec_t ∏ int64 + ) unit) := + match pos_32 with + | Start offset_33 => @Ok (contract_state_hacspec_t ∏ int64) unit (( + @cast _ uint32 _ (offset_33), + offset_33 + )) + | End delta_34 => (if ((delta_34) >=.? (@repr WORDSIZE64 0)):bool then ( + match pub_uint32_checked_add (current_position_30) (@cast _ uint32 _ ( + delta_34)) with + | Some b_35 => @Ok (contract_state_hacspec_t ∏ int64) unit (( + b_35, + @cast _ uint64 _ (b_35) + )) + | None => @Err (contract_state_hacspec_t ∏ int64) unit (tt) + end) else (match pub_int64_checked_abs (delta_34) with + | Some before_36 => (if ((@cast _ uint32 _ (before_36)) <=.? ( + end_31)):bool then (@Ok (contract_state_hacspec_t ∏ int64) unit (( + (end_31) .- (@cast _ uint32 _ (before_36)), + @cast _ uint64 _ ((end_31) .- (@cast _ uint32 _ (before_36))) + ))) else (@Err (contract_state_hacspec_t ∏ int64) unit (tt))) + | None => @Err (contract_state_hacspec_t ∏ int64) unit (tt) + end)) + | Current delta_37 => (if ((delta_37) >=.? (@repr WORDSIZE64 0)):bool then ( + match pub_uint32_checked_add (current_position_30) (@cast _ uint32 _ ( + delta_37)) with + | Some offset_38 => @Ok (contract_state_hacspec_t ∏ int64) unit (( + offset_38, + @cast _ uint64 _ (offset_38) + )) + | None => @Err (contract_state_hacspec_t ∏ int64) unit (tt) + end) else (match pub_int64_checked_abs (delta_37) with + | Some b_39 => match pub_uint32_checked_sub (current_position_30) ( + @cast _ uint32 _ (b_39)) with + | Some offset_40 => @Ok (contract_state_hacspec_t ∏ int64) unit (( + offset_40, + @cast _ uint64 _ (offset_40) + )) + | None => @Err (contract_state_hacspec_t ∏ int64) unit (tt) + end + | None => @Err (contract_state_hacspec_t ∏ int64) unit (tt) + end)) + end. +#+end_src + +#+begin_src coq +Definition contract_state_impl_read_read + (current_position_41 : contract_state_hacspec_t) + (buf_42 : public_byte_seq): (contract_state_hacspec_t ∏ uint_size) := + let '(buf_43, num_read_44) := + load_state_hacspec (buf_42) (current_position_41) in + ((current_position_41) .+ (num_read_44), @cast _ uint32 _ (num_read_44)). +#+end_src + +#+begin_src coq +Definition contract_state_impl_read_read_u64 + (current_position_45 : contract_state_hacspec_t): ( + contract_state_hacspec_t ∏ + (result int64 unit) + ) := + let buf_46 : seq int8 := + seq_new_ (default) (usize 8) in + let '(buf_47, num_read_48) := + load_state_hacspec (buf_46) (current_position_45) in + ( + (current_position_45) .+ (num_read_48), + (if ((num_read_48) =.? (@repr WORDSIZE32 8)):bool then (@Ok int64 unit ( + u64_from_le_bytes (array_from_seq (8) (buf_47)))) else ( + @Err int64 unit (tt))) + ). +#+end_src + +#+begin_src coq +Definition contract_state_impl_read_read_u32 + (current_position_49 : contract_state_hacspec_t): ( + contract_state_hacspec_t ∏ + (result int32 unit) + ) := + let buf_50 : seq int8 := + seq_new_ (default) (usize 4) in + let '(buf_51, num_read_52) := + load_state_hacspec (buf_50) (current_position_49) in + ( + (current_position_49) .+ (num_read_52), + (if ((num_read_52) =.? (@repr WORDSIZE32 4)):bool then (@Ok int32 unit ( + u32_from_le_bytes (array_from_seq (4) (buf_51)))) else ( + @Err int32 unit (tt))) + ). +#+end_src + +#+begin_src coq +Definition contract_state_impl_read_read_u8 + (current_position_53 : contract_state_hacspec_t): ( + contract_state_hacspec_t ∏ + (result int8 unit) + ) := + let buf_54 : seq int8 := + seq_new_ (default) (usize 1) in + let '(buf_55, num_read_56) := + load_state_hacspec (buf_54) (current_position_53) in + ( + (current_position_53) .+ (num_read_56), + (if ((num_read_56) =.? (@repr WORDSIZE32 1)):bool then (@Ok int8 unit ( + seq_index (buf_55) (usize 0))) else (@Err int8 unit (tt))) + ). +#+end_src + +#+begin_src coq +Definition contract_state_impl_write + (current_position_57 : contract_state_hacspec_t) + (buf_58 : public_byte_seq): (result (contract_state_hacspec_t ∏ uint_size + ) unit) := + ifbnd option_is_none (pub_uint32_checked_add (current_position_57) (pub_u32 ( + seq_len (buf_58)))) : bool + thenbnd (bind (@Err (contract_state_hacspec_t ∏ uint_size) unit (tt)) ( + fun _ => Ok (tt))) + else (tt) >> (fun 'tt => + let '(buf_59, num_bytes_60) := + write_state_hacspec (buf_58) (current_position_57) in + @Ok (contract_state_hacspec_t ∏ uint_size) unit (( + (current_position_57) .+ (num_bytes_60), + @cast _ uint32 _ (num_bytes_60) + ))). +#+end_src + +#+begin_src coq +Definition has_contract_state_impl_for_contract_state_open + : contract_state_hacspec_t := + @repr WORDSIZE32 0. +#+end_src + +#+begin_src coq +Definition has_contract_state_impl_for_contract_state_reserve + (len_61 : int32): bool := + let cur_size_62 : int32 := + state_size_hacspec in + (if ((cur_size_62) <.? (len_61)):bool then ((resize_state_hacspec ( + len_61)) =.? (@repr WORDSIZE32 1)) else (true)). +#+end_src + +#+begin_src coq +Definition has_contract_state_impl_for_contract_state_truncate + (current_position_63 : contract_state_hacspec_t) + (cur_size_64 : int32) + (new_size_65 : int32): contract_state_hacspec_t := + let 'tt := + if (cur_size_64) >.? (new_size_65):bool then (let _ : int32 := + resize_state_hacspec (new_size_65) in + tt) else (tt) in + (if ((new_size_65) <.? (current_position_63)):bool then (new_size_65) else ( + current_position_63)). +#+end_src + +#+begin_src coq +Notation "'parameter_hacspec_t'" := (int32) : hacspec_scope. +#+end_src + +#+begin_src coq +Definition read_impl_for_parameter_read + (current_position_66 : parameter_hacspec_t) + (buf_67 : public_byte_seq): (parameter_hacspec_t ∏ uint_size) := + let '(buf_68, num_read_69) := + get_parameter_section_hacspec (buf_67) (current_position_66) in + ((current_position_66) .+ (num_read_69), @cast _ uint32 _ (num_read_69)). +#+end_src + +#+begin_src coq +Notation "'attributes_cursor_hacspec_t'" := ((int32 ∏ int16)) : hacspec_scope. +#+end_src + +#+begin_src coq +Definition has_policy_impl_for_policy_attributes_cursor_next_item + (policy_attribute_items_70 : attributes_cursor_hacspec_t) + (buf_71 : public_byte_seq): (option ( + attributes_cursor_hacspec_t ∏ + (int8 ∏ int8) + )) := + let '(current_position_72, remaining_items_73) := + policy_attribute_items_70 in + ifbnd (remaining_items_73) =.? (@repr WORDSIZE16 0) : bool + thenbnd (bind (@None (attributes_cursor_hacspec_t ∏ (int8 ∏ int8))) ( + fun _ => Some (tt))) + else (tt) >> (fun 'tt => + let '(tag_value_len_74, num_read_75) := + get_policy_section_hacspec (seq_new_ (default) (usize 2)) ( + current_position_72) in + let current_position_72 := + (current_position_72) .+ (num_read_75) in + ifbnd (seq_index (tag_value_len_74) (usize 1)) >.? (@repr WORDSIZE8 31) : bool + thenbnd (bind (@None (attributes_cursor_hacspec_t ∏ (int8 ∏ int8))) ( + fun _ => Some (tt))) + else (tt) >> (fun 'tt => + let '(buf_76, num_read_77) := + get_policy_section_hacspec (buf_71) (current_position_72) in + let current_position_72 := + (current_position_72) .+ (num_read_77) in + let remaining_items_73 := + (remaining_items_73) .- (@repr WORDSIZE16 1) in + @Some (attributes_cursor_hacspec_t ∏ (int8 ∏ int8)) (( + (current_position_72, remaining_items_73), + ( + seq_index (tag_value_len_74) (usize 0), + seq_index (tag_value_len_74) (usize 1) + ) + )))). +#+end_src + +#+begin_src coq +Notation "'policies_iterator_hacspec_t'" := ((int32 ∏ int16)) : hacspec_scope. +#+end_src + +#+begin_src coq +Notation "'policy_attributes_cursor_hacspec_t'" := (( + int32 ∏ + int64 ∏ + int64 ∏ + attributes_cursor_hacspec_t + )) : hacspec_scope. +#+end_src + +#+begin_src coq +Definition iterator_impl_for_policies_iterator_next + (policies_iterator_78 : policies_iterator_hacspec_t): (option ( + policies_iterator_hacspec_t ∏ + policy_attributes_cursor_hacspec_t + )) := + let '(pos_79, remaining_items_80) := + policies_iterator_78 in + ifbnd (remaining_items_80) =.? (@repr WORDSIZE16 0) : bool + thenbnd (bind (@None ( + policies_iterator_hacspec_t ∏ + policy_attributes_cursor_hacspec_t + )) (fun _ => Some (tt))) + else (tt) >> (fun 'tt => + let '(buf_81, _) := + get_policy_section_hacspec (seq_new_ (default) (((((usize 2) + ( + usize 4)) + (usize 8)) + (usize 8)) + (usize 2))) (pos_79) in + let skip_part_82 : public_byte_seq := + seq_slice_range (buf_81) ((usize 0, usize 2)) in + let ip_part_83 : public_byte_seq := + seq_slice_range (buf_81) ((usize 2, (usize 2) + (usize 4))) in + let created_at_part_84 : public_byte_seq := + seq_slice_range (buf_81) (( + (usize 2) + (usize 4), + ((usize 2) + (usize 4)) + (usize 8) + )) in + let valid_to_part_85 : public_byte_seq := + seq_slice_range (buf_81) (( + ((usize 2) + (usize 4)) + (usize 8), + (((usize 2) + (usize 4)) + (usize 8)) + (usize 8) + )) in + let len_part_86 : public_byte_seq := + seq_slice_range (buf_81) (( + (((usize 2) + (usize 4)) + (usize 8)) + (usize 8), + ((((usize 2) + (usize 4)) + (usize 8)) + (usize 8)) + (usize 2) + )) in + let identity_provider_87 : int32 := + u32_from_le_bytes (array_from_seq (4) (ip_part_83)) in + let created_at_88 : int64 := + u64_from_le_bytes (array_from_seq (8) (created_at_part_84)) in + let valid_to_89 : int64 := + u64_from_le_bytes (array_from_seq (8) (valid_to_part_85)) in + let remaining_items_90 : int16 := + u16_from_le_bytes (array_from_seq (2) (len_part_86)) in + let attributes_start_91 : int32 := + (((((pos_79) .+ (@repr WORDSIZE32 2)) .+ (@repr WORDSIZE32 4)) .+ ( + @repr WORDSIZE32 8)) .+ (@repr WORDSIZE32 8)) .+ ( + @repr WORDSIZE32 2) in + let pos_79 := + ((pos_79) .+ (@cast _ uint32 _ (u16_from_le_bytes (array_from_seq (2) ( + skip_part_82))))) .+ (@repr WORDSIZE32 2) in + let remaining_items_90 := + (remaining_items_90) .- (@repr WORDSIZE16 1) in + @Some (policies_iterator_hacspec_t ∏ policy_attributes_cursor_hacspec_t) (( + (pos_79, remaining_items_90), + ( + identity_provider_87, + created_at_88, + valid_to_89, + (attributes_start_91, remaining_items_90) + ) + ))). +#+end_src + +#+begin_src coq +Definition user_address_t := nseq (int8) (usize 32). +#+end_src + +#+begin_src coq +Inductive has_action_t := +| Accept : unit -> has_action_t +| SimpleTransfer : (user_address_t ∏ int64) -> has_action_t. +#+end_src + +#+begin_src coq +Notation "'list_action_t'" := (seq has_action_t) : hacspec_scope. +#+end_src + +#+begin_src coq +Definition accept_action : has_action_t := + Accept (tt). +#+end_src + +#+begin_src coq +Inductive context_t := +| Context : (user_address_t ∏ user_address_t ∏ int64 ∏ int64 +) -> context_t. +#+end_src +# 41 code sections + +* Concordium "Constants" specification +** Rust code +:PROPERTIES: +:header-args: :tangle ../concordium/src/constants.rs :mkdirp yes :eval never +:END: + +#+begin_src rust +/// Maximum size of the contract state in bytes. +pub const MAX_CONTRACT_STATE_SIZE: u32 = 16384u32; + +/// Maximum log size. +pub const MAX_LOG_SIZE: usize = 512usize; + +/// Maximum number of log items. +pub const MAX_NUM_LOGS: usize = 64usize; +#+end_src + +* Concordium "Test infrastructure" specification +** Rust code +:PROPERTIES: +:header-args: :tangle ../concordium/src/test_infrastructure.rs :mkdirp yes :eval never +:END: + +#+begin_src rust +//! The test infrastructure module provides alternative implementations of +//! `HasInitContext`, `HasReceiveContext`, `HasParameter`, `HasActions`, and +//! `HasContractState` traits intended for testing. +//! +//! They allow writing unit tests directly in contract modules with little to no +//! external tooling, depending on what is required. +//! +//! +//! # Example +//! +//! ```rust +//! // Some contract +//! #[init(contract = "noop")] +//! fn contract_init( +//! ctx: &I, +//! ) -> InitResult { ... } +//! +//! #[receive(contract = "noop", name = "receive", payable, enable_logger)] +//! fn contract_receive( +//! ctx: &R, +//! amount: Amount, +//! logger: &mut L, +//! state: &mut State, +//! ) -> ReceiveResult { ... } +//! +//! #[cfg(test)] +//! mod tests { +//! use super::*; +//! use concordium_sc_base::test_infrastructure::*; +//! #[test] +//! fn test_init() { +//! let mut ctx = InitContextTest::empty(); +//! ctx.set_init_origin(AccountAddress([0u8; 32])); +//! ... +//! let result = contract_init(&ctx); +//! claim!(...) +//! ... +//! } +//! +//! #[test] +//! fn test_receive() { +//! let mut ctx = ReceiveContextTest::empty(); +//! ctx.set_owner(AccountAddress([0u8; 32])); +//! ... +//! let mut logger = LogRecorder::init(); +//! let result: ReceiveResult = contract_receive(&ctx, 0, &mut logger, state); +//! claim!(...) +//! ... +//! } +//! } +//! ``` +#[cfg(not(feature = "hacspec"))] +use crate::{constants::MAX_CONTRACT_STATE_SIZE, *}; + +#[cfg(not(feature = "hacspec"))] +#[cfg(not(feature = "std"))] +use alloc::boxed::Box; +#[cfg(not(feature = "hacspec"))] +use convert::TryInto; +#[cfg(not(feature = "hacspec"))] +#[cfg(not(feature = "std"))] +use core::{cmp, num}; +#[cfg(not(feature = "hacspec"))] +#[cfg(feature = "std")] +use std::{boxed::Box, cmp, num}; + +#[cfg(not(feature = "hacspec"))] +/// Placeholder for the context chain meta data. +/// All the fields are optionally set and the getting an unset field will result +/// in test failing. +/// For most cases it is used as part of either +/// [`InitContextTest`](struct.InitContextTest.html) or +/// [`ReceiveContextTest`](struct.ReceiveContextTest.html). +/// Use only in unit tests! +/// +/// Defaults to having all of the fields unset +#[derive(Default, Clone)] +pub struct ChainMetaTest { + pub(crate) slot_time: Option, +} + +#[cfg(not(feature = "hacspec"))] +/// Policy type used by init and receive contexts for testing. +/// This type should not be used directly, but rather through +/// its `HasPolicy` interface. +#[derive(Debug, Clone)] +pub struct TestPolicy { + /// Current position in the vector of policies. Used to implement + /// `next_item`. + position: usize, + policy: OwnedPolicy, +} + +#[cfg(not(feature = "hacspec"))] +impl TestPolicy { + fn new(policy: OwnedPolicy) -> Self { + Self { + position: 0, + policy, + } + } +} + +#[cfg(not(feature = "hacspec"))] +/// Placeholder for the common data shared between the `InitContext` and +/// `ReceiveContext`. This type is a technicality, see `InitContext` and +/// `ReceiveContext` for the types to use. +/// +/// # Default +/// Defaults to having all the fields unset, and constructing +/// [`ChainMetaTest`](struct.ChainMetaTest.html) using default. +#[derive(Default, Clone)] +#[doc(hidden)] +pub struct CommonDataTest<'a> { + pub(crate) metadata: ChainMetaTest, + pub(crate) parameter: Option<&'a [u8]>, + /// Policy of the creator. We keep the `Option` wrapper + /// in order that the user can be warned that they are using a policy. + /// Thus there is a distinction between `Some(Vec::new())` and `None`. + pub(crate) policies: Option>, +} + +#[cfg(not(feature = "hacspec"))] +/// Context used for testing. The type parameter C is used to determine whether +/// this will be an init or receive context. +#[derive(Default, Clone)] +pub struct ContextTest<'a, C> { + pub(crate) common: CommonDataTest<'a>, + pub(crate) custom: C, +} + +/// Placeholder for the initial context. All the fields can be set optionally +/// and the getting an unset field will result in calling +/// [`fail!`](../macro.fail.html). Use only in tests! +/// +/// # Setters +/// Every field has a setter function prefixed with `set_`. + +/// ### Example +/// Creating an empty context and setting the `init_origin`. +/// ``` +/// let mut ctx = InitContextTest::empty(); +/// ctx.set_init_origin(AccountAddress([0u8; 32])); +/// ``` +/// ## Set chain meta data +/// Chain meta data is set using setters on the context or by setters on a +/// mutable reference of [`ChainMetaTest`](struct.ChainMetaTest.html). +/// +/// ### Example +/// Creating an empty context and setting the `slot_time` metadata. +/// ``` +/// let mut ctx = InitContextTest::empty(); +/// ctx.set_metadata_slot_time(1609459200); +/// ``` +/// or +/// ``` +/// let mut ctx = InitContextTest::empty(); +/// ctx.metadata_mut().set_slot_time(1609459200); +/// ``` +/// +/// # Use case example +/// +/// ```rust +/// #[init(contract = "noop")] +/// fn contract_init( +/// ctx: &I, +/// _amount: Amount, +/// _logger: &mut L, +/// ) -> InitResult<()> { +/// let init_origin = ctx.init_origin(); +/// let parameter: SomeParameterType = ctx.parameter_cursor().get()?; +/// Ok(()) +/// } +/// +/// #[cfg(test)] +/// mod tests { +/// use super::*; +/// use concordium_sc_base::test_infrastructure::*; +/// #[test] +/// fn test() { +/// let mut ctx = InitContextTest::empty(); +/// ctx.set_init_origin(AccountAddress([0u8; 32])); +/// ... +/// let result = contract_init(&ctx, 0, &mut logger); +/// // Reads the init_origin without any problems. +/// // But then fails because the parameter is not set. +/// } +/// } +/// ``` +#[cfg(not(feature = "hacspec"))] +pub type InitContextTest<'a> = ContextTest<'a, InitOnlyDataTest>; + +#[cfg(not(feature = "hacspec"))] +#[derive(Default)] +#[doc(hidden)] +pub struct InitOnlyDataTest { + init_origin: Option, +} + +/// Placeholder for the receiving context. All the fields can be set optionally +/// and the getting an unset field will result in calling +/// [`fail!`](../macro.fail.html). Use only in tests! +/// +/// # Setters +/// Every field have a setter function prefixed with `set_`. +/// +/// ### Example +/// Creating an empty context and setting the `init_origin`. +/// ``` +/// let owner = AccountAddress([0u8; 32]); +/// let mut ctx = ReceiveContextTest::empty(); +/// ctx.set_owner(owner); +/// ctx.set_sender(Address::Account(owner)); +/// ``` +/// ## Set chain meta data +/// Chain meta data is set using setters on the context or by setters on a +/// mutable reference of [`ChainMetaTest`](struct.ChainMetaTest.html). +/// +/// ### Example +/// Creating an empty context and setting the `slot_time` metadata. +/// ``` +/// let mut ctx = ReceiveContextTest::empty(); +/// ctx.set_metadata_slot_time(1609459200); +/// ``` +/// or +/// ``` +/// let mut ctx = ReceiveContextTest::empty(); +/// ctx.metadata_mut().set_slot_time(1609459200); +/// ``` +/// +/// # Use case example +/// Creating a context for running unit tests +/// ```rust +/// #[receive(contract = "mycontract", name = "receive")] +/// fn contract_receive( +/// ctx: &R, +/// amount: Amount, +/// logger: &mut L, +/// state: &mut State, +/// ) -> ReceiveResult { +/// ensure!(ctx.sender().matches_account(&ctx.owner()), "Only the owner can increment."); +/// Ok(A::accept()) +/// } +/// +/// #[cfg(test)] +/// mod tests { +/// use super::*; +/// use concordium_sc_base::test_infrastructure::*; +/// #[test] +/// fn test() { +/// let owner = AccountAddress([0u8; 32]); +/// let mut ctx = ReceiveContextTest::empty(); +/// ctx.set_owner(owner); +/// ctx.set_sender(Address::Account(owner)); +/// ... +/// let result: ReceiveResult = contract_receive(&ctx, 0, &mut logger, state); +/// } +/// } +/// ``` +#[cfg(not(feature = "hacspec"))] +pub type ReceiveContextTest<'a> = ContextTest<'a, ReceiveOnlyDataTest>; + +#[cfg(not(feature = "hacspec"))] +#[derive(Default)] +#[doc(hidden)] +pub struct ReceiveOnlyDataTest { + pub(crate) invoker: Option, + pub(crate) self_address: Option, + pub(crate) self_balance: Option, + pub(crate) sender: Option
, + pub(crate) owner: Option, +} + +#[cfg(not(feature = "hacspec"))] +// Setters for testing-context +impl ChainMetaTest { + /// Create an `ChainMetaTest` where every field is unset, and getting any of + /// the fields will result in [`fail!`](../macro.fail.html). + pub fn empty() -> Self { Default::default() } + + /// Set the block slot time + pub fn set_slot_time(&mut self, value: SlotTime) -> &mut Self { + self.slot_time = Some(value); + self + } +} + +#[cfg(not(feature = "hacspec"))] +impl<'a, C> ContextTest<'a, C> { + /// Push a new sender policy to the context. + /// When the first policy is pushed this will set the policy vector + /// to 'Some', even if it was undefined previously. + pub fn push_policy(&mut self, value: OwnedPolicy) -> &mut Self { + if let Some(policies) = self.common.policies.as_mut() { + policies.push(TestPolicy::new(value)); + } else { + self.common.policies = Some(vec![TestPolicy::new(value)]) + } + self + } + + /// Set the policies to be defined, but an empty list. + /// Such a situation can not realistically happen on the chain, + /// but we provide functionality for it in case smart contract + /// writers wish to program defensively. + pub fn empty_policies(&mut self) -> &mut Self { + self.common.policies = Some(Vec::new()); + self + } + + pub fn set_parameter(&mut self, value: &'a [u8]) -> &mut Self { + self.common.parameter = Some(value); + self + } + + /// Get a mutable reference to the chain meta data placeholder + pub fn metadata_mut(&mut self) -> &mut ChainMetaTest { &mut self.common.metadata } + + /// Set the metadata block slot time + pub fn set_metadata_slot_time(&mut self, value: SlotTime) -> &mut Self { + self.metadata_mut().set_slot_time(value); + self + } +} + +#[cfg(not(feature = "hacspec"))] +impl<'a> InitContextTest<'a> { + /// Create an `InitContextTest` where every field is unset, and getting any + /// of the fields will result in [`fail!`](../macro.fail.html). + pub fn empty() -> Self { Default::default() } + + /// Set `init_origin` in the `InitContextTest` + pub fn set_init_origin(&mut self, value: AccountAddress) -> &mut Self { + self.custom.init_origin = Some(value); + self + } +} + +#[cfg(not(feature = "hacspec"))] +impl<'a> ReceiveContextTest<'a> { + /// Create a `ReceiveContextTest` where every field is unset, and getting + /// any of the fields will result in [`fail!`](../macro.fail.html). + pub fn empty() -> Self { Default::default() } + + pub fn set_invoker(&mut self, value: AccountAddress) -> &mut Self { + self.custom.invoker = Some(value); + self + } + + pub fn set_self_address(&mut self, value: ContractAddress) -> &mut Self { + self.custom.self_address = Some(value); + self + } + + pub fn set_self_balance(&mut self, value: Amount) -> &mut Self { + self.custom.self_balance = Some(value); + self + } + + pub fn set_sender(&mut self, value: Address) -> &mut Self { + self.custom.sender = Some(value); + self + } + + pub fn set_owner(&mut self, value: AccountAddress) -> &mut Self { + self.custom.owner = Some(value); + self + } +} + +#[cfg(not(feature = "hacspec"))] +// Error handling when unwrapping +fn unwrap_ctx_field(opt: Option, name: &str) -> A { + match opt { + Some(v) => v, + None => fail!( + "Unset field on test context '{}', make sure to set all the field necessary for the \ + contract", + name + ), + } +} + +#[cfg(not(feature = "hacspec"))] +// Getters for testing-context +impl HasChainMetadata for ChainMetaTest { + fn slot_time(&self) -> SlotTime { unwrap_ctx_field(self.slot_time, "metadata.slot_time") } +} + +#[cfg(not(feature = "hacspec"))] +impl HasPolicy for TestPolicy { + fn identity_provider(&self) -> IdentityProvider { self.policy.identity_provider } + + fn created_at(&self) -> Timestamp { self.policy.created_at } + + fn valid_to(&self) -> Timestamp { self.policy.valid_to } + + fn next_item(&mut self, buf: &mut [u8; 31]) -> Option<(AttributeTag, u8)> { + if let Some(item) = self.policy.items.get(self.position) { + let len = item.1.len(); + buf[0..len].copy_from_slice(&item.1); + self.position += 1; + Some((item.0, len as u8)) + } else { + None + } + } +} + +#[cfg(not(feature = "hacspec"))] +impl<'a, C> HasCommonData for ContextTest<'a, C> { + type MetadataType = ChainMetaTest; + type ParamType = Cursor<&'a [u8]>; + type PolicyIteratorType = crate::vec::IntoIter; + type PolicyType = TestPolicy; + + fn parameter_cursor(&self) -> Self::ParamType { + Cursor::new(unwrap_ctx_field(self.common.parameter, "parameter")) + } + + fn metadata(&self) -> &Self::MetadataType { &self.common.metadata } + + fn policies(&self) -> Self::PolicyIteratorType { + unwrap_ctx_field(self.common.policies.clone(), "policies").into_iter() + } +} + +#[cfg(not(feature = "hacspec"))] +impl<'a> HasInitContext for InitContextTest<'a> { + type InitData = (); + + fn open(_data: Self::InitData) -> Self { InitContextTest::default() } + + fn init_origin(&self) -> AccountAddress { + unwrap_ctx_field(self.custom.init_origin, "init_origin") + } +} + +#[cfg(not(feature = "hacspec"))] +impl<'a> HasReceiveContext for ReceiveContextTest<'a> { + type ReceiveData = (); + + fn open(_data: Self::ReceiveData) -> Self { ReceiveContextTest::default() } + + fn invoker(&self) -> AccountAddress { unwrap_ctx_field(self.custom.invoker, "invoker") } + + fn self_address(&self) -> ContractAddress { + unwrap_ctx_field(self.custom.self_address, "self_address") + } + + fn self_balance(&self) -> Amount { unwrap_ctx_field(self.custom.self_balance, "self_balance") } + + fn sender(&self) -> Address { unwrap_ctx_field(self.custom.sender, "sender") } + + fn owner(&self) -> AccountAddress { unwrap_ctx_field(self.custom.owner, "owner") } +} + +#[cfg(not(feature = "hacspec"))] +impl<'a> HasParameter for Cursor<&'a [u8]> { + fn size(&self) -> u32 { self.data.len() as u32 } +} + +/// A logger that simply accumulates all the logged items to be inspected at the +/// end of execution. +#[cfg(not(feature = "hacspec"))] +pub struct LogRecorder { + pub logs: Vec>, +} + +#[cfg(not(feature = "hacspec"))] +impl HasLogger for LogRecorder { + fn init() -> Self { + Self { + logs: Vec::new(), + } + } + + fn log_raw(&mut self, event: &[u8]) -> Result<(), LogError> { + if event.len() > constants::MAX_LOG_SIZE { + return Err(LogError::Malformed); + } + if self.logs.len() >= constants::MAX_NUM_LOGS { + return Err(LogError::Full); + } + self.logs.push(event.to_vec()); + Ok(()) + } +} + +#[cfg(not(feature = "hacspec"))] +/// An actions tree, used to provide a simpler presentation for testing. +#[derive(Eq, PartialEq, Debug)] +pub enum ActionsTree { + Accept, + SimpleTransfer { + to: AccountAddress, + amount: Amount, + }, + Send { + to: ContractAddress, + receive_name: OwnedReceiveName, + amount: Amount, + parameter: Vec, + }, + AndThen { + left: Box, + right: Box, + }, + OrElse { + left: Box, + right: Box, + }, +} + +#[cfg(not(feature = "hacspec"))] +impl HasActions for ActionsTree { + fn accept() -> Self { ActionsTree::Accept } + + fn simple_transfer(acc: &AccountAddress, amount: Amount) -> Self { + ActionsTree::SimpleTransfer { + to: *acc, + amount, + } + } + + fn send_raw( + ca: &ContractAddress, + receive_name: ReceiveName, + amount: Amount, + parameter: &[u8], + ) -> Self { + ActionsTree::Send { + to: *ca, + receive_name: receive_name.to_owned(), + amount, + parameter: parameter.to_vec(), + } + } + + fn and_then(self, then: Self) -> Self { + ActionsTree::AndThen { + left: Box::new(self), + right: Box::new(then), + } + } + + fn or_else(self, el: Self) -> Self { + ActionsTree::OrElse { + left: Box::new(self), + right: Box::new(el), + } + } +} + +#[cfg(not(feature = "hacspec"))] +/// Reports back an error to the host when compiled to wasm +/// Used internally, not meant to be called directly by contract writers +#[doc(hidden)] +#[cfg(all(feature = "wasm-test", target_arch = "wasm32"))] +pub fn report_error(message: &str, filename: &str, line: u32, column: u32) { + let msg_bytes = message.as_bytes(); + let filename_bytes = filename.as_bytes(); + unsafe { + crate::prims::report_error( + msg_bytes.as_ptr(), + msg_bytes.len() as u32, + filename_bytes.as_ptr(), + filename_bytes.len() as u32, + line, + column, + ) + }; +} + +#[cfg(not(feature = "hacspec"))] +/// Reports back an error to the host when compiled to wasm +/// Used internally, not meant to be called directly by contract writers +#[doc(hidden)] +#[cfg(not(all(feature = "wasm-test", target_arch = "wasm32")))] +pub fn report_error(_message: &str, _filename: &str, _line: u32, _column: u32) {} + +/// Contract state for testing, mimicking the operations the scheduler allows, +/// including the limit on the size of the maximum size of the contract state. +#[cfg(not(feature = "hacspec"))] +pub struct ContractStateTest { + pub cursor: Cursor, +} + +#[cfg(not(feature = "hacspec"))] +/// A borrowed instantiation of `ContractStateTest`. +pub type ContractStateTestBorrowed<'a> = ContractStateTest<&'a mut Vec>; + +#[cfg(not(feature = "hacspec"))] +/// An owned variant that can be more convenient for testing since the type +/// itself owns the data. +pub type ContractStateTestOwned = ContractStateTest>; + +#[cfg(not(feature = "hacspec"))] +#[derive(Debug, PartialEq, Eq)] +/// An error that is raised when operating with `Seek`, `Write`, or `Read` trait +/// methods of the `ContractStateTest` type. +pub enum ContractStateError { + /// The computation of the new offset would result in an overflow. + Overflow, + /// An error occurred when writing to the contract state. + Write, + /// The new offset would be out of bounds of the state. + Offset, + /// Some other error occurred. + Default, +} + +#[cfg(not(feature = "hacspec"))] +impl> Read for ContractStateTest { + fn read(&mut self, buf: &mut [u8]) -> ParseResult { self.cursor.read(buf) } +} + +#[cfg(not(feature = "hacspec"))] +impl>> Write for ContractStateTest { + type Err = ContractStateError; + + fn write(&mut self, buf: &[u8]) -> Result { + // The chain automatically resizes the state up until MAX_CONTRACT_STATE_SIZE. + let end = cmp::min(MAX_CONTRACT_STATE_SIZE as usize, self.cursor.offset + buf.len()); + if self.cursor.data.as_mut().len() < end { + self.cursor.data.as_mut().resize(end as usize, 0u8); + } + let data = &mut self.cursor.data.as_mut()[self.cursor.offset..]; + let to_write = cmp::min(data.len(), buf.len()); + data[..to_write].copy_from_slice(&buf[..to_write]); + self.cursor.offset += to_write; + Ok(to_write) + } +} + +#[cfg(not(feature = "hacspec"))] +impl> + AsMut<[u8]> + AsRef<[u8]>> HasContractState + for ContractStateTest +{ + type ContractStateData = T; + + fn open(data: Self::ContractStateData) -> Self { + Self { + cursor: Cursor::new(data), + } + } + + fn size(&self) -> u32 { self.cursor.data.as_ref().len() as u32 } + + fn truncate(&mut self, new_size: u32) { + if self.size() > new_size { + let new_size = new_size as usize; + let data: &mut Vec = self.cursor.data.as_mut(); + data.truncate(new_size); + if self.cursor.offset > new_size { + self.cursor.offset = new_size + } + } + } + + fn reserve(&mut self, len: u32) -> bool { + if len <= constants::MAX_CONTRACT_STATE_SIZE { + if self.size() < len { + let data: &mut Vec = self.cursor.data.as_mut(); + data.resize(len as usize, 0u8); + } + true + } else { + false + } + } +} + +#[cfg(not(feature = "hacspec"))] +impl Default for ContractStateError { + fn default() -> Self { Self::Default } +} + +#[cfg(not(feature = "hacspec"))] +impl From for ContractStateError { + fn from(_: num::TryFromIntError) -> Self { ContractStateError::Overflow } +} + +#[cfg(not(feature = "hacspec"))] +impl> Seek for ContractStateTest { + type Err = ContractStateError; + + fn seek(&mut self, pos: SeekFrom) -> Result { + use ContractStateError::*; + match pos { + SeekFrom::Start(x) => { + // We can set the position to just after the end of the current length. + let new_offset = x.try_into()?; + if new_offset <= self.cursor.data.as_ref().len() { + self.cursor.offset = new_offset; + Ok(x) + } else { + Err(Offset) + } + } + SeekFrom::End(x) => { + // cannot seek beyond end, nor before beginning + if x <= 0 { + let end: u32 = self.cursor.data.as_ref().len().try_into()?; + let minus_x = x.checked_abs().ok_or(Overflow)?; + if let Some(new_pos) = end.checked_sub(minus_x.try_into()?) { + self.cursor.offset = new_pos.try_into()?; + Ok(u64::from(new_pos)) + } else { + Err(Offset) + } + } else { + Err(Offset) + } + } + SeekFrom::Current(x) => match x { + 0 => Ok(self.cursor.offset.try_into()?), + x if x > 0 => { + let x = x.try_into()?; + let new_pos = self.cursor.offset.checked_add(x).ok_or(Overflow)?; + if new_pos <= self.cursor.data.as_ref().len() { + self.cursor.offset = new_pos; + new_pos.try_into().map_err(Self::Err::from) + } else { + Err(Offset) + } + } + x => { + let x = (-x).try_into()?; + let new_pos = self.cursor.offset.checked_sub(x).ok_or(Overflow)?; + self.cursor.offset = new_pos; + new_pos.try_into().map_err(Self::Err::from) + } + }, + } + } +} + +#[cfg(not(feature = "hacspec"))] +#[cfg(test)] +mod test { + use concordium_contracts_common::{Read, Seek, SeekFrom, Write}; + + use super::ContractStateTest; + use crate::{constants, traits::HasContractState}; + + #[test] + // Perform a number of operations from Seek, Read, Write and HasContractState + // classes on the ContractStateTest structure and check that they behave as + // specified. + fn test_contract_state() { + let data = vec![1; 100]; + let mut state = ContractStateTest::open(data); + assert_eq!(state.seek(SeekFrom::Start(100)), Ok(100), "Seeking to the end failed."); + assert_eq!( + state.seek(SeekFrom::Current(0)), + Ok(100), + "Seeking from current position with offset 0 failed." + ); + assert!( + state.seek(SeekFrom::Current(1)).is_err(), + "Seeking from current position with offset 1 succeeded." + ); + assert_eq!(state.cursor.offset, 100, "Cursor position changed on failed seek."); + assert_eq!( + state.seek(SeekFrom::Current(-1)), + Ok(99), + "Seeking from current position backwards with offset 1 failed." + ); + assert!(state.seek(SeekFrom::Current(-100)).is_err(), "Seeking beyond beginning succeeds"); + assert_eq!(state.seek(SeekFrom::Current(-99)), Ok(0), "Seeking to the beginning fails."); + assert_eq!(state.seek(SeekFrom::End(0)), Ok(100), "Seeking from end fails."); + assert!( + state.seek(SeekFrom::End(1)).is_err(), + "Seeking beyond the end succeeds but should fail." + ); + assert_eq!(state.cursor.offset, 100, "Cursor position changed on failed seek."); + assert_eq!( + state.seek(SeekFrom::End(-20)), + Ok(80), + "Seeking from end leads to incorrect position." + ); + assert_eq!(state.write(&[0; 21]), Ok(21), "Writing writes an incorrect amount of data."); + assert_eq!(state.cursor.offset, 101, "After writing the cursor is at the end."); + assert_eq!(state.write(&[0; 21]), Ok(21), "Writing again writes incorrect amount of data."); + let mut buf = [0; 30]; + assert_eq!(state.read(&mut buf), Ok(0), "Reading from the end should read 0 bytes."); + assert_eq!(state.seek(SeekFrom::End(-20)), Ok(102)); + assert_eq!(state.read(&mut buf), Ok(20), "Reading from offset 80 should read 20 bytes."); + assert_eq!(&buf[0..20], &state.cursor.data[80..100], "Incorrect data was read."); + assert_eq!( + state.cursor.offset, 122, + "After reading the offset is in the correct position." + ); + assert!(state.reserve(222), "Could not increase state to 222."); + assert!( + !state.reserve(constants::MAX_CONTRACT_STATE_SIZE + 1), + "State should not be resizable beyond max limit." + ); + assert_eq!(state.write(&[2; 100]), Ok(100), "Should have written 100 bytes."); + assert_eq!(state.cursor.offset, 222, "After writing the offset should be 200."); + state.truncate(50); + assert_eq!(state.cursor.offset, 50, "After truncation the state should be 50."); + assert!(state.reserve(constants::MAX_CONTRACT_STATE_SIZE), "Could not increase state MAX."); + assert_eq!( + state.seek(SeekFrom::End(0)), + Ok(u64::from(constants::MAX_CONTRACT_STATE_SIZE)), + "State should be full now." + ); + assert_eq!( + state.write(&[1; 1000]), + Ok(0), + "Writing at the end after truncation should do nothing." + ); + assert_eq!( + state.cursor.data.len(), + constants::MAX_CONTRACT_STATE_SIZE as usize, + "State size should not increase beyond max." + ) + } + + #[test] + fn test_contract_state_write() { + let data = vec![0u8; 10]; + let mut state = ContractStateTest::open(data); + assert_eq!(state.write(&1u64.to_le_bytes()), Ok(8), "Incorrect number of bytes written."); + assert_eq!( + state.write(&2u64.to_le_bytes()), + Ok(8), + "State should be resized automatically." + ); + assert_eq!(state.cursor.offset, 16, "Pos should be at the end."); + assert_eq!( + state.cursor.data, + vec![1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], + "Correct data was written." + ); + } +} +#+end_src diff --git a/ovn/concordium_derive.org b/ovn/concordium_derive.org new file mode 100644 index 0000000..0a33d01 --- /dev/null +++ b/ovn/concordium_derive.org @@ -0,0 +1,1533 @@ +#+TITLE: Concordium Smartcontract Infrastructure Implementations +#+AUTHOR: Lasse Letager Hansen + +#+HTML_HEAD: +#+PROPERTY: header-args:coq :session *Coq* + +# C-c C-v t - export this files +# C-c C-v b - create results / run this file +# C-c C-v s - create results / run subtree + +* Concordium derive +** Config +#+BEGIN_SRC toml :tangle ../concordium-derive/Cargo.toml :mkdirp yes :eval never +[package] +name = "hacspec-concordium-derive" +version = "0.1.0" +authors = [""] +edition = "2018" + +[lib] +path = "src/lib.rs" +proc-macro = true + +[dependencies] +hacspec-lib = { git = "https://github.com/hacspec/hacspec.git" } +# hacspec-attributes = { path = "../../utils/attributes", version = "0.1.0-beta.1" , features = ["print_attributes", "hacspec_unsafe"] } # , features = ["hacspec_unsafe"] , , optional = true +# creusot-contracts = { git = "https://github.com/xldenis/creusot", rev = "7763b3ae77205fba83182b9a6c3e69ad0b12fec7" } +concordium-contracts-common = { git = "https://github.com/Concordium/concordium-contracts-common", rev = "84ff7db509ca1fbf958b47e5e5903b7662295850" , version = "=2.0.0" , default-features = false } +# hacspec-concordium = { path = "../concordium" } +syn = { version = "1.0.63", features = [ "full", "extra-traits" ] } +quote = "*" # "=1.0.0" +proc-macro2 = "*" # "1.0" + +# Reduce code size, at the cost of performance in allocation heavy-code. +wee_alloc="0.4.5" + +# [features] +# use_attributes = ["hacspec-attributes/print_attributes", "hacspec-attributes/hacspec_unsafe"] + +[dev-dependencies] +# hacspec-dev = { path = "../../utils/dev" } +criterion = "0.3" +rand = "0.8" +quickcheck = "1" +quickcheck_macros = "1" +#+END_SRC + +** Rust code +:PROPERTIES: +:header-args: :tangle ../concordium-derive/src/lib.rs :mkdirp yes +:END: + +*** Imports + +#+BEGIN_SRC rust :eval never +// #![no_std] +extern crate proc_macro; +extern crate syn; +#[macro_use] +extern crate quote; + +use concordium_contracts_common::*; +use proc_macro::TokenStream; +use proc_macro2::Span; +use quote::ToTokens; +#[cfg(feature = "build-schema")] +use std::collections::HashMap; +use std::{convert::TryFrom, ops::Neg}; +use syn::{ + parse::Parser, parse_macro_input, punctuated::*, spanned::Spanned, DataEnum, Ident, Meta, Token, +}; + +// use hacspec_concordium::*; + +/// A helper to report meaningful compilation errors +/// - If applied to an Ok value they simply return the underlying value. +/// - If applied to `Err(e)` then `e` is turned into a compiler error. +fn unwrap_or_report(v: syn::Result) -> TokenStream { + match v { + Ok(ts) => ts, + Err(e) => e.to_compile_error().into(), + } +} + +fn attach_error(mut v: syn::Result, msg: &str) -> syn::Result { + if let Err(e) = v.as_mut() { + let span = e.span(); + e.combine(syn::Error::new(span, msg)); + } + v +} + +/// Get the name item from a list, if available and a string literal. +/// If the named item does not have the expected (string) value, this will +/// return an Err. If the item does not exist the return value is Ok(None). +/// FIXME: Ensure there is only one. +fn get_attribute_value<'a, I: IntoIterator>( + iter: I, + name: &str, +) -> syn::Result> { + for attr in iter.into_iter() { + match attr { + Meta::NameValue(mnv) => { + if mnv.path.is_ident(name) { + if let syn::Lit::Str(lit) = &mnv.lit { + return Ok(Some(lit)); + } else { + return Err(syn::Error::new( + mnv.span(), + format!("The `{}` attribute must be a string literal.", name), + )); + } + } + } + Meta::Path(p) => { + if p.is_ident(name) { + return Err(syn::Error::new( + attr.span(), + format!("The `{}` attribute must have a string literal value.", name), + )); + } + } + Meta::List(p) => { + if p.path.is_ident(name) { + return Err(syn::Error::new( + attr.span(), + format!("The `{}` attribute must have a string literal value.", name), + )); + } + } + } + } + Ok(None) +} + +// Return whether a attribute item is present. +fn contains_attribute<'a, I: IntoIterator>(iter: I, name: &str) -> bool { + iter.into_iter().any(|attr| attr.path().is_ident(name)) +} + +/// Derive the appropriate export for an annotated init function. +/// +/// This macro requires the following items to be present +/// - `contract=""` where *\* is the name of the smart contract and +/// the generated function is exported as this name prefixed with *init_*. The +/// name should be unique in the module, as a contract can only have one +/// init-function. +/// +/// The annotated function must be of a specific type, which depends on the +/// enabled attributes. *Without* any of the optional attributes the function +/// must have a signature of +/// +/// ```ignore +/// #[init(contract = "my_contract")] +/// fn some_init(ctx: &impl HasInitContext) -> InitResult {...} +/// ``` +/// +/// Where the trait `HasInitContext` and the type `InitResult` are exposed from +/// `concordium-std` and `MyState` is the user-defined type for the contract +/// state. +/// +/// # Optional attributes +/// +/// ## `payable`: Make function accept an amount of GTU +/// Without setting the `payable` attribute, the generated function will reject +/// any non-zero amount of GTU supplied with the transaction. This means we are +/// required to explicitly mark our functions as `payable`, if they are to +/// accept GTU. +/// +/// Setting the `payable` attribute changes the required signature to include an +/// extra argument of type `Amount`, allowing the function to access the amount +/// of GTU supplied with the transaction. +/// +/// ### Example +/// ```ignore +/// #[init(contract = "my_contract", payable)] +/// fn some_init(ctx: &impl HasInitContext, amount: Amount) -> InitResult {...} +/// ``` +/// +/// ## `enable_logger`: Function can access event logging +/// Setting the `enable_logger` attribute changes the required signature to +/// include an extra argument `&mut impl HasLogger`, allowing the function to +/// log events. +/// +/// +/// ### Example +/// ```ignore +/// #[init(contract = "my_contract", enable_logger)] +/// fn some_init(ctx: &impl HasInitContext, logger: &mut impl HasLogger) -> InitResult {...} +/// ``` +/// +/// ## `low_level`: Manually deal with writing state bytes +/// Setting the `low_level` attribute disables the generated code for +/// serializing the contract state. +/// +/// If `low_level` is set, the signature must contain an extra argument of type +/// `&mut ContractState` found in `concordium-std`, which gives access to +/// manipulating the contract state bytes directly. This means there is no need +/// to return the contract state and the return type becomes `InitResult<()>`. +/// +/// ### Example +/// ```ignore +/// #[init(contract = "my_contract", low_level)] +/// fn some_init(ctx: &impl HasInitContext, state: &mut ContractState) -> InitResult<()> {...} +/// ``` +/// +/// ## `parameter=""`: Generate schema for parameter +/// To make schema generation to include the parameter for this function, add +/// the attribute `parameter` and set it equal to a string literal containing +/// the name of the type used for the parameter. The parameter type must +/// implement the SchemaType trait, which for most cases can be derived +/// automatically. +/// +/// ### Example +/// ```ignore +/// #[derive(SchemaType)] +/// struct MyParam { ... } +/// +/// #[init(contract = "my_contract", parameter = "MyParam")] +/// ``` +#[proc_macro_attribute] +pub fn init(attr: TokenStream, item: TokenStream) -> TokenStream { + unwrap_or_report(init_worker(attr, item)) +} + +fn init_worker(attr: TokenStream, item: TokenStream) -> syn::Result { + let attrs = Punctuated::::parse_terminated.parse(attr)?; + + let contract_name = get_attribute_value(attrs.iter(), "contract")?.ok_or_else(|| { + syn::Error::new( + Span::call_site(), + "A name for the contract must be provided, using the contract attribute. For example, \ + #[init(contract = \"my-contract\")]", + ) + })?; + + let ast: syn::ItemFn = + attach_error(syn::parse(item), "#[init] can only be applied to functions.")?; + + let fn_name = &ast.sig.ident; + let rust_export_fn_name = format_ident!("export_{}", fn_name); + let wasm_export_fn_name = format!("init_{}", contract_name.value()); + + if let Err(e) = ContractName::is_valid_contract_name(&wasm_export_fn_name) { + return Err(syn::Error::new(contract_name.span(), e)); + } + + let amount_ident = format_ident!("amount"); + + // Accumulate a list of required arguments, if the function contains a + // different number of arguments, than elements in this vector, then the + // strings are displayed as the expected arguments. + let mut required_args = vec!["ctx: &impl HasInitContext"]; + + let (setup_fn_optional_args, fn_optional_args) = + contract_function_optional_args_tokens(&attrs, &amount_ident, &mut required_args); + + let mut out = if contains_attribute(attrs.iter(), "low_level") { + required_args.push("state: ContractState"); + quote! { + #[export_name = #wasm_export_fn_name] + pub extern "C" fn #rust_export_fn_name(#amount_ident: hacspec_concordium::Amount) -> i32 { + use hacspec_concordium::{trap, ExternContext, InitContextExtern, ContractState}; + #setup_fn_optional_args + let ctx = ExternContext::::open(()); + let mut state = ContractState::open(()); + match #fn_name(&ctx, #(#fn_optional_args, )* &mut state) { + Ok(()) => 0, + Err(reject) => { + let code = Reject::from(reject).error_code.get(); + if code < 0 { + code + } else { + trap() // precondition violation + } + } + } + } + } + } else { + quote! { + #[export_name = #wasm_export_fn_name] + pub extern "C" fn #rust_export_fn_name(amount: hacspec_concordium::Amount) -> i32 { + use hacspec_concordium::{trap, ExternContext, InitContextExtern, ContractState}; + #setup_fn_optional_args + let ctx = ExternContext::::open(()); + match #fn_name(&ctx, #(#fn_optional_args),*) { + Ok(state) => { + let mut state_bytes = ContractState::open(()); + if state.serial(&mut state_bytes).is_err() { + trap() // Could not initialize contract. + }; + 0 + } + Err(reject) => { + let code = Reject::from(reject).error_code.get(); + if code < 0 { + code + } else { + trap() // precondition violation + } + } + } + } + } + }; + + let arg_count = ast.sig.inputs.len(); + if arg_count != required_args.len() { + return Err(syn::Error::new( + ast.sig.inputs.span(), + format!( + "Incorrect number of function arguments, the expected arguments are ({}) ", + required_args.join(", ") + ), + )); + } + + // Embed schema if 'parameter' attribute is set + let parameter_option = get_attribute_value(attrs.iter(), "parameter")?.map(|a| a.value()); + out.extend(contract_function_schema_tokens( + parameter_option, + rust_export_fn_name, + wasm_export_fn_name, + )); + + ast.to_tokens(&mut out); + + Ok(out.into()) +} + +/// Derive the appropriate export for an annotated receive function. +/// +/// This macro requires the following items to be present +/// - `contract = ""` where *\* is the name of +/// the smart contract. +/// - `name = ""` where *\* is the name of the +/// receive function. The generated function is exported as +/// `.`. Contract name and receive name is +/// required to be unique in the module. +/// +/// The annotated function must be of a specific type, which depends on the +/// enabled attributes. *Without* any of the optional attributes the function +/// must have a signature of +/// +/// ```ignore +/// #[receive(contract = "my_contract", name = "some_receive")] +/// fn contract_receive(ctx: &impl HasReceiveContext, state: &mut MyState) -> ReceiveResult {...} +/// ``` +/// +/// Where the `HasAction`, `HasReceiveContext` traits and the type +/// `ReceiveResult` are exposed from `concordium-std` and `MyState` is the +/// user-defined type for the contract state. +/// +/// # Optional attributes +/// +/// ## `payable`: Make function accept an amount of GTU +/// Without setting the `payable` attribute, the function will reject any +/// non-zero amount of GTU, supplied with the transaction. This means we are +/// required to explicitly mark our functions as `payable`, if they are to +/// accept GTU. +/// +/// Setting the `payable` attribute changes the required signature to include an +/// extra argument of type `Amount`, allowing the function to access the amount +/// of GTU supplied with the transaction. +/// +/// ### Example +/// ```ignore +/// #[receive(contract = "my_contract", name = "some_receive", payable)] +/// fn contract_receive(ctx: &impl HasReceiveContext, amount: Amount, state: &mut MyState) -> ReceiveResult {...} +/// ``` +/// +/// ## `enable_logger`: Function can access event logging +/// Setting the `enable_logger` attribute changes the required signature to +/// include an extra argument `&mut impl HasLogger`, allowing the function to +/// log events. +/// +/// +/// ### Example +/// ```ignore +/// #[receive(contract = "my_contract", name = "some_receive", enable_logger)] +/// fn contract_receive(ctx: &impl HasReceiveContext, logger: &mut impl HasLogger, state: &mut MyState) -> ReceiveResult {...} +/// ``` +/// +/// ## `low_level`: Manually deal with writing state bytes +/// Setting the `low_level` attribute disables the generated code for +/// serializing the contract state. +/// +/// If `low_level` is set, instead of the user-defined state type in the +/// signature, the state argument becomes the type `&mut ContractState` found in +/// `concordium-std`, which gives access to manipulating the contract state +/// bytes directly. +/// +/// ### Example +/// ```ignore +/// #[receive(contract = "my_contract", name = "some_receive", low_level)] +/// fn contract_receive(ctx: &impl HasReceiveContext, state: &mut ContractState) -> ReceiveResult {...} +/// ``` +/// +/// ## `parameter=""`: Generate schema for parameter +/// To make schema generation include the parameter for this function, add +/// the attribute `parameter` and set it equal to a string literal containing +/// the name of the type used for the parameter. The parameter type must +/// implement the SchemaType trait, which for most cases can be derived +/// automatically. +/// +/// ### Example +/// ```ignore +/// #[derive(SchemaType)] +/// struct MyParam { ... } +/// +/// #[receive(contract = "my_contract", name = "some_receive", parameter = "MyParam")] +/// fn contract_receive(ctx: &impl HasReceiveContext, state: &mut MyState) -> ReceiveResult {...} +/// ``` +#[proc_macro_attribute] +pub fn receive(attr: TokenStream, item: TokenStream) -> TokenStream { + unwrap_or_report(receive_worker(attr, item)) +} + +fn receive_worker(attr: TokenStream, item: TokenStream) -> syn::Result { + let attrs = Punctuated::::parse_terminated.parse(attr)?; + + let contract_name = get_attribute_value(attrs.iter(), "contract")?.ok_or_else(|| { + syn::Error::new( + Span::call_site(), + "The name of the associated contract must be provided, using the 'contract' \ + attribute.\n\nFor example, #[receive(contract = \"my-contract\")]", + ) + })?; + + let name = get_attribute_value(attrs.iter(), "name")?.ok_or_else(|| { + syn::Error::new( + Span::call_site(), + "A name for the receive function must be provided, using the 'name' attribute.\n\nFor \ + example, #[receive(name = \"func-name\", ...)]", + ) + })?; + + let ast: syn::ItemFn = + attach_error(syn::parse(item), "#[receive] can only be applied to functions.")?; + + let fn_name = &ast.sig.ident; + let rust_export_fn_name = format_ident!("export_{}", fn_name); + let wasm_export_fn_name = format!("{}.{}", contract_name.value(), name.value()); + + // Validate the contract name independently to ensure that it doesn't contain a + // '.' as this causes a subtle error when receive names are being split. + let contract_name_validation = + ContractName::is_valid_contract_name(&format!("init_{}", contract_name.value())) + .map_err(|e| syn::Error::new(contract_name.span(), e)); + + let receive_name_validation = ReceiveName::is_valid_receive_name(&wasm_export_fn_name) + .map_err(|e| syn::Error::new(name.span(), e)); + + match (contract_name_validation, receive_name_validation) { + (Err(mut e0), Err(e1)) => { + e0.combine(e1); + return Err(e0); + } + (Err(e), _) => return Err(e), + (_, Err(e)) => return Err(e), + _ => (), + }; + + let amount_ident = format_ident!("amount"); + + // Accumulate a list of required arguments, if the function contains a + // different number of arguments, than elements in this vector, then the + // strings are displayed as the expected arguments. + let mut required_args = vec!["ctx: &impl HasReceiveContext"]; + + let (setup_fn_optional_args, fn_optional_args) = + contract_function_optional_args_tokens(&attrs, &amount_ident, &mut required_args); + + let mut out = if contains_attribute(&attrs, "low_level") { + required_args.push("state: ContractState"); + quote! { + #[export_name = #wasm_export_fn_name] + pub extern "C" fn #rust_export_fn_name(#amount_ident: hacspec_concordium::Amount) -> i32 { + use hacspec_concordium::{SeekFrom, ContractState, Logger, ReceiveContextExtern, ExternContext}; + #setup_fn_optional_args + let ctx = ExternContext::::open(()); + let mut state = ContractState::open(()); + let res: Result<(Action, _), _> = #fn_name(&ctx, #(#fn_optional_args, )* state); + match res { + Ok((act, state_res)) => { + state = state_res; + act.tag() as i32 + } + Err(reject) => { + let code = Reject::from(reject).error_code.get(); + if code < 0 { + code + } else { + trap() // precondition violation + } + } + } + } + } + } else { + required_args.push("state: MyState"); + + quote! { + #[export_name = #wasm_export_fn_name] + pub extern "C" fn #rust_export_fn_name(#amount_ident: hacspec_concordium::Amount) -> i32 { + use hacspec_concordium::{SeekFrom, ContractState, Logger, trap}; + #setup_fn_optional_args + let ctx = ExternContext::::open(()); + let mut state_bytes = ContractState::open(()); + if let Ok(mut state) = (&mut state_bytes).get() { + let res : Result<(Action, _), _> = #fn_name(&ctx, #(#fn_optional_args, )* state); + match res { + Ok((act, state_res)) => { + state = state_res; + let res = state_bytes + .seek(SeekFrom::Start(0)) + .and_then(|_| state.serial(&mut state_bytes)); + if res.is_err() { + trap() // could not serialize state. + } else { + act.tag() as i32 + } + } + Err(reject) => { + let code = Reject::from(reject).error_code.get(); + if code < 0 { + code + } else { + trap() // precondition violation + } + } + } + } else { + trap() // Could not fully read state. + } + } + } + }; + + let arg_count = ast.sig.inputs.len(); + if arg_count != required_args.len() { + return Err(syn::Error::new( + ast.sig.inputs.span(), + format!( + "Incorrect number of function arguments, the expected arguments are ({}) ", + required_args.join(", ") + ), + )); + } + + // Embed schema if 'parameter' attribute is set + let parameter_option = get_attribute_value(attrs.iter(), "parameter")?.map(|a| a.value()); + out.extend(contract_function_schema_tokens( + parameter_option, + rust_export_fn_name, + wasm_export_fn_name, + )); + // add the original function to the output as well. + ast.to_tokens(&mut out); + Ok(out.into()) +} + +/// Generate tokens for some of the optional arguments, based on the attributes. +/// Returns a pair, where the first entry is tokens for setting up the arguments +/// and the second entry is a Vec of the argument names as tokens. +/// +/// It also mutates a vector of required arguments with the expected type +/// signature of each. +fn contract_function_optional_args_tokens<'a, I: Copy + IntoIterator>( + attrs: I, + amount_ident: &syn::Ident, + required_args: &mut Vec<&str>, +) -> (proc_macro2::TokenStream, Vec) { + let mut setup_fn_args = proc_macro2::TokenStream::new(); + let mut fn_args = vec![]; + if contains_attribute(attrs, "payable") { + required_args.push("amount: Amount"); + fn_args.push(quote!(#amount_ident)); + } else { + setup_fn_args.extend(quote! { + if #amount_ident.micro_ccd != 0 { + return -1; + } + }); + }; + + if contains_attribute(attrs, "enable_logger") { + required_args.push("logger: impl HasLogger"); + let logger_ident = format_ident!("logger"); + setup_fn_args.extend(quote!(let mut #logger_ident = hacspec_concordium::Logger::init();)); + fn_args.push(quote!(&mut #logger_ident)); + } + (setup_fn_args, fn_args) +} + +#[cfg(feature = "build-schema")] +fn contract_function_schema_tokens( + parameter_option: Option, + rust_name: syn::Ident, + wasm_name: String, +) -> proc_macro2::TokenStream { + match parameter_option { + Some(parameter_ty) => { + let parameter_ident = syn::Ident::new(¶meter_ty, Span::call_site()); + let schema_name = format!("concordium_schema_function_{}", wasm_name); + let schema_ident = format_ident!("concordium_schema_function_{}", rust_name); + quote! { + #[export_name = #schema_name] + pub extern "C" fn #schema_ident() -> *mut u8 { + let schema = <#parameter_ident as schema::SchemaType>::get_type(); + let schema_bytes = hacspec_concordium::to_bytes(&schema); + hacspec_concordium::put_in_memory(&schema_bytes) + } + } + } + None => proc_macro2::TokenStream::new(), + } +} + +#[cfg(not(feature = "build-schema"))] +fn contract_function_schema_tokens( + _parameter_option: Option, + _rust_name: syn::Ident, + _wasm_name: String, +) -> proc_macro2::TokenStream { + proc_macro2::TokenStream::new() +} + +/// Derive the Deserial trait. See the documentation of `derive(Serial)` for +/// details and limitations. +/// +/// In addition to the attributes supported by `derive(Serial)`, this derivation +/// macro supports the `ensure_ordered` attribute. If applied to a field the +/// of type `BTreeMap` or `BTreeSet` deserialization will additionally ensure +/// that the keys are in strictly increasing order. By default deserialization +/// only ensures uniqueness. +/// +/// # Example +/// ``` ignore +/// #[derive(Deserial)] +/// struct Foo { +/// #[concordium(size_length = 1, ensure_ordered)] +/// bar: BTreeSet, +/// } +/// ``` +#[proc_macro_derive(Deserial, attributes(concordium))] +pub fn deserial_derive(input: TokenStream) -> TokenStream { + let ast = parse_macro_input!(input); + unwrap_or_report(impl_deserial(&ast)) +} + +/// The prefix used in field attributes: `#[concordium(attr = "something")]` +const CONCORDIUM_FIELD_ATTRIBUTE: &str = "concordium"; + +/// A list of valid concordium field attributes +const VALID_CONCORDIUM_FIELD_ATTRIBUTES: [&str; 3] = ["size_length", "ensure_ordered", "rename"]; + +fn get_concordium_field_attributes(attributes: &[syn::Attribute]) -> syn::Result> { + attributes + .iter() + // Keep only concordium attributes + .flat_map(|attr| match attr.parse_meta() { + Ok(syn::Meta::List(list)) if list.path.is_ident(CONCORDIUM_FIELD_ATTRIBUTE) => { + list.nested + } + _ => syn::punctuated::Punctuated::new(), + }) + // Ensure only valid attributes and unwrap NestedMeta + .map(|nested| match nested { + syn::NestedMeta::Meta(meta) => { + let path = meta.path(); + if VALID_CONCORDIUM_FIELD_ATTRIBUTES.iter().any(|&attr| path.is_ident(attr)) { + Ok(meta) + } else { + Err(syn::Error::new(meta.span(), + format!("The attribute '{}' is not supported as a concordium field attribute.", + path.to_token_stream()) + )) + } + } + lit => Err(syn::Error::new(lit.span(), "Literals are not supported in a concordium field attribute.")), + }) + .collect() +} + +fn find_field_attribute_value( + attributes: &[syn::Attribute], + target_attr: &str, +) -> syn::Result> { + let target_attr = format_ident!("{}", target_attr); + let attr_values: Vec<_> = get_concordium_field_attributes(attributes)? + .into_iter() + .filter_map(|nested_meta| match nested_meta { + syn::Meta::NameValue(value) if value.path.is_ident(&target_attr) => Some(value.lit), + _ => None, + }) + .collect(); + if attr_values.is_empty() { + return Ok(None); + } + if attr_values.len() > 1 { + let mut init_error = syn::Error::new( + attr_values[1].span(), + format!("Attribute '{}' should only be specified once.", target_attr), + ); + for other in attr_values.iter().skip(2) { + init_error.combine(syn::Error::new( + other.span(), + format!("Attribute '{}' should only be specified once.", target_attr), + )) + } + Err(init_error) + } else { + Ok(Some(attr_values[0].clone())) + } +} + +fn find_length_attribute(attributes: &[syn::Attribute]) -> syn::Result> { + let value = match find_field_attribute_value(attributes, "size_length")? { + Some(v) => v, + None => return Ok(None), + }; + + // Save the span to be used in errors. + let value_span = value.span(); + + let value = match value { + syn::Lit::Int(int) => int, + _ => return Err(syn::Error::new(value_span, "Length attribute value must be an integer.")), + }; + let value = match value.base10_parse() { + Ok(v) => v, + _ => { + return Err(syn::Error::new( + value_span, + "Length attribute value must be a base 10 integer.", + )) + } + }; + match value { + 1 | 2 | 4 | 8 => Ok(Some(value)), + _ => Err(syn::Error::new(value_span, "Length info must be either 1, 2, 4, or 8.")), + } +} + +/// Find a 'rename' attribute and return its value and span. +/// Checks that the attribute is only defined once and that the value is a +/// string. +#[cfg(feature = "build-schema")] +fn find_rename_attribute(attributes: &[syn::Attribute]) -> syn::Result> { + let value = match find_field_attribute_value(attributes, "rename")? { + Some(v) => v, + None => return Ok(None), + }; + + match value { + syn::Lit::Str(value) => Ok(Some((value.value(), value.span()))), + _ => Err(syn::Error::new(value.span(), "Rename attribute value must be a string.")), + } +} + +/// Check for name collisions by inserting the name in the HashMap. +/// On collisions it returns a combined error pointing to the previous and new +/// definition. +#[cfg(feature = "build-schema")] +fn check_for_name_collisions( + used_names: &mut HashMap, + new_name: &str, + new_span: Span, +) -> syn::Result<()> { + if let Some(used_span) = used_names.insert(String::from(new_name), new_span) { + let error_msg = format!("the name `{}` is defined multiple times", new_name); + let mut error_at_first_def = syn::Error::new(used_span, &error_msg); + let error_at_second_def = syn::Error::new(new_span, &error_msg); + + // Combine the errors to show both at once + error_at_first_def.combine(error_at_second_def); + + return Err(error_at_first_def); + } + Ok(()) +} + +fn impl_deserial_field( + f: &syn::Field, + ident: &syn::Ident, + source: &syn::Ident, +) -> syn::Result { + let concordium_attributes = get_concordium_field_attributes(&f.attrs)?; + let ensure_ordered = contains_attribute(&concordium_attributes, "ensure_ordered"); + let size_length = find_length_attribute(&f.attrs)?; + let has_ctx = ensure_ordered || size_length.is_some(); + let ty = &f.ty; + if has_ctx { + // Default size length is u32, i.e. 4 bytes. + let l = format_ident!("U{}", 8 * size_length.unwrap_or(4)); + Ok(quote! { + let #ident = <#ty as hacspec_concordium::DeserialCtx>::deserial_ctx(hacspec_concordium::schema::SizeLength::#l, #ensure_ordered, #source)?; + }) + } else { + Ok(quote! { + let #ident = <#ty as Deserial>::deserial(#source)?; + }) + } +} + +fn impl_deserial(ast: &syn::DeriveInput) -> syn::Result { + let data_name = &ast.ident; + + let span = ast.span(); + + let read_ident = format_ident!("__R", span = span); + + let (impl_generics, ty_generics, where_clauses) = ast.generics.split_for_impl(); + + let source_ident = Ident::new("source", Span::call_site()); + + let body_tokens = match ast.data { + syn::Data::Struct(ref data) => { + let mut names = proc_macro2::TokenStream::new(); + let mut field_tokens = proc_macro2::TokenStream::new(); + let return_tokens = match data.fields { + syn::Fields::Named(_) => { + for field in data.fields.iter() { + let field_ident = field.ident.clone().unwrap(); // safe since named fields. + field_tokens.extend(impl_deserial_field( + field, + &field_ident, + &source_ident, + )); + names.extend(quote!(#field_ident,)) + } + quote!(Ok(#data_name{#names})) + } + syn::Fields::Unnamed(_) => { + for (i, f) in data.fields.iter().enumerate() { + let field_ident = format_ident!("x_{}", i); + field_tokens.extend(impl_deserial_field(f, &field_ident, &source_ident)); + names.extend(quote!(#field_ident,)) + } + quote!(Ok(#data_name(#names))) + } + _ => quote!(Ok(#data_name{})), + }; + quote! { + #field_tokens + #return_tokens + } + } + syn::Data::Enum(ref data) => { + let mut matches_tokens = proc_macro2::TokenStream::new(); + let source = Ident::new("source", Span::call_site()); + let size = if data.variants.len() <= 256 { + format_ident!("u8") + } else if data.variants.len() <= 256 * 256 { + format_ident!("u16") + } else { + return Err(syn::Error::new( + ast.span(), + "[derive(Deserial)]: Too many variants. Maximum 65536 are supported.", + )); + }; + for (i, variant) in data.variants.iter().enumerate() { + let (field_names, pattern) = match variant.fields { + syn::Fields::Named(_) => { + let field_names: Vec<_> = variant + .fields + .iter() + .map(|field| field.ident.clone().unwrap()) + .collect(); + (field_names.clone(), quote! { {#(#field_names),*} }) + } + syn::Fields::Unnamed(_) => { + let field_names: Vec<_> = variant + .fields + .iter() + .enumerate() + .map(|(i, _)| format_ident!("x_{}", i)) + .collect(); + (field_names.clone(), quote! { ( #(#field_names),* ) }) + } + syn::Fields::Unit => (Vec::new(), proc_macro2::TokenStream::new()), + }; + + let field_tokens: proc_macro2::TokenStream = field_names + .iter() + .zip(variant.fields.iter()) + .map(|(name, field)| impl_deserial_field(field, name, &source)) + .collect::>()?; + let idx_lit = syn::LitInt::new(i.to_string().as_str(), Span::call_site()); + let variant_ident = &variant.ident; + matches_tokens.extend(quote! { + #idx_lit => { + #field_tokens + Ok(#data_name::#variant_ident#pattern) + }, + }) + } + quote! { + let idx = #size::deserial(#source)?; + match idx { + #matches_tokens + _ => Err(Default::default()) + } + } + } + _ => unimplemented!("#[derive(Deserial)] is not implemented for union."), + }; + let gen = quote! { + #[automatically_derived] + impl #impl_generics Deserial for #data_name #ty_generics #where_clauses { + fn deserial<#read_ident: Read>(#source_ident: &mut #read_ident) -> ParseResult { + #body_tokens + } + } + }; + Ok(gen.into()) +} + +/// Derive the Serial trait for the type. +/// +/// If the type is a struct all fields must implement the Serial trait. If the +/// type is an enum then all fields of each of the enums must implement the +/// Serial trait. +/// +/// +/// Collections (Vec, BTreeMap, BTreeSet) and strings (String, str) are by +/// default serialized by prepending the number of elements as 4 bytes +/// little-endian. If this is too much or too little, fields of the above types +/// can be annotated with `size_length`. +/// +/// The value of this field is the number of bytes that will be used for +/// encoding the number of elements. Supported values are 1, 2, 4, 8. +/// +/// For BTreeMap and BTreeSet the serialize method will serialize values in +/// increasing order of keys. +/// +/// Fields of structs are serialized in the order they appear in the code. +/// +/// Enums can have no more than 65536 variants. They are serialized by using a +/// tag to indicate the variant, enumerating them in the order they are written +/// in source code. If the number of variants is less than or equal 256 then a +/// single byte is used to encode it. Otherwise two bytes are used for the tag, +/// encoded in little endian. +/// +/// # Example +/// ```ignore +/// #[derive(Serial)] +/// struct Foo { +/// #[concordium(size_length = 1)] +/// bar: BTreeSet, +/// } +/// ``` +#[proc_macro_derive(Serial, attributes(concordium))] +pub fn serial_derive(input: TokenStream) -> TokenStream { + let ast = parse_macro_input!(input); + unwrap_or_report(impl_serial(&ast)) +} + +fn impl_serial_field( + field: &syn::Field, + ident: &proc_macro2::TokenStream, + out: &syn::Ident, +) -> syn::Result { + if let Some(size_length) = find_length_attribute(&field.attrs)? { + let l = format_ident!("U{}", 8 * size_length); + Ok(quote!({ + use hacspec_concordium::SerialCtx; + #ident.serial_ctx(hacspec_concordium::schema::SizeLength::#l, #out)?; + })) + } else { + Ok(quote! { + #ident.serial(#out)?; + }) + } +} + +fn impl_serial(ast: &syn::DeriveInput) -> syn::Result { + let data_name = &ast.ident; + + let span = ast.span(); + + let write_ident = format_ident!("W", span = span); + + let (impl_generics, ty_generics, where_clauses) = ast.generics.split_for_impl(); + + let out_ident = format_ident!("out"); + + let body = match ast.data { + syn::Data::Struct(ref data) => { + let fields_tokens = match data.fields { + syn::Fields::Named(_) => { + data.fields + .iter() + .map(|field| { + let field_ident = field.ident.clone().unwrap(); // safe since named fields. + let field_ident = quote!(self.#field_ident); + impl_serial_field(field, &field_ident, &out_ident) + }) + .collect::>()? + } + syn::Fields::Unnamed(_) => data + .fields + .iter() + .enumerate() + .map(|(i, field)| { + let i = syn::LitInt::new(i.to_string().as_str(), Span::call_site()); + let field_ident = quote!(self.#i); + impl_serial_field(field, &field_ident, &out_ident) + }) + .collect::>()?, + syn::Fields::Unit => proc_macro2::TokenStream::new(), + }; + quote! { + #fields_tokens + Ok(()) + } + } + syn::Data::Enum(ref data) => { + let mut matches_tokens = proc_macro2::TokenStream::new(); + + let size = if data.variants.len() <= 256 { + format_ident!("u8") + } else if data.variants.len() <= 256 * 256 { + format_ident!("u16") + } else { + unimplemented!( + "[derive(Serial)]: Enums with more than 65536 variants are not supported." + ); + }; + + for (i, variant) in data.variants.iter().enumerate() { + let (field_names, pattern) = match variant.fields { + syn::Fields::Named(_) => { + let field_names: Vec<_> = variant + .fields + .iter() + .map(|field| field.ident.clone().unwrap()) + .collect(); + (field_names.clone(), quote! { {#(#field_names),*} }) + } + syn::Fields::Unnamed(_) => { + let field_names: Vec<_> = variant + .fields + .iter() + .enumerate() + .map(|(i, _)| format_ident!("x_{}", i)) + .collect(); + (field_names.clone(), quote! { (#(#field_names),*) }) + } + syn::Fields::Unit => (Vec::new(), proc_macro2::TokenStream::new()), + }; + let field_tokens: proc_macro2::TokenStream = field_names + .iter() + .zip(variant.fields.iter()) + .map(|(name, field)| impl_serial_field(field, "e!(#name), &out_ident)) + .collect::>()?; + + let idx_lit = + syn::LitInt::new(format!("{}{}", i, size).as_str(), Span::call_site()); + let variant_ident = &variant.ident; + + matches_tokens.extend(quote! { + #data_name::#variant_ident#pattern => { + #idx_lit.serial(#out_ident)?; + #field_tokens + }, + }) + } + quote! { + match self { + #matches_tokens + } + Ok(()) + } + } + _ => unimplemented!("#[derive(Serial)] is not implemented for union."), + }; + + let gen = quote! { + #[automatically_derived] + impl #impl_generics Serial for #data_name #ty_generics #where_clauses { + fn serial<#write_ident: Write>(&self, #out_ident: &mut #write_ident) -> Result<(), #write_ident::Err> { + #body + } + } + }; + Ok(gen.into()) +} + +/// A helper macro to derive both the Serial and Deserial traits. +/// `[derive(Serialize)]` is equivalent to `[derive(Serial,Deserial)]`, see +/// documentation of the latter two for details and options. +#[proc_macro_derive(Serialize, attributes(concordium))] +pub fn serialize_derive(input: TokenStream) -> TokenStream { + unwrap_or_report(serialize_derive_worker(input)) +} + +fn serialize_derive_worker(input: TokenStream) -> syn::Result { + let ast = syn::parse(input)?; + let mut tokens = impl_deserial(&ast)?; + tokens.extend(impl_serial(&ast)?); + Ok(tokens) +} + +/// Marks a type as the contract state. Currently only used for generating the +/// schema of the contract state. If the feature `build-schema` is not enabled +/// this has no effect. +/// +/// +/// # Example +/// ```ignore +/// #[contract_state(contract = "my_contract")] +/// #[derive(SchemaType)] +/// struct MyContractState { +/// ... +/// } +/// ``` +#[proc_macro_attribute] +pub fn contract_state(attr: TokenStream, item: TokenStream) -> TokenStream { + unwrap_or_report(contract_state_worker(attr, item)) +} + +#[cfg(feature = "build-schema")] +fn contract_state_worker(attr: TokenStream, item: TokenStream) -> syn::Result { + let mut out = proc_macro2::TokenStream::new(); + + let data_ident = if let Ok(ast) = syn::parse::(item.clone()) { + ast.to_tokens(&mut out); + ast.ident + } else if let Ok(ast) = syn::parse::(item.clone()) { + ast.to_tokens(&mut out); + ast.ident + } else if let Ok(ast) = syn::parse::(item.clone()) { + ast.to_tokens(&mut out); + ast.ident + } else { + return Err(syn::Error::new_spanned( + proc_macro2::TokenStream::from(item), + "#[contract_state] only supports structs, enums and type aliases.", + )); + }; + + let attrs = Punctuated::::parse_terminated.parse(attr)?; + + let contract_name = get_attribute_value(attrs.iter(), "contract")?.ok_or_else(|| { + syn::Error::new( + Span::call_site(), + "A name of the contract must be provided, using the 'contract' attribute.\n\nFor \ + example #[contract_state(contract = \"my-contract\")].", + ) + })?; + + let wasm_schema_name = format!("concordium_schema_state_{}", contract_name.value()); + let rust_schema_name = format_ident!("concordium_schema_state_{}", data_ident); + + let generate_schema_tokens = quote! { + #[allow(non_snake_case)] + #[export_name = #wasm_schema_name] + pub extern "C" fn #rust_schema_name() -> *mut u8 { + let schema = <#data_ident as hacspec_concordium::schema::SchemaType>::get_type(); + let schema_bytes = hacspec_concordium::to_bytes(&schema); + hacspec_concordium::put_in_memory(&schema_bytes) + } + }; + generate_schema_tokens.to_tokens(&mut out); + Ok(out.into()) +} + +#[cfg(not(feature = "build-schema"))] +fn contract_state_worker(_attr: TokenStream, item: TokenStream) -> syn::Result { + Ok(item) +} + +/// Derive the `SchemaType` trait for a type. +/// If the feature `build-schema` is not enabled this is a no-op, i.e., it does +/// not produce any code. +#[proc_macro_derive(SchemaType, attributes(size_length))] +pub fn schema_type_derive(input: TokenStream) -> TokenStream { + unwrap_or_report(schema_type_derive_worker(input)) +} + +#[cfg(feature = "build-schema")] +fn schema_type_derive_worker(input: TokenStream) -> syn::Result { + let ast: syn::DeriveInput = syn::parse(input)?; + + let data_name = &ast.ident; + + let body = match ast.data { + syn::Data::Struct(ref data) => { + let fields_tokens = schema_type_fields(&data.fields)?; + quote! { + hacspec_concordium::schema::Type::Struct(#fields_tokens) + } + } + syn::Data::Enum(ref data) => { + let mut used_variant_names = HashMap::new(); + let variant_tokens: Vec<_> = data + .variants + .iter() + .map(|variant| { + // Handle the 'rename' attribute. + let (variant_name, variant_span) = match find_rename_attribute(&variant.attrs)? + { + Some(name_and_span) => name_and_span, + None => (variant.ident.to_string(), variant.ident.span()), + }; + check_for_name_collisions( + &mut used_variant_names, + &variant_name, + variant_span, + )?; + + let fields_tokens = schema_type_fields(&variant.fields)?; + Ok(quote! { + (hacspec_concordium::String::from(#variant_name), #fields_tokens) + }) + }) + .collect::>()?; + quote! { + hacspec_concordium::schema::Type::Enum(hacspec_concordium::Vec::from([ #(#variant_tokens),* ])) + } + } + _ => syn::Error::new(ast.span(), "Union is not supported").to_compile_error(), + }; + + let out = quote! { + #[automatically_derived] + impl hacspec_concordium::schema::SchemaType for #data_name { + fn get_type() -> hacspec_concordium::schema::Type { + #body + } + } + }; + Ok(out.into()) +} + +#[cfg(not(feature = "build-schema"))] +fn schema_type_derive_worker(_input: TokenStream) -> syn::Result { + Ok(TokenStream::new()) +} + +#[cfg(feature = "build-schema")] +fn schema_type_field_type(field: &syn::Field) -> syn::Result { + let field_type = &field.ty; + if let Some(l) = find_length_attribute(&field.attrs)? { + let size = format_ident!("U{}", 8 * l); + Ok(quote! { + <#field_type as hacspec_concordium::schema::SchemaType>::get_type().set_size_length(hacspec_concordium::schema::SizeLength::#size) + }) + } else { + Ok(quote! { + <#field_type as hacspec_concordium::schema::SchemaType>::get_type() + }) + } +} + +#[cfg(feature = "build-schema")] +fn schema_type_fields(fields: &syn::Fields) -> syn::Result { + match fields { + syn::Fields::Named(_) => { + let mut used_field_names = HashMap::new(); + let fields_tokens: Vec<_> = fields + .iter() + .map(|field| { + // Handle the 'rename' attribute. + let (field_name, field_span) = match find_rename_attribute(&field.attrs)? { + Some(name_and_span) => name_and_span, + None => (field.ident.clone().unwrap().to_string(), field.ident.span()), // safe since named fields. + }; + check_for_name_collisions(&mut used_field_names, &field_name, field_span)?; + + let field_schema_type = schema_type_field_type(&field)?; + Ok(quote! { + (hacspec_concordium::String::from(#field_name), #field_schema_type) + }) + }) + .collect::>()?; + Ok( + quote! { hacspec_concordium::schema::Fields::Named(hacspec_concordium::Vec::from([ #(#fields_tokens),* ])) }, + ) + } + syn::Fields::Unnamed(_) => { + let fields_tokens: Vec<_> = + fields.iter().map(schema_type_field_type).collect::>()?; + Ok(quote! { hacspec_concordium::schema::Fields::Unnamed([ #(#fields_tokens),* ].to_vec()) }) + } + syn::Fields::Unit => Ok(quote! { hacspec_concordium::schema::Fields::None }), + } +} + +/// We reserve a number of error codes for custom errors, such as ParseError, +/// that are provided by concordium-std. These reserved error codes can have +/// indices i32::MIN, i32::MIN + 1, ..., RESERVED_ERROR_CODES +const RESERVED_ERROR_CODES: i32 = i32::MIN + 100; + +/// Derive the conversion of enums that represent error types into the Reject +/// struct which can be used as the error type of init and receive functions. +/// Creating custom enums for error types can provide meaningful error messages +/// to the user of the smart contract. +/// +/// Note that at the moment, we can only derive fieldless enums. +/// +/// The conversion will map the first variant to error code -1, second to -2, +/// etc. +/// +/// ### Example +/// ```ignore +/// #[derive(Clone, Copy, Reject)] +/// enum MyError { +/// IllegalState, // receives error code -1 +/// WrongSender, // receives error code -2 +/// // TimeExpired(time: Timestamp), /* currently not supported */ +/// ... +/// } +/// ``` +/// ```ignore +/// #[receive(contract = "my_contract", name = "some_receive")] +/// fn receive(ctx: &impl HasReceiveContext, state: &mut MyState) +/// -> Result {...} +/// ``` +#[proc_macro_derive(Reject, attributes(from))] +pub fn reject_derive(input: TokenStream) -> TokenStream { + unwrap_or_report(reject_derive_worker(input)) +} + +fn reject_derive_worker(input: TokenStream) -> syn::Result { + let ast: syn::DeriveInput = syn::parse(input)?; + let enum_data = match &ast.data { + syn::Data::Enum(data) => Ok(data), + _ => Err(syn::Error::new(ast.span(), "Reject can only be derived for enums.")), + }?; + let enum_ident = &ast.ident; + + // Ensure that the number of enum variants fits into the number of error codes + // we can generate. + let too_many_variants = format!( + "Error enum {} cannot have more than {} variants.", + enum_ident, + RESERVED_ERROR_CODES.neg() + ); + match i32::try_from(enum_data.variants.len()) { + Ok(n) if n <= RESERVED_ERROR_CODES.neg() => (), + _ => { + return Err(syn::Error::new(ast.span(), &too_many_variants)); + } + }; + + let variant_error_conversions = generate_variant_error_conversions(&enum_data, &enum_ident)?; + + let gen = quote! { + /// The from implementation maps the first variant to -1, second to -2, etc. + /// NB: This differs from the cast `variant as i32` since we cannot easily modify + /// the variant tags in the derive macro itself. + #[automatically_derived] + impl From<#enum_ident> for Reject { + #[inline(always)] + fn from(e: #enum_ident) -> Self { + Reject { error_code: unsafe { hacspec_concordium::num::NonZeroI32::new_unchecked(-(e as i32) - 1) } } + } + } + + #(#variant_error_conversions)* + }; + Ok(gen.into()) +} + +/// Generate error conversions for enum variants e.g. for converting +/// `ParseError` to `MyParseErrorWrapper` in +/// +/// ```ignore +/// enum MyErrorType { +/// #[from(ParseError)] +/// MyParseErrorWrapper, +/// ... +/// } +/// ``` +fn generate_variant_error_conversions( + enum_data: &DataEnum, + enum_name: &syn::Ident, +) -> syn::Result> { + Ok(enum_data + .variants + .iter() + .map(|variant| { + // in the future we might incorporate explicit discriminants, + // but the general case of this requires evaluating constant expressions, + // which is not easily supported at the moment. + if let Some((_, discriminant)) = variant.discriminant.as_ref() { + return Err(syn::Error::new( + discriminant.span(), + "Explicit discriminants are not yet supported.", + )); + } + let variant_attributes = variant.attrs.iter(); + variant_attributes + .map(move |attr| { + parse_attr_and_gen_error_conversions(attr, enum_name, &variant.ident) + }) + .collect::>>() + }) + .collect::>>()? + .into_iter() + .flatten() + .flatten() + .collect()) +} + +/// Generate error conversion for a given enum variant. +fn parse_attr_and_gen_error_conversions( + attr: &syn::Attribute, + enum_name: &syn::Ident, + variant_name: &syn::Ident, +) -> syn::Result> { + let wrong_from_usage = |x: &dyn Spanned| { + syn::Error::new( + x.span(), + "The `from` attribute expects a list of error types, e.g.: #[from(ParseError)].", + ) + }; + match attr.parse_meta() { + Ok(syn::Meta::List(list)) if list.path.is_ident("from") => { + let mut from_error_names = vec![]; + for nested in list.nested.iter() { + // check that all items in the list are paths + match nested { + syn::NestedMeta::Meta(meta) => match meta { + Meta::Path(from_error) => { + let ident = from_error + .get_ident() + .ok_or_else(|| wrong_from_usage(from_error))?; + from_error_names.push(ident); + } + other => return Err(wrong_from_usage(&other)), + }, + syn::NestedMeta::Lit(l) => return Err(wrong_from_usage(&l)), + } + } + Ok(from_error_token_stream(&from_error_names, &enum_name, variant_name).collect()) + } + Ok(syn::Meta::NameValue(mnv)) if mnv.path.is_ident("from") => Err(wrong_from_usage(&mnv)), + _ => Ok(vec![]), + } +} + +/// Generating the conversion code a la +/// ```ignore +/// impl From for MyErrorType { +/// fn from(x: ParseError) -> Self { +/// MyError::MyParseErrorWrapper +/// } +/// } +/// ``` +fn from_error_token_stream<'a>( + paths: &'a [&'a syn::Ident], + enum_name: &'a syn::Ident, + variant_name: &'a syn::Ident, +) -> impl Iterator + 'a { + paths.iter().map(move |from_error| { + quote! { + impl From<#from_error> for #enum_name { + #[inline] + fn from(fe: #from_error) -> Self { + #enum_name::#variant_name + } + }} + }) +} + +#[proc_macro_attribute] +/// Derive the appropriate export for an annotated test function, when feature +/// "wasm-test" is enabled, otherwise behaves like `#[test]`. +pub fn concordium_test(attr: TokenStream, item: TokenStream) -> TokenStream { + unwrap_or_report(concordium_test_worker(attr, item)) +} + +/// Derive the appropriate export for an annotated test function, when feature +/// "wasm-test" is enabled, otherwise behaves like `#[test]`. +#[cfg(feature = "wasm-test")] +fn concordium_test_worker(_attr: TokenStream, item: TokenStream) -> syn::Result { + let test_fn_ast: syn::ItemFn = + attach_error(syn::parse(item), "#[concordium_test] can only be applied to functions.")?; + + let test_fn_name = &test_fn_ast.sig.ident; + let rust_export_fn_name = format_ident!("concordium_test_{}", test_fn_name); + let wasm_export_fn_name = format!("concordium_test {}", test_fn_name); + + let test_fn = quote! { + // Setup test function + #test_fn_ast + + // Export test function in wasm + #[export_name = #wasm_export_fn_name] + pub extern "C" fn #rust_export_fn_name() { + #test_fn_name() + } + }; + Ok(test_fn.into()) +} + +/// Derive the appropriate export for an annotated test function, when feature +/// "wasm-test" is enabled, otherwise behaves like `#[test]`. +#[cfg(not(feature = "wasm-test"))] +fn concordium_test_worker(_attr: TokenStream, item: TokenStream) -> syn::Result { + let test_fn_ast: syn::ItemFn = + attach_error(syn::parse(item), "#[concordium_test] can only be applied to functions.")?; + + let test_fn = quote! { + #[test] + #test_fn_ast + }; + Ok(test_fn.into()) +} + +/// Sets the cfg for testing targeting either Wasm and native. +#[cfg(feature = "wasm-test")] +#[proc_macro_attribute] +pub fn concordium_cfg_test(_attr: TokenStream, item: TokenStream) -> TokenStream { item } + +/// Sets the cfg for testing targeting either Wasm and native. +#[cfg(not(feature = "wasm-test"))] +#[proc_macro_attribute] +pub fn concordium_cfg_test(_attr: TokenStream, item: TokenStream) -> TokenStream { + let item = proc_macro2::TokenStream::from(item); + let out = quote! { + #[cfg(test)] + #item + }; + out.into() +} +#+END_SRC + diff --git a/ovn/proofs/ssprove/extraction/.Hacspec_ovn_Ovn_traits.aux b/ovn/proofs/ssprove/extraction/.Hacspec_ovn_Ovn_traits.aux new file mode 100644 index 0000000..751a1ff --- /dev/null +++ b/ovn/proofs/ssprove/extraction/.Hacspec_ovn_Ovn_traits.aux @@ -0,0 +1,2 @@ +COQAUX1 6389834e57e83e53e7170ee795828b05 /home/au538501/Documents/git/specs/ovn/proofs/ssprove/extraction/Hacspec_ovn_Ovn_traits.v +0 0 vo_compile_time "3.821" diff --git a/ovn/proofs/ssprove/extraction/.Makefile.d b/ovn/proofs/ssprove/extraction/.Makefile.d new file mode 100644 index 0000000..daf7469 --- /dev/null +++ b/ovn/proofs/ssprove/extraction/.Makefile.d @@ -0,0 +1,3 @@ +Hacspec_ovn_Ovn_traits.vo Hacspec_ovn_Ovn_traits.glob Hacspec_ovn_Ovn_traits.v.beautified Hacspec_ovn_Ovn_traits.required_vo: Hacspec_ovn_Ovn_traits.v +Hacspec_ovn_Ovn_traits.vio: Hacspec_ovn_Ovn_traits.v +Hacspec_ovn_Ovn_traits.vos Hacspec_ovn_Ovn_traits.vok Hacspec_ovn_Ovn_traits.required_vos: Hacspec_ovn_Ovn_traits.v diff --git a/ovn/proofs/ssprove/extraction/.lia.cache b/ovn/proofs/ssprove/extraction/.lia.cache new file mode 100644 index 0000000..a996572 Binary files /dev/null and b/ovn/proofs/ssprove/extraction/.lia.cache differ diff --git a/ovn/proofs/ssprove/extraction/Hacspec_ovn.v b/ovn/proofs/ssprove/extraction/Hacspec_ovn.v new file mode 100644 index 0000000..1b71fd1 --- /dev/null +++ b/ovn/proofs/ssprove/extraction/Hacspec_ovn.v @@ -0,0 +1,37 @@ +(* File automatically generated by Hacspec *) +From Coq Require Import ZArith. +Require Import List. +Import List.ListNotations. +Open Scope Z_scope. +Open Scope bool_scope. +Require Import Ascii. +Require Import String. +Require Import Coq.Floats.Floats. +From RecordUpdate Require Import RecordSet. +Import RecordSetNotations. +From Crypt Require Import choice_type Package Prelude. +Import PackageNotation. +From extructures Require Import ord fset. +From mathcomp Require Import word_ssrZ word. +Import choice.Choice.Exports. + +From Hacspec Require Import ChoiceEquality. +From Hacspec Require Import LocationUtility. +From Hacspec Require Import Hacspec_Lib_Comparable. +From Hacspec Require Import Hacspec_Lib_Pre. +From Hacspec Require Import Hacspec_Lib. +From Hacspec Require Import ConCertLib. + + + +(* NotImplementedYet *) + +(* NotImplementedYet *) + +(* NotImplementedYet *) + +(* NotImplementedYet *) + +(* NotImplementedYet *) + +(* NotImplementedYet *) diff --git a/ovn/proofs/ssprove/extraction/Hacspec_ovn_Ovn_group.v b/ovn/proofs/ssprove/extraction/Hacspec_ovn_Ovn_group.v new file mode 100644 index 0000000..3879df9 --- /dev/null +++ b/ovn/proofs/ssprove/extraction/Hacspec_ovn_Ovn_group.v @@ -0,0 +1,296 @@ +(* File automatically generated by Hacspec *) +From Coq Require Import ZArith. +Require Import List. +Import List.ListNotations. +Open Scope Z_scope. +Open Scope bool_scope. +Require Import Ascii. +Require Import String. +Require Import Coq.Floats.Floats. +From RecordUpdate Require Import RecordSet. +Import RecordSetNotations. +From Crypt Require Import choice_type Package Prelude. +Import PackageNotation. +From extructures Require Import ord fset. +From mathcomp Require Import word_ssrZ word. +Import choice.Choice.Exports. + +From Hacspec Require Import ChoiceEquality. +From Hacspec Require Import LocationUtility. +From Hacspec Require Import Hacspec_Lib_Comparable. +From Hacspec Require Import Hacspec_Lib_Pre. +From Hacspec Require Import Hacspec_Lib. +From Hacspec Require Import ConCertLib. + + + +(** settable! creates an instance of Settable from a constructor and list of +fields. *) +Local Ltac eta_choice_prod x := + (reflexivity || + destruct x ; + repeat + match goal with + | H : choice.Choice.sort (chElement (_ × _)) |- _ => destruct H + end + ; reflexivity). +Notation "'settable!' mk < f1 ; .. ; fn >" := + (Build_Settable + (fun x => .. (mk (f1 x)) .. (fn x)) + (fun x => _)) (at level 0, mk at level 10, f1, fn at level 9, only parsing). + +From Hacspec_ovn Require Import Hacspec_ovn_Ovn_traits. +Export Hacspec_ovn_Ovn_traits. + +Definition t_TallyParameter : choice_type := + 'unit. +Definition Build_t_TallyParameter : t_TallyParameter := tt. + +Definition t_CastVoteParam `{v_Z : choice_type} `{Hi0 : t_Sized (v_Z)} `{Hi1 : t_Field (v_Z)} : choice_type := + int32 × v_Z × v_Z × v_Z × v_Z × 'bool. +Definition Build_t_CastVoteParam `{v_Z : choice_type} `{Hi0 : t_Sized (v_Z)} `{Hi1 : t_Field (v_Z)} CastVoteParam_f_cvp_i CastVoteParam_f_cvp_xi CastVoteParam_f_cvp_zkp_random_w CastVoteParam_f_cvp_zkp_random_r CastVoteParam_f_cvp_zkp_random_d CastVoteParam_f_cvp_vote : t_CastVoteParam := + (CastVoteParam_f_cvp_i, CastVoteParam_f_cvp_xi,CastVoteParam_f_cvp_zkp_random_w,CastVoteParam_f_cvp_zkp_random_r, CastVoteParam_f_cvp_zkp_random_d, CastVoteParam_f_cvp_vote). +Definition CastVoteParam_f_cvp_i `{v_Z : choice_type} `{Hi0 : t_Sized (v_Z)} `{Hi1 : t_Field (v_Z)} (x : t_CastVoteParam) :32 := + fst(fst(fst(fst(fst(x))))). +Definition CastVoteParam_f_cvp_xi `{v_Z : choice_type} `{Hi0 : t_Sized (v_Z)} `{Hi1 : t_Field (v_Z)} (x : t_CastVoteParam) : v_Z := + snd(fst(fst(fst(fst(x))))). +Definition CastVoteParam_f_cvp_zkp_random_w `{v_Z : choice_type} `{Hi0 : t_Sized (v_Z)} `{Hi1 : t_Field (v_Z)} (x : t_CastVoteParam) : v_Z := + snd(fst(fst(fst(x)))). +Definition CastVoteParam_f_cvp_zkp_random_r `{v_Z : choice_type} `{Hi0 : t_Sized (v_Z)} `{Hi1 : t_Field (v_Z)} (x : t_CastVoteParam) : v_Z := + snd(fst(fst(x))). +Definition CastVoteParam_f_cvp_zkp_random_d `{v_Z : choice_type} `{Hi0 : t_Sized (v_Z)} `{Hi1 : t_Field (v_Z)} (x : t_CastVoteParam) : v_Z := + snd(fst(x)). +Definition CastVoteParam_f_cvp_vote `{v_Z : choice_type} `{Hi0 : t_Sized (v_Z)} `{Hi1 : t_Field (v_Z)} (x : t_CastVoteParam) : 'bool := + snd(x). +#[export] Instance settable_t_CastVoteParam `{v_Z : choice_type} `{Hi0 : t_Sized (v_Z)} `{Hi1 : t_Field (v_Z)} : Settable _ := + settable! (@Build_t_CastVoteParam `{v_Z : choice_type} `{Hi0 : t_Sized (v_Z)} `{Hi1 : t_Field (v_Z)}) . + +Definition t_RegisterParam `{v_Z : choice_type} `{Hi0 : t_Sized (v_Z)} `{Hi1 : t_Field (v_Z)} : choice_type := + t_u32 × v_Z × v_Z.Definition Build_t_RegisterParam `{v_Z : choice_type} `{Hi0 : t_Sized (v_Z)} `{Hi1 : t_Field (v_Z)} : t_RegisterParam := + RegisterParam_f_rp_iRegisterParam_f_rp_xiRegisterParam_f_rp_zkp_random. +Definition RegisterParam_f_rp_i `{v_Z : choice_type} `{Hi0 : t_Sized (v_Z)} `{Hi1 : t_Field (v_Z)} (x : t_RegisterParam) : t_u32 := + fst(fst(x)). +Definition RegisterParam_f_rp_xi `{v_Z : choice_type} `{Hi0 : t_Sized (v_Z)} `{Hi1 : t_Field (v_Z)} (x : t_RegisterParam) : v_Z := + snd(fst(x)). +Definition RegisterParam_f_rp_zkp_random `{v_Z : choice_type} `{Hi0 : t_Sized (v_Z)} `{Hi1 : t_Field (v_Z)} (x : t_RegisterParam) : v_Z := + snd(x). +#[export] Instance settable_t_RegisterParam `{v_Z : choice_type} `{Hi0 : t_Sized (v_Z)} `{Hi1 : t_Field (v_Z)} : Settable _ := + settable! (@Build_t_RegisterParam `{v_Z : choice_type} `{Hi0 : t_Sized (v_Z)} `{Hi1 : t_Field (v_Z)}) . + +Definition sub `{v_Z : choice_type} `{Hi0 : t_Sized (v_Z)} `{Hi1 : t_Field (v_Z)} (x : v_Z) (y : v_Z) : v_Z := + Add_f_add (x) (Neg_f_neg (y)). + +Lemma addC `{v_Z : choice_type} `{Hi0 : t_Sized (v_Z)} `{Hi1 : t_Field (v_Z)} (x : v_Z) (y : v_Z) : + true = true -> + implies (PartialEq_f_ne (x) (Field_f_field_zero (tt))) (fun _ => + PartialEq_f_eq (Add_f_add (x) (y)) (Add_f_add (y) (x))) = true. +Proof. Admitted. + +Definition t_OrZKPCommit `{v_G : choice_type} `{Hi0 : t_Sized (v_G)} `{Hi1 : t_Group (v_G)} : choice_type := + v_G × v_G × v_G × v_G × v_G × v_G × Group_f_Z × Group_f_Z × Group_f_Z × Group_f_Z × Group_f_Z.Definition Build_t_OrZKPCommit `{v_G : choice_type} `{Hi0 : t_Sized (v_G)} `{Hi1 : t_Group (v_G)} : t_OrZKPCommit := + OrZKPCommit_f_or_zkp_xOrZKPCommit_f_or_zkp_yOrZKPCommit_f_or_zkp_a1OrZKPCommit_f_or_zkp_b1OrZKPCommit_f_or_zkp_a2OrZKPCommit_f_or_zkp_b2OrZKPCommit_f_or_zkp_cOrZKPCommit_f_or_zkp_d1OrZKPCommit_f_or_zkp_d2OrZKPCommit_f_or_zkp_r1OrZKPCommit_f_or_zkp_r2. +Definition OrZKPCommit_f_or_zkp_x `{v_G : choice_type} `{Hi0 : t_Sized (v_G)} `{Hi1 : t_Group (v_G)} (x : t_OrZKPCommit) : v_G := + fst(fst(fst(fst(fst(fst(fst(fst(fst(fst(x)))))))))). +Definition OrZKPCommit_f_or_zkp_y `{v_G : choice_type} `{Hi0 : t_Sized (v_G)} `{Hi1 : t_Group (v_G)} (x : t_OrZKPCommit) : v_G := + snd(fst(fst(fst(fst(fst(fst(fst(fst(fst(x)))))))))). +Definition OrZKPCommit_f_or_zkp_a1 `{v_G : choice_type} `{Hi0 : t_Sized (v_G)} `{Hi1 : t_Group (v_G)} (x : t_OrZKPCommit) : v_G := + snd(fst(fst(fst(fst(fst(fst(fst(fst(x))))))))). +Definition OrZKPCommit_f_or_zkp_b1 `{v_G : choice_type} `{Hi0 : t_Sized (v_G)} `{Hi1 : t_Group (v_G)} (x : t_OrZKPCommit) : v_G := + snd(fst(fst(fst(fst(fst(fst(fst(x)))))))). +Definition OrZKPCommit_f_or_zkp_a2 `{v_G : choice_type} `{Hi0 : t_Sized (v_G)} `{Hi1 : t_Group (v_G)} (x : t_OrZKPCommit) : v_G := + snd(fst(fst(fst(fst(fst(fst(x))))))). +Definition OrZKPCommit_f_or_zkp_b2 `{v_G : choice_type} `{Hi0 : t_Sized (v_G)} `{Hi1 : t_Group (v_G)} (x : t_OrZKPCommit) : v_G := + snd(fst(fst(fst(fst(fst(x)))))). +Definition OrZKPCommit_f_or_zkp_c `{v_G : choice_type} `{Hi0 : t_Sized (v_G)} `{Hi1 : t_Group (v_G)} (x : t_OrZKPCommit) : Group_f_Z := + snd(fst(fst(fst(fst(x))))). +Definition OrZKPCommit_f_or_zkp_d1 `{v_G : choice_type} `{Hi0 : t_Sized (v_G)} `{Hi1 : t_Group (v_G)} (x : t_OrZKPCommit) : Group_f_Z := + snd(fst(fst(fst(x)))). +Definition OrZKPCommit_f_or_zkp_d2 `{v_G : choice_type} `{Hi0 : t_Sized (v_G)} `{Hi1 : t_Group (v_G)} (x : t_OrZKPCommit) : Group_f_Z := + snd(fst(fst(x))). +Definition OrZKPCommit_f_or_zkp_r1 `{v_G : choice_type} `{Hi0 : t_Sized (v_G)} `{Hi1 : t_Group (v_G)} (x : t_OrZKPCommit) : Group_f_Z := + snd(fst(x)). +Definition OrZKPCommit_f_or_zkp_r2 `{v_G : choice_type} `{Hi0 : t_Sized (v_G)} `{Hi1 : t_Group (v_G)} (x : t_OrZKPCommit) : Group_f_Z := + snd(x). +#[export] Instance settable_t_OrZKPCommit `{v_G : choice_type} `{Hi0 : t_Sized (v_G)} `{Hi1 : t_Group (v_G)} : Settable _ := + settable! (@Build_t_OrZKPCommit `{v_G : choice_type} `{Hi0 : t_Sized (v_G)} `{Hi1 : t_Group (v_G)}) . + +Definition t_SchnorrZKPCommit `{v_G : choice_type} `{Hi0 : t_Sized (v_G)} `{Hi1 : t_Group (v_G)} : choice_type := + v_G × Group_f_Z × Group_f_Z.Definition Build_t_SchnorrZKPCommit `{v_G : choice_type} `{Hi0 : t_Sized (v_G)} `{Hi1 : t_Group (v_G)} : t_SchnorrZKPCommit := + SchnorrZKPCommit_f_schnorr_zkp_uSchnorrZKPCommit_f_schnorr_zkp_cSchnorrZKPCommit_f_schnorr_zkp_z. +Definition SchnorrZKPCommit_f_schnorr_zkp_u `{v_G : choice_type} `{Hi0 : t_Sized (v_G)} `{Hi1 : t_Group (v_G)} (x : t_SchnorrZKPCommit) : v_G := + fst(fst(x)). +Definition SchnorrZKPCommit_f_schnorr_zkp_c `{v_G : choice_type} `{Hi0 : t_Sized (v_G)} `{Hi1 : t_Group (v_G)} (x : t_SchnorrZKPCommit) : Group_f_Z := + snd(fst(x)). +Definition SchnorrZKPCommit_f_schnorr_zkp_z `{v_G : choice_type} `{Hi0 : t_Sized (v_G)} `{Hi1 : t_Group (v_G)} (x : t_SchnorrZKPCommit) : Group_f_Z := + snd(x). +#[export] Instance settable_t_SchnorrZKPCommit `{v_G : choice_type} `{Hi0 : t_Sized (v_G)} `{Hi1 : t_Group (v_G)} : Settable _ := + settable! (@Build_t_SchnorrZKPCommit `{v_G : choice_type} `{Hi0 : t_Sized (v_G)} `{Hi1 : t_Group (v_G)}) . + +Definition t_OvnContractState `{v_G : choice_type} `{n : t_usize} `{Hi0 : t_Sized (v_G)} `{Hi1 : t_Group (v_G)} : choice_type := + t_Array (v_G) (n) × t_Array (t_SchnorrZKPCommit ((v_G))) (n) × t_Array (Group_f_Z) (n) × t_Array (v_G) (n) × t_Array (t_OrZKPCommit ((v_G))) (n) × t_u32 × t_Array ('bool) (n).Definition Build_t_OvnContractState `{v_G : choice_type} `{n : t_usize} `{Hi0 : t_Sized (v_G)} `{Hi1 : t_Group (v_G)} : t_OvnContractState := + OvnContractState_f_g_pow_xisOvnContractState_f_zkp_xisOvnContractState_f_commit_visOvnContractState_f_g_pow_xi_yi_visOvnContractState_f_zkp_visOvnContractState_f_tallyOvnContractState_f_round1. +Definition OvnContractState_f_g_pow_xis `{v_G : choice_type} `{n : t_usize} `{Hi0 : t_Sized (v_G)} `{Hi1 : t_Group (v_G)} (x : t_OvnContractState) : t_Array (v_G) (n) := + fst(fst(fst(fst(fst(fst(x)))))). +Definition OvnContractState_f_zkp_xis `{v_G : choice_type} `{n : t_usize} `{Hi0 : t_Sized (v_G)} `{Hi1 : t_Group (v_G)} (x : t_OvnContractState) : t_Array (t_SchnorrZKPCommit ((v_G))) (n) := + snd(fst(fst(fst(fst(fst(x)))))). +Definition OvnContractState_f_commit_vis `{v_G : choice_type} `{n : t_usize} `{Hi0 : t_Sized (v_G)} `{Hi1 : t_Group (v_G)} (x : t_OvnContractState) : t_Array (Group_f_Z) (n) := + snd(fst(fst(fst(fst(x))))). +Definition OvnContractState_f_g_pow_xi_yi_vis `{v_G : choice_type} `{n : t_usize} `{Hi0 : t_Sized (v_G)} `{Hi1 : t_Group (v_G)} (x : t_OvnContractState) : t_Array (v_G) (n) := + snd(fst(fst(fst(x)))). +Definition OvnContractState_f_zkp_vis `{v_G : choice_type} `{n : t_usize} `{Hi0 : t_Sized (v_G)} `{Hi1 : t_Group (v_G)} (x : t_OvnContractState) : t_Array (t_OrZKPCommit ((v_G))) (n) := + snd(fst(fst(x))). +Definition OvnContractState_f_tally `{v_G : choice_type} `{n : t_usize} `{Hi0 : t_Sized (v_G)} `{Hi1 : t_Group (v_G)} (x : t_OvnContractState) : t_u32 := + snd(fst(x)). +Definition OvnContractState_f_round1 `{v_G : choice_type} `{n : t_usize} `{Hi0 : t_Sized (v_G)} `{Hi1 : t_Group (v_G)} (x : t_OvnContractState) : t_Array ('bool) (n) := + snd(x). +#[export] Instance settable_t_OvnContractState `{v_G : choice_type} `{n : t_usize} `{Hi0 : t_Sized (v_G)} `{Hi1 : t_Group (v_G)} : Settable _ := + settable! (@Build_t_OvnContractState `{v_G : choice_type} `{n : t_usize} `{Hi0 : t_Sized (v_G)} `{Hi1 : t_Group (v_G)}) . + +Definition check_commitment `{v_G : choice_type} `{Hi0 : t_Sized (v_G)} `{Hi1 : t_Group (v_G)} (g_pow_xi_yi_vi : v_G) (commitment : Group_f_Z) : 'bool := + PartialEq_f_eq (Group_f_hash (impl__into_vec (unsize (box_new ([g_pow_xi_yi_vi]))))) (commitment). + +Definition commit_to `{v_G : choice_type} `{Hi0 : t_Sized (v_G)} `{Hi1 : t_Group (v_G)} (g_pow_xi_yi_vi : v_G) : Group_f_Z := + Group_f_hash (impl__into_vec (unsize (box_new ([g_pow_xi_yi_vi])))). + +Definition compute_group_element_for_vote `{v_G : choice_type} `{Hi0 : t_Sized (v_G)} `{Hi1 : t_Group (v_G)} (xi : Group_f_Z) (vote : 'bool) (g_pow_yi : v_G) : v_G := + Mul_f_mul (Group_f_pow (g_pow_yi) (xi)) (Group_f_g_pow (if + vote + then + Field_f_field_one (tt) + else + Field_f_field_zero (tt))). + +Definition t_Div_f_div `{v_G : choice_type} `{Hi0 : t_Sized (v_G)} `{Hi1 : t_Group (v_G)} (x : v_G) (y : v_G) : v_G := + Mul_f_mul (x) (Group_f_group_inv (y)). + +Definition compute_g_pow_yi `{v_G : choice_type} `{n : t_usize} `{Hi0 : t_Sized (v_G)} `{Hi1 : t_Group (v_G)} (i : t_usize) (xis : t_Array (v_G) (n)) : v_G := + let prod1 := Iterator_f_product (Iterator_f_map (impl__iter (Index_f_index (xis) (Build_t_Range (0, i)))) (fun x => + Clone_f_clone (x))) in + let prod2 := Iterator_f_product (Iterator_f_map (impl__iter (Index_f_index (xis) (Build_t_Range (t_Add_f_add (i) (1), n)))) (fun x => + Clone_f_clone (x))) in + t_Div_f_div (prod1) (prod2). + +Definition init_ovn_contract `{v_G : choice_type} `{n : t_usize} `{Hi0 : t_Sized (v_G)} `{Hi1 : t_Group (v_G)} (_ : unit) : t_Result ((t_OvnContractState ((v_G)) (n))) ((t_Reject)) := + Result_Ok (Build_t_OvnContractState (repeat (Group_f_group_one (tt)) (n), repeat (Build_t_SchnorrZKPCommit (Group_f_group_one (tt), Field_f_field_zero (tt), Field_f_field_zero (tt))) (n), repeat (Field_f_field_zero (tt)) (n), repeat (Group_f_group_one (tt)) (n), repeat (Build_t_OrZKPCommit (Group_f_group_one (tt), Group_f_group_one (tt), Group_f_group_one (tt), Group_f_group_one (tt), Group_f_group_one (tt), Group_f_group_one (tt), Field_f_field_zero (tt), Field_f_field_zero (tt), Field_f_field_zero (tt), Field_f_field_zero (tt), Field_f_field_zero (tt))) (n), 0, repeat (false) (n))). + +Definition schnorr_zkp `{v_G : choice_type} `{Hi0 : t_Sized (v_G)} `{Hi1 : t_Group (v_G)} (random : Group_f_Z) (h : v_G) (x : Group_f_Z) : t_SchnorrZKPCommit ((v_G)) := + run (let r := random in + let u := Group_f_g_pow (r) in + let c := Group_f_hash (impl__into_vec (unsize (box_new ([Group_f_g (tt); h; u])))) in + let z := Add_f_add (r) (Mul_f_mul (c) (x)) in + let hoist25 := ControlFlow_Break (Build_t_SchnorrZKPCommit (u, c, z)) in + ControlFlow_Continue (never_to_any (hoist25))). + +Definition register_vote `{v_G : choice_type} `{n : t_usize} `{v_A : choice_type} `{impl_205173520_ : choice_type} `{Hi0 : t_Sized (v_G)} `{Hi1 : t_Sized (v_A)} `{Hi2 : t_Sized (impl_205173520_)} `{Hi3 : t_Group (v_G)} `{Hi4 : t_HasActions (v_A)} `{Hi5 : t_HasReceiveContext (impl_205173520_) (unit)} (ctx : impl_205173520_) (state : t_OvnContractState ((v_G)) (n)) : t_Result (((v_A*t_OvnContractState ((v_G)) (n)))) ((t_ParseError)) := + run (let (_,out) := Get_f_get (HasCommonData_f_parameter_cursor (ctx)) in + let params : t_RegisterParam ((Group_f_Z)) := out in + Result_Ok (let g_pow_xi := Group_f_g_pow (RegisterParam_f_rp_xi params) in + let zkp_xi := schnorr_zkp (RegisterParam_f_rp_zkp_random params) (g_pow_xi) (RegisterParam_f_rp_xi params) in + let register_vote_state_ret := Clone_f_clone (state) in + let _ := TODO: please implement the method `lhs_LhsLocalVar` := Build_register_vote_state_ret (update_at_usize (OvnContractState_f_g_pow_xis register_vote_state_ret) (cast (RegisterParam_f_rp_i params)) (g_pow_xi)) in + let _ := TODO: please implement the method `lhs_LhsLocalVar` := Build_register_vote_state_ret (update_at_usize (OvnContractState_f_zkp_xis register_vote_state_ret) (cast (RegisterParam_f_rp_i params)) (zkp_xi)) in + let _ := TODO: please implement the method `lhs_LhsLocalVar` := Build_register_vote_state_ret (update_at_usize (OvnContractState_f_round1 register_vote_state_ret) (cast (RegisterParam_f_rp_i params)) (true)) in + Result_Ok ((HasActions_f_accept (tt),register_vote_state_ret)))). + +Definition schnorr_zkp_validate `{v_G : choice_type} `{Hi0 : t_Sized (v_G)} `{Hi1 : t_Group (v_G)} (h : v_G) (pi : t_SchnorrZKPCommit ((v_G))) : 'bool := + andb (PartialEq_f_eq (SchnorrZKPCommit_f_schnorr_zkp_c pi) (Group_f_hash (impl__into_vec (unsize (box_new ([Group_f_g (tt); h; SchnorrZKPCommit_f_schnorr_zkp_u pi])))))) (PartialEq_f_eq (Group_f_g_pow (SchnorrZKPCommit_f_schnorr_zkp_z pi)) (Mul_f_mul (SchnorrZKPCommit_f_schnorr_zkp_u pi) (Group_f_pow (h) (SchnorrZKPCommit_f_schnorr_zkp_c pi)))). + +Definition commit_to_vote `{v_G : choice_type} `{n : t_usize} `{v_A : choice_type} `{impl_205173520_ : choice_type} `{Hi0 : t_Sized (v_G)} `{Hi1 : t_Sized (v_A)} `{Hi2 : t_Sized (impl_205173520_)} `{Hi3 : t_Group (v_G)} `{Hi4 : t_HasActions (v_A)} `{Hi5 : t_HasReceiveContext (impl_205173520_) (unit)} (ctx : impl_205173520_) (state : t_OvnContractState ((v_G)) (n)) : t_Result (((v_A*t_OvnContractState ((v_G)) (n)))) ((t_ParseError)) := + run (let (_,out) := Get_f_get (HasCommonData_f_parameter_cursor (ctx)) in + let params : t_CastVoteParam ((Group_f_Z)) := out in + Result_Ok (let _ := {IntoIterator_f_into_iter (Build_t_Range (0, n))} inP? [i] [is_none]default of ( + if + orb (negb (schnorr_zkp_validate (index (OvnContractState_f_g_pow_xis state) (i)) (index (OvnContractState_f_zkp_xis state) (i)))) (negb (index (OvnContractState_f_round1 state) (i))) + then + let hoist26 := ControlFlow_Break (Result_Err (Build_t_ParseError)) in + ControlFlow_Continue (never_to_any (hoist26)) + else + tt) in + let g_pow_yi := compute_g_pow_yi (cast (CastVoteParam_f_cvp_i params)) (OvnContractState_f_g_pow_xis state) in + let g_pow_xi_yi_vi := compute_group_element_for_vote (CastVoteParam_f_cvp_xi params) (CastVoteParam_f_cvp_vote params) (g_pow_yi) in + let commit_vi := commit_to (g_pow_xi_yi_vi) in + let commit_to_vote_state_ret := Clone_f_clone (state) in + let _ := TODO: please implement the method `lhs_LhsLocalVar` := Build_commit_to_vote_state_ret (update_at_usize (OvnContractState_f_commit_vis commit_to_vote_state_ret) (cast (CastVoteParam_f_cvp_i params)) (commit_vi)) in + Result_Ok ((HasActions_f_accept (tt),commit_to_vote_state_ret)))). + +Definition zkp_one_out_of_two `{v_G : choice_type} `{Hi0 : t_Sized (v_G)} `{Hi1 : t_Group (v_G)} (random_w : Group_f_Z) (random_r : Group_f_Z) (random_d : Group_f_Z) (h : v_G) (xi : Group_f_Z) (vi : 'bool) : t_OrZKPCommit ((v_G)) := + let w := random_w in + if + vi + then + let r1 := random_r in + let d1 := random_d in + let x := Group_f_g_pow (xi) in + let y := Mul_f_mul (Group_f_pow (h) (xi)) (Group_f_g (tt)) in + let a1 := Mul_f_mul (Group_f_g_pow (r1)) (Group_f_pow (x) (d1)) in + let b1 := Mul_f_mul (Group_f_pow (h) (r1)) (Group_f_pow (y) (d1)) in + let a2 := Group_f_g_pow (w) in + let b2 := Group_f_pow (h) (w) in + let c := Group_f_hash (impl__into_vec (unsize (box_new ([x; y; a1; b1; a2; b2])))) in + let d2 := sub (c) (d1) in + let r2 := sub (w) (Mul_f_mul (xi) (d2)) in + Build_t_OrZKPCommit (x, y, a1, b1, a2, b2, c, d1, d2, r1, r2) + else + let r2 := random_r in + let d2 := random_d in + let x := Group_f_g_pow (xi) in + let y := Group_f_pow (h) (xi) in + let a1 := Group_f_g_pow (w) in + let b1 := Group_f_pow (h) (w) in + let a2 := Mul_f_mul (Group_f_g_pow (r2)) (Group_f_pow (x) (d2)) in + let b2 := Mul_f_mul (Group_f_pow (h) (r2)) (Group_f_pow (t_Div_f_div (y) (Group_f_g (tt))) (d2)) in + let c := Group_f_hash (impl__into_vec (unsize (box_new ([x; y; a1; b1; a2; b2])))) in + let d1 := sub (c) (d2) in + let r1 := sub (w) (Mul_f_mul (xi) (d1)) in + Build_t_OrZKPCommit (x, y, a1, b1, a2, b2, c, d1, d2, r1, r2). + +Definition cast_vote `{v_G : choice_type} `{n : t_usize} `{v_A : choice_type} `{impl_205173520_ : choice_type} `{Hi0 : t_Sized (v_G)} `{Hi1 : t_Sized (v_A)} `{Hi2 : t_Sized (impl_205173520_)} `{Hi3 : t_Group (v_G)} `{Hi4 : t_HasActions (v_A)} `{Hi5 : t_HasReceiveContext (impl_205173520_) (unit)} (ctx : impl_205173520_) (state : t_OvnContractState ((v_G)) (n)) : t_Result (((v_A*t_OvnContractState ((v_G)) (n)))) ((t_ParseError)) := + run (let (_,out) := Get_f_get (HasCommonData_f_parameter_cursor (ctx)) in + let params : t_CastVoteParam ((Group_f_Z)) := out in + Result_Ok (let g_pow_yi := compute_g_pow_yi (cast (CastVoteParam_f_cvp_i params)) (OvnContractState_f_g_pow_xis state) in + let g_pow_xi_yi_vi := compute_group_element_for_vote (CastVoteParam_f_cvp_xi params) (CastVoteParam_f_cvp_vote params) (g_pow_yi) in + let zkp_vi := zkp_one_out_of_two (CastVoteParam_f_cvp_zkp_random_w params) (CastVoteParam_f_cvp_zkp_random_r params) (CastVoteParam_f_cvp_zkp_random_d params) (g_pow_yi) (CastVoteParam_f_cvp_xi params) (CastVoteParam_f_cvp_vote params) in + let cast_vote_state_ret := Clone_f_clone (state) in + let _ := TODO: please implement the method `lhs_LhsLocalVar` := Build_cast_vote_state_ret (update_at_usize (OvnContractState_f_g_pow_xi_yi_vis cast_vote_state_ret) (cast (CastVoteParam_f_cvp_i params)) (g_pow_xi_yi_vi)) in + let _ := TODO: please implement the method `lhs_LhsLocalVar` := Build_cast_vote_state_ret (update_at_usize (OvnContractState_f_zkp_vis cast_vote_state_ret) (cast (CastVoteParam_f_cvp_i params)) (zkp_vi)) in + Result_Ok ((HasActions_f_accept (tt),cast_vote_state_ret)))). + +Definition zkp_one_out_of_two_validate `{v_G : choice_type} `{Hi0 : t_Sized (v_G)} `{Hi1 : t_Group (v_G)} (h : v_G) (zkp : t_OrZKPCommit ((v_G))) : 'bool := + let c := Group_f_hash (impl__into_vec (unsize (box_new ([OrZKPCommit_f_or_zkp_x zkp; OrZKPCommit_f_or_zkp_y zkp; OrZKPCommit_f_or_zkp_a1 zkp; OrZKPCommit_f_or_zkp_b1 zkp; OrZKPCommit_f_or_zkp_a2 zkp; OrZKPCommit_f_or_zkp_b2 zkp])))) in + andb (andb (andb (andb (PartialEq_f_eq (c) (Add_f_add (OrZKPCommit_f_or_zkp_d1 zkp) (OrZKPCommit_f_or_zkp_d2 zkp))) (PartialEq_f_eq (OrZKPCommit_f_or_zkp_a1 zkp) (Mul_f_mul (Group_f_g_pow (OrZKPCommit_f_or_zkp_r1 zkp)) (Group_f_pow (OrZKPCommit_f_or_zkp_x zkp) (OrZKPCommit_f_or_zkp_d1 zkp))))) (PartialEq_f_eq (OrZKPCommit_f_or_zkp_b1 zkp) (Mul_f_mul (Group_f_pow (h) (OrZKPCommit_f_or_zkp_r1 zkp)) (Group_f_pow (OrZKPCommit_f_or_zkp_y zkp) (OrZKPCommit_f_or_zkp_d1 zkp))))) (PartialEq_f_eq (OrZKPCommit_f_or_zkp_a2 zkp) (Mul_f_mul (Group_f_g_pow (OrZKPCommit_f_or_zkp_r2 zkp)) (Group_f_pow (OrZKPCommit_f_or_zkp_x zkp) (OrZKPCommit_f_or_zkp_d2 zkp))))) (PartialEq_f_eq (OrZKPCommit_f_or_zkp_b2 zkp) (Mul_f_mul (Group_f_pow (h) (OrZKPCommit_f_or_zkp_r2 zkp)) (Group_f_pow (t_Div_f_div (OrZKPCommit_f_or_zkp_y zkp) (Group_f_g (tt))) (OrZKPCommit_f_or_zkp_d2 zkp)))). + +Definition tally_votes `{v_G : choice_type} `{n : t_usize} `{v_A : choice_type} `{impl_205173520_ : choice_type} `{Hi0 : t_Sized (v_G)} `{Hi1 : t_Sized (v_A)} `{Hi2 : t_Sized (impl_205173520_)} `{Hi3 : t_Group (v_G)} `{Hi4 : t_HasActions (v_A)} `{Hi5 : t_HasReceiveContext (impl_205173520_) (unit)} (_ : impl_205173520_) (state : t_OvnContractState ((v_G)) (n)) : t_Result (((v_A*t_OvnContractState ((v_G)) (n)))) ((t_ParseError)) := + let _ := {IntoIterator_f_into_iter (Build_t_Range (0, n))} inP? [i] [is_none]default of ( + let g_pow_yi := compute_g_pow_yi (i) (OvnContractState_f_g_pow_xis state) in + let _ := ControlFlow_Continue (if + negb (zkp_one_out_of_two_validate (g_pow_yi) (index (OvnContractState_f_zkp_vis state) (i))) + then + let hoist27 := ControlFlow_Break (Result_Err (Build_t_ParseError)) in + ControlFlow_Continue (never_to_any (hoist27)) + else + tt) in + if + negb (check_commitment (index (OvnContractState_f_g_pow_xi_yi_vis state) (i)) (index (OvnContractState_f_commit_vis state) (i))) + then + let hoist28 := ControlFlow_Break (Result_Err (Build_t_ParseError)) in + ControlFlow_Continue (never_to_any (hoist28)) + else + tt) in + let vote_result := Group_f_group_one (tt) in + let _ := {IntoIterator_f_into_iter (OvnContractState_f_g_pow_xi_yi_vis state)} inP? [g_pow_vote] [is_none]default of ( + TODO: please implement the method `lhs_LhsLocalVar` := Mul_f_mul (vote_result) (g_pow_vote)) in + let tally := 0 in + let curr := Field_f_field_zero (tt) in + let _ := {IntoIterator_f_into_iter (Build_t_Range (0, cast (n)))} inP? [i] [is_none]default of ( + let _ := if + PartialEq_f_eq (Group_f_g_pow (curr)) (vote_result) + then + let _ := TODO: please implement the method `lhs_LhsLocalVar` := i in + tt + else + tt in + let _ := TODO: please implement the method `lhs_LhsLocalVar` := Add_f_add (curr) (Field_f_field_one (tt)) in + tt) in + let tally_votes_state_ret := Clone_f_clone (state) in + let _ := TODO: please implement the method `lhs_LhsLocalVar` := Build_tally_votes_state_ret (tally) in + Result_Ok ((HasActions_f_accept (tt),tally_votes_state_ret)). diff --git a/ovn/proofs/ssprove/extraction/Hacspec_ovn_Ovn_secp256k1.v b/ovn/proofs/ssprove/extraction/Hacspec_ovn_Ovn_secp256k1.v new file mode 100644 index 0000000..fc97d54 --- /dev/null +++ b/ovn/proofs/ssprove/extraction/Hacspec_ovn_Ovn_secp256k1.v @@ -0,0 +1,268 @@ +(* File automatically generated by Hacspec *) +From Coq Require Import ZArith. +Require Import List. +Import List.ListNotations. +Open Scope Z_scope. +Open Scope bool_scope. +Require Import Ascii. +Require Import String. +Require Import Coq.Floats.Floats. +From RecordUpdate Require Import RecordSet. +Import RecordSetNotations. +From Crypt Require Import choice_type Package Prelude. +Import PackageNotation. +From extructures Require Import ord fset. +From mathcomp Require Import word_ssrZ word. +Import choice.Choice.Exports. + +From Hacspec Require Import ChoiceEquality. +From Hacspec Require Import LocationUtility. +From Hacspec Require Import Hacspec_Lib_Comparable. +From Hacspec Require Import Hacspec_Lib_Pre. +From Hacspec Require Import Hacspec_Lib. +From Hacspec Require Import ConCertLib. + +From Hacspec_ovn Require Import Hacspec_ovn (t_ovn_traits). +Export Hacspec_ovn (t_ovn_traits). + +From Hacspec_ovn Require Import hacspec_lib. +Export hacspec_lib. + +From Hacspec_ovn Require Import hacspec_bip_340. +Export hacspec_bip_340. + +Definition t_Group_curve : choice_type := + t_Point.Definition Build_t_Group_curve : t_Group_curve := + Group_curve_f_g_val. +Definition Group_curve_f_g_val (x : t_Group_curve) : t_Point := + x. +#[export] Instance settable_t_Group_curve : Settable _ := + settable! (@Build_t_Group_curve) . + +Definition t_Z_curve : choice_type := + t_Scalar.Definition Build_t_Z_curve : t_Z_curve := + Z_curve_f_z_val. +Definition Z_curve_f_z_val (x : t_Z_curve) : t_Scalar := + x. +#[export] Instance settable_t_Z_curve : Settable _ := + settable! (@Build_t_Z_curve) . + +Instance t_Deserial_57956922 : t_Deserial ((t_Z_curve)) := + { + t_Deserial_impl_f_deserial := fun (source : v_R) => + run (let (tmp0,out) := Get_f_get (source) in + let _ := TODO: please implement the method `lhs_LhsLocalVar` := tmp0 in + let hoist2 := out in + let hoist3 := Try_f_branch (hoist2) in + let temp : t_Vec ((t_u8)) ((t_Global)) := match hoist3 with + | ControlFlow_Break (residual) => + let hoist1 := ControlFlow_Break ((source,FromResidual_f_from_residual (residual))) in + ControlFlow_Continue (never_to_any (hoist1)) + | ControlFlow_Continue (val) => + ControlFlow_Continue (val) + end in + ControlFlow_Continue (let hax_temp_output := Result_Ok (Build_t_Z_curve (impl__Scalar__from_public_byte_seq_be (impl_52__from_vec (temp)))) in + (source,hax_temp_output))); + }. + +Instance t_Serial_79745743 : t_Serial ((t_Z_curve)) := + { + t_Serial_impl_1_f_serial := fun (self : t_Z_curve) (out : v_W) => + let v : t_Vec ((t_u8)) ((t_Global)) := impl__new (tt) in + let _ := {IntoIterator_f_into_iter (impl_41__native_slice (impl__Scalar__to_public_byte_seq_be (Z_curve_f_z_val self)))} inP? [x] [is_none]default of ( + TODO: please implement the method `lhs_LhsLocalVar` := impl_1__push (v) (Clone_f_clone (x))) in + let (tmp0,out1) := Serial_f_serial (v) (out) in + let _ := TODO: please implement the method `lhs_LhsLocalVar` := tmp0 in + let hax_temp_output := out1 in + (out,hax_temp_output); + }. + +Instance t_Deserial_116245855 : t_Deserial ((t_Group_curve)) := + { + t_Deserial_impl_7_f_deserial := fun (source : v_R) => + run (let (tmp0,out) := Get_f_get (source) in + let _ := TODO: please implement the method `lhs_LhsLocalVar` := tmp0 in + let hoist5 := out in + let hoist6 := Try_f_branch (hoist5) in + let b : 'bool := match hoist6 with + | ControlFlow_Break (residual) => + let hoist4 := ControlFlow_Break ((source,FromResidual_f_from_residual (residual))) in + ControlFlow_Continue (never_to_any (hoist4)) + | ControlFlow_Continue (val) => + ControlFlow_Continue (val) + end in + let hax_temp_output := if + b + then + let (tmp0,out) := Get_f_get (source) in + let _ := TODO: please implement the method `lhs_LhsLocalVar` := tmp0 in + let hoist8 := out in + let hoist9 := Try_f_branch (hoist8) in + let vx : t_Vec ((t_u8)) ((t_Global)) := match hoist9 with + | ControlFlow_Break (residual) => + let hoist7 := ControlFlow_Break ((source,FromResidual_f_from_residual (residual))) in + ControlFlow_Continue (never_to_any (hoist7)) + | ControlFlow_Continue (val) => + ControlFlow_Continue (val) + end in + let (tmp0,out) := Get_f_get (source) in + let _ := TODO: please implement the method `lhs_LhsLocalVar` := tmp0 in + let hoist11 := out in + let hoist12 := Try_f_branch (hoist11) in + let vy : t_Vec ((t_u8)) ((t_Global)) := match hoist12 with + | ControlFlow_Break (residual) => + let hoist10 := ControlFlow_Break ((source,FromResidual_f_from_residual (residual))) in + ControlFlow_Continue (never_to_any (hoist10)) + | ControlFlow_Continue (val) => + ControlFlow_Continue (val) + end in + ControlFlow_Continue (Result_Ok (Build_t_Group_curve (Point_Affine ((impl__FieldElement__from_public_byte_seq_be (impl_52__from_vec (vx)),impl__FieldElement__from_public_byte_seq_be (impl_52__from_vec (vy))))))) + else + ControlFlow_Continue (Result_Ok (Build_t_Group_curve (Point_AtInfinity))) in + ControlFlow_Continue ((source,hax_temp_output))); + }. + +Instance t_Serial_210512824 : t_Serial ((t_Group_curve)) := + { + t_Serial_impl_8_f_serial := fun (self : t_Group_curve) (out : v_W) => + run (let _ := match Group_curve_f_g_val self with + | Point_Affine (p) => + let (tmp0,out1) := Serial_f_serial (true) (out) in + let _ := TODO: please implement the method `lhs_LhsLocalVar` := tmp0 in + let hoist14 := out1 in + let hoist15 := Try_f_branch (hoist14) in + let _ := match hoist15 with + | ControlFlow_Break (residual) => + let hoist13 := ControlFlow_Break ((out,FromResidual_f_from_residual (residual))) in + ControlFlow_Continue (never_to_any (hoist13)) + | ControlFlow_Continue (val) => + ControlFlow_Continue (val) + end in + let vx : t_Vec ((t_u8)) ((t_Global)) := impl__new (tt) in + let _ := {IntoIterator_f_into_iter (impl_41__native_slice (impl__FieldElement__to_public_byte_seq_be (x (p))))} inP? [x] [is_none]default of ( + TODO: please implement the method `lhs_LhsLocalVar` := impl_1__push (vx) (Clone_f_clone (x))) in + let (tmp0,out1) := Serial_f_serial (vx) (out) in + let _ := TODO: please implement the method `lhs_LhsLocalVar` := tmp0 in + let hoist17 := out1 in + let hoist18 := Try_f_branch (hoist17) in + let _ := match hoist18 with + | ControlFlow_Break (residual) => + let hoist16 := ControlFlow_Break ((out,FromResidual_f_from_residual (residual))) in + ControlFlow_Continue (never_to_any (hoist16)) + | ControlFlow_Continue (val) => + ControlFlow_Continue (val) + end in + let vy : t_Vec ((t_u8)) ((t_Global)) := impl__new (tt) in + let _ := {IntoIterator_f_into_iter (impl_41__native_slice (impl__FieldElement__to_public_byte_seq_be (y (p))))} inP? [y] [is_none]default of ( + TODO: please implement the method `lhs_LhsLocalVar` := impl_1__push (vy) (Clone_f_clone (y))) in + let (tmp0,out1) := Serial_f_serial (vy) (out) in + let _ := TODO: please implement the method `lhs_LhsLocalVar` := tmp0 in + let hoist20 := out1 in + let hoist21 := Try_f_branch (hoist20) in + let _ := match hoist21 with + | ControlFlow_Break (residual) => + let hoist19 := ControlFlow_Break ((out,FromResidual_f_from_residual (residual))) in + ControlFlow_Continue (never_to_any (hoist19)) + | ControlFlow_Continue (val) => + ControlFlow_Continue (val) + end in + ControlFlow_Continue (tt) + | Point_AtInfinity => + let (tmp0,out1) := Serial_f_serial (false) (out) in + let _ := TODO: please implement the method `lhs_LhsLocalVar` := tmp0 in + let hoist23 := out1 in + let hoist24 := Try_f_branch (hoist23) in + let _ := match hoist24 with + | ControlFlow_Break (residual) => + let hoist22 := ControlFlow_Break ((out,FromResidual_f_from_residual (residual))) in + ControlFlow_Continue (never_to_any (hoist22)) + | ControlFlow_Continue (val) => + ControlFlow_Continue (val) + end in + ControlFlow_Continue (tt) + end in + ControlFlow_Continue (let hax_temp_output := Result_Ok (tt) in + (out,hax_temp_output))); + }. + +Instance t_Mul_893045317 : t_Mul ((t_Z_curve)) ((t_Z_curve)) := + { + t_Mul_impl_2_f_Output := t_Z_curve; + t_Mul_impl_2_f_mul := fun (self : t_Z_curve) (y : t_Z_curve) => + Build_t_Z_curve (Mul_f_mul (Z_curve_f_z_val self) (Z_curve_f_z_val y)); + }. + +Instance t_Product_902246531 : t_Product ((t_Z_curve)) ((t_Z_curve)) := + { + t_Product_impl_3_f_product := fun (iter : v_I) => + Iterator_f_fold (iter) (Build_t_Z_curve (impl__Scalar__from_literal (1))) (fun a b => + Mul_f_mul (a) (b)); + }. + +Instance t_Add_552520376 : t_Add ((t_Z_curve)) ((t_Z_curve)) := + { + t_Add_impl_4_f_Output := t_Z_curve; + t_Add_impl_4_f_add := fun (self : t_Z_curve) (y : t_Z_curve) => + Build_t_Z_curve (Add_f_add (Z_curve_f_z_val self) (Z_curve_f_z_val y)); + }. + +Instance t_Mul_565430551 : t_Mul ((t_Group_curve)) ((t_Group_curve)) := + { + t_Mul_impl_9_f_Output := t_Group_curve; + t_Mul_impl_9_f_mul := fun (self : t_Group_curve) (y : t_Group_curve) => + Build_t_Group_curve (point_add (Group_curve_f_g_val self) (Group_curve_f_g_val y)); + }. + +Instance t_Field_230158822 : t_Field ((t_Z_curve)) := + { + t_Field_impl_6_f_q := fun (_ : unit) => + Build_t_Z_curve (impl__Scalar__from_hex ("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141"%string)); + t_Field_impl_6_f_random_field_elem := fun (random : t_u32) => + Build_t_Z_curve (impl__Scalar__from_literal (cast (random))); + t_Field_impl_6_f_field_zero := fun (_ : unit) => + Build_t_Z_curve (impl__Scalar__from_literal (0)); + t_Field_impl_6_f_field_one := fun (_ : unit) => + Build_t_Z_curve (impl__Scalar__from_literal (1)); + t_Field_impl_6_f_inv := fun (x : t_Z_curve) => + run (let _ := assert (false) in + let hoist29 := ControlFlow_Break (x) in + ControlFlow_Continue (never_to_any (hoist29))); + }. + +Instance t_Neg_848153603 : t_Neg ((t_Z_curve)) := + { + t_Neg_impl_5_f_Output := t_Z_curve; + t_Neg_impl_5_f_neg := fun (self : t_Z_curve) => + Build_t_Z_curve (Sub_f_sub (Z_curve_f_z_val Field_f_field_zero (tt)) (Z_curve_f_z_val self)); + }. + +Instance t_Product_307260739 : t_Product ((t_Group_curve)) ((t_Group_curve)) := + { + t_Product_impl_10_f_product := fun (iter : v_I) => + Iterator_f_fold (iter) (Group_f_g_pow (Field_f_field_zero (tt))) (fun a b => + Mul_f_mul (a) (b)); + }. + +Instance t_Group_947705802 : t_Group ((t_Group_curve)) := + { + t_Group_impl_11_f_Z := t_Z_curve; + t_Group_impl_11_f_g := fun (_ : unit) => + let gx := Build_t_PBytes32 ([121; 190; 102; 126; 249; 220; 187; 172; 85; 160; 98; 149; 206; 135; 11; 7; 2; 155; 252; 219; 45; 206; 40; 217; 89; 242; 129; 91; 22; 248; 23; 152]) in + let gy := Build_t_PBytes32 ([72; 58; 218; 119; 38; 163; 196; 101; 93; 164; 251; 252; 14; 17; 8; 168; 253; 23; 180; 72; 166; 133; 84; 25; 156; 71; 208; 143; 251; 16; 212; 184]) in + Build_t_Group_curve (Point_Affine ((impl__FieldElement__from_public_byte_seq_be (gx),impl__FieldElement__from_public_byte_seq_be (gy)))); + t_Group_impl_11_f_pow := fun (g : t_Group_curve) (x : t_Z_curve) => + Build_t_Group_curve (point_mul (Z_curve_f_z_val x) (Group_curve_f_g_val g)); + t_Group_impl_11_f_g_pow := fun (x : t_Z_curve) => + Build_t_Group_curve (point_mul_base (Z_curve_f_z_val x)); + t_Group_impl_11_f_group_one := fun (_ : unit) => + Group_f_g_pow (Field_f_field_zero (tt)); + t_Group_impl_11_f_group_inv := fun (x : t_Group_curve) => + Build_t_Group_curve (match Group_curve_f_g_val x with + | Point_Affine ((a,b)) => + Point_Affine ((a,Sub_f_sub (impl__FieldElement__from_literal (0)) (b))) + | Point_AtInfinity => + Point_AtInfinity + end); + t_Group_impl_11_f_hash := fun (x : t_Vec ((t_Group_curve)) ((t_Global))) => + Field_f_field_one (tt); + }. diff --git a/ovn/proofs/ssprove/extraction/Hacspec_ovn_Ovn_traits.glob b/ovn/proofs/ssprove/extraction/Hacspec_ovn_Ovn_traits.glob new file mode 100644 index 0000000..de3bc59 --- /dev/null +++ b/ovn/proofs/ssprove/extraction/Hacspec_ovn_Ovn_traits.glob @@ -0,0 +1,224 @@ +DIGEST 6389834e57e83e53e7170ee795828b05 +FHacspec_ovn.Hacspec_ovn_Ovn_traits +R70:75 Coq.ZArith.ZArith <> <> lib +R93:96 Coq.Lists.List <> <> lib +R106:123 Coq.Lists.List ListNotations <> mod +R184:188 Coq.Strings.Ascii <> <> lib +R206:211 Coq.Strings.String <> <> lib +R229:245 Coq.Floats.Floats <> <> lib +R281:289 RecordUpdate.RecordSet <> <> lib +R299:316 RecordUpdate.RecordSet RecordSetNotations <> mod +R345:355 Crypt.choice_type <> <> lib +R357:363 Crypt.Package <> <> lib +R365:371 Crypt.Prelude <> <> lib +R381:395 Crypt.package.pkg_notation PackageNotation <> mod +R430:432 extructures.ord <> <> lib +R434:437 extructures.fset <> <> lib +R469:477 mathcomp.word.word_ssrZ <> <> lib +R479:482 mathcomp.word.word <> <> lib +R492:512 mathcomp.ssreflect.choice Choice.Exports <> mod +R544:557 Hacspec.ChoiceEquality <> <> lib +R588:602 Hacspec.LocationUtility <> <> lib +R633:654 Hacspec.Hacspec_Lib_Comparable <> <> lib +R685:699 Hacspec.Hacspec_Lib_Pre <> <> lib +R730:740 Hacspec.Hacspec_Lib <> <> lib +R771:780 Hacspec.ConCertLib <> <> lib +rec 790:794 <> t_Add +proj 847:858 <> Add_f_Output +proj 872:880 <> Add_f_add +binder 798:803 <> v_Self:1 +binder 815:819 <> v_Rhs:2 +R890:893 Coq.Init.Logic <> ::type_scope:x_'->'_x not +R884:889 Hacspec_ovn.Hacspec_ovn_Ovn_traits <> v_Self:1 var +R899:902 Coq.Init.Logic <> ::type_scope:x_'->'_x not +R894:898 Hacspec_ovn.Hacspec_ovn_Ovn_traits <> v_Rhs:2 var +R903:914 Hacspec_ovn.Hacspec_ovn_Ovn_traits <> Add_f_Output:4 meth +R932:936 Hacspec_ovn.Hacspec_ovn_Ovn_traits <> t_Add class +R932:936 Hacspec_ovn.Hacspec_ovn_Ovn_traits <> t_Add class +R965:969 Hacspec_ovn.Hacspec_ovn_Ovn_traits <> t_Add class +rec 987:991 <> t_Div +proj 1044:1055 <> Div_f_Output +proj 1069:1077 <> Div_f_div +binder 995:1000 <> v_Self:6 +binder 1012:1016 <> v_Rhs:7 +R1087:1090 Coq.Init.Logic <> ::type_scope:x_'->'_x not +R1081:1086 Hacspec_ovn.Hacspec_ovn_Ovn_traits <> v_Self:6 var +R1096:1099 Coq.Init.Logic <> ::type_scope:x_'->'_x not +R1091:1095 Hacspec_ovn.Hacspec_ovn_Ovn_traits <> v_Rhs:7 var +R1100:1111 Hacspec_ovn.Hacspec_ovn_Ovn_traits <> Div_f_Output:9 meth +R1129:1133 Hacspec_ovn.Hacspec_ovn_Ovn_traits <> t_Div class +R1129:1133 Hacspec_ovn.Hacspec_ovn_Ovn_traits <> t_Div class +R1162:1166 Hacspec_ovn.Hacspec_ovn_Ovn_traits <> t_Div class +rec 1184:1188 <> t_Mul +proj 1241:1252 <> Mul_f_Output +proj 1266:1274 <> Mul_f_mul +binder 1192:1197 <> v_Self:11 +binder 1209:1213 <> v_Rhs:12 +R1284:1287 Coq.Init.Logic <> ::type_scope:x_'->'_x not +R1278:1283 Hacspec_ovn.Hacspec_ovn_Ovn_traits <> v_Self:11 var +R1293:1296 Coq.Init.Logic <> ::type_scope:x_'->'_x not +R1288:1292 Hacspec_ovn.Hacspec_ovn_Ovn_traits <> v_Rhs:12 var +R1297:1308 Hacspec_ovn.Hacspec_ovn_Ovn_traits <> Mul_f_Output:14 meth +R1326:1330 Hacspec_ovn.Hacspec_ovn_Ovn_traits <> t_Mul class +R1326:1330 Hacspec_ovn.Hacspec_ovn_Ovn_traits <> t_Mul class +R1359:1363 Hacspec_ovn.Hacspec_ovn_Ovn_traits <> t_Mul class +rec 1381:1385 <> t_Neg +proj 1422:1433 <> Neg_f_Output +proj 1447:1455 <> Neg_f_neg +binder 1389:1394 <> v_Self:16 +R1465:1468 Coq.Init.Logic <> ::type_scope:x_'->'_x not +R1459:1464 Hacspec_ovn.Hacspec_ovn_Ovn_traits <> v_Self:16 var +R1469:1480 Hacspec_ovn.Hacspec_ovn_Ovn_traits <> Neg_f_Output:18 meth +R1498:1502 Hacspec_ovn.Hacspec_ovn_Ovn_traits <> t_Neg class +R1498:1502 Hacspec_ovn.Hacspec_ovn_Ovn_traits <> t_Neg class +R1531:1535 Hacspec_ovn.Hacspec_ovn_Ovn_traits <> t_Neg class +rec 1549:1553 <> t_Rem +proj 1606:1617 <> Rem_f_Output +proj 1631:1639 <> Rem_f_rem +binder 1557:1562 <> v_Self:20 +binder 1574:1578 <> v_Rhs:21 +R1649:1652 Coq.Init.Logic <> ::type_scope:x_'->'_x not +R1643:1648 Hacspec_ovn.Hacspec_ovn_Ovn_traits <> v_Self:20 var +R1658:1661 Coq.Init.Logic <> ::type_scope:x_'->'_x not +R1653:1657 Hacspec_ovn.Hacspec_ovn_Ovn_traits <> v_Rhs:21 var +R1662:1673 Hacspec_ovn.Hacspec_ovn_Ovn_traits <> Rem_f_Output:23 meth +R1691:1695 Hacspec_ovn.Hacspec_ovn_Ovn_traits <> t_Rem class +R1691:1695 Hacspec_ovn.Hacspec_ovn_Ovn_traits <> t_Rem class +R1724:1728 Hacspec_ovn.Hacspec_ovn_Ovn_traits <> t_Rem class +rec 1746:1750 <> t_Sub +proj 1803:1814 <> Sub_f_Output +proj 1828:1836 <> Sub_f_sub +binder 1754:1759 <> v_Self:25 +binder 1771:1775 <> v_Rhs:26 +R1846:1849 Coq.Init.Logic <> ::type_scope:x_'->'_x not +R1840:1845 Hacspec_ovn.Hacspec_ovn_Ovn_traits <> v_Self:25 var +R1855:1858 Coq.Init.Logic <> ::type_scope:x_'->'_x not +R1850:1854 Hacspec_ovn.Hacspec_ovn_Ovn_traits <> v_Rhs:26 var +R1859:1870 Hacspec_ovn.Hacspec_ovn_Ovn_traits <> Sub_f_Output:28 meth +R1888:1892 Hacspec_ovn.Hacspec_ovn_Ovn_traits <> t_Sub class +R1888:1892 Hacspec_ovn.Hacspec_ovn_Ovn_traits <> t_Sub class +R1921:1925 Hacspec_ovn.Hacspec_ovn_Ovn_traits <> t_Sub class +rec 1943:1949 <> t_Field +proj 1993:2001 <> Field_f_q +proj 2025:2049 <> Field_f_random_field_elem +proj 2074:2091 <> Field_f_field_zero +proj 2115:2131 <> Field_f_field_one +proj 2155:2165 <> Field_f_inv +proj 2191:2217 <> Field_H11581440318597584651 +proj 2242:2268 <> Field_H12632649257025169145 +proj 2307:2332 <> Field_H8099741844003281729 +proj 2355:2380 <> Field_H9442900250278684536 +proj 2406:2432 <> Field_H17605656595743636193 +proj 2462:2488 <> Field_H12091683018502772129 +proj 2618:2643 <> Field_H9509749083603562901 +proj 2676:2703 <> Field_Heq9509749083603562901 +proj 2738:2763 <> Field_H7732034498048571850 +proj 2787:2814 <> Field_Heq7732034498048571850 +R1962:1972 Crypt.choice_type <> choice_type ind +binder 1953:1958 <> v_Self:30 +R2009:2012 Coq.Init.Logic <> ::type_scope:x_'->'_x not +R2005:2008 Coq.Init.Datatypes <> unit ind +R2013:2018 Hacspec_ovn.Hacspec_ovn_Ovn_traits <> v_Self:30 var +R2058:2061 Coq.Init.Logic <> ::type_scope:x_'->'_x not +R2053:2057 Hacspec.Hacspec_Lib_Pre <> int32 abbrev +R2062:2067 Hacspec_ovn.Hacspec_ovn_Ovn_traits <> v_Self:30 var +R2099:2102 Coq.Init.Logic <> ::type_scope:x_'->'_x not +R2095:2098 Coq.Init.Datatypes <> unit ind +R2103:2108 Hacspec_ovn.Hacspec_ovn_Ovn_traits <> v_Self:30 var +R2139:2142 Coq.Init.Logic <> ::type_scope:x_'->'_x not +R2135:2138 Coq.Init.Datatypes <> unit ind +R2143:2148 Hacspec_ovn.Hacspec_ovn_Ovn_traits <> v_Self:30 var +R2175:2178 Coq.Init.Logic <> ::type_scope:x_'->'_x not +R2169:2174 Hacspec_ovn.Hacspec_ovn_Ovn_traits <> v_Self:30 var +R2179:2184 Hacspec_ovn.Hacspec_ovn_Ovn_traits <> v_Self:30 var +R2221:2226 Hacspec.Hacspec_Lib_TODO <> t_Copy class +R2229:2234 Hacspec_ovn.Hacspec_ovn_Ovn_traits <> v_Self:30 var +R2272:2282 Hacspec.Hacspec_Lib_TODO <> t_PartialEq class +R2294:2299 Hacspec_ovn.Hacspec_ovn_Ovn_traits <> v_Self:30 var +R2285:2290 Hacspec_ovn.Hacspec_ovn_Ovn_traits <> v_Self:30 var +R2336:2348 Hacspec.Hacspec_Lib_TODO <> :::'t_Eq' not +R2342:2347 Hacspec_ovn.Hacspec_ovn_Ovn_traits <> v_Self:30 var +R2384:2390 Hacspec.Hacspec_Lib_TODO <> t_Clone class +R2393:2398 Hacspec_ovn.Hacspec_ovn_Ovn_traits <> v_Self:30 var +R2436:2446 Hacspec.Hacspec_Lib_TODO <> t_Serialize class +R2449:2454 Hacspec_ovn.Hacspec_ovn_Ovn_traits <> v_Self:30 var +R2492:2496 Hacspec_ovn.Hacspec_ovn_Ovn_traits <> t_Mul class +R2508:2513 Hacspec_ovn.Hacspec_ovn_Ovn_traits <> v_Self:30 var +R2499:2504 Hacspec_ovn.Hacspec_ovn_Ovn_traits <> v_Self:30 var +R2541:2543 Coq.Init.Logic <> ::type_scope:x_'='_x not +R2528:2539 Hacspec_ovn.Hacspec_ovn_Ovn_traits <> Mul_f_Output meth +R2544:2549 Hacspec_ovn.Hacspec_ovn_Ovn_traits <> v_Self:30 var +R2647:2651 Hacspec_ovn.Hacspec_ovn_Ovn_traits <> t_Add class +R2663:2668 Hacspec_ovn.Hacspec_ovn_Ovn_traits <> v_Self:30 var +R2654:2659 Hacspec_ovn.Hacspec_ovn_Ovn_traits <> v_Self:30 var +R2723:2725 Coq.Init.Logic <> ::type_scope:x_'='_x not +R2710:2721 Hacspec_ovn.Hacspec_ovn_Ovn_traits <> Add_f_Output meth +R2726:2731 Hacspec_ovn.Hacspec_ovn_Ovn_traits <> v_Self:30 var +R2767:2771 Hacspec_ovn.Hacspec_ovn_Ovn_traits <> t_Neg class +R2774:2779 Hacspec_ovn.Hacspec_ovn_Ovn_traits <> v_Self:30 var +R2834:2836 Coq.Init.Logic <> ::type_scope:x_'='_x not +R2821:2832 Hacspec_ovn.Hacspec_ovn_Ovn_traits <> Neg_f_Output meth +R2837:2842 Hacspec_ovn.Hacspec_ovn_Ovn_traits <> v_Self:30 var +R2861:2867 Hacspec_ovn.Hacspec_ovn_Ovn_traits <> t_Field class +R2861:2867 Hacspec_ovn.Hacspec_ovn_Ovn_traits <> t_Field class +rec 2970:2976 <> t_Group +proj 3020:3028 <> Group_f_Z +proj 3049:3051 <> Hi0 +proj 3080:3088 <> Group_f_g +proj 3112:3124 <> Group_f_g_pow +proj 3153:3163 <> Group_f_pow +proj 3202:3218 <> Group_f_group_one +proj 3242:3258 <> Group_f_group_inv +proj 3284:3295 <> Group_f_hash +proj 3347:3367 <> H11581440318597584651 +proj 3392:3412 <> H12632649257025169145 +proj 3451:3470 <> H8099741844003281729 +proj 3493:3512 <> H9442900250278684536 +proj 3538:3558 <> H17605656595743636193 +proj 3588:3608 <> H12091683018502772129 +R2989:2999 Crypt.choice_type <> choice_type ind +binder 2980:2985 <> v_Self:47 +R3032:3042 Crypt.choice_type <> choice_type ind +R3055:3061 Hacspec_ovn.Hacspec_ovn_Ovn_traits <> t_Field class +R3064:3072 Hacspec_ovn.Hacspec_ovn_Ovn_traits <> Group_f_Z:49 meth +R3096:3099 Coq.Init.Logic <> ::type_scope:x_'->'_x not +R3092:3095 Coq.Init.Datatypes <> unit ind +R3100:3105 Hacspec_ovn.Hacspec_ovn_Ovn_traits <> v_Self:47 var +R3137:3140 Coq.Init.Logic <> ::type_scope:x_'->'_x not +R3128:3136 Hacspec_ovn.Hacspec_ovn_Ovn_traits <> Group_f_Z:49 meth +R3141:3146 Hacspec_ovn.Hacspec_ovn_Ovn_traits <> v_Self:47 var +R3173:3176 Coq.Init.Logic <> ::type_scope:x_'->'_x not +R3167:3172 Hacspec_ovn.Hacspec_ovn_Ovn_traits <> v_Self:47 var +R3186:3189 Coq.Init.Logic <> ::type_scope:x_'->'_x not +R3177:3185 Hacspec_ovn.Hacspec_ovn_Ovn_traits <> Group_f_Z:49 meth +R3190:3195 Hacspec_ovn.Hacspec_ovn_Ovn_traits <> v_Self:47 var +R3226:3229 Coq.Init.Logic <> ::type_scope:x_'->'_x not +R3222:3225 Coq.Init.Datatypes <> unit ind +R3230:3235 Hacspec_ovn.Hacspec_ovn_Ovn_traits <> v_Self:47 var +R3268:3271 Coq.Init.Logic <> ::type_scope:x_'->'_x not +R3262:3267 Hacspec_ovn.Hacspec_ovn_Ovn_traits <> v_Self:47 var +R3272:3277 Hacspec_ovn.Hacspec_ovn_Ovn_traits <> v_Self:47 var +R3328:3331 Coq.Init.Logic <> ::type_scope:x_'->'_x not +R3299:3303 Hacspec.Hacspec_Lib_TODO <> t_Vec def +R3307:3312 Hacspec_ovn.Hacspec_ovn_Ovn_traits <> v_Self:47 var +R3318:3325 Hacspec.Hacspec_Lib_TODO <> t_Global constr +R3332:3340 Hacspec_ovn.Hacspec_ovn_Ovn_traits <> Group_f_Z:49 meth +R3371:3376 Hacspec.Hacspec_Lib_TODO <> t_Copy class +R3379:3384 Hacspec_ovn.Hacspec_ovn_Ovn_traits <> v_Self:47 var +R3416:3426 Hacspec.Hacspec_Lib_TODO <> t_PartialEq class +R3438:3443 Hacspec_ovn.Hacspec_ovn_Ovn_traits <> v_Self:47 var +R3429:3434 Hacspec_ovn.Hacspec_ovn_Ovn_traits <> v_Self:47 var +R3474:3486 Hacspec.Hacspec_Lib_TODO <> :::'t_Eq' not +R3480:3485 Hacspec_ovn.Hacspec_ovn_Ovn_traits <> v_Self:47 var +R3516:3522 Hacspec.Hacspec_Lib_TODO <> t_Clone class +R3525:3530 Hacspec_ovn.Hacspec_ovn_Ovn_traits <> v_Self:47 var +R3562:3572 Hacspec.Hacspec_Lib_TODO <> t_Serialize class +R3575:3580 Hacspec_ovn.Hacspec_ovn_Ovn_traits <> v_Self:47 var +R3612:3616 Hacspec_ovn.Hacspec_ovn_Ovn_traits <> t_Mul class +R3628:3633 Hacspec_ovn.Hacspec_ovn_Ovn_traits <> v_Self:47 var +R3619:3624 Hacspec_ovn.Hacspec_ovn_Ovn_traits <> v_Self:47 var +R3661:3663 Coq.Init.Logic <> ::type_scope:x_'='_x not +R3648:3659 Hacspec_ovn.Hacspec_ovn_Ovn_traits <> Mul_f_Output meth +R3664:3669 Hacspec_ovn.Hacspec_ovn_Ovn_traits <> v_Self:47 var +R3749:3755 Hacspec_ovn.Hacspec_ovn_Ovn_traits <> t_Group class +R3749:3755 Hacspec_ovn.Hacspec_ovn_Ovn_traits <> t_Group class diff --git a/ovn/proofs/ssprove/extraction/Hacspec_ovn_Ovn_traits.v b/ovn/proofs/ssprove/extraction/Hacspec_ovn_Ovn_traits.v new file mode 100644 index 0000000..a7a27fe --- /dev/null +++ b/ovn/proofs/ssprove/extraction/Hacspec_ovn_Ovn_traits.v @@ -0,0 +1,79 @@ +(* File automatically generated by Hacspec *) +From Coq Require Import ZArith. +Require Import List. +Import List.ListNotations. +Open Scope Z_scope. +Open Scope bool_scope. +Require Import Ascii. +Require Import String. +Require Import Coq.Floats.Floats. +From RecordUpdate Require Import RecordSet. +Import RecordSetNotations. +From Crypt Require Import choice_type Package Prelude. +Import PackageNotation. +From extructures Require Import ord fset. +From mathcomp Require Import word_ssrZ word. +Import choice.Choice.Exports. + +From Hacspec Require Import ChoiceEquality. +From Hacspec Require Import LocationUtility. +From Hacspec Require Import Hacspec_Lib_Comparable. +From Hacspec Require Import Hacspec_Lib_Pre. +From Hacspec Require Import Hacspec_Lib. +From Hacspec Require Import ConCertLib. + +Class t_Field `{v_Self : choice_type} : Type := + { + Field_f_q : unit -> v_Self; + Field_f_random_field_elem : t_u32 -> v_Self; + Field_f_field_zero : unit -> v_Self; + Field_f_field_one : unit -> v_Self; + Field_f_inv : v_Self -> v_Self; + H11581440318597584651 : t_Copy (v_Self); + H12632649257025169145 : t_PartialEq (v_Self) (v_Self); + H8099741844003281729 : t_Eq (v_Self); + H9442900250278684536 : t_Clone (v_Self); + H17605656595743636193 : t_Serialize (v_Self); + H12091683018502772129 : t_Mul (v_Self) (v_Self); + _.(Mul_f_Output) = v_Self; + H8449417958832886617 : t_Product (v_Self) (v_Self); + H9509749083603562901 : t_Add (v_Self) (v_Self); + _.(Add_f_Output) = v_Self; + H7732034498048571850 : t_Neg (v_Self); + _.(Neg_f_Output) = v_Self; + }.. + +Class t_Group `{v_Self : choice_type} : Type := + { + Group_f_Z : choice_type; + Hi0 : t_Field (Group_f_Z); + _ : _.(Neg_f_Output) = Group_f_Z; + Hi1 : t_Neg (Group_f_Z); + _ : _.(Add_f_Output) = Group_f_Z; + Hi2 : t_Add (Group_f_Z) (Group_f_Z); + Hi3 : t_Product (Group_f_Z) (Group_f_Z); + _ : _.(Mul_f_Output) = Group_f_Z; + Hi4 : t_Mul (Group_f_Z) (Group_f_Z); + Hi5 : t_Serialize (Group_f_Z); + Hi6 : t_Deserial (Group_f_Z); + Hi7 : t_Serial (Group_f_Z); + Hi8 : t_Clone (Group_f_Z); + Hi9 : t_Eq (Group_f_Z); + Hi10 : t_PartialEq (Group_f_Z) (Group_f_Z); + Hi11 : t_Copy (Group_f_Z); + Hi12 : t_Sized (Group_f_Z); + Group_f_g : unit -> v_Self; + Group_f_g_pow : Group_f_Z -> v_Self; + Group_f_pow : v_Self -> Group_f_Z -> v_Self; + Group_f_group_one : unit -> v_Self; + Group_f_group_inv : v_Self -> v_Self; + Group_f_hash : t_Vec ((v_Self)) ((t_Global)) -> Group_f_Z; + H11581440318597584651 : t_Copy (v_Self); + H12632649257025169145 : t_PartialEq (v_Self) (v_Self); + H8099741844003281729 : t_Eq (v_Self); + H9442900250278684536 : t_Clone (v_Self); + H17605656595743636193 : t_Serialize (v_Self); + H12091683018502772129 : t_Mul (v_Self) (v_Self); + _.(Mul_f_Output) = v_Self; + H8449417958832886617 : t_Product (v_Self) (v_Self); + }.. diff --git a/ovn/proofs/ssprove/extraction/Hacspec_ovn_Ovn_traits.vo b/ovn/proofs/ssprove/extraction/Hacspec_ovn_Ovn_traits.vo new file mode 100644 index 0000000..de8e715 Binary files /dev/null and b/ovn/proofs/ssprove/extraction/Hacspec_ovn_Ovn_traits.vo differ diff --git a/ovn/proofs/ssprove/extraction/Hacspec_ovn_Ovn_traits.vok b/ovn/proofs/ssprove/extraction/Hacspec_ovn_Ovn_traits.vok new file mode 100644 index 0000000..e69de29 diff --git a/ovn/proofs/ssprove/extraction/Hacspec_ovn_Ovn_traits.vos b/ovn/proofs/ssprove/extraction/Hacspec_ovn_Ovn_traits.vos new file mode 100644 index 0000000..e69de29 diff --git a/ovn/proofs/ssprove/extraction/Hacspec_ovn_Ovn_z_89_.v b/ovn/proofs/ssprove/extraction/Hacspec_ovn_Ovn_z_89_.v new file mode 100644 index 0000000..40d2f59 --- /dev/null +++ b/ovn/proofs/ssprove/extraction/Hacspec_ovn_Ovn_z_89_.v @@ -0,0 +1,145 @@ +(* File automatically generated by Hacspec *) +From Coq Require Import ZArith. +Require Import List. +Import List.ListNotations. +Open Scope Z_scope. +Open Scope bool_scope. +Require Import Ascii. +Require Import String. +Require Import Coq.Floats.Floats. +From RecordUpdate Require Import RecordSet. +Import RecordSetNotations. +From Crypt Require Import choice_type Package Prelude. +Import PackageNotation. +From extructures Require Import ord fset. +From mathcomp Require Import word_ssrZ word. +Import choice.Choice.Exports. + +From Hacspec Require Import ChoiceEquality. +From Hacspec Require Import LocationUtility. +From Hacspec Require Import Hacspec_Lib_Comparable. +From Hacspec Require Import Hacspec_Lib_Pre. +From Hacspec Require Import Hacspec_Lib. +From Hacspec Require Import ConCertLib. + +From Hacspec_ovn Require Import Hacspec_ovn (t_ovn_traits). +Export Hacspec_ovn (t_ovn_traits). + +Definition t_g_z_89_ : choice_type := + t_u8.Definition Build_t_g_z_89_ : t_g_z_89_ := + g_z_89__f_g_val. +Definition g_z_89__f_g_val (x : t_g_z_89_) : t_u8 := + x. +#[export] Instance settable_t_g_z_89_ : Settable _ := + settable! (@Build_t_g_z_89_) . + +Definition t_z_89_ : choice_type := + t_u8.Definition Build_t_z_89_ : t_z_89_ := + z_89__f_z_val. +Definition z_89__f_z_val (x : t_z_89_) : t_u8 := + x. +#[export] Instance settable_t_z_89_ : Settable _ := + settable! (@Build_t_z_89_) . + +Instance t_Product_516576874 : t_Product ((t_z_89_)) ((t_z_89_)) := + { + t_Product_impl_1_f_product := fun (iter : v_I) => + Iterator_f_fold (iter) (Build_t_C_z_89_ (1)) (fun a b => + Mul_f_mul (a) (b)); + }. + +Instance t_Product_550947082 : t_Product ((t_g_z_89_)) ((t_g_z_89_)) := + { + t_Product_impl_6_f_product := fun (iter : v_I) => + Iterator_f_fold (iter) (Build_t_C_g_z_89_ (1)) (fun a b => + Mul_f_mul (a) (b)); + }. + +Instance t_Mul_1006909152 : t_Mul ((t_z_89_)) ((t_z_89_)) := + { + t_Mul_impl_f_Output := t_z_89_; + t_Mul_impl_f_mul := fun (self : t_z_89_) (y : t_z_89_) => + let q___ := sub (z_89__f_z_val Field_f_q (tt)) (1) in + let x___ : t_u16 := cast (t_Rem_f_rem (z_89__f_z_val self) (q___)) in + let y___ : t_u16 := cast (t_Rem_f_rem (z_89__f_z_val y) (q___)) in + Build_t_C_z_89_ (cast (t_Rem_f_rem (t_Mul_f_mul (x___) (y___)) (cast (q___)))); + }. + +Instance t_Add_753400148 : t_Add ((t_z_89_)) ((t_z_89_)) := + { + t_Add_impl_2_f_Output := t_z_89_; + t_Add_impl_2_f_add := fun (self : t_z_89_) (y : t_z_89_) => + let q___ := sub (z_89__f_z_val Field_f_q (tt)) (1) in + let x___ := t_Rem_f_rem (z_89__f_z_val self) (q___) in + let y___ := t_Rem_f_rem (z_89__f_z_val y) (q___) in + Build_t_C_z_89_ (t_Rem_f_rem (t_Add_f_add (x___) (y___)) (q___)); + }. + +Instance t_Neg_486327576 : t_Neg ((t_z_89_)) := + { + t_Neg_impl_3_f_Output := t_z_89_; + t_Neg_impl_3_f_neg := fun (self : t_z_89_) => + let q___ := sub (z_89__f_z_val Field_f_q (tt)) (1) in + let x___ := t_Rem_f_rem (z_89__f_z_val self) (q___) in + Build_t_C_z_89_ (sub (q___) (x___)); + }. + +Instance t_Field_519153209 : t_Field ((t_z_89_)) := + { + t_Field_impl_4_f_q := fun (_ : unit) => + Build_t_C_z_89_ (89); + t_Field_impl_4_f_random_field_elem := fun (random : t_u32) => + Build_t_C_z_89_ (t_Rem_f_rem (cast (random)) (sub (z_89__f_z_val Field_f_q (tt)) (1))); + t_Field_impl_4_f_field_zero := fun (_ : unit) => + Build_t_C_z_89_ (0); + t_Field_impl_4_f_field_one := fun (_ : unit) => + Build_t_C_z_89_ (1); + t_Field_impl_4_f_inv := fun (x : t_z_89_) => + run (let _ := assert (false) in + let hoist30 := ControlFlow_Break (x) in + ControlFlow_Continue (never_to_any (hoist30))); + }. + +Instance t_Mul_509828028 : t_Mul ((t_g_z_89_)) ((t_g_z_89_)) := + { + t_Mul_impl_5_f_Output := t_g_z_89_; + t_Mul_impl_5_f_mul := fun (self : t_g_z_89_) (y : t_g_z_89_) => + let q___ := z_89__f_z_val Field_f_q (tt) in + let x___ := cast (t_Rem_f_rem (g_z_89__f_g_val self) (q___)) in + let y___ := cast (t_Rem_f_rem (g_z_89__f_g_val y) (q___)) in + Build_t_C_g_z_89_ (cast (t_Rem_f_rem (t_Mul_f_mul (x___) (y___)) (cast (q___)))); + }. + +Instance t_Group_794386426 : t_Group ((t_g_z_89_)) := + { + t_Group_impl_7_f_Z := t_z_89_; + t_Group_impl_7_f_g := fun (_ : unit) => + Build_t_C_g_z_89_ (3); + t_Group_impl_7_f_hash := fun (x : t_Vec ((t_g_z_89_)) ((t_Global))) => + let res := Field_f_field_one (tt) in + let _ := {IntoIterator_f_into_iter (x)} inP? [y] [is_none]default of ( + TODO: please implement the method `lhs_LhsLocalVar` := Mul_f_mul (Build_t_C_z_89_ (g_z_89__f_g_val y)) (res)) in + res; + t_Group_impl_7_f_g_pow := fun (x : t_z_89_) => + Group_f_pow (Group_f_g (tt)) (x); + t_Group_impl_7_f_pow := fun (g : t_g_z_89_) (x : t_z_89_) => + let result := Group_f_group_one (tt) in + let _ := {IntoIterator_f_into_iter (Build_t_Range (0, t_Rem_f_rem (z_89__f_z_val x) (sub (z_89__f_z_val Field_f_q (tt)) (1))))} inP? [_] [is_none]default of ( + TODO: please implement the method `lhs_LhsLocalVar` := Mul_f_mul (result) (g)) in + result; + t_Group_impl_7_f_group_one := fun (_ : unit) => + Build_t_C_g_z_89_ (1); + t_Group_impl_7_f_group_inv := fun (x : t_g_z_89_) => + run (let _ := {IntoIterator_f_into_iter (Build_t_Range (0, 89))} inP? [j] [is_none]default of ( + let g_value := Build_t_C_g_z_89_ (j) in + if + PartialEq_f_eq (Mul_f_mul (x) (g_value)) (Group_f_group_one (tt)) + then + let hoist31 := ControlFlow_Break (g_value) in + ControlFlow_Continue (never_to_any (hoist31)) + else + tt) in + let _ := assert (false) in + let hoist32 := ControlFlow_Break (x) in + ControlFlow_Continue (never_to_any (hoist32))); + }. diff --git a/ovn/proofs/ssprove/extraction/Makefile b/ovn/proofs/ssprove/extraction/Makefile new file mode 100644 index 0000000..42626b6 --- /dev/null +++ b/ovn/proofs/ssprove/extraction/Makefile @@ -0,0 +1,989 @@ +########################################################################## +## # The Coq Proof Assistant / The Coq Development Team ## +## v # Copyright INRIA, CNRS and contributors ## +## /dev/null 2>/dev/null; echo $$?)) +STDTIME?=command time -f $(TIMEFMT) +else +ifeq (0,$(shell gtime -f "" true >/dev/null 2>/dev/null; echo $$?)) +STDTIME?=gtime -f $(TIMEFMT) +else +STDTIME?=command time +endif +endif +else +STDTIME?=command time -f $(TIMEFMT) +endif + +COQBIN?= +ifneq (,$(COQBIN)) +# add an ending / +COQBIN:=$(COQBIN)/ +endif + +# Coq binaries +COQC ?= "$(COQBIN)coqc" +COQTOP ?= "$(COQBIN)coqtop" +COQCHK ?= "$(COQBIN)coqchk" +COQNATIVE ?= "$(COQBIN)coqnative" +COQDEP ?= "$(COQBIN)coqdep" +COQDOC ?= "$(COQBIN)coqdoc" +COQPP ?= "$(COQBIN)coqpp" +COQMKFILE ?= "$(COQBIN)coq_makefile" +OCAMLLIBDEP ?= "$(COQBIN)ocamllibdep" + +# Timing scripts +COQMAKE_ONE_TIME_FILE ?= "$(COQCORELIB)/tools/make-one-time-file.py" +COQMAKE_BOTH_TIME_FILES ?= "$(COQCORELIB)/tools/make-both-time-files.py" +COQMAKE_BOTH_SINGLE_TIMING_FILES ?= "$(COQCORELIB)/tools/make-both-single-timing-files.py" +BEFORE ?= +AFTER ?= + +# OCaml binaries +CAMLC ?= "$(OCAMLFIND)" ocamlc -c +CAMLOPTC ?= "$(OCAMLFIND)" opt -c +CAMLLINK ?= "$(OCAMLFIND)" ocamlc -linkall +CAMLOPTLINK ?= "$(OCAMLFIND)" opt -linkall +CAMLDOC ?= "$(OCAMLFIND)" ocamldoc +CAMLDEP ?= "$(OCAMLFIND)" ocamldep -slash -ml-synonym .mlpack + +# DESTDIR is prepended to all installation paths +DESTDIR ?= + +# Debug builds, typically -g to OCaml, -debug to Coq. +CAMLDEBUG ?= +COQDEBUG ?= + +# Extra packages to be linked in (as in findlib -package) +CAMLPKGS ?= +FINDLIBPKGS = -package coq-core.plugins.ltac $(CAMLPKGS) + +# Option for making timing files +TIMING?= +# Option for changing sorting of timing output file +TIMING_SORT_BY ?= auto +# Option for changing the fuzz parameter on the output file +TIMING_FUZZ ?= 0 +# Option for changing whether to use real or user time for timing tables +TIMING_REAL?= +# Option for including the memory column(s) +TIMING_INCLUDE_MEM?= +# Option for sorting by the memory column +TIMING_SORT_BY_MEM?= +# Output file names for timed builds +TIME_OF_BUILD_FILE ?= time-of-build.log +TIME_OF_BUILD_BEFORE_FILE ?= time-of-build-before.log +TIME_OF_BUILD_AFTER_FILE ?= time-of-build-after.log +TIME_OF_PRETTY_BUILD_FILE ?= time-of-build-pretty.log +TIME_OF_PRETTY_BOTH_BUILD_FILE ?= time-of-build-both.log +TIME_OF_PRETTY_BUILD_EXTRA_FILES ?= - # also output to the command line + +TGTS ?= + +# Retro compatibility (DESTDIR is standard on Unix, DSTROOT is not) +ifdef DSTROOT +DESTDIR := $(DSTROOT) +endif + +# Substitution of the path by appending $(DESTDIR) if needed. +# The variable $(COQMF_WINDRIVE) can be needed for Cygwin environments. +windrive_path = $(if $(COQMF_WINDRIVE),$(subst $(COQMF_WINDRIVE),/,$(1)),$(1)) +destination_path = $(if $(DESTDIR),$(DESTDIR)/$(call windrive_path,$(1)),$(1)) + +# Installation paths of libraries and documentation. +COQLIBINSTALL ?= $(call destination_path,$(COQLIB)/user-contrib) +COQDOCINSTALL ?= $(call destination_path,$(DOCDIR)/coq/user-contrib) +COQPLUGININSTALL ?= $(call destination_path,$(COQCORELIB)/..) +COQTOPINSTALL ?= $(call destination_path,$(COQLIB)/toploop) # FIXME: Unused variable? + +# findlib files installation +FINDLIBPREINST= mkdir -p "$(COQPLUGININSTALL)/" +FINDLIBDESTDIR= -destdir "$(COQPLUGININSTALL)/" + +# we need to move out of sight $(METAFILE) otherwise findlib thinks the +# package is already installed +findlib_install = \ + $(HIDE)if [ "$(METAFILE)" ]; then \ + $(FINDLIBPREINST) && \ + mv "$(METAFILE)" "$(METAFILE).skip" ; \ + "$(OCAMLFIND)" install $(2) $(FINDLIBDESTDIR) $(FINDLIBPACKAGE) $(1); \ + rc=$$?; \ + mv "$(METAFILE).skip" "$(METAFILE)"; \ + exit $$rc; \ + fi +findlib_remove = \ + $(HIDE)if [ ! -z "$(METAFILE)" ]; then\ + "$(OCAMLFIND)" remove $(FINDLIBDESTDIR) $(FINDLIBPACKAGE); \ + fi + + +########## End of parameters ################################################## +# What follows may be relevant to you only if you need to +# extend this Makefile. If so, look for 'Extension point' here and +# put in Makefile.local double colon rules accordingly. +# E.g. to perform some work after the all target completes you can write +# +# post-all:: +# echo "All done!" +# +# in Makefile.local +# +############################################################################### + + + + +# Flags ####################################################################### +# +# We define a bunch of variables combining the parameters. +# To add additional flags to coq, coqchk or coqdoc, set the +# {COQ,COQCHK,COQDOC}EXTRAFLAGS variable to whatever you want to add. +# To overwrite the default choice and set your own flags entirely, set the +# {COQ,COQCHK,COQDOC}FLAGS variable. + +SHOW := $(if $(VERBOSE),@true "",@echo "") +HIDE := $(if $(VERBOSE),,@) + +TIMER=$(if $(TIMED), $(STDTIME), $(TIMECMD)) + +OPT?= + +# The DYNOBJ and DYNLIB variables are used by "coqdep -dyndep var" in .v.d +ifeq '$(OPT)' '-byte' +USEBYTE:=true +DYNOBJ:=.cma +DYNLIB:=.cma +else +USEBYTE:= +DYNOBJ:=.cmxs +DYNLIB:=.cmxs +endif + +# these variables are meant to be overridden if you want to add *extra* flags +COQEXTRAFLAGS?= +COQCHKEXTRAFLAGS?= +COQDOCEXTRAFLAGS?= + +# Find the last argument of the form "-native-compiler FLAG" +COQUSERNATIVEFLAG:=$(strip \ +$(subst -native-compiler-,,\ +$(lastword \ +$(filter -native-compiler-%,\ +$(subst -native-compiler ,-native-compiler-,\ +$(strip $(COQEXTRAFLAGS))))))) + +COQFILTEREDEXTRAFLAGS:=$(strip \ +$(filter-out -native-compiler-%,\ +$(subst -native-compiler ,-native-compiler-,\ +$(strip $(COQEXTRAFLAGS))))) + +COQACTUALNATIVEFLAG:=$(lastword $(COQMF_COQ_NATIVE_COMPILER_DEFAULT) $(COQMF_COQPROJECTNATIVEFLAG) $(COQUSERNATIVEFLAG)) + +ifeq '$(COQACTUALNATIVEFLAG)' 'yes' + COQNATIVEFLAG="-w" "-deprecated-native-compiler-option" "-native-compiler" "ondemand" + COQDONATIVE="yes" +else +ifeq '$(COQACTUALNATIVEFLAG)' 'ondemand' + COQNATIVEFLAG="-w" "-deprecated-native-compiler-option" "-native-compiler" "ondemand" + COQDONATIVE="no" +else + COQNATIVEFLAG="-w" "-deprecated-native-compiler-option" "-native-compiler" "no" + COQDONATIVE="no" +endif +endif + +# these flags do NOT contain the libraries, to make them easier to overwrite +COQFLAGS?=-q $(OTHERFLAGS) $(COQFILTEREDEXTRAFLAGS) $(COQNATIVEFLAG) +COQCHKFLAGS?=-silent -o $(COQCHKEXTRAFLAGS) +COQDOCFLAGS?=-interpolate -utf8 $(COQDOCEXTRAFLAGS) + +COQDOCLIBS?=$(COQLIBS_NOML) + +# The version of Coq being run and the version of coq_makefile that +# generated this makefile +COQ_VERSION:=$(shell $(COQC) --print-version | cut -d " " -f 1) +COQMAKEFILE_VERSION:=8.18.0 + +# COQ_SRC_SUBDIRS is for user-overriding, usually to add +# `user-contrib/Foo` to the includes, we keep COQCORE_SRC_SUBDIRS for +# Coq's own core libraries, which should be replaced by ocamlfind +# options at some point. +COQ_SRC_SUBDIRS?= +COQSRCLIBS?= $(foreach d,$(COQ_SRC_SUBDIRS), -I "$(COQLIB)/$(d)") + +CAMLFLAGS+=$(OCAMLLIBS) $(COQSRCLIBS) +# ocamldoc fails with unknown argument otherwise +CAMLDOCFLAGS:=$(filter-out -annot, $(filter-out -bin-annot, $(CAMLFLAGS))) +CAMLFLAGS+=$(OCAMLWARN) + +ifneq (,$(TIMING)) + ifeq (after,$(TIMING)) + TIMING_EXT=after-timing + else + ifeq (before,$(TIMING)) + TIMING_EXT=before-timing + else + TIMING_EXT=timing + endif + endif + TIMING_ARG=-time-file $<.$(TIMING_EXT) +else + TIMING_ARG= +endif + +# Files ####################################################################### +# +# We here define a bunch of variables about the files being part of the +# Coq project in order to ease the writing of build target and build rules + +VDFILE := .Makefile.d + +ALLSRCFILES := \ + $(MLGFILES) \ + $(MLFILES) \ + $(MLPACKFILES) \ + $(MLLIBFILES) \ + $(MLIFILES) + +# helpers +vo_to_obj = $(addsuffix .o,\ + $(filter-out Warning: Error:,\ + $(shell $(COQTOP) -q -noinit -batch -quiet -print-mod-uid $(1)))) +strip_dotslash = $(patsubst ./%,%,$(1)) + +# without this we get undefined variables in the expansion for the +# targets of the [deprecated,use-mllib-or-mlpack] rule +with_undef = $(if $(filter-out undefined, $(origin $(1))),$($(1))) + +VO = vo +VOS = vos + +VOFILES = $(VFILES:.v=.$(VO)) +GLOBFILES = $(VFILES:.v=.glob) +HTMLFILES = $(VFILES:.v=.html) +GHTMLFILES = $(VFILES:.v=.g.html) +BEAUTYFILES = $(addsuffix .beautified,$(VFILES)) +TEXFILES = $(VFILES:.v=.tex) +GTEXFILES = $(VFILES:.v=.g.tex) +CMOFILES = \ + $(MLGFILES:.mlg=.cmo) \ + $(MLFILES:.ml=.cmo) \ + $(MLPACKFILES:.mlpack=.cmo) +CMXFILES = $(CMOFILES:.cmo=.cmx) +OFILES = $(CMXFILES:.cmx=.o) +CMAFILES = $(MLLIBFILES:.mllib=.cma) $(MLPACKFILES:.mlpack=.cma) +CMXAFILES = $(CMAFILES:.cma=.cmxa) +CMIFILES = \ + $(CMOFILES:.cmo=.cmi) \ + $(MLIFILES:.mli=.cmi) +# the /if/ is because old _CoqProject did not list a .ml(pack|lib) but just +# a .mlg file +CMXSFILES = \ + $(MLPACKFILES:.mlpack=.cmxs) \ + $(CMXAFILES:.cmxa=.cmxs) \ + $(if $(MLPACKFILES)$(CMXAFILES),,\ + $(MLGFILES:.mlg=.cmxs) $(MLFILES:.ml=.cmxs)) + +# files that are packed into a plugin (no extension) +PACKEDFILES = \ + $(call strip_dotslash, \ + $(foreach lib, \ + $(call strip_dotslash, \ + $(MLPACKFILES:.mlpack=_MLPACK_DEPENDENCIES)),$(call with_undef,$(lib)))) +# files that are archived into a .cma (mllib) +LIBEDFILES = \ + $(call strip_dotslash, \ + $(foreach lib, \ + $(call strip_dotslash, \ + $(MLLIBFILES:.mllib=_MLLIB_DEPENDENCIES)),$(call with_undef,$(lib)))) +CMIFILESTOINSTALL = $(filter-out $(addsuffix .cmi,$(PACKEDFILES)),$(CMIFILES)) +CMOFILESTOINSTALL = $(filter-out $(addsuffix .cmo,$(PACKEDFILES)),$(CMOFILES)) +OBJFILES = $(call vo_to_obj,$(VOFILES)) +ALLNATIVEFILES = \ + $(OBJFILES:.o=.cmi) \ + $(OBJFILES:.o=.cmx) \ + $(OBJFILES:.o=.cmxs) +FINDLIBPACKAGE=$(patsubst .%,%,$(suffix $(METAFILE))) + +# trick: wildcard filters out non-existing files, so that `install` doesn't show +# warnings and `clean` doesn't pass to rm a list of files that is too long for +# the shell. +NATIVEFILES = $(wildcard $(ALLNATIVEFILES)) +FILESTOINSTALL = \ + $(VOFILES) \ + $(VFILES) \ + $(GLOBFILES) \ + $(NATIVEFILES) \ + $(CMXSFILES) # to be removed when we remove legacy loading +FINDLIBFILESTOINSTALL = \ + $(CMIFILESTOINSTALL) +ifeq '$(HASNATDYNLINK)' 'true' +DO_NATDYNLINK = yes +FINDLIBFILESTOINSTALL += $(CMXSFILES) $(CMXAFILES) $(CMOFILESTOINSTALL:.cmo=.cmx) +else +DO_NATDYNLINK = +endif + +ALLDFILES = $(addsuffix .d,$(ALLSRCFILES)) $(VDFILE) + +# Compilation targets ######################################################### + +all: + $(HIDE)$(MAKE) --no-print-directory -f "$(SELF)" pre-all + $(HIDE)$(MAKE) --no-print-directory -f "$(SELF)" real-all + $(HIDE)$(MAKE) --no-print-directory -f "$(SELF)" post-all +.PHONY: all + +all.timing.diff: + $(HIDE)$(MAKE) --no-print-directory -f "$(SELF)" pre-all + $(HIDE)$(MAKE) --no-print-directory -f "$(SELF)" real-all.timing.diff TIME_OF_PRETTY_BUILD_EXTRA_FILES="" + $(HIDE)$(MAKE) --no-print-directory -f "$(SELF)" post-all +.PHONY: all.timing.diff + +ifeq (0,$(TIMING_REAL)) +TIMING_REAL_ARG := +TIMING_USER_ARG := --user +else +ifeq (1,$(TIMING_REAL)) +TIMING_REAL_ARG := --real +TIMING_USER_ARG := +else +TIMING_REAL_ARG := +TIMING_USER_ARG := +endif +endif + +ifeq (0,$(TIMING_INCLUDE_MEM)) +TIMING_INCLUDE_MEM_ARG := --no-include-mem +else +TIMING_INCLUDE_MEM_ARG := +endif + +ifeq (1,$(TIMING_SORT_BY_MEM)) +TIMING_SORT_BY_MEM_ARG := --sort-by-mem +else +TIMING_SORT_BY_MEM_ARG := +endif + +make-pretty-timed-before:: TIME_OF_BUILD_FILE=$(TIME_OF_BUILD_BEFORE_FILE) +make-pretty-timed-after:: TIME_OF_BUILD_FILE=$(TIME_OF_BUILD_AFTER_FILE) +make-pretty-timed make-pretty-timed-before make-pretty-timed-after:: + $(HIDE)rm -f pretty-timed-success.ok + $(HIDE)($(MAKE) --no-print-directory -f "$(PARENT)" $(TGTS) TIMED=1 2>&1 && touch pretty-timed-success.ok) | tee -a $(TIME_OF_BUILD_FILE) + $(HIDE)rm pretty-timed-success.ok # must not be -f; must fail if the touch failed +print-pretty-timed:: + $(HIDE)$(COQMAKE_ONE_TIME_FILE) $(TIMING_INCLUDE_MEM_ARG) $(TIMING_SORT_BY_MEM_ARG) $(TIMING_REAL_ARG) $(TIME_OF_BUILD_FILE) $(TIME_OF_PRETTY_BUILD_FILE) $(TIME_OF_PRETTY_BUILD_EXTRA_FILES) +print-pretty-timed-diff:: + $(HIDE)$(COQMAKE_BOTH_TIME_FILES) --sort-by=$(TIMING_SORT_BY) $(TIMING_INCLUDE_MEM_ARG) $(TIMING_SORT_BY_MEM_ARG) $(TIMING_REAL_ARG) $(TIME_OF_BUILD_AFTER_FILE) $(TIME_OF_BUILD_BEFORE_FILE) $(TIME_OF_PRETTY_BOTH_BUILD_FILE) $(TIME_OF_PRETTY_BUILD_EXTRA_FILES) +ifeq (,$(BEFORE)) +print-pretty-single-time-diff:: + @echo 'Error: Usage: $(MAKE) print-pretty-single-time-diff AFTER=path/to/file.v.after-timing BEFORE=path/to/file.v.before-timing' + $(HIDE)false +else +ifeq (,$(AFTER)) +print-pretty-single-time-diff:: + @echo 'Error: Usage: $(MAKE) print-pretty-single-time-diff AFTER=path/to/file.v.after-timing BEFORE=path/to/file.v.before-timing' + $(HIDE)false +else +print-pretty-single-time-diff:: + $(HIDE)$(COQMAKE_BOTH_SINGLE_TIMING_FILES) --fuzz=$(TIMING_FUZZ) --sort-by=$(TIMING_SORT_BY) $(TIMING_USER_ARG) $(AFTER) $(BEFORE) $(TIME_OF_PRETTY_BUILD_FILE) $(TIME_OF_PRETTY_BUILD_EXTRA_FILES) +endif +endif +pretty-timed: + $(HIDE)$(MAKE) --no-print-directory -f "$(PARENT)" make-pretty-timed + $(HIDE)$(MAKE) --no-print-directory -f "$(SELF)" print-pretty-timed +.PHONY: pretty-timed make-pretty-timed make-pretty-timed-before make-pretty-timed-after print-pretty-timed print-pretty-timed-diff print-pretty-single-time-diff + +# Extension points for actions to be performed before/after the all target +pre-all:: + @# Extension point + $(HIDE)if [ "$(COQMAKEFILE_VERSION)" != "$(COQ_VERSION)" ]; then\ + echo "W: This Makefile was generated by Coq $(COQMAKEFILE_VERSION)";\ + echo "W: while the current Coq version is $(COQ_VERSION)";\ + fi +.PHONY: pre-all + +post-all:: + @# Extension point +.PHONY: post-all + +real-all: $(VOFILES) $(if $(USEBYTE),bytefiles,optfiles) +.PHONY: real-all + +real-all.timing.diff: $(VOFILES:.vo=.v.timing.diff) +.PHONY: real-all.timing.diff + +bytefiles: $(CMOFILES) $(CMAFILES) +.PHONY: bytefiles + +optfiles: $(if $(DO_NATDYNLINK),$(CMXSFILES)) +.PHONY: optfiles + +# FIXME, see Ralf's bugreport +# quick is deprecated, now renamed vio +vio: $(VOFILES:.vo=.vio) +.PHONY: vio +quick: vio + $(warning "'make quick' is deprecated, use 'make vio' or consider using 'vos' files") +.PHONY: quick + +vio2vo: + $(TIMER) $(COQC) $(COQDEBUG) $(COQFLAGS) $(COQLIBS) \ + -schedule-vio2vo $(J) $(VOFILES:%.vo=%.vio) +.PHONY: vio2vo + +# quick2vo is undocumented +quick2vo: + $(HIDE)make -j $(J) vio + $(HIDE)VIOFILES=$$(for vofile in $(VOFILES); do \ + viofile="$$(echo "$$vofile" | sed "s/\.vo$$/.vio/")"; \ + if [ "$$vofile" -ot "$$viofile" -o ! -e "$$vofile" ]; then printf "$$viofile "; fi; \ + done); \ + echo "VIO2VO: $$VIOFILES"; \ + if [ -n "$$VIOFILES" ]; then \ + $(TIMER) $(COQC) $(COQDEBUG) $(COQFLAGS) $(COQLIBS) -schedule-vio2vo $(J) $$VIOFILES; \ + fi +.PHONY: quick2vo + +checkproofs: + $(TIMER) $(COQC) $(COQDEBUG) $(COQFLAGS) $(COQLIBS) \ + -schedule-vio-checking $(J) $(VOFILES:%.vo=%.vio) +.PHONY: checkproofs + +vos: $(VOFILES:%.vo=%.vos) +.PHONY: vos + +vok: $(VOFILES:%.vo=%.vok) +.PHONY: vok + +validate: $(VOFILES) + $(TIMER) $(COQCHK) $(COQCHKFLAGS) $(COQLIBS_NOML) $^ +.PHONY: validate + +only: $(TGTS) +.PHONY: only + +# Documentation targets ####################################################### + +html: $(GLOBFILES) $(VFILES) + $(SHOW)'COQDOC -d html $(GAL)' + $(HIDE)mkdir -p html + $(HIDE)$(COQDOC) \ + -toc $(COQDOCFLAGS) -html $(GAL) $(COQDOCLIBS) -d html $(VFILES) + +mlihtml: $(MLIFILES:.mli=.cmi) + $(SHOW)'CAMLDOC -d $@' + $(HIDE)mkdir $@ || rm -rf $@/* + $(HIDE)$(CAMLDOC) -html \ + -d $@ -m A $(CAMLDEBUG) $(CAMLDOCFLAGS) $(MLIFILES) $(FINDLIBPKGS) + +all-mli.tex: $(MLIFILES:.mli=.cmi) + $(SHOW)'CAMLDOC -latex $@' + $(HIDE)$(CAMLDOC) -latex \ + -o $@ -m A $(CAMLDEBUG) $(CAMLDOCFLAGS) $(MLIFILES) $(FINDLIBPKGS) + +all.ps: $(VFILES) + $(SHOW)'COQDOC -ps $(GAL)' + $(HIDE)$(COQDOC) \ + -toc $(COQDOCFLAGS) -ps $(GAL) $(COQDOCLIBS) \ + -o $@ `$(COQDEP) -sort $(VFILES)` + +all.pdf: $(VFILES) + $(SHOW)'COQDOC -pdf $(GAL)' + $(HIDE)$(COQDOC) \ + -toc $(COQDOCFLAGS) -pdf $(GAL) $(COQDOCLIBS) \ + -o $@ `$(COQDEP) -sort $(VFILES)` + +# FIXME: not quite right, since the output name is different +gallinahtml: GAL=-g +gallinahtml: html + +all-gal.ps: GAL=-g +all-gal.ps: all.ps + +all-gal.pdf: GAL=-g +all-gal.pdf: all.pdf + +# ? +beautify: $(BEAUTYFILES) + for file in $^; do mv $${file%.beautified} $${file%beautified}old && mv $${file} $${file%.beautified}; done + @echo 'Do not do "make clean" until you are sure that everything went well!' + @echo 'If there were a problem, execute "for file in $$(find . -name \*.v.old -print); do mv $${file} $${file%.old}; done" in your shell/' +.PHONY: beautify + +# Installation targets ######################################################## +# +# There rules can be extended in Makefile.local +# Extensions can't assume when they run. + +# We use $(file) to avoid generating a very long command string to pass to the shell +# (cf https://coq.zulipchat.com/#narrow/stream/250632-Coq-Platform-devs-.26-users/topic/Strange.20command.20length.20limit.20on.20Linux) +# However Apple ships old make which doesn't have $(file) so we need a fallback +$(file >.hasfile,1) +HASFILE:=$(shell if [ -e .hasfile ]; then echo 1; rm .hasfile; fi) + +MKFILESTOINSTALL= $(if $(HASFILE),$(file >.filestoinstall,$(FILESTOINSTALL)),\ + $(shell rm -f .filestoinstall) \ + $(foreach x,$(FILESTOINSTALL),$(shell printf '%s\n' "$x" >> .filestoinstall))) + +# findlib needs the package to not be installed, so we remove it before +# installing it (see the call to findlib_remove) +install: META + @$(MKFILESTOINSTALL) + $(HIDE)code=0; for f in $$(cat .filestoinstall); do\ + if ! [ -f "$$f" ]; then >&2 echo $$f does not exist; code=1; fi \ + done; exit $$code + $(HIDE)for f in $$(cat .filestoinstall); do\ + df="`$(COQMKFILE) -destination-of "$$f" $(COQLIBS)`";\ + if [ "$$?" != "0" -o -z "$$df" ]; then\ + echo SKIP "$$f" since it has no logical path;\ + else\ + install -d "$(COQLIBINSTALL)/$$df" &&\ + install -m 0644 "$$f" "$(COQLIBINSTALL)/$$df" &&\ + echo INSTALL "$$f" "$(COQLIBINSTALL)/$$df";\ + fi;\ + done + $(call findlib_remove) + $(call findlib_install, META $(FINDLIBFILESTOINSTALL)) + $(HIDE)$(MAKE) install-extra -f "$(SELF)" + @rm -f .filestoinstall +install-extra:: + @# Extension point +.PHONY: install install-extra + +META: $(METAFILE) + $(HIDE)if [ "$(METAFILE)" ]; then \ + cat "$(METAFILE)" | grep -v 'directory.*=.*' > META; \ + fi + +install-byte: + $(call findlib_install, $(CMAFILES) $(CMOFILESTOINSTALL), -add) + +install-doc:: html mlihtml + @# Extension point + $(HIDE)install -d "$(COQDOCINSTALL)/$(INSTALLCOQDOCROOT)/html" + $(HIDE)for i in html/*; do \ + dest="$(COQDOCINSTALL)/$(INSTALLCOQDOCROOT)/$$i";\ + install -m 0644 "$$i" "$$dest";\ + echo INSTALL "$$i" "$$dest";\ + done + $(HIDE)install -d \ + "$(COQDOCINSTALL)/$(INSTALLCOQDOCROOT)/mlihtml" + $(HIDE)for i in mlihtml/*; do \ + dest="$(COQDOCINSTALL)/$(INSTALLCOQDOCROOT)/$$i";\ + install -m 0644 "$$i" "$$dest";\ + echo INSTALL "$$i" "$$dest";\ + done +.PHONY: install-doc + +uninstall:: + @# Extension point + @$(MKFILESTOINSTALL) + $(call findlib_remove) + $(HIDE)for f in $$(cat .filestoinstall); do \ + df="`$(COQMKFILE) -destination-of "$$f" $(COQLIBS)`" &&\ + instf="$(COQLIBINSTALL)/$$df/`basename $$f`" &&\ + rm -f "$$instf" &&\ + echo RM "$$instf" ;\ + done + $(HIDE)for f in $$(cat .filestoinstall); do \ + df="`$(COQMKFILE) -destination-of "$$f" $(COQLIBS)`" &&\ + echo RMDIR "$(COQLIBINSTALL)/$$df/" &&\ + (rmdir "$(COQLIBINSTALL)/$$df/" 2>/dev/null || true); \ + done + @rm -f .filestoinstall + +.PHONY: uninstall + +uninstall-doc:: + @# Extension point + $(SHOW)'RM $(COQDOCINSTALL)/$(INSTALLCOQDOCROOT)/html' + $(HIDE)rm -rf "$(COQDOCINSTALL)/$(INSTALLCOQDOCROOT)/html" + $(SHOW)'RM $(COQDOCINSTALL)/$(INSTALLCOQDOCROOT)/mlihtml' + $(HIDE)rm -rf "$(COQDOCINSTALL)/$(INSTALLCOQDOCROOT)/mlihtml" + $(HIDE) rmdir "$(COQDOCINSTALL)/$(INSTALLCOQDOCROOT)/" || true +.PHONY: uninstall-doc + +# Cleaning #################################################################### +# +# There rules can be extended in Makefile.local +# Extensions can't assume when they run. + +clean:: + @# Extension point + $(SHOW)'CLEAN' + $(HIDE)rm -f $(CMOFILES) + $(HIDE)rm -f $(CMIFILES) + $(HIDE)rm -f $(CMAFILES) + $(HIDE)rm -f $(CMXFILES) + $(HIDE)rm -f $(CMXAFILES) + $(HIDE)rm -f $(CMXSFILES) + $(HIDE)rm -f $(OFILES) + $(HIDE)rm -f $(CMXAFILES:.cmxa=.a) + $(HIDE)rm -f $(MLGFILES:.mlg=.ml) + $(HIDE)rm -f $(CMXFILES:.cmx=.cmt) + $(HIDE)rm -f $(MLIFILES:.mli=.cmti) + $(HIDE)rm -f $(ALLDFILES) + $(HIDE)rm -f $(NATIVEFILES) + $(HIDE)find . -name .coq-native -type d -empty -delete + $(HIDE)rm -f $(VOFILES) + $(HIDE)rm -f $(VOFILES:.vo=.vio) + $(HIDE)rm -f $(VOFILES:.vo=.vos) + $(HIDE)rm -f $(VOFILES:.vo=.vok) + $(HIDE)rm -f $(BEAUTYFILES) $(VFILES:=.old) + $(HIDE)rm -f all.ps all-gal.ps all.pdf all-gal.pdf all.glob all-mli.tex + $(HIDE)rm -f $(VFILES:.v=.glob) + $(HIDE)rm -f $(VFILES:.v=.tex) + $(HIDE)rm -f $(VFILES:.v=.g.tex) + $(HIDE)rm -f pretty-timed-success.ok + $(HIDE)rm -f META + $(HIDE)rm -rf html mlihtml +.PHONY: clean + +cleanall:: clean + @# Extension point + $(SHOW)'CLEAN *.aux *.timing' + $(HIDE)rm -f $(foreach f,$(VFILES:.v=),$(dir $(f)).$(notdir $(f)).aux) + $(HIDE)rm -f $(TIME_OF_BUILD_FILE) $(TIME_OF_BUILD_BEFORE_FILE) $(TIME_OF_BUILD_AFTER_FILE) $(TIME_OF_PRETTY_BUILD_FILE) $(TIME_OF_PRETTY_BOTH_BUILD_FILE) + $(HIDE)rm -f $(VOFILES:.vo=.v.timing) + $(HIDE)rm -f $(VOFILES:.vo=.v.before-timing) + $(HIDE)rm -f $(VOFILES:.vo=.v.after-timing) + $(HIDE)rm -f $(VOFILES:.vo=.v.timing.diff) + $(HIDE)rm -f .lia.cache .nia.cache +.PHONY: cleanall + +archclean:: + @# Extension point + $(SHOW)'CLEAN *.cmx *.o' + $(HIDE)rm -f $(NATIVEFILES) + $(HIDE)rm -f $(CMOFILES:%.cmo=%.cmx) +.PHONY: archclean + + +# Compilation rules ########################################################### + +$(MLIFILES:.mli=.cmi): %.cmi: %.mli + $(SHOW)'CAMLC -c $<' + $(HIDE)$(TIMER) $(CAMLC) $(CAMLDEBUG) $(CAMLFLAGS) $(FINDLIBPKGS) $< + +$(MLGFILES:.mlg=.ml): %.ml: %.mlg + $(SHOW)'COQPP $<' + $(HIDE)$(COQPP) $< + +# Stupid hack around a deficient syntax: we cannot concatenate two expansions +$(filter %.cmo, $(MLFILES:.ml=.cmo) $(MLGFILES:.mlg=.cmo)): %.cmo: %.ml + $(SHOW)'CAMLC -c $<' + $(HIDE)$(TIMER) $(CAMLC) $(CAMLDEBUG) $(CAMLFLAGS) $(FINDLIBPKGS) $< + +# Same hack +$(filter %.cmx, $(MLFILES:.ml=.cmx) $(MLGFILES:.mlg=.cmx)): %.cmx: %.ml + $(SHOW)'CAMLOPT -c $(FOR_PACK) $<' + $(HIDE)$(TIMER) $(CAMLOPTC) $(CAMLDEBUG) $(CAMLFLAGS) $(FINDLIBPKGS) $(FOR_PACK) $< + + +$(MLLIBFILES:.mllib=.cmxs): %.cmxs: %.cmxa + $(SHOW)'CAMLOPT -shared -o $@' + $(HIDE)$(TIMER) $(CAMLOPTLINK) $(CAMLDEBUG) $(CAMLFLAGS) $(FINDLIBPKGS) \ + -shared -o $@ $< + +$(MLLIBFILES:.mllib=.cma): %.cma: | %.mllib + $(SHOW)'CAMLC -a -o $@' + $(HIDE)$(TIMER) $(CAMLLINK) $(CAMLDEBUG) $(CAMLFLAGS) $(FINDLIBPKGS) -a -o $@ $^ + +$(MLLIBFILES:.mllib=.cmxa): %.cmxa: | %.mllib + $(SHOW)'CAMLOPT -a -o $@' + $(HIDE)$(TIMER) $(CAMLOPTLINK) $(CAMLDEBUG) $(CAMLFLAGS) $(FINDLIBPKGS) -a -o $@ $^ + + +$(MLPACKFILES:.mlpack=.cmxs): %.cmxs: %.cmxa + $(SHOW)'CAMLOPT -shared -o $@' + $(HIDE)$(TIMER) $(CAMLOPTLINK) $(CAMLDEBUG) $(CAMLFLAGS) $(FINDLIBPKGS) \ + -shared -o $@ $< + +$(MLPACKFILES:.mlpack=.cmxa): %.cmxa: %.cmx | %.mlpack + $(SHOW)'CAMLOPT -a -o $@' + $(HIDE)$(TIMER) $(CAMLOPTLINK) $(CAMLDEBUG) $(CAMLFLAGS) $(FINDLIBPKGS) -a -o $@ $< + +$(MLPACKFILES:.mlpack=.cma): %.cma: %.cmo | %.mlpack + $(SHOW)'CAMLC -a -o $@' + $(HIDE)$(TIMER) $(CAMLLINK) $(CAMLDEBUG) $(CAMLFLAGS) $(FINDLIBPKGS) -a -o $@ $^ + +$(MLPACKFILES:.mlpack=.cmo): %.cmo: | %.mlpack + $(SHOW)'CAMLC -pack -o $@' + $(HIDE)$(TIMER) $(CAMLLINK) $(CAMLDEBUG) $(CAMLFLAGS) $(FINDLIBPKGS) -pack -o $@ $^ + +$(MLPACKFILES:.mlpack=.cmx): %.cmx: | %.mlpack + $(SHOW)'CAMLOPT -pack -o $@' + $(HIDE)$(TIMER) $(CAMLOPTLINK) $(CAMLDEBUG) $(CAMLFLAGS) $(FINDLIBPKGS) -pack -o $@ $^ + +# This rule is for _CoqProject with no .mllib nor .mlpack +$(filter-out $(MLLIBFILES:.mllib=.cmxs) $(MLPACKFILES:.mlpack=.cmxs) $(addsuffix .cmxs,$(PACKEDFILES)) $(addsuffix .cmxs,$(LIBEDFILES)),$(MLFILES:.ml=.cmxs) $(MLGFILES:.mlg=.cmxs)): %.cmxs: %.cmx + $(SHOW)'[deprecated,use-mllib-or-mlpack] CAMLOPT -shared -o $@' + $(HIDE)$(TIMER) $(CAMLOPTLINK) $(CAMLDEBUG) $(CAMLFLAGS) $(FINDLIBPKGS) \ + -shared -o $@ $< + +# can't make +# https://www.gnu.org/software/make/manual/make.html#Static-Pattern +# work with multiple target rules +# so use eval in a loop instead +# with grouped targets https://www.gnu.org/software/make/manual/make.html#Multiple-Targets +# if available (GNU Make >= 4.3) +ifneq (,$(filter grouped-target,$(.FEATURES))) +define globvorule= + +# take care to $$ variables using $< etc + $(1).vo $(1).glob &: $(1).v | $(VDFILE) + $(SHOW)COQC $(1).v + $(HIDE)$$(TIMER) $(COQC) $(COQDEBUG) $$(TIMING_ARG) $(COQFLAGS) $(COQLIBS) $(1).v +ifeq ($(COQDONATIVE), "yes") + $(SHOW)COQNATIVE $(1).vo + $(HIDE)$(call TIMER,$(1).vo.native) $(COQNATIVE) $(COQLIBS) $(1).vo +endif + +endef +else + +$(VOFILES): %.vo: %.v | $(VDFILE) + $(SHOW)COQC $< + $(HIDE)$(TIMER) $(COQC) $(COQDEBUG) $(TIMING_ARG) $(COQFLAGS) $(COQLIBS) $< +ifeq ($(COQDONATIVE), "yes") + $(SHOW)COQNATIVE $@ + $(HIDE)$(call TIMER,$@.native) $(COQNATIVE) $(COQLIBS) $@ +endif + +# this is broken :( todo fix if we ever find a solution that doesn't need grouped targets +$(GLOBFILES): %.glob: %.v + $(SHOW)'COQC $< (for .glob)' + $(HIDE)$(TIMER) $(COQC) $(COQDEBUG) $(COQFLAGS) $(COQLIBS) $< + +endif + +$(foreach vfile,$(VFILES:.v=),$(eval $(call globvorule,$(vfile)))) + +$(VFILES:.v=.vio): %.vio: %.v + $(SHOW)COQC -vio $< + $(HIDE)$(TIMER) $(COQC) -vio $(COQDEBUG) $(COQFLAGS) $(COQLIBS) $< + +$(VFILES:.v=.vos): %.vos: %.v + $(SHOW)COQC -vos $< + $(HIDE)$(TIMER) $(COQC) -vos $(COQDEBUG) $(COQFLAGS) $(COQLIBS) $< + +$(VFILES:.v=.vok): %.vok: %.v + $(SHOW)COQC -vok $< + $(HIDE)$(TIMER) $(COQC) -vok $(COQDEBUG) $(COQFLAGS) $(COQLIBS) $< + +$(addsuffix .timing.diff,$(VFILES)): %.timing.diff : %.before-timing %.after-timing + $(SHOW)PYTHON TIMING-DIFF $*.{before,after}-timing + $(HIDE)$(MAKE) --no-print-directory -f "$(SELF)" print-pretty-single-time-diff BEFORE=$*.before-timing AFTER=$*.after-timing TIME_OF_PRETTY_BUILD_FILE="$@" + +$(BEAUTYFILES): %.v.beautified: %.v + $(SHOW)'BEAUTIFY $<' + $(HIDE)$(TIMER) $(COQC) $(COQDEBUG) $(COQFLAGS) $(COQLIBS) -beautify $< + +$(TEXFILES): %.tex: %.v + $(SHOW)'COQDOC -latex $<' + $(HIDE)$(COQDOC) $(COQDOCFLAGS) -latex $< -o $@ + +$(GTEXFILES): %.g.tex: %.v + $(SHOW)'COQDOC -latex -g $<' + $(HIDE)$(COQDOC) $(COQDOCFLAGS) -latex -g $< -o $@ + +$(HTMLFILES): %.html: %.v %.glob + $(SHOW)'COQDOC -html $<' + $(HIDE)$(COQDOC) $(COQDOCFLAGS) -html $< -o $@ + +$(GHTMLFILES): %.g.html: %.v %.glob + $(SHOW)'COQDOC -html -g $<' + $(HIDE)$(COQDOC) $(COQDOCFLAGS) -html -g $< -o $@ + +# Dependency files ############################################################ + +ifndef MAKECMDGOALS + -include $(ALLDFILES) +else + ifneq ($(filter-out archclean clean cleanall printenv make-pretty-timed make-pretty-timed-before make-pretty-timed-after print-pretty-timed print-pretty-timed-diff print-pretty-single-time-diff,$(MAKECMDGOALS)),) + -include $(ALLDFILES) + endif +endif + +.SECONDARY: $(ALLDFILES) + +redir_if_ok = > "$@" || ( RV=$$?; rm -f "$@"; exit $$RV ) + +GENMLFILES:=$(MLGFILES:.mlg=.ml) +$(addsuffix .d,$(ALLSRCFILES)): $(GENMLFILES) + +$(addsuffix .d,$(MLIFILES)): %.mli.d: %.mli + $(SHOW)'CAMLDEP $<' + $(HIDE)$(CAMLDEP) $(OCAMLLIBS) "$<" $(redir_if_ok) + +$(addsuffix .d,$(MLGFILES)): %.mlg.d: %.ml + $(SHOW)'CAMLDEP $<' + $(HIDE)$(CAMLDEP) $(OCAMLLIBS) "$<" $(redir_if_ok) + +$(addsuffix .d,$(MLFILES)): %.ml.d: %.ml + $(SHOW)'CAMLDEP $<' + $(HIDE)$(CAMLDEP) $(OCAMLLIBS) "$<" $(redir_if_ok) + +$(addsuffix .d,$(MLLIBFILES)): %.mllib.d: %.mllib + $(SHOW)'OCAMLLIBDEP $<' + $(HIDE)$(OCAMLLIBDEP) -c $(OCAMLLIBS) "$<" $(redir_if_ok) + +$(addsuffix .d,$(MLPACKFILES)): %.mlpack.d: %.mlpack + $(SHOW)'OCAMLLIBDEP $<' + $(HIDE)$(OCAMLLIBDEP) -c $(OCAMLLIBS) "$<" $(redir_if_ok) + +# If this makefile is created using a _CoqProject we have coqdep get +# options from it. This avoids argument length limits for pathological +# projects. Note that extra options might be on the command line. +VDFILE_FLAGS:=$(if _CoqProject,-f _CoqProject,) $(CMDLINE_COQLIBS) $(CMDLINE_VFILES) + +$(VDFILE): _CoqProject $(VFILES) + $(SHOW)'COQDEP VFILES' + $(HIDE)$(COQDEP) $(if $(strip $(METAFILE)),-m "$(METAFILE)") -vos -dyndep var $(VDFILE_FLAGS) $(redir_if_ok) + +# Misc ######################################################################## + +byte: + $(HIDE)$(MAKE) all "OPT:=-byte" -f "$(SELF)" +.PHONY: byte + +opt: + $(HIDE)$(MAKE) all "OPT:=-opt" -f "$(SELF)" +.PHONY: opt + +# This is deprecated. To extend this makefile use +# extension points and Makefile.local +printenv:: + $(warning printenv is deprecated) + $(warning write extensions in Makefile.local or include Makefile.conf) + @echo 'COQLIB = $(COQLIB)' + @echo 'COQCORELIB = $(COQCORELIB)' + @echo 'DOCDIR = $(DOCDIR)' + @echo 'OCAMLFIND = $(OCAMLFIND)' + @echo 'HASNATDYNLINK = $(HASNATDYNLINK)' + @echo 'SRC_SUBDIRS = $(SRC_SUBDIRS)' + @echo 'COQ_SRC_SUBDIRS = $(COQ_SRC_SUBDIRS)' + @echo 'COQCORE_SRC_SUBDIRS = $(COQCORE_SRC_SUBDIRS)' + @echo 'OCAMLFIND = $(OCAMLFIND)' + @echo 'PP = $(PP)' + @echo 'COQFLAGS = $(COQFLAGS)' + @echo 'COQLIB = $(COQLIBS)' + @echo 'COQLIBINSTALL = $(COQLIBINSTALL)' + @echo 'COQDOCINSTALL = $(COQDOCINSTALL)' +.PHONY: printenv + +# Generate a .merlin file. If you need to append directives to this +# file you can extend the merlin-hook target in Makefile.local +.merlin: + $(SHOW)'FILL .merlin' + $(HIDE)echo 'FLG $(COQMF_CAMLFLAGS)' > .merlin + $(HIDE)echo 'B $(COQCORELIB)' >> .merlin + $(HIDE)echo 'S $(COQCORELIB)' >> .merlin + $(HIDE)$(foreach d,$(COQCORE_SRC_SUBDIRS), \ + echo 'B $(COQCORELIB)$(d)' >> .merlin;) + $(HIDE)$(foreach d,$(COQ_SRC_SUBDIRS), \ + echo 'S $(COQLIB)$(d)' >> .merlin;) + $(HIDE)$(foreach d,$(SRC_SUBDIRS), echo 'B $(d)' >> .merlin;) + $(HIDE)$(foreach d,$(SRC_SUBDIRS), echo 'S $(d)' >> .merlin;) + $(HIDE)$(MAKE) merlin-hook -f "$(SELF)" +.PHONY: merlin + +merlin-hook:: + @# Extension point +.PHONY: merlin-hook + +# prints all variables +debug: + $(foreach v,\ + $(sort $(filter-out $(INITIAL_VARS) INITIAL_VARS,\ + $(.VARIABLES))),\ + $(info $(v) = $($(v)))) +.PHONY: debug + +.DEFAULT_GOAL := all + +# Users can create Makefile.local-late to hook into double-colon rules +# or add other needed Makefile code, using defined +# variables if necessary. +-include Makefile.local-late + +# Local Variables: +# mode: makefile-gmake +# End: diff --git a/ovn/proofs/ssprove/extraction/Makefile.conf b/ovn/proofs/ssprove/extraction/Makefile.conf new file mode 100644 index 0000000..5e282b8 --- /dev/null +++ b/ovn/proofs/ssprove/extraction/Makefile.conf @@ -0,0 +1,71 @@ +# This configuration file was generated by running: +# coq_makefile -f _CoqProject -o Makefile + +COQBIN?= +ifneq (,$(COQBIN)) +# add an ending / +COQBIN:=$(COQBIN)/ +endif +COQMKFILE ?= "$(COQBIN)coq_makefile" + +############################################################################### +# # +# Project files. # +# # +############################################################################### + +COQMF_CMDLINE_VFILES := +COQMF_SOURCES := $(shell $(COQMKFILE) -sources-of -f _CoqProject $(COQMF_CMDLINE_VFILES)) +COQMF_VFILES := $(filter %.v, $(COQMF_SOURCES)) +COQMF_MLIFILES := $(filter %.mli, $(COQMF_SOURCES)) +COQMF_MLFILES := $(filter %.ml, $(COQMF_SOURCES)) +COQMF_MLGFILES := $(filter %.mlg, $(COQMF_SOURCES)) +COQMF_MLPACKFILES := $(filter %.mlpack, $(COQMF_SOURCES)) +COQMF_MLLIBFILES := $(filter %.mllib, $(COQMF_SOURCES)) +COQMF_METAFILE = + +############################################################################### +# # +# Path directives (-I, -R, -Q). # +# # +############################################################################### + +COQMF_OCAMLLIBS = +COQMF_SRC_SUBDIRS = +COQMF_COQLIBS = -R . Hacspec_ovn +COQMF_COQLIBS_NOML = -R . Hacspec_ovn +COQMF_CMDLINE_COQLIBS = + +############################################################################### +# # +# Coq configuration. # +# # +############################################################################### + +COQMF_COQLIB=/home/au538501/.opam/hacspec_generic_printer/lib/coq/ +COQMF_COQCORELIB=/home/au538501/.opam/hacspec_generic_printer/lib/coq/../coq-core/ +COQMF_DOCDIR=/home/au538501/.opam/hacspec_generic_printer/share/doc/ +COQMF_OCAMLFIND=/home/au538501/.opam/hacspec_generic_printer/bin/ocamlfind +COQMF_CAMLFLAGS=-thread -bin-annot -strict-sequence -w -a+1..3-4+5..8-9+10..26-27+28..39-40-41-42+43-44-45+46..47-48+49..57-58+59..66-67-68+69-70 +COQMF_WARN=-warn-error +a-3 +COQMF_HASNATDYNLINK=true +COQMF_COQ_SRC_SUBDIRS=boot config lib clib kernel library engine pretyping interp gramlib parsing proofs tactics toplevel printing ide stm vernac plugins/btauto plugins/cc plugins/derive plugins/extraction plugins/firstorder plugins/funind plugins/ltac plugins/ltac2 plugins/micromega plugins/nsatz plugins/ring plugins/rtauto plugins/ssr plugins/ssrmatching plugins/syntax +COQMF_COQ_NATIVE_COMPILER_DEFAULT=no +COQMF_WINDRIVE= + +############################################################################### +# # +# Native compiler. # +# # +############################################################################### + +COQMF_COQPROJECTNATIVEFLAG = + +############################################################################### +# # +# Extra variables. # +# # +############################################################################### + +COQMF_OTHERFLAGS = '-w' 'all' +COQMF_INSTALLCOQDOCROOT = Hacspec_ovn diff --git a/ovn/proofs/ssprove/extraction/_CoqProject b/ovn/proofs/ssprove/extraction/_CoqProject new file mode 100644 index 0000000..0b70570 --- /dev/null +++ b/ovn/proofs/ssprove/extraction/_CoqProject @@ -0,0 +1,6 @@ +-R . Hacspec_ovn +-arg -w +-arg all + +./Hacspec_ovn_Ovn_traits.v +# ./Hacspec_ovn_Ovn_group.v \ No newline at end of file diff --git a/ovn/src/lib.rs b/ovn/src/lib.rs new file mode 100644 index 0000000..018a7ce --- /dev/null +++ b/ovn/src/lib.rs @@ -0,0 +1,15 @@ +#![no_std] +#![feature(register_tool)] +#![register_tool(hax)] +#![feature(trait_alias)] + +pub mod ovn_traits; + +pub mod ovn_secp256k1; +pub mod ovn_z_89; +pub mod ovn_group; + +// pub mod ovn_zk_secp256k1; +// pub mod ovn_zk_z_89; +// pub mod ovn_zkgroup; +// pub mod ovn_zkgroup_specific; diff --git a/ovn/src/ovn.rs b/ovn/src/ovn.rs new file mode 100644 index 0000000..c5501b9 --- /dev/null +++ b/ovn/src/ovn.rs @@ -0,0 +1,363 @@ +#![no_std] +#![feature(register_tool)] +#![register_tool(hax)] + +#[hax_lib_macros::exclude] +extern crate hax_lib_macros; +#[hax_lib_macros::exclude] +use hax_lib_macros::*; + +#[exclude] +use hacspec_concordium::*; +#[exclude] +use hacspec_concordium_derive::*; + +/** Interface for group implementation */ +pub trait Group { + type group_type: PartialEq + Eq + Clone + Copy + hacspec_concordium::Serialize + ; + + const q : u32; // Prime order + const g : Self::group_type; // Generator (elemnent of group) + + fn g_pow(x: u32) -> Self::group_type; + fn pow(g: Self::group_type, x: u32) -> Self::group_type; + fn one() -> Self::group_type; + fn prod(x: Self::group_type, y: Self::group_type) -> Self::group_type; + fn inv(x: Self::group_type) -> Self::group_type; + fn div(x: Self::group_type, y: Self::group_type) -> Self::group_type; +} + +#[derive(Clone, Copy)] +pub struct z_17 {} +impl Group for z_17 { + type group_type = u32; + + const q: u32 = 17; // Prime order + const g: Self::group_type = 3; // Generator (elemnent of group) + + fn g_pow(x: u32) -> Self::group_type { + (Self::g ^ x) % Self::q + } + + fn pow(g: Self::group_type, x: u32) -> Self::group_type { + (Self::g ^ x) % Self::q + } + + fn one() -> Self::group_type { + 1 + } + + fn prod(x: Self::group_type, y: Self::group_type) -> Self::group_type { + (x * y) % Self::q + } + + fn inv(x: Self::group_type) -> Self::group_type { + let mut res = 0; + for i in 1..Self::q { + let i_computation = i; + if Self::g_pow(i) == x { + res = i_computation; + } + } + res + // [0, 1, 9, 6, 13, 7, 3, 5, 15, 2, 12, 14, 10, 4, 11, 8, 16][x as usize] + } + + fn div(x: Self::group_type, y: Self::group_type) -> Self::group_type { + Self::prod(x, Self::inv(y)) + } +} + +type G = z_17; +const n: usize = 20; + +// struct eligible_votes { +// v_id : u32, +// } + +// /** number of parties */ +// const n : u32 = 3u32; +// const P : [eligible_votes; 3] = // n = 3 +// [eligible_votes {v_id: 0}, +// eligible_votes {v_id: 1}, +// eligible_votes {v_id: 2}]; + +// use concordium_contracts_common::*; +// extern crate concordium_std; + +// use hacspec_sha256::*; + +/** TODO: Hash function */ +pub fn Hash((u,c,z) : (u32,u32,u32)) -> u32 { + 0 +} + +#[derive(Serialize, SchemaType, Clone, Copy)] +struct SchnorrZKPCommit { + u: /*G*/::group_type, + c: /*G*/::group_type, + z: /*G*/::group_type, +} + +/** Non-interactive Schnorr proof using Fiat-Shamir heuristics */ +// https://crypto.stanford.edu/cs355/19sp/lec5.pdf +pub fn schnorr_ZKP( + random : u32, + g_pow_x: /*G*/::group_type, + x: u32, +) -> SchnorrZKPCommit { + let r = random % G::q; // x_i \in_R Z_q;; + let u = G::g_pow(r); + let c = Hash((G::g,g_pow_x,u)); + let z = r + c * x; + + return SchnorrZKPCommit {u, c, z}; +} + +// https://crypto.stanford.edu/cs355/19sp/lec5.pdf +pub fn schnorr_ZKP_validate(g_pow_x: /*G*/::group_type, pi: SchnorrZKPCommit) -> bool { + pi.c == Hash((G::g, g_pow_x, pi.u)) && G::g_pow(pi.z) == pi.u * G::pow(g_pow_x, pi.c) +} + +#[hax::contract_state(contract = "OVN")] +// #[cfg_attr(not(feature = "hax_compilation"), contract_state(contract = "OVN"))] +#[derive(Serialize, SchemaType, Clone, Copy)] +pub struct OvnContractState/* */ { + zkp_random : u32, + + g_pow_xis: [/*G*/::group_type; n], + zkp_xis: [SchnorrZKPCommit; n], + + commit_vis: [u32; n], + + g_pow_xi_yi_vis: [/*G*/::group_type; n], + zkp_vis: [u32; n], + + tally: u32, +} + +#[hax::init(contract = "OVN")] +// #[cfg_attr(not(feature = "hax_compilation"), init(contract = "OVN"))] +pub fn init_ovn_contract(_: &impl HasInitContext) -> InitResult { + Ok(OvnContractState { + zkp_random: 0, // TODO + + g_pow_xis: [G::one(); n], + zkp_xis: [SchnorrZKPCommit { u: 0, z: 0, c: 0 }; n], + + commit_vis: [0; n], + + g_pow_xi_yi_vis: [G::one(); n], + zkp_vis: [0; n], + + tally: 0, + }) +} + +/** Currently randomness needs to be injected */ +pub fn select_private_voting_key/* */(random: u32) -> u32 { + random % G::q // x_i \in_R Z_q; +} + +#[derive(Serialize, SchemaType)] +pub struct RegisterParam { + rp_i: u32, + rp_xi: u32, +} + +/** Primary function in round 1 */ +#[hax::receive(contract = "OVN", name = "register", parameter = "RegisterParam")] +// #[cfg_attr(not(feature = "hax_compilation"), receive(contract = "OVN", name = "register", parameter = "RegisterParam"))] +pub fn register_vote( + ctx: &impl HasReceiveContext, + state: OvnContractState/* */, +) -> Result<(A, OvnContractState/* */), ParseError> { + let params : RegisterParam = ctx.parameter_cursor().get()?; + let g_pow_xi = G::g_pow(params.rp_xi); + + let zkp_xi = schnorr_ZKP/* :: */(state.zkp_random, g_pow_xi, params.rp_xi); + + let mut register_vote_state_ret = state.clone(); + register_vote_state_ret.g_pow_xis[params.rp_i as usize] = g_pow_xi; + register_vote_state_ret.zkp_xis[params.rp_i as usize] = zkp_xi; + + Ok((A::accept(), register_vote_state_ret)) +} + +#[derive(Serialize, SchemaType)] +pub struct CastVoteParam { + cvp_i: u32, + cvp_xi: u32, + cvp_vote: bool, +} + +pub fn compute_group_element_for_vote/* */( + i: u32, + xi: u32, + vote: bool, + xis: [/*G*/::group_type; n], +) -> /*G*/::group_type { + let mut prod1 = G::one(); + for j in 0..(i - 1) as usize { + prod1 = G::prod(prod1, xis[j]); + } + let mut prod2 = G::one(); + for j in (i + 1) as usize..n { + prod2 = G::prod(prod2, xis[j]); + } + let Yi = G::div(prod1, prod2); + // implicityly: Y_i = g^y_i + G::prod(G::pow(Yi, xi), G::g_pow(if vote { 1 } else { 0 })) +} + +pub fn commit_to/* */(x: /*G*/::group_type) -> u32 { + 0 +} + +/** Commitment before round 2 */ +#[hax::receive(contract = "OVN", name = "commit_to_vote", parameter = "CastVoteParam")] +// #[cfg_attr(not(feature = "hax_compilation"), receive(contract = "OVN", name = "commit_to_vote", parameter = "CastVoteParam"))] +pub fn commit_to_vote( + ctx: &impl HasReceiveContext, + state: OvnContractState/* */, +) -> Result<(A, OvnContractState/* */), ParseError> { + let params: CastVoteParam = ctx.parameter_cursor().get()?; + + for i in 0..n { + if !schnorr_ZKP_validate(state.g_pow_xis[i], state.zkp_xis[i]) { + return Err(ParseError { }); + } + } + + let g_pow_xi_yi_vi = + compute_group_element_for_vote/*:: */(params.cvp_i, params.cvp_xi, params.cvp_vote, state.g_pow_xis); + let commit_vi = commit_to/*:: */(g_pow_xi_yi_vi); + + let mut commit_to_vote_state_ret = state.clone(); + commit_to_vote_state_ret.commit_vis[params.cvp_i as usize] = commit_vi; + Ok((A::accept(), commit_to_vote_state_ret)) +} + +/** Cramer, Damgård and Schoenmakers (CDS) technique */ +pub fn ZKP_one_out_of_two/* */(g_pow_vi: /*G*/::group_type, vi: bool) -> u32 { + 32 // TODO +} + +/** Primary function in round 2, also opens commitment */ +#[hax::receive(contract = "OVN", name = "cast_vote", parameter = "CastVoteParam")] +// #[cfg_attr(not(feature = "hax_compilation"), receive(contract = "OVN", name = "cast_vote", parameter = "CastVoteParam"))] +pub fn cast_vote( + ctx: &impl HasReceiveContext, + state: OvnContractState/* */, +) -> Result<(A, OvnContractState/* */), ParseError> { + let params: CastVoteParam = ctx.parameter_cursor().get()?; + + let g_pow_xi_yi_vi = + compute_group_element_for_vote/*:: */(params.cvp_i, params.cvp_xi, params.cvp_vote, state.g_pow_xis); + let zkp_vi = ZKP_one_out_of_two/*:: */(g_pow_xi_yi_vi, params.cvp_vote); + + let mut cast_vote_state_ret = state.clone(); + cast_vote_state_ret.g_pow_xi_yi_vis[params.cvp_i as usize] = g_pow_xi_yi_vi; + cast_vote_state_ret.zkp_vis[params.cvp_i as usize] = zkp_vi; + + Ok((A::accept(),cast_vote_state_ret)) +} + +pub fn check_valid2/* */(g_pow_xi_yi_vi: /*G*/::group_type, zkp: u32) -> bool { + true +} + +pub fn check_commitment/* */(g_pow_xi_yi_vi: /*G*/::group_type, zkp: u32) -> bool { + true +} + +pub struct TallyParameter {} +#[hax::receive(contract = "OVN", name = "tally", parameter = "TallyParameter")] +// #[cfg_attr(not(feature = "hax_compilation"), receive(contract = "OVN", name = "tally", parameter = "TallyParameter"))] +/** Anyone can tally the votes */ +pub fn tally_votes( + _: &impl HasReceiveContext, + state: OvnContractState/* */, +) -> Result<(A, OvnContractState/* */), ParseError> { + for i in 0..n { + check_valid2/*:: */(state.g_pow_xi_yi_vis[i], state.zkp_vis[i]); + check_commitment/*:: */(state.g_pow_xi_yi_vis[i], state.commit_vis[i]); + () + } + + let mut vote_result = /*G*/ G::one(); + for g_pow_vote in state.g_pow_xi_yi_vis { + vote_result = G::prod(vote_result, g_pow_vote); + } + + let mut tally = 0; + for i in 0..n as u32 { + // Should be while, but is bounded by n anyways! + if G::g_pow(i) == vote_result { + tally = i; + } + } + + let mut tally_votes_state_ret = state.clone(); + tally_votes_state_ret.tally = tally; + + Ok((A::accept(), tally_votes_state_ret)) +} + +#[cfg(test)] +#[concordium_test] +pub fn test_correctness() { + let randomness : Vec = Vec::new(); + let votes : Vec = Vec::new(); + + // Setup the context + let mut ctx = InitContextTest::empty(); + // ctx.set_sender(ADDRESS_0); + + let mut state = init_ovn_contract(); + + let xis = Vec::new(); + for i in 0..n { + xis.push(select_private_voting_key::(randomness[i])); + } + + for i in 0..n { + let parameter = RegisterParam { rp_i: i, rp_xi: xis[i] }; + let parameter_bytes = to_bytes(¶meter); + ctx.set_parameter(¶meter_bytes); + + register_vote(ctx, state); + } + + for i in 0..n { + let parameter = CastVoteParam { cvp_i: i, cvp_xi: xis[i], cvp_vote: votes[i] }; + let parameter_bytes = to_bytes(¶meter); + ctx.set_parameter(¶meter_bytes); + + commit_to_vote(ctx, state); + } + + for i in 0..n { + let parameter = CastVoteParam { cvp_i: i, cvp_xi: xis[i], cvp_vote: votes[i] }; + let parameter_bytes = to_bytes(¶meter); + ctx.set_parameter(¶meter_bytes); + + cast_vote(ctx, state); + } + + let parameter = TallyParameter {}; + let parameter_bytes = to_bytes(¶meter); + ctx.set_parameter(¶meter_bytes); + + tally_votes(ctx, state); + + let mut count = 0; + for v in votes { + if v { + count = count + 1; // += 1 does not work correctly + } + } + + claim_eq!(state.tally, count, "The tally should equal the number of positive votes"); +} diff --git a/ovn/src/ovn_group.rs b/ovn/src/ovn_group.rs new file mode 100644 index 0000000..fc664cb --- /dev/null +++ b/ovn/src/ovn_group.rs @@ -0,0 +1,395 @@ +use hax_lib::{implies, lemma}; +#[hax_lib_macros::exclude] +use hax_lib_macros::*; + +#[exclude] +use hacspec_concordium::*; +#[exclude] +use hacspec_concordium_derive::*; + +pub use crate::ovn_traits::*; + +//////////////////////// +// Useful definitions // +//////////////////////// + +fn sub(x: Z, y: Z) -> Z { + x + (-y) +} + +fn div(x: G, y: G) -> G { + x * G::group_inv(y) +} + +// #[hax_lib::lemma] +// #[hax_lib::requires(true)] +// fn addC(x: Z, y: Z) -> Proof<{ implies(x != Z::field_zero(), || x + y == y + x) }> {} + +//////////////////// +// Implementation // +//////////////////// + +#[derive(Serialize, SchemaType, Clone, Copy)] +pub struct SchnorrZKPCommit { + pub schnorr_zkp_u: G, + pub schnorr_zkp_c: G::Z, + pub schnorr_zkp_z: G::Z, +} + +/** Non-interactive Schnorr proof using Fiat-Shamir heuristics (RFC 8235) */ +// https://www.rfc-editor.org/rfc/rfc8235 +// https://crypto.stanford.edu/cs355/19sp/lec5.pdf +pub fn schnorr_zkp(random: G::Z, h: G, x: G::Z) -> SchnorrZKPCommit { + let r = random; + let u = G::g_pow(r); + let c = G::hash(vec![G::g(), h, u]); + let z = r + c * x; + + return SchnorrZKPCommit { + schnorr_zkp_u: u, + schnorr_zkp_c: c, + schnorr_zkp_z: z, + }; +} + +// https://crypto.stanford.edu/cs355/19sp/lec5.pdf +pub fn schnorr_zkp_validate(h: G, pi: SchnorrZKPCommit) -> bool { + pi.schnorr_zkp_c == G::hash(vec![G::g(), h, pi.schnorr_zkp_u]) + && G::g_pow(pi.schnorr_zkp_z) == pi.schnorr_zkp_u * G::pow(h, pi.schnorr_zkp_c) +} + +#[derive(Serialize, SchemaType, Clone, Copy)] +pub struct OrZKPCommit { + pub or_zkp_x: G, + pub or_zkp_y: G, + pub or_zkp_a1: G, + pub or_zkp_b1: G, + pub or_zkp_a2: G, + pub or_zkp_b2: G, + + pub or_zkp_c: G::Z, + + pub or_zkp_d1: G::Z, + pub or_zkp_d2: G::Z, + + pub or_zkp_r1: G::Z, + pub or_zkp_r2: G::Z, +} + +/** Cramer, Damgård and Schoenmakers (CDS) technique */ +pub fn zkp_one_out_of_two( + random_w: G::Z, + random_r: G::Z, + random_d: G::Z, + h: G, + xi: G::Z, + vi: bool, +) -> OrZKPCommit { + let w = random_w; + + if vi { + let r1 = random_r; + let d1 = random_d; + + let x = G::g_pow(xi); + let y = G::pow(h, xi) * G::g(); + + let a1 = G::g_pow(r1) * G::pow(x, d1); + let b1 = G::pow(h, r1) * G::pow(y, d1); + + let a2 = G::g_pow(w); + let b2 = G::pow(h, w); + + let c = G::hash(vec![x, y, a1, b1, a2, b2]); + + let d2 = sub::(c, d1); + let r2 = sub::(w, xi * d2); + + OrZKPCommit { + or_zkp_x: x, + or_zkp_y: y, + or_zkp_a1: a1, + or_zkp_b1: b1, + or_zkp_a2: a2, + or_zkp_b2: b2, + or_zkp_c: c, + or_zkp_d1: d1, + or_zkp_d2: d2, + or_zkp_r1: r1, + or_zkp_r2: r2, + } + } else { + let r2 = random_r; + let d2 = random_d; + + let x = G::g_pow(xi); + let y = G::pow(h, xi); + + let a1 = G::g_pow(w); + let b1 = G::pow(h, w); + + let a2 = G::g_pow(r2) * G::pow(x, d2); + let b2 = G::pow(h, r2) * G::pow(div::(y, G::g()), d2); + + let c = G::hash(vec![x, y, a1, b1, a2, b2]); + + let d1 = sub::(c, d2); + let r1 = sub::(w, xi * d1); + + OrZKPCommit { + or_zkp_x: x, + or_zkp_y: y, + or_zkp_a1: a1, + or_zkp_b1: b1, + or_zkp_a2: a2, + or_zkp_b2: b2, + or_zkp_c: c, + or_zkp_d1: d1, + or_zkp_d2: d2, + or_zkp_r1: r1, + or_zkp_r2: r2, + } + } +} + +// Anonymous voting by two-round public discussion +pub fn zkp_one_out_of_two_validate(h: G, zkp: OrZKPCommit) -> bool { + let c = G::hash(vec![ + zkp.or_zkp_x, + zkp.or_zkp_y, + zkp.or_zkp_a1, + zkp.or_zkp_b1, + zkp.or_zkp_a2, + zkp.or_zkp_b2, + ]); // TODO: add i + + (c == zkp.or_zkp_d1 + zkp.or_zkp_d2 + && zkp.or_zkp_a1 == G::g_pow(zkp.or_zkp_r1) * G::pow(zkp.or_zkp_x, zkp.or_zkp_d1) + && zkp.or_zkp_b1 == G::pow(h, zkp.or_zkp_r1) * G::pow(zkp.or_zkp_y, zkp.or_zkp_d1) + && zkp.or_zkp_a2 == G::g_pow(zkp.or_zkp_r2) * G::pow(zkp.or_zkp_x, zkp.or_zkp_d2) + && zkp.or_zkp_b2 + == G::pow(h, zkp.or_zkp_r2) * G::pow(div::(zkp.or_zkp_y, G::g()), zkp.or_zkp_d2)) +} + +pub fn commit_to(g_pow_xi_yi_vi: G) -> G::Z { + G::hash(vec![g_pow_xi_yi_vi]) +} + +pub fn check_commitment(g_pow_xi_yi_vi: G, commitment: G::Z) -> bool { + G::hash(vec![g_pow_xi_yi_vi]) == commitment +} + +#[hax::contract_state(contract = "OVN")] +// #[cfg_attr(not(feature = "hax_compilation"), contract_state(contract = "OVN"))] +#[derive(Serialize, SchemaType, Clone, Copy)] +pub struct OvnContractState { + pub g_pow_xis: [G; n], + pub zkp_xis: [SchnorrZKPCommit; n], + + pub commit_vis: [G::Z; n], + + pub g_pow_xi_yi_vis: [G; n], + pub zkp_vis: [OrZKPCommit; n], + + pub tally: u32, + + pub round1: [bool; n], +} + +#[hax::init(contract = "OVN")] +// #[cfg_attr(not(feature = "hax_compilation"), init(contract = "OVN"))] +pub fn init_ovn_contract(// _: &impl HasInitContext, +) -> InitResult> { + Ok(OvnContractState:: { + g_pow_xis: [G::group_one(); n], + zkp_xis: [SchnorrZKPCommit:: { + schnorr_zkp_u: G::group_one(), + schnorr_zkp_z: G::Z::field_zero(), + schnorr_zkp_c: G::Z::field_zero(), + }; n], + + commit_vis: [G::Z::field_zero(); n], + + g_pow_xi_yi_vis: [G::group_one(); n], + zkp_vis: [OrZKPCommit:: { + or_zkp_x: G::group_one(), + or_zkp_y: G::group_one(), + or_zkp_a1: G::group_one(), + or_zkp_b1: G::group_one(), + or_zkp_a2: G::group_one(), + or_zkp_b2: G::group_one(), + + or_zkp_c: G::Z::field_zero(), + + or_zkp_d1: G::Z::field_zero(), + or_zkp_d2: G::Z::field_zero(), + + or_zkp_r1: G::Z::field_zero(), + or_zkp_r2: G::Z::field_zero(), + }; n], + + tally: 0, + + round1: [false; n], + }) +} + +#[derive(Serialize, SchemaType)] +pub struct RegisterParam { + pub rp_i: u32, + pub rp_xi: Z, + pub rp_zkp_random: Z, +} + +/** Primary function in round 1 */ +#[hax::receive(contract = "OVN", name = "register", parameter = "RegisterParam")] +// #[cfg_attr(not(feature = "hax_compilation"), receive(contract = "OVN", name = "register", parameter = "RegisterParam"))] +pub fn register_vote( + ctx: impl HasReceiveContext, + state: OvnContractState, +) -> Result<(A, OvnContractState), ParseError> { + let params: RegisterParam = ctx.parameter_cursor().get()?; + let g_pow_xi = G::g_pow(params.rp_xi); + + let zkp_xi = schnorr_zkp::(params.rp_zkp_random, g_pow_xi, params.rp_xi); + + let mut register_vote_state_ret = state.clone(); + register_vote_state_ret.g_pow_xis[params.rp_i as usize] = g_pow_xi; + register_vote_state_ret.zkp_xis[params.rp_i as usize] = zkp_xi; + register_vote_state_ret.round1[params.rp_i as usize] = true; + + Ok((A::accept(), register_vote_state_ret)) +} + +#[derive(Serialize, SchemaType)] +pub struct CastVoteParam { + pub cvp_i: u32, + pub cvp_xi: Z, + pub cvp_zkp_random_w: Z, + pub cvp_zkp_random_r: Z, + pub cvp_zkp_random_d: Z, + pub cvp_vote: bool, +} + +// impl core::ops::Mul for G { +// type Output = Self; +// fn mul (self, rhs: Self) { +// Self::prod(self, rhs) +// } +// } + +pub fn compute_g_pow_yi(i: usize, xis: [G; n]) -> G { + let mut prod1 = xis[0..i].iter().map(|x| x.clone()).product::(); + let mut prod2 = xis[i + 1..n].iter().map(|x| x.clone()).product::(); + + // implicitly: Y_i = g^y_i + let g_pow_yi = div::(prod1, prod2); + g_pow_yi +} + +pub fn compute_group_element_for_vote(xi: G::Z, vote: bool, g_pow_yi: G) -> G { + G::pow(g_pow_yi, xi) + * G::g_pow(if vote { + G::Z::field_one() + } else { + G::Z::field_zero() + }) +} + +/** Commitment before round 2 */ +#[hax::receive(contract = "OVN", name = "commit_to_vote", parameter = "CastVoteParam")] +// #[cfg_attr(not(feature = "hax_compilation"), receive(contract = "OVN", name = "commit_to_vote", parameter = "CastVoteParam"))] +pub fn commit_to_vote( + ctx: impl HasReceiveContext, + state: OvnContractState, +) -> Result<(A, OvnContractState), ParseError> { + let params: CastVoteParam = ctx.parameter_cursor().get()?; + + for i in 0..n { + if !schnorr_zkp_validate(state.g_pow_xis[i], state.zkp_xis[i]) || !state.round1[i] { + return Err(ParseError {}); + } + } + + let g_pow_yi = compute_g_pow_yi::(params.cvp_i as usize, state.g_pow_xis); + let g_pow_xi_yi_vi = + compute_group_element_for_vote::(params.cvp_xi, params.cvp_vote, g_pow_yi); + let commit_vi = commit_to::(g_pow_xi_yi_vi); + + let mut commit_to_vote_state_ret = state.clone(); + commit_to_vote_state_ret.commit_vis[params.cvp_i as usize] = commit_vi; + Ok((A::accept(), commit_to_vote_state_ret)) +} + +/** Primary function in round 2, also opens commitment */ +#[hax::receive(contract = "OVN", name = "cast_vote", parameter = "CastVoteParam")] +// #[cfg_attr(not(feature = "hax_compilation"), receive(contract = "OVN", name = "cast_vote", parameter = "CastVoteParam"))] +pub fn cast_vote( + ctx: impl HasReceiveContext, + state: OvnContractState, +) -> Result<(A, OvnContractState), ParseError> { + let params: CastVoteParam = ctx.parameter_cursor().get()?; + + let g_pow_yi = compute_g_pow_yi::(params.cvp_i as usize, state.g_pow_xis); + let g_pow_xi_yi_vi = + compute_group_element_for_vote::(params.cvp_xi, params.cvp_vote, g_pow_yi); + + let zkp_vi = zkp_one_out_of_two::( + params.cvp_zkp_random_w, + params.cvp_zkp_random_r, + params.cvp_zkp_random_d, + g_pow_yi, + params.cvp_xi, + params.cvp_vote, + ); + let mut cast_vote_state_ret = state.clone(); + cast_vote_state_ret.g_pow_xi_yi_vis[params.cvp_i as usize] = g_pow_xi_yi_vi; + cast_vote_state_ret.zkp_vis[params.cvp_i as usize] = zkp_vi; + + Ok((A::accept(), cast_vote_state_ret)) +} + +#[derive(Serialize, SchemaType)] +pub struct TallyParameter {} + +#[hax::receive(contract = "OVN", name = "tally", parameter = "TallyParameter")] +// #[cfg_attr(not(feature = "hax_compilation"), receive(contract = "OVN", name = "tally", parameter = "TallyParameter"))] +/** Anyone can tally the votes */ +pub fn tally_votes( + _: impl HasReceiveContext, + state: OvnContractState, +) -> Result<(A, OvnContractState), ParseError> { + for i in 0..n { + let g_pow_yi = compute_g_pow_yi::(i as usize, state.g_pow_xis); + if !zkp_one_out_of_two_validate::(g_pow_yi, state.zkp_vis[i]) { + return Err(ParseError {}); + } + if !check_commitment::(state.g_pow_xi_yi_vis[i], state.commit_vis[i]) { + return Err(ParseError {}); + } + } + + let mut vote_result = G::group_one(); + for g_pow_vote in state.g_pow_xi_yi_vis { + vote_result = vote_result * g_pow_vote; + } + + // let tally = (0..(n as u32)).rposition(|i| G::g_pow(i) == vote_result).unwrap() as u32; + let mut tally = 0; + let mut curr = G::Z::field_zero(); + for i in 0..n as u32 { + // Should be while, but is bounded by n anyways! + if G::g_pow(curr) == vote_result { + tally = i; + } + + curr = curr + G::Z::field_one(); + } + + let mut tally_votes_state_ret = state.clone(); + tally_votes_state_ret.tally = tally; + + Ok((A::accept(), tally_votes_state_ret)) +} + +// https://github.com/stonecoldpat/anonymousvoting diff --git a/ovn/src/ovn_group2.rs b/ovn/src/ovn_group2.rs new file mode 100644 index 0000000..f558aed --- /dev/null +++ b/ovn/src/ovn_group2.rs @@ -0,0 +1,404 @@ +#[hax_lib_macros::exclude] +use hax_lib_macros::*; + +#[exclude] +use hacspec_concordium::*; +#[exclude] +use hacspec_concordium_derive::*; + +pub use crate::ovn_traits::*; + +use core::marker::PhantomData; + +//////////////////////// +// Useful definitions // +//////////////////////// + +struct OVN { + pd: core::marker::PhantomData, +} + +#[derive(Serialize, SchemaType, Clone, Copy)] +pub struct SchnorrZKPCommit { + pub schnorr_zkp_u: G, + pub schnorr_zkp_c: G::Z, + pub schnorr_zkp_z: G::Z, +} + +#[derive(Serialize, SchemaType, Clone, Copy)] +pub struct OrZKPCommit { + pub or_zkp_x: G, + pub or_zkp_y: G, + pub or_zkp_a1: G, + pub or_zkp_b1: G, + pub or_zkp_a2: G, + pub or_zkp_b2: G, + + pub or_zkp_c: G::Z, + + pub or_zkp_d1: G::Z, + pub or_zkp_d2: G::Z, + + pub or_zkp_r1: G::Z, + pub or_zkp_r2: G::Z, +} + +#[hax::contract_state(contract = "OVN")] +// #[cfg_attr(not(feature = "hax_compilation"), contract_state(contract = "OVN"))] +#[derive(Serialize, SchemaType, Clone, Copy)] +pub struct OvnContractState { + pub g_pow_xis: [G; n], + pub zkp_xis: [SchnorrZKPCommit; n], + + pub commit_vis: [G::Z; n], + + pub g_pow_xi_yi_vis: [G; n], + pub zkp_vis: [OrZKPCommit; n], + + pub tally: u32, + + pub round1: [bool; n], +} + +#[derive(Serialize, SchemaType)] +pub struct RegisterParam { + pub rp_i: u32, + pub rp_xi: Z, + pub rp_zkp_random: Z, +} + +#[derive(Serialize, SchemaType)] +pub struct CastVoteParam { + pub cvp_i: u32, + pub cvp_xi: Z, + pub cvp_zkp_random_w: Z, + pub cvp_zkp_random_r: Z, + pub cvp_zkp_random_d: Z, + pub cvp_vote: bool, +} + +#[derive(Serialize, SchemaType)] +pub struct TallyParameter {} + +impl OVN { + pub fn sub(x: G::Z, y: G::Z) -> G::Z { + (x + /* field addition */ (-/* field opposite */y)) + } + + pub fn div(x: G, y: G) -> G { + x * G::group_inv(y) // group product + } + + //////////////////// + // Implementation // + //////////////////// + + /** Non-interactive Schnorr proof using Fiat-Shamir heuristics (RFC 8235) */ + // https://www.rfc-editor.org/rfc/rfc8235 + // https://crypto.stanford.edu/cs355/19sp/lec5.pdf + pub fn schnorr_zkp(random: G::Z, h: G, x: G::Z) -> SchnorrZKPCommit { + let r = random; + let u = G::g_pow(r); + let c = G::hash(vec![G::g(), h, u]); + let z = (r + /* field addition */ (c * /* field product */ x)); + + return SchnorrZKPCommit { + schnorr_zkp_u: u, + schnorr_zkp_c: c, + schnorr_zkp_z: z, + }; + } + + // https://crypto.stanford.edu/cs355/19sp/lec5.pdf + pub fn schnorr_zkp_validate(h: G, pi: SchnorrZKPCommit) -> bool { + pi.schnorr_zkp_c == G::hash(vec![G::g(), h, pi.schnorr_zkp_u]) + && G::g_pow(pi.schnorr_zkp_z) + == (pi.schnorr_zkp_u * /* group product */ G::pow(h, pi.schnorr_zkp_c)) + } + + /** Cramer, Damgård and Schoenmakers (CDS) technique */ + pub fn zkp_one_out_of_two( + random_w: G::Z, + random_r: G::Z, + random_d: G::Z, + h: G, + xi: G::Z, + vi: bool, + ) -> OrZKPCommit { + let w = random_w; + + if vi { + let r1 = random_r; + let d1 = random_d; + + let x = G::g_pow(xi); + let y = G::pow(h, xi) * /* group product */ G::g(); + + let a1 = G::g_pow(r1) * /* group product */ G::pow(x, d1); + let b1 = G::pow(h, r1) * /* group product */ G::pow(y, d1); + + let a2 = G::g_pow(w); + let b2 = G::pow(h, w); + + let c = G::hash(vec![x, y, a1, b1, a2, b2]); + + let d2 = Self::sub(c, d1); + let r2 = Self::sub(w, xi * /* field product */ d2); + + OrZKPCommit:: { + or_zkp_x: x, + or_zkp_y: y, + or_zkp_a1: a1, + or_zkp_b1: b1, + or_zkp_a2: a2, + or_zkp_b2: b2, + or_zkp_c: c, + or_zkp_d1: d1, + or_zkp_d2: d2, + or_zkp_r1: r1, + or_zkp_r2: r2, + } + } else { + let r2 = random_r; + let d2 = random_d; + + let x = G::g_pow(xi); + let y = G::pow(h, xi); + + let a1 = G::g_pow(w); + let b1 = G::pow(h, w); + + let a2 = G::g_pow(r2) * /* group product */ G::pow(x, d2); + let b2 = G::pow(h, r2) * /* group product */ G::pow(Self::div(y, G::g()), d2); + + let c = G::hash(vec![x, y, a1, b1, a2, b2]); + + let d1 = Self::sub(c, d2); + let r1 = Self::sub(w, (xi * /* field product */ d1)); + + OrZKPCommit:: { + or_zkp_x: x, + or_zkp_y: y, + or_zkp_a1: a1, + or_zkp_b1: b1, + or_zkp_a2: a2, + or_zkp_b2: b2, + or_zkp_c: c, + or_zkp_d1: d1, + or_zkp_d2: d2, + or_zkp_r1: r1, + or_zkp_r2: r2, + } + } + } + + // Anonymous voting by two-round public discussion + pub fn zkp_one_out_of_two_validate(h: G, zkp: OrZKPCommit) -> bool { + let c = G::hash(vec![ + zkp.or_zkp_x, + zkp.or_zkp_y, + zkp.or_zkp_a1, + zkp.or_zkp_b1, + zkp.or_zkp_a2, + zkp.or_zkp_b2, + ]); // TODO: add i + + (c == (zkp.or_zkp_d1 + /* field addition */ zkp.or_zkp_d2) + && zkp.or_zkp_a1 + == (G::g_pow(zkp.or_zkp_r1) * /* group product */ G::pow(zkp.or_zkp_x, zkp.or_zkp_d1)) + && zkp.or_zkp_b1 + == (G::pow(h, zkp.or_zkp_r1) * /* group product */ + G::pow(zkp.or_zkp_y, zkp.or_zkp_d1)) + && zkp.or_zkp_a2 + == (G::g_pow(zkp.or_zkp_r2) * /* group product */ G::pow(zkp.or_zkp_x, zkp.or_zkp_d2)) + && zkp.or_zkp_b2 + == (G::pow(h, zkp.or_zkp_r2) * /* group product */ + G::pow(Self::div(zkp.or_zkp_y, G::g()), zkp.or_zkp_d2))) + } + + pub fn commit_to(g_pow_xi_yi_vi: G) -> G::Z { + G::hash(vec![g_pow_xi_yi_vi]) + } + + pub fn check_commitment(g_pow_xi_yi_vi: G, commitment: G::Z) -> bool { + G::hash(vec![g_pow_xi_yi_vi]) == commitment + } + + #[hax::init(contract = "OVN")] + // #[cfg_attr(not(feature = "hax_compilation"), init(contract = "OVN"))] + pub fn init_ovn_contract(// _: &impl HasInitContext, + ) -> InitResult> { + Ok(OvnContractState:: { + g_pow_xis: [G::group_one(); n], + zkp_xis: [SchnorrZKPCommit:: { + schnorr_zkp_u: G::group_one(), + schnorr_zkp_z: G::Z::field_zero(), + schnorr_zkp_c: G::Z::field_zero(), + }; n], + + commit_vis: [G::Z::field_zero(); n], + + g_pow_xi_yi_vis: [G::group_one(); n], + zkp_vis: [OrZKPCommit:: { + or_zkp_x: G::group_one(), + or_zkp_y: G::group_one(), + or_zkp_a1: G::group_one(), + or_zkp_b1: G::group_one(), + or_zkp_a2: G::group_one(), + or_zkp_b2: G::group_one(), + + or_zkp_c: G::Z::field_zero(), + + or_zkp_d1: G::Z::field_zero(), + or_zkp_d2: G::Z::field_zero(), + + or_zkp_r1: G::Z::field_zero(), + or_zkp_r2: G::Z::field_zero(), + }; n], + + tally: 0, + + round1: [false; n], + }) + } + + /** Primary function in round 1 */ + #[hax::receive(contract = "OVN", name = "register", parameter = "RegisterParam")] + // #[cfg_attr(not(feature = "hax_compilation"), receive(contract = "OVN", name = "register", parameter = "RegisterParam"))] + pub fn register_vote( + ctx: impl HasReceiveContext, + state: OvnContractState, + ) -> Result<(A, OvnContractState), ParseError> { + let params: RegisterParam = ctx.parameter_cursor().get()?; + let g_pow_xi = G::g_pow(params.rp_xi); + + let zkp_xi = Self::schnorr_zkp(params.rp_zkp_random, g_pow_xi, params.rp_xi); + + let mut register_vote_state_ret = state.clone(); + register_vote_state_ret.g_pow_xis[params.rp_i as usize] = g_pow_xi; + register_vote_state_ret.zkp_xis[params.rp_i as usize] = zkp_xi; + register_vote_state_ret.round1[params.rp_i as usize] = true; + + Ok((A::accept(), register_vote_state_ret)) + } + + // impl core::ops::Mul for G { + // type Output = Self; + // fn mul (self, rhs: Self) { + // Self::prod(self, rhs) + // } + // } + + pub fn compute_g_pow_yi(i: usize, xis: [G; n]) -> G { + let mut prod1 = xis[0..i].iter().map(|x| x.clone()).product::(); + let mut prod2 = xis[i + 1..n].iter().map(|x| x.clone()).product::(); + + // implicitly: Y_i = g^y_i + let g_pow_yi = Self::div(prod1, prod2); + g_pow_yi + } + + pub fn compute_group_element_for_vote(xi: G::Z, vote: bool, g_pow_yi: G) -> G { + (G::pow(g_pow_yi, xi) * /* group product */ + G::g_pow(if vote { + G::Z::field_one() + } else { + G::Z::field_zero() + })) + } + + /** Commitment before round 2 */ + #[hax::receive(contract = "OVN", name = "commit_to_vote", parameter = "CastVoteParam")] + // #[cfg_attr(not(feature = "hax_compilation"), receive(contract = "OVN", name = "commit_to_vote", parameter = "CastVoteParam"))] + pub fn commit_to_vote( + ctx: impl HasReceiveContext, + state: OvnContractState, + ) -> Result<(A, OvnContractState), ParseError> { + let params: CastVoteParam = ctx.parameter_cursor().get()?; + + for i in 0..n { + if !Self::schnorr_zkp_validate(state.g_pow_xis[i], state.zkp_xis[i]) || !state.round1[i] + { + return Err(ParseError {}); + } + } + + let g_pow_yi = Self::compute_g_pow_yi::(params.cvp_i as usize, state.g_pow_xis); + let g_pow_xi_yi_vi = + Self::compute_group_element_for_vote(params.cvp_xi, params.cvp_vote, g_pow_yi); + let commit_vi = Self::commit_to(g_pow_xi_yi_vi); + + let mut commit_to_vote_state_ret = state.clone(); + commit_to_vote_state_ret.commit_vis[params.cvp_i as usize] = commit_vi; + Ok((A::accept(), commit_to_vote_state_ret)) + } + + /** Primary function in round 2, also opens commitment */ + #[hax::receive(contract = "OVN", name = "cast_vote", parameter = "CastVoteParam")] + // #[cfg_attr(not(feature = "hax_compilation"), receive(contract = "OVN", name = "cast_vote", parameter = "CastVoteParam"))] + pub fn cast_vote( + ctx: impl HasReceiveContext, + state: OvnContractState, + ) -> Result<(A, OvnContractState), ParseError> { + let params: CastVoteParam = ctx.parameter_cursor().get()?; + + let g_pow_yi = Self::compute_g_pow_yi::(params.cvp_i as usize, state.g_pow_xis); + let g_pow_xi_yi_vi = + Self::compute_group_element_for_vote(params.cvp_xi, params.cvp_vote, g_pow_yi); + + let zkp_vi = Self::zkp_one_out_of_two( + params.cvp_zkp_random_w, + params.cvp_zkp_random_r, + params.cvp_zkp_random_d, + g_pow_yi, + params.cvp_xi, + params.cvp_vote, + ); + let mut cast_vote_state_ret = state.clone(); + cast_vote_state_ret.g_pow_xi_yi_vis[params.cvp_i as usize] = g_pow_xi_yi_vi; + cast_vote_state_ret.zkp_vis[params.cvp_i as usize] = zkp_vi; + + Ok((A::accept(), cast_vote_state_ret)) + } + + #[hax::receive(contract = "OVN", name = "tally", parameter = "TallyParameter")] + // #[cfg_attr(not(feature = "hax_compilation"), receive(contract = "OVN", name = "tally", parameter = "TallyParameter"))] + /** Anyone can tally the votes */ + pub fn tally_votes( + _: impl HasReceiveContext, + state: OvnContractState, + ) -> Result<(A, OvnContractState), ParseError> { + for i in 0..n { + let g_pow_yi = Self::compute_g_pow_yi::(i as usize, state.g_pow_xis); + if !Self::zkp_one_out_of_two_validate(g_pow_yi, state.zkp_vis[i]) { + return Err(ParseError {}); + } + if !Self::check_commitment(state.g_pow_xi_yi_vis[i], state.commit_vis[i]) { + return Err(ParseError {}); + } + } + + let mut vote_result = G::group_one(); + for g_pow_vote in state.g_pow_xi_yi_vis { + vote_result = (vote_result * /* group product */ g_pow_vote); + } + + let mut tally = 0; + let mut curr = G::Z::field_zero(); + for i in 0..n as u32 { + // Should be while, but is bounded by n anyways! + if G::g_pow(curr) == vote_result { + tally = i; + } + + curr = (curr + /* field addition */ G::Z::field_one()); + } + + let mut tally_votes_state_ret = state.clone(); + tally_votes_state_ret.tally = tally; + + Ok((A::accept(), tally_votes_state_ret)) + } + + // https://github.com/stonecoldpat/anonymousvoting +} diff --git a/ovn/src/ovn_no_group.rs b/ovn/src/ovn_no_group.rs new file mode 100644 index 0000000..fa8a1c0 --- /dev/null +++ b/ovn/src/ovn_no_group.rs @@ -0,0 +1,399 @@ +#![no_std] +#![feature(register_tool)] +#![register_tool(hax)] + +#[hax_lib_macros::exclude] +extern crate hax_lib_macros; + +#[hax_lib_macros::exclude] +use hax_lib_macros::*; + +#[exclude] +use hacspec_concordium::*; +#[exclude] +use hacspec_concordium_derive::*; + +mod ovn_traits; +pub use ovn_traits::*; + +mod ovn_z_89; +pub use ovn_z_89::*; + +type Z : = z_89; +type G = g_z_89; // g_z_89 +const n: usize = 20; + +#[derive(Serialize, SchemaType, Clone, Copy)] +pub struct SchnorrZKPCommit { + pub schnorr_zkp_u: >::group_type, + pub schnorr_zkp_c: ::field_type, + pub schnorr_zkp_z: ::field_type, +} + +/** Non-interactive Schnorr proof using Fiat-Shamir heuristics (RFC 8235) */ +// https://www.rfc-editor.org/rfc/rfc8235 +// https://crypto.stanford.edu/cs355/19sp/lec5.pdf +pub fn schnorr_zkp(random: u32, h: >::group_type, x: ::field_type) -> SchnorrZKPCommit { + let r = ::random_field_elem(random); + let u = >::g_pow(r); + let c = >::hash(vec![>::g(), h, u]); + let z = ::add(r, ::mul(c, x)); + + return SchnorrZKPCommit { + schnorr_zkp_u: u, + schnorr_zkp_c: c, + schnorr_zkp_z: z, + }; +} + +// https://crypto.stanford.edu/cs355/19sp/lec5.pdf +pub fn schnorr_zkp_validate(h: >::group_type, pi: SchnorrZKPCommit) -> bool { + pi.schnorr_zkp_c == >::hash(vec![>::g(), h, pi.schnorr_zkp_u]) + && >::g_pow(pi.schnorr_zkp_z) == >::prod(pi.schnorr_zkp_u, >::pow(h, pi.schnorr_zkp_c)) +} + +#[derive(Serialize, SchemaType, Clone, Copy)] +pub struct OrZKPCommit { + pub or_zkp_x: >::group_type, + pub or_zkp_y: >::group_type, + pub or_zkp_a1: >::group_type, + pub or_zkp_b1: >::group_type, + pub or_zkp_a2: >::group_type, + pub or_zkp_b2: >::group_type, + + pub or_zkp_c: ::field_type, + + pub or_zkp_d1: ::field_type, + pub or_zkp_d2: ::field_type, + + pub or_zkp_r1: ::field_type, + pub or_zkp_r2: ::field_type, +} + +/** Cramer, Damgård and Schoenmakers (CDS) technique */ +pub fn zkp_one_out_of_two( + random_w: u32, + random_r: u32, + random_d: u32, + h: >::group_type, + xi: ::field_type, + vi: bool, +) -> OrZKPCommit { + let w = ::random_field_elem(random_w); + + if vi { + let r1 = ::random_field_elem(random_r); + let d1 = ::random_field_elem(random_d); + + let x = >::g_pow(xi); + let y = >::prod(>::pow(h, xi), >::g()); + + let a1 = >::prod(>::g_pow(r1), >::pow(x, d1)); + let b1 = >::prod(>::pow(h, r1), >::pow(y, d1)); + + let a2 = >::g_pow(w); + let b2 = >::pow(h, w); + + let c = >::hash(vec![x, y, a1, b1, a2, b2]); + + let d2 = ::sub(c, d1); + let r2 = ::sub(w, ::mul(xi, d2)); + + OrZKPCommit { + or_zkp_x: x, + or_zkp_y: y, + or_zkp_a1: a1, + or_zkp_b1: b1, + or_zkp_a2: a2, + or_zkp_b2: b2, + or_zkp_c: c, + or_zkp_d1: d1, + or_zkp_d2: d2, + or_zkp_r1: r1, + or_zkp_r2: r2, + } + } else { + let r2 = ::random_field_elem(random_r); + let d2 = ::random_field_elem(random_d); + + let x = >::g_pow(xi); + let y = >::pow(h, xi); + + let a1 = >::g_pow(w); + let b1 = >::pow(h, w); + + let a2 = >::prod(>::g_pow(r2), >::pow(x, d2)); + let b2 = >::prod(>::pow(h, r2), >::pow(>::div(y, >::g()), d2)); + + let c = >::hash(vec![x, y, a1, b1, a2, b2]); + + let d1 = ::sub(c, d2); + let r1 = ::sub(w, ::mul(xi, d1)); + + OrZKPCommit { + or_zkp_x: x, + or_zkp_y: y, + or_zkp_a1: a1, + or_zkp_b1: b1, + or_zkp_a2: a2, + or_zkp_b2: b2, + or_zkp_c: c, + or_zkp_d1: d1, + or_zkp_d2: d2, + or_zkp_r1: r1, + or_zkp_r2: r2, + } + } +} + +// Anonymous voting by two-round public discussion +pub fn zkp_one_out_of_two_validate(h: >::group_type, zkp: OrZKPCommit) -> bool { + let c = >::hash(vec![ + zkp.or_zkp_x, + zkp.or_zkp_y, + zkp.or_zkp_a1, + zkp.or_zkp_b1, + zkp.or_zkp_a2, + zkp.or_zkp_b2, + ]); // TODO: add i + + (c == ::add(zkp.or_zkp_d1, zkp.or_zkp_d2) + && zkp.or_zkp_a1 == >::prod(>::g_pow(zkp.or_zkp_r1), >::pow(zkp.or_zkp_x, zkp.or_zkp_d1)) + && zkp.or_zkp_b1 + == >::prod( + >::pow(h, zkp.or_zkp_r1), + >::pow(zkp.or_zkp_y, zkp.or_zkp_d1), + ) + && zkp.or_zkp_a2 == >::prod(>::g_pow(zkp.or_zkp_r2), >::pow(zkp.or_zkp_x, zkp.or_zkp_d2)) + && zkp.or_zkp_b2 + == >::prod( + >::pow(h, zkp.or_zkp_r2), + >::pow(>::div(zkp.or_zkp_y, >::g()), zkp.or_zkp_d2), + )) +} + +pub fn commit_to(g_pow_xi_yi_vi: >::group_type) -> ::field_type { + >::hash(vec![g_pow_xi_yi_vi]) +} + +pub fn check_commitment(g_pow_xi_yi_vi: >::group_type, commitment: ::field_type) -> bool { + >::hash(vec![g_pow_xi_yi_vi]) == commitment +} + +#[hax::contract_state(contract = "OVN")] +// #[cfg_attr(not(feature = "hax_compilation"), contract_state(contract = "OVN"))] +#[derive(Serialize, SchemaType, Clone, Copy)] +pub struct OvnContractState { + pub g_pow_xis: [>::group_type; n], + pub zkp_xis: [SchnorrZKPCommit; n], + + pub commit_vis: [::field_type; n], + + pub g_pow_xi_yi_vis: [>::group_type; n], + pub zkp_vis: [OrZKPCommit; n], + + pub tally: u32, +} + +#[hax::init(contract = "OVN")] +// #[cfg_attr(not(feature = "hax_compilation"), init(contract = "OVN"))] +pub fn init_ovn_contract(// _: &impl HasInitContext, +) -> InitResult { + Ok(OvnContractState { + g_pow_xis: [>::group_one(); n], + zkp_xis: [SchnorrZKPCommit { + schnorr_zkp_u: >::group_one(), + schnorr_zkp_z: ::field_zero(), + schnorr_zkp_c: ::field_zero(), + }; n], + + commit_vis: [::field_zero(); n], + + g_pow_xi_yi_vis: [>::group_one(); n], + zkp_vis: [OrZKPCommit { + or_zkp_x: >::group_one(), + or_zkp_y: >::group_one(), + or_zkp_a1: >::group_one(), + or_zkp_b1: >::group_one(), + or_zkp_a2: >::group_one(), + or_zkp_b2: >::group_one(), + + or_zkp_c: ::field_zero(), + + or_zkp_d1: ::field_zero(), + or_zkp_d2: ::field_zero(), + + or_zkp_r1: ::field_zero(), + or_zkp_r2: ::field_zero(), + }; n], + + tally: 0, + }) +} + +/** Currently randomness needs to be injected */ +pub fn select_private_voting_key(random: u32) -> ::field_type { + ::random_field_elem(random) +} + +#[derive(Serialize, SchemaType)] +pub struct RegisterParam { + pub rp_i: u32, + pub rp_xi: ::field_type, + pub rp_zkp_random: u32, +} + +/** Primary function in round 1 */ +#[hax::receive(contract = "OVN", name = "register", parameter = "RegisterParam")] +// #[cfg_attr(not(feature = "hax_compilation"), receive(contract = "OVN", name = "register", parameter = "RegisterParam"))] +pub fn register_vote( + ctx: impl HasReceiveContext, + state: OvnContractState, +) -> Result<(A, OvnContractState), ParseError> { + let params: RegisterParam = ctx.parameter_cursor().get()?; + let g_pow_xi = >::g_pow(params.rp_xi); + + let zkp_xi = schnorr_zkp(params.rp_zkp_random, g_pow_xi, params.rp_xi); + + let mut register_vote_state_ret = state.clone(); + register_vote_state_ret.g_pow_xis[params.rp_i as usize] = g_pow_xi; + register_vote_state_ret.zkp_xis[params.rp_i as usize] = zkp_xi; + + Ok((A::accept(), register_vote_state_ret)) +} + +#[derive(Serialize, SchemaType)] +pub struct CastVoteParam { + pub cvp_i: u32, + pub cvp_xi: ::field_type, + pub cvp_zkp_random_w: u32, + pub cvp_zkp_random_r: u32, + pub cvp_zkp_random_d: u32, + pub cvp_vote: bool, +} + +pub fn compute_g_pow_yi(i: usize, xis: [>::group_type; n]) -> >::group_type { + let mut prod1 = >::group_one(); + for j in 0..i { + prod1 = >::prod(prod1, xis[j]); + } + + let mut prod2 = >::group_one(); + for j in (i + 1)..n { + prod2 = >::prod(prod2, xis[j]); + } + + // implicitly: Y_i = g^y_i + let g_pow_yi = >::div(prod1, prod2); + g_pow_yi +} + +pub fn compute_group_element_for_vote( + xi: ::field_type, + vote: bool, + g_pow_yi: >::group_type, +) -> >::group_type { + >::prod( + >::pow(g_pow_yi, xi), + >::g_pow(if vote { + ::field_one() + } else { + ::field_zero() + }), + ) +} + +/** Commitment before round 2 */ +#[hax::receive(contract = "OVN", name = "commit_to_vote", parameter = "CastVoteParam")] +// #[cfg_attr(not(feature = "hax_compilation"), receive(contract = "OVN", name = "commit_to_vote", parameter = "CastVoteParam"))] +pub fn commit_to_vote( + ctx: impl HasReceiveContext, + state: OvnContractState, +) -> Result<(A, OvnContractState), ParseError> { + let params: CastVoteParam = ctx.parameter_cursor().get()?; + + for i in 0..n { + if !schnorr_zkp_validate(state.g_pow_xis[i], state.zkp_xis[i]) { + return Err(ParseError {}); + } + } + + let g_pow_yi = compute_g_pow_yi(params.cvp_i as usize, state.g_pow_xis); + let g_pow_xi_yi_vi = compute_group_element_for_vote(params.cvp_xi, params.cvp_vote, g_pow_yi); + let commit_vi = commit_to(g_pow_xi_yi_vi); + + let mut commit_to_vote_state_ret = state.clone(); + commit_to_vote_state_ret.commit_vis[params.cvp_i as usize] = commit_vi; + Ok((A::accept(), commit_to_vote_state_ret)) +} + +/** Primary function in round 2, also opens commitment */ +#[hax::receive(contract = "OVN", name = "cast_vote", parameter = "CastVoteParam")] +// #[cfg_attr(not(feature = "hax_compilation"), receive(contract = "OVN", name = "cast_vote", parameter = "CastVoteParam"))] +pub fn cast_vote( + ctx: impl HasReceiveContext, + state: OvnContractState, +) -> Result<(A, OvnContractState), ParseError> { + let params: CastVoteParam = ctx.parameter_cursor().get()?; + + let g_pow_yi = compute_g_pow_yi(params.cvp_i as usize, state.g_pow_xis); + let g_pow_xi_yi_vi = compute_group_element_for_vote(params.cvp_xi, params.cvp_vote, g_pow_yi); + + let zkp_vi = zkp_one_out_of_two( + params.cvp_zkp_random_w, + params.cvp_zkp_random_r, + params.cvp_zkp_random_d, + g_pow_yi, + params.cvp_xi, + params.cvp_vote, + ); + let mut cast_vote_state_ret = state.clone(); + cast_vote_state_ret.g_pow_xi_yi_vis[params.cvp_i as usize] = g_pow_xi_yi_vi; + cast_vote_state_ret.zkp_vis[params.cvp_i as usize] = zkp_vi; + + Ok((A::accept(), cast_vote_state_ret)) +} + +#[derive(Serialize, SchemaType)] +pub struct TallyParameter {} + +#[hax::receive(contract = "OVN", name = "tally", parameter = "TallyParameter")] +// #[cfg_attr(not(feature = "hax_compilation"), receive(contract = "OVN", name = "tally", parameter = "TallyParameter"))] +/** Anyone can tally the votes */ +pub fn tally_votes( + _: impl HasReceiveContext, + state: OvnContractState, +) -> Result<(A, OvnContractState), ParseError> { + for i in 0..n { + let g_pow_yi = compute_g_pow_yi(i as usize, state.g_pow_xis); + if !zkp_one_out_of_two_validate(g_pow_yi, state.zkp_vis[i]) { + return Err(ParseError {}); + } + if !check_commitment(state.g_pow_xi_yi_vis[i], state.commit_vis[i]) { + return Err(ParseError {}); + } + } + + let mut vote_result = >::group_one(); + for g_pow_vote in state.g_pow_xi_yi_vis { + vote_result = >::prod(vote_result, g_pow_vote); + } + + let mut tally = 0; + let mut curr = ::field_zero(); + for i in 0..n as u32 { + // Should be while, but is bounded by n anyways! + if >::g_pow(curr) == vote_result { + tally = i; + } + + curr = ::add(curr, ::field_one()); + } + + let mut tally_votes_state_ret = state.clone(); + tally_votes_state_ret.tally = tally; + + Ok((A::accept(), tally_votes_state_ret)) +} + +// https://github.com/stonecoldpat/anonymousvoting diff --git a/ovn/src/ovn_secp256k1.rs b/ovn/src/ovn_secp256k1.rs new file mode 100644 index 0000000..7de2adc --- /dev/null +++ b/ovn/src/ovn_secp256k1.rs @@ -0,0 +1,256 @@ +#![no_std] +#![feature(register_tool)] +#![register_tool(hax)] + +#[hax_lib_macros::exclude] +extern crate hax_lib_macros; + +#[hax_lib_macros::exclude] +use hax_lib_macros::*; + +#[exclude] +use hacspec_concordium::*; +#[exclude] +use hacspec_concordium_derive::*; + +pub use crate::ovn_traits::*; + +// // pub use create::ovn_traits::*; +// use create::Field; +// use create::Group; +// use create::Field; + +use hacspec_lib::*; + +//////////////////////// +// Impl for Secp256k1 // +//////////////////////// + +use hacspec_bip_340::*; + +#[derive(core::marker::Copy, Clone, PartialEq, Eq)] +pub struct Z_curve { + z_val: Scalar, +} + +impl hacspec_concordium::Deserial for Z_curve { + fn deserial(source: &mut R) -> ParseResult { + let temp : Vec = source.get()?; + + Ok(Z_curve { + z_val: Scalar::from_public_byte_seq_be(Seq::::from_vec(temp)), + }) + } +} + +impl hacspec_concordium::Serial for Z_curve { + fn serial(&self, out: &mut W) -> Result<(), W::Err> { + let mut v : Vec = Vec::new(); + for x in self.z_val.to_public_byte_seq_be().native_slice() { + v.push(x.clone()); + } + v.serial(out) + } +} + +impl core::ops::Mul for Z_curve { + type Output = Self; + fn mul(self, y: Self) -> Self { + Z_curve { z_val: self.z_val * y.z_val } + } +} + +impl core::iter::Product for Z_curve { + fn product>(iter: I) -> Self { + iter.fold( + Z_curve { + z_val: Scalar::from_literal(1u128), + }, + |a, b| a * b, + ) + } +} + +impl core::ops::Add for Z_curve { + type Output = Self; + fn add(self, y: Self) -> Self { + Z_curve { z_val: self.z_val + y.z_val } + } +} + +impl core::ops::Neg for Z_curve { + type Output = Self; + fn neg(self) -> Self { + Z_curve { z_val: Self::field_zero().z_val - self.z_val } + } +} + +impl Field for Z_curve { + fn q() -> Self { + Z_curve { + z_val: Scalar::from_hex( + "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141", + ), + } + } + + fn random_field_elem(random: u32) -> Self { + Z_curve { + z_val: Scalar::from_literal(random as u128), + } + } + + fn field_zero() -> Self { + Z_curve { + z_val: Scalar::from_literal(0u128), + } // Scalar::ZERO() + } + + fn field_one() -> Self { + Z_curve { + z_val: Scalar::from_literal(1u128), + } // Scalar::ONE() + } + + // fn sub(x: Self, y: Self) -> Self { + // Z_curve { z_val: x.z_val - y.z_val } + // } + + fn inv(x: Self) -> Self { + assert!(false); // Missing + return x; + } + +} + + +#[derive(core::marker::Copy, Clone, PartialEq, Eq)] +pub struct Group_curve { + g_val: Point, +} + +impl hacspec_concordium::Deserial for Group_curve { + fn deserial(source: &mut R) -> ParseResult { + let b : bool = source.get()?; + if b { + let vx : Vec = source.get()?; + let vy : Vec = source.get()?; + + Ok(Group_curve { + g_val: Point::Affine(( + FieldElement::from_public_byte_seq_be(Seq::::from_vec(vx)), + FieldElement::from_public_byte_seq_be(Seq::::from_vec(vy)), + )), + }) + } else { + Ok(Group_curve { g_val: Point::AtInfinity }) + } + } +} + +impl hacspec_concordium::Serial for Group_curve { + fn serial(&self, out: &mut W) -> Result<(), W::Err> { + match self.g_val { + Point::Affine(p) => { + true.serial(out)?; + + let mut vx : Vec = Vec::new(); + for x in x(p).to_public_byte_seq_be().native_slice() { + vx.push(x.clone()); + } + let _ = vx.serial(out)?; + + let mut vy : Vec = Vec::new(); + for y in y(p).to_public_byte_seq_be().native_slice() { + vy.push(y.clone()); + } + let _ = vy.serial(out)?; + } + Point::AtInfinity => { + let _ = false.serial(out)?; + }, + }; + Ok(()) + } +} + +impl core::ops::Mul for Group_curve { + type Output = Self; + fn mul(self, y: Self) -> Self { + Group_curve { + g_val: point_add(self.g_val, y.g_val), + } + } +} + +impl core::iter::Product for Group_curve { + fn product>(iter: I) -> Self { + iter.fold( + Self::g_pow(::field_zero()), + |a, b| a * b, + ) + } +} + +impl Group for Group_curve { + type Z = Z_curve; + + // https://eips.ethereum.org/EIPS/eip-2333 + fn g() -> Self { + #[rustfmt::skip] + let gx = PBytes32([ + 0x79u8, 0xBEu8, 0x66u8, 0x7Eu8, 0xF9u8, 0xDCu8, 0xBBu8, 0xACu8, + 0x55u8, 0xA0u8, 0x62u8, 0x95u8, 0xCEu8, 0x87u8, 0x0Bu8, 0x07u8, + 0x02u8, 0x9Bu8, 0xFCu8, 0xDBu8, 0x2Du8, 0xCEu8, 0x28u8, 0xD9u8, + 0x59u8, 0xF2u8, 0x81u8, 0x5Bu8, 0x16u8, 0xF8u8, 0x17u8, 0x98u8 + ]); + #[rustfmt::skip] + let gy = PBytes32([ + 0x48u8, 0x3Au8, 0xDAu8, 0x77u8, 0x26u8, 0xA3u8, 0xC4u8, 0x65u8, + 0x5Du8, 0xA4u8, 0xFBu8, 0xFCu8, 0x0Eu8, 0x11u8, 0x08u8, 0xA8u8, + 0xFDu8, 0x17u8, 0xB4u8, 0x48u8, 0xA6u8, 0x85u8, 0x54u8, 0x19u8, + 0x9Cu8, 0x47u8, 0xD0u8, 0x8Fu8, 0xFBu8, 0x10u8, 0xD4u8, 0xB8u8 + ]); + Group_curve { + g_val: Point::Affine(( + FieldElement::from_public_byte_seq_be(gx), + FieldElement::from_public_byte_seq_be(gy), + )), + } + } + + fn pow(g: Self, x: Z_curve) -> Self { + Group_curve { + g_val: point_mul(x.z_val, g.g_val), + } + } + + fn g_pow(x: Z_curve) -> Self { + Group_curve { + g_val: point_mul_base(x.z_val), + } + // Self::pow(Self::g(), x) + } + + fn group_one() -> Self { + Self::g_pow(::field_zero()) + } + + fn group_inv(x: Self) -> Self { + Group_curve { + g_val: match x.g_val { + Point::Affine((a, b)) => Point::Affine((a, FieldElement::from_literal(0u128) - b)), + Point::AtInfinity => Point::AtInfinity, + }, + } + } + + // fn div(x: Self, y: Self) -> Self { + // Self::prod(x, Self::inv(y)) + // } + + fn hash(x: Vec) -> Z_curve { + // fp_hash_to_field + Z_curve::field_one() // TODO: bls12-381 hash to curve? + } +} diff --git a/ovn/src/ovn_traits.rs b/ovn/src/ovn_traits.rs new file mode 100644 index 0000000..c3f596d --- /dev/null +++ b/ovn/src/ovn_traits.rs @@ -0,0 +1,64 @@ +#![no_std] +#![feature(register_tool)] +#![register_tool(hax)] + +#[hax_lib_macros::exclude] +extern crate hax_lib_macros; + +#[hax_lib_macros::exclude] +use hax_lib_macros::*; + +#[exclude] +use hacspec_concordium::*; + +// use hax_lib::lemma; + +#[exclude] +use core::iter::Product; +#[exclude] +use core::marker::Copy; +#[exclude] +use core::ops::{Add, Mul, Neg}; + +//////////// +// Traits // +//////////// + +/** Interface for field implementation */ +pub trait Field: + Copy + + PartialEq + + Eq + + Clone + + Copy + + hacspec_concordium::Serialize + + Mul + + Product + + Add + + Neg +{ + fn q() -> Self; + + fn random_field_elem(random: u32) -> Self; + + fn field_zero() -> Self; + fn field_one() -> Self; + + fn inv(x: Self) -> Self; +} + +/** Interface for group implementation */ +pub trait Group: + Copy + PartialEq + Eq + Clone + Copy + hacspec_concordium::Serialize + Mul + Product +{ + type Z: Field; + + fn g() -> Self; // Generator (elemnent of group) + + fn g_pow(x: Self::Z) -> Self; + fn pow(g: Self, x: Self::Z) -> Self; // TODO: Link with q + fn group_one() -> Self; + fn group_inv(x: Self) -> Self; + + fn hash(x: Vec) -> Self::Z; +} diff --git a/ovn/src/ovn_z_89.rs b/ovn/src/ovn_z_89.rs new file mode 100644 index 0000000..98ce55d --- /dev/null +++ b/ovn/src/ovn_z_89.rs @@ -0,0 +1,194 @@ +#![no_std] +#![feature(register_tool)] +#![register_tool(hax)] + +#[hax_lib_macros::exclude] +extern crate hax_lib_macros; + +#[hax_lib_macros::exclude] +use hax_lib_macros::*; + +#[exclude] +use hacspec_concordium::*; +#[exclude] +use hacspec_concordium_derive::*; + +pub use crate::ovn_traits::*; + +// // pub use create::ovn_traits::*; +// use create::Field; +// use create::Group; +// use create::Field; + +//////////////////// +// Impl for Z/89Z // +//////////////////// + +#[derive(Clone, Copy, PartialEq, Eq, hacspec_concordium::Serial, hacspec_concordium::Deserial)] +pub struct z_89 { z_val : u8 } + +// impl hacspec_concordium::Deserial for z_89 { +// // TODO: +// fn deserial(source: &mut R) -> ParseResult { +// let v : u8 = source.get()?; +// Ok(z_89 { +// z_val: v, +// }) +// } +// } + +// impl hacspec_concordium::Serial for z_89 { +// // TODO: +// fn serial(&self, out: &mut W) -> Result<(), W::Err> { +// self.z_val.serial(out) +// } +// } + +impl core::ops::Mul for z_89 { + type Output = Self; + fn mul(self, y: Self) -> Self { + let q_ = Self::q().z_val - 1; + let x_ : u16 = (self.z_val % q_) as u16; + let y_ : u16 = (y.z_val % q_) as u16; + z_89{ z_val: ((x_ * y_) % (q_ as u16)) as u8 } + } +} + +impl core::iter::Product for z_89 { + fn product>(iter: I) -> Self { + iter.fold( + z_89{ z_val: 1u8 }, + |a, b| a * b, + ) + } +} + +impl core::ops::Add for z_89 { + type Output = Self; + fn add(self, y: Self) -> Self { + let q_ = Self::q().z_val - 1; + let x_ = self.z_val % q_; + let y_ = y.z_val % q_; + z_89{ z_val: (x_ + y_) % q_ } + } +} + +impl core::ops::Neg for z_89 { + type Output = Self; + fn neg(self) -> Self { + let q_ = Self::q().z_val - 1; + let x_ = self.z_val % q_; + z_89{ z_val: q_ - x_ } + } +} + +impl Field for z_89 { + fn q() -> Self { + z_89{ z_val: 89u8} + } // Prime order + fn random_field_elem(random: u32) -> Self { + z_89{ z_val: random as u8 % (Self::q().z_val - 1) } + } + + fn field_zero() -> Self { + z_89{ z_val: 0u8 } + } + + fn field_one() -> Self { + z_89{ z_val: 1u8 } + } + + fn inv(x: Self) -> Self { + assert!(false); // Missing + return x; + + } +} + +#[derive(Clone, Copy, PartialEq, Eq, hacspec_concordium::Serial, hacspec_concordium::Deserial)] +pub struct g_z_89 { g_val : u8 } + +// impl hacspec_concordium::Deserial for g_z_89 { +// // TODO: +// fn deserial(source: &mut R) -> ParseResult { +// let v : u8 = source.get()?; + +// Ok(g_z_89 { +// g_val: v, +// }) +// } +// } + +// impl hacspec_concordium::Serial for g_z_89 { +// // TODO: +// fn serial(&self, out: &mut W) -> Result<(), W::Err> { +// self.g_val.serial(out) +// } +// } + +impl core::ops::Mul for g_z_89 { + type Output = Self; + fn mul(self, y: Self) -> Self { + let q_ = z_89::q().z_val; + let x_ = (self.g_val % q_) as u16; + let y_ = (y.g_val % q_) as u16; + g_z_89 { g_val: ((x_ * y_) % (q_ as u16)) as u8 } + } +} + +impl core::iter::Product for g_z_89 { + fn product>(iter: I) -> Self { + iter.fold( + g_z_89 { g_val: 1 }, + |a, b| a * b, + ) + } +} + +impl Group for g_z_89 { + type Z = z_89; + + fn g() -> Self { + g_z_89 { g_val: 3u8 } + } // Generator (elemnent of group) + + fn hash(x: Vec) -> z_89 { + let mut res = z_89::field_one(); + for y in x { + res = z_89{z_val: y.g_val} * res; + } + res // TODO + } + + fn g_pow(x: z_89) -> Self { + Self::pow(Self::g(), x) + } + + // TODO: use repeated squaring instead! + fn pow(g: Self, x: z_89) -> Self { + let mut result = Self::group_one(); + for _ in 0..(x.z_val % (z_89::q().z_val - 1)) { + result = result * g; + } + result + } + + fn group_one() -> Self { + g_z_89 { g_val: 1 } + } + + fn group_inv(x: Self) -> Self { + for j in 0..89 { + let g_value = g_z_89 {g_val: j}; + if x * g_value == Self::group_one() { + return g_value; + } + } + assert!(false); + return x; + } + + // fn div(x: Self, y: Self) -> Self { + // Self::prod(x, Self::inv(y)) + // } +} diff --git a/ovn/src/ovn_zk_secp256k1.rs b/ovn/src/ovn_zk_secp256k1.rs new file mode 100644 index 0000000..3e58993 --- /dev/null +++ b/ovn/src/ovn_zk_secp256k1.rs @@ -0,0 +1,27 @@ +#[hax_lib_macros::exclude] +use hax_lib_macros::*; + +#[exclude] +use hacspec_concordium::*; +#[exclude] +use hacspec_concordium_derive::*; + +pub use crate::ovn_zkgroup::*; +pub use group::{ff::Field, Group}; + +use hacspec_bip_340::{GroupTrait::*, Point, *}; + +impl MGroup for Point { + fn hash(inp: Vec) -> Self::Scalar { + return Self::Scalar::ONE; // TODO + } +} + +use bls12_381::*; + +impl MGroup for Gt { + fn hash(inp: Vec) -> Self::Scalar { + return Self::Scalar::ONE; // TODO + } +} +// hacspec_concordium::Serial + hacspec_concordium::Deserial, diff --git a/ovn/src/ovn_zk_z_89.rs b/ovn/src/ovn_zk_z_89.rs new file mode 100644 index 0000000..6c0b14c --- /dev/null +++ b/ovn/src/ovn_zk_z_89.rs @@ -0,0 +1,111 @@ +#![no_std] +#![feature(register_tool)] +#![register_tool(hax)] + +#[hax_lib_macros::exclude] +extern crate hax_lib_macros; + +#[hax_lib_macros::exclude] +use hax_lib_macros::*; + +#[exclude] +use hacspec_concordium::*; +#[exclude] +use hacspec_concordium_derive::*; + +use group::*; + +//////////////////// +// Impl for Z/89Z // +//////////////////// + +pub struct z_89(u32); + +// impl Group for z_89 { + +// } + +// #[derive(Clone, Copy)] +// pub struct z_89 {} +// impl Z_Field for z_89 { +// type field_type = u32; +// fn q() -> Self::field_type { +// 89u32 +// } // Prime order +// fn random_field_elem(random: u32) -> Self::field_type { +// random % (Self::q() - 1) +// } + +// fn field_zero() -> Self::field_type { +// 0u32 +// } + +// fn field_one() -> Self::field_type { +// 1u32 +// } + +// fn add(x: Self::field_type, y: Self::field_type) -> Self::field_type { +// (x + y) % (Self::q() - 1) +// } + +// fn sub(x: Self::field_type, y: Self::field_type) -> Self::field_type { +// (x + (Self::q() - 1) - y) % (Self::q() - 1) +// } + +// fn mul(x: Self::field_type, y: Self::field_type) -> Self::field_type { +// (x * y) % (Self::q() - 1) +// } +// } + +// #[derive(Clone, Copy)] +// pub struct g_z_89 {} +// impl Group for g_z_89 { +// type group_type = u32; + +// fn g() -> Self::group_type { +// 3u32 +// } // Generator (elemnent of group) + +// fn hash(x: Vec) -> ::field_type { +// let mut res = z_89::field_one(); +// for y in x { +// res = z_89::mul(y, res); +// } +// res // TODO +// } + +// fn g_pow(x: ::field_type) -> Self::group_type { +// Self::pow(Self::g(), x) +// } + +// // TODO: use repeated squaring instead! +// fn pow(g: Self::group_type, x: ::field_type) -> Self::group_type { +// let mut result = Self::group_one(); +// for i in 0..(x % (z_89::q() - 1)) { +// result = Self::prod(result, g); +// } +// result +// } + +// fn group_one() -> Self::group_type { +// 1 +// } + +// fn prod(x: Self::group_type, y: Self::group_type) -> Self::group_type { +// ((x % z_89::q()) * (y % z_89::q())) % z_89::q() +// } + +// fn inv(x: Self::group_type) -> Self::group_type { +// for j in 0..89 { +// if Self::prod(x, j) == Self::group_one() { +// return j; +// } +// } +// assert!(false); +// return x; +// } + +// fn div(x: Self::group_type, y: Self::group_type) -> Self::group_type { +// Self::prod(x, Self::inv(y)) +// } +// } diff --git a/ovn/src/ovn_zkgroup.rs b/ovn/src/ovn_zkgroup.rs new file mode 100644 index 0000000..4f253ae --- /dev/null +++ b/ovn/src/ovn_zkgroup.rs @@ -0,0 +1,454 @@ +#[hax_lib_macros::exclude] +use hax_lib_macros::*; + +#[exclude] +use hacspec_concordium::*; +#[exclude] +use hacspec_concordium_derive::*; + +use group::{ + ff::{Field, PrimeField}, + Group, +}; + +pub trait MGroup : Group { + fn hash(inp: Vec) -> Self::Scalar; +} + +//////////////////// +// Implementation // +//////////////////// + +#[derive(SchemaType)] // , Clone, Copy +pub struct SchnorrZKPCommit { + pub schnorr_zkp_u: G, + pub schnorr_zkp_c: G::Scalar, + pub schnorr_zkp_z: G::Scalar, +} + +/** Non-interactive Schnorr proof using Fiat-Shamir heuristics (RFC 8235) */ +// https://www.rfc-editor.org/rfc/rfc8235 +// https://crypto.stanford.edu/cs355/19sp/lec5.pdf +pub fn schnorr_zkp( + r: G::Scalar, // random + h: G, + x: G::Scalar, +) -> SchnorrZKPCommit { + let u = G::generator() * r; // g ^ r + let c = G::hash(vec![G::generator(), h, u]); + let z = r + (c * x); + + return SchnorrZKPCommit { + schnorr_zkp_u: u, + schnorr_zkp_c: c, + schnorr_zkp_z: z, + }; +} + +// // https://crypto.stanford.edu/cs355/19sp/lec5.pdf +// pub fn schnorr_zkp_validate(h: G, pi: SchnorrZKPCommit) -> bool { +// pi.schnorr_zkp_c == G::hash(vec![G::generator(), h, pi.schnorr_zkp_u]) +// && (G::g_pow(pi.schnorr_zkp_z) == (pi.schnorr_zkp_u + G::pow(h, pi.schnorr_zkp_c))) +// } + +// // #[derive(SchemaType, Clone, Copy)] +// // pub struct OrZKPCommit { +// // pub or_zkp_x: G, +// // pub or_zkp_y: G, +// // pub or_zkp_a1: G, +// // pub or_zkp_b1: G, +// // pub or_zkp_a2: G, +// // pub or_zkp_b2: G, + +// // pub or_zkp_c: G::Scalar, + +// // pub or_zkp_d1: G::Scalar, +// // pub or_zkp_d2: G::Scalar, + +// // pub or_zkp_r1: G::Scalar, +// // pub or_zkp_r2: G::Scalar, +// // } + +// // /** Cramer, Damgård and Schoenmakers (CDS) technique */ +// // pub fn zkp_one_out_of_two( +// // w: G::Scalar, // random +// // rand_r: G::Scalar, +// // rand_d: G::Scalar, +// // h: G, +// // xi: G::Scalar, +// // vi: bool, +// // ) -> OrZKPCommit { +// // if vi { +// // let r1 = rand_r; +// // let d1 = rand_d; + +// // let x = G::g_pow(xi); +// // let y = G::pow(h, xi) + G::generator(); + +// // let a1 = G::g_pow(r1) + G::pow(x, d1); +// // let b1 = G::pow(h, r1) + G::pow(y, d1); + +// // let a2 = G::g_pow(w); +// // let b2 = G::pow(h, w); + +// // let c = G::hash(vec![x, y, a1, b1, a2, b2]); + +// // let d2 = c - d1; +// // let r2 = w - xi * d2; + +// // OrZKPCommit { +// // or_zkp_x: x, +// // or_zkp_y: y, +// // or_zkp_a1: a1, +// // or_zkp_b1: b1, +// // or_zkp_a2: a2, +// // or_zkp_b2: b2, +// // or_zkp_c: c, +// // or_zkp_d1: d1, +// // or_zkp_d2: d2, +// // or_zkp_r1: r1, +// // or_zkp_r2: r2, +// // } +// // } else { +// // let r2 = rand_r; +// // let d2 = rand_d; + +// // let x = G::g_pow(xi); +// // let y = G::pow(h, xi); + +// // let a1 = G::g_pow(w); +// // let b1 = G::pow(h, w); + +// // let a2 = G::g_pow(r2) + G::pow(x, d2); +// // let b2 = G::pow(h, r2) + G::pow(G::div(y, G::generator()), d2); + +// // let c = G::hash(vec![x, y, a1, b1, a2, b2]); + +// // let d1 = c - d2; +// // let r1 = w - xi * d1; + +// // OrZKPCommit { +// // or_zkp_x: x, +// // or_zkp_y: y, +// // or_zkp_a1: a1, +// // or_zkp_b1: b1, +// // or_zkp_a2: a2, +// // or_zkp_b2: b2, +// // or_zkp_c: c, +// // or_zkp_d1: d1, +// // or_zkp_d2: d2, +// // or_zkp_r1: r1, +// // or_zkp_r2: r2, +// // } +// // } +// // } + +// // // Anonymous voting by two-round public discussion +// // pub fn zkp_one_out_of_two_validate(h: G, zkp: OrZKPCommit) -> bool { +// // let c = G::hash(vec![ +// // zkp.or_zkp_x, +// // zkp.or_zkp_y, +// // zkp.or_zkp_a1, +// // zkp.or_zkp_b1, +// // zkp.or_zkp_a2, +// // zkp.or_zkp_b2, +// // ]); // TODO: add i + +// // c == zkp.or_zkp_d1 + zkp.or_zkp_d2 +// // && zkp.or_zkp_a1 == G::g_pow(zkp.or_zkp_r1) + G::pow(zkp.or_zkp_x, zkp.or_zkp_d1) +// // && zkp.or_zkp_b1 == G::pow(h, zkp.or_zkp_r1) + G::pow(zkp.or_zkp_y, zkp.or_zkp_d1) +// // && zkp.or_zkp_a2 == G::g_pow(zkp.or_zkp_r2) + G::pow(zkp.or_zkp_x, zkp.or_zkp_d2) +// // && zkp.or_zkp_b2 +// // == G::pow(h, zkp.or_zkp_r2) +// // + G::pow(G::div(zkp.or_zkp_y, G::generator()), zkp.or_zkp_d2) +// // } + +// // pub fn commit_to(g_pow_xi_yi_vi: G) -> G::Scalar { +// // G::hash(vec![g_pow_xi_yi_vi]) +// // } + +// // pub fn check_commitment(g_pow_xi_yi_vi: G, commitment: G::Scalar) -> bool { +// // G::hash(vec![g_pow_xi_yi_vi]) == commitment +// // } + +// // #[hax::contract_state(contract = "OVN")] +// // // #[cfg_attr(not(feature = "hax_compilation"), contract_state(contract = "OVN"))] +// // #[derive(SchemaType, Clone, Copy)] +// // pub struct OvnContractState { +// // pub g_pow_xis: [G; n], +// // pub zkp_xis: [SchnorrZKPCommit; n], + +// // pub commit_vis: [G::Scalar; n], + +// // pub g_pow_xi_yi_vis: [G; n], +// // pub zkp_vis: [OrZKPCommit; n], + +// // pub tally: u32, +// // } + +// // #[hax::init(contract = "OVN")] +// // // #[cfg_attr(not(feature = "hax_compilation"), init(contract = "OVN"))] +// // pub fn init_ovn_contract(// _: &impl HasInitContext, +// // ) -> InitResult> { +// // Ok(OvnContractState:: { +// // g_pow_xis: [G::identity(); n], +// // zkp_xis: [SchnorrZKPCommit:: { +// // schnorr_zkp_u: G::identity(), +// // schnorr_zkp_z: G::Scalar::ZERO, +// // schnorr_zkp_c: G::Scalar::ZERO, +// // }; n], + +// // commit_vis: [G::Scalar::ZERO; n], + +// // g_pow_xi_yi_vis: [G::identity(); n], +// // zkp_vis: [OrZKPCommit:: { +// // or_zkp_x: G::identity(), +// // or_zkp_y: G::identity(), +// // or_zkp_a1: G::identity(), +// // or_zkp_b1: G::identity(), +// // or_zkp_a2: G::identity(), +// // or_zkp_b2: G::identity(), + +// // or_zkp_c: G::Scalar::ZERO, + +// // or_zkp_d1: G::Scalar::ZERO, +// // or_zkp_d2: G::Scalar::ZERO, + +// // or_zkp_r1: G::Scalar::ZERO, +// // or_zkp_r2: G::Scalar::ZERO, +// // }; n], + +// // tally: 0, +// // }) +// // } + +// // use core::marker::PhantomData; +// // #[derive(SchemaType)] +// // pub struct RegisterParam + Into> { +// // pub rp_i: u32, +// // pub rp_xi: Z, +// // pub rp_zkp_random: Z, +// // pub phantom: PhantomData, +// // } + +// // impl + Into> Serial for RegisterParam { +// // fn serial(&self, w: &mut W) -> Result<(), ::Err> { +// // self.rp_i.serial(w)?; +// // >::from(self.rp_xi).serial(w)?; +// // >::from(self.rp_zkp_random).serial(w)?; +// // Ok(()) +// // } +// // } + +// // impl + Into> Deserial for RegisterParam { +// // fn deserial(r: &mut R) -> Result { +// // let rp_i: u32 = r.get()?; +// // let rp_xi: Z = >::into(r.get()?); +// // let rp_zkp_random: Z = >::into(r.get()?); +// // Ok(RegisterParam { +// // rp_i, +// // rp_xi, +// // rp_zkp_random, +// // phantom: PhantomData, +// // }) +// // } +// // } + +// // /** Primary function in round 1 */ +// // #[hax::receive(contract = "OVN", name = "register", parameter = "RegisterParam")] +// // // #[cfg_attr(not(feature = "hax_compilation"), receive(contract = "OVN", name = "register", parameter = "RegisterParam"))] +// // pub fn register_vote< +// // G: MGroup, +// // S: Serialize + From + Into, +// // const n: usize, +// // A: HasActions, +// // >( +// // ctx: impl HasReceiveContext, +// // state: OvnContractState, +// // ) -> Result<(A, OvnContractState), ParseError> { +// // let params: RegisterParam = ctx.parameter_cursor().get()?; +// // let g_pow_xi = G::g_pow(params.rp_xi); + +// // let zkp_xi = schnorr_zkp::(params.rp_zkp_random, g_pow_xi, params.rp_xi); + +// // let mut register_vote_state_ret = state.clone(); +// // register_vote_state_ret.g_pow_xis[params.rp_i as usize] = g_pow_xi; +// // register_vote_state_ret.zkp_xis[params.rp_i as usize] = zkp_xi; + +// // Ok((A::accept(), register_vote_state_ret)) +// // } + +// // #[derive(SchemaType)] +// // pub struct CastVoteParam + Into> { +// // pub cvp_i: u32, +// // pub cvp_xi: Z, +// // pub cvp_zkp_random_w: Z, +// // pub cvp_zkp_random_r: Z, +// // pub cvp_zkp_random_d: Z, +// // pub cvp_vote: bool, +// // pub phantom: PhantomData, +// // } + +// // impl + Into> Serial for CastVoteParam { +// // fn serial(&self, w: &mut W) -> Result<(), ::Err> { +// // self.cvp_i.serial(w)?; +// // >::from(self.cvp_xi).serial(w)?; +// // >::from(self.cvp_zkp_random_w).serial(w)?; +// // >::from(self.cvp_zkp_random_r).serial(w)?; +// // >::from(self.cvp_zkp_random_d).serial(w)?; +// // self.cvp_vote.serial(w)?; +// // Ok(()) +// // } +// // } + +// // impl + Into> Deserial for CastVoteParam { +// // fn deserial(r: &mut R) -> Result { +// // let cvp_i: u32 = r.get()?; +// // let cvp_xi: Z = >::into(r.get()?); +// // let cvp_zkp_random_w: Z = >::into(r.get()?); +// // let cvp_zkp_random_r: Z = >::into(r.get()?); +// // let cvp_zkp_random_d: Z = >::into(r.get()?); +// // let cvp_vote: bool = r.get()?; +// // Ok(CastVoteParam { +// // cvp_i, +// // cvp_xi, +// // cvp_zkp_random_w, +// // cvp_zkp_random_r, +// // cvp_zkp_random_d, +// // cvp_vote, +// // phantom: PhantomData, +// // }) +// // } +// // } + +// // pub fn compute_g_pow_yi(i: usize, xis: [G; n]) -> G { +// // let mut prod1 = G::identity(); +// // for j in 0..i { +// // prod1 = prod1 + xis[j]; +// // } + +// // let mut prod2 = G::identity(); +// // for j in (i + 1)..n { +// // prod2 = prod2 + xis[j]; +// // } + +// // // implicitly: Y_i = g^y_i +// // let g_pow_yi = G::div(prod1, prod2); +// // g_pow_yi +// // } + +// // pub fn compute_group_element_for_vote(xi: G::Scalar, vote: bool, g_pow_yi: G) -> G { +// // G::pow(g_pow_yi, xi) +// // + G::g_pow(if vote { +// // G::Scalar::ONE +// // } else { +// // G::Scalar::ZERO +// // }) +// // } + +// // /** Commitment before round 2 */ +// // #[hax::receive(contract = "OVN", name = "commit_to_vote", parameter = "CastVoteParam")] +// // // #[cfg_attr(not(feature = "hax_compilation"), receive(contract = "OVN", name = "commit_to_vote", parameter = "CastVoteParam"))] +// // pub fn commit_to_vote< +// // G: MGroup, +// // S: Serialize + From + Into, +// // const n: usize, +// // A: HasActions, +// // >( +// // ctx: impl HasReceiveContext, +// // state: OvnContractState, +// // ) -> Result<(A, OvnContractState), ParseError> { +// // let params: CastVoteParam = ctx.parameter_cursor().get()?; + +// // for i in 0..n { +// // if !schnorr_zkp_validate(state.g_pow_xis[i], state.zkp_xis[i]) { +// // return Err(ParseError {}); +// // } +// // } + +// // let g_pow_yi = compute_g_pow_yi::(params.cvp_i as usize, state.g_pow_xis); +// // let g_pow_xi_yi_vi = +// // compute_group_element_for_vote::(params.cvp_xi, params.cvp_vote, g_pow_yi); +// // let commit_vi = commit_to::(g_pow_xi_yi_vi); + +// // let mut commit_to_vote_state_ret = state.clone(); +// // commit_to_vote_state_ret.commit_vis[params.cvp_i as usize] = commit_vi; +// // Ok((A::accept(), commit_to_vote_state_ret)) +// // } + +// // /** Primary function in round 2, also opens commitment */ +// // #[hax::receive(contract = "OVN", name = "cast_vote", parameter = "CastVoteParam")] +// // // #[cfg_attr(not(feature = "hax_compilation"), receive(contract = "OVN", name = "cast_vote", parameter = "CastVoteParam"))] +// // pub fn cast_vote< +// // G: MGroup, +// // S: Serialize + From + Into, +// // const n: usize, +// // A: HasActions, +// // >( +// // ctx: impl HasReceiveContext, +// // state: OvnContractState, +// // ) -> Result<(A, OvnContractState), ParseError> { +// // let params: CastVoteParam = ctx.parameter_cursor().get()?; + +// // let g_pow_yi = compute_g_pow_yi::(params.cvp_i as usize, state.g_pow_xis); +// // let g_pow_xi_yi_vi = +// // compute_group_element_for_vote::(params.cvp_xi, params.cvp_vote, g_pow_yi); + +// // let zkp_vi = zkp_one_out_of_two::( +// // params.cvp_zkp_random_w, +// // params.cvp_zkp_random_r, +// // params.cvp_zkp_random_d, +// // g_pow_yi, +// // params.cvp_xi, +// // params.cvp_vote, +// // ); +// // let mut cast_vote_state_ret = state.clone(); +// // cast_vote_state_ret.g_pow_xi_yi_vis[params.cvp_i as usize] = g_pow_xi_yi_vi; +// // cast_vote_state_ret.zkp_vis[params.cvp_i as usize] = zkp_vi; + +// // Ok((A::accept(), cast_vote_state_ret)) +// // } + +// // #[derive(Serialize, SchemaType)] +// // pub struct TallyParameter {} + +// // #[hax::receive(contract = "OVN", name = "tally", parameter = "TallyParameter")] +// // // #[cfg_attr(not(feature = "hax_compilation"), receive(contract = "OVN", name = "tally", parameter = "TallyParameter"))] +// // /** Anyone can tally the votes */ +// // pub fn tally_votes( +// // _: impl HasReceiveContext, +// // state: OvnContractState, +// // ) -> Result<(A, OvnContractState), ParseError> { +// // for i in 0..n { +// // let g_pow_yi = compute_g_pow_yi::(i as usize, state.g_pow_xis); +// // if !zkp_one_out_of_two_validate::(g_pow_yi, state.zkp_vis[i]) { +// // return Err(ParseError {}); +// // } +// // if !check_commitment::(state.g_pow_xi_yi_vis[i], state.commit_vis[i]) { +// // return Err(ParseError {}); +// // } +// // } + +// // let mut vote_result = G::identity(); +// // for g_pow_vote in state.g_pow_xi_yi_vis { +// // vote_result = vote_result + g_pow_vote; +// // } + +// // let mut tally = 0; +// // let mut curr = G::Scalar::ZERO; +// // for i in 0..n as u32 { +// // // Should be while, but is bounded by n anyways! +// // if G::g_pow(curr) == vote_result { +// // tally = i; +// // } + +// // curr = curr + G::Scalar::ONE; +// // } + +// // let mut tally_votes_state_ret = state.clone(); +// // tally_votes_state_ret.tally = tally; + +// // Ok((A::accept(), tally_votes_state_ret)) +// // } + +// // // https://github.com/stonecoldpat/anonymousvoting diff --git a/ovn/src/ovn_zkgroup_specific.rs b/ovn/src/ovn_zkgroup_specific.rs new file mode 100644 index 0000000..c9ac40e --- /dev/null +++ b/ovn/src/ovn_zkgroup_specific.rs @@ -0,0 +1,457 @@ +#[hax_lib_macros::exclude] +use hax_lib_macros::*; + +#[exclude] +use hacspec_concordium::*; +#[exclude] +use hacspec_concordium_derive::*; + +use group::{ + ff::{Field}, + Group, +}; + + +use bls12_381::Gt; +type G = Gt; +type Z = ::Scalar; + +pub fn hash(_inp: Vec) -> Z { + Z::one() +} + +//////////////////// +// Implementation // +//////////////////// + +#[derive(SchemaType, Clone, Copy)] +pub struct SchnorrZKPCommit { + pub schnorr_zkp_u: G, + pub schnorr_zkp_c: Z, + pub schnorr_zkp_z: Z, +} + +/** Non-interactive Schnorr proof using Fiat-Shamir heuristics (RFC 8235) */ +// https://www.rfc-editor.org/rfc/rfc8235 +// https://crypto.stanford.edu/cs355/19sp/lec5.pdf +pub fn schnorr_zkp( + r: Z, // random + h: G, + x: Z, +) -> SchnorrZKPCommit { + let u = ::generator() * r; // g ^ r + let c = hash(vec![::generator(), h, u]); + let z = r + (c * x); + + return SchnorrZKPCommit { + schnorr_zkp_u: u, + schnorr_zkp_c: c, + schnorr_zkp_z: z, + }; +} + +// https://crypto.stanford.edu/cs355/19sp/lec5.pdf +pub fn schnorr_zkp_validate(h: G, pi: SchnorrZKPCommit) -> bool { + pi.schnorr_zkp_c == hash(vec![::generator(), h, pi.schnorr_zkp_u]) + && (::generator() * pi.schnorr_zkp_z + == (pi.schnorr_zkp_u + (h * pi.schnorr_zkp_c))) +} + +#[derive(SchemaType, Clone, Copy)] +pub struct OrZKPCommit { + pub or_zkp_x: G, + pub or_zkp_y: G, + pub or_zkp_a1: G, + pub or_zkp_b1: G, + pub or_zkp_a2: G, + pub or_zkp_b2: G, + + pub or_zkp_c: Z, + + pub or_zkp_d1: Z, + pub or_zkp_d2: Z, + + pub or_zkp_r1: Z, + pub or_zkp_r2: Z, +} + +/** Cramer, Damgård and Schoenmakers (CDS) technique */ +pub fn zkp_one_out_of_two( + w: Z, // random + rand_r: Z, + rand_d: Z, + h: G, + xi: Z, + vi: bool, +) -> OrZKPCommit { + if vi { + let r1 = rand_r; + let d1 = rand_d; + + let x = ::generator() * (xi); + let y = (h * xi) + ::generator(); + + let a1 = ::generator() * (r1) + (x * d1); + let b1 = (h * r1) + (y * d1); + + let a2 = ::generator() * (w); + let b2 = h * w; + + let c = hash(vec![x, y, a1, b1, a2, b2]); + + let d2 = c - d1; + let r2 = w - xi * d2; + + OrZKPCommit { + or_zkp_x: x, + or_zkp_y: y, + or_zkp_a1: a1, + or_zkp_b1: b1, + or_zkp_a2: a2, + or_zkp_b2: b2, + or_zkp_c: c, + or_zkp_d1: d1, + or_zkp_d2: d2, + or_zkp_r1: r1, + or_zkp_r2: r2, + } + } else { + let r2 = rand_r; + let d2 = rand_d; + + let x = ::generator() * (xi); + let y = h * xi; + + let a1 = ::generator() * (w); + let b1 = h * w; + + let a2 = ::generator() * (r2) + (x * d2); + let b2 = (h * r2) + ((y - ::generator()) * d2); + + let c = hash(vec![x, y, a1, b1, a2, b2]); + + let d1 = c - d2; + let r1 = w - xi * d1; + + OrZKPCommit { + or_zkp_x: x, + or_zkp_y: y, + or_zkp_a1: a1, + or_zkp_b1: b1, + or_zkp_a2: a2, + or_zkp_b2: b2, + or_zkp_c: c, + or_zkp_d1: d1, + or_zkp_d2: d2, + or_zkp_r1: r1, + or_zkp_r2: r2, + } + } +} + +// Anonymous voting by two-round public discussion +pub fn zkp_one_out_of_two_validate(h: G, zkp: OrZKPCommit) -> bool { + let c = hash(vec![ + zkp.or_zkp_x, + zkp.or_zkp_y, + zkp.or_zkp_a1, + zkp.or_zkp_b1, + zkp.or_zkp_a2, + zkp.or_zkp_b2, + ]); // TODO: add i + + c == zkp.or_zkp_d1 + zkp.or_zkp_d2 + && zkp.or_zkp_a1 + == ::generator() * (zkp.or_zkp_r1) + (zkp.or_zkp_x * zkp.or_zkp_d1) + && zkp.or_zkp_b1 == (h * zkp.or_zkp_r1) + (zkp.or_zkp_y * zkp.or_zkp_d1) + && zkp.or_zkp_a2 + == ::generator() * (zkp.or_zkp_r2) + (zkp.or_zkp_x * zkp.or_zkp_d2) + && zkp.or_zkp_b2 + == (h * zkp.or_zkp_r2) + ((zkp.or_zkp_y - ::generator()) * zkp.or_zkp_d2) +} + +pub fn commit_to(g_pow_xi_yi_vi: G) -> Z { + hash(vec![g_pow_xi_yi_vi]) +} + +pub fn check_commitment(g_pow_xi_yi_vi: G, commitment: Z) -> bool { + hash(vec![g_pow_xi_yi_vi]) == commitment +} + +#[hax::contract_state(contract = "OVN")] +// #[cfg_attr(not(feature = "hax_compilation"), contract_state(contract = "OVN"))] +#[derive(SchemaType, Clone, Copy)] +pub struct OvnContractState { + pub g_pow_xis: [G; n], + pub zkp_xis: [SchnorrZKPCommit; n], + + pub commit_vis: [Z; n], + + pub g_pow_xi_yi_vis: [G; n], + pub zkp_vis: [OrZKPCommit; n], + + pub tally: u32, +} + +#[hax::init(contract = "OVN")] +// #[cfg_attr(not(feature = "hax_compilation"), init(contract = "OVN"))] +pub fn init_ovn_contract(// _: &impl HasInitContext, +) -> InitResult> { + Ok(OvnContractState:: { + g_pow_xis: [::identity(); n], + zkp_xis: [SchnorrZKPCommit { + schnorr_zkp_u: ::identity(), + schnorr_zkp_z: Z::ZERO, + schnorr_zkp_c: Z::ZERO, + }; n], + + commit_vis: [Z::ZERO; n], + + g_pow_xi_yi_vis: [::identity(); n], + zkp_vis: [OrZKPCommit { + or_zkp_x: ::identity(), + or_zkp_y: ::identity(), + or_zkp_a1: ::identity(), + or_zkp_b1: ::identity(), + or_zkp_a2: ::identity(), + or_zkp_b2: ::identity(), + + or_zkp_c: Z::ZERO, + + or_zkp_d1: Z::ZERO, + or_zkp_d2: Z::ZERO, + + or_zkp_r1: Z::ZERO, + or_zkp_r2: Z::ZERO, + }; n], + + tally: 0, + }) +} + +use core::marker::PhantomData; +#[derive(SchemaType)] +pub struct RegisterParam + Into> { + pub rp_i: u32, + pub rp_xi: Z, + pub rp_zkp_random: Z, + pub phantom: PhantomData, +} + +impl + Into> Serial for RegisterParam { + fn serial(&self, w: &mut W) -> Result<(), ::Err> { + self.rp_i.serial(w)?; + >::from(self.rp_xi).serial(w)?; + >::from(self.rp_zkp_random).serial(w)?; + Ok(()) + } +} + +impl + Into> Deserial for RegisterParam { + fn deserial(r: &mut R) -> Result { + let rp_i: u32 = r.get()?; + let rp_xi: Z = >::into(r.get()?); + let rp_zkp_random: Z = >::into(r.get()?); + Ok(RegisterParam { + rp_i, + rp_xi, + rp_zkp_random, + phantom: PhantomData, + }) + } +} + +/** Primary function in round 1 */ +#[hax::receive(contract = "OVN", name = "register", parameter = "RegisterParam")] +// #[cfg_attr(not(feature = "hax_compilation"), receive(contract = "OVN", name = "register", parameter = "RegisterParam"))] +pub fn register_vote< + S: Serialize + From + Into, + const n: usize, + A: HasActions, +>( + ctx: impl HasReceiveContext, + state: OvnContractState, +) -> Result<(A, OvnContractState), ParseError> { + let params: RegisterParam = ctx.parameter_cursor().get()?; + let g_pow_xi = ::generator() * (params.rp_xi); + + let zkp_xi = schnorr_zkp(params.rp_zkp_random, g_pow_xi, params.rp_xi); + + let mut register_vote_state_ret = state.clone(); + register_vote_state_ret.g_pow_xis[params.rp_i as usize] = g_pow_xi; + register_vote_state_ret.zkp_xis[params.rp_i as usize] = zkp_xi; + + Ok((A::accept(), register_vote_state_ret)) +} + +#[derive(SchemaType)] +pub struct CastVoteParam + Into> { + pub cvp_i: u32, + pub cvp_xi: Z, + pub cvp_zkp_random_w: Z, + pub cvp_zkp_random_r: Z, + pub cvp_zkp_random_d: Z, + pub cvp_vote: bool, + pub phantom: PhantomData, +} + +impl + Into> Serial for CastVoteParam { + fn serial(&self, w: &mut W) -> Result<(), ::Err> { + self.cvp_i.serial(w)?; + >::from(self.cvp_xi).serial(w)?; + >::from(self.cvp_zkp_random_w).serial(w)?; + >::from(self.cvp_zkp_random_r).serial(w)?; + >::from(self.cvp_zkp_random_d).serial(w)?; + self.cvp_vote.serial(w)?; + Ok(()) + } +} + +impl + Into> Deserial for CastVoteParam { + fn deserial(r: &mut R) -> Result { + let cvp_i: u32 = r.get()?; + let cvp_xi: Z = >::into(r.get()?); + let cvp_zkp_random_w: Z = >::into(r.get()?); + let cvp_zkp_random_r: Z = >::into(r.get()?); + let cvp_zkp_random_d: Z = >::into(r.get()?); + let cvp_vote: bool = r.get()?; + Ok(CastVoteParam { + cvp_i, + cvp_xi, + cvp_zkp_random_w, + cvp_zkp_random_r, + cvp_zkp_random_d, + cvp_vote, + phantom: PhantomData, + }) + } +} + +pub fn compute_g_pow_yi(i: usize, xis: [G; n]) -> G { + let mut prod1 = ::identity(); + for j in 0..i { + prod1 = prod1 + xis[j]; + } + + let mut prod2 = ::identity(); + for j in (i + 1)..n { + prod2 = prod2 + xis[j]; + } + + // implicitly: Y_i = g^y_i + let g_pow_yi = prod1 - prod2; + g_pow_yi +} + +pub fn compute_group_element_for_vote(xi: Z, vote: bool, g_pow_yi: G) -> G { + (g_pow_yi * xi) + + ::generator() + * (if vote { + Z::ONE + } else { + Z::ZERO + }) +} + +/** Commitment before round 2 */ +#[hax::receive(contract = "OVN", name = "commit_to_vote", parameter = "CastVoteParam")] +// #[cfg_attr(not(feature = "hax_compilation"), receive(contract = "OVN", name = "commit_to_vote", parameter = "CastVoteParam"))] +pub fn commit_to_vote< + S: Serialize + From + Into, + const n: usize, + A: HasActions, +>( + ctx: impl HasReceiveContext, + state: OvnContractState, +) -> Result<(A, OvnContractState), ParseError> { + let params: CastVoteParam = ctx.parameter_cursor().get()?; + + for i in 0..n { + if !schnorr_zkp_validate(state.g_pow_xis[i], state.zkp_xis[i]) { + return Err(ParseError {}); + } + } + + let g_pow_yi = compute_g_pow_yi::(params.cvp_i as usize, state.g_pow_xis); + let g_pow_xi_yi_vi = compute_group_element_for_vote(params.cvp_xi, params.cvp_vote, g_pow_yi); + let commit_vi = commit_to(g_pow_xi_yi_vi); + + let mut commit_to_vote_state_ret = state.clone(); + commit_to_vote_state_ret.commit_vis[params.cvp_i as usize] = commit_vi; + Ok((A::accept(), commit_to_vote_state_ret)) +} + +/** Primary function in round 2, also opens commitment */ +#[hax::receive(contract = "OVN", name = "cast_vote", parameter = "CastVoteParam")] +// #[cfg_attr(not(feature = "hax_compilation"), receive(contract = "OVN", name = "cast_vote", parameter = "CastVoteParam"))] +pub fn cast_vote< + S: Serialize + From + Into, + const n: usize, + A: HasActions, +>( + ctx: impl HasReceiveContext, + state: OvnContractState, +) -> Result<(A, OvnContractState), ParseError> { + let params: CastVoteParam = ctx.parameter_cursor().get()?; + + let g_pow_yi = compute_g_pow_yi::(params.cvp_i as usize, state.g_pow_xis); + let g_pow_xi_yi_vi = compute_group_element_for_vote(params.cvp_xi, params.cvp_vote, g_pow_yi); + + let zkp_vi = zkp_one_out_of_two( + params.cvp_zkp_random_w, + params.cvp_zkp_random_r, + params.cvp_zkp_random_d, + g_pow_yi, + params.cvp_xi, + params.cvp_vote, + ); + let mut cast_vote_state_ret = state.clone(); + cast_vote_state_ret.g_pow_xi_yi_vis[params.cvp_i as usize] = g_pow_xi_yi_vi; + cast_vote_state_ret.zkp_vis[params.cvp_i as usize] = zkp_vi; + + Ok((A::accept(), cast_vote_state_ret)) +} + +#[derive(Serialize, SchemaType)] +pub struct TallyParameter {} + +#[hax::receive(contract = "OVN", name = "tally", parameter = "TallyParameter")] +// #[cfg_attr(not(feature = "hax_compilation"), receive(contract = "OVN", name = "tally", parameter = "TallyParameter"))] +/** Anyone can tally the votes */ +pub fn tally_votes( + _: impl HasReceiveContext, + state: OvnContractState, +) -> Result<(A, OvnContractState), ParseError> { + for i in 0..n { + let g_pow_yi = compute_g_pow_yi::(i as usize, state.g_pow_xis); + if !zkp_one_out_of_two_validate(g_pow_yi, state.zkp_vis[i]) { + return Err(ParseError {}); + } + if !check_commitment(state.g_pow_xi_yi_vis[i], state.commit_vis[i]) { + return Err(ParseError {}); + } + } + + let mut vote_result = ::identity(); + for g_pow_vote in state.g_pow_xi_yi_vis { + vote_result = vote_result + g_pow_vote; + } + + let mut tally = 0; + let mut curr = Z::ZERO; + for i in 0..n as u32 { + // Should be while, but is bounded by n anyways! + if ::generator() * (curr) == vote_result { + tally = i; + } + + curr = curr + Z::ONE; + } + + let mut tally_votes_state_ret = state.clone(); + tally_votes_state_ret.tally = tally; + + Ok((A::accept(), tally_votes_state_ret)) +} + +// https://github.com/stonecoldpat/anonymousvoting diff --git a/ovn/tests/ovn_example.rs b/ovn/tests/ovn_example.rs new file mode 100644 index 0000000..b01362c --- /dev/null +++ b/ovn/tests/ovn_example.rs @@ -0,0 +1,294 @@ +#![no_std] +#![feature(register_tool)] +#![register_tool(hax)] + +#[hax_lib_macros::exclude] +extern crate hax_lib_macros; + +#[hax_lib_macros::exclude] +use hax_lib_macros::*; + +// #[exclude] +use hacspec_concordium::*; +// #[exclude] +use hacspec_concordium_derive::*; + +#[cfg(test)] +extern crate quickcheck; +#[cfg(test)] +#[macro_use(quickcheck)] +extern crate quickcheck_macros; + +#[cfg(test)] +use quickcheck::*; + +pub use hacspec_ovn::ovn_group::*; +pub use hacspec_ovn::ovn_secp256k1::*; +pub use hacspec_ovn::ovn_z_89::*; + +#[cfg(test)] +pub fn schnorr_zkp_correctness(random_x: u32, random_r: u32) -> bool { + let x: G::Z = G::Z::random_field_elem(random_x); + let r: G::Z = G::Z::random_field_elem(random_r); + + let pow_x = G::g_pow(x); + + let pi: SchnorrZKPCommit = schnorr_zkp(r, pow_x, x); + + let valid = schnorr_zkp_validate::(pow_x, pi); + valid +} + +#[test] +pub fn schnorr_zkp_z_89_correctness() { + QuickCheck::new() + .tests(10000) + .quickcheck(schnorr_zkp_correctness:: as fn(u32, u32) -> bool) +} + +#[test] +pub fn schorr_zkp_secp256k1_correctness() { + QuickCheck::new() + .tests(10) + .quickcheck(schnorr_zkp_correctness:: as fn(u32, u32) -> bool) +} + +#[cfg(test)] +pub fn or_zkp_correctness( + random_w: u32, + random_r: u32, + random_d: u32, + random_h: u32, + random_x: u32, + v: bool, +) -> bool { + let w = G::Z::random_field_elem(random_w); + let r = G::Z::random_field_elem(random_r); + let d = G::Z::random_field_elem(random_d); + let h = G::Z::random_field_elem(random_h); + let x = G::Z::random_field_elem(random_x); + + let mut h = G::g_pow(h); + let x = x; + let pi: OrZKPCommit = zkp_one_out_of_two(w, r, d, h, x, v); + let valid = zkp_one_out_of_two_validate::(h, pi); + valid +} + +#[test] +pub fn or_zkp_correctness_z89() { + QuickCheck::new() + .tests(10000) + .quickcheck(or_zkp_correctness:: as fn(u32, u32, u32, u32, u32, bool) -> bool) +} + +#[test] +// TODO: Fix inverse opeation, should make this test parse +pub fn or_zkp_secp256k1_correctness() { + QuickCheck::new().tests(10).quickcheck( + or_zkp_correctness:: as fn(u32, u32, u32, u32, u32, bool) -> bool, + ) +} + +#[cfg(test)] +pub fn sum_to_zero() { + let mut xis: [G::Z; n] = [G::Z::field_zero(); n]; + let mut g_pow_xis: [G; n] = [G::group_one(); n]; + use rand::random; + for i in 0..n { + xis[i] = G::Z::random_field_elem(random()); + g_pow_xis[i] = G::g_pow(xis[i]); + } + + let mut res = G::group_one(); + for i in 0..n { + let g_pow_yi = compute_g_pow_yi::(i, g_pow_xis); + res = (res * /* group product */ G::pow(g_pow_yi, xis[i])); + } + + assert!(res == G::group_one()); +} + +#[test] +pub fn sum_to_zero_z89() { + sum_to_zero::() +} + +#[test] +pub fn sum_to_zero_secp256k1() { + sum_to_zero::() +} + +use rand::random; + + +#[derive(Copy, Clone, hacspec_concordium::Serial, hacspec_concordium::Deserial)] +pub struct ElemOfEach { + i : u32, + z : G::Z, + g : G, +} + +#[cfg(test)] +pub fn test_params_of_group< + G: Group, + A: HasActions, + >() { + // Setup the context + let mut ctx = hacspec_concordium::test_infrastructure::ReceiveContextTest::empty(); + let parameter = ElemOfEach:: { + i: random(), + z: G::Z::random_field_elem(random()), + g: G::g_pow(G::Z::random_field_elem(random())), + }; + let parameter_bytes = to_bytes(¶meter); + let ctx_params = ctx.clone().set_parameter(¶meter_bytes); + let param_back: Result, ParseError> = + ctx_params.parameter_cursor().get(); + assert!(param_back.is_ok()); + + let wu_param = param_back.unwrap(); + assert!(wu_param.i == parameter.i); + assert!(wu_param.z == parameter.z); + assert!(wu_param.g == parameter.g); +} + +#[test] +pub fn test_params_of_group_z89() { + test_params_of_group::() +} + +#[test] +pub fn test_params_of_group_secp256k1() { + test_params_of_group::() +} + +#[cfg(test)] +pub fn test_correctness( + votes: [bool; n], + xis: [G::Z; n], + rp_zkp_randoms: [G::Z; n], + cvp_zkp_random_ws1: [G::Z; n], + cvp_zkp_random_rs1: [G::Z; n], + cvp_zkp_random_ds1: [G::Z; n], + cvp_zkp_random_ws2: [G::Z; n], + cvp_zkp_random_rs2: [G::Z; n], + cvp_zkp_random_ds2: [G::Z; n], +) -> bool { + // Setup the context + let mut ctx = hacspec_concordium::test_infrastructure::ReceiveContextTest::empty(); + + let mut state: OvnContractState = init_ovn_contract().unwrap(); + + for i in 0..n { + let parameter = RegisterParam:: { + rp_i: i as u32, + rp_xi: xis[i], + rp_zkp_random: rp_zkp_randoms[i], + }; + let parameter_bytes = to_bytes(¶meter); + (_, state) = + register_vote::(ctx.clone().set_parameter(¶meter_bytes), state) + .unwrap(); + } + + for i in 0..n { + let parameter = CastVoteParam:: { + cvp_i: i as u32, + cvp_xi: xis[i], + cvp_zkp_random_w: cvp_zkp_random_ws1[i], + cvp_zkp_random_r: cvp_zkp_random_rs1[i], + cvp_zkp_random_d: cvp_zkp_random_ds1[i], + cvp_vote: votes[i], + }; + let parameter_bytes = to_bytes(¶meter); + (_, state) = + commit_to_vote::(ctx.clone().set_parameter(¶meter_bytes), state) + .unwrap(); + } + + for i in 0..n { + let parameter = CastVoteParam:: { + cvp_i: i as u32, + cvp_xi: xis[i], + cvp_zkp_random_w: cvp_zkp_random_ws2[i], + cvp_zkp_random_r: cvp_zkp_random_rs2[i], + cvp_zkp_random_d: cvp_zkp_random_ds2[i], + cvp_vote: votes[i], + }; + let parameter_bytes = to_bytes(¶meter); + (_, state) = + cast_vote::(ctx.clone().set_parameter(¶meter_bytes), state).unwrap(); + } + + let parameter = TallyParameter {}; + let parameter_bytes = to_bytes(¶meter); + ctx = ctx.set_parameter(¶meter_bytes); + + (_, state) = tally_votes::(ctx.clone(), state).unwrap(); + + let mut count = 0u32; + for v in votes { + if v { + count = count + 1; + } + } + + assert_eq!(state.tally, count); + state.tally == count +} + +#[cfg(test)] +fn randomized_full_test() -> bool { + use rand::random; + let mut votes: [bool; n] = [false; n]; + let mut xis: [G::Z; n] = [G::Z::field_zero(); n]; + let mut rp_zkp_randoms: [G::Z; n] = [G::Z::field_zero(); n]; + let mut cvp_zkp_random_ws1: [G::Z; n] = [G::Z::field_zero(); n]; + let mut cvp_zkp_random_rs1: [G::Z; n] = [G::Z::field_zero(); n]; + let mut cvp_zkp_random_ds1: [G::Z; n] = [G::Z::field_zero(); n]; + + let mut cvp_zkp_random_ws2: [G::Z; n] = [G::Z::field_zero(); n]; + let mut cvp_zkp_random_rs2: [G::Z; n] = [G::Z::field_zero(); n]; + let mut cvp_zkp_random_ds2: [G::Z; n] = [G::Z::field_zero(); n]; + + for i in 0..n { + votes[i] = random(); + xis[i] = G::Z::random_field_elem(random()); + rp_zkp_randoms[i] = G::Z::random_field_elem(random()); + cvp_zkp_random_ws1[i] = G::Z::random_field_elem(random()); + cvp_zkp_random_rs1[i] = G::Z::random_field_elem(random()); + cvp_zkp_random_ds1[i] = G::Z::random_field_elem(random()); + cvp_zkp_random_ws2[i] = G::Z::random_field_elem(random()); + cvp_zkp_random_rs2[i] = G::Z::random_field_elem(random()); + cvp_zkp_random_ds2[i] = G::Z::random_field_elem(random()); + } + + test_correctness::( + votes, + xis, + rp_zkp_randoms, + cvp_zkp_random_ws1, + cvp_zkp_random_rs1, + cvp_zkp_random_ds1, + cvp_zkp_random_ws2, + cvp_zkp_random_rs2, + cvp_zkp_random_ds2, + ) +} + +// #[concordium_test] +#[test] +fn test_full_z89() { + QuickCheck::new() + .tests(100) + .quickcheck(randomized_full_test:: as fn() -> bool) +} + +// #[concordium_test] +#[test] +fn test_full_secp256k1() { + QuickCheck::new() + .tests(1) + .quickcheck(randomized_full_test:: as fn() -> bool) +} diff --git a/ovn/tests/ovn_zk_example.rs b/ovn/tests/ovn_zk_example.rs new file mode 100644 index 0000000..b9b5664 --- /dev/null +++ b/ovn/tests/ovn_zk_example.rs @@ -0,0 +1,353 @@ +#[hax_lib_macros::exclude] +use hax_lib_macros::*; + +#[exclude] +use hacspec_concordium::*; +#[exclude] +use hacspec_concordium_derive::*; + +#[cfg(test)] +extern crate quickcheck; +#[cfg(test)] +#[macro_use(quickcheck)] +extern crate quickcheck_macros; + +#[cfg(test)] +use quickcheck::*; + +pub use bls12_381::{Scalar as BlsScalar, *}; +use core::marker::PhantomData; +pub use group::{ff::Field, Group}; +pub use hacspec_ovn::{ovn_zk_secp256k1::*, ovn_zkgroup::*}; + +use rand_core::{RngCore, *}; +// use quickcheck::RngCore; +use hacspec_bip_340::{GroupTrait::*, Point, Scalar as BipScalar, *}; + +use rand::random; +use rand::rngs::StdRng; + +#[derive(Serialize)] +struct GroupBits { + val: [u8; n], +} + +impl From for GroupBits<32> { + fn from(value: BlsScalar) -> Self { + Self { + val: value.to_bytes(), + } + } +} + +impl Into for GroupBits<32> { + fn into(self) -> BlsScalar { + BlsScalar::from_bytes(&self.val).unwrap() + } +} + +impl From for GroupBits<32> { + fn from(value: BipScalar) -> Self { + let mut val: [u8; 32] = [0u8; 32]; + let temp = value.to_be_bytes(); + for i in 0..32 { + val[i] = temp[i]; + } + Self { val } + } +} + +impl Into for GroupBits<32> { + fn into(self) -> BipScalar { + BipScalar::from_be_bytes(&self.val) + } +} + +//////////////////////////// +// Group operations tests // +//////////////////////////// + +#[cfg(test)] +pub fn group_test() { + let r: ::Scalar = ::Scalar::random(rand::thread_rng()); + let x: ::Scalar = ::Scalar::random(rand::thread_rng()); + assert_eq!( + G::generator() * (r + x), + (G::generator() * r + G::generator() * (x)), + "!!temp aa!!" + ); +} + +#[test] +pub fn secp256k1_group_correctness() { + group_test::() +} + +#[test] +pub fn bls12_381_real_group_correctness() { + group_test::() +} + +#[cfg(test)] +pub fn schnorr_zkp_correctness() -> bool { + let random_r: ::Scalar = ::Scalar::random(rand::thread_rng()); + let x: ::Scalar = ::Scalar::random(rand::thread_rng()); + let pow_x = G::generator() * x; // G::g_pow(x); + + let pi: SchnorrZKPCommit = schnorr_zkp(random_r, pow_x, x); + + let valid = schnorr_zkp_validate::(pow_x, pi); + valid +} + +#[test] +pub fn schnorr_zkp_secp256k1_correctness() { + assert!(schnorr_zkp_correctness::()) + // QuickCheck::new() + // .tests(1000) + // .quickcheck(schnorr_zkp_correctness:: as fn() -> bool) +} + +#[test] +pub fn schnorr_correctness_bls12_381_real() { + assert!(schnorr_zkp_correctness::()) +} + +#[cfg(test)] +pub fn or_zkp_correctness(v: bool) -> bool { + let random_w: ::Scalar = ::Scalar::random(rand::thread_rng()); + let random_r: ::Scalar = ::Scalar::random(rand::thread_rng()); + let random_d: ::Scalar = ::Scalar::random(rand::thread_rng()); + let random_h: ::Scalar = ::Scalar::random(rand::thread_rng()); + let random_x: ::Scalar = ::Scalar::random(rand::thread_rng()); + let mut h = G::g_pow(random_h); + let x = random_x; + let pi: OrZKPCommit = zkp_one_out_of_two(random_w, random_r, random_d, h, x, v); + let valid = zkp_one_out_of_two_validate::(h, pi); + valid +} + +#[test] +// TODO: Fix inverse opeation, should make this test parse +pub fn or_zkp_secp256k1() { + QuickCheck::new() + .tests(10) + .quickcheck(or_zkp_correctness:: as fn(bool) -> bool) +} + +#[test] +pub fn or_zkp_bls12_381_real() { + QuickCheck::new() + .tests(10) + .quickcheck(or_zkp_correctness:: as fn(bool) -> bool) +} + +#[cfg(test)] +pub fn sum_to_zero() { + let mut xis: [G::Scalar; n] = [G::Scalar::ZERO; n]; + let mut g_pow_xis: [G; n] = [G::identity(); n]; + use rand::random; + for i in 0..n { + xis[i] = G::Scalar::random(rand::thread_rng()); + g_pow_xis[i] = G::g_pow(xis[i]); + } + + let mut res = G::identity(); + for i in 0..n { + let g_pow_yi = compute_g_pow_yi::(i, g_pow_xis); + res = res + G::pow(g_pow_yi, xis[i]); + } + + assert!(res == G::identity()); +} + +#[test] +pub fn sum_to_zero_secp256k1() { + sum_to_zero::() +} + +#[test] +pub fn sum_to_zero_bls12_381_real() { + sum_to_zero::() +} + +#[cfg(test)] +pub fn test_params_of_group< + G: MGroup, + S: Serialize + From + Into, + A: HasActions, +>() { + // Setup the context + let mut ctx = hacspec_concordium::test_infrastructure::ReceiveContextTest::empty(); + let parameter = RegisterParam:: { + rp_i: random(), + rp_xi: G::Scalar::random(rand::thread_rng()), + rp_zkp_random: G::Scalar::random(rand::thread_rng()), + phantom: PhantomData, + }; + let parameter_bytes = to_bytes(¶meter); + let ctx_params = ctx.clone().set_parameter(¶meter_bytes); + let param_back: Result, ParseError> = + ctx_params.parameter_cursor().get(); + assert!(param_back.is_ok()); + + let wu_param = param_back.unwrap(); + assert_eq!(wu_param.rp_i, parameter.rp_i); + assert_eq!(wu_param.rp_xi, parameter.rp_xi); + assert_eq!(wu_param.rp_zkp_random, parameter.rp_zkp_random); +} + +#[test] +pub fn test_params_of_group_zk259() { + test_params_of_group::, hacspec_concordium::test_infrastructure::ActionsTree>( + ) +} + +#[test] +pub fn test_params_of_group_bls12_381_real() { + test_params_of_group::, hacspec_concordium::test_infrastructure::ActionsTree>( + ) +} + +#[cfg(test)] +pub fn test_correctness< + G: MGroup, + S: Serialize + From + Into, + const n: usize, + A: HasActions, +>( + votes: [bool; n], + xis: [G::Scalar; n], + rp_zkp_randoms: [G::Scalar; n], + cvp_zkp_random_ws1: [G::Scalar; n], + cvp_zkp_random_rs1: [G::Scalar; n], + cvp_zkp_random_ds1: [G::Scalar; n], + cvp_zkp_random_ws2: [G::Scalar; n], + cvp_zkp_random_rs2: [G::Scalar; n], + cvp_zkp_random_ds2: [G::Scalar; n], +) -> bool { + // Setup the context + let ctx = hacspec_concordium::test_infrastructure::ReceiveContextTest::empty(); + + let mut state: OvnContractState = init_ovn_contract().unwrap(); + + for i in 0..n { + let parameter = RegisterParam:: { + rp_i: i as u32, + rp_xi: xis[i], + rp_zkp_random: rp_zkp_randoms[i], + phantom: PhantomData, + }; + let parameter_bytes = to_bytes(¶meter); + (_, state) = + register_vote::(ctx.clone().set_parameter(¶meter_bytes), state) + .unwrap(); + } + + assert!(false, "Got here 2"); + + for i in 0..n { + let parameter = CastVoteParam:: { + cvp_i: i as u32, + cvp_xi: xis[i], + cvp_zkp_random_w: cvp_zkp_random_ws1[i], + cvp_zkp_random_r: cvp_zkp_random_rs1[i], + cvp_zkp_random_d: cvp_zkp_random_ds1[i], + cvp_vote: votes[i], + phantom: PhantomData, + }; + let parameter_bytes = to_bytes(¶meter); + (_, state) = + commit_to_vote::(ctx.clone().set_parameter(¶meter_bytes), state) + .unwrap(); + } + + for i in 0..n { + let parameter = CastVoteParam:: { + cvp_i: i as u32, + cvp_xi: xis[i], + cvp_zkp_random_w: cvp_zkp_random_ws2[i], + cvp_zkp_random_r: cvp_zkp_random_rs2[i], + cvp_zkp_random_d: cvp_zkp_random_ds2[i], + cvp_vote: votes[i], + phantom: PhantomData, + }; + let parameter_bytes = to_bytes(¶meter); + (_, state) = + cast_vote::(ctx.clone().set_parameter(¶meter_bytes), state).unwrap(); + } + + assert!(false, "Got here 3"); + + let parameter = TallyParameter {}; + let parameter_bytes = to_bytes(¶meter); + + (_, state) = + tally_votes::(ctx.clone().set_parameter(¶meter_bytes), state).unwrap(); + + let mut count = 0u32; + for v in votes { + if v { + count = count + 1; // += 1 does not work correctly + } + } + + assert_eq!(state.tally, count); + state.tally == count +} + +#[cfg(test)] +fn randomized_full_test< + G: MGroup, + S: Serialize + From + Into, + const n: usize, +>() -> bool { + let mut votes: [bool; n] = [false; n]; + let mut xis: [G::Scalar; n] = [G::Scalar::ONE; n]; + let mut rp_zkp_randoms: [G::Scalar; n] = [G::Scalar::ONE; n]; + let mut cvp_zkp_random_ws1: [G::Scalar; n] = [G::Scalar::ONE; n]; + let mut cvp_zkp_random_rs1: [G::Scalar; n] = [G::Scalar::ONE; n]; + let mut cvp_zkp_random_ds1: [G::Scalar; n] = [G::Scalar::ONE; n]; + + let mut cvp_zkp_random_ws2: [G::Scalar; n] = [G::Scalar::ONE; n]; + let mut cvp_zkp_random_rs2: [G::Scalar; n] = [G::Scalar::ONE; n]; + let mut cvp_zkp_random_ds2: [G::Scalar; n] = [G::Scalar::ONE; n]; + + for i in 0..n { + votes[i] = random(); + xis[i] = G::Scalar::random(rand::thread_rng()); + rp_zkp_randoms[i] = G::Scalar::random(rand::thread_rng()); + cvp_zkp_random_ws1[i] = G::Scalar::random(rand::thread_rng()); + cvp_zkp_random_rs1[i] = G::Scalar::random(rand::thread_rng()); + cvp_zkp_random_ds1[i] = G::Scalar::random(rand::thread_rng()); + cvp_zkp_random_ws2[i] = G::Scalar::random(rand::thread_rng()); + cvp_zkp_random_rs2[i] = G::Scalar::random(rand::thread_rng()); + cvp_zkp_random_ds2[i] = G::Scalar::random(rand::thread_rng()); + } + + test_correctness::( + votes, + xis, + rp_zkp_randoms, + cvp_zkp_random_ws1, + cvp_zkp_random_rs1, + cvp_zkp_random_ds1, + cvp_zkp_random_ws2, + cvp_zkp_random_rs2, + cvp_zkp_random_ds2, + ) +} + +#[test] +fn test_full_secp256k1() { + QuickCheck::new() + .tests(1) + .quickcheck(randomized_full_test::, 15> as fn() -> bool) +} + +#[test] +fn test_full_bls12_381_real() { + QuickCheck::new() + .tests(1) + .quickcheck(randomized_full_test::, 15> as fn() -> bool) +} diff --git a/p256/proofs/ssprove/extraction/Hacspec_p256.v b/p256/proofs/ssprove/extraction/Hacspec_p256.v new file mode 100644 index 0000000..b950f50 --- /dev/null +++ b/p256/proofs/ssprove/extraction/Hacspec_p256.v @@ -0,0 +1,377 @@ +(* File automatically generated by Hacspec *) +Set Warnings "-notation-overridden,-ambiguous-paths". +From Crypt Require Import choice_type Package Prelude. +Import PackageNotation. +From extructures Require Import ord fset. +From mathcomp Require Import word_ssrZ word. +(* From Jasmin Require Import word. *) + +From Coq Require Import ZArith. +From Coq Require Import Strings.String. +Import List.ListNotations. +Open Scope list_scope. +Open Scope Z_scope. +Open Scope bool_scope. + +From Hacspec Require Import ChoiceEquality. +From Hacspec Require Import LocationUtility. +From Hacspec Require Import Hacspec_Lib_Comparable. +From Hacspec Require Import Hacspec_Lib_Pre. +From Hacspec Require Import Hacspec_Lib. + +Open Scope hacspec_scope. +Import choice.Choice.Exports. + +Obligation Tactic := (* try timeout 8 *) solve_ssprove_obligations. + +Require Import Hacspec_lib. +Export Hacspec_lib. + +Notation "'t_Element'" := (nseq int8 32). +Definition Element : both t_Element -> both t_Element := + id. + +Definition t_Error : choice_type := + ('unit). +Notation "'Error_InvalidAddition_case'" := tt (at level 100). +Equations Error_InvalidAddition : both t_Error := + Error_InvalidAddition := + solve_lift (ret_both (tt : 'unit : t_Error)) : both t_Error. +Fail Next Obligation. + +Notation "'t_P256FieldElement'" := (nat_mod 0xffffffff00000001000000000000000000000000ffffffffffffffffffffffff). +Definition P256FieldElement : both t_P256FieldElement -> both t_P256FieldElement := + id. + +Notation "'t_Affine'" := (t_P256FieldElement × t_P256FieldElement). + +Notation "'t_AffineResult'" := (t_Result (t_P256FieldElement × t_P256FieldElement) t_Error). + +Notation "'t_JacobianResult'" := (t_Result (t_P256FieldElement × t_P256FieldElement × t_P256FieldElement) t_Error). + +Notation "'t_P256Jacobian'" := (t_P256FieldElement × t_P256FieldElement × t_P256FieldElement). + +Notation "'t_P256Scalar'" := (nat_mod 0xffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551). +Definition P256Scalar : both t_P256Scalar -> both t_P256Scalar := + id. + +(*Not implemented yet? todo(item)*) + +Equations v_BITS : both uint_size := + v_BITS := + solve_lift (ret_both (256 : uint_size)) : both uint_size. +Fail Next Obligation. + +Equations affine_to_jacobian (p : both (t_P256FieldElement × t_P256FieldElement)) : both (t_P256FieldElement × t_P256FieldElement × t_P256FieldElement) := + affine_to_jacobian p := + letb '(x,y) := p in + solve_lift (prod_b (x,y,impl__P256FieldElement__from_literal (ret_both (1 : int128)))) : both (t_P256FieldElement × t_P256FieldElement × t_P256FieldElement). +Fail Next Obligation. + +Equations is_point_at_infinity (p : both (t_P256FieldElement × t_P256FieldElement × t_P256FieldElement)) : both 'bool := + is_point_at_infinity p := + letb '(v__x,v__y,z) := p in + solve_lift (f_equal z (impl__P256FieldElement__from_literal (ret_both (0 : int128)))) : both 'bool. +Fail Next Obligation. + +Equations jacobian_to_affine (p : both (t_P256FieldElement × t_P256FieldElement × t_P256FieldElement)) : both (t_P256FieldElement × t_P256FieldElement) := + jacobian_to_affine p := + letb '(x,y,z) := p in + letb z2 := f_exp z (ret_both (2 : int32)) in + letb z2i := impl__P256FieldElement__inv z2 in + letb z3 := z .* z2 in + letb z3i := impl__P256FieldElement__inv z3 in + letb x := x .* z2i in + letb y := y .* z3i in + solve_lift (prod_b (x,y)) : both (t_P256FieldElement × t_P256FieldElement). +Fail Next Obligation. + +Equations point_double (p : both (t_P256FieldElement × t_P256FieldElement × t_P256FieldElement)) : both (t_P256FieldElement × t_P256FieldElement × t_P256FieldElement) := + point_double p := + letb '(x1,y1,z1) := p in + letb delta := f_exp z1 (ret_both (2 : int32)) in + letb gamma := f_exp y1 (ret_both (2 : int32)) in + letb beta := x1 .* gamma in + letb alpha_1_ := x1 .- delta in + letb alpha_2_ := x1 .+ delta in + letb alpha := (impl__P256FieldElement__from_literal (ret_both (3 : int128))) .* (alpha_1_ .* alpha_2_) in + letb x3 := (f_exp alpha (ret_both (2 : int32))) .- ((impl__P256FieldElement__from_literal (ret_both (8 : int128))) .* beta) in + letb z3___ := f_exp (y1 .+ z1) (ret_both (2 : int32)) in + letb z3 := z3___ .- (gamma .+ delta) in + letb y3_1_ := ((impl__P256FieldElement__from_literal (ret_both (4 : int128))) .* beta) .- x3 in + letb y3_2_ := (impl__P256FieldElement__from_literal (ret_both (8 : int128))) .* (gamma .* gamma) in + letb y3 := (alpha .* y3_1_) .- y3_2_ in + solve_lift (prod_b (x3,y3,z3)) : both (t_P256FieldElement × t_P256FieldElement × t_P256FieldElement). +Fail Next Obligation. + +Equations s1_equal_s2 (s1 : both t_P256FieldElement) (s2 : both t_P256FieldElement) : both (t_Result (t_P256FieldElement × t_P256FieldElement × t_P256FieldElement) t_Error) := + s1_equal_s2 s1 s2 := + solve_lift (ifb f_equal s1 s2 + then v_Err Error_InvalidAddition + else v_Ok (prod_b (impl__P256FieldElement__from_literal (ret_both (0 : int128)),impl__P256FieldElement__from_literal (ret_both (1 : int128)),impl__P256FieldElement__from_literal (ret_both (0 : int128))))) : both (t_Result (t_P256FieldElement × t_P256FieldElement × t_P256FieldElement) t_Error). +Fail Next Obligation. + +Equations point_add_jacob (p : both (t_P256FieldElement × t_P256FieldElement × t_P256FieldElement)) (q : both (t_P256FieldElement × t_P256FieldElement × t_P256FieldElement)) : both (t_Result (t_P256FieldElement × t_P256FieldElement × t_P256FieldElement) t_Error) := + point_add_jacob p q := + letb result := v_Ok q in + letb result := ifb not (is_point_at_infinity p) + then ifb is_point_at_infinity q + then letb result := v_Ok p in + result + else letb '(x1,y1,z1) := p in + letb '(x2,y2,z2) := q in + letb z1z1 := f_exp z1 (ret_both (2 : int32)) in + letb z2z2 := f_exp z2 (ret_both (2 : int32)) in + letb u1 := x1 .* z2z2 in + letb u2 := x2 .* z1z1 in + letb s1 := (y1 .* z2) .* z2z2 in + letb s2 := (y2 .* z1) .* z1z1 in + ifb f_equal u1 u2 + then letb result := s1_equal_s2 s1 s2 in + result + else letb h := u2 .- u1 in + letb i := f_exp ((impl__P256FieldElement__from_literal (ret_both (2 : int128))) .* h) (ret_both (2 : int32)) in + letb j := h .* i in + letb r := (impl__P256FieldElement__from_literal (ret_both (2 : int128))) .* (s2 .- s1) in + letb v := u1 .* i in + letb x3_1_ := (impl__P256FieldElement__from_literal (ret_both (2 : int128))) .* v in + letb x3_2_ := (f_exp r (ret_both (2 : int32))) .- j in + letb x3 := x3_2_ .- x3_1_ in + letb y3_1_ := ((impl__P256FieldElement__from_literal (ret_both (2 : int128))) .* s1) .* j in + letb y3_2_ := r .* (v .- x3) in + letb y3 := y3_2_ .- y3_1_ in + letb z3___ := f_exp (z1 .+ z2) (ret_both (2 : int32)) in + letb z3 := (z3___ .- (z1z1 .+ z2z2)) .* h in + letb result := v_Ok (prod_b (x3,y3,z3)) in + result + else result in + solve_lift result : both (t_Result (t_P256FieldElement × t_P256FieldElement × t_P256FieldElement) t_Error). +Fail Next Obligation. + +Equations ltr_mul (k : both t_P256Scalar) (p : both (t_P256FieldElement × t_P256FieldElement × t_P256FieldElement)) : both (t_Result (t_P256FieldElement × t_P256FieldElement × t_P256FieldElement) t_Error) := + ltr_mul k p := + letb q := prod_b (impl__P256FieldElement__from_literal (ret_both (0 : int128)),impl__P256FieldElement__from_literal (ret_both (1 : int128)),impl__P256FieldElement__from_literal (ret_both (0 : int128))) in + letb q := f_fold (f_into_iter (Build_t_Range (f_start := ret_both (0 : uint_size)) (f_end := v_BITS))) q (fun q => fun i => + letb q := point_double q in + ifb f_equal (f_get_bit k ((v_BITS .- (ret_both (1 : uint_size))) .- i)) (f_ONE (ret_both (tt : 'unit))) + then letm[choice_typeMonad.result_bind_code t_Error] hoist1 := impl__map_err (point_add_jacob q p) f_from in + Result_Ok (letb q := hoist1 in + q) + else Result_Ok q) in + solve_lift (v_Ok q) : both (t_Result (t_P256FieldElement × t_P256FieldElement × t_P256FieldElement) t_Error). +Fail Next Obligation. + +Equations p256_point_mul (k : both t_P256Scalar) (p : both (t_P256FieldElement × t_P256FieldElement)) : both (t_Result (t_P256FieldElement × t_P256FieldElement) t_Error) := + p256_point_mul k p := + solve_lift (run (letm[choice_typeMonad.result_bind_code t_Error] jac := impl__map_err (ltr_mul k (affine_to_jacobian p)) f_from in + Result_Ok (v_Ok (jacobian_to_affine jac)))) : both (t_Result (t_P256FieldElement × t_P256FieldElement) t_Error). +Fail Next Obligation. + +Equations point_add_distinct (p : both (t_P256FieldElement × t_P256FieldElement)) (q : both (t_P256FieldElement × t_P256FieldElement)) : both (t_Result (t_P256FieldElement × t_P256FieldElement) t_Error) := + point_add_distinct p q := + solve_lift (run (letm[choice_typeMonad.result_bind_code t_Error] r := impl__map_err (point_add_jacob (affine_to_jacobian p) (affine_to_jacobian q)) f_from in + Result_Ok (v_Ok (jacobian_to_affine r)))) : both (t_Result (t_P256FieldElement × t_P256FieldElement) t_Error). +Fail Next Obligation. + +Equations point_add (p : both (t_P256FieldElement × t_P256FieldElement)) (q : both (t_P256FieldElement × t_P256FieldElement)) : both (t_Result (t_P256FieldElement × t_P256FieldElement) t_Error) := + point_add p q := + solve_lift (ifb p <> q + then point_add_distinct p q + else v_Ok (jacobian_to_affine (point_double (affine_to_jacobian p)))) : both (t_Result (t_P256FieldElement × t_P256FieldElement) t_Error). +Fail Next Obligation. + +Equations p256_calculate_w (x : both t_P256FieldElement) : both t_P256FieldElement := + p256_calculate_w x := + letb b := impl__P256FieldElement__from_byte_seq_be (impl_52__from_vec (impl__into_vec (unsize (box_new (array_from_list [U8 (ret_both (90 : int8)); + U8 (ret_both (198 : int8)); + U8 (ret_both (53 : int8)); + U8 (ret_both (216 : int8)); + U8 (ret_both (170 : int8)); + U8 (ret_both (58 : int8)); + U8 (ret_both (147 : int8)); + U8 (ret_both (231 : int8)); + U8 (ret_both (179 : int8)); + U8 (ret_both (235 : int8)); + U8 (ret_both (189 : int8)); + U8 (ret_both (85 : int8)); + U8 (ret_both (118 : int8)); + U8 (ret_both (152 : int8)); + U8 (ret_both (134 : int8)); + U8 (ret_both (188 : int8)); + U8 (ret_both (101 : int8)); + U8 (ret_both (29 : int8)); + U8 (ret_both (6 : int8)); + U8 (ret_both (176 : int8)); + U8 (ret_both (204 : int8)); + U8 (ret_both (83 : int8)); + U8 (ret_both (176 : int8)); + U8 (ret_both (246 : int8)); + U8 (ret_both (59 : int8)); + U8 (ret_both (206 : int8)); + U8 (ret_both (60 : int8)); + U8 (ret_both (62 : int8)); + U8 (ret_both (39 : int8)); + U8 (ret_both (210 : int8)); + U8 (ret_both (96 : int8)); + U8 (ret_both (75 : int8))]))))) in + letb exp := impl__P256FieldElement__from_byte_seq_be (impl_52__from_vec (impl__into_vec (unsize (box_new (array_from_list [U8 (ret_both (63 : int8)); + U8 (ret_both (255 : int8)); + U8 (ret_both (255 : int8)); + U8 (ret_both (255 : int8)); + U8 (ret_both (192 : int8)); + U8 (ret_both (0 : int8)); + U8 (ret_both (0 : int8)); + U8 (ret_both (0 : int8)); + U8 (ret_both (64 : int8)); + U8 (ret_both (0 : int8)); + U8 (ret_both (0 : int8)); + U8 (ret_both (0 : int8)); + U8 (ret_both (0 : int8)); + U8 (ret_both (0 : int8)); + U8 (ret_both (0 : int8)); + U8 (ret_both (0 : int8)); + U8 (ret_both (0 : int8)); + U8 (ret_both (0 : int8)); + U8 (ret_both (0 : int8)); + U8 (ret_both (0 : int8)); + U8 (ret_both (64 : int8)); + U8 (ret_both (0 : int8)); + U8 (ret_both (0 : int8)); + U8 (ret_both (0 : int8)); + U8 (ret_both (0 : int8)); + U8 (ret_both (0 : int8)); + U8 (ret_both (0 : int8)); + U8 (ret_both (0 : int8)); + U8 (ret_both (0 : int8)); + U8 (ret_both (0 : int8)); + U8 (ret_both (0 : int8)); + U8 (ret_both (0 : int8))]))))) in + letb z := (((x .* x) .* x) .- ((impl__P256FieldElement__from_literal (ret_both (3 : int128))) .* x)) .+ b in + solve_lift (impl__P256FieldElement__pow_felem z exp) : both t_P256FieldElement. +Fail Next Obligation. + +Equations p256_point_mul_base (k : both t_P256Scalar) : both (t_Result (t_P256FieldElement × t_P256FieldElement) t_Error) := + p256_point_mul_base k := + letb base_point := prod_b (impl__P256FieldElement__from_byte_seq_be (Element (array_from_list [U8 (ret_both (107 : int8)); + U8 (ret_both (23 : int8)); + U8 (ret_both (209 : int8)); + U8 (ret_both (242 : int8)); + U8 (ret_both (225 : int8)); + U8 (ret_both (44 : int8)); + U8 (ret_both (66 : int8)); + U8 (ret_both (71 : int8)); + U8 (ret_both (248 : int8)); + U8 (ret_both (188 : int8)); + U8 (ret_both (230 : int8)); + U8 (ret_both (229 : int8)); + U8 (ret_both (99 : int8)); + U8 (ret_both (164 : int8)); + U8 (ret_both (64 : int8)); + U8 (ret_both (242 : int8)); + U8 (ret_both (119 : int8)); + U8 (ret_both (3 : int8)); + U8 (ret_both (125 : int8)); + U8 (ret_both (129 : int8)); + U8 (ret_both (45 : int8)); + U8 (ret_both (235 : int8)); + U8 (ret_both (51 : int8)); + U8 (ret_both (160 : int8)); + U8 (ret_both (244 : int8)); + U8 (ret_both (161 : int8)); + U8 (ret_both (57 : int8)); + U8 (ret_both (69 : int8)); + U8 (ret_both (216 : int8)); + U8 (ret_both (152 : int8)); + U8 (ret_both (194 : int8)); + U8 (ret_both (150 : int8))])),impl__P256FieldElement__from_byte_seq_be (Element (array_from_list [U8 (ret_both (79 : int8)); + U8 (ret_both (227 : int8)); + U8 (ret_both (66 : int8)); + U8 (ret_both (226 : int8)); + U8 (ret_both (254 : int8)); + U8 (ret_both (26 : int8)); + U8 (ret_both (127 : int8)); + U8 (ret_both (155 : int8)); + U8 (ret_both (142 : int8)); + U8 (ret_both (231 : int8)); + U8 (ret_both (235 : int8)); + U8 (ret_both (74 : int8)); + U8 (ret_both (124 : int8)); + U8 (ret_both (15 : int8)); + U8 (ret_both (158 : int8)); + U8 (ret_both (22 : int8)); + U8 (ret_both (43 : int8)); + U8 (ret_both (206 : int8)); + U8 (ret_both (51 : int8)); + U8 (ret_both (87 : int8)); + U8 (ret_both (107 : int8)); + U8 (ret_both (49 : int8)); + U8 (ret_both (94 : int8)); + U8 (ret_both (206 : int8)); + U8 (ret_both (203 : int8)); + U8 (ret_both (182 : int8)); + U8 (ret_both (64 : int8)); + U8 (ret_both (104 : int8)); + U8 (ret_both (55 : int8)); + U8 (ret_both (191 : int8)); + U8 (ret_both (81 : int8)); + U8 (ret_both (245 : int8))]))) in + solve_lift (p256_point_mul k base_point) : both (t_Result (t_P256FieldElement × t_P256FieldElement) t_Error). +Fail Next Obligation. + +Equations p256_validate_private_key (k : both (t_Seq t_U8)) : both 'bool := + p256_validate_private_key k := + letb valid := ret_both (true : 'bool) in + letb k_element := impl__P256Scalar__from_byte_seq_be k in + letb k_element_bytes := impl__P256Scalar__to_byte_seq_be k_element in + letb all_zero := ret_both (true : 'bool) in + letb '(all_zero,valid) := f_fold (f_into_iter (Build_t_Range (f_start := ret_both (0 : uint_size)) (f_end := impl_41__len k))) (prod_b (all_zero,valid)) (fun '(all_zero,valid) => fun i => + letb all_zero := ifb not (f_equal (k.a[i]) (U8 (ret_both (0 : int8)))) + then letb all_zero := ret_both (false : 'bool) in + all_zero + else all_zero in + ifb not (f_equal (k_element_bytes.a[i]) (k.a[i])) + then letb valid := ret_both (false : 'bool) in + prod_b (all_zero,valid) + else prod_b (all_zero,valid)) in + solve_lift (andb valid (not all_zero)) : both 'bool. +Fail Next Obligation. + +Equations p256_validate_public_key (p : both (t_P256FieldElement × t_P256FieldElement)) : both 'bool := + p256_validate_public_key p := + letb b := impl__P256FieldElement__from_byte_seq_be (impl_52__from_vec (impl__into_vec (unsize (box_new (array_from_list [U8 (ret_both (90 : int8)); + U8 (ret_both (198 : int8)); + U8 (ret_both (53 : int8)); + U8 (ret_both (216 : int8)); + U8 (ret_both (170 : int8)); + U8 (ret_both (58 : int8)); + U8 (ret_both (147 : int8)); + U8 (ret_both (231 : int8)); + U8 (ret_both (179 : int8)); + U8 (ret_both (235 : int8)); + U8 (ret_both (189 : int8)); + U8 (ret_both (85 : int8)); + U8 (ret_both (118 : int8)); + U8 (ret_both (152 : int8)); + U8 (ret_both (134 : int8)); + U8 (ret_both (188 : int8)); + U8 (ret_both (101 : int8)); + U8 (ret_both (29 : int8)); + U8 (ret_both (6 : int8)); + U8 (ret_both (176 : int8)); + U8 (ret_both (204 : int8)); + U8 (ret_both (83 : int8)); + U8 (ret_both (176 : int8)); + U8 (ret_both (246 : int8)); + U8 (ret_both (59 : int8)); + U8 (ret_both (206 : int8)); + U8 (ret_both (60 : int8)); + U8 (ret_both (62 : int8)); + U8 (ret_both (39 : int8)); + U8 (ret_both (210 : int8)); + U8 (ret_both (96 : int8)); + U8 (ret_both (75 : int8))]))))) in + letb point_at_infinity := is_point_at_infinity (affine_to_jacobian p) in + letb '(x,y) := p in + letb on_curve := (y .* y) =.? ((((x .* x) .* x) .- ((impl__P256FieldElement__from_literal (ret_both (3 : int128))) .* x)) .+ b) in + solve_lift (andb (not point_at_infinity) on_curve) : both 'bool. +Fail Next Obligation. diff --git a/pasta/proofs/coq/extraction/Hacspec_pasta.v b/pasta/proofs/coq/extraction/Hacspec_pasta.v new file mode 100644 index 0000000..a7e08e2 --- /dev/null +++ b/pasta/proofs/coq/extraction/Hacspec_pasta.v @@ -0,0 +1,190 @@ +(* File automatically generated by Hacspec *) +From Hacspec Require Import Hacspec_Lib MachineIntegers. +From Coq Require Import ZArith. +Import List.ListNotations. +Open Scope Z_scope. +Open Scope bool_scope. + +Require Import Hacspec_lib. + +Notation t_G1_pallas_t := ((t_FpPallas_t × t_FpPallas_t × bool)). + +Notation t_G1_vesta_t := ((t_FpVesta_t × t_FpVesta_t × bool)). + +Notation PallasCanvas := (nseq int8 255). +Notation FpPallas_t := (nat_mod 0x40000000000000000000000000000000224698FC094CF91B992D30ED00000001). +Definition FpPallas : FpPallas_t -> FpPallas_t := + id. + +Notation VestaCanvas := (nseq int8 255). +Notation FpVesta_t := (nat_mod 0x40000000000000000000000000000000224698FC0994A8DD8C46EB2100000001). +Definition FpVesta : FpVesta_t -> FpVesta_t := + id. + +(*Not implemented yet? todo(item)*) + +Definition g1_default_pallas : (t_FpPallas_t × t_FpPallas_t × bool) := + (f_ZERO,f_ZERO,true). + +Definition g1_default_vesta : (t_FpVesta_t × t_FpVesta_t × bool) := + (f_ZERO,f_ZERO,true). + +Definition g1_is_identity_pallas (p : (t_FpPallas_t × t_FpPallas_t × bool)) : bool := + let '(_,_,inf) := (p) : (t_FpPallas_t × t_FpPallas_t × bool) in + inf. + +Definition g1_is_identity_vesta (p : (t_FpVesta_t × t_FpVesta_t × bool)) : bool := + let '(_,_,inf) := (p) : (t_FpVesta_t × t_FpVesta_t × bool) in + inf. + +Definition g1_on_curve_pallas (p : (t_FpPallas_t × t_FpPallas_t × bool)) : bool := + let '(x,y,inf) := (p) : (t_FpPallas_t × t_FpPallas_t × bool) in + let y_squared := (y.*y) : t_FpPallas_t in + let x_cubed := ((x.*x).*x) : t_FpPallas_t in + let fp5 := ((f_TWO.+f_TWO).+f_ONE) : t_FpPallas_t in + orb (y_squared=.?(x_cubed.+fp5)) inf. + +Definition g1_on_curve_vesta (p : (t_FpVesta_t × t_FpVesta_t × bool)) : bool := + let '(x,y,inf) := (p) : (t_FpVesta_t × t_FpVesta_t × bool) in + let y_squared := (y.*y) : t_FpVesta_t in + let x_cubed := ((x.*x).*x) : t_FpVesta_t in + let fp5 := ((f_TWO.+f_TWO).+f_ONE) : t_FpVesta_t in + orb (y_squared=.?(x_cubed.+fp5)) inf. + +Definition g1add_a_pallas (p : (t_FpPallas_t × t_FpPallas_t × bool)) (q : (t_FpPallas_t × t_FpPallas_t × bool)) : (t_FpPallas_t × t_FpPallas_t × bool) := + let '(x1,y1,_) := (p) : (t_FpPallas_t × t_FpPallas_t × bool) in + let '(x2,y2,_) := (q) : (t_FpPallas_t × t_FpPallas_t × bool) in + let x_diff := (x2.-x1) : t_FpPallas_t in + let y_diff := (y2.-y1) : t_FpPallas_t in + let xovery := (y_diff.*(impl__FpPallas__inv x_diff)) : t_FpPallas_t in + let x3 := (((f_exp xovery (@repr WORDSIZE32 2)).-x1).-x2) : t_FpPallas_t in + let y3 := ((xovery.*(x1.-x3)).-y1) : t_FpPallas_t in + (x3,y3,false). + +Definition g1add_a_vesta (p : (t_FpVesta_t × t_FpVesta_t × bool)) (q : (t_FpVesta_t × t_FpVesta_t × bool)) : (t_FpVesta_t × t_FpVesta_t × bool) := + let '(x1,y1,_) := (p) : (t_FpVesta_t × t_FpVesta_t × bool) in + let '(x2,y2,_) := (q) : (t_FpVesta_t × t_FpVesta_t × bool) in + let x_diff := (x2.-x1) : t_FpVesta_t in + let y_diff := (y2.-y1) : t_FpVesta_t in + let xovery := (y_diff.*(impl__FpVesta__inv x_diff)) : t_FpVesta_t in + let x3 := (((f_exp xovery (@repr WORDSIZE32 2)).-x1).-x2) : t_FpVesta_t in + let y3 := ((xovery.*(x1.-x3)).-y1) : t_FpVesta_t in + (x3,y3,false). + +Definition g1double_a_pallas (p : (t_FpPallas_t × t_FpPallas_t × bool)) : (t_FpPallas_t × t_FpPallas_t × bool) := + let '(x1,y1,_) := (p) : (t_FpPallas_t × t_FpPallas_t × bool) in + let x12 := (f_exp x1 (@repr WORDSIZE32 2)) : t_FpPallas_t in + let xovery := (((impl__FpPallas__from_literal (@repr WORDSIZE128 3)).*x12).*(impl__FpPallas__inv (f_TWO.*y1))) : t_FpPallas_t in + let x3 := ((f_exp xovery (@repr WORDSIZE32 2)).-(f_TWO.*x1)) : t_FpPallas_t in + let y3 := ((xovery.*(x1.-x3)).-y1) : t_FpPallas_t in + (x3,y3,false). + +Definition g1double_a_vesta (p : (t_FpVesta_t × t_FpVesta_t × bool)) : (t_FpVesta_t × t_FpVesta_t × bool) := + let '(x1,y1,_) := (p) : (t_FpVesta_t × t_FpVesta_t × bool) in + let x12 := (f_exp x1 (@repr WORDSIZE32 2)) : t_FpVesta_t in + let xovery := (((impl__FpVesta__from_literal (@repr WORDSIZE128 3)).*x12).*(impl__FpVesta__inv (f_TWO.*y1))) : t_FpVesta_t in + let x3 := ((f_exp xovery (@repr WORDSIZE32 2)).-(f_TWO.*x1)) : t_FpVesta_t in + let y3 := ((xovery.*(x1.-x3)).-y1) : t_FpVesta_t in + (x3,y3,false). + +Definition g1double_pallas (p : (t_FpPallas_t × t_FpPallas_t × bool)) : (t_FpPallas_t × t_FpPallas_t × bool) := + let '(_x1,y1,inf1) := (p) : (t_FpPallas_t × t_FpPallas_t × bool) in + if + andb (y1<>f_ZERO) (not inf1) + then + g1double_a_pallas p + else + (f_ZERO,f_ZERO,true). + +Definition g1add_pallas (p : (t_FpPallas_t × t_FpPallas_t × bool)) (q : (t_FpPallas_t × t_FpPallas_t × bool)) : (t_FpPallas_t × t_FpPallas_t × bool) := + let '(x1,y1,inf1) := (p) : (t_FpPallas_t × t_FpPallas_t × bool) in + let '(x2,y2,inf2) := (q) : (t_FpPallas_t × t_FpPallas_t × bool) in + if + inf1 + then + q + else + if + inf2 + then + p + else + if + p=.?q + then + g1double_pallas p + else + if + not (andb (x1=.?x2) (y1=.?(f_ZERO.-y2))) + then + g1add_a_pallas p q + else + (f_ZERO,f_ZERO,true). + +Definition g1double_vesta (p : (t_FpVesta_t × t_FpVesta_t × bool)) : (t_FpVesta_t × t_FpVesta_t × bool) := + let '(_x1,y1,inf1) := (p) : (t_FpVesta_t × t_FpVesta_t × bool) in + if + andb (y1<>f_ZERO) (not inf1) + then + g1double_a_vesta p + else + (f_ZERO,f_ZERO,true). + +Definition g1add_vesta (p : (t_FpVesta_t × t_FpVesta_t × bool)) (q : (t_FpVesta_t × t_FpVesta_t × bool)) : (t_FpVesta_t × t_FpVesta_t × bool) := + let '(x1,y1,inf1) := (p) : (t_FpVesta_t × t_FpVesta_t × bool) in + let '(x2,y2,inf2) := (q) : (t_FpVesta_t × t_FpVesta_t × bool) in + if + inf1 + then + q + else + if + inf2 + then + p + else + if + p=.?q + then + g1double_vesta p + else + if + not (andb (x1=.?x2) (y1=.?(f_ZERO.-y2))) + then + g1add_a_vesta p q + else + (f_ZERO,f_ZERO,true). + +Definition g1neg_pallas (p : (t_FpPallas_t × t_FpPallas_t × bool)) : (t_FpPallas_t × t_FpPallas_t × bool) := + let '(x,y,inf) := (p) : (t_FpPallas_t × t_FpPallas_t × bool) in + (x,f_ZERO.-y,inf). + +Definition g1neg_vesta (p : (t_FpVesta_t × t_FpVesta_t × bool)) : (t_FpVesta_t × t_FpVesta_t × bool) := + let '(x,y,inf) := (p) : (t_FpVesta_t × t_FpVesta_t × bool) in + (x,f_ZERO.-y,inf). + +Definition g1mul_pallas (m : t_FpVesta_t) (p : (t_FpPallas_t × t_FpPallas_t × bool)) : (t_FpPallas_t × t_FpPallas_t × bool) := + let t := ((f_ZERO,f_ZERO,true)) : (t_FpPallas_t × t_FpPallas_t × bool) in + let t := (f_fold (f_into_iter (Build_Range (@repr WORDSIZE32 0)(@repr WORDSIZE32 255))) t (fun t i => + let t := (g1double_pallas t) : (t_FpPallas_t × t_FpPallas_t × bool) in + if + impl__FpVesta__bit m ((@repr WORDSIZE32 254).-i) + then + let t := (g1add_pallas t p) : (t_FpPallas_t × t_FpPallas_t × bool) in + t + else + t)) : (t_FpPallas_t × t_FpPallas_t × bool) in + t. + +Definition g1mul_vesta (m : t_FpPallas_t) (p : (t_FpVesta_t × t_FpVesta_t × bool)) : (t_FpVesta_t × t_FpVesta_t × bool) := + let t := ((f_ZERO,f_ZERO,true)) : (t_FpVesta_t × t_FpVesta_t × bool) in + let t := (f_fold (f_into_iter (Build_Range (@repr WORDSIZE32 0)(@repr WORDSIZE32 255))) t (fun t i => + let t := (g1double_vesta t) : (t_FpVesta_t × t_FpVesta_t × bool) in + if + impl__FpPallas__bit m ((@repr WORDSIZE32 254).-i) + then + let t := (g1add_vesta t p) : (t_FpVesta_t × t_FpVesta_t × bool) in + t + else + t)) : (t_FpVesta_t × t_FpVesta_t × bool) in + t. diff --git a/pasta/proofs/ssprove/extraction/Hacspec_pasta.v b/pasta/proofs/ssprove/extraction/Hacspec_pasta.v new file mode 100644 index 0000000..b9e0cd4 --- /dev/null +++ b/pasta/proofs/ssprove/extraction/Hacspec_pasta.v @@ -0,0 +1,208 @@ +(* File automatically generated by Hacspec *) +Set Warnings "-notation-overridden,-ambiguous-paths". +From Crypt Require Import choice_type Package Prelude. +Import PackageNotation. +From extructures Require Import ord fset. +From mathcomp Require Import word_ssrZ word. +(* From Jasmin Require Import word. *) + +From Coq Require Import ZArith. +From Coq Require Import Strings.String. +Import List.ListNotations. +Open Scope list_scope. +Open Scope Z_scope. +Open Scope bool_scope. + +From Hacspec Require Import ChoiceEquality. +From Hacspec Require Import LocationUtility. +From Hacspec Require Import Hacspec_Lib_Comparable. +From Hacspec Require Import Hacspec_Lib_Pre. +From Hacspec Require Import Hacspec_Lib. + +Open Scope hacspec_scope. +Import choice.Choice.Exports. + +Obligation Tactic := (* try timeout 8 *) solve_ssprove_obligations. + +Require Import Hacspec_lib. +Export Hacspec_lib. + +Notation "'t_G1_pallas'" := (t_FpPallas × t_FpPallas × 'bool). + +Notation "'t_G1_vesta'" := (t_FpVesta × t_FpVesta × 'bool). + +Notation "'t_FpPallas'" := (nat_mod 0x40000000000000000000000000000000224698FC094CF91B992D30ED00000001). +Definition FpPallas : both t_FpPallas -> both t_FpPallas := + id. + +Notation "'t_FpVesta'" := (nat_mod 0x40000000000000000000000000000000224698FC0994A8DD8C46EB2100000001). +Definition FpVesta : both t_FpVesta -> both t_FpVesta := + id. + +(*Not implemented yet? todo(item)*) + +Equations g1_default_pallas (_ : both 'unit) : both (t_FpPallas × t_FpPallas × 'bool) := + g1_default_pallas _ := + solve_lift (prod_b (f_ZERO (ret_both (tt : 'unit)),f_ZERO (ret_both (tt : 'unit)),ret_both (true : 'bool))) : both (t_FpPallas × t_FpPallas × 'bool). +Fail Next Obligation. + +Equations g1_default_vesta (_ : both 'unit) : both (t_FpVesta × t_FpVesta × 'bool) := + g1_default_vesta _ := + solve_lift (prod_b (f_ZERO (ret_both (tt : 'unit)),f_ZERO (ret_both (tt : 'unit)),ret_both (true : 'bool))) : both (t_FpVesta × t_FpVesta × 'bool). +Fail Next Obligation. + +Equations g1_is_identity_pallas (p : both (t_FpPallas × t_FpPallas × 'bool)) : both 'bool := + g1_is_identity_pallas p := + letb '(_,_,inf) := p in + solve_lift inf : both 'bool. +Fail Next Obligation. + +Equations g1_is_identity_vesta (p : both (t_FpVesta × t_FpVesta × 'bool)) : both 'bool := + g1_is_identity_vesta p := + letb '(_,_,inf) := p in + solve_lift inf : both 'bool. +Fail Next Obligation. + +Equations g1_on_curve_pallas (p : both (t_FpPallas × t_FpPallas × 'bool)) : both 'bool := + g1_on_curve_pallas p := + letb '(x,y,inf) := p in + letb y_squared := y .* y in + letb x_cubed := (x .* x) .* x in + letb fp5 := ((f_TWO (ret_both (tt : 'unit))) .+ (f_TWO (ret_both (tt : 'unit)))) .+ (f_ONE (ret_both (tt : 'unit))) in + solve_lift (orb (y_squared =.? (x_cubed .+ fp5)) inf) : both 'bool. +Fail Next Obligation. + +Equations g1_on_curve_vesta (p : both (t_FpVesta × t_FpVesta × 'bool)) : both 'bool := + g1_on_curve_vesta p := + letb '(x,y,inf) := p in + letb y_squared := y .* y in + letb x_cubed := (x .* x) .* x in + letb fp5 := ((f_TWO (ret_both (tt : 'unit))) .+ (f_TWO (ret_both (tt : 'unit)))) .+ (f_ONE (ret_both (tt : 'unit))) in + solve_lift (orb (y_squared =.? (x_cubed .+ fp5)) inf) : both 'bool. +Fail Next Obligation. + +Equations g1add_a_pallas (p : both (t_FpPallas × t_FpPallas × 'bool)) (q : both (t_FpPallas × t_FpPallas × 'bool)) : both (t_FpPallas × t_FpPallas × 'bool) := + g1add_a_pallas p q := + letb '(x1,y1,_) := p in + letb '(x2,y2,_) := q in + letb x_diff := x2 .- x1 in + letb y_diff := y2 .- y1 in + letb xovery := y_diff .* (impl__FpPallas__inv x_diff) in + letb x3 := ((f_exp xovery (ret_both (2 : int32))) .- x1) .- x2 in + letb y3 := (xovery .* (x1 .- x3)) .- y1 in + solve_lift (prod_b (x3,y3,ret_both (false : 'bool))) : both (t_FpPallas × t_FpPallas × 'bool). +Fail Next Obligation. + +Equations g1add_a_vesta (p : both (t_FpVesta × t_FpVesta × 'bool)) (q : both (t_FpVesta × t_FpVesta × 'bool)) : both (t_FpVesta × t_FpVesta × 'bool) := + g1add_a_vesta p q := + letb '(x1,y1,_) := p in + letb '(x2,y2,_) := q in + letb x_diff := x2 .- x1 in + letb y_diff := y2 .- y1 in + letb xovery := y_diff .* (impl__FpVesta__inv x_diff) in + letb x3 := ((f_exp xovery (ret_both (2 : int32))) .- x1) .- x2 in + letb y3 := (xovery .* (x1 .- x3)) .- y1 in + solve_lift (prod_b (x3,y3,ret_both (false : 'bool))) : both (t_FpVesta × t_FpVesta × 'bool). +Fail Next Obligation. + +Equations g1double_a_pallas (p : both (t_FpPallas × t_FpPallas × 'bool)) : both (t_FpPallas × t_FpPallas × 'bool) := + g1double_a_pallas p := + letb '(x1,y1,_) := p in + letb x12 := f_exp x1 (ret_both (2 : int32)) in + letb xovery := ((impl__FpPallas__from_literal (ret_both (3 : int128))) .* x12) .* (impl__FpPallas__inv ((f_TWO (ret_both (tt : 'unit))) .* y1)) in + letb x3 := (f_exp xovery (ret_both (2 : int32))) .- ((f_TWO (ret_both (tt : 'unit))) .* x1) in + letb y3 := (xovery .* (x1 .- x3)) .- y1 in + solve_lift (prod_b (x3,y3,ret_both (false : 'bool))) : both (t_FpPallas × t_FpPallas × 'bool). +Fail Next Obligation. + +Equations g1double_a_vesta (p : both (t_FpVesta × t_FpVesta × 'bool)) : both (t_FpVesta × t_FpVesta × 'bool) := + g1double_a_vesta p := + letb '(x1,y1,_) := p in + letb x12 := f_exp x1 (ret_both (2 : int32)) in + letb xovery := ((impl__FpVesta__from_literal (ret_both (3 : int128))) .* x12) .* (impl__FpVesta__inv ((f_TWO (ret_both (tt : 'unit))) .* y1)) in + letb x3 := (f_exp xovery (ret_both (2 : int32))) .- ((f_TWO (ret_both (tt : 'unit))) .* x1) in + letb y3 := (xovery .* (x1 .- x3)) .- y1 in + solve_lift (prod_b (x3,y3,ret_both (false : 'bool))) : both (t_FpVesta × t_FpVesta × 'bool). +Fail Next Obligation. + +Equations g1double_pallas (p : both (t_FpPallas × t_FpPallas × 'bool)) : both (t_FpPallas × t_FpPallas × 'bool) := + g1double_pallas p := + letb '(v__x1,y1,inf1) := p in + solve_lift (ifb andb (y1 <> (f_ZERO (ret_both (tt : 'unit)))) (not inf1) + then g1double_a_pallas p + else prod_b (f_ZERO (ret_both (tt : 'unit)),f_ZERO (ret_both (tt : 'unit)),ret_both (true : 'bool))) : both (t_FpPallas × t_FpPallas × 'bool). +Fail Next Obligation. + +Equations g1add_pallas (p : both (t_FpPallas × t_FpPallas × 'bool)) (q : both (t_FpPallas × t_FpPallas × 'bool)) : both (t_FpPallas × t_FpPallas × 'bool) := + g1add_pallas p q := + letb '(x1,y1,inf1) := p in + letb '(x2,y2,inf2) := q in + solve_lift (ifb inf1 + then q + else ifb inf2 + then p + else ifb p =.? q + then g1double_pallas p + else ifb not (andb (x1 =.? x2) (y1 =.? ((f_ZERO (ret_both (tt : 'unit))) .- y2))) + then g1add_a_pallas p q + else prod_b (f_ZERO (ret_both (tt : 'unit)),f_ZERO (ret_both (tt : 'unit)),ret_both (true : 'bool))) : both (t_FpPallas × t_FpPallas × 'bool). +Fail Next Obligation. + +Equations g1double_vesta (p : both (t_FpVesta × t_FpVesta × 'bool)) : both (t_FpVesta × t_FpVesta × 'bool) := + g1double_vesta p := + letb '(v__x1,y1,inf1) := p in + solve_lift (ifb andb (y1 <> (f_ZERO (ret_both (tt : 'unit)))) (not inf1) + then g1double_a_vesta p + else prod_b (f_ZERO (ret_both (tt : 'unit)),f_ZERO (ret_both (tt : 'unit)),ret_both (true : 'bool))) : both (t_FpVesta × t_FpVesta × 'bool). +Fail Next Obligation. + +Equations g1add_vesta (p : both (t_FpVesta × t_FpVesta × 'bool)) (q : both (t_FpVesta × t_FpVesta × 'bool)) : both (t_FpVesta × t_FpVesta × 'bool) := + g1add_vesta p q := + letb '(x1,y1,inf1) := p in + letb '(x2,y2,inf2) := q in + solve_lift (ifb inf1 + then q + else ifb inf2 + then p + else ifb p =.? q + then g1double_vesta p + else ifb not (andb (x1 =.? x2) (y1 =.? ((f_ZERO (ret_both (tt : 'unit))) .- y2))) + then g1add_a_vesta p q + else prod_b (f_ZERO (ret_both (tt : 'unit)),f_ZERO (ret_both (tt : 'unit)),ret_both (true : 'bool))) : both (t_FpVesta × t_FpVesta × 'bool). +Fail Next Obligation. + +Equations g1neg_pallas (p : both (t_FpPallas × t_FpPallas × 'bool)) : both (t_FpPallas × t_FpPallas × 'bool) := + g1neg_pallas p := + letb '(x,y,inf) := p in + solve_lift (prod_b (x,(f_ZERO (ret_both (tt : 'unit))) .- y,inf)) : both (t_FpPallas × t_FpPallas × 'bool). +Fail Next Obligation. + +Equations g1neg_vesta (p : both (t_FpVesta × t_FpVesta × 'bool)) : both (t_FpVesta × t_FpVesta × 'bool) := + g1neg_vesta p := + letb '(x,y,inf) := p in + solve_lift (prod_b (x,(f_ZERO (ret_both (tt : 'unit))) .- y,inf)) : both (t_FpVesta × t_FpVesta × 'bool). +Fail Next Obligation. + +Equations g1mul_pallas (m : both t_FpVesta) (p : both (t_FpPallas × t_FpPallas × 'bool)) : both (t_FpPallas × t_FpPallas × 'bool) := + g1mul_pallas m p := + letb t := prod_b (f_ZERO (ret_both (tt : 'unit)),f_ZERO (ret_both (tt : 'unit)),ret_both (true : 'bool)) in + letb t := f_fold (f_into_iter (Build_t_Range (f_start := ret_both (0 : uint_size)) (f_end := ret_both (255 : uint_size)))) t (fun t => fun i => + letb t := g1double_pallas t in + ifb impl__FpVesta__bit m ((ret_both (254 : uint_size)) .- i) + then letb t := g1add_pallas t p in + t + else t) in + solve_lift t : both (t_FpPallas × t_FpPallas × 'bool). +Fail Next Obligation. + +Equations g1mul_vesta (m : both t_FpPallas) (p : both (t_FpVesta × t_FpVesta × 'bool)) : both (t_FpVesta × t_FpVesta × 'bool) := + g1mul_vesta m p := + letb t := prod_b (f_ZERO (ret_both (tt : 'unit)),f_ZERO (ret_both (tt : 'unit)),ret_both (true : 'bool)) in + letb t := f_fold (f_into_iter (Build_t_Range (f_start := ret_both (0 : uint_size)) (f_end := ret_both (255 : uint_size)))) t (fun t => fun i => + letb t := g1double_vesta t in + ifb impl__FpPallas__bit m ((ret_both (254 : uint_size)) .- i) + then letb t := g1add_vesta t p in + t + else t) in + solve_lift t : both (t_FpVesta × t_FpVesta × 'bool). +Fail Next Obligation. diff --git a/pat_trash.v b/pat_trash.v new file mode 100644 index 0000000..ad557c0 --- /dev/null +++ b/pat_trash.v @@ -0,0 +1,307 @@ +(* File automatically generated by Hacspec *) +Set Warnings "-notation-overridden,-ambiguous-paths". +From Crypt Require Import choice_type Package Prelude. +Import PackageNotation. +From extructures Require Import ord fset. +From Coq Require Import ZArith. +From Coq Require Import Strings.String. +Import List.ListNotations. +Open Scope list_scope. +Open Scope Z_scope. +Open Scope bool_scope. + +From Crypt Require Import jasmin_word. + +From Hacspec Require Import ChoiceEquality. +From Hacspec Require Import LocationUtility. +From Hacspec Require Import Hacspec_Lib_Comparable. +From Hacspec Require Import Hacspec_Lib_Pre. +From Hacspec Require Import Hacspec_Lib. + +Open Scope hacspec_scope. +Import choice.Choice.Exports. + +Obligation Tactic := (* try timeout 8 *) solve_ssprove_obligations. + +(* Require Import Group. *) +(* Export Group. *) + +(* Require Import Group_Ff. *) +(* Export Group_Ff. *) + +(* Require Import Field. *) +(* Export Field. *) + +(* Require Import Group. *) +(* Export Group. *) + +(* Require Import Gt. *) +(* Export Gt. *) + +(* Require Import Add. *) +(* Export Add. *) + +(* Notation "'t_G'" := t_Gt. *) + +(* Notation "'t_Z'" := f_Scalar. *) + +(* (*Not implemented yet? todo(item)*) *) + +(* (*Not implemented yet? todo(item)*) *) + +(* Equations hash {L1 : {fset Location}} {I1 : Interface} (v__inp : both L1 I1 (t_Vec t_Gt t_Global)) : both L1 I1 t_Scalar := *) +(* hash v__inp := *) +(* solve_lift (impl__Scalar__one (ret_both (tt : 'unit))) : both L1 I1 t_Scalar. *) +(* Fail Next Obligation. *) + +Definition t_my_test : choice_type := + (int32 × 'bool). +Record t_my_test_rec : Type := + { f_temp : int32 ; + f_other : 'bool ; }. +Definition to_rec : t_my_test -> t_my_test_rec := fun x => {| f_temp := fst x ; f_other := snd x |}. +Definition from_rec (x : t_my_test_rec) : t_my_test := (f_temp x, f_other x). + +Record t_my_test_rec_both L I : Type := + { f_temp_both : both L I int32 ; + f_other_both : both L I 'bool ; }. +Arguments f_temp_both {_} {_}. +Arguments f_other_both {_} {_}. + +Equations lift_rec {L I} (x : t_my_test_rec) : @t_my_test_rec_both L I := + lift_rec x := + {| + f_temp_both := solve_lift ret_both (f_temp x) ; + f_other_both := solve_lift ret_both (f_other x) ; |}. +Fail Next Obligation. +Equations to_rec_both {L I} (x : both L I t_my_test) : t_my_test_rec_both L I := + to_rec_both x := + {| + f_temp_both := bind_both x (fun x => solve_lift ret_both (fst x)); + f_other_both := bind_both x (fun x => solve_lift ret_both (snd x : 'bool)); + |}. +Fail Next Obligation. +Coercion to_rec_both : both >-> t_my_test_rec_both. + +Equations from_rec_both {L I} (x : t_my_test_rec_both L I) : both L I t_my_test := + from_rec_both x := + solve_lift prod_b(f_temp_both x, f_other_both x). +Fail Next Obligation. +Coercion from_rec_both : t_my_test_rec_both >-> both. + +Notation "'matchb' x 'with' '|' a '=>' b 'end'" := + (bind_both x (fun y => match y with + | a => b end)) (at level 100, a pattern). +Check fun x : both fset0 fset0 t_my_test => matchb x with | (c, _) => ret_both c end. + +Equations f_temp {L : {fset Location}} {I : Interface} (s : both L I t_my_test) : both L I int32 := + f_temp s := + bind_both s (fun x => + solve_lift (ret_both (fst x : int32))) : both L I int32. +Fail Next Obligation. +Equations f_other {L : {fset Location}} {I : Interface} (s : both L I t_my_test) : both L I 'bool := + f_other s := + bind_both s (fun x => + solve_lift (ret_both (snd x : 'bool))) : both L I 'bool. +Fail Next Obligation. +Inductive t_my_test_ind : forall {L I} (s : both L I t_my_test), Type := +| Build_t_my_test : forall {L1 L2 I1 I2} {f_temp : both L1 I1 int32} {f_other : both L2 I2 'bool}, t_my_test_ind (prod_b(f_temp, f_other) : both (L1 :|: L2) (I1 :|: I2) t_my_test). +Fail Next Obligation. +Notation "'Build_t_my_test' '[' x ']' '(' 'f_temp' ':=' y ')'" := (Build_t_my_test (f_temp := y) (f_other := f_other x)). + +Theorem equality_by_weak_equivalence : + forall {A : choice_type} (is_pure : A) (is_state : raw_code A) (k : raw_code A -> Prop), + deterministic is_state -> + ⊢ ⦃ true_precond ⦄ is_state ≈ ret is_pure ⦃ pre_to_post_ret true_precond is_pure ⦄ -> + is_state = (ret is_pure). +Proof. + intros. + apply (sem_to_det _ _ _ _ X (deterministic_ret is_pure)) in H. + specialize (H empty_heap empty_heap (ltac:(reflexivity))). + induction X. + - now destruct H as [[] ?]. + - admit. + - rewrite IHX. +Admitted. + (* intros. *) + (* apply rf_preserves_eq. *) + (* Set Printing All. *) + + (* inversion H. *) + (* unfold ssreflect.lock in H0. *) + (* unfold rel_jdg in H. *) + (* inversion H. *) + +Set Bullet Behavior "Strict Subproofs". +Set Default Goal Selector "!". + +Lemma Location_eq_dec : forall x y : Location, {x = y} + {x <> y}. +Proof. + clear ; intros. + destruct x as [x0 x1], y as [y0 y1]. + destruct (choice_type_eqP x0 y0). + - subst. + destruct (Nat.eq_dec x1 y1). + + now left. + + now right. + - now right. +Qed. + +Definition cast_from_one_to_other {L I} {s : _ } (x : @t_my_test_ind L I s) : both L I t_my_test := s. + +Program Definition cast_from_one_to_other {L I} (s : both L I t_my_test) : @t_my_test_ind (L :|: L) (I :|: I) (solve_lift s). +Proof. + pose (split_both s). + destruct s0 eqn:so. + assert (forall {L I} {A : choice_type} (s : both L I A), unsplit_both (split_both s) = s). + { + clear ; intros. + apply both_eq. + induction A ; simpl ; try reflexivity. + - destruct s as [[] [] ?] ; simpl in is_valid_code, is_valid_both, p_eq. + rewrite prod_to_prod_equation_1 ; simpl. + unfold prod_both0, eq_rect ; destruct ChoiceEquality.prod_both0_obligation_1, ChoiceEquality.prod_both0_obligation_2. + rewrite prod_both_equation_1. + simpl; rewrite IHA1, IHA2. + unfold bind_raw_both ; simpl. + rewrite <- surjective_pairing. + f_equal. + specialize (valid_both_is_deterministic L (A1 × A2) is_pure is_state is_valid_both). + apply (sem_to_det _ _ _ _ X (deterministic_ret is_pure)) in p_eq. + specialize (p_eq empty_heap empty_heap Logic.I). + inversion is_valid_both ; subst. + + now destruct is_pure. + + simpl in *. + (* unfold det_jdg in p_eq. *) + (* unfold det_run in p_eq. *) + inversion X ; subst. + inversion X0 ; subst. + apply Eqdep_dec.inj_pair2_eq_dec in H3. + 2: apply Location_eq_dec. + apply Eqdep_dec.inj_pair2_eq_dec in H4. + 2: apply Location_eq_dec. + f_equal. + f_equal. + Require Import FunctionalExtensionality. + apply functional_extensionality. + intros x. + specialize (X1 x). + inversion X1. + * subst. + rewrite <- H0. + simpl. + + + inversion X1. + * + + unfold Location in x. + apply Nat.eq_dec. + apply Int.Z_as_Int.eq_dec. + easy. + + inversion X1 ; subst. + + * simpl. + + assert (deterministic is_state). + { + subst. + apply deterministic_put. + apply deterministic_get. + intros. + apply deterministic_ret. + } + + + destruct both_prog_valid. + + destruct is_state. + apply (sem_to_det _ _ _ _ X (deterministic_ret is_pure)) in p_eq. + simpl in p_eq. + + equality_by_weak_equivalence. + } + + refine (let '(a, b) := split_both s in _). + epose (Build_t_my_test (f_temp := a) (f_other := b)). +Proof. + replace (solve_lift s) with (prod_b (f_temp s, f_other s)). + apply (Build_t_my_test (f_temp := f_temp s) (f_other := f_other s)). + apply both_eq. + simpl. + destruct s as [[] ? ?]. + rewrite prod_both_equation_1, f_temp_equation_1, f_other_equation_1. + simpl ; unfold bind_raw_both ; simpl in p_eq |- *. + f_equal. + - now destruct is_pure. + - pattern is_state ; rewrite (equality_by_weak_equivalence is_pure is_state) ; [ | apply p_eq ]. + simpl. + + + replace is_state with (x ← is_state ;; ret ((fst x, snd x) : chProd int32 'bool)) at -1 by now setoid_rewrite <- surjective_pairing ; rewrite bind_ret. + setoid_rewrite bind_assoc. + setoid_rewrite bind_assoc. + setoid_rewrite bind_rewrite. + rewrite <- (bind_ret _ is_state) at -1. + rewrite bind_assoc. + apply f_equal. + Require Import FunctionalExtensionality. + apply functional_extensionality. + intros. + apply f_equal. + + intros x. + rewrite <- bind_ret. + apply rf_preserves_eq. + + replace (x ← is_state ;; _ (fst x)) with ('(a, b) ← is_state ;; ret a). + inversion both_prog_valid. + pose bind_cong. + rewrite bind_assoc. + rewrite bind_assoc. + setoid_rewrite bind_assoc. + destruct is_state. + + destruct x. + + reflexivity. + + simpl. + . + + rewrite <- bind_ret. + destruct is_state. + now destruct x. + simpl. + now destruct x0. + cbn. + reflexivity. + cbn in t. + unfold bind_both in t. + cbn in t. + unfold bind_both in t. + apply t. + unfold prod_both in t. + epose (bind_both s (fun '(x, y) => Build_t_my_test x)). + apply Build_t_my_test. +Check fun x : both fset0 fset0 t_my_test => + matchb x with +| Build_t_my_test => _ +end. + + +Print Table Printing Records. +Add Printing Record f_temp. + +Class t_Add A B := { + f_Output : choice_type ; + f_add_loc : {fset Location} ; + f_add : forall {L1 L2 I1 I2}, both L1 I1 A -> both L2 I2 B -> both (L1 :|: L2 :|: f_add_loc) (I1 :|: I2) f_Output + }. + +#[global] Program Instance t_my_test_t_Add : t_Add t_my_test t_my_test := + let f_Output := t_my_test : choice_type in + let f_add := fun {L1 : {fset Location}} {L2 : {fset Location}} {I1 : Interface} {I2 : Interface} (self : both L1 I1 t_my_test) (rhs : both L2 I2 t_my_test) => solve_lift (Build_t_my_test (f_temp := (f_temp self) .+ (f_temp rhs))) : both (L1 :|: L2 :|: fset []) (I1 :|: I2) t_my_test in + {| f_Output := (@f_Output); + f_add_loc := (fset [] : {fset Location}); + f_add := (@f_add)|}. +Fail Next Obligation. +Hint Unfold t_my_test_t_Add. diff --git a/poly1305/proofs/ssprove/extraction/Hacspec_poly1305.v b/poly1305/proofs/ssprove/extraction/Hacspec_poly1305.v new file mode 100644 index 0000000..5a361af --- /dev/null +++ b/poly1305/proofs/ssprove/extraction/Hacspec_poly1305.v @@ -0,0 +1,135 @@ +(* File automatically generated by Hacspec *) +Set Warnings "-notation-overridden,-ambiguous-paths". +From Crypt Require Import choice_type Package Prelude. +Import PackageNotation. +From extructures Require Import ord fset. +From mathcomp Require Import word_ssrZ word. +(* From Jasmin Require Import word. *) + +From Coq Require Import ZArith. +From Coq Require Import Strings.String. +Import List.ListNotations. +Open Scope list_scope. +Open Scope Z_scope. +Open Scope bool_scope. + +From Hacspec Require Import ChoiceEquality. +From Hacspec Require Import LocationUtility. +From Hacspec Require Import Hacspec_Lib_Comparable. +From Hacspec Require Import Hacspec_Lib_Pre. +From Hacspec Require Import Hacspec_Lib. + +Open Scope hacspec_scope. +Import choice.Choice.Exports. + +Obligation Tactic := (* try timeout 8 *) solve_ssprove_obligations. + +Require Import Hacspec_lib. +Export Hacspec_lib. + +Notation "'t_BlockIndex'" := uint_size. + +Notation "'t_FieldElement'" := (nat_mod 0x03fffffffffffffffffffffffffffffffb). +Definition FieldElement : both t_FieldElement -> both t_FieldElement := + id. + +Notation "'t_Poly1305Tag'" := (nseq int8 16). +Definition Poly1305Tag : both t_Poly1305Tag -> both t_Poly1305Tag := + id. + +Notation "'t_PolyBlock'" := (nseq int8 16). +Definition PolyBlock : both t_PolyBlock -> both t_PolyBlock := + id. + +Notation "'t_PolyKey'" := (nseq int8 32). +Definition PolyKey : both t_PolyKey -> both t_PolyKey := + id. + +Notation "'t_PolyState'" := (t_FieldElement × t_FieldElement × t_PolyKey). + +(*Not implemented yet? todo(item)*) + +Equations v_BLOCKSIZE : both uint_size := + v_BLOCKSIZE := + solve_lift (ret_both (16 : uint_size)) : both uint_size. +Fail Next Obligation. + +Equations poly1305_encode_block (b : both t_PolyBlock) : both t_FieldElement := + poly1305_encode_block b := + letb n := v_U128_from_le_bytes (impl__U128Word__from_seq b) in + letb f := impl__FieldElement__from_secret_literal n in + solve_lift (f .+ (impl__FieldElement__pow2 (ret_both (128 : uint_size)))) : both t_FieldElement. +Fail Next Obligation. + +Equations poly1305_update_block (b : both t_PolyBlock) (st : both (t_FieldElement × t_FieldElement × t_PolyKey)) : both (t_FieldElement × t_FieldElement × t_PolyKey) := + poly1305_update_block b st := + letb '(acc,r,k) := st in + solve_lift (prod_b (((poly1305_encode_block b) .+ acc) .* r,r,k)) : both (t_FieldElement × t_FieldElement × t_PolyKey). +Fail Next Obligation. + +Equations poly1305_encode_r (b : both t_PolyBlock) : both t_FieldElement := + poly1305_encode_r b := + letb n := v_U128_from_le_bytes (impl__U128Word__from_seq b) in + letb n := n .& (U128 (ret_both (21267647620597763993911028882763415551 : int128))) in + solve_lift (impl__FieldElement__from_secret_literal n) : both t_FieldElement. +Fail Next Obligation. + +Equations poly1305_init (k : both t_PolyKey) : both (t_FieldElement × t_FieldElement × t_PolyKey) := + poly1305_init k := + letb r := poly1305_encode_r (impl__PolyBlock__from_slice k (ret_both (0 : uint_size)) (ret_both (16 : uint_size))) in + solve_lift (prod_b (f_ZERO (ret_both (tt : 'unit)),r,k)) : both (t_FieldElement × t_FieldElement × t_PolyKey). +Fail Next Obligation. + +Notation "'t_SubBlock'" := (t_Seq t_U8). + +Equations poly1305_encode_last (pad_len : both uint_size) (b : both (t_Seq t_U8)) : both t_FieldElement := + poly1305_encode_last pad_len b := + letb n := v_U128_from_le_bytes (impl__U128Word__from_slice b (ret_both (0 : uint_size)) (impl_41__len b)) in + letb f := impl__FieldElement__from_secret_literal n in + solve_lift (f .+ (impl__FieldElement__pow2 ((ret_both (8 : uint_size)) .* pad_len))) : both t_FieldElement. +Fail Next Obligation. + +Equations poly1305_finish (st : both (t_FieldElement × t_FieldElement × t_PolyKey)) : both t_Poly1305Tag := + poly1305_finish st := + letb '(acc,_,k) := st in + letb n := v_U128_from_le_bytes (impl__U128Word__from_slice k (ret_both (16 : uint_size)) (ret_both (16 : uint_size))) in + letb aby := impl__FieldElement__to_byte_seq_le acc in + letb a := v_U128_from_le_bytes (impl__U128Word__from_slice aby (ret_both (0 : uint_size)) (ret_both (16 : uint_size))) in + solve_lift (impl__Poly1305Tag__from_seq (v_U128_to_le_bytes (a .+ n))) : both t_Poly1305Tag. +Fail Next Obligation. + +Equations poly1305_update_blocks (m : both (t_Seq t_U8)) (st : both (t_FieldElement × t_FieldElement × t_PolyKey)) : both (t_FieldElement × t_FieldElement × t_PolyKey) := + poly1305_update_blocks m st := + letb st := st in + letb n_blocks := (impl_41__len m) ./ v_BLOCKSIZE in + letb st := f_fold (f_into_iter (Build_t_Range (f_start := ret_both (0 : uint_size)) (f_end := n_blocks))) st (fun st => fun i => + letb block := impl__PolyBlock__from_seq (impl_41__get_exact_chunk m v_BLOCKSIZE i) in + letb st := poly1305_update_block block st in + st) in + solve_lift st : both (t_FieldElement × t_FieldElement × t_PolyKey). +Fail Next Obligation. + +Equations poly1305_update_last (pad_len : both uint_size) (b : both (t_Seq t_U8)) (st : both (t_FieldElement × t_FieldElement × t_PolyKey)) : both (t_FieldElement × t_FieldElement × t_PolyKey) := + poly1305_update_last pad_len b st := + letb st := st in + letb st := ifb (impl_41__len b) <> (ret_both (0 : uint_size)) + then letb '(acc,r,k) := st in + letb st := prod_b (((poly1305_encode_last pad_len b) .+ acc) .* r,r,k) in + st + else st in + solve_lift st : both (t_FieldElement × t_FieldElement × t_PolyKey). +Fail Next Obligation. + +Equations poly1305_update (m : both (t_Seq t_U8)) (st : both (t_FieldElement × t_FieldElement × t_PolyKey)) : both (t_FieldElement × t_FieldElement × t_PolyKey) := + poly1305_update m st := + letb st := poly1305_update_blocks m st in + letb last := impl_41__get_remainder_chunk m v_BLOCKSIZE in + solve_lift (poly1305_update_last (impl_41__len last) last st) : both (t_FieldElement × t_FieldElement × t_PolyKey). +Fail Next Obligation. + +Equations poly1305 (m : both (t_Seq t_U8)) (key : both t_PolyKey) : both t_Poly1305Tag := + poly1305 m key := + letb st := poly1305_init key in + letb st := poly1305_update m st in + solve_lift (poly1305_finish st) : both t_Poly1305Tag. +Fail Next Obligation. diff --git a/rust-toolchain.toml b/rust-toolchain.toml index 0a765b4..d358713 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,3 +1,3 @@ [toolchain] -channel = "nightly-2022-12-06" +channel = "nightly-2023-06-02" components = [ "rustc-dev", "llvm-tools-preview" , "rust-analysis" , "rust-src" , "rustfmt" ] diff --git a/sha256/proofs/ssprove/extraction/Hacspec_sha256.v b/sha256/proofs/ssprove/extraction/Hacspec_sha256.v new file mode 100644 index 0000000..41ad6a3 --- /dev/null +++ b/sha256/proofs/ssprove/extraction/Hacspec_sha256.v @@ -0,0 +1,272 @@ +(* File automatically generated by Hacspec *) +Set Warnings "-notation-overridden,-ambiguous-paths". +From Crypt Require Import choice_type Package Prelude. +Import PackageNotation. +From extructures Require Import ord fset. +From mathcomp Require Import word_ssrZ word. +(* From Jasmin Require Import word. *) + +From Coq Require Import ZArith. +From Coq Require Import Strings.String. +Import List.ListNotations. +Open Scope list_scope. +Open Scope Z_scope. +Open Scope bool_scope. + +From Hacspec Require Import ChoiceEquality. +From Hacspec Require Import LocationUtility. +From Hacspec Require Import Hacspec_Lib_Comparable. +From Hacspec Require Import Hacspec_Lib_Pre. +From Hacspec Require Import Hacspec_Lib. + +Open Scope hacspec_scope. +Import choice.Choice.Exports. + +Obligation Tactic := (* try timeout 8 *) solve_ssprove_obligations. + +Require Import Hacspec_lib. +Export Hacspec_lib. + +Notation "'t_Block'" := (nseq int8 BLOCK_SIZE). +Definition Block : both t_Block -> both t_Block := + id. + +Notation "'t_Hash'" := (nseq int32 8). +Definition Hash : both t_Hash -> both t_Hash := + id. + +Notation "'t_OpTableType'" := (nseq int32 12). +Definition OpTableType : both t_OpTableType -> both t_OpTableType := + id. + +Notation "'t_RoundConstantsTable'" := (nseq int32 K_SIZE). +Definition RoundConstantsTable : both t_RoundConstantsTable -> both t_RoundConstantsTable := + id. + +Notation "'t_Sha256Digest'" := (nseq int8 HASH_SIZE). +Definition Sha256Digest : both t_Sha256Digest -> both t_Sha256Digest := + id. + +(*Not implemented yet? todo(item)*) + +Equations v_BLOCK_SIZE : both uint_size := + v_BLOCK_SIZE := + solve_lift (ret_both (64 : uint_size)) : both uint_size. +Fail Next Obligation. + +Equations v_HASH_SIZE : both uint_size := + v_HASH_SIZE := + solve_lift ((ret_both (256 : uint_size)) ./ (ret_both (8 : uint_size))) : both uint_size. +Fail Next Obligation. + +Equations v_K_SIZE : both uint_size := + v_K_SIZE := + solve_lift (ret_both (64 : uint_size)) : both uint_size. +Fail Next Obligation. + +Equations v_LEN_SIZE : both uint_size := + v_LEN_SIZE := + solve_lift (ret_both (8 : uint_size)) : both uint_size. +Fail Next Obligation. + +Equations v_OP_TABLE : both t_OpTableType := + v_OP_TABLE := + OpTableType (array_from_list [solve_lift (ret_both (2 : uint_size)); + solve_lift (ret_both (13 : uint_size)); + solve_lift (ret_both (22 : uint_size)); + solve_lift (ret_both (6 : uint_size)); + solve_lift (ret_both (11 : uint_size)); + solve_lift (ret_both (25 : uint_size)); + solve_lift (ret_both (7 : uint_size)); + solve_lift (ret_both (18 : uint_size)); + solve_lift (ret_both (3 : uint_size)); + solve_lift (ret_both (17 : uint_size)); + solve_lift (ret_both (19 : uint_size)); + solve_lift (ret_both (10 : uint_size))]) : both t_OpTableType. +Fail Next Obligation. + +Equations ch (x : both t_U32) (y : both t_U32) (z : both t_U32) : both t_U32 := + ch x y z := + solve_lift ((x .& y) .^ ((f_not x) .& z)) : both t_U32. +Fail Next Obligation. + +Equations maj (x : both t_U32) (y : both t_U32) (z : both t_U32) : both t_U32 := + maj x y z := + solve_lift ((x .& y) .^ ((x .& z) .^ (y .& z))) : both t_U32. +Fail Next Obligation. + +Equations sigma (x : both t_U32) (i : both uint_size) (op : both uint_size) : both t_U32 := + sigma x i op := + letb (tmp : t_U32) := impl__U32__rotate_right x (v_OP_TABLE.a[(((ret_both (3 : uint_size)) .* i) .+ (ret_both (2 : uint_size)))]) in + letb tmp := ifb op =.? (ret_both (0 : uint_size)) + then x shift_right (v_OP_TABLE.a[(((ret_both (3 : uint_size)) .* i) .+ (ret_both (2 : uint_size)))]) + else tmp in + solve_lift (((impl__U32__rotate_right x (v_OP_TABLE.a[((ret_both (3 : uint_size)) .* i)])) .^ (impl__U32__rotate_right x (v_OP_TABLE.a[(((ret_both (3 : uint_size)) .* i) .+ (ret_both (1 : uint_size)))]))) .^ tmp) : both t_U32. +Fail Next Obligation. + +Equations schedule (block : both t_Block) : both t_RoundConstantsTable := + schedule block := + letb b := impl__Block__to_be_U32s block in + letb s := impl__RoundConstantsTable__new (ret_both (tt : 'unit)) in + letb s := f_fold (f_into_iter (Build_t_Range (f_start := ret_both (0 : uint_size)) (f_end := v_K_SIZE))) s (fun s => fun i => + ifb i <.? (ret_both (16 : uint_size)) + then letb s := update_at_usize s i (b.a[i]) in + s + else letb t16 := s.a[(i .- (ret_both (16 : uint_size)))] in + letb t15 := s.a[(i .- (ret_both (15 : uint_size)))] in + letb t7 := s.a[(i .- (ret_both (7 : uint_size)))] in + letb t2 := s.a[(i .- (ret_both (2 : uint_size)))] in + letb s1 := sigma t2 (ret_both (3 : uint_size)) (ret_both (0 : uint_size)) in + letb s0 := sigma t15 (ret_both (2 : uint_size)) (ret_both (0 : uint_size)) in + letb s := update_at_usize s i (((s1 .+ t7) .+ s0) .+ t16) in + s) in + solve_lift s : both t_RoundConstantsTable. +Fail Next Obligation. + +Equations v_HASH_INIT : both t_Hash := + v_HASH_INIT := + Hash (array_from_list [U32 (solve_lift (ret_both (1779033703 : int32))); + U32 (solve_lift (ret_both (3144134277 : int32))); + U32 (solve_lift (ret_both (1013904242 : int32))); + U32 (solve_lift (ret_both (2773480762 : int32))); + U32 (solve_lift (ret_both (1359893119 : int32))); + U32 (solve_lift (ret_both (2600822924 : int32))); + U32 (solve_lift (ret_both (528734635 : int32))); + U32 (solve_lift (ret_both (1541459225 : int32)))]) : both t_Hash. +Fail Next Obligation. + +Equations v_K_TABLE : both t_RoundConstantsTable := + v_K_TABLE := + RoundConstantsTable (array_from_list [U32 (solve_lift (ret_both (1116352408 : int32))); + U32 (solve_lift (ret_both (1899447441 : int32))); + U32 (solve_lift (ret_both (3049323471 : int32))); + U32 (solve_lift (ret_both (3921009573 : int32))); + U32 (solve_lift (ret_both (961987163 : int32))); + U32 (solve_lift (ret_both (1508970993 : int32))); + U32 (solve_lift (ret_both (2453635748 : int32))); + U32 (solve_lift (ret_both (2870763221 : int32))); + U32 (solve_lift (ret_both (3624381080 : int32))); + U32 (solve_lift (ret_both (310598401 : int32))); + U32 (solve_lift (ret_both (607225278 : int32))); + U32 (solve_lift (ret_both (1426881987 : int32))); + U32 (solve_lift (ret_both (1925078388 : int32))); + U32 (solve_lift (ret_both (2162078206 : int32))); + U32 (solve_lift (ret_both (2614888103 : int32))); + U32 (solve_lift (ret_both (3248222580 : int32))); + U32 (solve_lift (ret_both (3835390401 : int32))); + U32 (solve_lift (ret_both (4022224774 : int32))); + U32 (solve_lift (ret_both (264347078 : int32))); + U32 (solve_lift (ret_both (604807628 : int32))); + U32 (solve_lift (ret_both (770255983 : int32))); + U32 (solve_lift (ret_both (1249150122 : int32))); + U32 (solve_lift (ret_both (1555081692 : int32))); + U32 (solve_lift (ret_both (1996064986 : int32))); + U32 (solve_lift (ret_both (2554220882 : int32))); + U32 (solve_lift (ret_both (2821834349 : int32))); + U32 (solve_lift (ret_both (2952996808 : int32))); + U32 (solve_lift (ret_both (3210313671 : int32))); + U32 (solve_lift (ret_both (3336571891 : int32))); + U32 (solve_lift (ret_both (3584528711 : int32))); + U32 (solve_lift (ret_both (113926993 : int32))); + U32 (solve_lift (ret_both (338241895 : int32))); + U32 (solve_lift (ret_both (666307205 : int32))); + U32 (solve_lift (ret_both (773529912 : int32))); + U32 (solve_lift (ret_both (1294757372 : int32))); + U32 (solve_lift (ret_both (1396182291 : int32))); + U32 (solve_lift (ret_both (1695183700 : int32))); + U32 (solve_lift (ret_both (1986661051 : int32))); + U32 (solve_lift (ret_both (2177026350 : int32))); + U32 (solve_lift (ret_both (2456956037 : int32))); + U32 (solve_lift (ret_both (2730485921 : int32))); + U32 (solve_lift (ret_both (2820302411 : int32))); + U32 (solve_lift (ret_both (3259730800 : int32))); + U32 (solve_lift (ret_both (3345764771 : int32))); + U32 (solve_lift (ret_both (3516065817 : int32))); + U32 (solve_lift (ret_both (3600352804 : int32))); + U32 (solve_lift (ret_both (4094571909 : int32))); + U32 (solve_lift (ret_both (275423344 : int32))); + U32 (solve_lift (ret_both (430227734 : int32))); + U32 (solve_lift (ret_both (506948616 : int32))); + U32 (solve_lift (ret_both (659060556 : int32))); + U32 (solve_lift (ret_both (883997877 : int32))); + U32 (solve_lift (ret_both (958139571 : int32))); + U32 (solve_lift (ret_both (1322822218 : int32))); + U32 (solve_lift (ret_both (1537002063 : int32))); + U32 (solve_lift (ret_both (1747873779 : int32))); + U32 (solve_lift (ret_both (1955562222 : int32))); + U32 (solve_lift (ret_both (2024104815 : int32))); + U32 (solve_lift (ret_both (2227730452 : int32))); + U32 (solve_lift (ret_both (2361852424 : int32))); + U32 (solve_lift (ret_both (2428436474 : int32))); + U32 (solve_lift (ret_both (2756734187 : int32))); + U32 (solve_lift (ret_both (3204031479 : int32))); + U32 (solve_lift (ret_both (3329325298 : int32)))]) : both t_RoundConstantsTable. +Fail Next Obligation. + +Equations shuffle (ws : both t_RoundConstantsTable) (hashi : both t_Hash) : both t_Hash := + shuffle ws hashi := + letb h := hashi in + letb h := f_fold (f_into_iter (Build_t_Range (f_start := ret_both (0 : uint_size)) (f_end := v_K_SIZE))) h (fun h => fun i => + letb a0 := h.a[(ret_both (0 : int32))] in + letb b0 := h.a[(ret_both (1 : int32))] in + letb c0 := h.a[(ret_both (2 : int32))] in + letb d0 := h.a[(ret_both (3 : int32))] in + letb e0 := h.a[(ret_both (4 : int32))] in + letb f0 := h.a[(ret_both (5 : int32))] in + letb g0 := h.a[(ret_both (6 : int32))] in + letb (h0 : t_U32) := h.a[(ret_both (7 : int32))] in + letb t1 := (((h0 .+ (sigma e0 (ret_both (1 : uint_size)) (ret_both (1 : uint_size)))) .+ (ch e0 f0 g0)) .+ (v_K_TABLE.a[i])) .+ (ws.a[i]) in + letb t2 := (sigma a0 (ret_both (0 : uint_size)) (ret_both (1 : uint_size))) .+ (maj a0 b0 c0) in + letb h := update_at h (ret_both (0 : int32)) (t1 .+ t2) in + letb h := update_at h (ret_both (1 : int32)) a0 in + letb h := update_at h (ret_both (2 : int32)) b0 in + letb h := update_at h (ret_both (3 : int32)) c0 in + letb h := update_at h (ret_both (4 : int32)) (d0 .+ t1) in + letb h := update_at h (ret_both (5 : int32)) e0 in + letb h := update_at h (ret_both (6 : int32)) f0 in + letb h := update_at h (ret_both (7 : int32)) g0 in + h) in + solve_lift h : both t_Hash. +Fail Next Obligation. + +Equations compress (block : both t_Block) (h_in : both t_Hash) : both t_Hash := + compress block h_in := + letb s := schedule block in + letb h := shuffle s h_in in + letb h := f_fold (f_into_iter (Build_t_Range (f_start := ret_both (0 : int32)) (f_end := ret_both (8 : int32)))) h (fun h => fun i => + update_at h i ((h.a[i]) .+ (h_in.a[i]))) in + solve_lift h : both t_Hash. +Fail Next Obligation. + +Equations hash (msg : both (t_Seq t_U8)) : both t_Sha256Digest := + hash msg := + letb h := v_HASH_INIT in + letb last_block := impl__Block__new (ret_both (tt : 'unit)) in + letb last_block_len := ret_both (0 : uint_size) in + letb '(h,last_block,last_block_len) := f_fold (f_into_iter (Build_t_Range (f_start := ret_both (0 : uint_size)) (f_end := impl_41__num_chunks msg v_BLOCK_SIZE))) (prod_b (h,last_block,last_block_len)) (fun '(h,last_block,last_block_len) => fun i => + letb '(block_len,block) := impl_41__get_chunk msg v_BLOCK_SIZE i in + ifb block_len <.? v_BLOCK_SIZE + then letb last_block := f_update_start (impl__Block__new (ret_both (tt : 'unit))) block in + letb last_block_len := block_len in + prod_b (h,last_block,last_block_len) + else letb compress_input := impl__Block__from_seq block in + letb h := compress compress_input h in + prod_b (h,last_block,last_block_len)) in + letb last_block := update_at_usize last_block last_block_len (U8 (ret_both (128 : int8))) in + letb len_bist := U64 (cast_int (WS2 := _) ((impl_41__len msg) .* (ret_both (8 : uint_size)))) in + letb '(h,last_block) := ifb last_block_len <.? (v_BLOCK_SIZE .- v_LEN_SIZE) + then letb last_block := f_update last_block (v_BLOCK_SIZE .- v_LEN_SIZE) (v_U64_to_be_bytes len_bist) in + letb h := compress last_block h in + prod_b (h,last_block) + else letb pad_block := impl__Block__new (ret_both (tt : 'unit)) in + letb pad_block := f_update pad_block (v_BLOCK_SIZE .- v_LEN_SIZE) (v_U64_to_be_bytes len_bist) in + letb h := compress last_block h in + letb h := compress pad_block h in + prod_b (h,last_block) in + solve_lift (impl__Sha256Digest__from_seq (impl__Hash__to_be_bytes h)) : both t_Sha256Digest. +Fail Next Obligation. + +Equations sha256 (msg : both (t_Seq t_U8)) : both t_Sha256Digest := + sha256 msg := + solve_lift (hash msg) : both t_Sha256Digest. +Fail Next Obligation. diff --git a/sha512/proofs/coq/extraction/Hacspec_sha512.v b/sha512/proofs/coq/extraction/Hacspec_sha512.v new file mode 100644 index 0000000..5d0f9cf --- /dev/null +++ b/sha512/proofs/coq/extraction/Hacspec_sha512.v @@ -0,0 +1,250 @@ +(* File automatically generated by Hacspec *) +From Hacspec Require Import Hacspec_Lib MachineIntegers. +From Coq Require Import ZArith. +Import List.ListNotations. +Open Scope Z_scope. +Open Scope bool_scope. + +Require Import Hacspec_lib. + +Notation Block_t := (nseq int8 BLOCK_SIZE). +Definition Block : Block_t -> Block_t := + id. + +Notation Hash_t := (nseq int64 8). +Definition Hash : Hash_t -> Hash_t := + id. + +Notation OpTableType_t := (nseq int32 12). +Definition OpTableType : OpTableType_t -> OpTableType_t := + id. + +Notation RoundConstantsTable_t := (nseq int64 K_SIZE). +Definition RoundConstantsTable : RoundConstantsTable_t -> RoundConstantsTable_t := + id. + +Notation Sha512Digest_t := (nseq int8 HASH_SIZE). +Definition Sha512Digest : Sha512Digest_t -> Sha512Digest_t := + id. + +(*Not implemented yet? todo(item)*) + +Definition v_BLOCK_SIZE : uint_size := + (@repr WORDSIZE32 128). + +Definition v_HASH_SIZE : uint_size := + (@repr WORDSIZE32 512)./(@repr WORDSIZE32 8). + +Definition v_K_SIZE : uint_size := + (@repr WORDSIZE32 80). + +Definition v_LEN_SIZE : uint_size := + (@repr WORDSIZE32 16). + +Definition v_OP_TABLE : t_OpTableType_t := + OpTableType (array_from_list [(@repr WORDSIZE32 28); + (@repr WORDSIZE32 34); + (@repr WORDSIZE32 39); + (@repr WORDSIZE32 14); + (@repr WORDSIZE32 18); + (@repr WORDSIZE32 41); + (@repr WORDSIZE32 1); + (@repr WORDSIZE32 8); + (@repr WORDSIZE32 7); + (@repr WORDSIZE32 19); + (@repr WORDSIZE32 61); + (@repr WORDSIZE32 6)]). + +Definition ch (x : t_U64_t) (y : t_U64_t) (z : t_U64_t) : t_U64_t := + (x.&y).^((f_not x).&z). + +Definition maj (x : t_U64_t) (y : t_U64_t) (z : t_U64_t) : t_U64_t := + (x.&y).^((x.&z).^(y.&z)). + +Definition sigma (x : t_U64_t) (i : uint_size) (op : uint_size) : t_U64_t := + let tmp := (impl__U64__rotate_right x (v_OP_TABLE.[(((@repr WORDSIZE32 3).*i).+(@repr WORDSIZE32 2))])) : t_U64_t in + let tmp := (if + op=.?(@repr WORDSIZE32 0) + then + x shift_right (v_OP_TABLE.[(((@repr WORDSIZE32 3).*i).+(@repr WORDSIZE32 2))]) + else + tmp) : t_U64_t in + ((impl__U64__rotate_right x (v_OP_TABLE.[((@repr WORDSIZE32 3).*i)])).^(impl__U64__rotate_right x (v_OP_TABLE.[(((@repr WORDSIZE32 3).*i).+(@repr WORDSIZE32 1))]))).^tmp. + +Definition schedule (block : t_Block_t) : t_RoundConstantsTable_t := + let b := (impl__Block__to_be_U64s block) : t_Seq_t t_U64_t in + let s := (impl__RoundConstantsTable__new) : t_RoundConstantsTable_t in + let s := (f_fold (f_into_iter (Build_Range (@repr WORDSIZE32 0)v_K_SIZE)) s (fun s i => + if + i<.?(@repr WORDSIZE32 16) + then + let s := (update_at_usize s i (b.[i])) : t_RoundConstantsTable_t in + s + else + let t16 := (s.[(i.-(@repr WORDSIZE32 16))]) : t_U64_t in + let t15 := (s.[(i.-(@repr WORDSIZE32 15))]) : t_U64_t in + let t7 := (s.[(i.-(@repr WORDSIZE32 7))]) : t_U64_t in + let t2 := (s.[(i.-(@repr WORDSIZE32 2))]) : t_U64_t in + let s1 := (sigma t2 (@repr WORDSIZE32 3) (@repr WORDSIZE32 0)) : t_U64_t in + let s0 := (sigma t15 (@repr WORDSIZE32 2) (@repr WORDSIZE32 0)) : t_U64_t in + let s := (update_at_usize s i (((s1.+t7).+s0).+t16)) : t_RoundConstantsTable_t in + s)) : t_RoundConstantsTable_t in + s. + +Definition v_HASH_INIT : t_Hash_t := + Hash (array_from_list [U64 (@repr WORDSIZE64 7640891576956012808); + U64 (@repr WORDSIZE64 13503953896175478587); + U64 (@repr WORDSIZE64 4354685564936845355); + U64 (@repr WORDSIZE64 11912009170470909681); + U64 (@repr WORDSIZE64 5840696475078001361); + U64 (@repr WORDSIZE64 11170449401992604703); + U64 (@repr WORDSIZE64 2270897969802886507); + U64 (@repr WORDSIZE64 6620516959819538809)]). + +Definition v_K_TABLE : t_RoundConstantsTable_t := + RoundConstantsTable (array_from_list [U64 (@repr WORDSIZE64 4794697086780616226); + U64 (@repr WORDSIZE64 8158064640168781261); + U64 (@repr WORDSIZE64 13096744586834688815); + U64 (@repr WORDSIZE64 16840607885511220156); + U64 (@repr WORDSIZE64 4131703408338449720); + U64 (@repr WORDSIZE64 6480981068601479193); + U64 (@repr WORDSIZE64 10538285296894168987); + U64 (@repr WORDSIZE64 12329834152419229976); + U64 (@repr WORDSIZE64 15566598209576043074); + U64 (@repr WORDSIZE64 1334009975649890238); + U64 (@repr WORDSIZE64 2608012711638119052); + U64 (@repr WORDSIZE64 6128411473006802146); + U64 (@repr WORDSIZE64 8268148722764581231); + U64 (@repr WORDSIZE64 9286055187155687089); + U64 (@repr WORDSIZE64 11230858885718282805); + U64 (@repr WORDSIZE64 13951009754708518548); + U64 (@repr WORDSIZE64 16472876342353939154); + U64 (@repr WORDSIZE64 17275323862435702243); + U64 (@repr WORDSIZE64 1135362057144423861); + U64 (@repr WORDSIZE64 2597628984639134821); + U64 (@repr WORDSIZE64 3308224258029322869); + U64 (@repr WORDSIZE64 5365058923640841347); + U64 (@repr WORDSIZE64 6679025012923562964); + U64 (@repr WORDSIZE64 8573033837759648693); + U64 (@repr WORDSIZE64 10970295158949994411); + U64 (@repr WORDSIZE64 12119686244451234320); + U64 (@repr WORDSIZE64 12683024718118986047); + U64 (@repr WORDSIZE64 13788192230050041572); + U64 (@repr WORDSIZE64 14330467153632333762); + U64 (@repr WORDSIZE64 15395433587784984357); + U64 (@repr WORDSIZE64 489312712824947311); + U64 (@repr WORDSIZE64 1452737877330783856); + U64 (@repr WORDSIZE64 2861767655752347644); + U64 (@repr WORDSIZE64 3322285676063803686); + U64 (@repr WORDSIZE64 5560940570517711597); + U64 (@repr WORDSIZE64 5996557281743188959); + U64 (@repr WORDSIZE64 7280758554555802590); + U64 (@repr WORDSIZE64 8532644243296465576); + U64 (@repr WORDSIZE64 9350256976987008742); + U64 (@repr WORDSIZE64 10552545826968843579); + U64 (@repr WORDSIZE64 11727347734174303076); + U64 (@repr WORDSIZE64 12113106623233404929); + U64 (@repr WORDSIZE64 14000437183269869457); + U64 (@repr WORDSIZE64 14369950271660146224); + U64 (@repr WORDSIZE64 15101387698204529176); + U64 (@repr WORDSIZE64 15463397548674623760); + U64 (@repr WORDSIZE64 17586052441742319658); + U64 (@repr WORDSIZE64 1182934255886127544); + U64 (@repr WORDSIZE64 1847814050463011016); + U64 (@repr WORDSIZE64 2177327727835720531); + U64 (@repr WORDSIZE64 2830643537854262169); + U64 (@repr WORDSIZE64 3796741975233480872); + U64 (@repr WORDSIZE64 4115178125766777443); + U64 (@repr WORDSIZE64 5681478168544905931); + U64 (@repr WORDSIZE64 6601373596472566643); + U64 (@repr WORDSIZE64 7507060721942968483); + U64 (@repr WORDSIZE64 8399075790359081724); + U64 (@repr WORDSIZE64 8693463985226723168); + U64 (@repr WORDSIZE64 9568029438360202098); + U64 (@repr WORDSIZE64 10144078919501101548); + U64 (@repr WORDSIZE64 10430055236837252648); + U64 (@repr WORDSIZE64 11840083180663258601); + U64 (@repr WORDSIZE64 13761210420658862357); + U64 (@repr WORDSIZE64 14299343276471374635); + U64 (@repr WORDSIZE64 14566680578165727644); + U64 (@repr WORDSIZE64 15097957966210449927); + U64 (@repr WORDSIZE64 16922976911328602910); + U64 (@repr WORDSIZE64 17689382322260857208); + U64 (@repr WORDSIZE64 500013540394364858); + U64 (@repr WORDSIZE64 748580250866718886); + U64 (@repr WORDSIZE64 1242879168328830382); + U64 (@repr WORDSIZE64 1977374033974150939); + U64 (@repr WORDSIZE64 2944078676154940804); + U64 (@repr WORDSIZE64 3659926193048069267); + U64 (@repr WORDSIZE64 4368137639120453308); + U64 (@repr WORDSIZE64 4836135668995329356); + U64 (@repr WORDSIZE64 5532061633213252278); + U64 (@repr WORDSIZE64 6448918945643986474); + U64 (@repr WORDSIZE64 6902733635092675308); + U64 (@repr WORDSIZE64 7801388544844847127)]). + +Definition shuffle (ws : t_RoundConstantsTable_t) (hashi : t_Hash_t) : t_Hash_t := + let h := (hashi) : t_Hash_t in + let h := (f_fold (f_into_iter (Build_Range (@repr WORDSIZE32 0)v_K_SIZE)) h (fun h i => + let a0 := (h.[(@repr WORDSIZE32 0)]) : t_U64_t in + let b0 := (h.[(@repr WORDSIZE32 1)]) : t_U64_t in + let c0 := (h.[(@repr WORDSIZE32 2)]) : t_U64_t in + let d0 := (h.[(@repr WORDSIZE32 3)]) : t_U64_t in + let e0 := (h.[(@repr WORDSIZE32 4)]) : t_U64_t in + let f0 := (h.[(@repr WORDSIZE32 5)]) : t_U64_t in + let g0 := (h.[(@repr WORDSIZE32 6)]) : t_U64_t in + let h0 := (h.[(@repr WORDSIZE32 7)]) : t_U64_t in + let t1 := ((((h0.+(sigma e0 (@repr WORDSIZE32 1) (@repr WORDSIZE32 1))).+(ch e0 f0 g0)).+(v_K_TABLE.[i])).+(ws.[i])) : t_U64_t in + let t2 := ((sigma a0 (@repr WORDSIZE32 0) (@repr WORDSIZE32 1)).+(maj a0 b0 c0)) : t_U64_t in + let h := (update_at h (@repr WORDSIZE32 0) (t1.+t2)) : t_Hash_t in + let h := (update_at h (@repr WORDSIZE32 1) a0) : t_Hash_t in + let h := (update_at h (@repr WORDSIZE32 2) b0) : t_Hash_t in + let h := (update_at h (@repr WORDSIZE32 3) c0) : t_Hash_t in + let h := (update_at h (@repr WORDSIZE32 4) (d0.+t1)) : t_Hash_t in + let h := (update_at h (@repr WORDSIZE32 5) e0) : t_Hash_t in + let h := (update_at h (@repr WORDSIZE32 6) f0) : t_Hash_t in + let h := (update_at h (@repr WORDSIZE32 7) g0) : t_Hash_t in + h)) : t_Hash_t in + h. + +Definition compress (block : t_Block_t) (h_in : t_Hash_t) : t_Hash_t := + let s := (schedule block) : t_RoundConstantsTable_t in + let h := (shuffle s h_in) : t_Hash_t in + let h := (f_fold (f_into_iter (Build_Range (@repr WORDSIZE32 0)(@repr WORDSIZE32 8))) h (fun h i => + update_at h i ((h.[i]).+(h_in.[i])))) : t_Hash_t in + h. + +Definition hash (msg : t_Seq_t t_U8_t) : t_Sha512Digest_t := + let h := (v_HASH_INIT) : t_Hash_t in + let last_block := (impl__Block__new) : t_Block_t in + let last_block_len := ((@repr WORDSIZE32 0)) : uint_size in + let '(h,last_block,last_block_len) := (f_fold (f_into_iter (Build_Range (@repr WORDSIZE32 0)(impl_41__num_chunks msg v_BLOCK_SIZE))) (h,last_block,last_block_len) (fun '(h,last_block,last_block_len) i => + let '(block_len,block) := (impl_41__get_chunk msg v_BLOCK_SIZE i) : (uint_size × t_Seq_t t_U8_t) in + if + block_len<.?v_BLOCK_SIZE + then + let last_block := (f_update_start impl__Block__new block) : t_Block_t in + let last_block_len := (block_len) : uint_size in + (h,last_block,last_block_len) + else + let compress_input := (impl__Block__from_seq block) : t_Block_t in + let h := (compress compress_input h) : t_Hash_t in + (h,last_block,last_block_len))) : (t_Hash_t × t_Block_t × uint_size) in + let last_block := (update_at_usize last_block last_block_len (U8 (@repr WORDSIZE8 128))) : t_Block_t in + let len_bist := (U128 (cast ((impl_41__len msg).*(@repr WORDSIZE32 8)))) : t_U128_t in + let '(h,last_block) := (if + last_block_len<.?(v_BLOCK_SIZE.-v_LEN_SIZE) + then + let last_block := (f_update last_block (v_BLOCK_SIZE.-v_LEN_SIZE) (v_U128_to_be_bytes len_bist)) : t_Block_t in + let h := (compress last_block h) : t_Hash_t in + (h,last_block) + else + let pad_block := (impl__Block__new) : t_Block_t in + let pad_block := (f_update pad_block (v_BLOCK_SIZE.-v_LEN_SIZE) (v_U128_to_be_bytes len_bist)) : t_Block_t in + let h := (compress last_block h) : t_Hash_t in + let h := (compress pad_block h) : t_Hash_t in + (h,last_block)) : (t_Hash_t × t_Block_t) in + impl__Sha512Digest__from_seq (impl__Hash__to_be_bytes h). + +Definition sha512 (msg : t_Seq_t t_U8_t) : t_Sha512Digest_t := + hash msg. diff --git a/sha512/proofs/ssprove/extraction/Hacspec_sha512.v b/sha512/proofs/ssprove/extraction/Hacspec_sha512.v new file mode 100644 index 0000000..ea50f46 --- /dev/null +++ b/sha512/proofs/ssprove/extraction/Hacspec_sha512.v @@ -0,0 +1,288 @@ +(* File automatically generated by Hacspec *) +Set Warnings "-notation-overridden,-ambiguous-paths". +From Crypt Require Import choice_type Package Prelude. +Import PackageNotation. +From extructures Require Import ord fset. +From mathcomp Require Import word_ssrZ word. +(* From Jasmin Require Import word. *) + +From Coq Require Import ZArith. +From Coq Require Import Strings.String. +Import List.ListNotations. +Open Scope list_scope. +Open Scope Z_scope. +Open Scope bool_scope. + +From Hacspec Require Import ChoiceEquality. +From Hacspec Require Import LocationUtility. +From Hacspec Require Import Hacspec_Lib_Comparable. +From Hacspec Require Import Hacspec_Lib_Pre. +From Hacspec Require Import Hacspec_Lib. + +Open Scope hacspec_scope. +Import choice.Choice.Exports. + +Obligation Tactic := (* try timeout 8 *) solve_ssprove_obligations. + +Require Import Hacspec_lib. +Export Hacspec_lib. + +Notation "'t_Block'" := (nseq int8 BLOCK_SIZE). +Definition Block : both t_Block -> both t_Block := + id. + +Notation "'t_Hash'" := (nseq int64 8). +Definition Hash : both t_Hash -> both t_Hash := + id. + +Notation "'t_OpTableType'" := (nseq int32 12). +Definition OpTableType : both t_OpTableType -> both t_OpTableType := + id. + +Notation "'t_RoundConstantsTable'" := (nseq int64 K_SIZE). +Definition RoundConstantsTable : both t_RoundConstantsTable -> both t_RoundConstantsTable := + id. + +Notation "'t_Sha512Digest'" := (nseq int8 HASH_SIZE). +Definition Sha512Digest : both t_Sha512Digest -> both t_Sha512Digest := + id. + +(*Not implemented yet? todo(item)*) + +Equations v_BLOCK_SIZE : both uint_size := + v_BLOCK_SIZE := + solve_lift (ret_both (128 : uint_size)) : both uint_size. +Fail Next Obligation. + +Equations v_HASH_SIZE : both uint_size := + v_HASH_SIZE := + solve_lift ((ret_both (512 : uint_size)) ./ (ret_both (8 : uint_size))) : both uint_size. +Fail Next Obligation. + +Equations v_K_SIZE : both uint_size := + v_K_SIZE := + solve_lift (ret_both (80 : uint_size)) : both uint_size. +Fail Next Obligation. + +Equations v_LEN_SIZE : both uint_size := + v_LEN_SIZE := + solve_lift (ret_both (16 : uint_size)) : both uint_size. +Fail Next Obligation. + +Equations v_OP_TABLE : both t_OpTableType := + v_OP_TABLE := + OpTableType (array_from_list [solve_lift (ret_both (28 : uint_size)); + solve_lift (ret_both (34 : uint_size)); + solve_lift (ret_both (39 : uint_size)); + solve_lift (ret_both (14 : uint_size)); + solve_lift (ret_both (18 : uint_size)); + solve_lift (ret_both (41 : uint_size)); + solve_lift (ret_both (1 : uint_size)); + solve_lift (ret_both (8 : uint_size)); + solve_lift (ret_both (7 : uint_size)); + solve_lift (ret_both (19 : uint_size)); + solve_lift (ret_both (61 : uint_size)); + solve_lift (ret_both (6 : uint_size))]) : both t_OpTableType. +Fail Next Obligation. + +Equations ch (x : both t_U64) (y : both t_U64) (z : both t_U64) : both t_U64 := + ch x y z := + solve_lift ((x .& y) .^ ((f_not x) .& z)) : both t_U64. +Fail Next Obligation. + +Equations maj (x : both t_U64) (y : both t_U64) (z : both t_U64) : both t_U64 := + maj x y z := + solve_lift ((x .& y) .^ ((x .& z) .^ (y .& z))) : both t_U64. +Fail Next Obligation. + +Equations sigma (x : both t_U64) (i : both uint_size) (op : both uint_size) : both t_U64 := + sigma x i op := + letb (tmp : t_U64) := impl__U64__rotate_right x (v_OP_TABLE.a[(((ret_both (3 : uint_size)) .* i) .+ (ret_both (2 : uint_size)))]) in + letb tmp := ifb op =.? (ret_both (0 : uint_size)) + then x shift_right (v_OP_TABLE.a[(((ret_both (3 : uint_size)) .* i) .+ (ret_both (2 : uint_size)))]) + else tmp in + solve_lift (((impl__U64__rotate_right x (v_OP_TABLE.a[((ret_both (3 : uint_size)) .* i)])) .^ (impl__U64__rotate_right x (v_OP_TABLE.a[(((ret_both (3 : uint_size)) .* i) .+ (ret_both (1 : uint_size)))]))) .^ tmp) : both t_U64. +Fail Next Obligation. + +Equations schedule (block : both t_Block) : both t_RoundConstantsTable := + schedule block := + letb b := impl__Block__to_be_U64s block in + letb s := impl__RoundConstantsTable__new (ret_both (tt : 'unit)) in + letb s := f_fold (f_into_iter (Build_t_Range (f_start := ret_both (0 : uint_size)) (f_end := v_K_SIZE))) s (fun s => fun i => + ifb i <.? (ret_both (16 : uint_size)) + then letb s := update_at_usize s i (b.a[i]) in + s + else letb t16 := s.a[(i .- (ret_both (16 : uint_size)))] in + letb t15 := s.a[(i .- (ret_both (15 : uint_size)))] in + letb t7 := s.a[(i .- (ret_both (7 : uint_size)))] in + letb t2 := s.a[(i .- (ret_both (2 : uint_size)))] in + letb s1 := sigma t2 (ret_both (3 : uint_size)) (ret_both (0 : uint_size)) in + letb s0 := sigma t15 (ret_both (2 : uint_size)) (ret_both (0 : uint_size)) in + letb s := update_at_usize s i (((s1 .+ t7) .+ s0) .+ t16) in + s) in + solve_lift s : both t_RoundConstantsTable. +Fail Next Obligation. + +Equations v_HASH_INIT : both t_Hash := + v_HASH_INIT := + Hash (array_from_list [U64 (solve_lift (ret_both (7640891576956012808 : int64))); + U64 (solve_lift (ret_both (13503953896175478587 : int64))); + U64 (solve_lift (ret_both (4354685564936845355 : int64))); + U64 (solve_lift (ret_both (11912009170470909681 : int64))); + U64 (solve_lift (ret_both (5840696475078001361 : int64))); + U64 (solve_lift (ret_both (11170449401992604703 : int64))); + U64 (solve_lift (ret_both (2270897969802886507 : int64))); + U64 (solve_lift (ret_both (6620516959819538809 : int64)))]) : both t_Hash. +Fail Next Obligation. + +Equations v_K_TABLE : both t_RoundConstantsTable := + v_K_TABLE := + RoundConstantsTable (array_from_list [U64 (solve_lift (ret_both (4794697086780616226 : int64))); + U64 (solve_lift (ret_both (8158064640168781261 : int64))); + U64 (solve_lift (ret_both (13096744586834688815 : int64))); + U64 (solve_lift (ret_both (16840607885511220156 : int64))); + U64 (solve_lift (ret_both (4131703408338449720 : int64))); + U64 (solve_lift (ret_both (6480981068601479193 : int64))); + U64 (solve_lift (ret_both (10538285296894168987 : int64))); + U64 (solve_lift (ret_both (12329834152419229976 : int64))); + U64 (solve_lift (ret_both (15566598209576043074 : int64))); + U64 (solve_lift (ret_both (1334009975649890238 : int64))); + U64 (solve_lift (ret_both (2608012711638119052 : int64))); + U64 (solve_lift (ret_both (6128411473006802146 : int64))); + U64 (solve_lift (ret_both (8268148722764581231 : int64))); + U64 (solve_lift (ret_both (9286055187155687089 : int64))); + U64 (solve_lift (ret_both (11230858885718282805 : int64))); + U64 (solve_lift (ret_both (13951009754708518548 : int64))); + U64 (solve_lift (ret_both (16472876342353939154 : int64))); + U64 (solve_lift (ret_both (17275323862435702243 : int64))); + U64 (solve_lift (ret_both (1135362057144423861 : int64))); + U64 (solve_lift (ret_both (2597628984639134821 : int64))); + U64 (solve_lift (ret_both (3308224258029322869 : int64))); + U64 (solve_lift (ret_both (5365058923640841347 : int64))); + U64 (solve_lift (ret_both (6679025012923562964 : int64))); + U64 (solve_lift (ret_both (8573033837759648693 : int64))); + U64 (solve_lift (ret_both (10970295158949994411 : int64))); + U64 (solve_lift (ret_both (12119686244451234320 : int64))); + U64 (solve_lift (ret_both (12683024718118986047 : int64))); + U64 (solve_lift (ret_both (13788192230050041572 : int64))); + U64 (solve_lift (ret_both (14330467153632333762 : int64))); + U64 (solve_lift (ret_both (15395433587784984357 : int64))); + U64 (solve_lift (ret_both (489312712824947311 : int64))); + U64 (solve_lift (ret_both (1452737877330783856 : int64))); + U64 (solve_lift (ret_both (2861767655752347644 : int64))); + U64 (solve_lift (ret_both (3322285676063803686 : int64))); + U64 (solve_lift (ret_both (5560940570517711597 : int64))); + U64 (solve_lift (ret_both (5996557281743188959 : int64))); + U64 (solve_lift (ret_both (7280758554555802590 : int64))); + U64 (solve_lift (ret_both (8532644243296465576 : int64))); + U64 (solve_lift (ret_both (9350256976987008742 : int64))); + U64 (solve_lift (ret_both (10552545826968843579 : int64))); + U64 (solve_lift (ret_both (11727347734174303076 : int64))); + U64 (solve_lift (ret_both (12113106623233404929 : int64))); + U64 (solve_lift (ret_both (14000437183269869457 : int64))); + U64 (solve_lift (ret_both (14369950271660146224 : int64))); + U64 (solve_lift (ret_both (15101387698204529176 : int64))); + U64 (solve_lift (ret_both (15463397548674623760 : int64))); + U64 (solve_lift (ret_both (17586052441742319658 : int64))); + U64 (solve_lift (ret_both (1182934255886127544 : int64))); + U64 (solve_lift (ret_both (1847814050463011016 : int64))); + U64 (solve_lift (ret_both (2177327727835720531 : int64))); + U64 (solve_lift (ret_both (2830643537854262169 : int64))); + U64 (solve_lift (ret_both (3796741975233480872 : int64))); + U64 (solve_lift (ret_both (4115178125766777443 : int64))); + U64 (solve_lift (ret_both (5681478168544905931 : int64))); + U64 (solve_lift (ret_both (6601373596472566643 : int64))); + U64 (solve_lift (ret_both (7507060721942968483 : int64))); + U64 (solve_lift (ret_both (8399075790359081724 : int64))); + U64 (solve_lift (ret_both (8693463985226723168 : int64))); + U64 (solve_lift (ret_both (9568029438360202098 : int64))); + U64 (solve_lift (ret_both (10144078919501101548 : int64))); + U64 (solve_lift (ret_both (10430055236837252648 : int64))); + U64 (solve_lift (ret_both (11840083180663258601 : int64))); + U64 (solve_lift (ret_both (13761210420658862357 : int64))); + U64 (solve_lift (ret_both (14299343276471374635 : int64))); + U64 (solve_lift (ret_both (14566680578165727644 : int64))); + U64 (solve_lift (ret_both (15097957966210449927 : int64))); + U64 (solve_lift (ret_both (16922976911328602910 : int64))); + U64 (solve_lift (ret_both (17689382322260857208 : int64))); + U64 (solve_lift (ret_both (500013540394364858 : int64))); + U64 (solve_lift (ret_both (748580250866718886 : int64))); + U64 (solve_lift (ret_both (1242879168328830382 : int64))); + U64 (solve_lift (ret_both (1977374033974150939 : int64))); + U64 (solve_lift (ret_both (2944078676154940804 : int64))); + U64 (solve_lift (ret_both (3659926193048069267 : int64))); + U64 (solve_lift (ret_both (4368137639120453308 : int64))); + U64 (solve_lift (ret_both (4836135668995329356 : int64))); + U64 (solve_lift (ret_both (5532061633213252278 : int64))); + U64 (solve_lift (ret_both (6448918945643986474 : int64))); + U64 (solve_lift (ret_both (6902733635092675308 : int64))); + U64 (solve_lift (ret_both (7801388544844847127 : int64)))]) : both t_RoundConstantsTable. +Fail Next Obligation. + +Equations shuffle (ws : both t_RoundConstantsTable) (hashi : both t_Hash) : both t_Hash := + shuffle ws hashi := + letb h := hashi in + letb h := f_fold (f_into_iter (Build_t_Range (f_start := ret_both (0 : uint_size)) (f_end := v_K_SIZE))) h (fun h => fun i => + letb a0 := h.a[(ret_both (0 : int32))] in + letb b0 := h.a[(ret_both (1 : int32))] in + letb c0 := h.a[(ret_both (2 : int32))] in + letb d0 := h.a[(ret_both (3 : int32))] in + letb e0 := h.a[(ret_both (4 : int32))] in + letb f0 := h.a[(ret_both (5 : int32))] in + letb g0 := h.a[(ret_both (6 : int32))] in + letb (h0 : t_U64) := h.a[(ret_both (7 : int32))] in + letb t1 := (((h0 .+ (sigma e0 (ret_both (1 : uint_size)) (ret_both (1 : uint_size)))) .+ (ch e0 f0 g0)) .+ (v_K_TABLE.a[i])) .+ (ws.a[i]) in + letb t2 := (sigma a0 (ret_both (0 : uint_size)) (ret_both (1 : uint_size))) .+ (maj a0 b0 c0) in + letb h := update_at h (ret_both (0 : int32)) (t1 .+ t2) in + letb h := update_at h (ret_both (1 : int32)) a0 in + letb h := update_at h (ret_both (2 : int32)) b0 in + letb h := update_at h (ret_both (3 : int32)) c0 in + letb h := update_at h (ret_both (4 : int32)) (d0 .+ t1) in + letb h := update_at h (ret_both (5 : int32)) e0 in + letb h := update_at h (ret_both (6 : int32)) f0 in + letb h := update_at h (ret_both (7 : int32)) g0 in + h) in + solve_lift h : both t_Hash. +Fail Next Obligation. + +Equations compress (block : both t_Block) (h_in : both t_Hash) : both t_Hash := + compress block h_in := + letb s := schedule block in + letb h := shuffle s h_in in + letb h := f_fold (f_into_iter (Build_t_Range (f_start := ret_both (0 : int32)) (f_end := ret_both (8 : int32)))) h (fun h => fun i => + update_at h i ((h.a[i]) .+ (h_in.a[i]))) in + solve_lift h : both t_Hash. +Fail Next Obligation. + +Equations hash (msg : both (t_Seq t_U8)) : both t_Sha512Digest := + hash msg := + letb h := v_HASH_INIT in + letb last_block := impl__Block__new (ret_both (tt : 'unit)) in + letb last_block_len := ret_both (0 : uint_size) in + letb '(h,last_block,last_block_len) := f_fold (f_into_iter (Build_t_Range (f_start := ret_both (0 : uint_size)) (f_end := impl_41__num_chunks msg v_BLOCK_SIZE))) (prod_b (h,last_block,last_block_len)) (fun '(h,last_block,last_block_len) => fun i => + letb '(block_len,block) := impl_41__get_chunk msg v_BLOCK_SIZE i in + ifb block_len <.? v_BLOCK_SIZE + then letb last_block := f_update_start (impl__Block__new (ret_both (tt : 'unit))) block in + letb last_block_len := block_len in + prod_b (h,last_block,last_block_len) + else letb compress_input := impl__Block__from_seq block in + letb h := compress compress_input h in + prod_b (h,last_block,last_block_len)) in + letb last_block := update_at_usize last_block last_block_len (U8 (ret_both (128 : int8))) in + letb len_bist := U128 (cast_int (WS2 := _) ((impl_41__len msg) .* (ret_both (8 : uint_size)))) in + letb '(h,last_block) := ifb last_block_len <.? (v_BLOCK_SIZE .- v_LEN_SIZE) + then letb last_block := f_update last_block (v_BLOCK_SIZE .- v_LEN_SIZE) (v_U128_to_be_bytes len_bist) in + letb h := compress last_block h in + prod_b (h,last_block) + else letb pad_block := impl__Block__new (ret_both (tt : 'unit)) in + letb pad_block := f_update pad_block (v_BLOCK_SIZE .- v_LEN_SIZE) (v_U128_to_be_bytes len_bist) in + letb h := compress last_block h in + letb h := compress pad_block h in + prod_b (h,last_block) in + solve_lift (impl__Sha512Digest__from_seq (impl__Hash__to_be_bytes h)) : both t_Sha512Digest. +Fail Next Obligation. + +Equations sha512 (msg : both (t_Seq t_U8)) : both t_Sha512Digest := + sha512 msg := + solve_lift (hash msg) : both t_Sha512Digest. +Fail Next Obligation.