All files

src/bytecode/decoder.panack

Green: covered; red: known zero; amber: unavailable. Blank lines are outside the executable-start-line denominator.

    1 import "codec.panack"
    2 
    3 record ByteReader {
    4   data: Bytes,
    5   offset: Nat,
    6   valid: Bool,
    7   message: Str
    8 }
    9 
   10 record ReadNat {
   11   reader: ByteReader,
   12   value: Nat
   13 }
   14 
   15 record ReadText {
   16   reader: ByteReader,
   17   value: Str
   18 }
   19 
   20 record ReadBytes {
   21   reader: ByteReader,
   22   value: Bytes
   23 }
   24 
   25 record ReadConstant {
   26   reader: ByteReader,
   27   value: ConstantValue
   28 }
   29 
   30 record ReadInstruction {
   31   reader: ByteReader,
   32   value: Instruction
   33 }
   34 
   35 record ReadInstructions {
   36   reader: ByteReader,
   37   values: [Instruction]
   38 }
   39 
   40 record ReadNames {
   41   reader: ByteReader,
   42   values: [Str]
   43 }
   44 
   45 record ReadFunction {
   46   reader: ByteReader,
   47   value: FunctionCode
   48 }
   49 
   50 record SignedMagnitude {
   51   negative: Bool,
   52   magnitude: Nat
   53 }
   54 
   55 record ReadSignedMagnitude {
   56   reader: ByteReader,
   57   value: SignedMagnitude
   58 }
   59 
   60 enum BytecodeDecodeResult {
   61   BytecodeDecoded(BytecodeProgram),
   62   BytecodeDecodeError(Str)
   63 }
   64 
   65 pure invalid_reader(reader: ByteReader, message: Str): ByteReader {
   66   if reader.valid { ByteReader(reader.data, reader.offset, false, message) } else { reader }
   67 }
   68 
   69 pure reader_has(reader: ByteReader, count: Nat): Bool {
   70   reader.valid && reader.offset + count <= byte_len(reader.data)
   71 }
   72 
   73 pure read_u8(reader: ByteReader): ReadNat {
   74   if reader_has(reader, 1) {
   75     value: Nat = byte_get(reader.data, reader.offset)
   76     ReadNat(ByteReader(reader.data, reader.offset + 1, true, ""), value)
   77   } else {
   78     ReadNat(invalid_reader(reader, "truncated data"), 0)
   79   }
   80 }
   81 
   82 pure read_u16(reader: ByteReader): ReadNat {
   83   if reader_has(reader, 2) {
   84     value: Nat = byte_get(reader.data, reader.offset) * 256 + byte_get(reader.data, reader.offset + 1)
   85     ReadNat(ByteReader(reader.data, reader.offset + 2, true, ""), value)
   86   } else {
   87     ReadNat(invalid_reader(reader, "truncated data"), 0)
   88   }
   89 }
   90 
   91 pure read_u32(reader: ByteReader): ReadNat {
   92   if reader_has(reader, 4) {
   93     value: Nat = byte_get(reader.data, reader.offset) * 16777216 +
   94       byte_get(reader.data, reader.offset + 1) * 65536 +
   95       byte_get(reader.data, reader.offset + 2) * 256 +
   96       byte_get(reader.data, reader.offset + 3)
   97     ReadNat(ByteReader(reader.data, reader.offset + 4, true, ""), value)
   98   } else {
   99     ReadNat(invalid_reader(reader, "truncated data"), 0)
  100   }
  101 }
  102 
  103 pure read_raw(reader: ByteReader, count: Nat): ReadBytes {
  104   if reader_has(reader, count) {
  105     mut output: Bytes = bytes()
  106     mut cursor: Nat = 0
  107     while cursor < count {
  108       output = byte_append(output, byte_get(reader.data, reader.offset + cursor))
  109       cursor = cursor + 1
  110     }
  111     ReadBytes(ByteReader(reader.data, reader.offset + count, true, ""), output)
  112   } else {
  113     ReadBytes(invalid_reader(reader, "truncated data"), bytes())
  114   }
  115 }
  116 
  117 pure utf8_continuation(value: Nat): Bool {
  118   value >= 128 && value <= 191
  119 }
  120 
  121 pure valid_utf8(data: Bytes): Bool {
  122   mut valid: Bool = true
  123   mut cursor: Nat = 0
  124   while cursor < byte_len(data) && valid {
  125     first: Nat = byte_get(data, cursor)
  126     if first <= 127 {
  127       cursor = cursor + 1
  128     } else {
  129       if first >= 194 && first <= 223 {
  130         if cursor + 1 < byte_len(data) && utf8_continuation(byte_get(data, cursor + 1)) {
  131           cursor = cursor + 2
  132         } else { valid = false; }
  133       } else {
  134         if first >= 224 && first <= 239 {
  135           if cursor + 2 < byte_len(data) {
  136             second: Nat = byte_get(data, cursor + 1)
  137             third: Nat = byte_get(data, cursor + 2)
  138             second_valid: Bool = utf8_continuation(second) &&
  139               (first != 224 || second >= 160) && (first != 237 || second <= 159)
  140             if second_valid && utf8_continuation(third) { cursor = cursor + 3; }
  141             else { valid = false; }
  142           } else { valid = false; }
  143         } else {
  144           if first >= 240 && first <= 244 {
  145             if cursor + 3 < byte_len(data) {
  146               second: Nat = byte_get(data, cursor + 1)
  147               third: Nat = byte_get(data, cursor + 2)
  148               fourth: Nat = byte_get(data, cursor + 3)
  149               second_valid: Bool = utf8_continuation(second) &&
  150                 (first != 240 || second >= 144) && (first != 244 || second <= 143)
  151               if second_valid && utf8_continuation(third) && utf8_continuation(fourth) {
  152                 cursor = cursor + 4
  153               } else { valid = false; }
  154             } else { valid = false; }
  155           } else { valid = false; }
  156         }
  157       }
  158     }
  159   }
  160   valid
  161 }
  162 
  163 pure decode_utf8(reader: ByteReader, count: Nat, limit: Nat, label: Str): ReadText {
  164   if count > limit {
  165     ReadText(invalid_reader(reader, "${label} exceeds limit"), "")
  166   } else {
  167     raw: ReadBytes = read_raw(reader, count)
  168     if raw.reader.valid && valid_utf8(raw.value) {
  169       ReadText(raw.reader, utf8_decode(raw.value))
  170     } else {
  171       if raw.reader.valid {
  172         ReadText(invalid_reader(raw.reader, "invalid UTF-8 in ${label}"), "")
  173       } else {
  174         ReadText(raw.reader, "")
  175       }
  176     }
  177   }
  178 }
  179 
  180 pure read_name(reader: ByteReader): ReadText {
  181   size: ReadNat = read_u16(reader)
  182   decode_utf8(size.reader, size.value, 1024, "name")
  183 }
  184 
  185 pure read_text(reader: ByteReader): ReadText {
  186   size: ReadNat = read_u32(reader)
  187   decode_utf8(size.reader, size.value, 1048576, "text")
  188 }
  189 
  190 pure nat_digit_count(value: Nat): Nat {
  191   if value == 0 { 1 }
  192   else {
  193     mut count: Nat = 0
  194     mut remaining: Nat = value
  195     while remaining > 0 {
  196       remaining = quotient(remaining, 10)
  197       count = count + 1
  198     }
  199     count
  200   }
  201 }
  202 
  203 pure read_natural(reader: ByteReader): ReadNat {
  204   size: ReadNat = read_u16(reader)
  205   if !size.reader.valid { ReadNat(size.reader, 0) }
  206   else {
  207     if size.value > 1701 {
  208       ReadNat(invalid_reader(size.reader, "integer exceeds digit limit"), 0)
  209     } else {
  210       raw: ReadBytes = read_raw(size.reader, size.value)
  211       if !raw.reader.valid { ReadNat(raw.reader, 0) }
  212       else {
  213         if size.value > 0 && byte_get(raw.value, 0) == 0 {
  214           ReadNat(invalid_reader(raw.reader, "non-minimal integer"), 0)
  215         } else {
  216           mut value: Nat = 0
  217           for byte in raw.value { value = value * 256 + byte; }
  218           if nat_digit_count(value) > 4096 {
  219             ReadNat(invalid_reader(raw.reader, "integer exceeds digit limit"), 0)
  220           } else {
  221             ReadNat(raw.reader, value)
  222           }
  223         }
  224       }
  225     }
  226   }
  227 }
  228 
  229 pure subtract_natural(larger: Nat, smaller: Nat): Nat {
  230   mut result: Nat = larger
  231   mut remaining: Nat = smaller
  232   while remaining > 0 {
  233     if result > 0 { result = result - 1; } else {}
  234     remaining = remaining - 1
  235   }
  236   result
  237 }
  238 
  239 pure read_i16(reader: ByteReader): ReadSignedMagnitude {
  240   encoded: ReadNat = read_u16(reader)
  241   if encoded.value >= 32768 {
  242     value: SignedMagnitude = SignedMagnitude(true, subtract_natural(65536, encoded.value))
  243     ReadSignedMagnitude(encoded.reader, value)
  244   } else {
  245     ReadSignedMagnitude(encoded.reader, SignedMagnitude(false, encoded.value))
  246   }
  247 }
  248 
  249 pure read_decimal(reader: ByteReader): ReadConstant {
  250   sign: ReadNat = read_u8(reader)
  251   exponent: ReadSignedMagnitude = read_i16(sign.reader)
  252   count: ReadNat = read_u16(exponent.reader)
  253   mut current: ByteReader = count.reader
  254   if sign.value > 1 { current = invalid_reader(current, "invalid decimal sign"); } else {}
  255   if exponent.value.magnitude > 4096 { current = invalid_reader(current, "decimal exponent exceeds limit"); } else {}
  256   if count.value == 0 || count.value > 4096 { current = invalid_reader(current, "decimal coefficient exceeds digit limit"); } else {}
  257   raw: ReadBytes = read_raw(current, quotient(count.value + 1, 2))
  258   mut digits: [Nat] = []
  259   mut cursor: Nat = 0
  260   while cursor < byte_len(raw.value) && raw.reader.valid {
  261     byte: Nat = byte_get(raw.value, cursor)
  262     high: Nat = quotient(byte, 16)
  263     low: Nat = byte % 16
  264     if high > 9 { current = invalid_reader(raw.reader, "invalid decimal digit"); }
  265     else { digits = append(digits, high); }
  266     if len(digits) < count.value {
  267       if low > 9 { current = invalid_reader(current, "invalid decimal digit"); }
  268       else { digits = append(digits, low); }
  269     } else {
  270       if low != 15 { current = invalid_reader(current, "invalid decimal padding"); } else {}
  271     }
  272     cursor = cursor + 1
  273   }
  274   if len(digits) > 1 && digits[0] == 0 {
  275     current = invalid_reader(current, "non-minimal decimal coefficient")
  276   } else {}
  277   value: ConstantValue = DecimalPartsConstant(sign.value == 1, digits, exponent.value.negative, exponent.value.magnitude)
  278   ReadConstant(ByteReader(current.data, raw.reader.offset, current.valid && raw.reader.valid, if current.valid { raw.reader.message } else { current.message }), value)
  279 }
  280 
  281 pure read_constant(reader: ByteReader): ReadConstant {
  282   tag: ReadNat = read_u8(reader)
  283   if tag.value == 0 {
  284     natural: ReadNat = read_natural(tag.reader)
  285     ReadConstant(natural.reader, NatConstant(natural.value))
  286   } else {
  287     if tag.value == 1 {
  288       sign: ReadNat = read_u8(tag.reader)
  289       magnitude: ReadNat = read_natural(sign.reader)
  290       mut current: ByteReader = magnitude.reader
  291       if sign.value > 1 { current = invalid_reader(current, "invalid integer sign"); } else {}
  292       if sign.value == 1 && magnitude.value == 0 { current = invalid_reader(current, "negative zero integer"); } else {}
  293       ReadConstant(current, IntConstant(sign.value == 1, magnitude.value))
  294     } else {
  295       if tag.value == 2 {
  296         read_decimal(tag.reader)
  297       } else {
  298         if tag.value == 3 {
  299           text: ReadText = read_text(tag.reader)
  300           ReadConstant(text.reader, StringConstant(text.value))
  301         } else {
  302           if tag.value == 4 {
  303             flag: ReadNat = read_u8(tag.reader)
  304             if flag.value > 1 {
  305               ReadConstant(invalid_reader(flag.reader, "invalid Bool constant"), BoolConstant(false))
  306             } else {
  307               ReadConstant(flag.reader, BoolConstant(flag.value == 1))
  308             }
  309           } else {
  310             if tag.value == 5 {
  311               ReadConstant(tag.reader, VoidConstant())
  312             } else {
  313               ReadConstant(invalid_reader(tag.reader, "unknown constant tag"), VoidConstant())
  314             }
  315           }
  316         }
  317       }
  318     }
  319   }
  320 }
  321 
  322 pure read_names(reader: ByteReader, count: Nat): ReadNames {
  323   mut current: ByteReader = reader
  324   mut values: [Str] = []
  325   mut cursor: Nat = 0
  326   while cursor < count && current.valid {
  327     item: ReadText = read_name(current)
  328     current = item.reader
  329     values = append(values, item.value)
  330     cursor = cursor + 1
  331   }
  332   ReadNames(current, values)
  333 }
  334 
  335 pure read_texts(reader: ByteReader): ReadNames {
  336   count: ReadNat = read_u16(reader)
  337   if count.value > 65535 {
  338     ReadNames(invalid_reader(count.reader, "interpolation exceeds item limit"), [])
  339   } else {
  340     mut current: ByteReader = count.reader
  341     mut values: [Str] = []
  342     mut cursor: Nat = 0
  343     while cursor < count.value && current.valid {
  344       item: ReadText = read_text(current)
  345       current = item.reader
  346       values = append(values, item.value)
  347       cursor = cursor + 1
  348     }
  349     ReadNames(current, values)
  350   }
  351 }
  352 
  353 pure unary_operator(code: Nat): Str {
  354   if code == 0 { "-" } else { "!" }
  355 }
  356 
  357 pure binary_operator(code: Nat): Str {
  358   if code == 0 { "+" }
  359   else { if code == 1 { "-" }
  360   else { if code == 2 { "*" }
  361   else { if code == 3 { "/" }
  362   else { if code == 4 { "%" }
  363   else { if code == 5 { "==" }
  364   else { if code == 6 { "!=" }
  365   else { if code == 7 { "<" }
  366   else { if code == 8 { "<=" }
  367   else { if code == 9 { ">" }
  368   else { if code == 10 { ">=" }
  369   else { if code == 11 { "&&" } else { "||" } } } } } } } } } } } }
  370 }
  371 
  372 pure read_instruction(reader: ByteReader): ReadInstruction {
  373   opcode: ReadNat = read_u8(reader)
  374   if opcode.value == 0 {
  375     constant: ReadConstant = read_constant(opcode.reader)
  376     ReadInstruction(constant.reader, ConstInstruction(constant.value))
  377   } else { if opcode.value == 1 {
  378     name: ReadText = read_name(opcode.reader); ReadInstruction(name.reader, LoadInstruction(name.value))
  379   } else { if opcode.value == 2 {
  380     name: ReadText = read_name(opcode.reader); ReadInstruction(name.reader, StoreInstruction(name.value))
  381   } else { if opcode.value == 3 {
  382     ReadInstruction(opcode.reader, PopInstruction())
  383   } else { if opcode.value == 4 {
  384     code: ReadNat = read_u8(opcode.reader)
  385     if code.value > 1 { ReadInstruction(invalid_reader(code.reader, "unknown unary operator"), UnaryInstruction("-")) }
  386     else { ReadInstruction(code.reader, UnaryInstruction(unary_operator(code.value))) }
  387   } else { if opcode.value == 5 {
  388     code: ReadNat = read_u8(opcode.reader)
  389     if code.value > 12 { ReadInstruction(invalid_reader(code.reader, "unknown binary operator"), BinaryInstruction("+")) }
  390     else { ReadInstruction(code.reader, BinaryInstruction(binary_operator(code.value))) }
  391   } else { if opcode.value == 6 {
  392     ReadInstruction(opcode.reader, MakeRangeInstruction())
  393   } else { if opcode.value == 7 {
  394     count: ReadNat = read_u16(opcode.reader); ReadInstruction(count.reader, MakeArrayInstruction(count.value))
  395   } else { if opcode.value == 8 {
  396     ReadInstruction(opcode.reader, IndexGetInstruction())
  397   } else { if opcode.value == 9 {
  398     parts: ReadNames = read_texts(opcode.reader); ReadInstruction(parts.reader, InterpolateInstruction(parts.values))
  399   } else { if opcode.value == 10 {
  400     name: ReadText = read_name(opcode.reader); ReadInstruction(name.reader, IterInitInstruction(name.value))
  401   } else { if opcode.value == 11 {
  402     iterator: ReadText = read_name(opcode.reader)
  403     name: ReadText = read_name(iterator.reader)
  404     end: ReadNat = read_u32(name.reader)
  405     ReadInstruction(end.reader, IterNextInstruction(iterator.value, name.value, end.value))
  406   } else { if opcode.value == 12 {
  407     name: ReadText = read_name(opcode.reader)
  408     count: ReadNat = read_u16(name.reader)
  409     fields: ReadNames = read_names(count.reader, count.value)
  410     ReadInstruction(fields.reader, MakeRecordInstruction(name.value, fields.values))
  411   } else { if opcode.value == 13 {
  412     name: ReadText = read_name(opcode.reader); ReadInstruction(name.reader, FieldGetInstruction(name.value))
  413   } else { if opcode.value == 14 {
  414     enum_name: ReadText = read_name(opcode.reader)
  415     variant: ReadText = read_name(enum_name.reader)
  416     count: ReadNat = read_u16(variant.reader)
  417     ReadInstruction(count.reader, MakeVariantInstruction(enum_name.value, variant.value, count.value))
  418   } else { if opcode.value == 15 {
  419     variant: ReadText = read_name(opcode.reader)
  420     failure: ReadNat = read_u32(variant.reader)
  421     ReadInstruction(failure.reader, MatchVariantInstruction(variant.value, failure.value))
  422   } else { if opcode.value == 16 {
  423     ReadInstruction(opcode.reader, MatchFailInstruction())
  424   } else { if opcode.value == 17 {
  425     name: ReadText = read_name(opcode.reader)
  426     arity: ReadNat = read_u8(name.reader)
  427     ReadInstruction(arity.reader, CallInstruction(name.value, arity.value))
  428   } else { if opcode.value == 18 {
  429     target: ReadNat = read_u32(opcode.reader); ReadInstruction(target.reader, JumpFalseInstruction(target.value))
  430   } else { if opcode.value == 19 {
  431     target: ReadNat = read_u32(opcode.reader); ReadInstruction(target.reader, JumpInstruction(target.value))
  432   } else { if opcode.value == 22 {
  433     name: ReadText = read_name(opcode.reader)
  434     arity: ReadNat = read_u8(name.reader)
  435     ReadInstruction(arity.reader, AwaitCallInstruction(name.value, arity.value))
  436   } else { if opcode.value == 23 {
  437     arity: ReadNat = read_u8(opcode.reader)
  438     ReadInstruction(arity.reader, AwaitValueInstruction(arity.value))
  439   } else { if opcode.value == 20 {
  440     ReadInstruction(opcode.reader, ReturnInstruction())
  441   } else { if opcode.value == 21 {
  442     arity: ReadNat = read_u8(opcode.reader); ReadInstruction(arity.reader, CallValueInstruction(arity.value))
  443   } else {
  444     ReadInstruction(invalid_reader(opcode.reader, "unknown bytecode opcode"), PopInstruction())
  445   } } } } } } } } } } } } } } } } } } } } } } } }
  446 }
  447 
  448 pure read_instructions(reader: ByteReader, count: Nat): ReadInstructions {
  449   mut current: ByteReader = reader
  450   mut values: [Instruction] = []
  451   mut cursor: Nat = 0
  452   while cursor < count && current.valid {
  453     instruction: ReadInstruction = read_instruction(current)
  454     current = instruction.reader
  455     values = append(values, instruction.value)
  456     cursor = cursor + 1
  457   }
  458   ReadInstructions(current, values)
  459 }
  460 
  461 pure read_function(reader: ByteReader): ReadFunction {
  462   name: ReadText = read_name(reader)
  463   flags: ReadNat = read_u8(name.reader)
  464   parameter_count: ReadNat = read_u8(flags.reader)
  465   parameters: ReadNames = read_names(parameter_count.reader, parameter_count.value)
  466   instruction_count: ReadNat = read_u32(parameters.reader)
  467   mut current: ByteReader = instruction_count.reader
  468   if flags.value > 2 { current = invalid_reader(current, "unknown function flags"); } else {}
  469   if instruction_count.value > 1000000 { current = invalid_reader(current, "function exceeds instruction limit"); } else {}
  470   instructions: ReadInstructions = read_instructions(current, instruction_count.value)
  471   value: FunctionCode = FunctionCode(name.value, parameters.values, flags.value == 1, flags.value == 2, instructions.values)
  472   ReadFunction(instructions.reader, value)
  473 }
  474 
  475 record FunctionCodeLookup {
  476   found: Bool,
  477   value: FunctionCode
  478 }
  479 
  480 pure builtin_exists(name: Str): Bool {
  481   name != "tcp_exchange" && name != "tcp_serve" && (name == "$tcp_exchange" || name == "$tcp_serve" || is_builtin(name))
  482 }
  483 
  484 pure builtin_is_pure(name: Str): Bool {
  485   name != "$tcp_exchange" && name != "$tcp_serve" && !is_impure_builtin(name)
  486 }
  487 
  488 pure bytecode_function(program: BytecodeProgram, name: Str): FunctionCodeLookup {
  489   mut found: Bool = false
  490   mut result: FunctionCode = FunctionCode("", [], false, false, [])
  491   for candidate in program.functions {
  492     if candidate.name == name {
  493       found = true
  494       result = candidate
  495     } else {}
  496   }
  497   FunctionCodeLookup(found, result)
  498 }
  499 
  500 pure duplicate_names(names: [Str]): Bool {
  501   mut seen: Set[Str] = set()
  502   mut duplicate: Bool = false
  503   for name in names {
  504     if set_has(seen, name) { duplicate = true; }
  505     else { seen = set_add(seen, name); }
  506   }
  507   duplicate
  508 }
  509 
  510 pure verify_instruction(instruction: Instruction, function: FunctionCode, program: BytecodeProgram): Str {
  511   count: Nat = len(function.instructions)
  512   match instruction {
  513     ConstInstruction(value) => "",
  514     LoadInstruction(name) => "",
  515     StoreInstruction(name) => "",
  516     PopInstruction() => "",
  517     UnaryInstruction(operator) => if operator == "-" || operator == "!" { "" } else { "invalid UNARY operand" },
  518     BinaryInstruction(operator) => "",
  519     MakeRangeInstruction() => "",
  520     MakeArrayInstruction(item_count) => "",
  521     IndexGetInstruction() => "",
  522     InterpolateInstruction(parts) => if len(parts) > 0 { "" } else { "invalid INTERPOLATE operand" },
  523     IterInitInstruction(name) => "",
  524     IterNextInstruction(iterator, name, end) => if end < count { "" } else { "invalid ITER_NEXT operand" },
  525     MakeRecordInstruction(name, fields) => "",
  526     FieldGetInstruction(name) => "",
  527     MakeVariantInstruction(enum_name, variant, payload_count) => "",
  528     MatchVariantInstruction(variant, failure) => if failure < count { "" } else { "invalid MATCH_VARIANT operand" },
  529     MatchFailInstruction() => "",
  530     CallInstruction(name, arity) => {
  531       target: FunctionCodeLookup = bytecode_function(program, name)
  532       if !target.found && !builtin_exists(name) {
  533         "bytecode calls unknown function ${name}"
  534       } else {
  535         expected: Nat = if builtin_exists(name) { builtin_arity(name) } else { len(target.value.parameters) }
  536         target_pure: Bool = if builtin_exists(name) { builtin_is_pure(name) } else { target.value.is_pure }
  537         if (!builtin_exists(name) && target.found && target.value.is_async) || name == "async_fake_read" || (name == "$tcp_exchange" || name == "$tcp_serve") { "ordinary call cannot enter async function" }
  538         else { if function.is_async && !target_pure { "async function cannot call blocking function" }
  539         else { if arity != expected { "bytecode call to ${name} has invalid arity" }
  540         else { if function.is_pure && !target_pure { "pure bytecode function calls impure function ${name}" } else { "" } } } }
  541       }
  542     },
  543     CallValueInstruction(arity) => "",
  544     AwaitCallInstruction(name, arity) => verify_await_call(name, arity, function, program),
  545     AwaitValueInstruction(arity) => if function.is_async { "" } else { "await requires async function" },
  546     JumpFalseInstruction(target) => if target < count { "" } else { "invalid jump target" },
  547     JumpInstruction(target) => if target < count { "" } else { "invalid jump target" },
  548     PendingEndJumpInstruction() => "unresolved bytecode jump",
  549     ReturnInstruction() => ""
  550   }
  551 }
  552 
  553 pure verify_function(function: FunctionCode, program: BytecodeProgram): Str {
  554   if (function.is_pure && function.is_async) || len(function.name) == 0 || duplicate_names(function.parameters) {
  555     "invalid function signature"
  556   } else {
  557     if len(function.instructions) == 0 {
  558       "bytecode function is empty"
  559     } else {
  560       mut message: Str = ""
  561       mut has_return: Bool = false
  562       for instruction in function.instructions {
  563         match instruction {
  564           ReturnInstruction() => { has_return = true; },
  565           ConstInstruction(value) => {}, LoadInstruction(name) => {}, StoreInstruction(name) => {},
  566           PopInstruction() => {}, UnaryInstruction(operator) => {}, BinaryInstruction(operator) => {},
  567           MakeRangeInstruction() => {}, MakeArrayInstruction(count) => {}, IndexGetInstruction() => {},
  568           InterpolateInstruction(parts) => {}, IterInitInstruction(name) => {},
  569           IterNextInstruction(iterator, name, end) => {}, MakeRecordInstruction(name, fields) => {},
  570           FieldGetInstruction(name) => {}, MakeVariantInstruction(enum_name, variant, count) => {},
  571           MatchVariantInstruction(variant, failure) => {}, MatchFailInstruction() => {},
  572           CallInstruction(name, arity) => {}, JumpFalseInstruction(target) => {},
  573           CallValueInstruction(arity) => {}, AwaitCallInstruction(name, arity) => {}, AwaitValueInstruction(arity) => {},
  574           JumpInstruction(target) => {}, PendingEndJumpInstruction() => {}
  575         }
  576         if len(message) == 0 { message = verify_instruction(instruction, function, program); } else {}
  577       }
  578       if len(message) > 0 { message }
  579       else { if has_return { "" } else { "bytecode function has no RETURN" } }
  580     }
  581   }
  582 }
  583 
  584 pure verify_bytecode_program(program: BytecodeProgram): Str {
  585   main: FunctionCodeLookup = bytecode_function(program, "main")
  586   if !main.found { "bytecode has no main function" }
  587   else { if len(main.value.parameters) > 0 { "bytecode main function cannot take parameters" }
  588   else {
  589     mut message: Str = ""
  590     mut total: Nat = 0
  591     for function in program.functions {
  592       total = total + len(function.instructions)
  593       if total > 4000000 && len(message) == 0 { message = "bytecode exceeds total instruction limit"; } else {}
  594       if len(message) == 0 { message = verify_function(function, program); } else {}
  595     }
  596     message
  597   } }
  598 }
  599 
  600 pure has_bytecode_magic(data: Bytes): Bool {
  601   expected: Bytes = bytes_concat(utf8_encode("PANACKBC"), encode_u8(0))
  602   if byte_len(data) < byte_len(expected) { false }
  603   else {
  604     mut matches: Bool = true
  605     mut cursor: Nat = 0
  606     while cursor < byte_len(expected) && matches {
  607       if byte_get(data, cursor) != byte_get(expected, cursor) { matches = false; } else {}
  608       cursor = cursor + 1
  609     }
  610     matches
  611   }
  612 }
  613 
  614 pure decode_bytecode(data: Bytes): BytecodeDecodeResult {
  615   if byte_len(data) > 16777216 { BytecodeDecodeError("bytecode artifact exceeds size limit") }
  616   else { if !has_bytecode_magic(data) { BytecodeDecodeError("not a Panackelty bytecode file") }
  617   else {
  618     initial: ByteReader = ByteReader(data, 9, true, "")
  619     version: ReadNat = read_u16(initial)
  620     if !version.reader.valid { BytecodeDecodeError(version.reader.message) }
  621     else { if version.value != 9 {
  622       version_number: Nat = version.value
  623       BytecodeDecodeError("unsupported bytecode version ${version_number}")
  624     }
  625     else {
  626       function_count: ReadNat = read_u16(version.reader)
  627       mut current: ByteReader = function_count.reader
  628       if function_count.value > 4096 { current = invalid_reader(current, "function count exceeds limit"); } else {}
  629       mut functions: [FunctionCode] = []
  630       mut previous_name: Str = ""
  631       mut cursor: Nat = 0
  632       mut total: Nat = 0
  633       while cursor < function_count.value && current.valid {
  634         decoded: ReadFunction = read_function(current)
  635         current = decoded.reader
  636         function: FunctionCode = decoded.value
  637         if cursor > 0 && function.name == previous_name {
  638           duplicate_name: Str = function.name
  639           current = invalid_reader(current, "duplicate function ${duplicate_name}")
  640         }
  641         else { if cursor > 0 && function.name < previous_name { current = invalid_reader(current, "functions are not canonically ordered"); } else {} }
  642         total = total + len(function.instructions)
  643         if total > 4000000 { current = invalid_reader(current, "total instruction count exceeds limit"); } else {}
  644         functions = append(functions, function)
  645         previous_name = function.name
  646         cursor = cursor + 1
  647       }
  648       if current.valid && current.offset != byte_len(data) { current = invalid_reader(current, "trailing data"); } else {}
  649       if !current.valid { BytecodeDecodeError(current.message) }
  650       else {
  651         program: BytecodeProgram = BytecodeProgram(functions)
  652         verification: Str = verify_bytecode_program(program)
  653         if len(verification) == 0 { BytecodeDecoded(program) } else { BytecodeDecodeError(verification) }
  654       }
  655     } }
  656   } }
  657 }
  658 
  659 pure validate_bytecode(data: Bytes): Str {
  660   match decode_bytecode(data) {
  661     BytecodeDecoded(program) => "ok",
  662     BytecodeDecodeError(message) => message
  663   }
  664 }
  665 
  666 pure disassemble_bytecode(data: Bytes): Str {
  667   match decode_bytecode(data) {
  668     BytecodeDecoded(program) => render_bytecode(program),
  669     BytecodeDecodeError(message) => message
  670   }
  671 }
  672 
  673 pure round_trip_bytecode(data: Bytes): Bytes {
  674   match decode_bytecode(data) {
  675     BytecodeDecoded(program) => serialize_bytecode(program),
  676     BytecodeDecodeError(message) => bytes()
  677   }
  678 }
  679 
  680 pure verify_await_call(name: Str, arity: Nat, function: FunctionCode, program: BytecodeProgram): Str {
  681   target: FunctionCodeLookup = bytecode_function(program, name)
  682   if !function.is_async { "await requires async function" }
  683   else { if name == "async_fake_read" || (name == "$tcp_exchange" || name == "$tcp_serve") {
  684     if arity == builtin_arity(name) { "" } else { "async service arity mismatch" }
  685   } else { if builtin_exists(name) || !target.found || !target.value.is_async { "await target must be async" }
  686   else { if arity != len(target.value.parameters) { "async call arity mismatch" } else { "" } } } }
  687 }
  688 

