//! > Test recursive call.

//! > test_runner_name
test_function_lowering_phases

//! > function
fn foo() {
  match Option::<felt252>::None {
     Option::Some(_) => panic(Default::default()),
     Option::None => foo(),
  }
}

//! > function_name
foo

//! > module_code

//! > semantic_diagnostics

//! > lowering_diagnostics

//! > before_all
Parameters:
blk0 (root):
Statements:
  (v0: ()) <- struct_construct()
  (v1: core::option::Option::<core::felt252>) <- Option::None(v0)
End:
  Match(match_enum(v1) {
    Option::Some(v2) => blk1,
    Option::None(v6) => blk2,
  })

blk1:
Statements:
  (v3: core::array::Array::<core::felt252>) <- core::array::ArrayDefault::<core::felt252>::default()
  (v4: core::panics::Panic) <- struct_construct()
  (v5: (core::panics::Panic, core::array::Array::<core::felt252>)) <- struct_construct(v4, v3)
End:
  Panic(v5)

blk2:
Statements:
  (v7: ()) <- test::foo()
End:
  Goto(blk3, {v7 -> v8})

blk3:
Statements:
End:
  Return(v8)

//! > after_inlining
Parameters:
blk0 (root):
Statements:
  (v0: ()) <- struct_construct()
  (v1: core::option::Option::<core::felt252>) <- Option::None(v0)
End:
  Match(match_enum(v1) {
    Option::Some(v2) => blk1,
    Option::None(v6) => blk2,
  })

blk1:
Statements:
End:
  Goto(blk5, {})

blk2:
Statements:
  (v7: ()) <- test::foo()
End:
  Goto(blk3, {v7 -> v8})

blk3:
Statements:
End:
  Return(v8)

blk4:
Statements:
  (v4: core::panics::Panic) <- struct_construct()
  (v5: (core::panics::Panic, core::array::Array::<core::felt252>)) <- struct_construct(v4, v3)
End:
  Panic(v5)

blk5:
Statements:
End:
  Goto(blk7, {})

blk6:
Statements:
End:
  Goto(blk4, {v9 -> v3})

blk7:
Statements:
  (v10: core::array::Array::<core::felt252>) <- core::array::array_new::<core::felt252>()
End:
  Goto(blk6, {v10 -> v9})

//! > after_add_withdraw_gas
Parameters:
blk0 (root):
Statements:
  (v16: core::gas::BuiltinCosts) <- core::gas::get_builtin_costs()
End:
  Match(match core::gas::withdraw_gas_all(v16) {
    Option::Some => blk8,
    Option::None => blk9,
  })

blk1:
Statements:
End:
  Goto(blk5, {})

blk2:
Statements:
  (v7: ()) <- test::foo()
End:
  Goto(blk3, {v7 -> v8})

blk3:
Statements:
End:
  Return(v8)

blk4:
Statements:
  (v4: core::panics::Panic) <- struct_construct()
  (v5: (core::panics::Panic, core::array::Array::<core::felt252>)) <- struct_construct(v4, v3)
End:
  Panic(v5)

blk5:
Statements:
End:
  Goto(blk7, {})

blk6:
Statements:
End:
  Goto(blk4, {v9 -> v3})

blk7:
Statements:
  (v10: core::array::Array::<core::felt252>) <- core::array::array_new::<core::felt252>()
End:
  Goto(blk6, {v10 -> v9})

blk8:
Statements:
  (v0: ()) <- struct_construct()
  (v1: core::option::Option::<core::felt252>) <- Option::None(v0)
End:
  Match(match_enum(v1) {
    Option::Some(v2) => blk1,
    Option::None(v6) => blk2,
  })

blk9:
Statements:
  (v11: core::array::Array::<core::felt252>) <- core::array::array_new::<core::felt252>()
  (v12: core::felt252) <- 375233589013918064796019u
  (v14: core::array::Array::<core::felt252>) <- core::array::array_append::<core::felt252>(v11, v12)
  (v13: core::panics::Panic) <- struct_construct()
  (v15: (core::panics::Panic, core::array::Array::<core::felt252>)) <- struct_construct(v13, v14)
End:
  Panic(v15)

//! > after_lower_panics
Parameters:
blk0 (root):
Statements:
  (v16: core::gas::BuiltinCosts) <- core::gas::get_builtin_costs()
