fidl_fuchsia_fuzzer_common/
fidl_fuchsia_fuzzer_common.rs

1// WARNING: This file is machine generated by fidlgen.
2
3#![warn(clippy::all)]
4#![allow(unused_parens, unused_mut, unused_imports, nonstandard_style)]
5
6use bitflags::bitflags;
7use fidl::encoding::{MessageBufFor, ProxyChannelBox, ResourceDialect};
8use futures::future::{self, MaybeDone, TryFutureExt};
9use zx_status;
10
11/// Marker indicating the last message in a diagnostic output stream.
12///
13/// In addition to an `Artifact`, long-running workflows may also produce the
14/// standard output, standard error, and system logs. These fuzzer output
15/// streams are provided by `fuchsia.test_manager/RunBuilder` and have no
16/// guaranteed order with respect to FIDL responses. As a result, the streams
17/// need to include an "in-band" signal that indicates when they are complete
18/// for a particular workflow. Clients processing the fuzzer output may use this
19/// marker to synchronize the streams and the FIDL response for `GetArtifact`.
20///
21/// The string is intentionally somewhat long to mitigate the likelihood of it
22/// being emitted by the code under test.
23pub const DONE_MARKER: &str =
24    "DONE: A long-running `fuchsia.fuzzer.Controller` workflow is complete.";
25
26/// Command line flag requesting fuzzing to be performed.
27///
28/// This flag is passed by the `fuzz_manager` to the `test_manager` when
29/// starting fuzzers. Since the fuzzers are run as part of the Test Runner
30/// Framework, they can be started by normal test workflows, e.g. `fx test`. The
31/// presence of this flag indicates the fuzzer is being started to perform
32/// fuzzing; in its absence the fuzzer should simply execute a bounded number of
33/// inputs as a test.
34pub const FUZZ_MODE: &str = "--fuzz";
35
36/// Maximum length of a vector of CoverageData structs.
37///
38/// This value matches the maximum number of LLVM modules libFuzzer can track.
39pub const MAX_COVERAGE_DATA: u64 = 4096;
40
41pub const MAX_PARAMETERS: u16 = 128;
42
43pub const MAX_PARAMETER_LEN: u16 = 256;
44
45/// The maximum number of processes for which stats will be returned via
46/// `Status`.
47pub const MAX_PROCESS_STATS: u16 = 256;
48
49/// Maximum length of a sanitizer options environment variable name.
50///
51/// `sanitizer_options.name` must be something like "...SAN_OPTIONS". The
52/// longest name currently supported on Fuchsia is "UBSAN_OPTIONS". The longest
53/// currently supported on any platform is "HWASAN_OPTIONS".
54pub const MAX_SANITIZER_OPTIONS_NAME_SIZE: u16 = 32;
55
56/// Maximum length of a sanitizer options environment variable value.
57///
58/// `sanitizer_options.value` is a concatenation of "<key>=<value>" pairs
59/// delimited by ':'. AddressSanitizer currently has the most flags, with ~40
60/// sanitizer specific ones and ~70 common ones. Most of these are either
61/// boolean values or short integers. The only long types of flags are paths,
62/// but none these of these are supported on Fuchsia.
63pub const MAX_SANITIZER_OPTIONS_VALUE_SIZE: u16 = 8192;
64
65bitflags! {
66    /// Specifies how a fuzzing engine should configure output streams.
67    ///
68    /// Flags may be combined, e.g. `CLOSE_STDOUT | CLOSE_STDERR`. Support for each
69    /// flag is engine-specific. Specifying an unsupported output mode flag may
70    /// cause `Controller.Configure` to return `ZX_ERR_NOT_SUPPORTED`.
71    #[derive(Clone, Copy, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash)]
72    pub struct OutputFlags: u32 {
73        /// Suppress standard output from the engine process. This is analogous to
74        /// libFuzzer's `-close_fd_mask=1`.
75        const CLOSE_STDOUT = 1;
76        /// Suppress standard error from the engine process. Use with care: this may
77        /// remove diagnostic output from the target code (e.g. messages on assert
78        /// failure). This is analogous to libFuzzer's `-close_fd_mask=2`.
79        const CLOSE_STDERR = 2;
80        /// Produce more verbose output from the fuzzer engine. The exact meaning of
81        /// "more verbose" is engine-specific. This is analogous to libFuzzer's
82        /// `-verbosity=2`.
83        const VERBOSE = 4;
84        /// Produce libFuzzer-style output on standard error. This facilitates
85        /// integration with systems like ClusterFuzz.
86        /// See https://llvm.org/docs/LibFuzzer.html#output for example output.
87        const LIBFUZZER = 8;
88    }
89}
90
91impl OutputFlags {}
92
93/// See |Controller.GetCorpusWriter| and |Controller.GetCorpusReader|.
94#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
95pub enum Corpus {
96    /// Indicates a set of fixed, immutable inputs typically provided at
97    /// start-up. These inputs are never discarded when merging.
98    Seed,
99    /// Indicates a set of inputs generated by the fuzzer. These may be modified
100    /// and/or discarded when merging and minimizing the corpus.
101    Live,
102    #[doc(hidden)]
103    __SourceBreaking { unknown_ordinal: u8 },
104}
105
106/// Pattern that matches an unknown `Corpus` member.
107#[macro_export]
108macro_rules! CorpusUnknown {
109    () => {
110        _
111    };
112}
113
114impl Corpus {
115    #[inline]
116    pub fn from_primitive(prim: u8) -> Option<Self> {
117        match prim {
118            1 => Some(Self::Seed),
119            2 => Some(Self::Live),
120            _ => None,
121        }
122    }
123
124    #[inline]
125    pub fn from_primitive_allow_unknown(prim: u8) -> Self {
126        match prim {
127            1 => Self::Seed,
128            2 => Self::Live,
129            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
130        }
131    }
132
133    #[inline]
134    pub fn unknown() -> Self {
135        Self::__SourceBreaking { unknown_ordinal: 0xff }
136    }
137
138    #[inline]
139    pub const fn into_primitive(self) -> u8 {
140        match self {
141            Self::Seed => 1,
142            Self::Live => 2,
143            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
144        }
145    }
146
147    #[inline]
148    pub fn is_unknown(&self) -> bool {
149        match self {
150            Self::__SourceBreaking { unknown_ordinal: _ } => true,
151            _ => false,
152        }
153    }
154}
155
156/// Indicates the result of a long-running fuzzing workflow.
157///
158/// Fuzzers have several "long-running" workflows; that is, the fuzzer may
159/// perform actions for an indefinite period of time. Fuzzing itself is the most
160/// notable example, as the fuzzing engine may continuously generate new inputs
161/// until an error is found. This workflow is represented by the `Fuzz` method
162/// below. Other long-running workflows include `TryOne`, `Cleanse`, `Minimize`
163/// and `Merge`.
164///
165/// These workflows continue executing after their associated call returns. Only
166/// one workflow at a time may be executing. Callers can use `AddMonitor` to
167/// monitor the status of the workflow, and `GetArtifact` to retrieve the
168/// `Result` and optionally associated `Input` when it completes.
169#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
170pub enum Result_ {
171    /// The associated input did not cause any errors to be detected when tried.
172    NoErrors,
173    /// Trying the associated input triggered a memory allocation by an
174    /// instrumented process that exceeded the configured limit.  Some fuzzing
175    /// engines, such as libFuzzer, may not distinguish between this result and
176    /// `OOM`. To differentiate,  examine the fuzzer output.
177    BadMalloc,
178    /// Trying the associated input triggered an exception in an instrumented
179    /// process.
180    Crash,
181    /// Trying the associated input triggered an error in an instrumented
182    /// process that was detected by a sanitizer runtime.
183    Death,
184    /// Trying the associated input caused an instrumented process to exit
185    /// unexpectedly. Some fuzzing engines such as libFuzzer may combine this
186    /// result with `CRASH`. To differentiate, examine the fuzzer output.
187    Exit,
188    /// Trying the associated input triggered a memory leak in an instrumented
189    /// process.
190    Leak,
191    /// Trying the associated input caused an instrumented process's memory
192    /// usage to exceed the configured limit.
193    Oom,
194    /// Trying the associated input took longer than the configured limit.
195    Timeout,
196    /// The associated input was produced by finding the shortest input that
197    /// produces the same error as an original input. See `Minimize`.
198    Minimized,
199    /// The associated input was produced by replacing bytes in an original
200    /// input with PII-free values while preserving the error produced. See
201    /// `Cleanse`.
202    Cleansed,
203    /// The fuzzer corpus has been compacted to only include the shortest inputs
204    /// that preserve overall coverage. This workflow does not have an
205    /// associated input. See `Merge`.
206    Merged,
207    #[doc(hidden)]
208    __SourceBreaking { unknown_ordinal: u32 },
209}
210
211/// Pattern that matches an unknown `Result_` member.
212#[macro_export]
213macro_rules! Result_Unknown {
214    () => {
215        _
216    };
217}
218
219impl Result_ {
220    #[inline]
221    pub fn from_primitive(prim: u32) -> Option<Self> {
222        match prim {
223            1 => Some(Self::NoErrors),
224            2 => Some(Self::BadMalloc),
225            3 => Some(Self::Crash),
226            4 => Some(Self::Death),
227            5 => Some(Self::Exit),
228            6 => Some(Self::Leak),
229            7 => Some(Self::Oom),
230            8 => Some(Self::Timeout),
231            9 => Some(Self::Minimized),
232            10 => Some(Self::Cleansed),
233            11 => Some(Self::Merged),
234            _ => None,
235        }
236    }
237
238    #[inline]
239    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
240        match prim {
241            1 => Self::NoErrors,
242            2 => Self::BadMalloc,
243            3 => Self::Crash,
244            4 => Self::Death,
245            5 => Self::Exit,
246            6 => Self::Leak,
247            7 => Self::Oom,
248            8 => Self::Timeout,
249            9 => Self::Minimized,
250            10 => Self::Cleansed,
251            11 => Self::Merged,
252            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
253        }
254    }
255
256    #[inline]
257    pub fn unknown() -> Self {
258        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
259    }
260
261    #[inline]
262    pub const fn into_primitive(self) -> u32 {
263        match self {
264            Self::NoErrors => 1,
265            Self::BadMalloc => 2,
266            Self::Crash => 3,
267            Self::Death => 4,
268            Self::Exit => 5,
269            Self::Leak => 6,
270            Self::Oom => 7,
271            Self::Timeout => 8,
272            Self::Minimized => 9,
273            Self::Cleansed => 10,
274            Self::Merged => 11,
275            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
276        }
277    }
278
279    #[inline]
280    pub fn is_unknown(&self) -> bool {
281        match self {
282            Self::__SourceBreaking { unknown_ordinal: _ } => true,
283            _ => false,
284        }
285    }
286}
287
288/// Represents types of fuzzer output.
289///
290/// These correspond to the subset of the `fuchsia.test_manager/Artifact`s that
291/// `fuzz_manager` can forward. The name "artifact" is avoided due to its
292/// distinct meaning for fuzzers; namely, `fuchsia.fuzzer.Artifact`.
293#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
294pub enum TestOutput {
295    /// Standard output from fuzzer.
296    Stdout,
297    /// Standard error from fuzzer.
298    Stderr,
299    /// System logs from fuzzer.
300    Syslog,
301    #[doc(hidden)]
302    __SourceBreaking { unknown_ordinal: u32 },
303}
304
305/// Pattern that matches an unknown `TestOutput` member.
306#[macro_export]
307macro_rules! TestOutputUnknown {
308    () => {
309        _
310    };
311}
312
313impl TestOutput {
314    #[inline]
315    pub fn from_primitive(prim: u32) -> Option<Self> {
316        match prim {
317            1 => Some(Self::Stdout),
318            2 => Some(Self::Stderr),
319            3 => Some(Self::Syslog),
320            _ => None,
321        }
322    }
323
324    #[inline]
325    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
326        match prim {
327            1 => Self::Stdout,
328            2 => Self::Stderr,
329            3 => Self::Syslog,
330            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
331        }
332    }
333
334    #[inline]
335    pub fn unknown() -> Self {
336        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
337    }
338
339    #[inline]
340    pub const fn into_primitive(self) -> u32 {
341        match self {
342            Self::Stdout => 1,
343            Self::Stderr => 2,
344            Self::Syslog => 3,
345            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
346        }
347    }
348
349    #[inline]
350    pub fn is_unknown(&self) -> bool {
351        match self {
352            Self::__SourceBreaking { unknown_ordinal: _ } => true,
353            _ => false,
354        }
355    }
356}
357
358/// See `Controller.Monitor`. Used to indicate why an update was sent.
359#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
360pub enum UpdateReason {
361    /// Represents an otherwise unspecified update. Useful when integrating
362    /// other engines as runners, e.g. libFuzzer.
363    Misc,
364    /// A fuzzing action is starting. See, e.g. `Controller.Fuzz`,
365    /// `Controller.Merge`, etc.
366    Init,
367    /// An input produced new feedback.
368    New,
369    /// Periodic status update, configured with `Options.pulse_interval`.
370    Pulse,
371    /// A shorter input for some particular feedback has been found.
372    Reduce,
373    /// A fuzzing action is complete.
374    Done,
375    #[doc(hidden)]
376    __SourceBreaking { unknown_ordinal: u8 },
377}
378
379/// Pattern that matches an unknown `UpdateReason` member.
380#[macro_export]
381macro_rules! UpdateReasonUnknown {
382    () => {
383        _
384    };
385}
386
387impl UpdateReason {
388    #[inline]
389    pub fn from_primitive(prim: u8) -> Option<Self> {
390        match prim {
391            1 => Some(Self::Misc),
392            2 => Some(Self::Init),
393            3 => Some(Self::New),
394            4 => Some(Self::Pulse),
395            5 => Some(Self::Reduce),
396            6 => Some(Self::Done),
397            _ => None,
398        }
399    }
400
401    #[inline]
402    pub fn from_primitive_allow_unknown(prim: u8) -> Self {
403        match prim {
404            1 => Self::Misc,
405            2 => Self::Init,
406            3 => Self::New,
407            4 => Self::Pulse,
408            5 => Self::Reduce,
409            6 => Self::Done,
410            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
411        }
412    }
413
414    #[inline]
415    pub fn unknown() -> Self {
416        Self::__SourceBreaking { unknown_ordinal: 0xff }
417    }
418
419    #[inline]
420    pub const fn into_primitive(self) -> u8 {
421        match self {
422            Self::Misc => 1,
423            Self::Init => 2,
424            Self::New => 3,
425            Self::Pulse => 4,
426            Self::Reduce => 5,
427            Self::Done => 6,
428            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
429        }
430    }
431
432    #[inline]
433    pub fn is_unknown(&self) -> bool {
434        match self {
435            Self::__SourceBreaking { unknown_ordinal: _ } => true,
436            _ => false,
437        }
438    }
439}
440
441#[derive(Clone, Debug, PartialEq)]
442pub struct ControllerConfigureRequest {
443    pub options: Options,
444}
445
446impl fidl::Persistable for ControllerConfigureRequest {}
447
448#[derive(Clone, Debug, PartialEq)]
449pub struct ControllerGetOptionsResponse {
450    pub options: Options,
451}
452
453impl fidl::Persistable for ControllerGetOptionsResponse {}
454
455#[derive(Clone, Debug, PartialEq)]
456pub struct ControllerGetStatusResponse {
457    pub status: Status,
458}
459
460impl fidl::Persistable for ControllerGetStatusResponse {}
461
462#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
463#[repr(C)]
464pub struct CorpusReaderNextResponse {
465    pub result: i32,
466}
467
468impl fidl::Persistable for CorpusReaderNextResponse {}
469
470#[derive(Clone, Debug, PartialEq)]
471pub struct CoverageDataCollectorInitializeResponse {
472    pub options: Options,
473}
474
475impl fidl::Persistable for CoverageDataCollectorInitializeResponse {}
476
477#[derive(Clone, Debug, PartialEq)]
478pub struct CoverageDataProviderSetOptionsRequest {
479    pub options: Options,
480}
481
482impl fidl::Persistable for CoverageDataProviderSetOptionsRequest {}
483
484#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
485pub struct ManagerStopRequest {
486    pub fuzzer_url: String,
487}
488
489impl fidl::Persistable for ManagerStopRequest {}
490
491#[derive(Clone, Debug, PartialEq)]
492pub struct MonitorUpdateRequest {
493    pub reason: UpdateReason,
494    pub status: Status,
495}
496
497impl fidl::Persistable for MonitorUpdateRequest {}
498
499/// Details about an instrumented process.
500///
501/// See also:
502///
503/// * https://fuchsia.dev/fuchsia-src/reference/syscalls/object_get_info#zx_info_task_stats
504/// * https://fuchsia.dev/fuchsia-src/reference/syscalls/object_get_info#zx_info_task_runtime
505#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
506#[repr(C)]
507pub struct ProcessStats {
508    /// The kernel object identifier of the task.
509    pub koid: u64,
510    /// The total size of mapped memory ranges in this process.
511    pub mem_mapped_bytes: u64,
512    /// Committed memory that is only mapped into this process.
513    pub mem_private_bytes: u64,
514    /// Committed memory that is mapped into this and at least one other
515    /// process.
516    pub mem_shared_bytes: u64,
517    /// Estimate of how much of |mem_shared_bytes| that this process owns.
518    pub mem_scaled_shared_bytes: u64,
519    /// The total amount of time this process was running on a CPU and not
520    /// blocked.
521    pub cpu_time: i64,
522    /// The total amount of time this process was ready but not actually using a
523    /// CPU.
524    pub queue_time: i64,
525    /// The total amount of time this process spent handling page faults.
526    pub page_fault_time: i64,
527    /// The total amount of time this process spent waiting on contended kernel
528    /// locks.
529    pub lock_contention_time: i64,
530}
531
532impl fidl::Persistable for ProcessStats {}
533
534#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
535pub struct RegistryDisconnectRequest {
536    pub fuzzer_url: String,
537}
538
539impl fidl::Persistable for RegistryDisconnectRequest {}
540
541/// Corresponds to sanitizer enviroment variables.
542///
543/// The options are ignored unless `name` must end in "...SAN_OPTIONS", e.g.
544/// "ASAN_OPTIONS". `value` should be a ':'-delimited list of options, e.g.
545/// "verbosity=1:malloc_context_size=20".
546///
547/// For more details, see the following:
548///
549/// * https://github.com/google/sanitizers/wiki/SanitizerCommonFlags
550/// * https://github.com/google/sanitizers/wiki/AddressSanitizerFlags
551#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
552pub struct SanitizerOptions {
553    pub name: String,
554    pub value: String,
555}
556
557impl fidl::Persistable for SanitizerOptions {}
558
559#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
560pub struct TargetAdapterGetParametersResponse {
561    pub parameters: Vec<String>,
562}
563
564impl fidl::Persistable for TargetAdapterGetParametersResponse {}
565
566/// See `fuchsia.fuzzer.Controller/Configure`.
567#[derive(Clone, Debug, Default, PartialEq)]
568pub struct Options {
569    /// Perform this many fuzzing runs, then exit normally. If unset (or zero),
570    /// fuzz indefinitely.
571    pub runs: Option<u32>,
572    /// If non-zero, fuzz for this duration and then exit normally. If zero,
573    /// fuzz indefinitely. Defaults to 0.
574    pub max_total_time: Option<i64>,
575    /// PRNG seed to use when generating inputs. The same seed for the same
576    /// target should produce the same inputs. If zero, the current ticks will
577    /// be used. Defaults to 0.
578    pub seed: Option<u32>,
579    /// If non-zero, limit the maximum size of a test input to this size, in
580    /// bytes. Use 0 to disable the limit. Defaults to 1 MB.
581    pub max_input_size: Option<u64>,
582    /// Maximum number of consecutive mutations to apply to an input. Defaults
583    /// to 5.
584    pub mutation_depth: Option<u16>,
585    /// If an AFL-style dictionary is supplied using
586    /// `Controller.WriteDictionary`, include words up to this level. Defaults
587    /// to 0, i.e. words without an explicit level.
588    pub dictionary_level: Option<u16>,
589    /// If true, treat instrumented process exits as fuzzing errors. Defaults to
590    /// false.
591    pub detect_exits: Option<bool>,
592    /// If true, and ASan or LSan are available, try to detect memory leaks.
593    /// Defaults to false. Leak detection can be expensive, so it is recommended
594    /// to first develop a corpus that covers a reasonable amount of the code
595    /// under test before attempting to detect leaks.
596    pub detect_leaks: Option<bool>,
597    /// If non-zero, any run that takes longer than this duration will raise a
598    /// TIMEOUT error. Use 0 to disable the limit. Defaults to 20 minutes.
599    pub run_limit: Option<i64>,
600    /// If non-zero, any allocation over this size in bytes will raise a
601    /// BAD_MALLOC error. Use 0 to disable the limit. Defaults to 2 GB.
602    pub malloc_limit: Option<u64>,
603    /// If non-zero, any process that uses more than this amount of memory in
604    /// bytes will raise an OOM error. Use 0 to disable the limit. Defaults to
605    /// 2 GB.
606    pub oom_limit: Option<u64>,
607    /// If non-zero, purge the sanitizer's allocator quarantine and reclaim
608    /// memory periodically between runs after an interval of this many seconds.
609    /// Use 0 to disable allocator purging. Defaults to 1 second.
610    pub purge_interval: Option<i64>,
611    /// Exit code used by the instrumented process if it encounters a bad
612    /// allocation. Set this if the target already uses the default for another
613    /// reason. Defaults to 2000.
614    pub malloc_exitcode: Option<i32>,
615    /// Exit code used by the instrumented process if it encounters a sanitizer
616    /// error. Set this if the target already uses the default for another
617    /// reason. Defaults to 2001.
618    pub death_exitcode: Option<i32>,
619    /// Exit code used by the instrumented process if it encounters a leak. Set
620    /// this if the target already uses the default for another reason. Defaults
621    /// to 2002.
622    pub leak_exitcode: Option<i32>,
623    /// Exit code used by the instrumented process if it exceeds the OOM limit.
624    /// Set this if the target already uses the default for another reason.
625    /// Defaults to 2003.
626    pub oom_exitcode: Option<i32>,
627    /// If non-zero, the engine will periodically update any added monitors
628    /// after this duration. Defaults to 20 seconds.
629    pub pulse_interval: Option<i64>,
630    /// If true, allow a debugger like `zxdb` to be attached to an instrumented
631    /// process. This may interfere with the engine's ability to detect
632    /// exceptions and is not recommended when fuzzing. It can be useful when
633    /// reproducing an error with a known error-causing input. Defaults to
634    /// false.
635    pub debug: Option<bool>,
636    /// If true, include ClusterFuzz-compatible final statistics in the output
637    /// of a call to `fuchsia.fuzzer.Controller/WatchArtifact`.
638    pub print_final_stats: Option<bool>,
639    /// If true, also use data flow traces as part of the fuzzing coverage data.
640    /// See https://clang.llvm.org/docs/SanitizerCoverage.html#tracing-data-flow
641    /// for more details.
642    pub use_value_profile: Option<bool>,
643    /// Sanitizer options. See `SanitizerOptions`.
644    pub sanitizer_options: Option<SanitizerOptions>,
645    /// Output flags. See `OutputFlags`.
646    pub output_flags: Option<OutputFlags>,
647    #[doc(hidden)]
648    pub __source_breaking: fidl::marker::SourceBreaking,
649}
650
651impl fidl::Persistable for Options {}
652
653/// See `Controller.GetStatus`.
654#[derive(Clone, Debug, Default, PartialEq)]
655pub struct Status {
656    /// True if the fuzzer is working on a commands, e.g. it is fuzzing.
657    pub running: Option<bool>,
658    /// Number of runs performed so far.
659    pub runs: Option<u32>,
660    /// Time spent so far.
661    pub elapsed: Option<i64>,
662    /// Number of program edges covered so far.
663    pub covered_pcs: Option<u64>,
664    /// Number of opaque features encountered so far.
665    pub covered_features: Option<u64>,
666    /// Number of inputs in the "live" corpus.
667    pub corpus_num_inputs: Option<u64>,
668    /// Total size of the inputs in the "live" corpus.
669    pub corpus_total_size: Option<u64>,
670    /// Information about the instrumented processes attached to the engine.
671    pub process_stats: Option<Vec<ProcessStats>>,
672    #[doc(hidden)]
673    pub __source_breaking: fidl::marker::SourceBreaking,
674}
675
676impl fidl::Persistable for Status {}
677
678mod internal {
679    use super::*;
680    unsafe impl fidl::encoding::TypeMarker for OutputFlags {
681        type Owned = Self;
682
683        #[inline(always)]
684        fn inline_align(_context: fidl::encoding::Context) -> usize {
685            4
686        }
687
688        #[inline(always)]
689        fn inline_size(_context: fidl::encoding::Context) -> usize {
690            4
691        }
692    }
693
694    impl fidl::encoding::ValueTypeMarker for OutputFlags {
695        type Borrowed<'a> = Self;
696        #[inline(always)]
697        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
698            *value
699        }
700    }
701
702    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for OutputFlags {
703        #[inline]
704        unsafe fn encode(
705            self,
706            encoder: &mut fidl::encoding::Encoder<'_, D>,
707            offset: usize,
708            _depth: fidl::encoding::Depth,
709        ) -> fidl::Result<()> {
710            encoder.debug_check_bounds::<Self>(offset);
711            if self.bits() & Self::all().bits() != self.bits() {
712                return Err(fidl::Error::InvalidBitsValue);
713            }
714            encoder.write_num(self.bits(), offset);
715            Ok(())
716        }
717    }
718
719    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for OutputFlags {
720        #[inline(always)]
721        fn new_empty() -> Self {
722            Self::empty()
723        }
724
725        #[inline]
726        unsafe fn decode(
727            &mut self,
728            decoder: &mut fidl::encoding::Decoder<'_, D>,
729            offset: usize,
730            _depth: fidl::encoding::Depth,
731        ) -> fidl::Result<()> {
732            decoder.debug_check_bounds::<Self>(offset);
733            let prim = decoder.read_num::<u32>(offset);
734            *self = Self::from_bits(prim).ok_or(fidl::Error::InvalidBitsValue)?;
735            Ok(())
736        }
737    }
738    unsafe impl fidl::encoding::TypeMarker for Corpus {
739        type Owned = Self;
740
741        #[inline(always)]
742        fn inline_align(_context: fidl::encoding::Context) -> usize {
743            std::mem::align_of::<u8>()
744        }
745
746        #[inline(always)]
747        fn inline_size(_context: fidl::encoding::Context) -> usize {
748            std::mem::size_of::<u8>()
749        }
750
751        #[inline(always)]
752        fn encode_is_copy() -> bool {
753            false
754        }
755
756        #[inline(always)]
757        fn decode_is_copy() -> bool {
758            false
759        }
760    }
761
762    impl fidl::encoding::ValueTypeMarker for Corpus {
763        type Borrowed<'a> = Self;
764        #[inline(always)]
765        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
766            *value
767        }
768    }
769
770    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for Corpus {
771        #[inline]
772        unsafe fn encode(
773            self,
774            encoder: &mut fidl::encoding::Encoder<'_, D>,
775            offset: usize,
776            _depth: fidl::encoding::Depth,
777        ) -> fidl::Result<()> {
778            encoder.debug_check_bounds::<Self>(offset);
779            encoder.write_num(self.into_primitive(), offset);
780            Ok(())
781        }
782    }
783
784    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Corpus {
785        #[inline(always)]
786        fn new_empty() -> Self {
787            Self::unknown()
788        }
789
790        #[inline]
791        unsafe fn decode(
792            &mut self,
793            decoder: &mut fidl::encoding::Decoder<'_, D>,
794            offset: usize,
795            _depth: fidl::encoding::Depth,
796        ) -> fidl::Result<()> {
797            decoder.debug_check_bounds::<Self>(offset);
798            let prim = decoder.read_num::<u8>(offset);
799
800            *self = Self::from_primitive_allow_unknown(prim);
801            Ok(())
802        }
803    }
804    unsafe impl fidl::encoding::TypeMarker for Result_ {
805        type Owned = Self;
806
807        #[inline(always)]
808        fn inline_align(_context: fidl::encoding::Context) -> usize {
809            std::mem::align_of::<u32>()
810        }
811
812        #[inline(always)]
813        fn inline_size(_context: fidl::encoding::Context) -> usize {
814            std::mem::size_of::<u32>()
815        }
816
817        #[inline(always)]
818        fn encode_is_copy() -> bool {
819            false
820        }
821
822        #[inline(always)]
823        fn decode_is_copy() -> bool {
824            false
825        }
826    }
827
828    impl fidl::encoding::ValueTypeMarker for Result_ {
829        type Borrowed<'a> = Self;
830        #[inline(always)]
831        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
832            *value
833        }
834    }
835
836    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for Result_ {
837        #[inline]
838        unsafe fn encode(
839            self,
840            encoder: &mut fidl::encoding::Encoder<'_, D>,
841            offset: usize,
842            _depth: fidl::encoding::Depth,
843        ) -> fidl::Result<()> {
844            encoder.debug_check_bounds::<Self>(offset);
845            encoder.write_num(self.into_primitive(), offset);
846            Ok(())
847        }
848    }
849
850    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Result_ {
851        #[inline(always)]
852        fn new_empty() -> Self {
853            Self::unknown()
854        }
855
856        #[inline]
857        unsafe fn decode(
858            &mut self,
859            decoder: &mut fidl::encoding::Decoder<'_, D>,
860            offset: usize,
861            _depth: fidl::encoding::Depth,
862        ) -> fidl::Result<()> {
863            decoder.debug_check_bounds::<Self>(offset);
864            let prim = decoder.read_num::<u32>(offset);
865
866            *self = Self::from_primitive_allow_unknown(prim);
867            Ok(())
868        }
869    }
870    unsafe impl fidl::encoding::TypeMarker for TestOutput {
871        type Owned = Self;
872
873        #[inline(always)]
874        fn inline_align(_context: fidl::encoding::Context) -> usize {
875            std::mem::align_of::<u32>()
876        }
877
878        #[inline(always)]
879        fn inline_size(_context: fidl::encoding::Context) -> usize {
880            std::mem::size_of::<u32>()
881        }
882
883        #[inline(always)]
884        fn encode_is_copy() -> bool {
885            false
886        }
887
888        #[inline(always)]
889        fn decode_is_copy() -> bool {
890            false
891        }
892    }
893
894    impl fidl::encoding::ValueTypeMarker for TestOutput {
895        type Borrowed<'a> = Self;
896        #[inline(always)]
897        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
898            *value
899        }
900    }
901
902    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for TestOutput {
903        #[inline]
904        unsafe fn encode(
905            self,
906            encoder: &mut fidl::encoding::Encoder<'_, D>,
907            offset: usize,
908            _depth: fidl::encoding::Depth,
909        ) -> fidl::Result<()> {
910            encoder.debug_check_bounds::<Self>(offset);
911            encoder.write_num(self.into_primitive(), offset);
912            Ok(())
913        }
914    }
915
916    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for TestOutput {
917        #[inline(always)]
918        fn new_empty() -> Self {
919            Self::unknown()
920        }
921
922        #[inline]
923        unsafe fn decode(
924            &mut self,
925            decoder: &mut fidl::encoding::Decoder<'_, D>,
926            offset: usize,
927            _depth: fidl::encoding::Depth,
928        ) -> fidl::Result<()> {
929            decoder.debug_check_bounds::<Self>(offset);
930            let prim = decoder.read_num::<u32>(offset);
931
932            *self = Self::from_primitive_allow_unknown(prim);
933            Ok(())
934        }
935    }
936    unsafe impl fidl::encoding::TypeMarker for UpdateReason {
937        type Owned = Self;
938
939        #[inline(always)]
940        fn inline_align(_context: fidl::encoding::Context) -> usize {
941            std::mem::align_of::<u8>()
942        }
943
944        #[inline(always)]
945        fn inline_size(_context: fidl::encoding::Context) -> usize {
946            std::mem::size_of::<u8>()
947        }
948
949        #[inline(always)]
950        fn encode_is_copy() -> bool {
951            false
952        }
953
954        #[inline(always)]
955        fn decode_is_copy() -> bool {
956            false
957        }
958    }
959
960    impl fidl::encoding::ValueTypeMarker for UpdateReason {
961        type Borrowed<'a> = Self;
962        #[inline(always)]
963        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
964            *value
965        }
966    }
967
968    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for UpdateReason {
969        #[inline]
970        unsafe fn encode(
971            self,
972            encoder: &mut fidl::encoding::Encoder<'_, D>,
973            offset: usize,
974            _depth: fidl::encoding::Depth,
975        ) -> fidl::Result<()> {
976            encoder.debug_check_bounds::<Self>(offset);
977            encoder.write_num(self.into_primitive(), offset);
978            Ok(())
979        }
980    }
981
982    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for UpdateReason {
983        #[inline(always)]
984        fn new_empty() -> Self {
985            Self::unknown()
986        }
987
988        #[inline]
989        unsafe fn decode(
990            &mut self,
991            decoder: &mut fidl::encoding::Decoder<'_, D>,
992            offset: usize,
993            _depth: fidl::encoding::Depth,
994        ) -> fidl::Result<()> {
995            decoder.debug_check_bounds::<Self>(offset);
996            let prim = decoder.read_num::<u8>(offset);
997
998            *self = Self::from_primitive_allow_unknown(prim);
999            Ok(())
1000        }
1001    }
1002
1003    impl fidl::encoding::ValueTypeMarker for ControllerConfigureRequest {
1004        type Borrowed<'a> = &'a Self;
1005        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1006            value
1007        }
1008    }
1009
1010    unsafe impl fidl::encoding::TypeMarker for ControllerConfigureRequest {
1011        type Owned = Self;
1012
1013        #[inline(always)]
1014        fn inline_align(_context: fidl::encoding::Context) -> usize {
1015            8
1016        }
1017
1018        #[inline(always)]
1019        fn inline_size(_context: fidl::encoding::Context) -> usize {
1020            16
1021        }
1022    }
1023
1024    unsafe impl<D: fidl::encoding::ResourceDialect>
1025        fidl::encoding::Encode<ControllerConfigureRequest, D> for &ControllerConfigureRequest
1026    {
1027        #[inline]
1028        unsafe fn encode(
1029            self,
1030            encoder: &mut fidl::encoding::Encoder<'_, D>,
1031            offset: usize,
1032            _depth: fidl::encoding::Depth,
1033        ) -> fidl::Result<()> {
1034            encoder.debug_check_bounds::<ControllerConfigureRequest>(offset);
1035            // Delegate to tuple encoding.
1036            fidl::encoding::Encode::<ControllerConfigureRequest, D>::encode(
1037                (<Options as fidl::encoding::ValueTypeMarker>::borrow(&self.options),),
1038                encoder,
1039                offset,
1040                _depth,
1041            )
1042        }
1043    }
1044    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<Options, D>>
1045        fidl::encoding::Encode<ControllerConfigureRequest, D> for (T0,)
1046    {
1047        #[inline]
1048        unsafe fn encode(
1049            self,
1050            encoder: &mut fidl::encoding::Encoder<'_, D>,
1051            offset: usize,
1052            depth: fidl::encoding::Depth,
1053        ) -> fidl::Result<()> {
1054            encoder.debug_check_bounds::<ControllerConfigureRequest>(offset);
1055            // Zero out padding regions. There's no need to apply masks
1056            // because the unmasked parts will be overwritten by fields.
1057            // Write the fields.
1058            self.0.encode(encoder, offset + 0, depth)?;
1059            Ok(())
1060        }
1061    }
1062
1063    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1064        for ControllerConfigureRequest
1065    {
1066        #[inline(always)]
1067        fn new_empty() -> Self {
1068            Self { options: fidl::new_empty!(Options, D) }
1069        }
1070
1071        #[inline]
1072        unsafe fn decode(
1073            &mut self,
1074            decoder: &mut fidl::encoding::Decoder<'_, D>,
1075            offset: usize,
1076            _depth: fidl::encoding::Depth,
1077        ) -> fidl::Result<()> {
1078            decoder.debug_check_bounds::<Self>(offset);
1079            // Verify that padding bytes are zero.
1080            fidl::decode!(Options, D, &mut self.options, decoder, offset + 0, _depth)?;
1081            Ok(())
1082        }
1083    }
1084
1085    impl fidl::encoding::ValueTypeMarker for ControllerGetOptionsResponse {
1086        type Borrowed<'a> = &'a Self;
1087        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1088            value
1089        }
1090    }
1091
1092    unsafe impl fidl::encoding::TypeMarker for ControllerGetOptionsResponse {
1093        type Owned = Self;
1094
1095        #[inline(always)]
1096        fn inline_align(_context: fidl::encoding::Context) -> usize {
1097            8
1098        }
1099
1100        #[inline(always)]
1101        fn inline_size(_context: fidl::encoding::Context) -> usize {
1102            16
1103        }
1104    }
1105
1106    unsafe impl<D: fidl::encoding::ResourceDialect>
1107        fidl::encoding::Encode<ControllerGetOptionsResponse, D> for &ControllerGetOptionsResponse
1108    {
1109        #[inline]
1110        unsafe fn encode(
1111            self,
1112            encoder: &mut fidl::encoding::Encoder<'_, D>,
1113            offset: usize,
1114            _depth: fidl::encoding::Depth,
1115        ) -> fidl::Result<()> {
1116            encoder.debug_check_bounds::<ControllerGetOptionsResponse>(offset);
1117            // Delegate to tuple encoding.
1118            fidl::encoding::Encode::<ControllerGetOptionsResponse, D>::encode(
1119                (<Options as fidl::encoding::ValueTypeMarker>::borrow(&self.options),),
1120                encoder,
1121                offset,
1122                _depth,
1123            )
1124        }
1125    }
1126    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<Options, D>>
1127        fidl::encoding::Encode<ControllerGetOptionsResponse, D> for (T0,)
1128    {
1129        #[inline]
1130        unsafe fn encode(
1131            self,
1132            encoder: &mut fidl::encoding::Encoder<'_, D>,
1133            offset: usize,
1134            depth: fidl::encoding::Depth,
1135        ) -> fidl::Result<()> {
1136            encoder.debug_check_bounds::<ControllerGetOptionsResponse>(offset);
1137            // Zero out padding regions. There's no need to apply masks
1138            // because the unmasked parts will be overwritten by fields.
1139            // Write the fields.
1140            self.0.encode(encoder, offset + 0, depth)?;
1141            Ok(())
1142        }
1143    }
1144
1145    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1146        for ControllerGetOptionsResponse
1147    {
1148        #[inline(always)]
1149        fn new_empty() -> Self {
1150            Self { options: fidl::new_empty!(Options, D) }
1151        }
1152
1153        #[inline]
1154        unsafe fn decode(
1155            &mut self,
1156            decoder: &mut fidl::encoding::Decoder<'_, D>,
1157            offset: usize,
1158            _depth: fidl::encoding::Depth,
1159        ) -> fidl::Result<()> {
1160            decoder.debug_check_bounds::<Self>(offset);
1161            // Verify that padding bytes are zero.
1162            fidl::decode!(Options, D, &mut self.options, decoder, offset + 0, _depth)?;
1163            Ok(())
1164        }
1165    }
1166
1167    impl fidl::encoding::ValueTypeMarker for ControllerGetStatusResponse {
1168        type Borrowed<'a> = &'a Self;
1169        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1170            value
1171        }
1172    }
1173
1174    unsafe impl fidl::encoding::TypeMarker for ControllerGetStatusResponse {
1175        type Owned = Self;
1176
1177        #[inline(always)]
1178        fn inline_align(_context: fidl::encoding::Context) -> usize {
1179            8
1180        }
1181
1182        #[inline(always)]
1183        fn inline_size(_context: fidl::encoding::Context) -> usize {
1184            16
1185        }
1186    }
1187
1188    unsafe impl<D: fidl::encoding::ResourceDialect>
1189        fidl::encoding::Encode<ControllerGetStatusResponse, D> for &ControllerGetStatusResponse
1190    {
1191        #[inline]
1192        unsafe fn encode(
1193            self,
1194            encoder: &mut fidl::encoding::Encoder<'_, D>,
1195            offset: usize,
1196            _depth: fidl::encoding::Depth,
1197        ) -> fidl::Result<()> {
1198            encoder.debug_check_bounds::<ControllerGetStatusResponse>(offset);
1199            // Delegate to tuple encoding.
1200            fidl::encoding::Encode::<ControllerGetStatusResponse, D>::encode(
1201                (<Status as fidl::encoding::ValueTypeMarker>::borrow(&self.status),),
1202                encoder,
1203                offset,
1204                _depth,
1205            )
1206        }
1207    }
1208    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<Status, D>>
1209        fidl::encoding::Encode<ControllerGetStatusResponse, D> for (T0,)
1210    {
1211        #[inline]
1212        unsafe fn encode(
1213            self,
1214            encoder: &mut fidl::encoding::Encoder<'_, D>,
1215            offset: usize,
1216            depth: fidl::encoding::Depth,
1217        ) -> fidl::Result<()> {
1218            encoder.debug_check_bounds::<ControllerGetStatusResponse>(offset);
1219            // Zero out padding regions. There's no need to apply masks
1220            // because the unmasked parts will be overwritten by fields.
1221            // Write the fields.
1222            self.0.encode(encoder, offset + 0, depth)?;
1223            Ok(())
1224        }
1225    }
1226
1227    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1228        for ControllerGetStatusResponse
1229    {
1230        #[inline(always)]
1231        fn new_empty() -> Self {
1232            Self { status: fidl::new_empty!(Status, D) }
1233        }
1234
1235        #[inline]
1236        unsafe fn decode(
1237            &mut self,
1238            decoder: &mut fidl::encoding::Decoder<'_, D>,
1239            offset: usize,
1240            _depth: fidl::encoding::Depth,
1241        ) -> fidl::Result<()> {
1242            decoder.debug_check_bounds::<Self>(offset);
1243            // Verify that padding bytes are zero.
1244            fidl::decode!(Status, D, &mut self.status, decoder, offset + 0, _depth)?;
1245            Ok(())
1246        }
1247    }
1248
1249    impl fidl::encoding::ValueTypeMarker for CorpusReaderNextResponse {
1250        type Borrowed<'a> = &'a Self;
1251        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1252            value
1253        }
1254    }
1255
1256    unsafe impl fidl::encoding::TypeMarker for CorpusReaderNextResponse {
1257        type Owned = Self;
1258
1259        #[inline(always)]
1260        fn inline_align(_context: fidl::encoding::Context) -> usize {
1261            4
1262        }
1263
1264        #[inline(always)]
1265        fn inline_size(_context: fidl::encoding::Context) -> usize {
1266            4
1267        }
1268        #[inline(always)]
1269        fn encode_is_copy() -> bool {
1270            true
1271        }
1272
1273        #[inline(always)]
1274        fn decode_is_copy() -> bool {
1275            true
1276        }
1277    }
1278
1279    unsafe impl<D: fidl::encoding::ResourceDialect>
1280        fidl::encoding::Encode<CorpusReaderNextResponse, D> for &CorpusReaderNextResponse
1281    {
1282        #[inline]
1283        unsafe fn encode(
1284            self,
1285            encoder: &mut fidl::encoding::Encoder<'_, D>,
1286            offset: usize,
1287            _depth: fidl::encoding::Depth,
1288        ) -> fidl::Result<()> {
1289            encoder.debug_check_bounds::<CorpusReaderNextResponse>(offset);
1290            unsafe {
1291                // Copy the object into the buffer.
1292                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
1293                (buf_ptr as *mut CorpusReaderNextResponse)
1294                    .write_unaligned((self as *const CorpusReaderNextResponse).read());
1295                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
1296                // done second because the memcpy will write garbage to these bytes.
1297            }
1298            Ok(())
1299        }
1300    }
1301    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<i32, D>>
1302        fidl::encoding::Encode<CorpusReaderNextResponse, D> for (T0,)
1303    {
1304        #[inline]
1305        unsafe fn encode(
1306            self,
1307            encoder: &mut fidl::encoding::Encoder<'_, D>,
1308            offset: usize,
1309            depth: fidl::encoding::Depth,
1310        ) -> fidl::Result<()> {
1311            encoder.debug_check_bounds::<CorpusReaderNextResponse>(offset);
1312            // Zero out padding regions. There's no need to apply masks
1313            // because the unmasked parts will be overwritten by fields.
1314            // Write the fields.
1315            self.0.encode(encoder, offset + 0, depth)?;
1316            Ok(())
1317        }
1318    }
1319
1320    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1321        for CorpusReaderNextResponse
1322    {
1323        #[inline(always)]
1324        fn new_empty() -> Self {
1325            Self { result: fidl::new_empty!(i32, D) }
1326        }
1327
1328        #[inline]
1329        unsafe fn decode(
1330            &mut self,
1331            decoder: &mut fidl::encoding::Decoder<'_, D>,
1332            offset: usize,
1333            _depth: fidl::encoding::Depth,
1334        ) -> fidl::Result<()> {
1335            decoder.debug_check_bounds::<Self>(offset);
1336            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
1337            // Verify that padding bytes are zero.
1338            // Copy from the buffer into the object.
1339            unsafe {
1340                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 4);
1341            }
1342            Ok(())
1343        }
1344    }
1345
1346    impl fidl::encoding::ValueTypeMarker for CoverageDataCollectorInitializeResponse {
1347        type Borrowed<'a> = &'a Self;
1348        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1349            value
1350        }
1351    }
1352
1353    unsafe impl fidl::encoding::TypeMarker for CoverageDataCollectorInitializeResponse {
1354        type Owned = Self;
1355
1356        #[inline(always)]
1357        fn inline_align(_context: fidl::encoding::Context) -> usize {
1358            8
1359        }
1360
1361        #[inline(always)]
1362        fn inline_size(_context: fidl::encoding::Context) -> usize {
1363            16
1364        }
1365    }
1366
1367    unsafe impl<D: fidl::encoding::ResourceDialect>
1368        fidl::encoding::Encode<CoverageDataCollectorInitializeResponse, D>
1369        for &CoverageDataCollectorInitializeResponse
1370    {
1371        #[inline]
1372        unsafe fn encode(
1373            self,
1374            encoder: &mut fidl::encoding::Encoder<'_, D>,
1375            offset: usize,
1376            _depth: fidl::encoding::Depth,
1377        ) -> fidl::Result<()> {
1378            encoder.debug_check_bounds::<CoverageDataCollectorInitializeResponse>(offset);
1379            // Delegate to tuple encoding.
1380            fidl::encoding::Encode::<CoverageDataCollectorInitializeResponse, D>::encode(
1381                (<Options as fidl::encoding::ValueTypeMarker>::borrow(&self.options),),
1382                encoder,
1383                offset,
1384                _depth,
1385            )
1386        }
1387    }
1388    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<Options, D>>
1389        fidl::encoding::Encode<CoverageDataCollectorInitializeResponse, D> for (T0,)
1390    {
1391        #[inline]
1392        unsafe fn encode(
1393            self,
1394            encoder: &mut fidl::encoding::Encoder<'_, D>,
1395            offset: usize,
1396            depth: fidl::encoding::Depth,
1397        ) -> fidl::Result<()> {
1398            encoder.debug_check_bounds::<CoverageDataCollectorInitializeResponse>(offset);
1399            // Zero out padding regions. There's no need to apply masks
1400            // because the unmasked parts will be overwritten by fields.
1401            // Write the fields.
1402            self.0.encode(encoder, offset + 0, depth)?;
1403            Ok(())
1404        }
1405    }
1406
1407    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1408        for CoverageDataCollectorInitializeResponse
1409    {
1410        #[inline(always)]
1411        fn new_empty() -> Self {
1412            Self { options: fidl::new_empty!(Options, D) }
1413        }
1414
1415        #[inline]
1416        unsafe fn decode(
1417            &mut self,
1418            decoder: &mut fidl::encoding::Decoder<'_, D>,
1419            offset: usize,
1420            _depth: fidl::encoding::Depth,
1421        ) -> fidl::Result<()> {
1422            decoder.debug_check_bounds::<Self>(offset);
1423            // Verify that padding bytes are zero.
1424            fidl::decode!(Options, D, &mut self.options, decoder, offset + 0, _depth)?;
1425            Ok(())
1426        }
1427    }
1428
1429    impl fidl::encoding::ValueTypeMarker for CoverageDataProviderSetOptionsRequest {
1430        type Borrowed<'a> = &'a Self;
1431        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1432            value
1433        }
1434    }
1435
1436    unsafe impl fidl::encoding::TypeMarker for CoverageDataProviderSetOptionsRequest {
1437        type Owned = Self;
1438
1439        #[inline(always)]
1440        fn inline_align(_context: fidl::encoding::Context) -> usize {
1441            8
1442        }
1443
1444        #[inline(always)]
1445        fn inline_size(_context: fidl::encoding::Context) -> usize {
1446            16
1447        }
1448    }
1449
1450    unsafe impl<D: fidl::encoding::ResourceDialect>
1451        fidl::encoding::Encode<CoverageDataProviderSetOptionsRequest, D>
1452        for &CoverageDataProviderSetOptionsRequest
1453    {
1454        #[inline]
1455        unsafe fn encode(
1456            self,
1457            encoder: &mut fidl::encoding::Encoder<'_, D>,
1458            offset: usize,
1459            _depth: fidl::encoding::Depth,
1460        ) -> fidl::Result<()> {
1461            encoder.debug_check_bounds::<CoverageDataProviderSetOptionsRequest>(offset);
1462            // Delegate to tuple encoding.
1463            fidl::encoding::Encode::<CoverageDataProviderSetOptionsRequest, D>::encode(
1464                (<Options as fidl::encoding::ValueTypeMarker>::borrow(&self.options),),
1465                encoder,
1466                offset,
1467                _depth,
1468            )
1469        }
1470    }
1471    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<Options, D>>
1472        fidl::encoding::Encode<CoverageDataProviderSetOptionsRequest, D> for (T0,)
1473    {
1474        #[inline]
1475        unsafe fn encode(
1476            self,
1477            encoder: &mut fidl::encoding::Encoder<'_, D>,
1478            offset: usize,
1479            depth: fidl::encoding::Depth,
1480        ) -> fidl::Result<()> {
1481            encoder.debug_check_bounds::<CoverageDataProviderSetOptionsRequest>(offset);
1482            // Zero out padding regions. There's no need to apply masks
1483            // because the unmasked parts will be overwritten by fields.
1484            // Write the fields.
1485            self.0.encode(encoder, offset + 0, depth)?;
1486            Ok(())
1487        }
1488    }
1489
1490    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1491        for CoverageDataProviderSetOptionsRequest
1492    {
1493        #[inline(always)]
1494        fn new_empty() -> Self {
1495            Self { options: fidl::new_empty!(Options, D) }
1496        }
1497
1498        #[inline]
1499        unsafe fn decode(
1500            &mut self,
1501            decoder: &mut fidl::encoding::Decoder<'_, D>,
1502            offset: usize,
1503            _depth: fidl::encoding::Depth,
1504        ) -> fidl::Result<()> {
1505            decoder.debug_check_bounds::<Self>(offset);
1506            // Verify that padding bytes are zero.
1507            fidl::decode!(Options, D, &mut self.options, decoder, offset + 0, _depth)?;
1508            Ok(())
1509        }
1510    }
1511
1512    impl fidl::encoding::ValueTypeMarker for ManagerStopRequest {
1513        type Borrowed<'a> = &'a Self;
1514        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1515            value
1516        }
1517    }
1518
1519    unsafe impl fidl::encoding::TypeMarker for ManagerStopRequest {
1520        type Owned = Self;
1521
1522        #[inline(always)]
1523        fn inline_align(_context: fidl::encoding::Context) -> usize {
1524            8
1525        }
1526
1527        #[inline(always)]
1528        fn inline_size(_context: fidl::encoding::Context) -> usize {
1529            16
1530        }
1531    }
1532
1533    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ManagerStopRequest, D>
1534        for &ManagerStopRequest
1535    {
1536        #[inline]
1537        unsafe fn encode(
1538            self,
1539            encoder: &mut fidl::encoding::Encoder<'_, D>,
1540            offset: usize,
1541            _depth: fidl::encoding::Depth,
1542        ) -> fidl::Result<()> {
1543            encoder.debug_check_bounds::<ManagerStopRequest>(offset);
1544            // Delegate to tuple encoding.
1545            fidl::encoding::Encode::<ManagerStopRequest, D>::encode(
1546                (<fidl::encoding::BoundedString<4096> as fidl::encoding::ValueTypeMarker>::borrow(
1547                    &self.fuzzer_url,
1548                ),),
1549                encoder,
1550                offset,
1551                _depth,
1552            )
1553        }
1554    }
1555    unsafe impl<
1556            D: fidl::encoding::ResourceDialect,
1557            T0: fidl::encoding::Encode<fidl::encoding::BoundedString<4096>, D>,
1558        > fidl::encoding::Encode<ManagerStopRequest, D> for (T0,)
1559    {
1560        #[inline]
1561        unsafe fn encode(
1562            self,
1563            encoder: &mut fidl::encoding::Encoder<'_, D>,
1564            offset: usize,
1565            depth: fidl::encoding::Depth,
1566        ) -> fidl::Result<()> {
1567            encoder.debug_check_bounds::<ManagerStopRequest>(offset);
1568            // Zero out padding regions. There's no need to apply masks
1569            // because the unmasked parts will be overwritten by fields.
1570            // Write the fields.
1571            self.0.encode(encoder, offset + 0, depth)?;
1572            Ok(())
1573        }
1574    }
1575
1576    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ManagerStopRequest {
1577        #[inline(always)]
1578        fn new_empty() -> Self {
1579            Self { fuzzer_url: fidl::new_empty!(fidl::encoding::BoundedString<4096>, D) }
1580        }
1581
1582        #[inline]
1583        unsafe fn decode(
1584            &mut self,
1585            decoder: &mut fidl::encoding::Decoder<'_, D>,
1586            offset: usize,
1587            _depth: fidl::encoding::Depth,
1588        ) -> fidl::Result<()> {
1589            decoder.debug_check_bounds::<Self>(offset);
1590            // Verify that padding bytes are zero.
1591            fidl::decode!(
1592                fidl::encoding::BoundedString<4096>,
1593                D,
1594                &mut self.fuzzer_url,
1595                decoder,
1596                offset + 0,
1597                _depth
1598            )?;
1599            Ok(())
1600        }
1601    }
1602
1603    impl fidl::encoding::ValueTypeMarker for MonitorUpdateRequest {
1604        type Borrowed<'a> = &'a Self;
1605        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1606            value
1607        }
1608    }
1609
1610    unsafe impl fidl::encoding::TypeMarker for MonitorUpdateRequest {
1611        type Owned = Self;
1612
1613        #[inline(always)]
1614        fn inline_align(_context: fidl::encoding::Context) -> usize {
1615            8
1616        }
1617
1618        #[inline(always)]
1619        fn inline_size(_context: fidl::encoding::Context) -> usize {
1620            24
1621        }
1622    }
1623
1624    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<MonitorUpdateRequest, D>
1625        for &MonitorUpdateRequest
1626    {
1627        #[inline]
1628        unsafe fn encode(
1629            self,
1630            encoder: &mut fidl::encoding::Encoder<'_, D>,
1631            offset: usize,
1632            _depth: fidl::encoding::Depth,
1633        ) -> fidl::Result<()> {
1634            encoder.debug_check_bounds::<MonitorUpdateRequest>(offset);
1635            // Delegate to tuple encoding.
1636            fidl::encoding::Encode::<MonitorUpdateRequest, D>::encode(
1637                (
1638                    <UpdateReason as fidl::encoding::ValueTypeMarker>::borrow(&self.reason),
1639                    <Status as fidl::encoding::ValueTypeMarker>::borrow(&self.status),
1640                ),
1641                encoder,
1642                offset,
1643                _depth,
1644            )
1645        }
1646    }
1647    unsafe impl<
1648            D: fidl::encoding::ResourceDialect,
1649            T0: fidl::encoding::Encode<UpdateReason, D>,
1650            T1: fidl::encoding::Encode<Status, D>,
1651        > fidl::encoding::Encode<MonitorUpdateRequest, D> for (T0, T1)
1652    {
1653        #[inline]
1654        unsafe fn encode(
1655            self,
1656            encoder: &mut fidl::encoding::Encoder<'_, D>,
1657            offset: usize,
1658            depth: fidl::encoding::Depth,
1659        ) -> fidl::Result<()> {
1660            encoder.debug_check_bounds::<MonitorUpdateRequest>(offset);
1661            // Zero out padding regions. There's no need to apply masks
1662            // because the unmasked parts will be overwritten by fields.
1663            unsafe {
1664                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(0);
1665                (ptr as *mut u64).write_unaligned(0);
1666            }
1667            // Write the fields.
1668            self.0.encode(encoder, offset + 0, depth)?;
1669            self.1.encode(encoder, offset + 8, depth)?;
1670            Ok(())
1671        }
1672    }
1673
1674    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for MonitorUpdateRequest {
1675        #[inline(always)]
1676        fn new_empty() -> Self {
1677            Self { reason: fidl::new_empty!(UpdateReason, D), status: fidl::new_empty!(Status, D) }
1678        }
1679
1680        #[inline]
1681        unsafe fn decode(
1682            &mut self,
1683            decoder: &mut fidl::encoding::Decoder<'_, D>,
1684            offset: usize,
1685            _depth: fidl::encoding::Depth,
1686        ) -> fidl::Result<()> {
1687            decoder.debug_check_bounds::<Self>(offset);
1688            // Verify that padding bytes are zero.
1689            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(0) };
1690            let padval = unsafe { (ptr as *const u64).read_unaligned() };
1691            let mask = 0xffffffffffffff00u64;
1692            let maskedval = padval & mask;
1693            if maskedval != 0 {
1694                return Err(fidl::Error::NonZeroPadding {
1695                    padding_start: offset + 0 + ((mask as u64).trailing_zeros() / 8) as usize,
1696                });
1697            }
1698            fidl::decode!(UpdateReason, D, &mut self.reason, decoder, offset + 0, _depth)?;
1699            fidl::decode!(Status, D, &mut self.status, decoder, offset + 8, _depth)?;
1700            Ok(())
1701        }
1702    }
1703
1704    impl fidl::encoding::ValueTypeMarker for ProcessStats {
1705        type Borrowed<'a> = &'a Self;
1706        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1707            value
1708        }
1709    }
1710
1711    unsafe impl fidl::encoding::TypeMarker for ProcessStats {
1712        type Owned = Self;
1713
1714        #[inline(always)]
1715        fn inline_align(_context: fidl::encoding::Context) -> usize {
1716            8
1717        }
1718
1719        #[inline(always)]
1720        fn inline_size(_context: fidl::encoding::Context) -> usize {
1721            72
1722        }
1723        #[inline(always)]
1724        fn encode_is_copy() -> bool {
1725            true
1726        }
1727
1728        #[inline(always)]
1729        fn decode_is_copy() -> bool {
1730            true
1731        }
1732    }
1733
1734    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ProcessStats, D>
1735        for &ProcessStats
1736    {
1737        #[inline]
1738        unsafe fn encode(
1739            self,
1740            encoder: &mut fidl::encoding::Encoder<'_, D>,
1741            offset: usize,
1742            _depth: fidl::encoding::Depth,
1743        ) -> fidl::Result<()> {
1744            encoder.debug_check_bounds::<ProcessStats>(offset);
1745            unsafe {
1746                // Copy the object into the buffer.
1747                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
1748                (buf_ptr as *mut ProcessStats)
1749                    .write_unaligned((self as *const ProcessStats).read());
1750                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
1751                // done second because the memcpy will write garbage to these bytes.
1752            }
1753            Ok(())
1754        }
1755    }
1756    unsafe impl<
1757            D: fidl::encoding::ResourceDialect,
1758            T0: fidl::encoding::Encode<u64, D>,
1759            T1: fidl::encoding::Encode<u64, D>,
1760            T2: fidl::encoding::Encode<u64, D>,
1761            T3: fidl::encoding::Encode<u64, D>,
1762            T4: fidl::encoding::Encode<u64, D>,
1763            T5: fidl::encoding::Encode<i64, D>,
1764            T6: fidl::encoding::Encode<i64, D>,
1765            T7: fidl::encoding::Encode<i64, D>,
1766            T8: fidl::encoding::Encode<i64, D>,
1767        > fidl::encoding::Encode<ProcessStats, D> for (T0, T1, T2, T3, T4, T5, T6, T7, T8)
1768    {
1769        #[inline]
1770        unsafe fn encode(
1771            self,
1772            encoder: &mut fidl::encoding::Encoder<'_, D>,
1773            offset: usize,
1774            depth: fidl::encoding::Depth,
1775        ) -> fidl::Result<()> {
1776            encoder.debug_check_bounds::<ProcessStats>(offset);
1777            // Zero out padding regions. There's no need to apply masks
1778            // because the unmasked parts will be overwritten by fields.
1779            // Write the fields.
1780            self.0.encode(encoder, offset + 0, depth)?;
1781            self.1.encode(encoder, offset + 8, depth)?;
1782            self.2.encode(encoder, offset + 16, depth)?;
1783            self.3.encode(encoder, offset + 24, depth)?;
1784            self.4.encode(encoder, offset + 32, depth)?;
1785            self.5.encode(encoder, offset + 40, depth)?;
1786            self.6.encode(encoder, offset + 48, depth)?;
1787            self.7.encode(encoder, offset + 56, depth)?;
1788            self.8.encode(encoder, offset + 64, depth)?;
1789            Ok(())
1790        }
1791    }
1792
1793    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ProcessStats {
1794        #[inline(always)]
1795        fn new_empty() -> Self {
1796            Self {
1797                koid: fidl::new_empty!(u64, D),
1798                mem_mapped_bytes: fidl::new_empty!(u64, D),
1799                mem_private_bytes: fidl::new_empty!(u64, D),
1800                mem_shared_bytes: fidl::new_empty!(u64, D),
1801                mem_scaled_shared_bytes: fidl::new_empty!(u64, D),
1802                cpu_time: fidl::new_empty!(i64, D),
1803                queue_time: fidl::new_empty!(i64, D),
1804                page_fault_time: fidl::new_empty!(i64, D),
1805                lock_contention_time: fidl::new_empty!(i64, D),
1806            }
1807        }
1808
1809        #[inline]
1810        unsafe fn decode(
1811            &mut self,
1812            decoder: &mut fidl::encoding::Decoder<'_, D>,
1813            offset: usize,
1814            _depth: fidl::encoding::Depth,
1815        ) -> fidl::Result<()> {
1816            decoder.debug_check_bounds::<Self>(offset);
1817            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
1818            // Verify that padding bytes are zero.
1819            // Copy from the buffer into the object.
1820            unsafe {
1821                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 72);
1822            }
1823            Ok(())
1824        }
1825    }
1826
1827    impl fidl::encoding::ValueTypeMarker for RegistryDisconnectRequest {
1828        type Borrowed<'a> = &'a Self;
1829        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1830            value
1831        }
1832    }
1833
1834    unsafe impl fidl::encoding::TypeMarker for RegistryDisconnectRequest {
1835        type Owned = Self;
1836
1837        #[inline(always)]
1838        fn inline_align(_context: fidl::encoding::Context) -> usize {
1839            8
1840        }
1841
1842        #[inline(always)]
1843        fn inline_size(_context: fidl::encoding::Context) -> usize {
1844            16
1845        }
1846    }
1847
1848    unsafe impl<D: fidl::encoding::ResourceDialect>
1849        fidl::encoding::Encode<RegistryDisconnectRequest, D> for &RegistryDisconnectRequest
1850    {
1851        #[inline]
1852        unsafe fn encode(
1853            self,
1854            encoder: &mut fidl::encoding::Encoder<'_, D>,
1855            offset: usize,
1856            _depth: fidl::encoding::Depth,
1857        ) -> fidl::Result<()> {
1858            encoder.debug_check_bounds::<RegistryDisconnectRequest>(offset);
1859            // Delegate to tuple encoding.
1860            fidl::encoding::Encode::<RegistryDisconnectRequest, D>::encode(
1861                (<fidl::encoding::BoundedString<4096> as fidl::encoding::ValueTypeMarker>::borrow(
1862                    &self.fuzzer_url,
1863                ),),
1864                encoder,
1865                offset,
1866                _depth,
1867            )
1868        }
1869    }
1870    unsafe impl<
1871            D: fidl::encoding::ResourceDialect,
1872            T0: fidl::encoding::Encode<fidl::encoding::BoundedString<4096>, D>,
1873        > fidl::encoding::Encode<RegistryDisconnectRequest, D> for (T0,)
1874    {
1875        #[inline]
1876        unsafe fn encode(
1877            self,
1878            encoder: &mut fidl::encoding::Encoder<'_, D>,
1879            offset: usize,
1880            depth: fidl::encoding::Depth,
1881        ) -> fidl::Result<()> {
1882            encoder.debug_check_bounds::<RegistryDisconnectRequest>(offset);
1883            // Zero out padding regions. There's no need to apply masks
1884            // because the unmasked parts will be overwritten by fields.
1885            // Write the fields.
1886            self.0.encode(encoder, offset + 0, depth)?;
1887            Ok(())
1888        }
1889    }
1890
1891    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1892        for RegistryDisconnectRequest
1893    {
1894        #[inline(always)]
1895        fn new_empty() -> Self {
1896            Self { fuzzer_url: fidl::new_empty!(fidl::encoding::BoundedString<4096>, D) }
1897        }
1898
1899        #[inline]
1900        unsafe fn decode(
1901            &mut self,
1902            decoder: &mut fidl::encoding::Decoder<'_, D>,
1903            offset: usize,
1904            _depth: fidl::encoding::Depth,
1905        ) -> fidl::Result<()> {
1906            decoder.debug_check_bounds::<Self>(offset);
1907            // Verify that padding bytes are zero.
1908            fidl::decode!(
1909                fidl::encoding::BoundedString<4096>,
1910                D,
1911                &mut self.fuzzer_url,
1912                decoder,
1913                offset + 0,
1914                _depth
1915            )?;
1916            Ok(())
1917        }
1918    }
1919
1920    impl fidl::encoding::ValueTypeMarker for SanitizerOptions {
1921        type Borrowed<'a> = &'a Self;
1922        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1923            value
1924        }
1925    }
1926
1927    unsafe impl fidl::encoding::TypeMarker for SanitizerOptions {
1928        type Owned = Self;
1929
1930        #[inline(always)]
1931        fn inline_align(_context: fidl::encoding::Context) -> usize {
1932            8
1933        }
1934
1935        #[inline(always)]
1936        fn inline_size(_context: fidl::encoding::Context) -> usize {
1937            32
1938        }
1939    }
1940
1941    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SanitizerOptions, D>
1942        for &SanitizerOptions
1943    {
1944        #[inline]
1945        unsafe fn encode(
1946            self,
1947            encoder: &mut fidl::encoding::Encoder<'_, D>,
1948            offset: usize,
1949            _depth: fidl::encoding::Depth,
1950        ) -> fidl::Result<()> {
1951            encoder.debug_check_bounds::<SanitizerOptions>(offset);
1952            // Delegate to tuple encoding.
1953            fidl::encoding::Encode::<SanitizerOptions, D>::encode(
1954                (
1955                    <fidl::encoding::BoundedString<32> as fidl::encoding::ValueTypeMarker>::borrow(&self.name),
1956                    <fidl::encoding::BoundedString<8192> as fidl::encoding::ValueTypeMarker>::borrow(&self.value),
1957                ),
1958                encoder, offset, _depth
1959            )
1960        }
1961    }
1962    unsafe impl<
1963            D: fidl::encoding::ResourceDialect,
1964            T0: fidl::encoding::Encode<fidl::encoding::BoundedString<32>, D>,
1965            T1: fidl::encoding::Encode<fidl::encoding::BoundedString<8192>, D>,
1966        > fidl::encoding::Encode<SanitizerOptions, D> for (T0, T1)
1967    {
1968        #[inline]
1969        unsafe fn encode(
1970            self,
1971            encoder: &mut fidl::encoding::Encoder<'_, D>,
1972            offset: usize,
1973            depth: fidl::encoding::Depth,
1974        ) -> fidl::Result<()> {
1975            encoder.debug_check_bounds::<SanitizerOptions>(offset);
1976            // Zero out padding regions. There's no need to apply masks
1977            // because the unmasked parts will be overwritten by fields.
1978            // Write the fields.
1979            self.0.encode(encoder, offset + 0, depth)?;
1980            self.1.encode(encoder, offset + 16, depth)?;
1981            Ok(())
1982        }
1983    }
1984
1985    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SanitizerOptions {
1986        #[inline(always)]
1987        fn new_empty() -> Self {
1988            Self {
1989                name: fidl::new_empty!(fidl::encoding::BoundedString<32>, D),
1990                value: fidl::new_empty!(fidl::encoding::BoundedString<8192>, D),
1991            }
1992        }
1993
1994        #[inline]
1995        unsafe fn decode(
1996            &mut self,
1997            decoder: &mut fidl::encoding::Decoder<'_, D>,
1998            offset: usize,
1999            _depth: fidl::encoding::Depth,
2000        ) -> fidl::Result<()> {
2001            decoder.debug_check_bounds::<Self>(offset);
2002            // Verify that padding bytes are zero.
2003            fidl::decode!(
2004                fidl::encoding::BoundedString<32>,
2005                D,
2006                &mut self.name,
2007                decoder,
2008                offset + 0,
2009                _depth
2010            )?;
2011            fidl::decode!(
2012                fidl::encoding::BoundedString<8192>,
2013                D,
2014                &mut self.value,
2015                decoder,
2016                offset + 16,
2017                _depth
2018            )?;
2019            Ok(())
2020        }
2021    }
2022
2023    impl fidl::encoding::ValueTypeMarker for TargetAdapterGetParametersResponse {
2024        type Borrowed<'a> = &'a Self;
2025        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2026            value
2027        }
2028    }
2029
2030    unsafe impl fidl::encoding::TypeMarker for TargetAdapterGetParametersResponse {
2031        type Owned = Self;
2032
2033        #[inline(always)]
2034        fn inline_align(_context: fidl::encoding::Context) -> usize {
2035            8
2036        }
2037
2038        #[inline(always)]
2039        fn inline_size(_context: fidl::encoding::Context) -> usize {
2040            16
2041        }
2042    }
2043
2044    unsafe impl<D: fidl::encoding::ResourceDialect>
2045        fidl::encoding::Encode<TargetAdapterGetParametersResponse, D>
2046        for &TargetAdapterGetParametersResponse
2047    {
2048        #[inline]
2049        unsafe fn encode(
2050            self,
2051            encoder: &mut fidl::encoding::Encoder<'_, D>,
2052            offset: usize,
2053            _depth: fidl::encoding::Depth,
2054        ) -> fidl::Result<()> {
2055            encoder.debug_check_bounds::<TargetAdapterGetParametersResponse>(offset);
2056            // Delegate to tuple encoding.
2057            fidl::encoding::Encode::<TargetAdapterGetParametersResponse, D>::encode(
2058                (
2059                    <fidl::encoding::Vector<fidl::encoding::BoundedString<256>, 128> as fidl::encoding::ValueTypeMarker>::borrow(&self.parameters),
2060                ),
2061                encoder, offset, _depth
2062            )
2063        }
2064    }
2065    unsafe impl<
2066            D: fidl::encoding::ResourceDialect,
2067            T0: fidl::encoding::Encode<
2068                fidl::encoding::Vector<fidl::encoding::BoundedString<256>, 128>,
2069                D,
2070            >,
2071        > fidl::encoding::Encode<TargetAdapterGetParametersResponse, D> for (T0,)
2072    {
2073        #[inline]
2074        unsafe fn encode(
2075            self,
2076            encoder: &mut fidl::encoding::Encoder<'_, D>,
2077            offset: usize,
2078            depth: fidl::encoding::Depth,
2079        ) -> fidl::Result<()> {
2080            encoder.debug_check_bounds::<TargetAdapterGetParametersResponse>(offset);
2081            // Zero out padding regions. There's no need to apply masks
2082            // because the unmasked parts will be overwritten by fields.
2083            // Write the fields.
2084            self.0.encode(encoder, offset + 0, depth)?;
2085            Ok(())
2086        }
2087    }
2088
2089    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2090        for TargetAdapterGetParametersResponse
2091    {
2092        #[inline(always)]
2093        fn new_empty() -> Self {
2094            Self {
2095                parameters: fidl::new_empty!(
2096                    fidl::encoding::Vector<fidl::encoding::BoundedString<256>, 128>,
2097                    D
2098                ),
2099            }
2100        }
2101
2102        #[inline]
2103        unsafe fn decode(
2104            &mut self,
2105            decoder: &mut fidl::encoding::Decoder<'_, D>,
2106            offset: usize,
2107            _depth: fidl::encoding::Depth,
2108        ) -> fidl::Result<()> {
2109            decoder.debug_check_bounds::<Self>(offset);
2110            // Verify that padding bytes are zero.
2111            fidl::decode!(
2112                fidl::encoding::Vector<fidl::encoding::BoundedString<256>, 128>,
2113                D,
2114                &mut self.parameters,
2115                decoder,
2116                offset + 0,
2117                _depth
2118            )?;
2119            Ok(())
2120        }
2121    }
2122
2123    impl Options {
2124        #[inline(always)]
2125        fn max_ordinal_present(&self) -> u64 {
2126            if let Some(_) = self.output_flags {
2127                return 22;
2128            }
2129            if let Some(_) = self.sanitizer_options {
2130                return 21;
2131            }
2132            if let Some(_) = self.use_value_profile {
2133                return 20;
2134            }
2135            if let Some(_) = self.print_final_stats {
2136                return 19;
2137            }
2138            if let Some(_) = self.debug {
2139                return 18;
2140            }
2141            if let Some(_) = self.pulse_interval {
2142                return 17;
2143            }
2144            if let Some(_) = self.oom_exitcode {
2145                return 16;
2146            }
2147            if let Some(_) = self.leak_exitcode {
2148                return 15;
2149            }
2150            if let Some(_) = self.death_exitcode {
2151                return 14;
2152            }
2153            if let Some(_) = self.malloc_exitcode {
2154                return 13;
2155            }
2156            if let Some(_) = self.purge_interval {
2157                return 12;
2158            }
2159            if let Some(_) = self.oom_limit {
2160                return 11;
2161            }
2162            if let Some(_) = self.malloc_limit {
2163                return 10;
2164            }
2165            if let Some(_) = self.run_limit {
2166                return 9;
2167            }
2168            if let Some(_) = self.detect_leaks {
2169                return 8;
2170            }
2171            if let Some(_) = self.detect_exits {
2172                return 7;
2173            }
2174            if let Some(_) = self.dictionary_level {
2175                return 6;
2176            }
2177            if let Some(_) = self.mutation_depth {
2178                return 5;
2179            }
2180            if let Some(_) = self.max_input_size {
2181                return 4;
2182            }
2183            if let Some(_) = self.seed {
2184                return 3;
2185            }
2186            if let Some(_) = self.max_total_time {
2187                return 2;
2188            }
2189            if let Some(_) = self.runs {
2190                return 1;
2191            }
2192            0
2193        }
2194    }
2195
2196    impl fidl::encoding::ValueTypeMarker for Options {
2197        type Borrowed<'a> = &'a Self;
2198        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2199            value
2200        }
2201    }
2202
2203    unsafe impl fidl::encoding::TypeMarker for Options {
2204        type Owned = Self;
2205
2206        #[inline(always)]
2207        fn inline_align(_context: fidl::encoding::Context) -> usize {
2208            8
2209        }
2210
2211        #[inline(always)]
2212        fn inline_size(_context: fidl::encoding::Context) -> usize {
2213            16
2214        }
2215    }
2216
2217    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Options, D> for &Options {
2218        unsafe fn encode(
2219            self,
2220            encoder: &mut fidl::encoding::Encoder<'_, D>,
2221            offset: usize,
2222            mut depth: fidl::encoding::Depth,
2223        ) -> fidl::Result<()> {
2224            encoder.debug_check_bounds::<Options>(offset);
2225            // Vector header
2226            let max_ordinal: u64 = self.max_ordinal_present();
2227            encoder.write_num(max_ordinal, offset);
2228            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2229            // Calling encoder.out_of_line_offset(0) is not allowed.
2230            if max_ordinal == 0 {
2231                return Ok(());
2232            }
2233            depth.increment()?;
2234            let envelope_size = 8;
2235            let bytes_len = max_ordinal as usize * envelope_size;
2236            #[allow(unused_variables)]
2237            let offset = encoder.out_of_line_offset(bytes_len);
2238            let mut _prev_end_offset: usize = 0;
2239            if 1 > max_ordinal {
2240                return Ok(());
2241            }
2242
2243            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2244            // are envelope_size bytes.
2245            let cur_offset: usize = (1 - 1) * envelope_size;
2246
2247            // Zero reserved fields.
2248            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2249
2250            // Safety:
2251            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2252            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2253            //   envelope_size bytes, there is always sufficient room.
2254            fidl::encoding::encode_in_envelope_optional::<u32, D>(
2255                self.runs.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
2256                encoder,
2257                offset + cur_offset,
2258                depth,
2259            )?;
2260
2261            _prev_end_offset = cur_offset + envelope_size;
2262            if 2 > max_ordinal {
2263                return Ok(());
2264            }
2265
2266            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2267            // are envelope_size bytes.
2268            let cur_offset: usize = (2 - 1) * envelope_size;
2269
2270            // Zero reserved fields.
2271            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2272
2273            // Safety:
2274            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2275            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2276            //   envelope_size bytes, there is always sufficient room.
2277            fidl::encoding::encode_in_envelope_optional::<i64, D>(
2278                self.max_total_time.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
2279                encoder,
2280                offset + cur_offset,
2281                depth,
2282            )?;
2283
2284            _prev_end_offset = cur_offset + envelope_size;
2285            if 3 > max_ordinal {
2286                return Ok(());
2287            }
2288
2289            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2290            // are envelope_size bytes.
2291            let cur_offset: usize = (3 - 1) * envelope_size;
2292
2293            // Zero reserved fields.
2294            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2295
2296            // Safety:
2297            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2298            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2299            //   envelope_size bytes, there is always sufficient room.
2300            fidl::encoding::encode_in_envelope_optional::<u32, D>(
2301                self.seed.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
2302                encoder,
2303                offset + cur_offset,
2304                depth,
2305            )?;
2306
2307            _prev_end_offset = cur_offset + envelope_size;
2308            if 4 > max_ordinal {
2309                return Ok(());
2310            }
2311
2312            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2313            // are envelope_size bytes.
2314            let cur_offset: usize = (4 - 1) * envelope_size;
2315
2316            // Zero reserved fields.
2317            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2318
2319            // Safety:
2320            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2321            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2322            //   envelope_size bytes, there is always sufficient room.
2323            fidl::encoding::encode_in_envelope_optional::<u64, D>(
2324                self.max_input_size.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
2325                encoder,
2326                offset + cur_offset,
2327                depth,
2328            )?;
2329
2330            _prev_end_offset = cur_offset + envelope_size;
2331            if 5 > max_ordinal {
2332                return Ok(());
2333            }
2334
2335            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2336            // are envelope_size bytes.
2337            let cur_offset: usize = (5 - 1) * envelope_size;
2338
2339            // Zero reserved fields.
2340            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2341
2342            // Safety:
2343            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2344            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2345            //   envelope_size bytes, there is always sufficient room.
2346            fidl::encoding::encode_in_envelope_optional::<u16, D>(
2347                self.mutation_depth.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
2348                encoder,
2349                offset + cur_offset,
2350                depth,
2351            )?;
2352
2353            _prev_end_offset = cur_offset + envelope_size;
2354            if 6 > max_ordinal {
2355                return Ok(());
2356            }
2357
2358            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2359            // are envelope_size bytes.
2360            let cur_offset: usize = (6 - 1) * envelope_size;
2361
2362            // Zero reserved fields.
2363            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2364
2365            // Safety:
2366            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2367            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2368            //   envelope_size bytes, there is always sufficient room.
2369            fidl::encoding::encode_in_envelope_optional::<u16, D>(
2370                self.dictionary_level
2371                    .as_ref()
2372                    .map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
2373                encoder,
2374                offset + cur_offset,
2375                depth,
2376            )?;
2377
2378            _prev_end_offset = cur_offset + envelope_size;
2379            if 7 > max_ordinal {
2380                return Ok(());
2381            }
2382
2383            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2384            // are envelope_size bytes.
2385            let cur_offset: usize = (7 - 1) * envelope_size;
2386
2387            // Zero reserved fields.
2388            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2389
2390            // Safety:
2391            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2392            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2393            //   envelope_size bytes, there is always sufficient room.
2394            fidl::encoding::encode_in_envelope_optional::<bool, D>(
2395                self.detect_exits.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
2396                encoder,
2397                offset + cur_offset,
2398                depth,
2399            )?;
2400
2401            _prev_end_offset = cur_offset + envelope_size;
2402            if 8 > max_ordinal {
2403                return Ok(());
2404            }
2405
2406            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2407            // are envelope_size bytes.
2408            let cur_offset: usize = (8 - 1) * envelope_size;
2409
2410            // Zero reserved fields.
2411            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2412
2413            // Safety:
2414            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2415            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2416            //   envelope_size bytes, there is always sufficient room.
2417            fidl::encoding::encode_in_envelope_optional::<bool, D>(
2418                self.detect_leaks.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
2419                encoder,
2420                offset + cur_offset,
2421                depth,
2422            )?;
2423
2424            _prev_end_offset = cur_offset + envelope_size;
2425            if 9 > max_ordinal {
2426                return Ok(());
2427            }
2428
2429            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2430            // are envelope_size bytes.
2431            let cur_offset: usize = (9 - 1) * envelope_size;
2432
2433            // Zero reserved fields.
2434            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2435
2436            // Safety:
2437            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2438            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2439            //   envelope_size bytes, there is always sufficient room.
2440            fidl::encoding::encode_in_envelope_optional::<i64, D>(
2441                self.run_limit.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
2442                encoder,
2443                offset + cur_offset,
2444                depth,
2445            )?;
2446
2447            _prev_end_offset = cur_offset + envelope_size;
2448            if 10 > max_ordinal {
2449                return Ok(());
2450            }
2451
2452            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2453            // are envelope_size bytes.
2454            let cur_offset: usize = (10 - 1) * envelope_size;
2455
2456            // Zero reserved fields.
2457            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2458
2459            // Safety:
2460            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2461            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2462            //   envelope_size bytes, there is always sufficient room.
2463            fidl::encoding::encode_in_envelope_optional::<u64, D>(
2464                self.malloc_limit.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
2465                encoder,
2466                offset + cur_offset,
2467                depth,
2468            )?;
2469
2470            _prev_end_offset = cur_offset + envelope_size;
2471            if 11 > max_ordinal {
2472                return Ok(());
2473            }
2474
2475            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2476            // are envelope_size bytes.
2477            let cur_offset: usize = (11 - 1) * envelope_size;
2478
2479            // Zero reserved fields.
2480            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2481
2482            // Safety:
2483            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2484            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2485            //   envelope_size bytes, there is always sufficient room.
2486            fidl::encoding::encode_in_envelope_optional::<u64, D>(
2487                self.oom_limit.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
2488                encoder,
2489                offset + cur_offset,
2490                depth,
2491            )?;
2492
2493            _prev_end_offset = cur_offset + envelope_size;
2494            if 12 > max_ordinal {
2495                return Ok(());
2496            }
2497
2498            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2499            // are envelope_size bytes.
2500            let cur_offset: usize = (12 - 1) * envelope_size;
2501
2502            // Zero reserved fields.
2503            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2504
2505            // Safety:
2506            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2507            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2508            //   envelope_size bytes, there is always sufficient room.
2509            fidl::encoding::encode_in_envelope_optional::<i64, D>(
2510                self.purge_interval.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
2511                encoder,
2512                offset + cur_offset,
2513                depth,
2514            )?;
2515
2516            _prev_end_offset = cur_offset + envelope_size;
2517            if 13 > max_ordinal {
2518                return Ok(());
2519            }
2520
2521            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2522            // are envelope_size bytes.
2523            let cur_offset: usize = (13 - 1) * envelope_size;
2524
2525            // Zero reserved fields.
2526            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2527
2528            // Safety:
2529            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2530            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2531            //   envelope_size bytes, there is always sufficient room.
2532            fidl::encoding::encode_in_envelope_optional::<i32, D>(
2533                self.malloc_exitcode.as_ref().map(<i32 as fidl::encoding::ValueTypeMarker>::borrow),
2534                encoder,
2535                offset + cur_offset,
2536                depth,
2537            )?;
2538
2539            _prev_end_offset = cur_offset + envelope_size;
2540            if 14 > max_ordinal {
2541                return Ok(());
2542            }
2543
2544            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2545            // are envelope_size bytes.
2546            let cur_offset: usize = (14 - 1) * envelope_size;
2547
2548            // Zero reserved fields.
2549            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2550
2551            // Safety:
2552            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2553            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2554            //   envelope_size bytes, there is always sufficient room.
2555            fidl::encoding::encode_in_envelope_optional::<i32, D>(
2556                self.death_exitcode.as_ref().map(<i32 as fidl::encoding::ValueTypeMarker>::borrow),
2557                encoder,
2558                offset + cur_offset,
2559                depth,
2560            )?;
2561
2562            _prev_end_offset = cur_offset + envelope_size;
2563            if 15 > max_ordinal {
2564                return Ok(());
2565            }
2566
2567            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2568            // are envelope_size bytes.
2569            let cur_offset: usize = (15 - 1) * envelope_size;
2570
2571            // Zero reserved fields.
2572            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2573
2574            // Safety:
2575            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2576            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2577            //   envelope_size bytes, there is always sufficient room.
2578            fidl::encoding::encode_in_envelope_optional::<i32, D>(
2579                self.leak_exitcode.as_ref().map(<i32 as fidl::encoding::ValueTypeMarker>::borrow),
2580                encoder,
2581                offset + cur_offset,
2582                depth,
2583            )?;
2584
2585            _prev_end_offset = cur_offset + envelope_size;
2586            if 16 > max_ordinal {
2587                return Ok(());
2588            }
2589
2590            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2591            // are envelope_size bytes.
2592            let cur_offset: usize = (16 - 1) * envelope_size;
2593
2594            // Zero reserved fields.
2595            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2596
2597            // Safety:
2598            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2599            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2600            //   envelope_size bytes, there is always sufficient room.
2601            fidl::encoding::encode_in_envelope_optional::<i32, D>(
2602                self.oom_exitcode.as_ref().map(<i32 as fidl::encoding::ValueTypeMarker>::borrow),
2603                encoder,
2604                offset + cur_offset,
2605                depth,
2606            )?;
2607
2608            _prev_end_offset = cur_offset + envelope_size;
2609            if 17 > max_ordinal {
2610                return Ok(());
2611            }
2612
2613            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2614            // are envelope_size bytes.
2615            let cur_offset: usize = (17 - 1) * envelope_size;
2616
2617            // Zero reserved fields.
2618            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2619
2620            // Safety:
2621            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2622            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2623            //   envelope_size bytes, there is always sufficient room.
2624            fidl::encoding::encode_in_envelope_optional::<i64, D>(
2625                self.pulse_interval.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
2626                encoder,
2627                offset + cur_offset,
2628                depth,
2629            )?;
2630
2631            _prev_end_offset = cur_offset + envelope_size;
2632            if 18 > max_ordinal {
2633                return Ok(());
2634            }
2635
2636            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2637            // are envelope_size bytes.
2638            let cur_offset: usize = (18 - 1) * envelope_size;
2639
2640            // Zero reserved fields.
2641            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2642
2643            // Safety:
2644            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2645            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2646            //   envelope_size bytes, there is always sufficient room.
2647            fidl::encoding::encode_in_envelope_optional::<bool, D>(
2648                self.debug.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
2649                encoder,
2650                offset + cur_offset,
2651                depth,
2652            )?;
2653
2654            _prev_end_offset = cur_offset + envelope_size;
2655            if 19 > max_ordinal {
2656                return Ok(());
2657            }
2658
2659            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2660            // are envelope_size bytes.
2661            let cur_offset: usize = (19 - 1) * envelope_size;
2662
2663            // Zero reserved fields.
2664            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2665
2666            // Safety:
2667            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2668            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2669            //   envelope_size bytes, there is always sufficient room.
2670            fidl::encoding::encode_in_envelope_optional::<bool, D>(
2671                self.print_final_stats
2672                    .as_ref()
2673                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
2674                encoder,
2675                offset + cur_offset,
2676                depth,
2677            )?;
2678
2679            _prev_end_offset = cur_offset + envelope_size;
2680            if 20 > max_ordinal {
2681                return Ok(());
2682            }
2683
2684            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2685            // are envelope_size bytes.
2686            let cur_offset: usize = (20 - 1) * envelope_size;
2687
2688            // Zero reserved fields.
2689            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2690
2691            // Safety:
2692            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2693            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2694            //   envelope_size bytes, there is always sufficient room.
2695            fidl::encoding::encode_in_envelope_optional::<bool, D>(
2696                self.use_value_profile
2697                    .as_ref()
2698                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
2699                encoder,
2700                offset + cur_offset,
2701                depth,
2702            )?;
2703
2704            _prev_end_offset = cur_offset + envelope_size;
2705            if 21 > max_ordinal {
2706                return Ok(());
2707            }
2708
2709            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2710            // are envelope_size bytes.
2711            let cur_offset: usize = (21 - 1) * envelope_size;
2712
2713            // Zero reserved fields.
2714            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2715
2716            // Safety:
2717            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2718            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2719            //   envelope_size bytes, there is always sufficient room.
2720            fidl::encoding::encode_in_envelope_optional::<SanitizerOptions, D>(
2721                self.sanitizer_options
2722                    .as_ref()
2723                    .map(<SanitizerOptions as fidl::encoding::ValueTypeMarker>::borrow),
2724                encoder,
2725                offset + cur_offset,
2726                depth,
2727            )?;
2728
2729            _prev_end_offset = cur_offset + envelope_size;
2730            if 22 > max_ordinal {
2731                return Ok(());
2732            }
2733
2734            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2735            // are envelope_size bytes.
2736            let cur_offset: usize = (22 - 1) * envelope_size;
2737
2738            // Zero reserved fields.
2739            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2740
2741            // Safety:
2742            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2743            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2744            //   envelope_size bytes, there is always sufficient room.
2745            fidl::encoding::encode_in_envelope_optional::<OutputFlags, D>(
2746                self.output_flags
2747                    .as_ref()
2748                    .map(<OutputFlags as fidl::encoding::ValueTypeMarker>::borrow),
2749                encoder,
2750                offset + cur_offset,
2751                depth,
2752            )?;
2753
2754            _prev_end_offset = cur_offset + envelope_size;
2755
2756            Ok(())
2757        }
2758    }
2759
2760    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Options {
2761        #[inline(always)]
2762        fn new_empty() -> Self {
2763            Self::default()
2764        }
2765
2766        unsafe fn decode(
2767            &mut self,
2768            decoder: &mut fidl::encoding::Decoder<'_, D>,
2769            offset: usize,
2770            mut depth: fidl::encoding::Depth,
2771        ) -> fidl::Result<()> {
2772            decoder.debug_check_bounds::<Self>(offset);
2773            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
2774                None => return Err(fidl::Error::NotNullable),
2775                Some(len) => len,
2776            };
2777            // Calling decoder.out_of_line_offset(0) is not allowed.
2778            if len == 0 {
2779                return Ok(());
2780            };
2781            depth.increment()?;
2782            let envelope_size = 8;
2783            let bytes_len = len * envelope_size;
2784            let offset = decoder.out_of_line_offset(bytes_len)?;
2785            // Decode the envelope for each type.
2786            let mut _next_ordinal_to_read = 0;
2787            let mut next_offset = offset;
2788            let end_offset = offset + bytes_len;
2789            _next_ordinal_to_read += 1;
2790            if next_offset >= end_offset {
2791                return Ok(());
2792            }
2793
2794            // Decode unknown envelopes for gaps in ordinals.
2795            while _next_ordinal_to_read < 1 {
2796                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2797                _next_ordinal_to_read += 1;
2798                next_offset += envelope_size;
2799            }
2800
2801            let next_out_of_line = decoder.next_out_of_line();
2802            let handles_before = decoder.remaining_handles();
2803            if let Some((inlined, num_bytes, num_handles)) =
2804                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2805            {
2806                let member_inline_size =
2807                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2808                if inlined != (member_inline_size <= 4) {
2809                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2810                }
2811                let inner_offset;
2812                let mut inner_depth = depth.clone();
2813                if inlined {
2814                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2815                    inner_offset = next_offset;
2816                } else {
2817                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2818                    inner_depth.increment()?;
2819                }
2820                let val_ref = self.runs.get_or_insert_with(|| fidl::new_empty!(u32, D));
2821                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
2822                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2823                {
2824                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2825                }
2826                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2827                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2828                }
2829            }
2830
2831            next_offset += envelope_size;
2832            _next_ordinal_to_read += 1;
2833            if next_offset >= end_offset {
2834                return Ok(());
2835            }
2836
2837            // Decode unknown envelopes for gaps in ordinals.
2838            while _next_ordinal_to_read < 2 {
2839                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2840                _next_ordinal_to_read += 1;
2841                next_offset += envelope_size;
2842            }
2843
2844            let next_out_of_line = decoder.next_out_of_line();
2845            let handles_before = decoder.remaining_handles();
2846            if let Some((inlined, num_bytes, num_handles)) =
2847                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2848            {
2849                let member_inline_size =
2850                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2851                if inlined != (member_inline_size <= 4) {
2852                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2853                }
2854                let inner_offset;
2855                let mut inner_depth = depth.clone();
2856                if inlined {
2857                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2858                    inner_offset = next_offset;
2859                } else {
2860                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2861                    inner_depth.increment()?;
2862                }
2863                let val_ref = self.max_total_time.get_or_insert_with(|| fidl::new_empty!(i64, D));
2864                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
2865                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2866                {
2867                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2868                }
2869                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2870                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2871                }
2872            }
2873
2874            next_offset += envelope_size;
2875            _next_ordinal_to_read += 1;
2876            if next_offset >= end_offset {
2877                return Ok(());
2878            }
2879
2880            // Decode unknown envelopes for gaps in ordinals.
2881            while _next_ordinal_to_read < 3 {
2882                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2883                _next_ordinal_to_read += 1;
2884                next_offset += envelope_size;
2885            }
2886
2887            let next_out_of_line = decoder.next_out_of_line();
2888            let handles_before = decoder.remaining_handles();
2889            if let Some((inlined, num_bytes, num_handles)) =
2890                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2891            {
2892                let member_inline_size =
2893                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2894                if inlined != (member_inline_size <= 4) {
2895                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2896                }
2897                let inner_offset;
2898                let mut inner_depth = depth.clone();
2899                if inlined {
2900                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2901                    inner_offset = next_offset;
2902                } else {
2903                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2904                    inner_depth.increment()?;
2905                }
2906                let val_ref = self.seed.get_or_insert_with(|| fidl::new_empty!(u32, D));
2907                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
2908                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2909                {
2910                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2911                }
2912                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2913                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2914                }
2915            }
2916
2917            next_offset += envelope_size;
2918            _next_ordinal_to_read += 1;
2919            if next_offset >= end_offset {
2920                return Ok(());
2921            }
2922
2923            // Decode unknown envelopes for gaps in ordinals.
2924            while _next_ordinal_to_read < 4 {
2925                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2926                _next_ordinal_to_read += 1;
2927                next_offset += envelope_size;
2928            }
2929
2930            let next_out_of_line = decoder.next_out_of_line();
2931            let handles_before = decoder.remaining_handles();
2932            if let Some((inlined, num_bytes, num_handles)) =
2933                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2934            {
2935                let member_inline_size =
2936                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2937                if inlined != (member_inline_size <= 4) {
2938                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2939                }
2940                let inner_offset;
2941                let mut inner_depth = depth.clone();
2942                if inlined {
2943                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2944                    inner_offset = next_offset;
2945                } else {
2946                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2947                    inner_depth.increment()?;
2948                }
2949                let val_ref = self.max_input_size.get_or_insert_with(|| fidl::new_empty!(u64, D));
2950                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
2951                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2952                {
2953                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2954                }
2955                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2956                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2957                }
2958            }
2959
2960            next_offset += envelope_size;
2961            _next_ordinal_to_read += 1;
2962            if next_offset >= end_offset {
2963                return Ok(());
2964            }
2965
2966            // Decode unknown envelopes for gaps in ordinals.
2967            while _next_ordinal_to_read < 5 {
2968                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2969                _next_ordinal_to_read += 1;
2970                next_offset += envelope_size;
2971            }
2972
2973            let next_out_of_line = decoder.next_out_of_line();
2974            let handles_before = decoder.remaining_handles();
2975            if let Some((inlined, num_bytes, num_handles)) =
2976                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2977            {
2978                let member_inline_size =
2979                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2980                if inlined != (member_inline_size <= 4) {
2981                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2982                }
2983                let inner_offset;
2984                let mut inner_depth = depth.clone();
2985                if inlined {
2986                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2987                    inner_offset = next_offset;
2988                } else {
2989                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2990                    inner_depth.increment()?;
2991                }
2992                let val_ref = self.mutation_depth.get_or_insert_with(|| fidl::new_empty!(u16, D));
2993                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
2994                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2995                {
2996                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2997                }
2998                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2999                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3000                }
3001            }
3002
3003            next_offset += envelope_size;
3004            _next_ordinal_to_read += 1;
3005            if next_offset >= end_offset {
3006                return Ok(());
3007            }
3008
3009            // Decode unknown envelopes for gaps in ordinals.
3010            while _next_ordinal_to_read < 6 {
3011                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3012                _next_ordinal_to_read += 1;
3013                next_offset += envelope_size;
3014            }
3015
3016            let next_out_of_line = decoder.next_out_of_line();
3017            let handles_before = decoder.remaining_handles();
3018            if let Some((inlined, num_bytes, num_handles)) =
3019                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3020            {
3021                let member_inline_size =
3022                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3023                if inlined != (member_inline_size <= 4) {
3024                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3025                }
3026                let inner_offset;
3027                let mut inner_depth = depth.clone();
3028                if inlined {
3029                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3030                    inner_offset = next_offset;
3031                } else {
3032                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3033                    inner_depth.increment()?;
3034                }
3035                let val_ref = self.dictionary_level.get_or_insert_with(|| fidl::new_empty!(u16, D));
3036                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
3037                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3038                {
3039                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3040                }
3041                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3042                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3043                }
3044            }
3045
3046            next_offset += envelope_size;
3047            _next_ordinal_to_read += 1;
3048            if next_offset >= end_offset {
3049                return Ok(());
3050            }
3051
3052            // Decode unknown envelopes for gaps in ordinals.
3053            while _next_ordinal_to_read < 7 {
3054                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3055                _next_ordinal_to_read += 1;
3056                next_offset += envelope_size;
3057            }
3058
3059            let next_out_of_line = decoder.next_out_of_line();
3060            let handles_before = decoder.remaining_handles();
3061            if let Some((inlined, num_bytes, num_handles)) =
3062                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3063            {
3064                let member_inline_size =
3065                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3066                if inlined != (member_inline_size <= 4) {
3067                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3068                }
3069                let inner_offset;
3070                let mut inner_depth = depth.clone();
3071                if inlined {
3072                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3073                    inner_offset = next_offset;
3074                } else {
3075                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3076                    inner_depth.increment()?;
3077                }
3078                let val_ref = self.detect_exits.get_or_insert_with(|| fidl::new_empty!(bool, D));
3079                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
3080                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3081                {
3082                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3083                }
3084                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3085                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3086                }
3087            }
3088
3089            next_offset += envelope_size;
3090            _next_ordinal_to_read += 1;
3091            if next_offset >= end_offset {
3092                return Ok(());
3093            }
3094
3095            // Decode unknown envelopes for gaps in ordinals.
3096            while _next_ordinal_to_read < 8 {
3097                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3098                _next_ordinal_to_read += 1;
3099                next_offset += envelope_size;
3100            }
3101
3102            let next_out_of_line = decoder.next_out_of_line();
3103            let handles_before = decoder.remaining_handles();
3104            if let Some((inlined, num_bytes, num_handles)) =
3105                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3106            {
3107                let member_inline_size =
3108                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3109                if inlined != (member_inline_size <= 4) {
3110                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3111                }
3112                let inner_offset;
3113                let mut inner_depth = depth.clone();
3114                if inlined {
3115                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3116                    inner_offset = next_offset;
3117                } else {
3118                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3119                    inner_depth.increment()?;
3120                }
3121                let val_ref = self.detect_leaks.get_or_insert_with(|| fidl::new_empty!(bool, D));
3122                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
3123                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3124                {
3125                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3126                }
3127                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3128                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3129                }
3130            }
3131
3132            next_offset += envelope_size;
3133            _next_ordinal_to_read += 1;
3134            if next_offset >= end_offset {
3135                return Ok(());
3136            }
3137
3138            // Decode unknown envelopes for gaps in ordinals.
3139            while _next_ordinal_to_read < 9 {
3140                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3141                _next_ordinal_to_read += 1;
3142                next_offset += envelope_size;
3143            }
3144
3145            let next_out_of_line = decoder.next_out_of_line();
3146            let handles_before = decoder.remaining_handles();
3147            if let Some((inlined, num_bytes, num_handles)) =
3148                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3149            {
3150                let member_inline_size =
3151                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3152                if inlined != (member_inline_size <= 4) {
3153                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3154                }
3155                let inner_offset;
3156                let mut inner_depth = depth.clone();
3157                if inlined {
3158                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3159                    inner_offset = next_offset;
3160                } else {
3161                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3162                    inner_depth.increment()?;
3163                }
3164                let val_ref = self.run_limit.get_or_insert_with(|| fidl::new_empty!(i64, D));
3165                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
3166                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3167                {
3168                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3169                }
3170                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3171                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3172                }
3173            }
3174
3175            next_offset += envelope_size;
3176            _next_ordinal_to_read += 1;
3177            if next_offset >= end_offset {
3178                return Ok(());
3179            }
3180
3181            // Decode unknown envelopes for gaps in ordinals.
3182            while _next_ordinal_to_read < 10 {
3183                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3184                _next_ordinal_to_read += 1;
3185                next_offset += envelope_size;
3186            }
3187
3188            let next_out_of_line = decoder.next_out_of_line();
3189            let handles_before = decoder.remaining_handles();
3190            if let Some((inlined, num_bytes, num_handles)) =
3191                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3192            {
3193                let member_inline_size =
3194                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3195                if inlined != (member_inline_size <= 4) {
3196                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3197                }
3198                let inner_offset;
3199                let mut inner_depth = depth.clone();
3200                if inlined {
3201                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3202                    inner_offset = next_offset;
3203                } else {
3204                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3205                    inner_depth.increment()?;
3206                }
3207                let val_ref = self.malloc_limit.get_or_insert_with(|| fidl::new_empty!(u64, D));
3208                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
3209                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3210                {
3211                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3212                }
3213                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3214                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3215                }
3216            }
3217
3218            next_offset += envelope_size;
3219            _next_ordinal_to_read += 1;
3220            if next_offset >= end_offset {
3221                return Ok(());
3222            }
3223
3224            // Decode unknown envelopes for gaps in ordinals.
3225            while _next_ordinal_to_read < 11 {
3226                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3227                _next_ordinal_to_read += 1;
3228                next_offset += envelope_size;
3229            }
3230
3231            let next_out_of_line = decoder.next_out_of_line();
3232            let handles_before = decoder.remaining_handles();
3233            if let Some((inlined, num_bytes, num_handles)) =
3234                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3235            {
3236                let member_inline_size =
3237                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3238                if inlined != (member_inline_size <= 4) {
3239                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3240                }
3241                let inner_offset;
3242                let mut inner_depth = depth.clone();
3243                if inlined {
3244                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3245                    inner_offset = next_offset;
3246                } else {
3247                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3248                    inner_depth.increment()?;
3249                }
3250                let val_ref = self.oom_limit.get_or_insert_with(|| fidl::new_empty!(u64, D));
3251                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
3252                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3253                {
3254                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3255                }
3256                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3257                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3258                }
3259            }
3260
3261            next_offset += envelope_size;
3262            _next_ordinal_to_read += 1;
3263            if next_offset >= end_offset {
3264                return Ok(());
3265            }
3266
3267            // Decode unknown envelopes for gaps in ordinals.
3268            while _next_ordinal_to_read < 12 {
3269                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3270                _next_ordinal_to_read += 1;
3271                next_offset += envelope_size;
3272            }
3273
3274            let next_out_of_line = decoder.next_out_of_line();
3275            let handles_before = decoder.remaining_handles();
3276            if let Some((inlined, num_bytes, num_handles)) =
3277                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3278            {
3279                let member_inline_size =
3280                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3281                if inlined != (member_inline_size <= 4) {
3282                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3283                }
3284                let inner_offset;
3285                let mut inner_depth = depth.clone();
3286                if inlined {
3287                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3288                    inner_offset = next_offset;
3289                } else {
3290                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3291                    inner_depth.increment()?;
3292                }
3293                let val_ref = self.purge_interval.get_or_insert_with(|| fidl::new_empty!(i64, D));
3294                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
3295                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3296                {
3297                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3298                }
3299                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3300                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3301                }
3302            }
3303
3304            next_offset += envelope_size;
3305            _next_ordinal_to_read += 1;
3306            if next_offset >= end_offset {
3307                return Ok(());
3308            }
3309
3310            // Decode unknown envelopes for gaps in ordinals.
3311            while _next_ordinal_to_read < 13 {
3312                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3313                _next_ordinal_to_read += 1;
3314                next_offset += envelope_size;
3315            }
3316
3317            let next_out_of_line = decoder.next_out_of_line();
3318            let handles_before = decoder.remaining_handles();
3319            if let Some((inlined, num_bytes, num_handles)) =
3320                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3321            {
3322                let member_inline_size =
3323                    <i32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3324                if inlined != (member_inline_size <= 4) {
3325                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3326                }
3327                let inner_offset;
3328                let mut inner_depth = depth.clone();
3329                if inlined {
3330                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3331                    inner_offset = next_offset;
3332                } else {
3333                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3334                    inner_depth.increment()?;
3335                }
3336                let val_ref = self.malloc_exitcode.get_or_insert_with(|| fidl::new_empty!(i32, D));
3337                fidl::decode!(i32, D, val_ref, decoder, inner_offset, inner_depth)?;
3338                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3339                {
3340                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3341                }
3342                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3343                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3344                }
3345            }
3346
3347            next_offset += envelope_size;
3348            _next_ordinal_to_read += 1;
3349            if next_offset >= end_offset {
3350                return Ok(());
3351            }
3352
3353            // Decode unknown envelopes for gaps in ordinals.
3354            while _next_ordinal_to_read < 14 {
3355                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3356                _next_ordinal_to_read += 1;
3357                next_offset += envelope_size;
3358            }
3359
3360            let next_out_of_line = decoder.next_out_of_line();
3361            let handles_before = decoder.remaining_handles();
3362            if let Some((inlined, num_bytes, num_handles)) =
3363                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3364            {
3365                let member_inline_size =
3366                    <i32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3367                if inlined != (member_inline_size <= 4) {
3368                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3369                }
3370                let inner_offset;
3371                let mut inner_depth = depth.clone();
3372                if inlined {
3373                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3374                    inner_offset = next_offset;
3375                } else {
3376                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3377                    inner_depth.increment()?;
3378                }
3379                let val_ref = self.death_exitcode.get_or_insert_with(|| fidl::new_empty!(i32, D));
3380                fidl::decode!(i32, D, val_ref, decoder, inner_offset, inner_depth)?;
3381                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3382                {
3383                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3384                }
3385                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3386                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3387                }
3388            }
3389
3390            next_offset += envelope_size;
3391            _next_ordinal_to_read += 1;
3392            if next_offset >= end_offset {
3393                return Ok(());
3394            }
3395
3396            // Decode unknown envelopes for gaps in ordinals.
3397            while _next_ordinal_to_read < 15 {
3398                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3399                _next_ordinal_to_read += 1;
3400                next_offset += envelope_size;
3401            }
3402
3403            let next_out_of_line = decoder.next_out_of_line();
3404            let handles_before = decoder.remaining_handles();
3405            if let Some((inlined, num_bytes, num_handles)) =
3406                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3407            {
3408                let member_inline_size =
3409                    <i32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3410                if inlined != (member_inline_size <= 4) {
3411                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3412                }
3413                let inner_offset;
3414                let mut inner_depth = depth.clone();
3415                if inlined {
3416                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3417                    inner_offset = next_offset;
3418                } else {
3419                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3420                    inner_depth.increment()?;
3421                }
3422                let val_ref = self.leak_exitcode.get_or_insert_with(|| fidl::new_empty!(i32, D));
3423                fidl::decode!(i32, D, val_ref, decoder, inner_offset, inner_depth)?;
3424                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3425                {
3426                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3427                }
3428                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3429                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3430                }
3431            }
3432
3433            next_offset += envelope_size;
3434            _next_ordinal_to_read += 1;
3435            if next_offset >= end_offset {
3436                return Ok(());
3437            }
3438
3439            // Decode unknown envelopes for gaps in ordinals.
3440            while _next_ordinal_to_read < 16 {
3441                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3442                _next_ordinal_to_read += 1;
3443                next_offset += envelope_size;
3444            }
3445
3446            let next_out_of_line = decoder.next_out_of_line();
3447            let handles_before = decoder.remaining_handles();
3448            if let Some((inlined, num_bytes, num_handles)) =
3449                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3450            {
3451                let member_inline_size =
3452                    <i32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3453                if inlined != (member_inline_size <= 4) {
3454                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3455                }
3456                let inner_offset;
3457                let mut inner_depth = depth.clone();
3458                if inlined {
3459                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3460                    inner_offset = next_offset;
3461                } else {
3462                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3463                    inner_depth.increment()?;
3464                }
3465                let val_ref = self.oom_exitcode.get_or_insert_with(|| fidl::new_empty!(i32, D));
3466                fidl::decode!(i32, D, val_ref, decoder, inner_offset, inner_depth)?;
3467                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3468                {
3469                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3470                }
3471                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3472                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3473                }
3474            }
3475
3476            next_offset += envelope_size;
3477            _next_ordinal_to_read += 1;
3478            if next_offset >= end_offset {
3479                return Ok(());
3480            }
3481
3482            // Decode unknown envelopes for gaps in ordinals.
3483            while _next_ordinal_to_read < 17 {
3484                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3485                _next_ordinal_to_read += 1;
3486                next_offset += envelope_size;
3487            }
3488
3489            let next_out_of_line = decoder.next_out_of_line();
3490            let handles_before = decoder.remaining_handles();
3491            if let Some((inlined, num_bytes, num_handles)) =
3492                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3493            {
3494                let member_inline_size =
3495                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3496                if inlined != (member_inline_size <= 4) {
3497                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3498                }
3499                let inner_offset;
3500                let mut inner_depth = depth.clone();
3501                if inlined {
3502                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3503                    inner_offset = next_offset;
3504                } else {
3505                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3506                    inner_depth.increment()?;
3507                }
3508                let val_ref = self.pulse_interval.get_or_insert_with(|| fidl::new_empty!(i64, D));
3509                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
3510                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3511                {
3512                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3513                }
3514                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3515                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3516                }
3517            }
3518
3519            next_offset += envelope_size;
3520            _next_ordinal_to_read += 1;
3521            if next_offset >= end_offset {
3522                return Ok(());
3523            }
3524
3525            // Decode unknown envelopes for gaps in ordinals.
3526            while _next_ordinal_to_read < 18 {
3527                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3528                _next_ordinal_to_read += 1;
3529                next_offset += envelope_size;
3530            }
3531
3532            let next_out_of_line = decoder.next_out_of_line();
3533            let handles_before = decoder.remaining_handles();
3534            if let Some((inlined, num_bytes, num_handles)) =
3535                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3536            {
3537                let member_inline_size =
3538                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3539                if inlined != (member_inline_size <= 4) {
3540                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3541                }
3542                let inner_offset;
3543                let mut inner_depth = depth.clone();
3544                if inlined {
3545                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3546                    inner_offset = next_offset;
3547                } else {
3548                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3549                    inner_depth.increment()?;
3550                }
3551                let val_ref = self.debug.get_or_insert_with(|| fidl::new_empty!(bool, D));
3552                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
3553                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3554                {
3555                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3556                }
3557                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3558                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3559                }
3560            }
3561
3562            next_offset += envelope_size;
3563            _next_ordinal_to_read += 1;
3564            if next_offset >= end_offset {
3565                return Ok(());
3566            }
3567
3568            // Decode unknown envelopes for gaps in ordinals.
3569            while _next_ordinal_to_read < 19 {
3570                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3571                _next_ordinal_to_read += 1;
3572                next_offset += envelope_size;
3573            }
3574
3575            let next_out_of_line = decoder.next_out_of_line();
3576            let handles_before = decoder.remaining_handles();
3577            if let Some((inlined, num_bytes, num_handles)) =
3578                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3579            {
3580                let member_inline_size =
3581                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3582                if inlined != (member_inline_size <= 4) {
3583                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3584                }
3585                let inner_offset;
3586                let mut inner_depth = depth.clone();
3587                if inlined {
3588                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3589                    inner_offset = next_offset;
3590                } else {
3591                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3592                    inner_depth.increment()?;
3593                }
3594                let val_ref =
3595                    self.print_final_stats.get_or_insert_with(|| fidl::new_empty!(bool, D));
3596                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
3597                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3598                {
3599                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3600                }
3601                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3602                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3603                }
3604            }
3605
3606            next_offset += envelope_size;
3607            _next_ordinal_to_read += 1;
3608            if next_offset >= end_offset {
3609                return Ok(());
3610            }
3611
3612            // Decode unknown envelopes for gaps in ordinals.
3613            while _next_ordinal_to_read < 20 {
3614                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3615                _next_ordinal_to_read += 1;
3616                next_offset += envelope_size;
3617            }
3618
3619            let next_out_of_line = decoder.next_out_of_line();
3620            let handles_before = decoder.remaining_handles();
3621            if let Some((inlined, num_bytes, num_handles)) =
3622                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3623            {
3624                let member_inline_size =
3625                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3626                if inlined != (member_inline_size <= 4) {
3627                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3628                }
3629                let inner_offset;
3630                let mut inner_depth = depth.clone();
3631                if inlined {
3632                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3633                    inner_offset = next_offset;
3634                } else {
3635                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3636                    inner_depth.increment()?;
3637                }
3638                let val_ref =
3639                    self.use_value_profile.get_or_insert_with(|| fidl::new_empty!(bool, D));
3640                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
3641                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3642                {
3643                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3644                }
3645                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3646                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3647                }
3648            }
3649
3650            next_offset += envelope_size;
3651            _next_ordinal_to_read += 1;
3652            if next_offset >= end_offset {
3653                return Ok(());
3654            }
3655
3656            // Decode unknown envelopes for gaps in ordinals.
3657            while _next_ordinal_to_read < 21 {
3658                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3659                _next_ordinal_to_read += 1;
3660                next_offset += envelope_size;
3661            }
3662
3663            let next_out_of_line = decoder.next_out_of_line();
3664            let handles_before = decoder.remaining_handles();
3665            if let Some((inlined, num_bytes, num_handles)) =
3666                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3667            {
3668                let member_inline_size =
3669                    <SanitizerOptions as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3670                if inlined != (member_inline_size <= 4) {
3671                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3672                }
3673                let inner_offset;
3674                let mut inner_depth = depth.clone();
3675                if inlined {
3676                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3677                    inner_offset = next_offset;
3678                } else {
3679                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3680                    inner_depth.increment()?;
3681                }
3682                let val_ref = self
3683                    .sanitizer_options
3684                    .get_or_insert_with(|| fidl::new_empty!(SanitizerOptions, D));
3685                fidl::decode!(SanitizerOptions, D, val_ref, decoder, inner_offset, inner_depth)?;
3686                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3687                {
3688                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3689                }
3690                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3691                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3692                }
3693            }
3694
3695            next_offset += envelope_size;
3696            _next_ordinal_to_read += 1;
3697            if next_offset >= end_offset {
3698                return Ok(());
3699            }
3700
3701            // Decode unknown envelopes for gaps in ordinals.
3702            while _next_ordinal_to_read < 22 {
3703                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3704                _next_ordinal_to_read += 1;
3705                next_offset += envelope_size;
3706            }
3707
3708            let next_out_of_line = decoder.next_out_of_line();
3709            let handles_before = decoder.remaining_handles();
3710            if let Some((inlined, num_bytes, num_handles)) =
3711                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3712            {
3713                let member_inline_size =
3714                    <OutputFlags as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3715                if inlined != (member_inline_size <= 4) {
3716                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3717                }
3718                let inner_offset;
3719                let mut inner_depth = depth.clone();
3720                if inlined {
3721                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3722                    inner_offset = next_offset;
3723                } else {
3724                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3725                    inner_depth.increment()?;
3726                }
3727                let val_ref =
3728                    self.output_flags.get_or_insert_with(|| fidl::new_empty!(OutputFlags, D));
3729                fidl::decode!(OutputFlags, D, val_ref, decoder, inner_offset, inner_depth)?;
3730                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3731                {
3732                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3733                }
3734                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3735                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3736                }
3737            }
3738
3739            next_offset += envelope_size;
3740
3741            // Decode the remaining unknown envelopes.
3742            while next_offset < end_offset {
3743                _next_ordinal_to_read += 1;
3744                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3745                next_offset += envelope_size;
3746            }
3747
3748            Ok(())
3749        }
3750    }
3751
3752    impl Status {
3753        #[inline(always)]
3754        fn max_ordinal_present(&self) -> u64 {
3755            if let Some(_) = self.process_stats {
3756                return 8;
3757            }
3758            if let Some(_) = self.corpus_total_size {
3759                return 7;
3760            }
3761            if let Some(_) = self.corpus_num_inputs {
3762                return 6;
3763            }
3764            if let Some(_) = self.covered_features {
3765                return 5;
3766            }
3767            if let Some(_) = self.covered_pcs {
3768                return 4;
3769            }
3770            if let Some(_) = self.elapsed {
3771                return 3;
3772            }
3773            if let Some(_) = self.runs {
3774                return 2;
3775            }
3776            if let Some(_) = self.running {
3777                return 1;
3778            }
3779            0
3780        }
3781    }
3782
3783    impl fidl::encoding::ValueTypeMarker for Status {
3784        type Borrowed<'a> = &'a Self;
3785        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3786            value
3787        }
3788    }
3789
3790    unsafe impl fidl::encoding::TypeMarker for Status {
3791        type Owned = Self;
3792
3793        #[inline(always)]
3794        fn inline_align(_context: fidl::encoding::Context) -> usize {
3795            8
3796        }
3797
3798        #[inline(always)]
3799        fn inline_size(_context: fidl::encoding::Context) -> usize {
3800            16
3801        }
3802    }
3803
3804    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Status, D> for &Status {
3805        unsafe fn encode(
3806            self,
3807            encoder: &mut fidl::encoding::Encoder<'_, D>,
3808            offset: usize,
3809            mut depth: fidl::encoding::Depth,
3810        ) -> fidl::Result<()> {
3811            encoder.debug_check_bounds::<Status>(offset);
3812            // Vector header
3813            let max_ordinal: u64 = self.max_ordinal_present();
3814            encoder.write_num(max_ordinal, offset);
3815            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
3816            // Calling encoder.out_of_line_offset(0) is not allowed.
3817            if max_ordinal == 0 {
3818                return Ok(());
3819            }
3820            depth.increment()?;
3821            let envelope_size = 8;
3822            let bytes_len = max_ordinal as usize * envelope_size;
3823            #[allow(unused_variables)]
3824            let offset = encoder.out_of_line_offset(bytes_len);
3825            let mut _prev_end_offset: usize = 0;
3826            if 1 > max_ordinal {
3827                return Ok(());
3828            }
3829
3830            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3831            // are envelope_size bytes.
3832            let cur_offset: usize = (1 - 1) * envelope_size;
3833
3834            // Zero reserved fields.
3835            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3836
3837            // Safety:
3838            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3839            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3840            //   envelope_size bytes, there is always sufficient room.
3841            fidl::encoding::encode_in_envelope_optional::<bool, D>(
3842                self.running.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
3843                encoder,
3844                offset + cur_offset,
3845                depth,
3846            )?;
3847
3848            _prev_end_offset = cur_offset + envelope_size;
3849            if 2 > max_ordinal {
3850                return Ok(());
3851            }
3852
3853            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3854            // are envelope_size bytes.
3855            let cur_offset: usize = (2 - 1) * envelope_size;
3856
3857            // Zero reserved fields.
3858            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3859
3860            // Safety:
3861            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3862            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3863            //   envelope_size bytes, there is always sufficient room.
3864            fidl::encoding::encode_in_envelope_optional::<u32, D>(
3865                self.runs.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
3866                encoder,
3867                offset + cur_offset,
3868                depth,
3869            )?;
3870
3871            _prev_end_offset = cur_offset + envelope_size;
3872            if 3 > max_ordinal {
3873                return Ok(());
3874            }
3875
3876            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3877            // are envelope_size bytes.
3878            let cur_offset: usize = (3 - 1) * envelope_size;
3879
3880            // Zero reserved fields.
3881            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3882
3883            // Safety:
3884            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3885            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3886            //   envelope_size bytes, there is always sufficient room.
3887            fidl::encoding::encode_in_envelope_optional::<i64, D>(
3888                self.elapsed.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
3889                encoder,
3890                offset + cur_offset,
3891                depth,
3892            )?;
3893
3894            _prev_end_offset = cur_offset + envelope_size;
3895            if 4 > max_ordinal {
3896                return Ok(());
3897            }
3898
3899            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3900            // are envelope_size bytes.
3901            let cur_offset: usize = (4 - 1) * envelope_size;
3902
3903            // Zero reserved fields.
3904            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3905
3906            // Safety:
3907            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3908            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3909            //   envelope_size bytes, there is always sufficient room.
3910            fidl::encoding::encode_in_envelope_optional::<u64, D>(
3911                self.covered_pcs.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
3912                encoder,
3913                offset + cur_offset,
3914                depth,
3915            )?;
3916
3917            _prev_end_offset = cur_offset + envelope_size;
3918            if 5 > max_ordinal {
3919                return Ok(());
3920            }
3921
3922            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3923            // are envelope_size bytes.
3924            let cur_offset: usize = (5 - 1) * envelope_size;
3925
3926            // Zero reserved fields.
3927            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3928
3929            // Safety:
3930            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3931            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3932            //   envelope_size bytes, there is always sufficient room.
3933            fidl::encoding::encode_in_envelope_optional::<u64, D>(
3934                self.covered_features
3935                    .as_ref()
3936                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
3937                encoder,
3938                offset + cur_offset,
3939                depth,
3940            )?;
3941
3942            _prev_end_offset = cur_offset + envelope_size;
3943            if 6 > max_ordinal {
3944                return Ok(());
3945            }
3946
3947            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3948            // are envelope_size bytes.
3949            let cur_offset: usize = (6 - 1) * envelope_size;
3950
3951            // Zero reserved fields.
3952            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3953
3954            // Safety:
3955            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3956            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3957            //   envelope_size bytes, there is always sufficient room.
3958            fidl::encoding::encode_in_envelope_optional::<u64, D>(
3959                self.corpus_num_inputs
3960                    .as_ref()
3961                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
3962                encoder,
3963                offset + cur_offset,
3964                depth,
3965            )?;
3966
3967            _prev_end_offset = cur_offset + envelope_size;
3968            if 7 > max_ordinal {
3969                return Ok(());
3970            }
3971
3972            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3973            // are envelope_size bytes.
3974            let cur_offset: usize = (7 - 1) * envelope_size;
3975
3976            // Zero reserved fields.
3977            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3978
3979            // Safety:
3980            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3981            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3982            //   envelope_size bytes, there is always sufficient room.
3983            fidl::encoding::encode_in_envelope_optional::<u64, D>(
3984                self.corpus_total_size
3985                    .as_ref()
3986                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
3987                encoder,
3988                offset + cur_offset,
3989                depth,
3990            )?;
3991
3992            _prev_end_offset = cur_offset + envelope_size;
3993            if 8 > max_ordinal {
3994                return Ok(());
3995            }
3996
3997            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3998            // are envelope_size bytes.
3999            let cur_offset: usize = (8 - 1) * envelope_size;
4000
4001            // Zero reserved fields.
4002            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4003
4004            // Safety:
4005            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4006            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4007            //   envelope_size bytes, there is always sufficient room.
4008            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<ProcessStats, 256>, D>(
4009            self.process_stats.as_ref().map(<fidl::encoding::Vector<ProcessStats, 256> as fidl::encoding::ValueTypeMarker>::borrow),
4010            encoder, offset + cur_offset, depth
4011        )?;
4012
4013            _prev_end_offset = cur_offset + envelope_size;
4014
4015            Ok(())
4016        }
4017    }
4018
4019    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Status {
4020        #[inline(always)]
4021        fn new_empty() -> Self {
4022            Self::default()
4023        }
4024
4025        unsafe fn decode(
4026            &mut self,
4027            decoder: &mut fidl::encoding::Decoder<'_, D>,
4028            offset: usize,
4029            mut depth: fidl::encoding::Depth,
4030        ) -> fidl::Result<()> {
4031            decoder.debug_check_bounds::<Self>(offset);
4032            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
4033                None => return Err(fidl::Error::NotNullable),
4034                Some(len) => len,
4035            };
4036            // Calling decoder.out_of_line_offset(0) is not allowed.
4037            if len == 0 {
4038                return Ok(());
4039            };
4040            depth.increment()?;
4041            let envelope_size = 8;
4042            let bytes_len = len * envelope_size;
4043            let offset = decoder.out_of_line_offset(bytes_len)?;
4044            // Decode the envelope for each type.
4045            let mut _next_ordinal_to_read = 0;
4046            let mut next_offset = offset;
4047            let end_offset = offset + bytes_len;
4048            _next_ordinal_to_read += 1;
4049            if next_offset >= end_offset {
4050                return Ok(());
4051            }
4052
4053            // Decode unknown envelopes for gaps in ordinals.
4054            while _next_ordinal_to_read < 1 {
4055                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4056                _next_ordinal_to_read += 1;
4057                next_offset += envelope_size;
4058            }
4059
4060            let next_out_of_line = decoder.next_out_of_line();
4061            let handles_before = decoder.remaining_handles();
4062            if let Some((inlined, num_bytes, num_handles)) =
4063                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4064            {
4065                let member_inline_size =
4066                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4067                if inlined != (member_inline_size <= 4) {
4068                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4069                }
4070                let inner_offset;
4071                let mut inner_depth = depth.clone();
4072                if inlined {
4073                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4074                    inner_offset = next_offset;
4075                } else {
4076                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4077                    inner_depth.increment()?;
4078                }
4079                let val_ref = self.running.get_or_insert_with(|| fidl::new_empty!(bool, D));
4080                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
4081                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4082                {
4083                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4084                }
4085                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4086                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4087                }
4088            }
4089
4090            next_offset += envelope_size;
4091            _next_ordinal_to_read += 1;
4092            if next_offset >= end_offset {
4093                return Ok(());
4094            }
4095
4096            // Decode unknown envelopes for gaps in ordinals.
4097            while _next_ordinal_to_read < 2 {
4098                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4099                _next_ordinal_to_read += 1;
4100                next_offset += envelope_size;
4101            }
4102
4103            let next_out_of_line = decoder.next_out_of_line();
4104            let handles_before = decoder.remaining_handles();
4105            if let Some((inlined, num_bytes, num_handles)) =
4106                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4107            {
4108                let member_inline_size =
4109                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4110                if inlined != (member_inline_size <= 4) {
4111                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4112                }
4113                let inner_offset;
4114                let mut inner_depth = depth.clone();
4115                if inlined {
4116                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4117                    inner_offset = next_offset;
4118                } else {
4119                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4120                    inner_depth.increment()?;
4121                }
4122                let val_ref = self.runs.get_or_insert_with(|| fidl::new_empty!(u32, D));
4123                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
4124                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4125                {
4126                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4127                }
4128                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4129                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4130                }
4131            }
4132
4133            next_offset += envelope_size;
4134            _next_ordinal_to_read += 1;
4135            if next_offset >= end_offset {
4136                return Ok(());
4137            }
4138
4139            // Decode unknown envelopes for gaps in ordinals.
4140            while _next_ordinal_to_read < 3 {
4141                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4142                _next_ordinal_to_read += 1;
4143                next_offset += envelope_size;
4144            }
4145
4146            let next_out_of_line = decoder.next_out_of_line();
4147            let handles_before = decoder.remaining_handles();
4148            if let Some((inlined, num_bytes, num_handles)) =
4149                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4150            {
4151                let member_inline_size =
4152                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4153                if inlined != (member_inline_size <= 4) {
4154                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4155                }
4156                let inner_offset;
4157                let mut inner_depth = depth.clone();
4158                if inlined {
4159                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4160                    inner_offset = next_offset;
4161                } else {
4162                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4163                    inner_depth.increment()?;
4164                }
4165                let val_ref = self.elapsed.get_or_insert_with(|| fidl::new_empty!(i64, D));
4166                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
4167                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4168                {
4169                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4170                }
4171                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4172                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4173                }
4174            }
4175
4176            next_offset += envelope_size;
4177            _next_ordinal_to_read += 1;
4178            if next_offset >= end_offset {
4179                return Ok(());
4180            }
4181
4182            // Decode unknown envelopes for gaps in ordinals.
4183            while _next_ordinal_to_read < 4 {
4184                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4185                _next_ordinal_to_read += 1;
4186                next_offset += envelope_size;
4187            }
4188
4189            let next_out_of_line = decoder.next_out_of_line();
4190            let handles_before = decoder.remaining_handles();
4191            if let Some((inlined, num_bytes, num_handles)) =
4192                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4193            {
4194                let member_inline_size =
4195                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4196                if inlined != (member_inline_size <= 4) {
4197                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4198                }
4199                let inner_offset;
4200                let mut inner_depth = depth.clone();
4201                if inlined {
4202                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4203                    inner_offset = next_offset;
4204                } else {
4205                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4206                    inner_depth.increment()?;
4207                }
4208                let val_ref = self.covered_pcs.get_or_insert_with(|| fidl::new_empty!(u64, D));
4209                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
4210                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4211                {
4212                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4213                }
4214                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4215                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4216                }
4217            }
4218
4219            next_offset += envelope_size;
4220            _next_ordinal_to_read += 1;
4221            if next_offset >= end_offset {
4222                return Ok(());
4223            }
4224
4225            // Decode unknown envelopes for gaps in ordinals.
4226            while _next_ordinal_to_read < 5 {
4227                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4228                _next_ordinal_to_read += 1;
4229                next_offset += envelope_size;
4230            }
4231
4232            let next_out_of_line = decoder.next_out_of_line();
4233            let handles_before = decoder.remaining_handles();
4234            if let Some((inlined, num_bytes, num_handles)) =
4235                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4236            {
4237                let member_inline_size =
4238                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4239                if inlined != (member_inline_size <= 4) {
4240                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4241                }
4242                let inner_offset;
4243                let mut inner_depth = depth.clone();
4244                if inlined {
4245                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4246                    inner_offset = next_offset;
4247                } else {
4248                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4249                    inner_depth.increment()?;
4250                }
4251                let val_ref = self.covered_features.get_or_insert_with(|| fidl::new_empty!(u64, D));
4252                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
4253                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4254                {
4255                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4256                }
4257                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4258                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4259                }
4260            }
4261
4262            next_offset += envelope_size;
4263            _next_ordinal_to_read += 1;
4264            if next_offset >= end_offset {
4265                return Ok(());
4266            }
4267
4268            // Decode unknown envelopes for gaps in ordinals.
4269            while _next_ordinal_to_read < 6 {
4270                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4271                _next_ordinal_to_read += 1;
4272                next_offset += envelope_size;
4273            }
4274
4275            let next_out_of_line = decoder.next_out_of_line();
4276            let handles_before = decoder.remaining_handles();
4277            if let Some((inlined, num_bytes, num_handles)) =
4278                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4279            {
4280                let member_inline_size =
4281                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4282                if inlined != (member_inline_size <= 4) {
4283                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4284                }
4285                let inner_offset;
4286                let mut inner_depth = depth.clone();
4287                if inlined {
4288                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4289                    inner_offset = next_offset;
4290                } else {
4291                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4292                    inner_depth.increment()?;
4293                }
4294                let val_ref =
4295                    self.corpus_num_inputs.get_or_insert_with(|| fidl::new_empty!(u64, D));
4296                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
4297                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4298                {
4299                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4300                }
4301                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4302                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4303                }
4304            }
4305
4306            next_offset += envelope_size;
4307            _next_ordinal_to_read += 1;
4308            if next_offset >= end_offset {
4309                return Ok(());
4310            }
4311
4312            // Decode unknown envelopes for gaps in ordinals.
4313            while _next_ordinal_to_read < 7 {
4314                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4315                _next_ordinal_to_read += 1;
4316                next_offset += envelope_size;
4317            }
4318
4319            let next_out_of_line = decoder.next_out_of_line();
4320            let handles_before = decoder.remaining_handles();
4321            if let Some((inlined, num_bytes, num_handles)) =
4322                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4323            {
4324                let member_inline_size =
4325                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4326                if inlined != (member_inline_size <= 4) {
4327                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4328                }
4329                let inner_offset;
4330                let mut inner_depth = depth.clone();
4331                if inlined {
4332                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4333                    inner_offset = next_offset;
4334                } else {
4335                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4336                    inner_depth.increment()?;
4337                }
4338                let val_ref =
4339                    self.corpus_total_size.get_or_insert_with(|| fidl::new_empty!(u64, D));
4340                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
4341                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4342                {
4343                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4344                }
4345                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4346                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4347                }
4348            }
4349
4350            next_offset += envelope_size;
4351            _next_ordinal_to_read += 1;
4352            if next_offset >= end_offset {
4353                return Ok(());
4354            }
4355
4356            // Decode unknown envelopes for gaps in ordinals.
4357            while _next_ordinal_to_read < 8 {
4358                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4359                _next_ordinal_to_read += 1;
4360                next_offset += envelope_size;
4361            }
4362
4363            let next_out_of_line = decoder.next_out_of_line();
4364            let handles_before = decoder.remaining_handles();
4365            if let Some((inlined, num_bytes, num_handles)) =
4366                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4367            {
4368                let member_inline_size = <fidl::encoding::Vector<ProcessStats, 256> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4369                if inlined != (member_inline_size <= 4) {
4370                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4371                }
4372                let inner_offset;
4373                let mut inner_depth = depth.clone();
4374                if inlined {
4375                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4376                    inner_offset = next_offset;
4377                } else {
4378                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4379                    inner_depth.increment()?;
4380                }
4381                let val_ref = self.process_stats.get_or_insert_with(
4382                    || fidl::new_empty!(fidl::encoding::Vector<ProcessStats, 256>, D),
4383                );
4384                fidl::decode!(fidl::encoding::Vector<ProcessStats, 256>, D, val_ref, decoder, inner_offset, inner_depth)?;
4385                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4386                {
4387                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4388                }
4389                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4390                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4391                }
4392            }
4393
4394            next_offset += envelope_size;
4395
4396            // Decode the remaining unknown envelopes.
4397            while next_offset < end_offset {
4398                _next_ordinal_to_read += 1;
4399                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4400                next_offset += envelope_size;
4401            }
4402
4403            Ok(())
4404        }
4405    }
4406}