Functions

[
  {
    "id": "declaration/13",
    "name": "invalid_reader",
    "line": 65,
    "state": "covered",
    "entries": "89"
  },
  {
    "id": "declaration/14",
    "name": "reader_has",
    "line": 69,
    "state": "covered",
    "entries": "1907"
  },
  {
    "id": "declaration/15",
    "name": "read_u8",
    "line": 73,
    "state": "covered",
    "entries": "855"
  },
  {
    "id": "declaration/16",
    "name": "read_u16",
    "line": 82,
    "state": "covered",
    "entries": "542"
  },
  {
    "id": "declaration/17",
    "name": "read_u32",
    "line": 91,
    "state": "covered",
    "entries": "167"
  },
  {
    "id": "declaration/18",
    "name": "read_raw",
    "line": 103,
    "state": "covered",
    "entries": "343"
  },
  {
    "id": "declaration/19",
    "name": "utf8_continuation",
    "line": 117,
    "state": "covered",
    "entries": "62"
  },
  {
    "id": "declaration/20",
    "name": "valid_utf8",
    "line": 121,
    "state": "covered",
    "entries": "341"
  },
  {
    "id": "declaration/21",
    "name": "decode_utf8",
    "line": 163,
    "state": "covered",
    "entries": "294"
  },
  {
    "id": "declaration/22",
    "name": "read_name",
    "line": 180,
    "state": "covered",
    "entries": "267"
  },
  {
    "id": "declaration/23",
    "name": "read_text",
    "line": 185,
    "state": "covered",
    "entries": "27"
  },
  {
    "id": "declaration/24",
    "name": "nat_digit_count",
    "line": 190,
    "state": "covered",
    "entries": "37"
  },
  {
    "id": "declaration/25",
    "name": "read_natural",
    "line": 203,
    "state": "covered",
    "entries": "43"
  },
  {
    "id": "declaration/26",
    "name": "subtract_natural",
    "line": 229,
    "state": "covered",
    "entries": "6"
  },
  {
    "id": "declaration/27",
    "name": "read_i16",
    "line": 239,
    "state": "covered",
    "entries": "12"
  },
  {
    "id": "declaration/28",
    "name": "read_decimal",
    "line": 249,
    "state": "covered",
    "entries": "12"
  },
  {
    "id": "declaration/29",
    "name": "read_constant",
    "line": 281,
    "state": "covered",
    "entries": "111"
  },
  {
    "id": "declaration/30",
    "name": "read_names",
    "line": 322,
    "state": "covered",
    "entries": "118"
  },
  {
    "id": "declaration/31",
    "name": "read_texts",
    "line": 335,
    "state": "covered",
    "entries": "8"
  },
  {
    "id": "declaration/32",
    "name": "unary_operator",
    "line": 353,
    "state": "covered",
    "entries": "3"
  },
  {
    "id": "declaration/33",
    "name": "binary_operator",
    "line": 357,
    "state": "covered",
    "entries": "13"
  },
  {
    "id": "declaration/34",
    "name": "read_instruction",
    "line": 372,
    "state": "covered",
    "entries": "416"
  },
  {
    "id": "declaration/35",
    "name": "read_instructions",
    "line": 448,
    "state": "covered",
    "entries": "113"
  },
  {
    "id": "declaration/36",
    "name": "read_function",
    "line": 461,
    "state": "covered",
    "entries": "113"
  },
  {
    "id": "declaration/38",
    "name": "builtin_exists",
    "line": 480,
    "state": "covered",
    "entries": "162"
  },
  {
    "id": "declaration/39",
    "name": "builtin_is_pure",
    "line": 484,
    "state": "covered",
    "entries": "25"
  },
  {
    "id": "declaration/40",
    "name": "bytecode_function",
    "line": 488,
    "state": "covered",
    "entries": "95"
  },
  {
    "id": "declaration/41",
    "name": "duplicate_names",
    "line": 500,
    "state": "covered",
    "entries": "63"
  },
  {
    "id": "declaration/42",
    "name": "verify_instruction",
    "line": 510,
    "state": "covered",
    "entries": "357"
  },
  {
    "id": "declaration/43",
    "name": "verify_function",
    "line": 553,
    "state": "covered",
    "entries": "63"
  },
  {
    "id": "declaration/44",
    "name": "verify_bytecode_program",
    "line": 584,
    "state": "covered",
    "entries": "43"
  },
  {
    "id": "declaration/45",
    "name": "has_bytecode_magic",
    "line": 600,
    "state": "covered",
    "entries": "99"
  },
  {
    "id": "declaration/46",
    "name": "decode_bytecode",
    "line": 614,
    "state": "covered",
    "entries": "99"
  },
  {
    "id": "declaration/47",
    "name": "validate_bytecode",
    "line": 659,
    "state": "covered",
    "entries": "78"
  },
  {
    "id": "declaration/48",
    "name": "disassemble_bytecode",
    "line": 666,
    "state": "covered",
    "entries": "6"
  },
  {
    "id": "declaration/49",
    "name": "round_trip_bytecode",
    "line": 673,
    "state": "covered",
    "entries": "15"
  },
  {
    "id": "declaration/50",
    "name": "verify_await_call",
    "line": 680,
    "state": "covered",
    "entries": "6"
  }
]