End:
  Match(match core::gas::withdraw_gas_all(v16) {
    Option::Some => blk8,
    Option::None => blk9,
  })

blk1:
Statements:
End:
  Goto(blk5, {})

blk2:
Statements:
  (v17: core::panics::PanicResult::<((),)>) <- test::foo()
End:
  Match(match_enum(v17) {
    PanicResult::Ok(v18) => blk11,
    PanicResult::Err(v20) => blk12,
  })

blk3:
Statements:
  (v21: ((),)) <- struct_construct(v8)
  (v22: core::panics::PanicResult::<((),)>) <- PanicResult::Ok(v21)
End:
  Return(v22)

blk4:
Statements:
  (v4: core::panics::Panic) <- struct_construct()
  (v5: (core::panics::Panic, core::array::Array::<core::felt252>)) <- struct_construct(v4, v3)
  (v23: core::panics::PanicResult::<((),)>) <- PanicResult::Err(v5)
End:
  Return(v23)

blk5:
Statements:
End:
  Goto(blk7, {})

blk6:
Statements:
End:
  Goto(blk4, {v9 -> v3})

blk7:
Statements:
  (v10: core::array::Array::<core::felt252>) <- core::array::array_new::<core::felt252>()
End:
  Goto(blk6, {v10 -> v9})

blk8:
Statements:
  (v0: ()) <- struct_construct()
  (v1: core::option::Option::<core::felt252>) <- Option::None(v0)
End:
  Match(match_enum(v1) {
    Option::Some(v2) => blk1,
    Option::None(v6) => blk2,
  })

blk9:
Statements:
  (v11: core::array::Array::<core::felt252>) <- core::array::array_new::<core::felt252>()
  (v12: core::felt252) <- 375233589013918064796019u
  (v14: core::array::Array::<core::felt252>) <- core::array::array_append::<core::felt252>(v11, v12)
  (v13: core::panics::Panic) <- struct_construct()
  (v15: (core::panics::Panic, core::array::Array::<core::felt252>)) <- struct_construct(v13, v14)
  (v24: core::panics::PanicResult::<((),)>) <- PanicResult::Err(v15)
End:
  Return(v24)

blk10:
Statements:
End:
  Goto(blk3, {v7 -> v8})

blk11:
Statements:
  (v19: ()) <- struct_destructure(v18)
End:
  Goto(blk10, {v19 -> v7})

blk12:
Statements:
  (v25: core::panics::PanicResult::<((),)>) <- PanicResult::Err(v20)
End:
  Return(v25)

//! > after_add_destructs
Parameters:
blk0 (root):
Statements:
  (v16: core::gas::BuiltinCosts) <- core::gas::get_builtin_costs()
End:
  Match(match core::gas::withdraw_gas_all(v16) {
    Option::Some => blk8,
    Option::None => blk9,
  })

blk1:
Statements:
End:
  Goto(blk5, {})

blk2:
Statements:
  (v17: core::panics::PanicResult::<((),)>) <- test::foo()
End:
  Match(match_enum(v17) {
    PanicResult::Ok(v18) => blk11,
    PanicResult::Err(v20) => blk12,
  })

blk3:
Statements:
  (v21: ((),)) <- struct_construct(v8)
  (v22: core::panics::PanicResult::<((),)>) <- PanicResult::Ok(v21)
End:
  Return(v22)

blk4:
Statements:
  (v4: core::panics::Panic) <- struct_construct()
  (v5: (core::panics::Panic, core::array::Array::<core::felt252>)) <- struct_construct(v4, v3)
  (v23: core::panics::PanicResult::<((),)>) <- PanicResult::Err(v5)
End:
  Return(v23)

blk5:
Statements:
End:
  Goto(blk7, {})

blk6:
Statements:
End:
  Goto(blk4, {v9 -> v3})

blk7:
Statements:
  (v10: core::array::Array::<core::felt252>) <- core::array::array_new::<core::felt252>()
End:
  Goto(blk6, {v10 -> v9})

blk8:
Statements:
  (v0: ()) <- struct_construct()
  (v1: core::option::Option::<core::felt252>) <- Option::None(v0)
End:
  Match(match_enum(v1) {
    Option::Some(v2) => blk1,
    Option::None(v6) => blk2,
  })

