(module
 (type $0 (func (param i64 i64 i64) (result i32)))
 (type $1 (func (param i32) (result i32)))
 (func $figure-1a (; 0 ;) (type $0) (param $a i64) (param $x i64) (param $y i64) (result i32)
  (local $i i32)
  (local $j i32)
  (local $r i32)
  (local $6 i64)
  (local $7 i64)
  (local $8 i32)
  (local $9 i64)
  (local $10 i64)
  (local $11 i32)
  (local $12 i32)
  (local $13 i32)
  (local $14 i32)
  (local $15 i32)
  (local $16 i32)
  (local $17 i32)
  (block
   (local.set $6
    (local.get $a)
   )
   (local.set $7
    (local.get $x)
   )
   (local.set $8
    (i64.eq
     (local.get $6)
     (local.get $7)
    )
   )
   (local.set $i
    (local.get $8)
   )
   (nop)
   (local.set $9
    (local.get $a)
   )
   (local.set $10
    (local.get $y)
   )
   (local.set $11
    (i64.ne
     (local.get $9)
     (local.get $10)
    )
   )
   (local.set $j
    (local.get $11)
   )
   (nop)
   (local.set $12
    (local.get $i)
   )
   (local.set $13
    (local.get $j)
   )
   (local.set $14
    (i32.and
     (local.get $12)
     (local.get $13)
    )
   )
   (local.set $r
    (local.get $14)
   )
   (nop)
   (local.set $15
    (local.get $r)
   )
   (return
    (local.get $15)
   )
   (unreachable)
  )
  (local.set $17
   (local.get $16)
  )
  (return
   (local.get $17)
  )
 )
 (func $figure-1b (; 1 ;) (type $0) (param $a i64) (param $x i64) (param $y i64) (result i32)
  (local $i i32)
  (local $j i32)
  (local $r i32)
  (local $6 i64)
  (local $7 i64)
  (local $8 i32)
  (local $9 i64)
  (local $10 i64)
  (local $11 i32)
  (local $12 i64)
  (local $13 i64)
  (local $14 i32)
  (local $15 i32)
  (local $16 i32)
  (local $17 i32)
  (local $18 i32)
  (block
   (local.set $6
    (local.get $x)
   )
   (local.set $7
    (local.get $y)
   )
   (local.set $8
    (i64.lt_s
     (local.get $6)
     (local.get $7)
    )
   )
   (if
    (local.get $8)
    (then
     (block
      (block $block
       (local.set $9
        (local.get $a)
       )
       (local.set $10
        (local.get $x)
       )
       (local.set $11
        (i64.eq
         (local.get $9)
         (local.get $10)
        )
       )
       (local.set $i
        (local.get $11)
       )
       (nop)
       (local.set $12
        (local.get $a)
       )
       (local.set $13
        (local.get $y)
       )
       (local.set $14
        (i64.ne
         (local.get $12)
         (local.get $13)
        )
       )
       (local.set $j
        (local.get $14)
       )
       (nop)
       (local.set $15
        (local.get $i)
       )
       (local.set $16
        (local.get $j)
       )
       (local.set $17
        (i32.and
         (local.get $15)
         (local.get $16)
        )
       )
       (local.set $r
        (local.get $17)
       )
       (nop)
       (local.set $18
        (local.get $r)
       )
       (return
        (local.get $18)
       )
       (unreachable)
      )
      (unreachable)
     )
    )
    (else
     (block
      (unreachable)
      (unreachable)
     )
    )
   )
  )
  (unreachable)
 )
 (func $figure-3-if (; 2 ;) (type $1) (param $x i32) (result i32)
  (local $1 i32)
  (local $2 i32)
  (local $3 i32)
  (local $4 i32)
  (local $5 i32)
  (local $6 i32)
  (local $7 i32)
  (local $8 i32)
  (local $9 i32)
  (local $10 i32)
  (block
   (block
    (local.set $1
     (local.get $x)
    )
    (local.set $2
     (i32.and
      (local.get $1)
      (i32.const 1)
     )
    )
    (if
     (local.get $2)
     (then
      (block
       (local.set $3
        (local.get $x)
       )
       (local.set $4
        (i32.add
         (local.get $3)
         (i32.const 1)
        )
       )
       (local.set $x
        (local.get $4)
       )
       (nop)
      )
     )
     (else
      (block
       (local.set $5
        (local.get $x)
       )
       (local.set $6
        (i32.add
         (local.get $5)
         (i32.const 2)
        )
       )
       (local.set $x
        (local.get $6)
       )
       (nop)
      )
     )
    )
   )
   (nop)
   (local.set $7
    (local.get $x)
   )
   (local.set $8
    (i32.and
     (local.get $7)
     (i32.const 1)
    )
   )
   (return
    (local.get $8)
   )
   (unreachable)
  )
  (local.set $10
   (local.get $9)
  )
  (return
   (local.get $10)
  )
 )
)