Source branch outcomes

[
  {
    "id": "declaration/13/tail/decision/true",
    "outcome": "true",
    "line": 66,
    "state": "covered",
    "hits": "47"
  },
  {
    "id": "declaration/13/tail/decision/false",
    "outcome": "false",
    "line": 66,
    "state": "covered",
    "hits": "42"
  },
  {
    "id": "declaration/14/tail/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 70,
    "state": "covered",
    "hits": "1865"
  },
  {
    "id": "declaration/14/tail/decision/skip-right",
    "outcome": "skip-right",
    "line": 70,
    "state": "covered",
    "hits": "42"
  },
  {
    "id": "declaration/15/tail/decision/true",
    "outcome": "true",
    "line": 74,
    "state": "covered",
    "hits": "825"
  },
  {
    "id": "declaration/15/tail/decision/false",
    "outcome": "false",
    "line": 74,
    "state": "covered",
    "hits": "30"
  },
  {
    "id": "declaration/16/tail/decision/true",
    "outcome": "true",
    "line": 83,
    "state": "covered",
    "hits": "534"
  },
  {
    "id": "declaration/16/tail/decision/false",
    "outcome": "false",
    "line": 83,
    "state": "covered",
    "hits": "8"
  },
  {
    "id": "declaration/17/tail/decision/true",
    "outcome": "true",
    "line": 92,
    "state": "covered",
    "hits": "151"
  },
  {
    "id": "declaration/17/tail/decision/false",
    "outcome": "false",
    "line": 92,
    "state": "covered",
    "hits": "16"
  },
  {
    "id": "declaration/18/tail/decision/true",
    "outcome": "true",
    "line": 104,
    "state": "covered",
    "hits": "335"
  },
  {
    "id": "declaration/18/tail/decision/false",
    "outcome": "false",
    "line": 104,
    "state": "covered",
    "hits": "8"
  },
  {
    "id": "declaration/18/tail/true/statement/2/decision/body",
    "outcome": "body",
    "line": 107,
    "state": "covered",
    "hits": "1636"
  },
  {
    "id": "declaration/18/tail/true/statement/2/decision/exit",
    "outcome": "exit",
    "line": 107,
    "state": "covered",
    "hits": "335"
  },
  {
    "id": "declaration/19/tail/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 118,
    "state": "covered",
    "hits": "56"
  },
  {
    "id": "declaration/19/tail/decision/skip-right",
    "outcome": "skip-right",
    "line": 118,
    "state": "covered",
    "hits": "6"
  },
  {
    "id": "declaration/20/statement/2/decision/body",
    "outcome": "body",
    "line": 124,
    "state": "covered",
    "hits": "23308"
  },
  {
    "id": "declaration/20/statement/2/decision/exit",
    "outcome": "exit",
    "line": 124,
    "state": "covered",
    "hits": "341"
  },
  {
    "id": "declaration/20/statement/2/condition/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 124,
    "state": "covered",
    "hits": "23329"
  },
  {
    "id": "declaration/20/statement/2/condition/decision/skip-right",
    "outcome": "skip-right",
    "line": 124,
    "state": "covered",
    "hits": "320"
  },
  {
    "id": "declaration/20/statement/2/body/tail/decision/true",
    "outcome": "true",
    "line": 126,
    "state": "covered",
    "hits": "23263"
  },
  {
    "id": "declaration/20/statement/2/body/tail/decision/false",
    "outcome": "false",
    "line": 126,
    "state": "covered",
    "hits": "45"
  },
  {
    "id": "declaration/20/statement/2/body/tail/false/tail/decision/true",
    "outcome": "true",
    "line": 129,
    "state": "covered",
    "hits": "13"
  },
  {
    "id": "declaration/20/statement/2/body/tail/false/tail/decision/false",
    "outcome": "false",
    "line": 129,
    "state": "covered",
    "hits": "32"
  },
  {
    "id": "declaration/20/statement/2/body/tail/false/tail/condition/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 129,
    "state": "covered",
    "hits": "43"
  },
  {
    "id": "declaration/20/statement/2/body/tail/false/tail/condition/decision/skip-right",
    "outcome": "skip-right",
    "line": 129,
    "state": "covered",
    "hits": "2"
  },
  {
    "id": "declaration/20/statement/2/body/tail/false/tail/true/tail/decision/true",
    "outcome": "true",
    "line": 130,
    "state": "covered",
    "hits": "10"
  },
  {
    "id": "declaration/20/statement/2/body/tail/false/tail/true/tail/decision/false",
    "outcome": "false",
    "line": 130,
    "state": "covered",
    "hits": "3"
  },
  {
    "id": "declaration/20/statement/2/body/tail/false/tail/true/tail/condition/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 130,
    "state": "covered",
    "hits": "12"
  },
  {
    "id": "declaration/20/statement/2/body/tail/false/tail/true/tail/condition/decision/skip-right",
    "outcome": "skip-right",
    "line": 130,
    "state": "covered",
    "hits": "1"
  },
  {
    "id": "declaration/20/statement/2/body/tail/false/tail/false/tail/decision/true",
    "outcome": "true",
    "line": 134,
    "state": "covered",
    "hits": "10"
  },
  {
    "id": "declaration/20/statement/2/body/tail/false/tail/false/tail/decision/false",
    "outcome": "false",
    "line": 134,
    "state": "covered",
    "hits": "22"
  },
  {
    "id": "declaration/20/statement/2/body/tail/false/tail/false/tail/condition/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 134,
    "state": "covered",
    "hits": "30"
  },
  {
    "id": "declaration/20/statement/2/body/tail/false/tail/false/tail/condition/decision/skip-right",
    "outcome": "skip-right",
    "line": 134,
    "state": "covered",
    "hits": "2"
  },
  {
    "id": "declaration/20/statement/2/body/tail/false/tail/false/tail/true/tail/decision/true",
    "outcome": "true",
    "line": 135,
    "state": "covered",
    "hits": "9"
  },
  {
    "id": "declaration/20/statement/2/body/tail/false/tail/false/tail/true/tail/decision/false",
    "outcome": "false",
    "line": 135,
    "state": "covered",
    "hits": "1"
  },
  {
    "id": "declaration/20/statement/2/body/tail/false/tail/false/tail/true/tail/true/statement/2/value/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 138,
    "state": "covered",
    "hits": "7"
  },
  {
    "id": "declaration/20/statement/2/body/tail/false/tail/false/tail/true/tail/true/statement/2/value/decision/skip-right",
    "outcome": "skip-right",
    "line": 138,
    "state": "covered",
    "hits": "2"
  },
  {
    "id": "declaration/20/statement/2/body/tail/false/tail/false/tail/true/tail/true/statement/2/value/left/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 138,
    "state": "covered",
    "hits": "8"
  },
  {
    "id": "declaration/20/statement/2/body/tail/false/tail/false/tail/true/tail/true/statement/2/value/left/decision/skip-right",
    "outcome": "skip-right",
    "line": 138,
    "state": "covered",
    "hits": "1"
  },
  {
    "id": "declaration/20/statement/2/body/tail/false/tail/false/tail/true/tail/true/statement/2/value/left/right/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 139,
    "state": "covered",
    "hits": "4"
  },
  {
    "id": "declaration/20/statement/2/body/tail/false/tail/false/tail/true/tail/true/statement/2/value/left/right/decision/skip-right",
    "outcome": "skip-right",
    "line": 139,
    "state": "covered",
    "hits": "4"
  },
  {
    "id": "declaration/20/statement/2/body/tail/false/tail/false/tail/true/tail/true/statement/2/value/right/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 139,
    "state": "covered",
    "hits": "2"
  },
  {
    "id": "declaration/20/statement/2/body/tail/false/tail/false/tail/true/tail/true/statement/2/value/right/decision/skip-right",
    "outcome": "skip-right",
    "line": 139,
    "state": "covered",
    "hits": "5"
  },
  {
    "id": "declaration/20/statement/2/body/tail/false/tail/false/tail/true/tail/true/tail/decision/true",
    "outcome": "true",
    "line": 140,
    "state": "covered",
    "hits": "5"
  },
  {
    "id": "declaration/20/statement/2/body/tail/false/tail/false/tail/true/tail/true/tail/decision/false",
    "outcome": "false",
    "line": 140,
    "state": "covered",
    "hits": "4"
  },
  {
    "id": "declaration/20/statement/2/body/tail/false/tail/false/tail/true/tail/true/tail/condition/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 140,
    "state": "covered",
    "hits": "6"
  },
  {
    "id": "declaration/20/statement/2/body/tail/false/tail/false/tail/true/tail/true/tail/condition/decision/skip-right",
    "outcome": "skip-right",
    "line": 140,
    "state": "covered",
    "hits": "3"
  },
  {
    "id": "declaration/20/statement/2/body/tail/false/tail/false/tail/false/tail/decision/true",
    "outcome": "true",
    "line": 144,
    "state": "covered",
    "hits": "15"
  },
  {
    "id": "declaration/20/statement/2/body/tail/false/tail/false/tail/false/tail/decision/false",
    "outcome": "false",
    "line": 144,
    "state": "covered",
    "hits": "7"
  },
  {
    "id": "declaration/20/statement/2/body/tail/false/tail/false/tail/false/tail/condition/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 144,
    "state": "covered",
    "hits": "20"
  },
  {
    "id": "declaration/20/statement/2/body/tail/false/tail/false/tail/false/tail/condition/decision/skip-right",
    "outcome": "skip-right",
    "line": 144,
    "state": "covered",
    "hits": "2"
  },
  {
    "id": "declaration/20/statement/2/body/tail/false/tail/false/tail/false/tail/true/tail/decision/true",
    "outcome": "true",
    "line": 145,
    "state": "covered",
    "hits": "14"
  },
  {
    "id": "declaration/20/statement/2/body/tail/false/tail/false/tail/false/tail/true/tail/decision/false",
    "outcome": "false",
    "line": 145,
    "state": "covered",
    "hits": "1"
  },
  {
    "id": "declaration/20/statement/2/body/tail/false/tail/false/tail/false/tail/true/tail/true/statement/3/value/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 149,
    "state": "covered",
    "hits": "12"
  },
  {
    "id": "declaration/20/statement/2/body/tail/false/tail/false/tail/false/tail/true/tail/true/statement/3/value/decision/skip-right",
    "outcome": "skip-right",
    "line": 149,
    "state": "covered",
    "hits": "2"
  },
  {
    "id": "declaration/20/statement/2/body/tail/false/tail/false/tail/false/tail/true/tail/true/statement/3/value/left/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 149,
    "state": "covered",
    "hits": "13"
  },
  {
    "id": "declaration/20/statement/2/body/tail/false/tail/false/tail/false/tail/true/tail/true/statement/3/value/left/decision/skip-right",
    "outcome": "skip-right",
    "line": 149,
    "state": "covered",
    "hits": "1"
  },
  {
    "id": "declaration/20/statement/2/body/tail/false/tail/false/tail/false/tail/true/tail/true/statement/3/value/left/right/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 150,
    "state": "covered",
    "hits": "11"
  },
  {
    "id": "declaration/20/statement/2/body/tail/false/tail/false/tail/false/tail/true/tail/true/statement/3/value/left/right/decision/skip-right",
    "outcome": "skip-right",
    "line": 150,
    "state": "covered",
    "hits": "2"
  },
  {
    "id": "declaration/20/statement/2/body/tail/false/tail/false/tail/false/tail/true/tail/true/statement/3/value/right/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 150,
    "state": "covered",
    "hits": "2"
  },
  {
    "id": "declaration/20/statement/2/body/tail/false/tail/false/tail/false/tail/true/tail/true/statement/3/value/right/decision/skip-right",
    "outcome": "skip-right",
    "line": 150,
    "state": "covered",
    "hits": "10"
  },
  {
    "id": "declaration/20/statement/2/body/tail/false/tail/false/tail/false/tail/true/tail/true/tail/decision/true",
    "outcome": "true",
    "line": 151,
    "state": "covered",
    "hits": "9"
  },
  {
    "id": "declaration/20/statement/2/body/tail/false/tail/false/tail/false/tail/true/tail/true/tail/decision/false",
    "outcome": "false",
    "line": 151,
    "state": "covered",
    "hits": "5"
  },
  {
    "id": "declaration/20/statement/2/body/tail/false/tail/false/tail/false/tail/true/tail/true/tail/condition/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 151,
    "state": "covered",
    "hits": "10"
  },
  {
    "id": "declaration/20/statement/2/body/tail/false/tail/false/tail/false/tail/true/tail/true/tail/condition/decision/skip-right",
    "outcome": "skip-right",
    "line": 151,
    "state": "covered",
    "hits": "4"
  },
  {
    "id": "declaration/20/statement/2/body/tail/false/tail/false/tail/false/tail/true/tail/true/tail/condition/left/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 151,
    "state": "covered",
    "hits": "11"
  },
  {
    "id": "declaration/20/statement/2/body/tail/false/tail/false/tail/false/tail/true/tail/true/tail/condition/left/decision/skip-right",
    "outcome": "skip-right",
    "line": 151,
    "state": "covered",
    "hits": "3"
  },
  {
    "id": "declaration/21/tail/decision/true",
    "outcome": "true",
    "line": 164,
    "state": "covered",
    "hits": "2"
  },
  {
    "id": "declaration/21/tail/decision/false",
    "outcome": "false",
    "line": 164,
    "state": "covered",
    "hits": "292"
  },
  {
    "id": "declaration/21/tail/false/tail/decision/true",
    "outcome": "true",
    "line": 168,
    "state": "covered",
    "hits": "282"
  },
  {
    "id": "declaration/21/tail/false/tail/decision/false",
    "outcome": "false",
    "line": 168,
    "state": "covered",
    "hits": "10"
  },
  {
    "id": "declaration/21/tail/false/tail/condition/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 168,
    "state": "covered",
    "hits": "284"
  },
  {
    "id": "declaration/21/tail/false/tail/condition/decision/skip-right",
    "outcome": "skip-right",
    "line": 168,
    "state": "covered",
    "hits": "8"
  },
  {
    "id": "declaration/21/tail/false/tail/false/tail/decision/true",
    "outcome": "true",
    "line": 171,
    "state": "covered",
    "hits": "2"
  },
  {
    "id": "declaration/21/tail/false/tail/false/tail/decision/false",
    "outcome": "false",
    "line": 171,
    "state": "covered",
    "hits": "8"
  },
  {
    "id": "declaration/24/tail/decision/true",
    "outcome": "true",
    "line": 191,
    "state": "covered",
    "hits": "10"
  },
  {
    "id": "declaration/24/tail/decision/false",
    "outcome": "false",
    "line": 191,
    "state": "covered",
    "hits": "27"
  },
  {
    "id": "declaration/24/tail/false/statement/2/decision/body",
    "outcome": "body",
    "line": 195,
    "state": "covered",
    "hits": "383"
  },
  {
    "id": "declaration/24/tail/false/statement/2/decision/exit",
    "outcome": "exit",
    "line": 195,
    "state": "covered",
    "hits": "27"
  },
  {
    "id": "declaration/25/tail/decision/true",
    "outcome": "true",
    "line": 205,
    "state": "covered",
    "hits": "3"
  },
  {
    "id": "declaration/25/tail/decision/false",
    "outcome": "false",
    "line": 205,
    "state": "covered",
    "hits": "40"
  },
  {
    "id": "declaration/25/tail/false/tail/decision/true",
    "outcome": "true",
    "line": 207,
    "state": "covered",
    "hits": "1"
  },
  {
    "id": "declaration/25/tail/false/tail/decision/false",
    "outcome": "false",
    "line": 207,
    "state": "covered",
    "hits": "39"
  },
  {
    "id": "declaration/25/tail/false/tail/false/tail/decision/true",
    "outcome": "true",
    "line": 211,
    "state": "zero",
    "hits": "0"
  },
  {
    "id": "declaration/25/tail/false/tail/false/tail/decision/false",
    "outcome": "false",
    "line": 211,
    "state": "covered",
    "hits": "39"
  },
  {
    "id": "declaration/25/tail/false/tail/false/tail/false/tail/decision/true",
    "outcome": "true",
    "line": 213,
    "state": "covered",
    "hits": "2"
  },
  {
    "id": "declaration/25/tail/false/tail/false/tail/false/tail/decision/false",
    "outcome": "false",
    "line": 213,
    "state": "covered",
    "hits": "37"
  },
  {
    "id": "declaration/25/tail/false/tail/false/tail/false/tail/condition/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 213,
    "state": "covered",
    "hits": "29"
  },
  {
    "id": "declaration/25/tail/false/tail/false/tail/false/tail/condition/decision/skip-right",
    "outcome": "skip-right",
    "line": 213,
    "state": "covered",
    "hits": "10"
  },
  {
    "id": "declaration/25/tail/false/tail/false/tail/false/tail/false/statement/1/decision/body",
    "outcome": "body",
    "line": 217,
    "state": "covered",
    "hits": "168"
  },
  {
    "id": "declaration/25/tail/false/tail/false/tail/false/tail/false/statement/1/decision/exit",
    "outcome": "exit",
    "line": 217,
    "state": "covered",
    "hits": "37"
  },
  {
    "id": "declaration/25/tail/false/tail/false/tail/false/tail/false/tail/decision/true",
    "outcome": "true",
    "line": 218,
    "state": "zero",
    "hits": "0"
  },
  {
    "id": "declaration/25/tail/false/tail/false/tail/false/tail/false/tail/decision/false",
    "outcome": "false",
    "line": 218,
    "state": "covered",
    "hits": "37"
  },
  {
    "id": "declaration/26/statement/2/decision/body",
    "outcome": "body",
    "line": 232,
    "state": "covered",
    "hits": "393195"
  },
  {
    "id": "declaration/26/statement/2/decision/exit",
    "outcome": "exit",
    "line": 232,
    "state": "covered",
    "hits": "6"
  },
  {
    "id": "declaration/26/statement/2/body/statement/0/value/decision/true",
    "outcome": "true",
    "line": 233,
    "state": "covered",
    "hits": "393195"
  },
  {
    "id": "declaration/26/statement/2/body/statement/0/value/decision/false",
    "outcome": "false",
    "line": 233,
    "state": "zero",
    "hits": "0"
  },
  {
    "id": "declaration/27/tail/decision/true",
    "outcome": "true",
    "line": 241,
    "state": "covered",
    "hits": "6"
  },
  {
    "id": "declaration/27/tail/decision/false",
    "outcome": "false",
    "line": 241,
    "state": "covered",
    "hits": "6"
  },
  {
    "id": "declaration/28/statement/4/value/decision/true",
    "outcome": "true",
    "line": 254,
    "state": "zero",
    "hits": "0"
  },
  {
    "id": "declaration/28/statement/4/value/decision/false",
    "outcome": "false",
    "line": 254,
    "state": "covered",
    "hits": "12"
  },
  {
    "id": "declaration/28/statement/5/value/decision/true",
    "outcome": "true",
    "line": 255,
    "state": "zero",
    "hits": "0"
  },
  {
    "id": "declaration/28/statement/5/value/decision/false",
    "outcome": "false",
    "line": 255,
    "state": "covered",
    "hits": "12"
  },
  {
    "id": "declaration/28/statement/6/value/decision/true",
    "outcome": "true",
    "line": 256,
    "state": "zero",
    "hits": "0"
  },
  {
    "id": "declaration/28/statement/6/value/decision/false",
    "outcome": "false",
    "line": 256,
    "state": "covered",
    "hits": "12"
  },
  {
    "id": "declaration/28/statement/6/value/condition/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 256,
    "state": "covered",
    "hits": "12"
  },
  {
    "id": "declaration/28/statement/6/value/condition/decision/skip-right",
    "outcome": "skip-right",
    "line": 256,
    "state": "zero",
    "hits": "0"
  },
  {
    "id": "declaration/28/statement/10/decision/body",
    "outcome": "body",
    "line": 260,
    "state": "covered",
    "hits": "26"
  },
  {
    "id": "declaration/28/statement/10/decision/exit",
    "outcome": "exit",
    "line": 260,
    "state": "covered",
    "hits": "12"
  },
  {
    "id": "declaration/28/statement/10/condition/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 260,
    "state": "covered",
    "hits": "26"
  },
  {
    "id": "declaration/28/statement/10/condition/decision/skip-right",
    "outcome": "skip-right",
    "line": 260,
    "state": "covered",
    "hits": "12"
  },
  {
    "id": "declaration/28/statement/10/body/statement/3/value/decision/true",
    "outcome": "true",
    "line": 264,
    "state": "zero",
    "hits": "0"
  },
  {
    "id": "declaration/28/statement/10/body/statement/3/value/decision/false",
    "outcome": "false",
    "line": 264,
    "state": "covered",
    "hits": "26"
  },
  {
    "id": "declaration/28/statement/10/body/statement/4/value/decision/true",
    "outcome": "true",
    "line": 266,
    "state": "covered",
    "hits": "16"
  },
  {
    "id": "declaration/28/statement/10/body/statement/4/value/decision/false",
    "outcome": "false",
    "line": 266,
    "state": "covered",
    "hits": "10"
  },
  {
    "id": "declaration/28/statement/10/body/statement/4/value/true/tail/decision/true",
    "outcome": "true",
    "line": 267,
    "state": "zero",
    "hits": "0"
  },
  {
    "id": "declaration/28/statement/10/body/statement/4/value/true/tail/decision/false",
    "outcome": "false",
    "line": 267,
    "state": "covered",
    "hits": "16"
  },
  {
    "id": "declaration/28/statement/10/body/statement/4/value/false/tail/decision/true",
    "outcome": "true",
    "line": 270,
    "state": "covered",
    "hits": "2"
  },
  {
    "id": "declaration/28/statement/10/body/statement/4/value/false/tail/decision/false",
    "outcome": "false",
    "line": 270,
    "state": "covered",
    "hits": "8"
  },
  {
    "id": "declaration/28/statement/11/value/decision/true",
    "outcome": "true",
    "line": 274,
    "state": "covered",
    "hits": "1"
  },
  {
    "id": "declaration/28/statement/11/value/decision/false",
    "outcome": "false",
    "line": 274,
    "state": "covered",
    "hits": "11"
  },
  {
    "id": "declaration/28/statement/11/value/condition/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 274,
    "state": "covered",
    "hits": "6"
  },
  {
    "id": "declaration/28/statement/11/value/condition/decision/skip-right",
    "outcome": "skip-right",
    "line": 274,
    "state": "covered",
    "hits": "6"
  },
  {
    "id": "declaration/28/tail/args/0/args/2/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 278,
    "state": "covered",
    "hits": "9"
  },
  {
    "id": "declaration/28/tail/args/0/args/2/decision/skip-right",
    "outcome": "skip-right",
    "line": 278,
    "state": "covered",
    "hits": "3"
  },
  {
    "id": "declaration/28/tail/args/0/args/3/decision/true",
    "outcome": "true",
    "line": 278,
    "state": "covered",
    "hits": "9"
  },
  {
    "id": "declaration/28/tail/args/0/args/3/decision/false",
    "outcome": "false",
    "line": 278,
    "state": "covered",
    "hits": "3"
  },
  {
    "id": "declaration/29/tail/decision/true",
    "outcome": "true",
    "line": 283,
    "state": "covered",
    "hits": "36"
  },
  {
    "id": "declaration/29/tail/decision/false",
    "outcome": "false",
    "line": 283,
    "state": "covered",
    "hits": "75"
  },
  {
    "id": "declaration/29/tail/false/tail/decision/true",
    "outcome": "true",
    "line": 287,
    "state": "covered",
    "hits": "7"
  },
  {
    "id": "declaration/29/tail/false/tail/decision/false",
    "outcome": "false",
    "line": 287,
    "state": "covered",
    "hits": "68"
  },
  {
    "id": "declaration/29/tail/false/tail/true/statement/3/value/decision/true",
    "outcome": "true",
    "line": 291,
    "state": "zero",
    "hits": "0"
  },
  {
    "id": "declaration/29/tail/false/tail/true/statement/3/value/decision/false",
    "outcome": "false",
    "line": 291,
    "state": "covered",
    "hits": "7"
  },
  {
    "id": "declaration/29/tail/false/tail/true/statement/4/value/decision/true",
    "outcome": "true",
    "line": 292,
    "state": "covered",
    "hits": "1"
  },
  {
    "id": "declaration/29/tail/false/tail/true/statement/4/value/decision/false",
    "outcome": "false",
    "line": 292,
    "state": "covered",
    "hits": "6"
  },
  {
    "id": "declaration/29/tail/false/tail/true/statement/4/value/condition/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 292,
    "state": "covered",
    "hits": "7"
  },
  {
    "id": "declaration/29/tail/false/tail/true/statement/4/value/condition/decision/skip-right",
    "outcome": "skip-right",
    "line": 292,
    "state": "zero",
    "hits": "0"
  },
  {
    "id": "declaration/29/tail/false/tail/false/tail/decision/true",
    "outcome": "true",
    "line": 295,
    "state": "covered",
    "hits": "12"
  },
  {
    "id": "declaration/29/tail/false/tail/false/tail/decision/false",
    "outcome": "false",
    "line": 295,
    "state": "covered",
    "hits": "56"
  },
  {
    "id": "declaration/29/tail/false/tail/false/tail/false/tail/decision/true",
    "outcome": "true",
    "line": 298,
    "state": "covered",
    "hits": "11"
  },
  {
    "id": "declaration/29/tail/false/tail/false/tail/false/tail/decision/false",
    "outcome": "false",
    "line": 298,
    "state": "covered",
    "hits": "45"
  },
  {
    "id": "declaration/29/tail/false/tail/false/tail/false/tail/false/tail/decision/true",
    "outcome": "true",
    "line": 302,
    "state": "covered",
    "hits": "6"
  },
  {
    "id": "declaration/29/tail/false/tail/false/tail/false/tail/false/tail/decision/false",
    "outcome": "false",
    "line": 302,
    "state": "covered",
    "hits": "39"
  },
  {
    "id": "declaration/29/tail/false/tail/false/tail/false/tail/false/tail/true/tail/decision/true",
    "outcome": "true",
    "line": 304,
    "state": "covered",
    "hits": "2"
  },
  {
    "id": "declaration/29/tail/false/tail/false/tail/false/tail/false/tail/true/tail/decision/false",
    "outcome": "false",
    "line": 304,
    "state": "covered",
    "hits": "4"
  },
  {
    "id": "declaration/29/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/true",
    "outcome": "true",
    "line": 310,
    "state": "covered",
    "hits": "38"
  },
  {
    "id": "declaration/29/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/false",
    "outcome": "false",
    "line": 310,
    "state": "covered",
    "hits": "1"
  },
  {
    "id": "declaration/30/statement/3/decision/body",
    "outcome": "body",
    "line": 326,
    "state": "covered",
    "hits": "19"
  },
  {
    "id": "declaration/30/statement/3/decision/exit",
    "outcome": "exit",
    "line": 326,
    "state": "covered",
    "hits": "118"
  },
  {
    "id": "declaration/30/statement/3/condition/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 326,
    "state": "covered",
    "hits": "19"
  },
  {
    "id": "declaration/30/statement/3/condition/decision/skip-right",
    "outcome": "skip-right",
    "line": 326,
    "state": "covered",
    "hits": "118"
  },
  {
    "id": "declaration/31/tail/decision/true",
    "outcome": "true",
    "line": 337,
    "state": "zero",
    "hits": "0"
  },
  {
    "id": "declaration/31/tail/decision/false",
    "outcome": "false",
    "line": 337,
    "state": "covered",
    "hits": "8"
  },
  {
    "id": "declaration/31/tail/false/statement/3/decision/body",
    "outcome": "body",
    "line": 343,
    "state": "covered",
    "hits": "16"
  },
  {
    "id": "declaration/31/tail/false/statement/3/decision/exit",
    "outcome": "exit",
    "line": 343,
    "state": "covered",
    "hits": "8"
  },
  {
    "id": "declaration/31/tail/false/statement/3/condition/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 343,
    "state": "covered",
    "hits": "16"
  },
  {
    "id": "declaration/31/tail/false/statement/3/condition/decision/skip-right",
    "outcome": "skip-right",
    "line": 343,
    "state": "covered",
    "hits": "8"
  },
  {
    "id": "declaration/32/tail/decision/true",
    "outcome": "true",
    "line": 354,
    "state": "covered",
    "hits": "3"
  },
  {
    "id": "declaration/32/tail/decision/false",
    "outcome": "false",
    "line": 354,
    "state": "zero",
    "hits": "0"
  },
  {
    "id": "declaration/33/tail/decision/true",
    "outcome": "true",
    "line": 358,
    "state": "covered",
    "hits": "7"
  },
  {
    "id": "declaration/33/tail/decision/false",
    "outcome": "false",
    "line": 358,
    "state": "covered",
    "hits": "6"
  },
  {
    "id": "declaration/33/tail/false/tail/decision/true",
    "outcome": "true",
    "line": 359,
    "state": "zero",
    "hits": "0"
  },
  {
    "id": "declaration/33/tail/false/tail/decision/false",
    "outcome": "false",
    "line": 359,
    "state": "covered",
    "hits": "6"
  },
  {
    "id": "declaration/33/tail/false/tail/false/tail/decision/true",
    "outcome": "true",
    "line": 360,
    "state": "covered",
    "hits": "2"
  },
  {
    "id": "declaration/33/tail/false/tail/false/tail/decision/false",
    "outcome": "false",
    "line": 360,
    "state": "covered",
    "hits": "4"
  },
  {
    "id": "declaration/33/tail/false/tail/false/tail/false/tail/decision/true",
    "outcome": "true",
    "line": 361,
    "state": "covered",
    "hits": "2"
  },
  {
    "id": "declaration/33/tail/false/tail/false/tail/false/tail/decision/false",
    "outcome": "false",
    "line": 361,
    "state": "covered",
    "hits": "2"
  },
  {
    "id": "declaration/33/tail/false/tail/false/tail/false/tail/false/tail/decision/true",
    "outcome": "true",
    "line": 362,
    "state": "zero",
    "hits": "0"
  },
  {
    "id": "declaration/33/tail/false/tail/false/tail/false/tail/false/tail/decision/false",
    "outcome": "false",
    "line": 362,
    "state": "covered",
    "hits": "2"
  },
  {
    "id": "declaration/33/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/true",
    "outcome": "true",
    "line": 363,
    "state": "zero",
    "hits": "0"
  },
  {
    "id": "declaration/33/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/false",
    "outcome": "false",
    "line": 363,
    "state": "covered",
    "hits": "2"
  },
  {
    "id": "declaration/33/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/true",
    "outcome": "true",
    "line": 364,
    "state": "zero",
    "hits": "0"
  },
  {
    "id": "declaration/33/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/false",
    "outcome": "false",
    "line": 364,
    "state": "covered",
    "hits": "2"
  },
  {
    "id": "declaration/33/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/true",
    "outcome": "true",
    "line": 365,
    "state": "zero",
    "hits": "0"
  },
  {
    "id": "declaration/33/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/false",
    "outcome": "false",
    "line": 365,
    "state": "covered",
    "hits": "2"
  },
  {
    "id": "declaration/33/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/true",
    "outcome": "true",
    "line": 366,
    "state": "zero",
    "hits": "0"
  },
  {
    "id": "declaration/33/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/false",
    "outcome": "false",
    "line": 366,
    "state": "covered",
    "hits": "2"
  },
  {
    "id": "declaration/33/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/true",
    "outcome": "true",
    "line": 367,
    "state": "covered",
    "hits": "2"
  },
  {
    "id": "declaration/33/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/false",
    "outcome": "false",
    "line": 367,
    "state": "zero",
    "hits": "0"
  },
  {
    "id": "declaration/33/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/true",
    "outcome": "true",
    "line": 368,
    "state": "zero",
    "hits": "0"
  },
  {
    "id": "declaration/33/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/false",
    "outcome": "false",
    "line": 368,
    "state": "zero",
    "hits": "0"
  },
  {
    "id": "declaration/33/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/true",
    "outcome": "true",
    "line": 369,
    "state": "zero",
    "hits": "0"
  },
  {
    "id": "declaration/33/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/false",
    "outcome": "false",
    "line": 369,
    "state": "zero",
    "hits": "0"
  },
  {
    "id": "declaration/34/tail/decision/true",
    "outcome": "true",
    "line": 374,
    "state": "covered",
    "hits": "111"
  },
  {
    "id": "declaration/34/tail/decision/false",
    "outcome": "false",
    "line": 374,
    "state": "covered",
    "hits": "305"
  },
  {
    "id": "declaration/34/tail/false/tail/decision/true",
    "outcome": "true",
    "line": 377,
    "state": "covered",
    "hits": "26"
  },
  {
    "id": "declaration/34/tail/false/tail/decision/false",
    "outcome": "false",
    "line": 377,
    "state": "covered",
    "hits": "279"
  },
  {
    "id": "declaration/34/tail/false/tail/false/tail/decision/true",
    "outcome": "true",
    "line": 379,
    "state": "covered",
    "hits": "12"
  },
  {
    "id": "declaration/34/tail/false/tail/false/tail/decision/false",
    "outcome": "false",
    "line": 379,
    "state": "covered",
    "hits": "267"
  },
  {
    "id": "declaration/34/tail/false/tail/false/tail/false/tail/decision/true",
    "outcome": "true",
    "line": 381,
    "state": "covered",
    "hits": "42"
  },
  {
    "id": "declaration/34/tail/false/tail/false/tail/false/tail/decision/false",
    "outcome": "false",
    "line": 381,
    "state": "covered",
    "hits": "225"
  },
  {
    "id": "declaration/34/tail/false/tail/false/tail/false/tail/false/tail/decision/true",
    "outcome": "true",
    "line": 383,
    "state": "covered",
    "hits": "3"
  },
  {
    "id": "declaration/34/tail/false/tail/false/tail/false/tail/false/tail/decision/false",
    "outcome": "false",
    "line": 383,
    "state": "covered",
    "hits": "222"
  },
  {
    "id": "declaration/34/tail/false/tail/false/tail/false/tail/false/tail/true/tail/decision/true",
    "outcome": "true",
    "line": 385,
    "state": "zero",
    "hits": "0"
  },
  {
    "id": "declaration/34/tail/false/tail/false/tail/false/tail/false/tail/true/tail/decision/false",
    "outcome": "false",
    "line": 385,
    "state": "covered",
    "hits": "3"
  },
  {
    "id": "declaration/34/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/true",
    "outcome": "true",
    "line": 387,
    "state": "covered",
    "hits": "13"
  },
  {
    "id": "declaration/34/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/false",
    "outcome": "false",
    "line": 387,
    "state": "covered",
    "hits": "209"
  },
  {
    "id": "declaration/34/tail/false/tail/false/tail/false/tail/false/tail/false/tail/true/tail/decision/true",
    "outcome": "true",
    "line": 389,
    "state": "zero",
    "hits": "0"
  },
  {
    "id": "declaration/34/tail/false/tail/false/tail/false/tail/false/tail/false/tail/true/tail/decision/false",
    "outcome": "false",
    "line": 389,
    "state": "covered",
    "hits": "13"
  },
  {
    "id": "declaration/34/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/true",
    "outcome": "true",
    "line": 391,
    "state": "covered",
    "hits": "4"
  },
  {
    "id": "declaration/34/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/false",
    "outcome": "false",
    "line": 391,
    "state": "covered",
    "hits": "205"
  },
  {
    "id": "declaration/34/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/true",
    "outcome": "true",
    "line": 393,
    "state": "covered",
    "hits": "3"
  },
  {
    "id": "declaration/34/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/false",
    "outcome": "false",
    "line": 393,
    "state": "covered",
    "hits": "202"
  },
  {
    "id": "declaration/34/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/true",
    "outcome": "true",
    "line": 395,
    "state": "covered",
    "hits": "3"
  },
  {
    "id": "declaration/34/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/false",
    "outcome": "false",
    "line": 395,
    "state": "covered",
    "hits": "199"
  },
  {
    "id": "declaration/34/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/true",
    "outcome": "true",
    "line": 397,
    "state": "covered",
    "hits": "8"
  },
  {
    "id": "declaration/34/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/false",
    "outcome": "false",
    "line": 397,
    "state": "covered",
    "hits": "191"
  },
  {
    "id": "declaration/34/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/true",
    "outcome": "true",
    "line": 399,
    "state": "covered",
    "hits": "4"
  },
  {
    "id": "declaration/34/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/false",
    "outcome": "false",
    "line": 399,
    "state": "covered",
    "hits": "187"
  },
  {
    "id": "declaration/34/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/true",
    "outcome": "true",
    "line": 401,
    "state": "covered",
    "hits": "4"
  },
  {
    "id": "declaration/34/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/false",
    "outcome": "false",
    "line": 401,
    "state": "covered",
    "hits": "183"
  },
  {
    "id": "declaration/34/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/true",
    "outcome": "true",
    "line": 406,
    "state": "covered",
    "hits": "5"
  },
  {
    "id": "declaration/34/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/false",
    "outcome": "false",
    "line": 406,
    "state": "covered",
    "hits": "178"
  },
  {
    "id": "declaration/34/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/true",
    "outcome": "true",
    "line": 411,
    "state": "covered",
    "hits": "7"
  },
  {
    "id": "declaration/34/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/false",
    "outcome": "false",
    "line": 411,
    "state": "covered",
    "hits": "171"
  },
  {
    "id": "declaration/34/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/true",
    "outcome": "true",
    "line": 413,
    "state": "covered",
    "hits": "5"
  },
  {
    "id": "declaration/34/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/false",
    "outcome": "false",
    "line": 413,
    "state": "covered",
    "hits": "166"
  },
  {
    "id": "declaration/34/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/true",
    "outcome": "true",
    "line": 418,
    "state": "covered",
    "hits": "7"
  },
  {
    "id": "declaration/34/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/false",
    "outcome": "false",
    "line": 418,
    "state": "covered",
    "hits": "159"
  },
  {
    "id": "declaration/34/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/true",
    "outcome": "true",
    "line": 422,
    "state": "covered",
    "hits": "5"
  },
  {
    "id": "declaration/34/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/false",
    "outcome": "false",
    "line": 422,
    "state": "covered",
    "hits": "154"
  },
  {
    "id": "declaration/34/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/true",
    "outcome": "true",
    "line": 424,
    "state": "covered",
    "hits": "49"
  },
  {
    "id": "declaration/34/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/false",
    "outcome": "false",
    "line": 424,
    "state": "covered",
    "hits": "105"
  },
  {
    "id": "declaration/34/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/true",
    "outcome": "true",
    "line": 428,
    "state": "covered",
    "hits": "5"
  },
  {
    "id": "declaration/34/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/false",
    "outcome": "false",
    "line": 428,
    "state": "covered",
    "hits": "100"
  },
  {
    "id": "declaration/34/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/true",
    "outcome": "true",
    "line": 430,
    "state": "covered",
    "hits": "11"
  },
  {
    "id": "declaration/34/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/false",
    "outcome": "false",
    "line": 430,
    "state": "covered",
    "hits": "89"
  },
  {
    "id": "declaration/34/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/true",
    "outcome": "true",
    "line": 432,
    "state": "covered",
    "hits": "7"
  },
  {
    "id": "declaration/34/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/false",
    "outcome": "false",
    "line": 432,
    "state": "covered",
    "hits": "82"
  },
  {
    "id": "declaration/34/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/true",
    "outcome": "true",
    "line": 436,
    "state": "covered",
    "hits": "2"
  },
  {
    "id": "declaration/34/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/false",
    "outcome": "false",
    "line": 436,
    "state": "covered",
    "hits": "80"
  },
  {
    "id": "declaration/34/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/true",
    "outcome": "true",
    "line": 439,
    "state": "covered",
    "hits": "75"
  },
  {
    "id": "declaration/34/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/false",
    "outcome": "false",
    "line": 439,
    "state": "covered",
    "hits": "5"
  },
  {
    "id": "declaration/34/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/true",
    "outcome": "true",
    "line": 441,
    "state": "covered",
    "hits": "3"
  },
  {
    "id": "declaration/34/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/false",
    "outcome": "false",
    "line": 441,
    "state": "covered",
    "hits": "2"
  },
  {
    "id": "declaration/35/statement/3/decision/body",
    "outcome": "body",
    "line": 452,
    "state": "covered",
    "hits": "416"
  },
  {
    "id": "declaration/35/statement/3/decision/exit",
    "outcome": "exit",
    "line": 452,
    "state": "covered",
    "hits": "113"
  },
  {
    "id": "declaration/35/statement/3/condition/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 452,
    "state": "covered",
    "hits": "433"
  },
  {
    "id": "declaration/35/statement/3/condition/decision/skip-right",
    "outcome": "skip-right",
    "line": 452,
    "state": "covered",
    "hits": "96"
  },
  {
    "id": "declaration/36/statement/6/value/decision/true",
    "outcome": "true",
    "line": 468,
    "state": "covered",
    "hits": "3"
  },
  {
    "id": "declaration/36/statement/6/value/decision/false",
    "outcome": "false",
    "line": 468,
    "state": "covered",
    "hits": "110"
  },
  {
    "id": "declaration/36/statement/7/value/decision/true",
    "outcome": "true",
    "line": 469,
    "state": "covered",
    "hits": "1"
  },
  {
    "id": "declaration/36/statement/7/value/decision/false",
    "outcome": "false",
    "line": 469,
    "state": "covered",
    "hits": "112"
  },
  {
    "id": "declaration/38/tail/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 481,
    "state": "covered",
    "hits": "162"
  },
  {
    "id": "declaration/38/tail/decision/skip-right",
    "outcome": "skip-right",
    "line": 481,
    "state": "zero",
    "hits": "0"
  },
  {
    "id": "declaration/38/tail/left/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 481,
    "state": "covered",
    "hits": "162"
  },
  {
    "id": "declaration/38/tail/left/decision/skip-right",
    "outcome": "skip-right",
    "line": 481,
    "state": "zero",
    "hits": "0"
  },
  {
    "id": "declaration/38/tail/right/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 481,
    "state": "covered",
    "hits": "158"
  },
  {
    "id": "declaration/38/tail/right/decision/skip-right",
    "outcome": "skip-right",
    "line": 481,
    "state": "covered",
    "hits": "4"
  },
  {
    "id": "declaration/38/tail/right/left/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 481,
    "state": "covered",
    "hits": "162"
  },
  {
    "id": "declaration/38/tail/right/left/decision/skip-right",
    "outcome": "skip-right",
    "line": 481,
    "state": "zero",
    "hits": "0"
  },
  {
    "id": "declaration/39/tail/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 485,
    "state": "covered",
    "hits": "24"
  },
  {
    "id": "declaration/39/tail/decision/skip-right",
    "outcome": "skip-right",
    "line": 485,
    "state": "covered",
    "hits": "1"
  },
  {
    "id": "declaration/39/tail/left/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 485,
    "state": "covered",
    "hits": "25"
  },
  {
    "id": "declaration/39/tail/left/decision/skip-right",
    "outcome": "skip-right",
    "line": 485,
    "state": "zero",
    "hits": "0"
  },
  {
    "id": "declaration/40/statement/2/decision/body",
    "outcome": "body",
    "line": 491,
    "state": "covered",
    "hits": "161"
  },
  {
    "id": "declaration/40/statement/2/decision/exit",
    "outcome": "exit",
    "line": 491,
    "state": "covered",
    "hits": "95"
  },
  {
    "id": "declaration/40/statement/2/body/tail/decision/true",
    "outcome": "true",
    "line": 492,
    "state": "covered",
    "hits": "65"
  },
  {
    "id": "declaration/40/statement/2/body/tail/decision/false",
    "outcome": "false",
    "line": 492,
    "state": "covered",
    "hits": "96"
  },
  {
    "id": "declaration/41/statement/2/decision/body",
    "outcome": "body",
    "line": 503,
    "state": "covered",
    "hits": "7"
  },
  {
    "id": "declaration/41/statement/2/decision/exit",
    "outcome": "exit",
    "line": 503,
    "state": "covered",
    "hits": "63"
  },
  {
    "id": "declaration/41/statement/2/body/tail/decision/true",
    "outcome": "true",
    "line": 504,
    "state": "zero",
    "hits": "0"
  },
  {
    "id": "declaration/41/statement/2/body/tail/decision/false",
    "outcome": "false",
    "line": 504,
    "state": "covered",
    "hits": "7"
  },
  {
    "id": "declaration/42/tail/arm/0",
    "outcome": "ConstInstruction",
    "line": 513,
    "state": "covered",
    "hits": "86"
  },
  {
    "id": "declaration/42/tail/arm/1",
    "outcome": "LoadInstruction",
    "line": 514,
    "state": "covered",
    "hits": "26"
  },
  {
    "id": "declaration/42/tail/arm/2",
    "outcome": "StoreInstruction",
    "line": 515,
    "state": "covered",
    "hits": "12"
  },
  {
    "id": "declaration/42/tail/arm/3",
    "outcome": "PopInstruction",
    "line": 516,
    "state": "covered",
    "hits": "42"
  },
  {
    "id": "declaration/42/tail/arm/4",
    "outcome": "UnaryInstruction",
    "line": 517,
    "state": "covered",
    "hits": "3"
  },
  {
    "id": "declaration/42/tail/arm/4/body/decision/true",
    "outcome": "true",
    "line": 517,
    "state": "covered",
    "hits": "3"
  },
  {
    "id": "declaration/42/tail/arm/4/body/decision/false",
    "outcome": "false",
    "line": 517,
    "state": "zero",
    "hits": "0"
  },
  {
    "id": "declaration/42/tail/arm/4/body/condition/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 517,
    "state": "zero",
    "hits": "0"
  },
  {
    "id": "declaration/42/tail/arm/4/body/condition/decision/skip-right",
    "outcome": "skip-right",
    "line": 517,
    "state": "covered",
    "hits": "3"
  },
  {
    "id": "declaration/42/tail/arm/5",
    "outcome": "BinaryInstruction",
    "line": 518,
    "state": "covered",
    "hits": "13"
  },
  {
    "id": "declaration/42/tail/arm/6",
    "outcome": "MakeRangeInstruction",
    "line": 519,
    "state": "covered",
    "hits": "4"
  },
  {
    "id": "declaration/42/tail/arm/7",
    "outcome": "MakeArrayInstruction",
    "line": 520,
    "state": "covered",
    "hits": "3"
  },
  {
    "id": "declaration/42/tail/arm/8",
    "outcome": "IndexGetInstruction",
    "line": 521,
    "state": "covered",
    "hits": "3"
  },
  {
    "id": "declaration/42/tail/arm/9",
    "outcome": "InterpolateInstruction",
    "line": 522,
    "state": "covered",
    "hits": "8"
  },
  {
    "id": "declaration/42/tail/arm/9/body/decision/true",
    "outcome": "true",
    "line": 522,
    "state": "covered",
    "hits": "8"
  },
  {
    "id": "declaration/42/tail/arm/9/body/decision/false",
    "outcome": "false",
    "line": 522,
    "state": "zero",
    "hits": "0"
  },
  {
    "id": "declaration/42/tail/arm/10",
    "outcome": "IterInitInstruction",
    "line": 523,
    "state": "covered",
    "hits": "4"
  },
  {
    "id": "declaration/42/tail/arm/11",
    "outcome": "IterNextInstruction",
    "line": 524,
    "state": "covered",
    "hits": "4"
  },
  {
    "id": "declaration/42/tail/arm/11/body/decision/true",
    "outcome": "true",
    "line": 524,
    "state": "covered",
    "hits": "4"
  },
  {
    "id": "declaration/42/tail/arm/11/body/decision/false",
    "outcome": "false",
    "line": 524,
    "state": "zero",
    "hits": "0"
  },
  {
    "id": "declaration/42/tail/arm/12",
    "outcome": "MakeRecordInstruction",
    "line": 525,
    "state": "covered",
    "hits": "5"
  },
  {
    "id": "declaration/42/tail/arm/13",
    "outcome": "FieldGetInstruction",
    "line": 526,
    "state": "covered",
    "hits": "7"
  },
  {
    "id": "declaration/42/tail/arm/14",
    "outcome": "MakeVariantInstruction",
    "line": 527,
    "state": "covered",
    "hits": "5"
  },
  {
    "id": "declaration/42/tail/arm/15",
    "outcome": "MatchVariantInstruction",
    "line": 528,
    "state": "covered",
    "hits": "7"
  },
  {
    "id": "declaration/42/tail/arm/15/body/decision/true",
    "outcome": "true",
    "line": 528,
    "state": "covered",
    "hits": "7"
  },
  {
    "id": "declaration/42/tail/arm/15/body/decision/false",
    "outcome": "false",
    "line": 528,
    "state": "zero",
    "hits": "0"
  },
  {
    "id": "declaration/42/tail/arm/16",
    "outcome": "MatchFailInstruction",
    "line": 529,
    "state": "covered",
    "hits": "5"
  },
  {
    "id": "declaration/42/tail/arm/17",
    "outcome": "CallInstruction",
    "line": 530,
    "state": "covered",
    "hits": "46"
  },
  {
    "id": "declaration/42/tail/arm/17/body/block/tail/decision/true",
    "outcome": "true",
    "line": 532,
    "state": "covered",
    "hits": "1"
  },
  {
    "id": "declaration/42/tail/arm/17/body/block/tail/decision/false",
    "outcome": "false",
    "line": 532,
    "state": "covered",
    "hits": "45"
  },
  {
    "id": "declaration/42/tail/arm/17/body/block/tail/condition/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 532,
    "state": "covered",
    "hits": "25"
  },
  {
    "id": "declaration/42/tail/arm/17/body/block/tail/condition/decision/skip-right",
    "outcome": "skip-right",
    "line": 532,
    "state": "covered",
    "hits": "21"
  },
  {
    "id": "declaration/42/tail/arm/17/body/block/tail/false/statement/0/value/decision/true",
    "outcome": "true",
    "line": 535,
    "state": "covered",
    "hits": "25"
  },
  {
    "id": "declaration/42/tail/arm/17/body/block/tail/false/statement/0/value/decision/false",
    "outcome": "false",
    "line": 535,
    "state": "covered",
    "hits": "20"
  },
  {
    "id": "declaration/42/tail/arm/17/body/block/tail/false/statement/1/value/decision/true",
    "outcome": "true",
    "line": 536,
    "state": "covered",
    "hits": "25"
  },
  {
    "id": "declaration/42/tail/arm/17/body/block/tail/false/statement/1/value/decision/false",
    "outcome": "false",
    "line": 536,
    "state": "covered",
    "hits": "20"
  },
  {
    "id": "declaration/42/tail/arm/17/body/block/tail/false/tail/decision/true",
    "outcome": "true",
    "line": 537,
    "state": "covered",
    "hits": "2"
  },
  {
    "id": "declaration/42/tail/arm/17/body/block/tail/false/tail/decision/false",
    "outcome": "false",
    "line": 537,
    "state": "covered",
    "hits": "43"
  },
  {
    "id": "declaration/42/tail/arm/17/body/block/tail/false/tail/condition/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 537,
    "state": "covered",
    "hits": "44"
  },
  {
    "id": "declaration/42/tail/arm/17/body/block/tail/false/tail/condition/decision/skip-right",
    "outcome": "skip-right",
    "line": 537,
    "state": "covered",
    "hits": "1"
  },
  {
    "id": "declaration/42/tail/arm/17/body/block/tail/false/tail/condition/left/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 537,
    "state": "covered",
    "hits": "44"
  },
  {
    "id": "declaration/42/tail/arm/17/body/block/tail/false/tail/condition/left/decision/skip-right",
    "outcome": "skip-right",
    "line": 537,
    "state": "covered",
    "hits": "1"
  },
  {
    "id": "declaration/42/tail/arm/17/body/block/tail/false/tail/condition/left/left/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 537,
    "state": "covered",
    "hits": "20"
  },
  {
    "id": "declaration/42/tail/arm/17/body/block/tail/false/tail/condition/left/left/decision/skip-right",
    "outcome": "skip-right",
    "line": 537,
    "state": "covered",
    "hits": "25"
  },
  {
    "id": "declaration/42/tail/arm/17/body/block/tail/false/tail/condition/left/left/left/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 537,
    "state": "covered",
    "hits": "20"
  },
  {
    "id": "declaration/42/tail/arm/17/body/block/tail/false/tail/condition/left/left/left/decision/skip-right",
    "outcome": "skip-right",
    "line": 537,
    "state": "covered",
    "hits": "25"
  },
  {
    "id": "declaration/42/tail/arm/17/body/block/tail/false/tail/condition/right/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 537,
    "state": "covered",
    "hits": "44"
  },
  {
    "id": "declaration/42/tail/arm/17/body/block/tail/false/tail/condition/right/decision/skip-right",
    "outcome": "skip-right",
    "line": 537,
    "state": "zero",
    "hits": "0"
  },
  {
    "id": "declaration/42/tail/arm/17/body/block/tail/false/tail/false/tail/decision/true",
    "outcome": "true",
    "line": 538,
    "state": "covered",
    "hits": "2"
  },
  {
    "id": "declaration/42/tail/arm/17/body/block/tail/false/tail/false/tail/decision/false",
    "outcome": "false",
    "line": 538,
    "state": "covered",
    "hits": "41"
  },
  {
    "id": "declaration/42/tail/arm/17/body/block/tail/false/tail/false/tail/condition/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 538,
    "state": "covered",
    "hits": "3"
  },
  {
    "id": "declaration/42/tail/arm/17/body/block/tail/false/tail/false/tail/condition/decision/skip-right",
    "outcome": "skip-right",
    "line": 538,
    "state": "covered",
    "hits": "40"
  },
  {
    "id": "declaration/42/tail/arm/17/body/block/tail/false/tail/false/tail/false/tail/decision/true",
    "outcome": "true",
    "line": 539,
    "state": "covered",
    "hits": "1"
  },
  {
    "id": "declaration/42/tail/arm/17/body/block/tail/false/tail/false/tail/false/tail/decision/false",
    "outcome": "false",
    "line": 539,
    "state": "covered",
    "hits": "40"
  },
  {
    "id": "declaration/42/tail/arm/17/body/block/tail/false/tail/false/tail/false/tail/false/tail/decision/true",
    "outcome": "true",
    "line": 540,
    "state": "covered",
    "hits": "1"
  },
  {
    "id": "declaration/42/tail/arm/17/body/block/tail/false/tail/false/tail/false/tail/false/tail/decision/false",
    "outcome": "false",
    "line": 540,
    "state": "covered",
    "hits": "39"
  },
  {
    "id": "declaration/42/tail/arm/17/body/block/tail/false/tail/false/tail/false/tail/false/tail/condition/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 540,
    "state": "covered",
    "hits": "2"
  },
  {
    "id": "declaration/42/tail/arm/17/body/block/tail/false/tail/false/tail/false/tail/false/tail/condition/decision/skip-right",
    "outcome": "skip-right",
    "line": 540,
    "state": "covered",
    "hits": "38"
  },
  {
    "id": "declaration/42/tail/arm/18",
    "outcome": "CallValueInstruction",
    "line": 543,
    "state": "covered",
    "hits": "3"
  },
  {
    "id": "declaration/42/tail/arm/19",
    "outcome": "AwaitCallInstruction",
    "line": 544,
    "state": "covered",
    "hits": "6"
  },
  {
    "id": "declaration/42/tail/arm/20",
    "outcome": "AwaitValueInstruction",
    "line": 545,
    "state": "covered",
    "hits": "1"
  },
  {
    "id": "declaration/42/tail/arm/20/body/decision/true",
    "outcome": "true",
    "line": 545,
    "state": "zero",
    "hits": "0"
  },
  {
    "id": "declaration/42/tail/arm/20/body/decision/false",
    "outcome": "false",
    "line": 545,
    "state": "covered",
    "hits": "1"
  },
  {
    "id": "declaration/42/tail/arm/21",
    "outcome": "JumpFalseInstruction",
    "line": 546,
    "state": "covered",
    "hits": "5"
  },
  {
    "id": "declaration/42/tail/arm/21/body/decision/true",
    "outcome": "true",
    "line": 546,
    "state": "covered",
    "hits": "5"
  },
  {
    "id": "declaration/42/tail/arm/21/body/decision/false",
    "outcome": "false",
    "line": 546,
    "state": "zero",
    "hits": "0"
  },
  {
    "id": "declaration/42/tail/arm/22",
    "outcome": "JumpInstruction",
    "line": 547,
    "state": "covered",
    "hits": "11"
  },
  {
    "id": "declaration/42/tail/arm/22/body/decision/true",
    "outcome": "true",
    "line": 547,
    "state": "covered",
    "hits": "10"
  },
  {
    "id": "declaration/42/tail/arm/22/body/decision/false",
    "outcome": "false",
    "line": 547,
    "state": "covered",
    "hits": "1"
  },
  {
    "id": "declaration/42/tail/arm/23",
    "outcome": "PendingEndJumpInstruction",
    "line": 548,
    "state": "zero",
    "hits": "0"
  },
  {
    "id": "declaration/42/tail/arm/24",
    "outcome": "ReturnInstruction",
    "line": 549,
    "state": "covered",
    "hits": "48"
  },
  {
    "id": "declaration/43/tail/decision/true",
    "outcome": "true",
    "line": 554,
    "state": "zero",
    "hits": "0"
  },
  {
    "id": "declaration/43/tail/decision/false",
    "outcome": "false",
    "line": 554,
    "state": "covered",
    "hits": "63"
  },
  {
    "id": "declaration/43/tail/condition/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 554,
    "state": "covered",
    "hits": "63"
  },
  {
    "id": "declaration/43/tail/condition/decision/skip-right",
    "outcome": "skip-right",
    "line": 554,
    "state": "zero",
    "hits": "0"
  },
  {
    "id": "declaration/43/tail/condition/left/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 554,
    "state": "covered",
    "hits": "63"
  },
  {
    "id": "declaration/43/tail/condition/left/decision/skip-right",
    "outcome": "skip-right",
    "line": 554,
    "state": "zero",
    "hits": "0"
  },
  {
    "id": "declaration/43/tail/condition/left/left/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 554,
    "state": "covered",
    "hits": "22"
  },
  {
    "id": "declaration/43/tail/condition/left/left/decision/skip-right",
    "outcome": "skip-right",
    "line": 554,
    "state": "covered",
    "hits": "41"
  },
  {
    "id": "declaration/43/tail/false/tail/decision/true",
    "outcome": "true",
    "line": 557,
    "state": "zero",
    "hits": "0"
  },
  {
    "id": "declaration/43/tail/false/tail/decision/false",
    "outcome": "false",
    "line": 557,
    "state": "covered",
    "hits": "63"
  },
  {
    "id": "declaration/43/tail/false/tail/false/statement/2/decision/body",
    "outcome": "body",
    "line": 562,
    "state": "covered",
    "hits": "373"
  },
  {
    "id": "declaration/43/tail/false/tail/false/statement/2/decision/exit",
    "outcome": "exit",
    "line": 562,
    "state": "covered",
    "hits": "63"
  },
  {
    "id": "declaration/43/tail/false/tail/false/statement/2/body/statement/0/value/arm/0",
    "outcome": "ReturnInstruction",
    "line": 564,
    "state": "covered",
    "hits": "63"
  },
  {
    "id": "declaration/43/tail/false/tail/false/statement/2/body/statement/0/value/arm/1",
    "outcome": "ConstInstruction",
    "line": 565,
    "state": "covered",
    "hits": "86"
  },
  {
    "id": "declaration/43/tail/false/tail/false/statement/2/body/statement/0/value/arm/2",
    "outcome": "LoadInstruction",
    "line": 565,
    "state": "covered",
    "hits": "26"
  },
  {
    "id": "declaration/43/tail/false/tail/false/statement/2/body/statement/0/value/arm/3",
    "outcome": "StoreInstruction",
    "line": 565,
    "state": "covered",
    "hits": "12"
  },
  {
    "id": "declaration/43/tail/false/tail/false/statement/2/body/statement/0/value/arm/4",
    "outcome": "PopInstruction",
    "line": 566,
    "state": "covered",
    "hits": "42"
  },
  {
    "id": "declaration/43/tail/false/tail/false/statement/2/body/statement/0/value/arm/5",
    "outcome": "UnaryInstruction",
    "line": 566,
    "state": "covered",
    "hits": "3"
  },
  {
    "id": "declaration/43/tail/false/tail/false/statement/2/body/statement/0/value/arm/6",
    "outcome": "BinaryInstruction",
    "line": 566,
    "state": "covered",
    "hits": "13"
  },
  {
    "id": "declaration/43/tail/false/tail/false/statement/2/body/statement/0/value/arm/7",
    "outcome": "MakeRangeInstruction",
    "line": 567,
    "state": "covered",
    "hits": "4"
  },
  {
    "id": "declaration/43/tail/false/tail/false/statement/2/body/statement/0/value/arm/8",
    "outcome": "MakeArrayInstruction",
    "line": 567,
    "state": "covered",
    "hits": "3"
  },
  {
    "id": "declaration/43/tail/false/tail/false/statement/2/body/statement/0/value/arm/9",
    "outcome": "IndexGetInstruction",
    "line": 567,
    "state": "covered",
    "hits": "3"
  },
  {
    "id": "declaration/43/tail/false/tail/false/statement/2/body/statement/0/value/arm/10",
    "outcome": "InterpolateInstruction",
    "line": 568,
    "state": "covered",
    "hits": "8"
  },
  {
    "id": "declaration/43/tail/false/tail/false/statement/2/body/statement/0/value/arm/11",
    "outcome": "IterInitInstruction",
    "line": 568,
    "state": "covered",
    "hits": "4"
  },
  {
    "id": "declaration/43/tail/false/tail/false/statement/2/body/statement/0/value/arm/12",
    "outcome": "IterNextInstruction",
    "line": 569,
    "state": "covered",
    "hits": "4"
  },
  {
    "id": "declaration/43/tail/false/tail/false/statement/2/body/statement/0/value/arm/13",
    "outcome": "MakeRecordInstruction",
    "line": 569,
    "state": "covered",
    "hits": "5"
  },
  {
    "id": "declaration/43/tail/false/tail/false/statement/2/body/statement/0/value/arm/14",
    "outcome": "FieldGetInstruction",
    "line": 570,
    "state": "covered",
    "hits": "7"
  },
  {
    "id": "declaration/43/tail/false/tail/false/statement/2/body/statement/0/value/arm/15",
    "outcome": "MakeVariantInstruction",
    "line": 570,
    "state": "covered",
    "hits": "5"
  },
  {
    "id": "declaration/43/tail/false/tail/false/statement/2/body/statement/0/value/arm/16",
    "outcome": "MatchVariantInstruction",
    "line": 571,
    "state": "covered",
    "hits": "7"
  },
  {
    "id": "declaration/43/tail/false/tail/false/statement/2/body/statement/0/value/arm/17",
    "outcome": "MatchFailInstruction",
    "line": 571,
    "state": "covered",
    "hits": "5"
  },
  {
    "id": "declaration/43/tail/false/tail/false/statement/2/body/statement/0/value/arm/18",
    "outcome": "CallInstruction",
    "line": 572,
    "state": "covered",
    "hits": "47"
  },
  {
    "id": "declaration/43/tail/false/tail/false/statement/2/body/statement/0/value/arm/19",
    "outcome": "JumpFalseInstruction",
    "line": 572,
    "state": "covered",
    "hits": "5"
  },
  {
    "id": "declaration/43/tail/false/tail/false/statement/2/body/statement/0/value/arm/20",
    "outcome": "CallValueInstruction",
    "line": 573,
    "state": "covered",
    "hits": "3"
  },
  {
    "id": "declaration/43/tail/false/tail/false/statement/2/body/statement/0/value/arm/21",
    "outcome": "AwaitCallInstruction",
    "line": 573,
    "state": "covered",
    "hits": "6"
  },
  {
    "id": "declaration/43/tail/false/tail/false/statement/2/body/statement/0/value/arm/22",
    "outcome": "AwaitValueInstruction",
    "line": 573,
    "state": "covered",
    "hits": "1"
  },
  {
    "id": "declaration/43/tail/false/tail/false/statement/2/body/statement/0/value/arm/23",
    "outcome": "JumpInstruction",
    "line": 574,
    "state": "covered",
    "hits": "11"
  },
  {
    "id": "declaration/43/tail/false/tail/false/statement/2/body/statement/0/value/arm/24",
    "outcome": "PendingEndJumpInstruction",
    "line": 574,
    "state": "zero",
    "hits": "0"
  },
  {
    "id": "declaration/43/tail/false/tail/false/statement/2/body/tail/decision/true",
    "outcome": "true",
    "line": 576,
    "state": "covered",
    "hits": "357"
  },
  {
    "id": "declaration/43/tail/false/tail/false/statement/2/body/tail/decision/false",
    "outcome": "false",
    "line": 576,
    "state": "covered",
    "hits": "16"
  },
  {
    "id": "declaration/43/tail/false/tail/false/tail/decision/true",
    "outcome": "true",
    "line": 578,
    "state": "covered",
    "hits": "15"
  },
  {
    "id": "declaration/43/tail/false/tail/false/tail/decision/false",
    "outcome": "false",
    "line": 578,
    "state": "covered",
    "hits": "48"
  },
  {
    "id": "declaration/43/tail/false/tail/false/tail/false/tail/decision/true",
    "outcome": "true",
    "line": 579,
    "state": "covered",
    "hits": "48"
  },
  {
    "id": "declaration/43/tail/false/tail/false/tail/false/tail/decision/false",
    "outcome": "false",
    "line": 579,
    "state": "zero",
    "hits": "0"
  },
  {
    "id": "declaration/44/tail/decision/true",
    "outcome": "true",
    "line": 586,
    "state": "covered",
    "hits": "1"
  },
  {
    "id": "declaration/44/tail/decision/false",
    "outcome": "false",
    "line": 586,
    "state": "covered",
    "hits": "42"
  },
  {
    "id": "declaration/44/tail/false/tail/decision/true",
    "outcome": "true",
    "line": 587,
    "state": "zero",
    "hits": "0"
  },
  {
    "id": "declaration/44/tail/false/tail/decision/false",
    "outcome": "false",
    "line": 587,
    "state": "covered",
    "hits": "42"
  },
  {
    "id": "declaration/44/tail/false/tail/false/statement/2/decision/body",
    "outcome": "body",
    "line": 591,
    "state": "covered",
    "hits": "65"
  },
  {
    "id": "declaration/44/tail/false/tail/false/statement/2/decision/exit",
    "outcome": "exit",
    "line": 591,
    "state": "covered",
    "hits": "42"
  },
  {
    "id": "declaration/44/tail/false/tail/false/statement/2/body/statement/1/value/decision/true",
    "outcome": "true",
    "line": 593,
    "state": "zero",
    "hits": "0"
  },
  {
    "id": "declaration/44/tail/false/tail/false/statement/2/body/statement/1/value/decision/false",
    "outcome": "false",
    "line": 593,
    "state": "covered",
    "hits": "65"
  },
  {
    "id": "declaration/44/tail/false/tail/false/statement/2/body/statement/1/value/condition/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 593,
    "state": "zero",
    "hits": "0"
  },
  {
    "id": "declaration/44/tail/false/tail/false/statement/2/body/statement/1/value/condition/decision/skip-right",
    "outcome": "skip-right",
    "line": 593,
    "state": "covered",
    "hits": "65"
  },
  {
    "id": "declaration/44/tail/false/tail/false/statement/2/body/tail/decision/true",
    "outcome": "true",
    "line": 594,
    "state": "covered",
    "hits": "63"
  },
  {
    "id": "declaration/44/tail/false/tail/false/statement/2/body/tail/decision/false",
    "outcome": "false",
    "line": 594,
    "state": "covered",
    "hits": "2"
  },
  {
    "id": "declaration/45/tail/decision/true",
    "outcome": "true",
    "line": 602,
    "state": "zero",
    "hits": "0"
  },
  {
    "id": "declaration/45/tail/decision/false",
    "outcome": "false",
    "line": 602,
    "state": "covered",
    "hits": "99"
  },
  {
    "id": "declaration/45/tail/false/statement/2/decision/body",
    "outcome": "body",
    "line": 606,
    "state": "covered",
    "hits": "875"
  },
  {
    "id": "declaration/45/tail/false/statement/2/decision/exit",
    "outcome": "exit",
    "line": 606,
    "state": "covered",
    "hits": "99"
  },
  {
    "id": "declaration/45/tail/false/statement/2/condition/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 606,
    "state": "covered",
    "hits": "877"
  },
  {
    "id": "declaration/45/tail/false/statement/2/condition/decision/skip-right",
    "outcome": "skip-right",
    "line": 606,
    "state": "covered",
    "hits": "97"
  },
  {
    "id": "declaration/45/tail/false/statement/2/body/statement/0/value/decision/true",
    "outcome": "true",
    "line": 607,
    "state": "covered",
    "hits": "2"
  },
  {
    "id": "declaration/45/tail/false/statement/2/body/statement/0/value/decision/false",
    "outcome": "false",
    "line": 607,
    "state": "covered",
    "hits": "873"
  },
  {
    "id": "declaration/46/tail/decision/true",
    "outcome": "true",
    "line": 615,
    "state": "zero",
    "hits": "0"
  },
  {
    "id": "declaration/46/tail/decision/false",
    "outcome": "false",
    "line": 615,
    "state": "covered",
    "hits": "99"
  },
  {
    "id": "declaration/46/tail/false/tail/decision/true",
    "outcome": "true",
    "line": 616,
    "state": "covered",
    "hits": "2"
  },
  {
    "id": "declaration/46/tail/false/tail/decision/false",
    "outcome": "false",
    "line": 616,
    "state": "covered",
    "hits": "97"
  },
  {
    "id": "declaration/46/tail/false/tail/false/tail/decision/true",
    "outcome": "true",
    "line": 620,
    "state": "zero",
    "hits": "0"
  },
  {
    "id": "declaration/46/tail/false/tail/false/tail/decision/false",
    "outcome": "false",
    "line": 620,
    "state": "covered",
    "hits": "97"
  },
  {
    "id": "declaration/46/tail/false/tail/false/tail/false/tail/decision/true",
    "outcome": "true",
    "line": 621,
    "state": "covered",
    "hits": "7"
  },
  {
    "id": "declaration/46/tail/false/tail/false/tail/false/tail/decision/false",
    "outcome": "false",
    "line": 621,
    "state": "covered",
    "hits": "90"
  },
  {
    "id": "declaration/46/tail/false/tail/false/tail/false/tail/false/statement/2/value/decision/true",
    "outcome": "true",
    "line": 628,
    "state": "covered",
    "hits": "1"
  },
  {
    "id": "declaration/46/tail/false/tail/false/tail/false/tail/false/statement/2/value/decision/false",
    "outcome": "false",
    "line": 628,
    "state": "covered",
    "hits": "89"
  },
  {
    "id": "declaration/46/tail/false/tail/false/tail/false/tail/false/statement/7/decision/body",
    "outcome": "body",
    "line": 633,
    "state": "covered",
    "hits": "113"
  },
  {
    "id": "declaration/46/tail/false/tail/false/tail/false/tail/false/statement/7/decision/exit",
    "outcome": "exit",
    "line": 633,
    "state": "covered",
    "hits": "90"
  },
  {
    "id": "declaration/46/tail/false/tail/false/tail/false/tail/false/statement/7/condition/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 633,
    "state": "covered",
    "hits": "114"
  },
  {
    "id": "declaration/46/tail/false/tail/false/tail/false/tail/false/statement/7/condition/decision/skip-right",
    "outcome": "skip-right",
    "line": 633,
    "state": "covered",
    "hits": "89"
  },
  {
    "id": "declaration/46/tail/false/tail/false/tail/false/tail/false/statement/7/body/statement/3/value/decision/true",
    "outcome": "true",
    "line": 637,
    "state": "covered",
    "hits": "2"
  },
  {
    "id": "declaration/46/tail/false/tail/false/tail/false/tail/false/statement/7/body/statement/3/value/decision/false",
    "outcome": "false",
    "line": 637,
    "state": "covered",
    "hits": "111"
  },
  {
    "id": "declaration/46/tail/false/tail/false/tail/false/tail/false/statement/7/body/statement/3/value/condition/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 637,
    "state": "covered",
    "hits": "27"
  },
  {
    "id": "declaration/46/tail/false/tail/false/tail/false/tail/false/statement/7/body/statement/3/value/condition/decision/skip-right",
    "outcome": "skip-right",
    "line": 637,
    "state": "covered",
    "hits": "86"
  },
  {
    "id": "declaration/46/tail/false/tail/false/tail/false/tail/false/statement/7/body/statement/3/value/false/tail/decision/true",
    "outcome": "true",
    "line": 641,
    "state": "covered",
    "hits": "2"
  },
  {
    "id": "declaration/46/tail/false/tail/false/tail/false/tail/false/statement/7/body/statement/3/value/false/tail/decision/false",
    "outcome": "false",
    "line": 641,
    "state": "covered",
    "hits": "109"
  },
  {
    "id": "declaration/46/tail/false/tail/false/tail/false/tail/false/statement/7/body/statement/3/value/false/tail/condition/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 641,
    "state": "covered",
    "hits": "25"
  },
  {
    "id": "declaration/46/tail/false/tail/false/tail/false/tail/false/statement/7/body/statement/3/value/false/tail/condition/decision/skip-right",
    "outcome": "skip-right",
    "line": 641,
    "state": "covered",
    "hits": "86"
  },
  {
    "id": "declaration/46/tail/false/tail/false/tail/false/tail/false/statement/7/body/statement/5/value/decision/true",
    "outcome": "true",
    "line": 643,
    "state": "zero",
    "hits": "0"
  },
  {
    "id": "declaration/46/tail/false/tail/false/tail/false/tail/false/statement/7/body/statement/5/value/decision/false",
    "outcome": "false",
    "line": 643,
    "state": "covered",
    "hits": "113"
  },
  {
    "id": "declaration/46/tail/false/tail/false/tail/false/tail/false/statement/8/value/decision/true",
    "outcome": "true",
    "line": 648,
    "state": "covered",
    "hits": "2"
  },
  {
    "id": "declaration/46/tail/false/tail/false/tail/false/tail/false/statement/8/value/decision/false",
    "outcome": "false",
    "line": 648,
    "state": "covered",
    "hits": "88"
  },
  {
    "id": "declaration/46/tail/false/tail/false/tail/false/tail/false/statement/8/value/condition/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 648,
    "state": "covered",
    "hits": "45"
  },
  {
    "id": "declaration/46/tail/false/tail/false/tail/false/tail/false/statement/8/value/condition/decision/skip-right",
    "outcome": "skip-right",
    "line": 648,
    "state": "covered",
    "hits": "45"
  },
  {
    "id": "declaration/46/tail/false/tail/false/tail/false/tail/false/tail/decision/true",
    "outcome": "true",
    "line": 649,
    "state": "covered",
    "hits": "47"
  },
  {
    "id": "declaration/46/tail/false/tail/false/tail/false/tail/false/tail/decision/false",
    "outcome": "false",
    "line": 649,
    "state": "covered",
    "hits": "43"
  },
  {
    "id": "declaration/46/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/true",
    "outcome": "true",
    "line": 653,
    "state": "covered",
    "hits": "27"
  },
  {
    "id": "declaration/46/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/false",
    "outcome": "false",
    "line": 653,
    "state": "covered",
    "hits": "16"
  },
  {
    "id": "declaration/47/tail/arm/0",
    "outcome": "BytecodeDecoded",
    "line": 661,
    "state": "covered",
    "hits": "6"
  },
  {
    "id": "declaration/47/tail/arm/1",
    "outcome": "BytecodeDecodeError",
    "line": 662,
    "state": "covered",
    "hits": "72"
  },
  {
    "id": "declaration/48/tail/arm/0",
    "outcome": "BytecodeDecoded",
    "line": 668,
    "state": "covered",
    "hits": "6"
  },
  {
    "id": "declaration/48/tail/arm/1",
    "outcome": "BytecodeDecodeError",
    "line": 669,
    "state": "zero",
    "hits": "0"
  },
  {
    "id": "declaration/49/tail/arm/0",
    "outcome": "BytecodeDecoded",
    "line": 675,
    "state": "covered",
    "hits": "15"
  },
  {
    "id": "declaration/49/tail/arm/1",
    "outcome": "BytecodeDecodeError",
    "line": 676,
    "state": "zero",
    "hits": "0"
  },
  {
    "id": "declaration/50/tail/decision/true",
    "outcome": "true",
    "line": 682,
    "state": "covered",
    "hits": "2"
  },
  {
    "id": "declaration/50/tail/decision/false",
    "outcome": "false",
    "line": 682,
    "state": "covered",
    "hits": "4"
  },
  {
    "id": "declaration/50/tail/false/tail/decision/true",
    "outcome": "true",
    "line": 683,
    "state": "covered",
    "hits": "2"
  },
  {
    "id": "declaration/50/tail/false/tail/decision/false",
    "outcome": "false",
    "line": 683,
    "state": "covered",
    "hits": "2"
  },
  {
    "id": "declaration/50/tail/false/tail/condition/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 683,
    "state": "covered",
    "hits": "3"
  },
  {
    "id": "declaration/50/tail/false/tail/condition/decision/skip-right",
    "outcome": "skip-right",
    "line": 683,
    "state": "covered",
    "hits": "1"
  },
  {
    "id": "declaration/50/tail/false/tail/condition/right/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 683,
    "state": "covered",
    "hits": "3"
  },
  {
    "id": "declaration/50/tail/false/tail/condition/right/decision/skip-right",
    "outcome": "skip-right",
    "line": 683,
    "state": "zero",
    "hits": "0"
  },
  {
    "id": "declaration/50/tail/false/tail/true/tail/decision/true",
    "outcome": "true",
    "line": 684,
    "state": "zero",
    "hits": "0"
  },
  {
    "id": "declaration/50/tail/false/tail/true/tail/decision/false",
    "outcome": "false",
    "line": 684,
    "state": "covered",
    "hits": "2"
  },
  {
    "id": "declaration/50/tail/false/tail/false/tail/decision/true",
    "outcome": "true",
    "line": 685,
    "state": "covered",
    "hits": "2"
  },
  {
    "id": "declaration/50/tail/false/tail/false/tail/decision/false",
    "outcome": "false",
    "line": 685,
    "state": "zero",
    "hits": "0"
  },
  {
    "id": "declaration/50/tail/false/tail/false/tail/condition/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 685,
    "state": "covered",
    "hits": "1"
  },
  {
    "id": "declaration/50/tail/false/tail/false/tail/condition/decision/skip-right",
    "outcome": "skip-right",
    "line": 685,
    "state": "covered",
    "hits": "1"
  },
  {
    "id": "declaration/50/tail/false/tail/false/tail/condition/left/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 685,
    "state": "covered",
    "hits": "1"
  },
  {
    "id": "declaration/50/tail/false/tail/false/tail/condition/left/decision/skip-right",
    "outcome": "skip-right",
    "line": 685,
    "state": "covered",
    "hits": "1"
  },
  {
    "id": "declaration/50/tail/false/tail/false/tail/false/tail/decision/true",
    "outcome": "true",
    "line": 686,
    "state": "zero",
    "hits": "0"
  },
  {
    "id": "declaration/50/tail/false/tail/false/tail/false/tail/decision/false",
    "outcome": "false",
    "line": 686,
    "state": "zero",
    "hits": "0"
  }
]