blk9:
Statements:
  (v11: core::array::Array::<core::felt252>) <- core::array::array_new::<core::felt252>()
  (v12: core::felt252) <- 375233589013918064796019u
  (v14: core::array::Array::<core::felt252>) <- core::array::array_append::<core::felt252>(v11, v12)
  (v13: core::panics::Panic) <- struct_construct()
  (v15: (core::panics::Panic, core::array::Array::<core::felt252>)) <- struct_construct(v13, v14)
  (v24: core::panics::PanicResult::<((),)>) <- PanicResult::Err(v15)
End:
  Return(v24)

blk10:
Statements:
End:
  Goto(blk3, {v7 -> v8})

blk11:
Statements:
  (v19: ()) <- struct_destructure(v18)
End:
  Goto(blk10, {v19 -> v7})

blk12:
Statements:
  (v25: core::panics::PanicResult::<((),)>) <- PanicResult::Err(v20)
End:
  Return(v25)

//! > after_optimize_remappings1
Parameters:
blk0 (root):
Statements:
  (v16: core::gas::BuiltinCosts) <- core::gas::get_builtin_costs()
End:
  Match(match core::gas::withdraw_gas_all(v16) {
    Option::Some => blk8,
    Option::None => blk9,
  })

blk1:
Statements:
End:
  Goto(blk5, {})

blk2:
Statements:
  (v17: core::panics::PanicResult::<((),)>) <- test::foo()
End:
  Match(match_enum(v17) {
    PanicResult::Ok(v18) => blk11,
    PanicResult::Err(v20) => blk12,
  })

blk3:
Statements:
  (v21: ((),)) <- struct_construct(v19)
  (v22: core::panics::PanicResult::<((),)>) <- PanicResult::Ok(v21)
End:
  Return(v22)

blk4:
Statements:
  (v4: core::panics::Panic) <- struct_construct()
  (v5: (core::panics::Panic, core::array::Array::<core::felt252>)) <- struct_construct(v4, v10)
  (v23: core::panics::PanicResult::<((),)>) <- PanicResult::Err(v5)
End:
  Return(v23)

blk5:
Statements:
End:
  Goto(blk7, {})

blk6:
Statements:
End:
  Goto(blk4, {})

blk7:
Statements:
  (v10: core::array::Array::<core::felt252>) <- core::array::array_new::<core::felt252>()
End:
  Goto(blk6, {})

blk8:
Statements:
  (v0: ()) <- struct_construct()
  (v1: core::option::Option::<core::felt252>) <- Option::None(v0)
End:
  Match(match_enum(v1) {
    Option::Some(v2) => blk1,
    Option::None(v6) => blk2,
  })

blk9:
Statements:
  (v11: core::array::Array::<core::felt252>) <- core::array::array_new::<core::felt252>()
  (v12: core::felt252) <- 375233589013918064796019u
  (v14: core::array::Array::<core::felt252>) <- core::array::array_append::<core::felt252>(v11, v12)
  (v13: core::panics::Panic) <- struct_construct()
  (v15: (core::panics::Panic, core::array::Array::<core::felt252>)) <- struct_construct(v13, v14)
  (v24: core::panics::PanicResult::<((),)>) <- PanicResult::Err(v15)
End:
  Return(v24)

blk10:
Statements:
End:
  Goto(blk3, {})

blk11:
Statements:
  (v19: ()) <- struct_destructure(v18)
End:
  Goto(blk10, {})

blk12:
Statements:
  (v25: core::panics::PanicResult::<((),)>) <- PanicResult::Err(v20)
End:
  Return(v25)

//! > after_reorder_statements1
Parameters:
blk0 (root):
Statements:
  (v16: core::gas::BuiltinCosts) <- core::gas::get_builtin_costs()
End:
  Match(match core::gas::withdraw_gas_all(v16) {
    Option::Some => blk8,
    Option::None => blk9,
  })

blk1:
Statements:
End:
  Goto(blk5, {})

blk2:
Statements:
  (v17: core::panics::PanicResult::<((),)>) <- test::foo()
End:
  Match(match_enum(v17) {
    PanicResult::Ok(v18) => blk11,
    PanicResult::Err(v20) => blk12,
  })

blk3:
Statements:
  (v19: ()) <- struct_destructure(v18)
  (v21: ((),)) <- struct_construct(v19)
  (v22: core::panics::PanicResult::<((),)>) <- PanicResult::Ok(v21)
End:
  Return(v22)

blk4:
Statements:
  (v4: core::panics::Panic) <- struct_construct()
  (v5: (core::panics::Panic, core::array::Array::<core::felt252>)) <- struct_construct(v4, v10)
  (v23: core::panics::PanicResult::<((),)>) <- PanicResult::Err(v5)
End:
  Return(v23)

blk5:
Statements:
End:
  Goto(blk7, {})

blk6:
Statements:
End:
  Goto(blk4, {})

blk7:
Statements:
  (v10: core::array::Array::<core::felt252>) <- core::array::array_new::<core::felt252>()
End:
  Goto(blk6, {})

blk8:
Statements:
  (v0: ()) <- struct_construct()
  (v1: core::option::Option::<core::felt252>) <- Option::None(v0)
End:
  Match(match_enum(v1) {
    Option::Some(v2) => blk1,
    Option::None(v6) => blk2,
  })

blk9:
Statements:
  (v11: core::array::Array::<core::felt252>) <- core::array::array_new::<core::felt252>()
  (v12: core::felt252) <- 375233589013918064796019u
  (v14: core::array::Array::<core::felt252>) <- core::array::array_append::<core::felt252>(v11, v12)
  (v13: core::panics::Panic) <- struct_construct()
  (v15: (core::panics::Panic, core::array::Array::<core::felt252>)) <- struct_construct(v13, v14)
  (v24: core::panics::PanicResult::<((),)>) <- PanicResult::Err(v15)
End:
  Return(v24)

blk10:
Statements:
End:
  Goto(blk3, {})

blk11:
Statements:
End:
  Goto(blk10, {})

blk12:
Statements:
  (v25: core::panics::PanicResult::<((),)>) <- PanicResult::Err(v20)
End:
  Return(v25)

//! > after_branch_inversion
Parameters:
blk0 (root):
Statements:
  (v16: core::gas::BuiltinCosts) <- core::gas::get_builtin_costs()
End:
  Match(match core::gas::withdraw_gas_all(v16) {
    Option::Some => blk8,
    Option::None => blk9,
  })

blk1:
Statements:
End:
  Goto(blk5, {})

blk2:
Statements:
  (v17: core::panics::PanicResult::<((),)>) <- test::foo()
End:
  Match(match_enum(v17) {
    PanicResult::Ok(v18) => blk11,
    PanicResult::Err(v20) => blk12,
  })

blk3:
Statements:
  (v19: ()) <- struct_destructure(v18)
  (v21: ((),)) <- struct_construct(v19)
  (v22: core::panics::PanicResult::<((),)>) <- PanicResult::Ok(v21)
End:
  Return(v22)

blk4:
Statements:
  (v4: core::panics::Panic) <- struct_construct()
  (v5: (core::panics::Panic, core::array::Array::<core::felt252>)) <- struct_construct(v4, v10)
  (v23: core::panics::PanicResult::<((),)>) <- PanicResult::Err(v5)
End:
  Return(v23)

blk5:
Statements:
End:
  Goto(blk7, {})

blk6:
Statements:
End:
  Goto(blk4, {})

blk7:
Statements:
  (v10: core::array::Array::<core::felt252>) <- core::array::array_new::<core::felt252>()
End:
  Goto(blk6, {})

blk8:
Statements:
  (v0: ()) <- struct_construct()
  (v1: core::option::Option::<core::felt252>) <- Option::None(v0)
End:
  Match(match_enum(v1) {
    Option::Some(v2) => blk1,
    Option::None(v6) => blk2,
  })

blk9:
Statements:
  (v11: core::array::Array::<core::felt252>) <- core::array::array_new::<core::felt252>()
  (v12: core::felt252) <- 375233589013918064796019u
  (v14: core::array::Array::<core::felt252>) <- core::array::array_append::<core::felt252>(v11, v12)
  (v13: core::panics::Panic) <- struct_construct()
  (v15: (core::panics::Panic, core::array::Array::<core::felt252>)) <- struct_construct(v13, v14)
  (v24: core::panics::PanicResult::<((),)>) <- PanicResult::Err(v15)
End:
  Return(v24)