Reviewed declaration exclusions

[
  {
    "id": "declaration/0",
    "reason": "import",
    "line": 1
  },
  {
    "id": "declaration/1",
    "reason": "record-declaration",
    "line": 3
  },
  {
    "id": "declaration/2",
    "reason": "record-declaration",
    "line": 10
  },
  {
    "id": "declaration/3",
    "reason": "record-declaration",
    "line": 15
  },
  {
    "id": "declaration/4",
    "reason": "record-declaration",
    "line": 20
  },
  {
    "id": "declaration/5",
    "reason": "record-declaration",
    "line": 25
  },
  {
    "id": "declaration/6",
    "reason": "record-declaration",
    "line": 30
  },
  {
    "id": "declaration/7",
    "reason": "record-declaration",
    "line": 35
  },
  {
    "id": "declaration/8",
    "reason": "record-declaration",
    "line": 40
  },
  {
    "id": "declaration/9",
    "reason": "record-declaration",
    "line": 45
  },
  {
    "id": "declaration/10",
    "reason": "record-declaration",
    "line": 50
  },
  {
    "id": "declaration/11",
    "reason": "record-declaration",
    "line": 55
  },
  {
    "id": "declaration/12",
    "reason": "enum-declaration",
    "line": 60
  },
  {
    "id": "declaration/37",
    "reason": "record-declaration",
    "line": 475
  }
]