blk10:
Statements:
End:
  Goto(blk3, {})

blk11:
Statements:
End:
  Goto(blk10, {})

blk12:
Statements:
  (v25: core::panics::PanicResult::<((),)>) <- PanicResult::Err(v20)
End:
  Return(v25)

//! > after_reorder_statements2
Parameters:
blk0 (root):
Statements:
  (v16: core::gas::BuiltinCosts) <- core::gas::get_builtin_costs()
End:
  Match(match core::gas::withdraw_gas_all(v16) {
    Option::Some => blk8,
    Option::None => blk9,
  })

blk1:
Statements:
End:
  Goto(blk5, {})

blk2:
Statements:
  (v17: core::panics::PanicResult::<((),)>) <- test::foo()
End:
  Match(match_enum(v17) {
    PanicResult::Ok(v18) => blk11,
    PanicResult::Err(v20) => blk12,
  })

blk3:
Statements:
  (v19: ()) <- struct_destructure(v18)
  (v21: ((),)) <- struct_construct(v19)
  (v22: core::panics::PanicResult::<((),)>) <- PanicResult::Ok(v21)
End:
  Return(v22)

blk4:
Statements:
  (v4: core::panics::Panic) <- struct_construct()
  (v5: (core::panics::Panic, core::array::Array::<core::felt252>)) <- struct_construct(v4, v10)
  (v23: core::panics::PanicResult::<((),)>) <- PanicResult::Err(v5)
End:
  Return(v23)

blk5:
Statements:
End:
  Goto(blk7, {})

blk6:
Statements:
End:
  Goto(blk4, {})

blk7:
Statements:
  (v10: core::array::Array::<core::felt252>) <- core::array::array_new::<core::felt252>()
End:
  Goto(blk6, {})

blk8:
Statements:
  (v0: ()) <- struct_construct()
  (v1: core::option::Option::<core::felt252>) <- Option::None(v0)
End:
  Match(match_enum(v1) {
    Option::Some(v2) => blk1,
    Option::None(v6) => blk2,
  })

blk9:
Statements:
  (v11: core::array::Array::<core::felt252>) <- core::array::array_new::<core::felt252>()
  (v12: core::felt252) <- 375233589013918064796019u
  (v14: core::array::Array::<core::felt252>) <- core::array::array_append::<core::felt252>(v11, v12)
  (v13: core::panics::Panic) <- struct_construct()
  (v15: (core::panics::Panic, core::array::Array::<core::felt252>)) <- struct_construct(v13, v14)
  (v24: core::panics::PanicResult::<((),)>) <- PanicResult::Err(v15)
End:
  Return(v24)

blk10:
Statements:
End:
  Goto(blk3, {})

blk11:
Statements:
End:
  Goto(blk10, {})

blk12:
Statements:
  (v25: core::panics::PanicResult::<((),)>) <- PanicResult::Err(v20)
End:
  Return(v25)

//! > after_optimize_matches
Parameters:
blk0 (root):
Statements:
  (v16: core::gas::BuiltinCosts) <- core::gas::get_builtin_costs()
End:
  Match(match core::gas::withdraw_gas_all(v16) {
    Option::Some => blk8,
    Option::None => blk9,
  })

blk1:
Statements:
End:
  Goto(blk5, {})

blk2:
Statements:
  (v17: core::panics::PanicResult::<((),)>) <- test::foo()
End:
  Match(match_enum(v17) {
    PanicResult::Ok(v18) => blk11,
    PanicResult::Err(v20) => blk12,
  })

blk3:
Statements:
  (v19: ()) <- struct_destructure(v18)
  (v21: ((),)) <- struct_construct(v19)
  (v22: core::panics::PanicResult::<((),)>) <- PanicResult::Ok(v21)
End:
  Return(v22)

blk4:
Statements:
  (v4: core::panics::Panic) <- struct_construct()
  (v5: (core::panics::Panic, core::array::Array::<core::felt252>)) <- struct_construct(v4, v10)
  (v23: core::panics::PanicResult::<((),)>) <- PanicResult::Err(v5)
End:
  Return(v23)

blk5:
Statements:
End:
  Goto(blk7, {})

blk6:
Statements:
End:
  Goto(blk4, {})

blk7:
Statements:
  (v10: core::array::Array::<core::felt252>) <- core::array::array_new::<core::felt252>()
End:
  Goto(blk6, {})

blk8:
Statements:
  (v0: ()) <- struct_construct()
End:
  Goto(blk2, {})

blk9:
Statements:
  (v11: core::array::Array::<core::felt252>) <- core::array::array_new::<core::felt252>()
  (v12: core::felt252) <- 375233589013918064796019u
  (v14: core::array::Array::<core::felt252>) <- core::array::array_append::<core::felt252>(v11, v12)
  (v13: core::panics::Panic) <- struct_construct()
  (v15: (core::panics::Panic, core::array::Array::<core::felt252>)) <- struct_construct(v13, v14)
  (v24: core::panics::PanicResult::<((),)>) <- PanicResult::Err(v15)
End:
  Return(v24)

blk10:
Statements:
End:
  Goto(blk3, {})

blk11:
Statements:
End:
  Goto(blk10, {})

blk12:
Statements:
  (v25: core::panics::PanicResult::<((),)>) <- PanicResult::Err(v20)
End:
  Return(v25)

//! > after_lower_implicits
Parameters: v26: core::RangeCheck, v27: core::gas::GasBuiltin
blk0 (root):
Statements:
  (v16: core::gas::BuiltinCosts) <- core::gas::get_builtin_costs()
End:
  Match(match core::gas::withdraw_gas_all(v26, v27, v16) {
    Option::Some(v28, v29) => blk8,
    Option::None(v30, v31) => blk9,
  })

blk1:
Statements:
End:
  Goto(blk5, {})

blk2:
Statements:
  (v34: core::RangeCheck, v35: core::gas::GasBuiltin, v17: core::panics::PanicResult::<((),)>) <- test::foo(v32, v33)
End:
  Match(match_enum(v17) {
    PanicResult::Ok(v18) => blk11,
    PanicResult::Err(v20) => blk12,
  })

blk3:
Statements:
  (v19: ()) <- struct_destructure(v18)
  (v21: ((),)) <- struct_construct(v19)
  (v22: core::panics::PanicResult::<((),)>) <- PanicResult::Ok(v21)
End:
  Return(v38, v39, v22)

blk4:
Statements:
  (v4: core::panics::Panic) <- struct_construct()
  (v5: (core::panics::Panic, core::array::Array::<core::felt252>)) <- struct_construct(v4, v10)
  (v23: core::panics::PanicResult::<((),)>) <- PanicResult::Err(v5)
End:
  Return(v23)

blk5:
Statements:
End:
  Goto(blk7, {})

blk6:
Statements:
End:
  Goto(blk4, {})

blk7:
Statements:
  (v10: core::array::Array::<core::felt252>) <- core::array::array_new::<core::felt252>()
End:
  Goto(blk6, {})

blk8:
Statements:
  (v0: ()) <- struct_construct()
End:
  Goto(blk2, {v28 -> v32, v29 -> v33})

blk9:
Statements:
  (v11: core::array::Array::<core::felt252>) <- core::array::array_new::<core::felt252>()
  (v12: core::felt252) <- 375233589013918064796019u
  (v14: core::array::Array::<core::felt252>) <- core::array::array_append::<core::felt252>(v11, v12)
  (v13: core::panics::Panic) <- struct_construct()
  (v15: (core::panics::Panic, core::array::Array::<core::felt252>)) <- struct_construct(v13, v14)
  (v24: core::panics::PanicResult::<((),)>) <- PanicResult::Err(v15)
End:
  Return(v30, v31, v24)

blk10:
Statements:
End:
  Goto(blk3, {v36 -> v38, v37 -> v39})

blk11:
Statements:
End:
  Goto(blk10, {v34 -> v36, v35 -> v37})

blk12:
Statements:
  (v25: core::panics::PanicResult::<((),)>) <- PanicResult::Err(v20)
End:
  Return(v34, v35, v25)

//! > after_optimize_remappings2
Parameters: v26: core::RangeCheck, v27: core::gas::GasBuiltin
blk0 (root):
Statements:
  (v16: core::gas::BuiltinCosts) <- core::gas::get_builtin_costs()
End:
  Match(match core::gas::withdraw_gas_all(v26, v27, v16) {
    Option::Some(v28, v29) => blk8,
    Option::None(v30, v31) => blk9,
  })

blk1:
Statements:
End:
  Goto(blk5, {})

blk2:
Statements:
  (v34: core::RangeCheck, v35: core::gas::GasBuiltin, v17: core::panics::PanicResult::<((),)>) <- test::foo(v28, v29)
End:
  Match(match_enum(v17) {
    PanicResult::Ok(v18) => blk11,
    PanicResult::Err(v20) => blk12,
  })

blk3:
Statements:
  (v19: ()) <- struct_destructure(v18)
  (v21: ((),)) <- struct_construct(v19)
  (v22: core::panics::PanicResult::<((),)>) <- PanicResult::Ok(v21)
End:
  Return(v34, v35, v22)

blk4:
Statements:
  (v4: core::panics::Panic) <- struct_construct()
  (v5: (core::panics::Panic, core::array::Array::<core::felt252>)) <- struct_construct(v4, v10)
  (v23: core::panics::PanicResult::<((),)>) <- PanicResult::Err(v5)
End:
  Return(v23)

blk5:
Statements:
End:
  Goto(blk7, {})

blk6:
Statements:
End:
  Goto(blk4, {})

blk7:
Statements:
  (v10: core::array::Array::<core::felt252>) <- core::array::array_new::<core::felt252>()
End:
  Goto(blk6, {})

blk8:
Statements:
  (v0: ()) <- struct_construct()
End:
  Goto(blk2, {})

blk9:
Statements:
  (v11: core::array::Array::<core::felt252>) <- core::array::array_new::<core::felt252>()
  (v12: core::felt252) <- 375233589013918064796019u
  (v14: core::array::Array::<core::felt252>) <- core::array::array_append::<core::felt252>(v11, v12)
  (v13: core::panics::Panic) <- struct_construct()
  (v15: (core::panics::Panic, core::array::Array::<core::felt252>)) <- struct_construct(v13, v14)
  (v24: core::panics::PanicResult::<((),)>) <- PanicResult::Err(v15)
End:
  Return(v30, v31, v24)

blk10:
Statements:
End:
  Goto(blk3, {})

blk11:
Statements:
End:
  Goto(blk10, {})

blk12:
Statements:
  (v25: core::panics::PanicResult::<((),)>) <- PanicResult::Err(v20)
End:
  Return(v34, v35, v25)

//! > after_reorder_statements3
Parameters: v26: core::RangeCheck, v27: core::gas::GasBuiltin
blk0 (root):
Statements:
  (v16: core::gas::BuiltinCosts) <- core::gas::get_builtin_costs()
End:
  Match(match core::gas::withdraw_gas_all(v26, v27, v16) {
    Option::Some(v28, v29) => blk8,
    Option::None(v30, v31) => blk9,
  })

blk1:
Statements:
End:
  Goto(blk5, {})

blk2:
Statements:
  (v34: core::RangeCheck, v35: core::gas::GasBuiltin, v17: core::panics::PanicResult::<((),)>) <- test::foo(v28, v29)
End:
  Match(match_enum(v17) {
    PanicResult::Ok(v18) => blk11,
    PanicResult::Err(v20) => blk12,
  })

blk3:
Statements:
  (v19: ()) <- struct_destructure(v18)
  (v21: ((),)) <- struct_construct(v19)
  (v22: core::panics::PanicResult::<((),)>) <- PanicResult::Ok(v21)
End:
  Return(v34, v35, v22)

blk4:
Statements:
  (v4: core::panics::Panic) <- struct_construct()
  (v5: (core::panics::Panic, core::array::Array::<core::felt252>)) <- struct_construct(v4, v10)
  (v23: core::panics::PanicResult::<((),)>) <- PanicResult::Err(v5)
End:
  Return(v23)

blk5:
Statements:
End:
  Goto(blk7, {})

blk6:
Statements:
End:
  Goto(blk4, {})

blk7:
Statements:
  (v10: core::array::Array::<core::felt252>) <- core::array::array_new::<core::felt252>()
End:
  Goto(blk6, {})

blk8:
Statements:
End:
  Goto(blk2, {})

blk9:
Statements:
  (v11: core::array::Array::<core::felt252>) <- core::array::array_new::<core::felt252>()
  (v12: core::felt252) <- 375233589013918064796019u
  (v14: core::array::Array::<core::felt252>) <- core::array::array_append::<core::felt252>(v11, v12)
  (v13: core::panics::Panic) <- struct_construct()
  (v15: (core::panics::Panic, core::array::Array::<core::felt252>)) <- struct_construct(v13, v14)
  (v24: core::panics::PanicResult::<((),)>) <- PanicResult::Err(v15)
End:
  Return(v30, v31, v24)

blk10:
Statements:
End:
  Goto(blk3, {})

blk11:
Statements:
End:
  Goto(blk10, {})

blk12:
Statements:
  (v25: core::panics::PanicResult::<((),)>) <- PanicResult::Err(v20)
End:
  Return(v34, v35, v25)

//! > after_reorganize_blocks
Parameters: v26: core::RangeCheck, v27: core::gas::GasBuiltin
blk0 (root):
Statements:
  (v16: core::gas::BuiltinCosts) <- core::gas::get_builtin_costs()
End:
  Match(match core::gas::withdraw_gas_all(v26, v27, v16) {
    Option::Some(v28, v29) => blk1,
    Option::None(v30, v31) => blk4,
  })

blk1:
Statements:
  (v34: core::RangeCheck, v35: core::gas::GasBuiltin, v17: core::panics::PanicResult::<((),)>) <- test::foo(v28, v29)
End:
  Match(match_enum(v17) {
    PanicResult::Ok(v18) => blk2,
    PanicResult::Err(v20) => blk3,
  })

blk2:
Statements:
  (v19: ()) <- struct_destructure(v18)
  (v21: ((),)) <- struct_construct(v19)
  (v22: core::panics::PanicResult::<((),)>) <- PanicResult::Ok(v21)
End:
  Return(v34, v35, v22)

blk3:
Statements:
  (v25: core::panics::PanicResult::<((),)>) <- PanicResult::Err(v20)
End:
  Return(v34, v35, v25)

blk4:
Statements:
  (v11: core::array::Array::<core::felt252>) <- core::array::array_new::<core::felt252>()
  (v12: core::felt252) <- 375233589013918064796019u
  (v14: core::array::Array::<core::felt252>) <- core::array::array_append::<core::felt252>(v11, v12)
  (v13: core::panics::Panic) <- struct_construct()
  (v15: (core::panics::Panic, core::array::Array::<core::felt252>)) <- struct_construct(v13, v14)
  (v24: core::panics::PanicResult::<((),)>) <- PanicResult::Err(v15)
End:
  Return(v30, v31, v24)

//! > after_optimize_remappings3 (final)
Parameters: v26: core::RangeCheck, v27: core::gas::GasBuiltin
blk0 (root):
Statements:
  (v16: core::gas::BuiltinCosts) <- core::gas::get_builtin_costs()
End:
  Match(match core::gas::withdraw_gas_all(v26, v27, v16) {
    Option::Some(v28, v29) => blk1,
    Option::None(v30, v31) => blk4,
  })

blk1:
Statements:
  (v34: core::RangeCheck, v35: core::gas::GasBuiltin, v17: core::panics::PanicResult::<((),)>) <- test::foo(v28, v29)
End:
  Match(match_enum(v17) {
    PanicResult::Ok(v18) => blk2,
    PanicResult::Err(v20) => blk3,
  })

blk2:
Statements:
  (v19: ()) <- struct_destructure(v18)
  (v21: ((),)) <- struct_construct(v19)
  (v22: core::panics::PanicResult::<((),)>) <- PanicResult::Ok(v21)
End:
  Return(v34, v35, v22)

blk3:
Statements:
  (v25: core::panics::PanicResult::<((),)>) <- PanicResult::Err(v20)
End:
  Return(v34, v35, v25)

blk4:
Statements:
  (v11: core::array::Array::<core::felt252>) <- core::array::array_new::<core::felt252>()
  (v12: core::felt252) <- 375233589013918064796019u
  (v14: core::array::Array::<core::felt252>) <- core::array::array_append::<core::felt252>(v11, v12)
  (v13: core::panics::Panic) <- struct_construct()
  (v15: (core::panics::Panic, core::array::Array::<core::felt252>)) <- struct_construct(v13, v14)
  (v24: core::panics::PanicResult::<((),)>) <- PanicResult::Err(v15)
End:
  Return(v30, v31, v24)
