diff --git a/src/syscall/zx/fidl/bindings.go b/src/syscall/zx/fidl/bindings.go
index 4ddc392..74cbfed 100644
--- a/src/syscall/zx/fidl/bindings.go
+++ b/src/syscall/zx/fidl/bindings.go
@@ -161,23 +161,27 @@
 		}
 	}()
 
-	var header MessageHeader
-	hnb, _, err := Unmarshal(msg, nil, &header)
+	var reqHeader MessageHeader
+	hnb, _, err := Unmarshal(msg, nil, &reqHeader)
 	if err != nil {
 		return false, err
 	}
 
-	if !header.IsSupportedVersion() {
+	if !reqHeader.IsSupportedVersion() {
 		return false, ErrUnknownMagic
 	}
 
-	p, shouldRespond, err := b.Stub.DispatchImpl(header.Ordinal, msg[hnb:], handles)
+	ctx := reqHeader.NewCtx()
+	p, shouldRespond, err := b.Stub.DispatchImplWithCtx(reqHeader.Ordinal, ctx, msg[hnb:], handles)
 	if err != nil {
 		return false, err
 	}
 
 	if shouldRespond {
-		cnb, cnh, err := MarshalHeaderThenMessage(&header, p, respb, resph)
+		respHeader := ctx.NewHeader()
+		respHeader.Ordinal = reqHeader.Ordinal
+		respHeader.Txid = reqHeader.Txid
+		cnb, cnh, err := MarshalHeaderThenMessage(&respHeader, p, respb, resph)
 		if err != nil {
 			return false, err
 		}
diff --git a/src/syscall/zx/fidl/bindingstest/impl.go b/src/syscall/zx/fidl/bindingstest/impl.go
index 9d30822..2ab7053 100644
--- a/src/syscall/zx/fidl/bindingstest/impl.go
+++ b/src/syscall/zx/fidl/bindingstest/impl.go
@@ -1182,7 +1182,7 @@
 
 type test1EchoRequest struct {
 	_  struct{} `fidl:"s,16,0" fidl_size_v1:"16" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"0"`
-	In *string  `fidl:"0," fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
+	In *string  `fidl:"0," fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
 }
 
 var _mtest1EchoRequest = _bindings.CreateLazyMarshaler(test1EchoRequest{})
@@ -1193,7 +1193,7 @@
 
 type test1EchoResponse struct {
 	_   struct{} `fidl:"s,16,0" fidl_size_v1:"16" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"0"`
-	Out *string  `fidl:"0," fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
+	Out *string  `fidl:"0," fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
 }
 
 var _mtest1EchoResponse = _bindings.CreateLazyMarshaler(test1EchoResponse{})
@@ -1204,7 +1204,7 @@
 
 type test1SurpriseResponse struct {
 	_   struct{} `fidl:"s,16,0" fidl_size_v1:"16" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"0"`
-	Foo string   `fidl:"0," fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
+	Foo string   `fidl:"0," fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
 }
 
 var _mtest1SurpriseResponse = _bindings.CreateLazyMarshaler(test1SurpriseResponse{})
@@ -1263,12 +1263,17 @@
 }
 
 func (s_ *Test1Stub) DispatchImpl(ordinal_ uint64, data_ []byte, handles_ []_zx.Handle) (_bindings.Message, bool, error) {
+	var ctx_ _bindings.MarshalerContext
+	return s_.DispatchImplWithCtx(ordinal_, ctx_, data_, handles_)
+}
+
+func (s_ *Test1Stub) DispatchImplWithCtx(ordinal_ uint64, ctx_ _bindings.MarshalerContext, data_ []byte, handles_ []_zx.Handle) (_bindings.Message, bool, error) {
 	switch ordinal_ {
 	case Test1EchoOrdinal:
 		fallthrough
 	case Test1EchoGenOrdinal:
 		in_ := test1EchoRequest{}
-		if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
+		if _, _, err_ := _bindings.UnmarshalWithContext(ctx_, data_, handles_, &in_); err_ != nil {
 			return nil, false, err_
 		}
 		out, err_ := s_.Impl.Echo(in_.In)
@@ -1330,6 +1335,11 @@
 }
 
 func (s_ *EthernetDeviceStub) DispatchImpl(ordinal_ uint64, data_ []byte, handles_ []_zx.Handle) (_bindings.Message, bool, error) {
+	var ctx_ _bindings.MarshalerContext
+	return s_.DispatchImplWithCtx(ordinal_, ctx_, data_, handles_)
+}
+
+func (s_ *EthernetDeviceStub) DispatchImplWithCtx(ordinal_ uint64, ctx_ _bindings.MarshalerContext, data_ []byte, handles_ []_zx.Handle) (_bindings.Message, bool, error) {
 	switch ordinal_ {
 	}
 	return nil, false, _bindings.ErrUnknownOrdinal
diff --git a/src/syscall/zx/fidl/conformance/impl.go b/src/syscall/zx/fidl/conformance/impl.go
index 527e6bd..f272586 100644
--- a/src/syscall/zx/fidl/conformance/impl.go
+++ b/src/syscall/zx/fidl/conformance/impl.go
@@ -2,13 +2,12 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 //
-// Code generated by tools/fidl/gidl-conformance-suite/regen.sh; DO NOT EDIT.
+// GENERATED FILE: Do not edit!
+//
+// To rebuild this file, invoke third_party/go/regen-fidl.
 
 // +build fuchsia
 
-//
-// Code generated by fidlgen; DO NOT EDIT.
-
 package conformance
 
 import (
@@ -16,276 +15,6 @@
 	_bindings "syscall/zx/fidl"
 )
 
-type UnionWithBoundStringStruct struct {
-	_ struct{}             `fidl:"s,24,8" fidl_size_v1:"24" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"8"`
-	V UnionWithBoundString `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
-}
-
-var _mUnionWithBoundStringStruct = _bindings.CreateLazyMarshaler(UnionWithBoundStringStruct{})
-
-func (msg *UnionWithBoundStringStruct) Marshaler() _bindings.Marshaler {
-	return _mUnionWithBoundStringStruct
-}
-
-type SingleVariantUnionStruct struct {
-	_ struct{}           `fidl:"s,8,4" fidl_size_v1:"24" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"8"`
-	U SingleVariantUnion `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
-}
-
-var _mSingleVariantUnionStruct = _bindings.CreateLazyMarshaler(SingleVariantUnionStruct{})
-
-func (msg *SingleVariantUnionStruct) Marshaler() _bindings.Marshaler {
-	return _mSingleVariantUnionStruct
-}
-
-type Length2StringWrapper struct {
-	_             struct{} `fidl:"s,16,8" fidl_size_v1:"16" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"8"`
-	Length2String string   `fidl:"0,2" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
-}
-
-var _mLength2StringWrapper = _bindings.CreateLazyMarshaler(Length2StringWrapper{})
-
-func (msg *Length2StringWrapper) Marshaler() _bindings.Marshaler {
-	return _mLength2StringWrapper
-}
-
-type StringWrapper struct {
-	_   struct{} `fidl:"s,16,8" fidl_size_v1:"16" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"8"`
-	Str string   `fidl:"0," fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
-}
-
-var _mStringWrapper = _bindings.CreateLazyMarshaler(StringWrapper{})
-
-func (msg *StringWrapper) Marshaler() _bindings.Marshaler {
-	return _mStringWrapper
-}
-
-type TestXUnionInTable struct {
-	_     struct{}      `fidl:"s,16,8" fidl_size_v1:"16" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"8"`
-	Value XUnionInTable `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
-}
-
-var _mTestXUnionInTable = _bindings.CreateLazyMarshaler(TestXUnionInTable{})
-
-func (msg *TestXUnionInTable) Marshaler() _bindings.Marshaler {
-	return _mTestXUnionInTable
-}
-
-type InterfaceConfig struct {
-	_               struct{}        `fidl:"s,48,8" fidl_size_v1:"40" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"40" fidl_alignment_v1_no_ee:"8"`
-	Name            string          `fidl:"0," fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
-	IpAddressConfig IpAddressConfig `fidl:"16" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
-}
-
-var _mInterfaceConfig = _bindings.CreateLazyMarshaler(InterfaceConfig{})
-
-func (msg *InterfaceConfig) Marshaler() _bindings.Marshaler {
-	return _mInterfaceConfig
-}
-
-type TestAddEthernetDeviceRequest struct {
-	_                   struct{}        `fidl:"s,72,8" fidl_size_v1:"64" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"64" fidl_alignment_v1_no_ee:"8"`
-	TopologicalPath     string          `fidl:"0," fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
-	Config              InterfaceConfig `fidl:"16" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
-	ThisShouldBeAHandle uint32          `fidl:"64" fidl_offset_v1:"56" fidl_offset_v1_no_ee:"56"`
-}
-
-var _mTestAddEthernetDeviceRequest = _bindings.CreateLazyMarshaler(TestAddEthernetDeviceRequest{})
-
-func (msg *TestAddEthernetDeviceRequest) Marshaler() _bindings.Marshaler {
-	return _mTestAddEthernetDeviceRequest
-}
-
-type NodeAttributes struct {
-	_                struct{} `fidl:"s,56,8" fidl_size_v1:"56" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"56" fidl_alignment_v1_no_ee:"8"`
-	Mode             uint32   `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
-	Id               uint64   `fidl:"8" fidl_offset_v1:"8" fidl_offset_v1_no_ee:"8"`
-	ContentSize      uint64   `fidl:"16" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
-	StorageSize      uint64   `fidl:"24" fidl_offset_v1:"24" fidl_offset_v1_no_ee:"24"`
-	LinkCount        uint64   `fidl:"32" fidl_offset_v1:"32" fidl_offset_v1_no_ee:"32"`
-	CreationTime     uint64   `fidl:"40" fidl_offset_v1:"40" fidl_offset_v1_no_ee:"40"`
-	ModificationTime uint64   `fidl:"48" fidl_offset_v1:"48" fidl_offset_v1_no_ee:"48"`
-}
-
-var _mNodeAttributes = _bindings.CreateLazyMarshaler(NodeAttributes{})
-
-func (msg *NodeAttributes) Marshaler() _bindings.Marshaler {
-	return _mNodeAttributes
-}
-
-type FileGetAttrResponse struct {
-	_          struct{}       `fidl:"s,64,8" fidl_size_v1:"64" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"64" fidl_alignment_v1_no_ee:"8"`
-	S          int32          `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
-	Attributes NodeAttributes `fidl:"8" fidl_offset_v1:"8" fidl_offset_v1_no_ee:"8"`
-}
-
-var _mFileGetAttrResponse = _bindings.CreateLazyMarshaler(FileGetAttrResponse{})
-
-func (msg *FileGetAttrResponse) Marshaler() _bindings.Marshaler {
-	return _mFileGetAttrResponse
-}
-
-type StructOfSimpleTable struct {
-	_     struct{}    `fidl:"s,16,8" fidl_size_v1:"16" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"8"`
-	Table SimpleTable `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
-}
-
-var _mStructOfSimpleTable = _bindings.CreateLazyMarshaler(StructOfSimpleTable{})
-
-func (msg *StructOfSimpleTable) Marshaler() _bindings.Marshaler {
-	return _mStructOfSimpleTable
-}
-
-type SimpleTableThenUint64 struct {
-	_      struct{}    `fidl:"s,24,8" fidl_size_v1:"24" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"8"`
-	Table  SimpleTable `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
-	Number uint64      `fidl:"16" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
-}
-
-var _mSimpleTableThenUint64 = _bindings.CreateLazyMarshaler(SimpleTableThenUint64{})
-
-func (msg *SimpleTableThenUint64) Marshaler() _bindings.Marshaler {
-	return _mSimpleTableThenUint64
-}
-
-type StructOfTableWithStringAndVector struct {
-	_     struct{}                 `fidl:"s,16,8" fidl_size_v1:"16" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"8"`
-	Table TableWithStringAndVector `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
-}
-
-var _mStructOfTableWithStringAndVector = _bindings.CreateLazyMarshaler(StructOfTableWithStringAndVector{})
-
-func (msg *StructOfTableWithStringAndVector) Marshaler() _bindings.Marshaler {
-	return _mStructOfTableWithStringAndVector
-}
-
-type Int64Struct struct {
-	_ struct{} `fidl:"s,8,8" fidl_size_v1:"8" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"8"`
-	X int64    `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
-}
-
-var _mInt64Struct = _bindings.CreateLazyMarshaler(Int64Struct{})
-
-func (msg *Int64Struct) Marshaler() _bindings.Marshaler {
-	return _mInt64Struct
-}
-
-type TestInlineXUnionInStruct struct {
-	_      struct{}     `fidl:"s,56,8" fidl_size_v1:"56" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"56" fidl_alignment_v1_no_ee:"8"`
-	Before string       `fidl:"0," fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
-	Xu     SampleXUnion `fidl:"16" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
-	After  string       `fidl:"40," fidl_offset_v1:"40" fidl_offset_v1_no_ee:"40"`
-}
-
-var _mTestInlineXUnionInStruct = _bindings.CreateLazyMarshaler(TestInlineXUnionInStruct{})
-
-func (msg *TestInlineXUnionInStruct) Marshaler() _bindings.Marshaler {
-	return _mTestInlineXUnionInStruct
-}
-
-type TestOptionalXUnionInStruct struct {
-	_      struct{}      `fidl:"s,56,8" fidl_size_v1:"56" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"56" fidl_alignment_v1_no_ee:"8"`
-	Before string        `fidl:"0," fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
-	Xu     *SampleXUnion `fidl:"16" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
-	After  string        `fidl:"40," fidl_offset_v1:"40" fidl_offset_v1_no_ee:"40"`
-}
-
-var _mTestOptionalXUnionInStruct = _bindings.CreateLazyMarshaler(TestOptionalXUnionInStruct{})
-
-func (msg *TestOptionalXUnionInStruct) Marshaler() _bindings.Marshaler {
-	return _mTestOptionalXUnionInStruct
-}
-
-type TestStrictXUnionInStruct struct {
-	_  struct{}           `fidl:"s,24,8" fidl_size_v1:"24" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"8"`
-	Xu SampleStrictXUnion `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
-}
-
-var _mTestStrictXUnionInStruct = _bindings.CreateLazyMarshaler(TestStrictXUnionInStruct{})
-
-func (msg *TestStrictXUnionInStruct) Marshaler() _bindings.Marshaler {
-	return _mTestStrictXUnionInStruct
-}
-
-type TestFlexibleXUnionInStruct struct {
-	_  struct{}     `fidl:"s,24,8" fidl_size_v1:"24" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"8"`
-	Xu SampleXUnion `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
-}
-
-var _mTestFlexibleXUnionInStruct = _bindings.CreateLazyMarshaler(TestFlexibleXUnionInStruct{})
-
-func (msg *TestFlexibleXUnionInStruct) Marshaler() _bindings.Marshaler {
-	return _mTestFlexibleXUnionInStruct
-}
-
-type StructWithOptionals struct {
-	_   struct{}               `fidl:"s,104,8" fidl_size_v1:"128" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"128" fidl_alignment_v1_no_ee:"8"`
-	S   EmptyStruct            `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
-	S2  *EmptyStruct           `fidl:"8" fidl_offset_v1:"8" fidl_offset_v1_no_ee:"8"`
-	T   TableWithEmptyStruct   `fidl:"16" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
-	Xu  XUnionWithEmptyStruct  `fidl:"32" fidl_offset_v1:"32" fidl_offset_v1_no_ee:"32"`
-	Xu2 *XUnionWithEmptyStruct `fidl:"56" fidl_offset_v1:"56" fidl_offset_v1_no_ee:"56"`
-	U   UnionWithEmptyStruct   `fidl:"80" fidl_offset_v1:"80" fidl_offset_v1_no_ee:"80"`
-	U2  *UnionWithEmptyStruct  `fidl:"96" fidl_offset_v1:"104" fidl_offset_v1_no_ee:"104"`
-}
-
-var _mStructWithOptionals = _bindings.CreateLazyMarshaler(StructWithOptionals{})
-
-func (msg *StructWithOptionals) Marshaler() _bindings.Marshaler {
-	return _mStructWithOptionals
-}
-
-type EmptyStruct struct {
-	_ struct{} `fidl:"s,1,1" fidl_size_v1:"1" fidl_alignment_v1:"1" fidl_size_v1_no_ee:"1" fidl_alignment_v1_no_ee:"1"`
-}
-
-var _mEmptyStruct = _bindings.CreateLazyMarshaler(EmptyStruct{})
-
-func (msg *EmptyStruct) Marshaler() _bindings.Marshaler {
-	return _mEmptyStruct
-}
-
-type EmptyStructSandwich struct {
-	_      struct{}    `fidl:"s,40,8" fidl_size_v1:"40" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"40" fidl_alignment_v1_no_ee:"8"`
-	Before string      `fidl:"0," fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
-	Es     EmptyStruct `fidl:"16" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
-	After  string      `fidl:"24," fidl_offset_v1:"24" fidl_offset_v1_no_ee:"24"`
-}
-
-var _mEmptyStructSandwich = _bindings.CreateLazyMarshaler(EmptyStructSandwich{})
-
-func (msg *EmptyStructSandwich) Marshaler() _bindings.Marshaler {
-	return _mEmptyStructSandwich
-}
-
-type Uint8Uint16Uint32Uint64 struct {
-	_  struct{} `fidl:"s,16,8" fidl_size_v1:"16" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"8"`
-	F1 uint8    `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
-	F2 uint16   `fidl:"2" fidl_offset_v1:"2" fidl_offset_v1_no_ee:"2"`
-	F3 uint32   `fidl:"4" fidl_offset_v1:"4" fidl_offset_v1_no_ee:"4"`
-	F4 uint64   `fidl:"8" fidl_offset_v1:"8" fidl_offset_v1_no_ee:"8"`
-}
-
-var _mUint8Uint16Uint32Uint64 = _bindings.CreateLazyMarshaler(Uint8Uint16Uint32Uint64{})
-
-func (msg *Uint8Uint16Uint32Uint64) Marshaler() _bindings.Marshaler {
-	return _mUint8Uint16Uint32Uint64
-}
-
-type Uint64Uint32Uint16Uint8 struct {
-	_  struct{} `fidl:"s,16,8" fidl_size_v1:"16" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"8"`
-	F1 uint64   `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
-	F2 uint32   `fidl:"8" fidl_offset_v1:"8" fidl_offset_v1_no_ee:"8"`
-	F3 uint16   `fidl:"12" fidl_offset_v1:"12" fidl_offset_v1_no_ee:"12"`
-	F4 uint8    `fidl:"14" fidl_offset_v1:"14" fidl_offset_v1_no_ee:"14"`
-}
-
-var _mUint64Uint32Uint16Uint8 = _bindings.CreateLazyMarshaler(Uint64Uint32Uint16Uint8{})
-
-func (msg *Uint64Uint32Uint16Uint8) Marshaler() _bindings.Marshaler {
-	return _mUint64Uint32Uint16Uint8
-}
-
 type ThreeByte struct {
 	_     struct{} `fidl:"s,3,1" fidl_size_v1:"3" fidl_alignment_v1:"1" fidl_size_v1_no_ee:"3" fidl_alignment_v1_no_ee:"1"`
 	Elem1 uint8    `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
@@ -425,6 +154,88 @@
 	return _mStructWithVectors
 }
 
+type TestXUnionInTable struct {
+	_     struct{}      `fidl:"s,16,8" fidl_size_v1:"16" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"8"`
+	Value XUnionInTable `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+}
+
+var _mTestXUnionInTable = _bindings.CreateLazyMarshaler(TestXUnionInTable{})
+
+func (msg *TestXUnionInTable) Marshaler() _bindings.Marshaler {
+	return _mTestXUnionInTable
+}
+
+type InterfaceConfig struct {
+	_               struct{}        `fidl:"s,48,8" fidl_size_v1:"40" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"40" fidl_alignment_v1_no_ee:"8"`
+	Name            string          `fidl:"0," fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	IpAddressConfig IpAddressConfig `fidl:"16" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
+}
+
+var _mInterfaceConfig = _bindings.CreateLazyMarshaler(InterfaceConfig{})
+
+func (msg *InterfaceConfig) Marshaler() _bindings.Marshaler {
+	return _mInterfaceConfig
+}
+
+type TestAddEthernetDeviceRequest struct {
+	_                   struct{}        `fidl:"s,72,8" fidl_size_v1:"64" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"64" fidl_alignment_v1_no_ee:"8"`
+	TopologicalPath     string          `fidl:"0," fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	Config              InterfaceConfig `fidl:"16" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
+	ThisShouldBeAHandle uint32          `fidl:"64" fidl_offset_v1:"56" fidl_offset_v1_no_ee:"56"`
+}
+
+var _mTestAddEthernetDeviceRequest = _bindings.CreateLazyMarshaler(TestAddEthernetDeviceRequest{})
+
+func (msg *TestAddEthernetDeviceRequest) Marshaler() _bindings.Marshaler {
+	return _mTestAddEthernetDeviceRequest
+}
+
+type NodeAttributes struct {
+	_                struct{} `fidl:"s,56,8" fidl_size_v1:"56" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"56" fidl_alignment_v1_no_ee:"8"`
+	Mode             uint32   `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	Id               uint64   `fidl:"8" fidl_offset_v1:"8" fidl_offset_v1_no_ee:"8"`
+	ContentSize      uint64   `fidl:"16" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
+	StorageSize      uint64   `fidl:"24" fidl_offset_v1:"24" fidl_offset_v1_no_ee:"24"`
+	LinkCount        uint64   `fidl:"32" fidl_offset_v1:"32" fidl_offset_v1_no_ee:"32"`
+	CreationTime     uint64   `fidl:"40" fidl_offset_v1:"40" fidl_offset_v1_no_ee:"40"`
+	ModificationTime uint64   `fidl:"48" fidl_offset_v1:"48" fidl_offset_v1_no_ee:"48"`
+}
+
+var _mNodeAttributes = _bindings.CreateLazyMarshaler(NodeAttributes{})
+
+func (msg *NodeAttributes) Marshaler() _bindings.Marshaler {
+	return _mNodeAttributes
+}
+
+type FileGetAttrResponse struct {
+	_          struct{}       `fidl:"s,64,8" fidl_size_v1:"64" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"64" fidl_alignment_v1_no_ee:"8"`
+	S          int32          `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	Attributes NodeAttributes `fidl:"8" fidl_offset_v1:"8" fidl_offset_v1_no_ee:"8"`
+}
+
+var _mFileGetAttrResponse = _bindings.CreateLazyMarshaler(FileGetAttrResponse{})
+
+func (msg *FileGetAttrResponse) Marshaler() _bindings.Marshaler {
+	return _mFileGetAttrResponse
+}
+
+type StructWithOptionals struct {
+	_   struct{}               `fidl:"s,104,8" fidl_size_v1:"128" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"128" fidl_alignment_v1_no_ee:"8"`
+	S   EmptyStruct            `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	S2  *EmptyStruct           `fidl:"8" fidl_offset_v1:"8" fidl_offset_v1_no_ee:"8"`
+	T   TableWithEmptyStruct   `fidl:"16" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
+	Xu  XUnionWithEmptyStruct  `fidl:"32" fidl_offset_v1:"32" fidl_offset_v1_no_ee:"32"`
+	Xu2 *XUnionWithEmptyStruct `fidl:"56" fidl_offset_v1:"56" fidl_offset_v1_no_ee:"56"`
+	U   UnionWithEmptyStruct   `fidl:"80" fidl_offset_v1:"80" fidl_offset_v1_no_ee:"80"`
+	U2  *UnionWithEmptyStruct  `fidl:"96" fidl_offset_v1:"104" fidl_offset_v1_no_ee:"104"`
+}
+
+var _mStructWithOptionals = _bindings.CreateLazyMarshaler(StructWithOptionals{})
+
+func (msg *StructWithOptionals) Marshaler() _bindings.Marshaler {
+	return _mStructWithOptionals
+}
+
 type MyBool struct {
 	_     struct{} `fidl:"s,1,1" fidl_size_v1:"1" fidl_alignment_v1:"1" fidl_size_v1_no_ee:"1" fidl_alignment_v1_no_ee:"1"`
 	Value bool     `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
@@ -557,6 +368,113 @@
 	return _mMyFloat64
 }
 
+type Length2StringWrapper struct {
+	_             struct{} `fidl:"s,16,8" fidl_size_v1:"16" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"8"`
+	Length2String string   `fidl:"0,2" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+}
+
+var _mLength2StringWrapper = _bindings.CreateLazyMarshaler(Length2StringWrapper{})
+
+func (msg *Length2StringWrapper) Marshaler() _bindings.Marshaler {
+	return _mLength2StringWrapper
+}
+
+type StringWrapper struct {
+	_   struct{} `fidl:"s,16,8" fidl_size_v1:"16" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"8"`
+	Str string   `fidl:"0," fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+}
+
+var _mStringWrapper = _bindings.CreateLazyMarshaler(StringWrapper{})
+
+func (msg *StringWrapper) Marshaler() _bindings.Marshaler {
+	return _mStringWrapper
+}
+
+type EmptyStruct struct {
+	_ struct{} `fidl:"s,1,1" fidl_size_v1:"1" fidl_alignment_v1:"1" fidl_size_v1_no_ee:"1" fidl_alignment_v1_no_ee:"1"`
+}
+
+var _mEmptyStruct = _bindings.CreateLazyMarshaler(EmptyStruct{})
+
+func (msg *EmptyStruct) Marshaler() _bindings.Marshaler {
+	return _mEmptyStruct
+}
+
+type EmptyStructSandwich struct {
+	_      struct{}    `fidl:"s,40,8" fidl_size_v1:"40" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"40" fidl_alignment_v1_no_ee:"8"`
+	Before string      `fidl:"0," fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	Es     EmptyStruct `fidl:"16" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
+	After  string      `fidl:"24," fidl_offset_v1:"24" fidl_offset_v1_no_ee:"24"`
+}
+
+var _mEmptyStructSandwich = _bindings.CreateLazyMarshaler(EmptyStructSandwich{})
+
+func (msg *EmptyStructSandwich) Marshaler() _bindings.Marshaler {
+	return _mEmptyStructSandwich
+}
+
+type Uint8Uint16Uint32Uint64 struct {
+	_  struct{} `fidl:"s,16,8" fidl_size_v1:"16" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"8"`
+	F1 uint8    `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	F2 uint16   `fidl:"2" fidl_offset_v1:"2" fidl_offset_v1_no_ee:"2"`
+	F3 uint32   `fidl:"4" fidl_offset_v1:"4" fidl_offset_v1_no_ee:"4"`
+	F4 uint64   `fidl:"8" fidl_offset_v1:"8" fidl_offset_v1_no_ee:"8"`
+}
+
+var _mUint8Uint16Uint32Uint64 = _bindings.CreateLazyMarshaler(Uint8Uint16Uint32Uint64{})
+
+func (msg *Uint8Uint16Uint32Uint64) Marshaler() _bindings.Marshaler {
+	return _mUint8Uint16Uint32Uint64
+}
+
+type Uint64Uint32Uint16Uint8 struct {
+	_  struct{} `fidl:"s,16,8" fidl_size_v1:"16" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"8"`
+	F1 uint64   `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	F2 uint32   `fidl:"8" fidl_offset_v1:"8" fidl_offset_v1_no_ee:"8"`
+	F3 uint16   `fidl:"12" fidl_offset_v1:"12" fidl_offset_v1_no_ee:"12"`
+	F4 uint8    `fidl:"14" fidl_offset_v1:"14" fidl_offset_v1_no_ee:"14"`
+}
+
+var _mUint64Uint32Uint16Uint8 = _bindings.CreateLazyMarshaler(Uint64Uint32Uint16Uint8{})
+
+func (msg *Uint64Uint32Uint16Uint8) Marshaler() _bindings.Marshaler {
+	return _mUint64Uint32Uint16Uint8
+}
+
+type StructOfSimpleTable struct {
+	_     struct{}    `fidl:"s,16,8" fidl_size_v1:"16" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"8"`
+	Table SimpleTable `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+}
+
+var _mStructOfSimpleTable = _bindings.CreateLazyMarshaler(StructOfSimpleTable{})
+
+func (msg *StructOfSimpleTable) Marshaler() _bindings.Marshaler {
+	return _mStructOfSimpleTable
+}
+
+type SimpleTableThenUint64 struct {
+	_      struct{}    `fidl:"s,24,8" fidl_size_v1:"24" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"8"`
+	Table  SimpleTable `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	Number uint64      `fidl:"16" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
+}
+
+var _mSimpleTableThenUint64 = _bindings.CreateLazyMarshaler(SimpleTableThenUint64{})
+
+func (msg *SimpleTableThenUint64) Marshaler() _bindings.Marshaler {
+	return _mSimpleTableThenUint64
+}
+
+type StructOfTableWithStringAndVector struct {
+	_     struct{}                 `fidl:"s,16,8" fidl_size_v1:"16" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"8"`
+	Table TableWithStringAndVector `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+}
+
+var _mStructOfTableWithStringAndVector = _bindings.CreateLazyMarshaler(StructOfTableWithStringAndVector{})
+
+func (msg *StructOfTableWithStringAndVector) Marshaler() _bindings.Marshaler {
+	return _mStructOfTableWithStringAndVector
+}
+
 type StructSize16Align8 struct {
 	_  struct{} `fidl:"s,16,8" fidl_size_v1:"16" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"8"`
 	F1 uint64   `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
@@ -1051,58 +969,114 @@
 	return _mStringUnionVector
 }
 
-type I_unionWithBoundStringTag uint32
-
-const (
-	_ I_unionWithBoundStringTag = iota
-	UnionWithBoundStringBoundFiveStr
-)
-
-type UnionWithBoundString struct {
-	I_unionWithBoundStringTag `fidl:"u,24,8" fidl_size_v1:"24" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"8"`
-	BoundFiveStr              string `fidl:"1,5"`
+type LaunchInfo struct {
+	_                  struct{}                `fidl:"s,72,8" fidl_size_v1:"72" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"72" fidl_alignment_v1_no_ee:"8"`
+	Url                string                  `fidl:"0,200" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	Arguments          *[]string               `fidl:"16,," fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
+	Out                *TransformerEmptyStruct `fidl:"32" fidl_offset_v1:"32" fidl_offset_v1_no_ee:"32"`
+	Err                *TransformerEmptyStruct `fidl:"40" fidl_offset_v1:"40" fidl_offset_v1_no_ee:"40"`
+	DirectoryRequest   uint32                  `fidl:"48" fidl_offset_v1:"48" fidl_offset_v1_no_ee:"48"`
+	FlatNamespace      *TransformerEmptyStruct `fidl:"56" fidl_offset_v1:"56" fidl_offset_v1_no_ee:"56"`
+	AdditionalServices *TransformerEmptyStruct `fidl:"64" fidl_offset_v1:"64" fidl_offset_v1_no_ee:"64"`
 }
 
-func (u *UnionWithBoundString) Which() I_unionWithBoundStringTag {
-	return u.I_unionWithBoundStringTag
+var _mLaunchInfo = _bindings.CreateLazyMarshaler(LaunchInfo{})
+
+func (msg *LaunchInfo) Marshaler() _bindings.Marshaler {
+	return _mLaunchInfo
 }
 
-func (u *UnionWithBoundString) SetBoundFiveStr(boundFiveStr string) {
-	u.I_unionWithBoundStringTag = UnionWithBoundStringBoundFiveStr
-	u.BoundFiveStr = boundFiveStr
+type CreateComponentRequest struct {
+	_          struct{}   `fidl:"s,80,8" fidl_size_v1:"80" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"80" fidl_alignment_v1_no_ee:"8"`
+	LaunchInfo LaunchInfo `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	Controller uint32     `fidl:"72" fidl_offset_v1:"72" fidl_offset_v1_no_ee:"72"`
 }
 
-func UnionWithBoundStringWithBoundFiveStr(boundFiveStr string) UnionWithBoundString {
-	var _u UnionWithBoundString
-	_u.SetBoundFiveStr(boundFiveStr)
-	return _u
+var _mCreateComponentRequest = _bindings.CreateLazyMarshaler(CreateComponentRequest{})
+
+func (msg *CreateComponentRequest) Marshaler() _bindings.Marshaler {
+	return _mCreateComponentRequest
 }
 
-type I_singleVariantUnionTag uint32
-
-const (
-	_ I_singleVariantUnionTag = iota
-	SingleVariantUnionX
-)
-
-type SingleVariantUnion struct {
-	I_singleVariantUnionTag `fidl:"u,8,4" fidl_size_v1:"24" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"8"`
-	X                       uint32 `fidl:"1"`
+type UnionWithBoundStringStruct struct {
+	_ struct{}             `fidl:"s,24,8" fidl_size_v1:"24" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"8"`
+	V UnionWithBoundString `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
 }
 
-func (u *SingleVariantUnion) Which() I_singleVariantUnionTag {
-	return u.I_singleVariantUnionTag
+var _mUnionWithBoundStringStruct = _bindings.CreateLazyMarshaler(UnionWithBoundStringStruct{})
+
+func (msg *UnionWithBoundStringStruct) Marshaler() _bindings.Marshaler {
+	return _mUnionWithBoundStringStruct
 }
 
-func (u *SingleVariantUnion) SetX(x uint32) {
-	u.I_singleVariantUnionTag = SingleVariantUnionX
-	u.X = x
+type SingleVariantUnionStruct struct {
+	_ struct{}           `fidl:"s,8,4" fidl_size_v1:"24" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"8"`
+	U SingleVariantUnion `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
 }
 
-func SingleVariantUnionWithX(x uint32) SingleVariantUnion {
-	var _u SingleVariantUnion
-	_u.SetX(x)
-	return _u
+var _mSingleVariantUnionStruct = _bindings.CreateLazyMarshaler(SingleVariantUnionStruct{})
+
+func (msg *SingleVariantUnionStruct) Marshaler() _bindings.Marshaler {
+	return _mSingleVariantUnionStruct
+}
+
+type Int64Struct struct {
+	_ struct{} `fidl:"s,8,8" fidl_size_v1:"8" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"8"`
+	X int64    `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+}
+
+var _mInt64Struct = _bindings.CreateLazyMarshaler(Int64Struct{})
+
+func (msg *Int64Struct) Marshaler() _bindings.Marshaler {
+	return _mInt64Struct
+}
+
+type TestInlineXUnionInStruct struct {
+	_      struct{}     `fidl:"s,56,8" fidl_size_v1:"56" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"56" fidl_alignment_v1_no_ee:"8"`
+	Before string       `fidl:"0," fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	Xu     SampleXUnion `fidl:"16" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
+	After  string       `fidl:"40," fidl_offset_v1:"40" fidl_offset_v1_no_ee:"40"`
+}
+
+var _mTestInlineXUnionInStruct = _bindings.CreateLazyMarshaler(TestInlineXUnionInStruct{})
+
+func (msg *TestInlineXUnionInStruct) Marshaler() _bindings.Marshaler {
+	return _mTestInlineXUnionInStruct
+}
+
+type TestOptionalXUnionInStruct struct {
+	_      struct{}      `fidl:"s,56,8" fidl_size_v1:"56" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"56" fidl_alignment_v1_no_ee:"8"`
+	Before string        `fidl:"0," fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	Xu     *SampleXUnion `fidl:"16" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
+	After  string        `fidl:"40," fidl_offset_v1:"40" fidl_offset_v1_no_ee:"40"`
+}
+
+var _mTestOptionalXUnionInStruct = _bindings.CreateLazyMarshaler(TestOptionalXUnionInStruct{})
+
+func (msg *TestOptionalXUnionInStruct) Marshaler() _bindings.Marshaler {
+	return _mTestOptionalXUnionInStruct
+}
+
+type TestStrictXUnionInStruct struct {
+	_  struct{}           `fidl:"s,24,8" fidl_size_v1:"24" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"8"`
+	Xu SampleStrictXUnion `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+}
+
+var _mTestStrictXUnionInStruct = _bindings.CreateLazyMarshaler(TestStrictXUnionInStruct{})
+
+func (msg *TestStrictXUnionInStruct) Marshaler() _bindings.Marshaler {
+	return _mTestStrictXUnionInStruct
+}
+
+type TestFlexibleXUnionInStruct struct {
+	_  struct{}     `fidl:"s,24,8" fidl_size_v1:"24" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"8"`
+	Xu SampleXUnion `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+}
+
+var _mTestFlexibleXUnionInStruct = _bindings.CreateLazyMarshaler(TestFlexibleXUnionInStruct{})
+
+func (msg *TestFlexibleXUnionInStruct) Marshaler() _bindings.Marshaler {
+	return _mTestFlexibleXUnionInStruct
 }
 
 type I_ipAddressConfigTag uint32
@@ -1145,72 +1119,6 @@
 	return _u
 }
 
-type I_simpleUnionTag uint32
-
-const (
-	_ I_simpleUnionTag = iota
-	SimpleUnionI32
-	SimpleUnionI64
-	SimpleUnionS
-	SimpleUnionStr
-)
-
-type SimpleUnion struct {
-	I_simpleUnionTag `fidl:"u,24,8" fidl_size_v1:"24" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"8"`
-	I32              int32       `fidl:"1"`
-	I64              int64       `fidl:"2"`
-	S                Int64Struct `fidl:"3"`
-	Str              string      `fidl:"4,"`
-}
-
-func (u *SimpleUnion) Which() I_simpleUnionTag {
-	return u.I_simpleUnionTag
-}
-
-func (u *SimpleUnion) SetI32(i32 int32) {
-	u.I_simpleUnionTag = SimpleUnionI32
-	u.I32 = i32
-}
-
-func SimpleUnionWithI32(i32 int32) SimpleUnion {
-	var _u SimpleUnion
-	_u.SetI32(i32)
-	return _u
-}
-
-func (u *SimpleUnion) SetI64(i64 int64) {
-	u.I_simpleUnionTag = SimpleUnionI64
-	u.I64 = i64
-}
-
-func SimpleUnionWithI64(i64 int64) SimpleUnion {
-	var _u SimpleUnion
-	_u.SetI64(i64)
-	return _u
-}
-
-func (u *SimpleUnion) SetS(s Int64Struct) {
-	u.I_simpleUnionTag = SimpleUnionS
-	u.S = s
-}
-
-func SimpleUnionWithS(s Int64Struct) SimpleUnion {
-	var _u SimpleUnion
-	_u.SetS(s)
-	return _u
-}
-
-func (u *SimpleUnion) SetStr(str string) {
-	u.I_simpleUnionTag = SimpleUnionStr
-	u.Str = str
-}
-
-func SimpleUnionWithStr(str string) SimpleUnion {
-	var _u SimpleUnion
-	_u.SetStr(str)
-	return _u
-}
-
 type I_unionWithEmptyStructTag uint32
 
 const (
@@ -1832,126 +1740,123 @@
 	return _u
 }
 
-type I_sampleXUnionTag uint32
+type I_unionWithBoundStringTag uint32
 
 const (
-	SampleXUnion_unknownData = 0          // 0x00000000
-	SampleXUnionU            = 949769906  // 0x389c56b2
-	SampleXUnionSu           = 2033143581 // 0x792f4f1d
-	SampleXUnionSt           = 35514581   // 0x021de8d5
+	_ I_unionWithBoundStringTag = iota
+	UnionWithBoundStringBoundFiveStr
 )
 
-type SampleXUnion struct {
-	I_sampleXUnionTag `fidl:"x,24,8" fidl_size_v1:"24" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"8"`
-	I_unknownData     []byte
-	U                 uint32      `fidl:"949769906"`
-	Su                SimpleUnion `fidl:"2033143581"`
-	St                SimpleTable `fidl:"35514581"`
+type UnionWithBoundString struct {
+	I_unionWithBoundStringTag `fidl:"u,24,8" fidl_size_v1:"24" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"8"`
+	BoundFiveStr              string `fidl:"1,5"`
 }
 
-func (_m *SampleXUnion) Which() I_sampleXUnionTag {
-	switch _m.I_sampleXUnionTag {
-	case 949769906:
-		return SampleXUnionU
-	case 2033143581:
-		return SampleXUnionSu
-	case 35514581:
-		return SampleXUnionSt
-	default:
-		return SampleXUnion_unknownData
-	}
+func (u *UnionWithBoundString) Which() I_unionWithBoundStringTag {
+	return u.I_unionWithBoundStringTag
 }
 
-func (_m *SampleXUnion) Ordinal() uint32 {
-	return uint32(_m.I_sampleXUnionTag)
+func (u *UnionWithBoundString) SetBoundFiveStr(boundFiveStr string) {
+	u.I_unionWithBoundStringTag = UnionWithBoundStringBoundFiveStr
+	u.BoundFiveStr = boundFiveStr
 }
 
-func (_m *SampleXUnion) SetU(u uint32) {
-	_m.I_sampleXUnionTag = SampleXUnionU
-	_m.U = u
-}
-
-func SampleXUnionWithU(u uint32) SampleXUnion {
-	var _u SampleXUnion
-	_u.SetU(u)
+func UnionWithBoundStringWithBoundFiveStr(boundFiveStr string) UnionWithBoundString {
+	var _u UnionWithBoundString
+	_u.SetBoundFiveStr(boundFiveStr)
 	return _u
 }
 
-func (_m *SampleXUnion) SetSu(su SimpleUnion) {
-	_m.I_sampleXUnionTag = SampleXUnionSu
-	_m.Su = su
-}
-
-func SampleXUnionWithSu(su SimpleUnion) SampleXUnion {
-	var _u SampleXUnion
-	_u.SetSu(su)
-	return _u
-}
-
-func (_m *SampleXUnion) SetSt(st SimpleTable) {
-	_m.I_sampleXUnionTag = SampleXUnionSt
-	_m.St = st
-}
-
-func SampleXUnionWithSt(st SimpleTable) SampleXUnion {
-	var _u SampleXUnion
-	_u.SetSt(st)
-	return _u
-}
-
-type I_sampleStrictXUnionTag uint32
+type I_singleVariantUnionTag uint32
 
 const (
-	SampleStrictXUnionU  = 149088882 // 0x08e2ea72
-	SampleStrictXUnionSu = 670279483 // 0x27f3a73b
-	SampleStrictXUnionSt = 925062383 // 0x372354ef
+	_ I_singleVariantUnionTag = iota
+	SingleVariantUnionX
 )
 
-type SampleStrictXUnion struct {
-	I_sampleStrictXUnionTag `fidl:"x!,24,8" fidl_size_v1:"24" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"8"`
-	U                       uint32      `fidl:"149088882"`
-	Su                      SimpleUnion `fidl:"670279483"`
-	St                      SimpleTable `fidl:"925062383"`
+type SingleVariantUnion struct {
+	I_singleVariantUnionTag `fidl:"u,8,4" fidl_size_v1:"24" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"8"`
+	X                       uint32 `fidl:"1"`
 }
 
-func (_m *SampleStrictXUnion) Which() I_sampleStrictXUnionTag {
-	return _m.I_sampleStrictXUnionTag
+func (u *SingleVariantUnion) Which() I_singleVariantUnionTag {
+	return u.I_singleVariantUnionTag
 }
 
-func (_m *SampleStrictXUnion) Ordinal() uint32 {
-	return uint32(_m.I_sampleStrictXUnionTag)
+func (u *SingleVariantUnion) SetX(x uint32) {
+	u.I_singleVariantUnionTag = SingleVariantUnionX
+	u.X = x
 }
 
-func (_m *SampleStrictXUnion) SetU(u uint32) {
-	_m.I_sampleStrictXUnionTag = SampleStrictXUnionU
-	_m.U = u
-}
-
-func SampleStrictXUnionWithU(u uint32) SampleStrictXUnion {
-	var _u SampleStrictXUnion
-	_u.SetU(u)
+func SingleVariantUnionWithX(x uint32) SingleVariantUnion {
+	var _u SingleVariantUnion
+	_u.SetX(x)
 	return _u
 }
 
-func (_m *SampleStrictXUnion) SetSu(su SimpleUnion) {
-	_m.I_sampleStrictXUnionTag = SampleStrictXUnionSu
-	_m.Su = su
+type I_simpleUnionTag uint32
+
+const (
+	_ I_simpleUnionTag = iota
+	SimpleUnionI32
+	SimpleUnionI64
+	SimpleUnionS
+	SimpleUnionStr
+)
+
+type SimpleUnion struct {
+	I_simpleUnionTag `fidl:"u,24,8" fidl_size_v1:"24" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"8"`
+	I32              int32       `fidl:"1"`
+	I64              int64       `fidl:"2"`
+	S                Int64Struct `fidl:"3"`
+	Str              string      `fidl:"4,"`
 }
 
-func SampleStrictXUnionWithSu(su SimpleUnion) SampleStrictXUnion {
-	var _u SampleStrictXUnion
-	_u.SetSu(su)
+func (u *SimpleUnion) Which() I_simpleUnionTag {
+	return u.I_simpleUnionTag
+}
+
+func (u *SimpleUnion) SetI32(i32 int32) {
+	u.I_simpleUnionTag = SimpleUnionI32
+	u.I32 = i32
+}
+
+func SimpleUnionWithI32(i32 int32) SimpleUnion {
+	var _u SimpleUnion
+	_u.SetI32(i32)
 	return _u
 }
 
-func (_m *SampleStrictXUnion) SetSt(st SimpleTable) {
-	_m.I_sampleStrictXUnionTag = SampleStrictXUnionSt
-	_m.St = st
+func (u *SimpleUnion) SetI64(i64 int64) {
+	u.I_simpleUnionTag = SimpleUnionI64
+	u.I64 = i64
 }
 
-func SampleStrictXUnionWithSt(st SimpleTable) SampleStrictXUnion {
-	var _u SampleStrictXUnion
-	_u.SetSt(st)
+func SimpleUnionWithI64(i64 int64) SimpleUnion {
+	var _u SimpleUnion
+	_u.SetI64(i64)
+	return _u
+}
+
+func (u *SimpleUnion) SetS(s Int64Struct) {
+	u.I_simpleUnionTag = SimpleUnionS
+	u.S = s
+}
+
+func SimpleUnionWithS(s Int64Struct) SimpleUnion {
+	var _u SimpleUnion
+	_u.SetS(s)
+	return _u
+}
+
+func (u *SimpleUnion) SetStr(str string) {
+	u.I_simpleUnionTag = SimpleUnionStr
+	u.Str = str
+}
+
+func SimpleUnionWithStr(str string) SimpleUnion {
+	var _u SimpleUnion
+	_u.SetStr(str)
 	return _u
 }
 
@@ -2118,6 +2023,129 @@
 	return _u
 }
 
+type I_sampleXUnionTag uint32
+
+const (
+	SampleXUnion_unknownData = 0          // 0x00000000
+	SampleXUnionU            = 949769906  // 0x389c56b2
+	SampleXUnionSu           = 2033143581 // 0x792f4f1d
+	SampleXUnionSt           = 35514581   // 0x021de8d5
+)
+
+type SampleXUnion struct {
+	I_sampleXUnionTag `fidl:"x,24,8" fidl_size_v1:"24" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"8"`
+	I_unknownData     []byte
+	U                 uint32      `fidl:"949769906"`
+	Su                SimpleUnion `fidl:"2033143581"`
+	St                SimpleTable `fidl:"35514581"`
+}
+
+func (_m *SampleXUnion) Which() I_sampleXUnionTag {
+	switch _m.I_sampleXUnionTag {
+	case 949769906:
+		return SampleXUnionU
+	case 2033143581:
+		return SampleXUnionSu
+	case 35514581:
+		return SampleXUnionSt
+	default:
+		return SampleXUnion_unknownData
+	}
+}
+
+func (_m *SampleXUnion) Ordinal() uint32 {
+	return uint32(_m.I_sampleXUnionTag)
+}
+
+func (_m *SampleXUnion) SetU(u uint32) {
+	_m.I_sampleXUnionTag = SampleXUnionU
+	_m.U = u
+}
+
+func SampleXUnionWithU(u uint32) SampleXUnion {
+	var _u SampleXUnion
+	_u.SetU(u)
+	return _u
+}
+
+func (_m *SampleXUnion) SetSu(su SimpleUnion) {
+	_m.I_sampleXUnionTag = SampleXUnionSu
+	_m.Su = su
+}
+
+func SampleXUnionWithSu(su SimpleUnion) SampleXUnion {
+	var _u SampleXUnion
+	_u.SetSu(su)
+	return _u
+}
+
+func (_m *SampleXUnion) SetSt(st SimpleTable) {
+	_m.I_sampleXUnionTag = SampleXUnionSt
+	_m.St = st
+}
+
+func SampleXUnionWithSt(st SimpleTable) SampleXUnion {
+	var _u SampleXUnion
+	_u.SetSt(st)
+	return _u
+}
+
+type I_sampleStrictXUnionTag uint32
+
+const (
+	SampleStrictXUnionU  = 149088882 // 0x08e2ea72
+	SampleStrictXUnionSu = 670279483 // 0x27f3a73b
+	SampleStrictXUnionSt = 925062383 // 0x372354ef
+)
+
+type SampleStrictXUnion struct {
+	I_sampleStrictXUnionTag `fidl:"x!,24,8" fidl_size_v1:"24" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"8"`
+	U                       uint32      `fidl:"149088882"`
+	Su                      SimpleUnion `fidl:"670279483"`
+	St                      SimpleTable `fidl:"925062383"`
+}
+
+func (_m *SampleStrictXUnion) Which() I_sampleStrictXUnionTag {
+	return _m.I_sampleStrictXUnionTag
+}
+
+func (_m *SampleStrictXUnion) Ordinal() uint32 {
+	return uint32(_m.I_sampleStrictXUnionTag)
+}
+
+func (_m *SampleStrictXUnion) SetU(u uint32) {
+	_m.I_sampleStrictXUnionTag = SampleStrictXUnionU
+	_m.U = u
+}
+
+func SampleStrictXUnionWithU(u uint32) SampleStrictXUnion {
+	var _u SampleStrictXUnion
+	_u.SetU(u)
+	return _u
+}
+
+func (_m *SampleStrictXUnion) SetSu(su SimpleUnion) {
+	_m.I_sampleStrictXUnionTag = SampleStrictXUnionSu
+	_m.Su = su
+}
+
+func SampleStrictXUnionWithSu(su SimpleUnion) SampleStrictXUnion {
+	var _u SampleStrictXUnion
+	_u.SetSu(su)
+	return _u
+}
+
+func (_m *SampleStrictXUnion) SetSt(st SimpleTable) {
+	_m.I_sampleStrictXUnionTag = SampleStrictXUnionSt
+	_m.St = st
+}
+
+func SampleStrictXUnionWithSt(st SimpleTable) SampleStrictXUnion {
+	var _u SampleStrictXUnion
+	_u.SetSt(st)
+	return _u
+}
+
 type XUnionInTable struct {
 	_             struct{} `fidl:"t,16,8" fidl_size_v1:"16" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"8"`
 	Before        string   `fidl:"1,"`
@@ -2200,6 +2228,36 @@
 	u.AfterPresent = false
 }
 
+type TableWithEmptyStruct struct {
+	_        struct{}    `fidl:"t,16,8" fidl_size_v1:"16" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"8"`
+	S        EmptyStruct `fidl:"1"`
+	SPresent bool
+}
+
+func (u *TableWithEmptyStruct) SetS(s EmptyStruct) {
+	u.S = s
+	u.SPresent = true
+}
+
+func (u *TableWithEmptyStruct) GetS() EmptyStruct {
+	return u.S
+}
+
+func (u *TableWithEmptyStruct) GetSWithDefault(_default EmptyStruct) EmptyStruct {
+	if !u.HasS() {
+		return _default
+	}
+	return u.S
+}
+
+func (u *TableWithEmptyStruct) HasS() bool {
+	return u.SPresent
+}
+
+func (u *TableWithEmptyStruct) ClearS() {
+	u.SPresent = false
+}
+
 type SimpleTable struct {
 	_        struct{} `fidl:"t,16,8" fidl_size_v1:"16" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"8"`
 	X        int64    `fidl:"1"`
@@ -2338,36 +2396,6 @@
 	u.BazPresent = false
 }
 
-type TableWithEmptyStruct struct {
-	_        struct{}    `fidl:"t,16,8" fidl_size_v1:"16" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"8"`
-	S        EmptyStruct `fidl:"1"`
-	SPresent bool
-}
-
-func (u *TableWithEmptyStruct) SetS(s EmptyStruct) {
-	u.S = s
-	u.SPresent = true
-}
-
-func (u *TableWithEmptyStruct) GetS() EmptyStruct {
-	return u.S
-}
-
-func (u *TableWithEmptyStruct) GetSWithDefault(_default EmptyStruct) EmptyStruct {
-	if !u.HasS() {
-		return _default
-	}
-	return u.S
-}
-
-func (u *TableWithEmptyStruct) HasS() bool {
-	return u.SPresent
-}
-
-func (u *TableWithEmptyStruct) ClearS() {
-	u.SPresent = false
-}
-
 type TableStructWithReservedSandwich struct {
 	_         struct{}          `fidl:"t,16,8" fidl_size_v1:"16" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"8"`
 	S1        StructSize3Align1 `fidl:"2"`
@@ -2693,6 +2721,11 @@
 }
 
 func (s_ *EthernetDeviceStub) DispatchImpl(ordinal_ uint64, data_ []byte, handles_ []_zx.Handle) (_bindings.Message, bool, error) {
+	var ctx_ _bindings.MarshalerContext
+	return s_.DispatchImplWithCtx(ordinal_, ctx_, data_, handles_)
+}
+
+func (s_ *EthernetDeviceStub) DispatchImplWithCtx(ordinal_ uint64, ctx_ _bindings.MarshalerContext, data_ []byte, handles_ []_zx.Handle) (_bindings.Message, bool, error) {
 	switch ordinal_ {
 	}
 	return nil, false, _bindings.ErrUnknownOrdinal
diff --git a/src/syscall/zx/fidl/ctx_and_header.go b/src/syscall/zx/fidl/ctx_and_header.go
new file mode 100644
index 0000000..6654391
--- /dev/null
+++ b/src/syscall/zx/fidl/ctx_and_header.go
@@ -0,0 +1,71 @@
+// Copyright 2019 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// +build fuchsia
+
+package fidl
+
+const FidlWireFormatMagicNumberInitial = 1
+
+type MarshalerContext struct {
+	DecodeUnionsFromXUnionBytes bool
+	EncodeUnionsAsXUnionBytes   bool
+}
+
+// MessageHeader represents a transactional message header.
+type MessageHeader struct {
+	_       struct{} `fidl:"s,16,8" fidl_size_v1:"16" fidl_alignment_v1:"8"`
+	Txid    uint32   `fidl:"0" fidl_offset_v1:"0"`
+	Flags   [3]uint8 `fidl:"4" fidl_offset_v1:"4"`
+	Magic   uint8    `fidl:"7" fidl_offset_v1:"7"`
+	Ordinal uint64   `fidl:"8" fidl_offset_v1:"8"`
+}
+
+func (msg *MessageHeader) IsSupportedVersion() bool {
+	return msg.Magic == FidlWireFormatMagicNumberInitial
+}
+
+func (msg *MessageHeader) HasUnionFromXunionBytes() bool {
+	return msg.Flags[0]&0x01 != 0
+}
+
+func (msg *MessageHeader) SetUnionFromXunionBytes() {
+	msg.Flags[0] |= 0x01
+}
+
+func (msg *MessageHeader) UnsetUnionFromXunionBytes() {
+	msg.Flags[0] &= ^(uint8(0x01))
+}
+
+// NewCtx creates a new MarshalerContext for unmarshaling based on the flags in
+// the MessageHeader
+func (msg *MessageHeader) NewCtx() MarshalerContext {
+	ctx := newCtx()
+	ctx.DecodeUnionsFromXUnionBytes = msg.HasUnionFromXunionBytes()
+	return ctx
+}
+
+var mMessageHeader = MustCreateMarshaler(MessageHeader{})
+
+var MessageHeaderSize = 16
+
+func (msg *MessageHeader) Marshaler() Marshaler {
+	return mMessageHeader
+}
+
+// NewHeader create a new MessageHeader for marshaling with the correct flags
+// set based on the MarshalerContext. It is the caller's responsibilty to set
+// the transaction ID and method ordinal
+func (ctx MarshalerContext) NewHeader() MessageHeader {
+	header := MessageHeader{
+		Flags: [3]uint8{0, 0, 0},
+		Magic: FidlWireFormatMagicNumberInitial,
+	}
+	if ctx.EncodeUnionsAsXUnionBytes {
+		header.SetUnionFromXunionBytes()
+	} else {
+		header.UnsetUnionFromXunionBytes()
+	}
+	return header
+}
diff --git a/src/syscall/zx/fidl/encoding_new.go b/src/syscall/zx/fidl/encoding_new.go
index 650243d..2359884 100644
--- a/src/syscall/zx/fidl/encoding_new.go
+++ b/src/syscall/zx/fidl/encoding_new.go
@@ -506,11 +506,6 @@
 	Marshaler() Marshaler
 }
 
-type MarshalerContext struct {
-	DecodeUnionsFromXUnionBytes bool
-	EncodeUnionsAsXUnionBytes   bool
-}
-
 type Marshaler interface {
 	// Marshal and unmarshal sizes can be different because they can be context dependent.
 	// e.g. it is possible to write a new format but still read the old format
diff --git a/src/syscall/zx/fidl/interface.go b/src/syscall/zx/fidl/interface.go
index 364767a..3aab6e4 100644
--- a/src/syscall/zx/fidl/interface.go
+++ b/src/syscall/zx/fidl/interface.go
@@ -55,13 +55,13 @@
 // It contains logic which is able to dispatch into the correct implementation given
 // the incoming message ordinal and its data.
 type Stub interface {
-	// DispatchImpl dispatches into the appropriate method implementation for a FIDL
+	// DispatchImplWithCtx dispatches into the appropriate method implementation for a FIDL
 	// interface by using the ordinal.
 	//
 	// It also takes the data as bytes and transforms it into arguments usable by
 	// the method implementation. It then optionally returns a response if the
 	// method has a response, in which case, the boolean return value is true.
-	DispatchImpl(ordinal uint64, bytes []byte, handles []zx.Handle) (Message, bool, error)
+	DispatchImplWithCtx(ordinal uint64, ctx MarshalerContext, bytes []byte, handles []zx.Handle) (Message, bool, error)
 }
 
 // ChannelProxy a Proxy that is backed by a channel.
@@ -134,15 +134,10 @@
 	defer messageHandlesPool.Put(resph)
 
 	// Marshal the message into the buffer.
-	header := MessageHeader{
-		Txid:    0, // Txid == 0 for messages without a response.
-		Ordinal: ordinal,
-		Magic:   FidlWireFormatMagicNumberInitial,
-	}
-	if newCtx().EncodeUnionsAsXUnionBytes {
-		header.SetUnionFromXunionBytes()
-	}
-	nb, nh, err := MarshalHeaderThenMessage(&header, req, respb[:], resph[:])
+	reqHeader := newCtx().NewHeader()
+	reqHeader.Txid = 0
+	reqHeader.Ordinal = ordinal
+	nb, nh, err := MarshalHeaderThenMessage(&reqHeader, req, respb[:], resph[:])
 	if err != nil {
 		return err
 	}
@@ -205,15 +200,10 @@
 		}
 	}()
 
-	// Marshal the message into the buffer
-	header := MessageHeader{
-		Ordinal: ordinal,
-		Magic:   FidlWireFormatMagicNumberInitial,
-	}
-	if newCtx().EncodeUnionsAsXUnionBytes {
-		header.SetUnionFromXunionBytes()
-	}
-	nb, nh, err := MarshalHeaderThenMessage(&header, req, respb[:], resph[:])
+	reqHeader := newCtx().NewHeader()
+	reqHeader.Txid = 0
+	reqHeader.Ordinal = ordinal
+	nb, nh, err := MarshalHeaderThenMessage(&reqHeader, req, respb[:], resph[:])
 	if err != nil {
 		return err
 	}
diff --git a/src/syscall/zx/fidl/message.go b/src/syscall/zx/fidl/message.go
index f8bffda..5a1213c 100644
--- a/src/syscall/zx/fidl/message.go
+++ b/src/syscall/zx/fidl/message.go
@@ -12,8 +12,6 @@
 	"syscall/zx"
 )
 
-const FidlWireFormatMagicNumberInitial = 1
-
 // messageBytesPool is a pool of buffers that can fit the data part of any
 // FIDL message.
 var messageBytesPool = sync.Pool{
@@ -30,35 +28,6 @@
 	},
 }
 
-// MessageHeader represents a transactional message header.
-type MessageHeader struct {
-	_       struct{} `fidl:"s,16,8" fidl_size_v1:"16" fidl_alignment_v1:"8"`
-	Txid    uint32   `fidl:"0" fidl_offset_v1:"0"`
-	Flags   [3]uint8 `fidl:"4" fidl_offset_v1:"4"`
-	Magic   uint8    `fidl:"7" fidl_offset_v1:"7"`
-	Ordinal uint64   `fidl:"8" fidl_offset_v1:"8"`
-}
-
-func (msg *MessageHeader) IsSupportedVersion() bool {
-	return msg.Magic == FidlWireFormatMagicNumberInitial
-}
-
-func (msg *MessageHeader) HasUnionFromXunionBytes() bool {
-	return msg.Flags[0] & 0x01 != 0
-}
-
-func (msg *MessageHeader) SetUnionFromXunionBytes() {
-	msg.Flags[0] |= 0x01
-}
-
-var mMessageHeader = MustCreateMarshaler(MessageHeader{})
-
-var MessageHeaderSize = 16
-
-func (msg *MessageHeader) Marshaler() Marshaler {
-	return mMessageHeader
-}
-
 // MarshalHeaderThenMessage marshals a transactional message
 // (see https://fuchsia.googlesource.com/fuchsia/+/master/docs/development/languages/fidl/reference/wire-format/README.md#messages-for-transactions).
 // It marshals a `MessageHeader`, optionally followed by a `Message` (body).
@@ -88,9 +57,7 @@
 	if body == nil {
 		return nil
 	}
-	ctx := newCtx()
-	ctx.DecodeUnionsFromXUnionBytes = header.HasUnionFromXunionBytes()
-	if _, _, err := UnmarshalWithContext(ctx, data[hnb:], handles, body); err != nil {
+	if _, _, err := UnmarshalWithContext(header.NewCtx(), data[hnb:], handles, body); err != nil {
 		return err
 	}
 	return nil
diff --git a/src/syscall/zx/io/impl.go b/src/syscall/zx/io/impl.go
index f6472d4..4b11783 100644
--- a/src/syscall/zx/io/impl.go
+++ b/src/syscall/zx/io/impl.go
@@ -523,8 +523,8 @@
 
 type nodeCloneRequest struct {
 	_      struct{}             `fidl:"s,8,0" fidl_size_v1:"8" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
-	Flags  uint32               `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
-	Object NodeInterfaceRequest `fidl:"4,0" fidl_offset_v1:"20" fidl_offset_v1_no_ee:"20"`
+	Flags  uint32               `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	Object NodeInterfaceRequest `fidl:"4,0" fidl_offset_v1:"4" fidl_offset_v1_no_ee:"4"`
 }
 
 var _mnodeCloneRequest = _bindings.CreateLazyMarshaler(nodeCloneRequest{})
@@ -535,7 +535,7 @@
 
 type nodeCloseResponse struct {
 	_ struct{} `fidl:"s,8,0" fidl_size_v1:"8" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
-	S int32    `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
+	S int32    `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
 }
 
 var _mnodeCloseResponse = _bindings.CreateLazyMarshaler(nodeCloseResponse{})
@@ -546,7 +546,7 @@
 
 type nodeDescribeResponse struct {
 	_    struct{} `fidl:"s,32,0" fidl_size_v1:"24" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"0"`
-	Info NodeInfo `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
+	Info NodeInfo `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
 }
 
 var _mnodeDescribeResponse = _bindings.CreateLazyMarshaler(nodeDescribeResponse{})
@@ -557,8 +557,8 @@
 
 type nodeOnOpenResponse struct {
 	_    struct{}  `fidl:"s,16,0" fidl_size_v1:"32" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"32" fidl_alignment_v1_no_ee:"0"`
-	S    int32     `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
-	Info *NodeInfo `fidl:"8" fidl_offset_v1:"24" fidl_offset_v1_no_ee:"24"`
+	S    int32     `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	Info *NodeInfo `fidl:"8" fidl_offset_v1:"8" fidl_offset_v1_no_ee:"8"`
 }
 
 var _mnodeOnOpenResponse = _bindings.CreateLazyMarshaler(nodeOnOpenResponse{})
@@ -569,7 +569,7 @@
 
 type nodeSyncResponse struct {
 	_ struct{} `fidl:"s,8,0" fidl_size_v1:"8" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
-	S int32    `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
+	S int32    `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
 }
 
 var _mnodeSyncResponse = _bindings.CreateLazyMarshaler(nodeSyncResponse{})
@@ -580,8 +580,8 @@
 
 type nodeGetAttrResponse struct {
 	_          struct{}       `fidl:"s,64,0" fidl_size_v1:"64" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"64" fidl_alignment_v1_no_ee:"0"`
-	S          int32          `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
-	Attributes NodeAttributes `fidl:"8" fidl_offset_v1:"24" fidl_offset_v1_no_ee:"24"`
+	S          int32          `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	Attributes NodeAttributes `fidl:"8" fidl_offset_v1:"8" fidl_offset_v1_no_ee:"8"`
 }
 
 var _mnodeGetAttrResponse = _bindings.CreateLazyMarshaler(nodeGetAttrResponse{})
@@ -592,8 +592,8 @@
 
 type nodeSetAttrRequest struct {
 	_          struct{}       `fidl:"s,64,0" fidl_size_v1:"64" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"64" fidl_alignment_v1_no_ee:"0"`
-	Flags      uint32         `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
-	Attributes NodeAttributes `fidl:"8" fidl_offset_v1:"24" fidl_offset_v1_no_ee:"24"`
+	Flags      uint32         `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	Attributes NodeAttributes `fidl:"8" fidl_offset_v1:"8" fidl_offset_v1_no_ee:"8"`
 }
 
 var _mnodeSetAttrRequest = _bindings.CreateLazyMarshaler(nodeSetAttrRequest{})
@@ -604,7 +604,7 @@
 
 type nodeSetAttrResponse struct {
 	_ struct{} `fidl:"s,8,0" fidl_size_v1:"8" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
-	S int32    `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
+	S int32    `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
 }
 
 var _mnodeSetAttrResponse = _bindings.CreateLazyMarshaler(nodeSetAttrResponse{})
@@ -615,8 +615,8 @@
 
 type nodeNodeGetFlagsResponse struct {
 	_     struct{} `fidl:"s,8,0" fidl_size_v1:"8" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
-	S     int32    `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
-	Flags uint32   `fidl:"4" fidl_offset_v1:"20" fidl_offset_v1_no_ee:"20"`
+	S     int32    `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	Flags uint32   `fidl:"4" fidl_offset_v1:"4" fidl_offset_v1_no_ee:"4"`
 }
 
 var _mnodeNodeGetFlagsResponse = _bindings.CreateLazyMarshaler(nodeNodeGetFlagsResponse{})
@@ -627,7 +627,7 @@
 
 type nodeNodeSetFlagsRequest struct {
 	_     struct{} `fidl:"s,8,0" fidl_size_v1:"8" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
-	Flags uint32   `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
+	Flags uint32   `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
 }
 
 var _mnodeNodeSetFlagsRequest = _bindings.CreateLazyMarshaler(nodeNodeSetFlagsRequest{})
@@ -638,7 +638,7 @@
 
 type nodeNodeSetFlagsResponse struct {
 	_ struct{} `fidl:"s,8,0" fidl_size_v1:"8" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
-	S int32    `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
+	S int32    `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
 }
 
 var _mnodeNodeSetFlagsResponse = _bindings.CreateLazyMarshaler(nodeNodeSetFlagsResponse{})
@@ -855,12 +855,17 @@
 }
 
 func (s_ *NodeStub) DispatchImpl(ordinal_ uint64, data_ []byte, handles_ []_zx.Handle) (_bindings.Message, bool, error) {
+	var ctx_ _bindings.MarshalerContext
+	return s_.DispatchImplWithCtx(ordinal_, ctx_, data_, handles_)
+}
+
+func (s_ *NodeStub) DispatchImplWithCtx(ordinal_ uint64, ctx_ _bindings.MarshalerContext, data_ []byte, handles_ []_zx.Handle) (_bindings.Message, bool, error) {
 	switch ordinal_ {
 	case NodeCloneOrdinal:
 		fallthrough
 	case NodeCloneGenOrdinal:
 		in_ := nodeCloneRequest{}
-		if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
+		if _, _, err_ := _bindings.UnmarshalWithContext(ctx_, data_, handles_, &in_); err_ != nil {
 			return nil, false, err_
 		}
 		err_ := s_.Impl.Clone(in_.Flags, in_.Object)
@@ -898,7 +903,7 @@
 		fallthrough
 	case NodeSetAttrGenOrdinal:
 		in_ := nodeSetAttrRequest{}
-		if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
+		if _, _, err_ := _bindings.UnmarshalWithContext(ctx_, data_, handles_, &in_); err_ != nil {
 			return nil, false, err_
 		}
 		s, err_ := s_.Impl.SetAttr(in_.Flags, in_.Attributes)
@@ -917,7 +922,7 @@
 		fallthrough
 	case NodeNodeSetFlagsGenOrdinal:
 		in_ := nodeNodeSetFlagsRequest{}
-		if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
+		if _, _, err_ := _bindings.UnmarshalWithContext(ctx_, data_, handles_, &in_); err_ != nil {
 			return nil, false, err_
 		}
 		s, err_ := s_.Impl.NodeSetFlags(in_.Flags)
@@ -992,8 +997,8 @@
 
 type fileCloneRequest struct {
 	_      struct{}             `fidl:"s,8,0" fidl_size_v1:"8" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
-	Flags  uint32               `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
-	Object NodeInterfaceRequest `fidl:"4,0" fidl_offset_v1:"20" fidl_offset_v1_no_ee:"20"`
+	Flags  uint32               `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	Object NodeInterfaceRequest `fidl:"4,0" fidl_offset_v1:"4" fidl_offset_v1_no_ee:"4"`
 }
 
 var _mfileCloneRequest = _bindings.CreateLazyMarshaler(fileCloneRequest{})
@@ -1004,7 +1009,7 @@
 
 type fileCloseResponse struct {
 	_ struct{} `fidl:"s,8,0" fidl_size_v1:"8" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
-	S int32    `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
+	S int32    `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
 }
 
 var _mfileCloseResponse = _bindings.CreateLazyMarshaler(fileCloseResponse{})
@@ -1015,7 +1020,7 @@
 
 type fileDescribeResponse struct {
 	_    struct{} `fidl:"s,32,0" fidl_size_v1:"24" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"0"`
-	Info NodeInfo `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
+	Info NodeInfo `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
 }
 
 var _mfileDescribeResponse = _bindings.CreateLazyMarshaler(fileDescribeResponse{})
@@ -1026,8 +1031,8 @@
 
 type fileOnOpenResponse struct {
 	_    struct{}  `fidl:"s,16,0" fidl_size_v1:"32" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"32" fidl_alignment_v1_no_ee:"0"`
-	S    int32     `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
-	Info *NodeInfo `fidl:"8" fidl_offset_v1:"24" fidl_offset_v1_no_ee:"24"`
+	S    int32     `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	Info *NodeInfo `fidl:"8" fidl_offset_v1:"8" fidl_offset_v1_no_ee:"8"`
 }
 
 var _mfileOnOpenResponse = _bindings.CreateLazyMarshaler(fileOnOpenResponse{})
@@ -1038,7 +1043,7 @@
 
 type fileSyncResponse struct {
 	_ struct{} `fidl:"s,8,0" fidl_size_v1:"8" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
-	S int32    `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
+	S int32    `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
 }
 
 var _mfileSyncResponse = _bindings.CreateLazyMarshaler(fileSyncResponse{})
@@ -1049,8 +1054,8 @@
 
 type fileGetAttrResponse struct {
 	_          struct{}       `fidl:"s,64,0" fidl_size_v1:"64" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"64" fidl_alignment_v1_no_ee:"0"`
-	S          int32          `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
-	Attributes NodeAttributes `fidl:"8" fidl_offset_v1:"24" fidl_offset_v1_no_ee:"24"`
+	S          int32          `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	Attributes NodeAttributes `fidl:"8" fidl_offset_v1:"8" fidl_offset_v1_no_ee:"8"`
 }
 
 var _mfileGetAttrResponse = _bindings.CreateLazyMarshaler(fileGetAttrResponse{})
@@ -1061,8 +1066,8 @@
 
 type fileSetAttrRequest struct {
 	_          struct{}       `fidl:"s,64,0" fidl_size_v1:"64" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"64" fidl_alignment_v1_no_ee:"0"`
-	Flags      uint32         `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
-	Attributes NodeAttributes `fidl:"8" fidl_offset_v1:"24" fidl_offset_v1_no_ee:"24"`
+	Flags      uint32         `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	Attributes NodeAttributes `fidl:"8" fidl_offset_v1:"8" fidl_offset_v1_no_ee:"8"`
 }
 
 var _mfileSetAttrRequest = _bindings.CreateLazyMarshaler(fileSetAttrRequest{})
@@ -1073,7 +1078,7 @@
 
 type fileSetAttrResponse struct {
 	_ struct{} `fidl:"s,8,0" fidl_size_v1:"8" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
-	S int32    `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
+	S int32    `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
 }
 
 var _mfileSetAttrResponse = _bindings.CreateLazyMarshaler(fileSetAttrResponse{})
@@ -1084,8 +1089,8 @@
 
 type fileNodeGetFlagsResponse struct {
 	_     struct{} `fidl:"s,8,0" fidl_size_v1:"8" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
-	S     int32    `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
-	Flags uint32   `fidl:"4" fidl_offset_v1:"20" fidl_offset_v1_no_ee:"20"`
+	S     int32    `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	Flags uint32   `fidl:"4" fidl_offset_v1:"4" fidl_offset_v1_no_ee:"4"`
 }
 
 var _mfileNodeGetFlagsResponse = _bindings.CreateLazyMarshaler(fileNodeGetFlagsResponse{})
@@ -1096,7 +1101,7 @@
 
 type fileNodeSetFlagsRequest struct {
 	_     struct{} `fidl:"s,8,0" fidl_size_v1:"8" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
-	Flags uint32   `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
+	Flags uint32   `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
 }
 
 var _mfileNodeSetFlagsRequest = _bindings.CreateLazyMarshaler(fileNodeSetFlagsRequest{})
@@ -1107,7 +1112,7 @@
 
 type fileNodeSetFlagsResponse struct {
 	_ struct{} `fidl:"s,8,0" fidl_size_v1:"8" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
-	S int32    `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
+	S int32    `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
 }
 
 var _mfileNodeSetFlagsResponse = _bindings.CreateLazyMarshaler(fileNodeSetFlagsResponse{})
@@ -1118,7 +1123,7 @@
 
 type fileReadRequest struct {
 	_     struct{} `fidl:"s,8,0" fidl_size_v1:"8" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
-	Count uint64   `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
+	Count uint64   `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
 }
 
 var _mfileReadRequest = _bindings.CreateLazyMarshaler(fileReadRequest{})
@@ -1129,8 +1134,8 @@
 
 type fileReadResponse struct {
 	_    struct{} `fidl:"s,24,0" fidl_size_v1:"24" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"0"`
-	S    int32    `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
-	Data []uint8  `fidl:"8,8192" fidl_offset_v1:"24" fidl_offset_v1_no_ee:"24"`
+	S    int32    `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	Data []uint8  `fidl:"8,8192" fidl_offset_v1:"8" fidl_offset_v1_no_ee:"8"`
 }
 
 var _mfileReadResponse = _bindings.CreateLazyMarshaler(fileReadResponse{})
@@ -1141,8 +1146,8 @@
 
 type fileReadAtRequest struct {
 	_      struct{} `fidl:"s,16,0" fidl_size_v1:"16" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"0"`
-	Count  uint64   `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
-	Offset uint64   `fidl:"8" fidl_offset_v1:"24" fidl_offset_v1_no_ee:"24"`
+	Count  uint64   `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	Offset uint64   `fidl:"8" fidl_offset_v1:"8" fidl_offset_v1_no_ee:"8"`
 }
 
 var _mfileReadAtRequest = _bindings.CreateLazyMarshaler(fileReadAtRequest{})
@@ -1153,8 +1158,8 @@
 
 type fileReadAtResponse struct {
 	_    struct{} `fidl:"s,24,0" fidl_size_v1:"24" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"0"`
-	S    int32    `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
-	Data []uint8  `fidl:"8,8192" fidl_offset_v1:"24" fidl_offset_v1_no_ee:"24"`
+	S    int32    `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	Data []uint8  `fidl:"8,8192" fidl_offset_v1:"8" fidl_offset_v1_no_ee:"8"`
 }
 
 var _mfileReadAtResponse = _bindings.CreateLazyMarshaler(fileReadAtResponse{})
@@ -1165,7 +1170,7 @@
 
 type fileWriteRequest struct {
 	_    struct{} `fidl:"s,16,0" fidl_size_v1:"16" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"0"`
-	Data []uint8  `fidl:"0,8192" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
+	Data []uint8  `fidl:"0,8192" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
 }
 
 var _mfileWriteRequest = _bindings.CreateLazyMarshaler(fileWriteRequest{})
@@ -1176,8 +1181,8 @@
 
 type fileWriteResponse struct {
 	_      struct{} `fidl:"s,16,0" fidl_size_v1:"16" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"0"`
-	S      int32    `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
-	Actual uint64   `fidl:"8" fidl_offset_v1:"24" fidl_offset_v1_no_ee:"24"`
+	S      int32    `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	Actual uint64   `fidl:"8" fidl_offset_v1:"8" fidl_offset_v1_no_ee:"8"`
 }
 
 var _mfileWriteResponse = _bindings.CreateLazyMarshaler(fileWriteResponse{})
@@ -1188,8 +1193,8 @@
 
 type fileWriteAtRequest struct {
 	_      struct{} `fidl:"s,24,0" fidl_size_v1:"24" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"0"`
-	Data   []uint8  `fidl:"0,8192" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
-	Offset uint64   `fidl:"16" fidl_offset_v1:"32" fidl_offset_v1_no_ee:"32"`
+	Data   []uint8  `fidl:"0,8192" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	Offset uint64   `fidl:"16" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
 }
 
 var _mfileWriteAtRequest = _bindings.CreateLazyMarshaler(fileWriteAtRequest{})
@@ -1200,8 +1205,8 @@
 
 type fileWriteAtResponse struct {
 	_      struct{} `fidl:"s,16,0" fidl_size_v1:"16" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"0"`
-	S      int32    `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
-	Actual uint64   `fidl:"8" fidl_offset_v1:"24" fidl_offset_v1_no_ee:"24"`
+	S      int32    `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	Actual uint64   `fidl:"8" fidl_offset_v1:"8" fidl_offset_v1_no_ee:"8"`
 }
 
 var _mfileWriteAtResponse = _bindings.CreateLazyMarshaler(fileWriteAtResponse{})
@@ -1212,8 +1217,8 @@
 
 type fileSeekRequest struct {
 	_      struct{}   `fidl:"s,16,0" fidl_size_v1:"16" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"0"`
-	Offset int64      `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
-	Start  SeekOrigin `fidl:"8" fidl_offset_v1:"24" fidl_offset_v1_no_ee:"24"`
+	Offset int64      `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	Start  SeekOrigin `fidl:"8" fidl_offset_v1:"8" fidl_offset_v1_no_ee:"8"`
 }
 
 var _mfileSeekRequest = _bindings.CreateLazyMarshaler(fileSeekRequest{})
@@ -1224,8 +1229,8 @@
 
 type fileSeekResponse struct {
 	_      struct{} `fidl:"s,16,0" fidl_size_v1:"16" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"0"`
-	S      int32    `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
-	Offset uint64   `fidl:"8" fidl_offset_v1:"24" fidl_offset_v1_no_ee:"24"`
+	S      int32    `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	Offset uint64   `fidl:"8" fidl_offset_v1:"8" fidl_offset_v1_no_ee:"8"`
 }
 
 var _mfileSeekResponse = _bindings.CreateLazyMarshaler(fileSeekResponse{})
@@ -1236,7 +1241,7 @@
 
 type fileTruncateRequest struct {
 	_      struct{} `fidl:"s,8,0" fidl_size_v1:"8" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
-	Length uint64   `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
+	Length uint64   `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
 }
 
 var _mfileTruncateRequest = _bindings.CreateLazyMarshaler(fileTruncateRequest{})
@@ -1247,7 +1252,7 @@
 
 type fileTruncateResponse struct {
 	_ struct{} `fidl:"s,8,0" fidl_size_v1:"8" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
-	S int32    `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
+	S int32    `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
 }
 
 var _mfileTruncateResponse = _bindings.CreateLazyMarshaler(fileTruncateResponse{})
@@ -1258,8 +1263,8 @@
 
 type fileGetFlagsResponse struct {
 	_     struct{} `fidl:"s,8,0" fidl_size_v1:"8" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
-	S     int32    `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
-	Flags uint32   `fidl:"4" fidl_offset_v1:"20" fidl_offset_v1_no_ee:"20"`
+	S     int32    `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	Flags uint32   `fidl:"4" fidl_offset_v1:"4" fidl_offset_v1_no_ee:"4"`
 }
 
 var _mfileGetFlagsResponse = _bindings.CreateLazyMarshaler(fileGetFlagsResponse{})
@@ -1270,7 +1275,7 @@
 
 type fileSetFlagsRequest struct {
 	_     struct{} `fidl:"s,8,0" fidl_size_v1:"8" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
-	Flags uint32   `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
+	Flags uint32   `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
 }
 
 var _mfileSetFlagsRequest = _bindings.CreateLazyMarshaler(fileSetFlagsRequest{})
@@ -1281,7 +1286,7 @@
 
 type fileSetFlagsResponse struct {
 	_ struct{} `fidl:"s,8,0" fidl_size_v1:"8" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
-	S int32    `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
+	S int32    `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
 }
 
 var _mfileSetFlagsResponse = _bindings.CreateLazyMarshaler(fileSetFlagsResponse{})
@@ -1292,7 +1297,7 @@
 
 type fileGetBufferRequest struct {
 	_     struct{} `fidl:"s,8,0" fidl_size_v1:"8" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
-	Flags uint32   `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
+	Flags uint32   `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
 }
 
 var _mfileGetBufferRequest = _bindings.CreateLazyMarshaler(fileGetBufferRequest{})
@@ -1303,8 +1308,8 @@
 
 type fileGetBufferResponse struct {
 	_      struct{}           `fidl:"s,16,0" fidl_size_v1:"16" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"0"`
-	S      int32              `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
-	Buffer *fuchsiamem.Buffer `fidl:"8" fidl_offset_v1:"24" fidl_offset_v1_no_ee:"24"`
+	S      int32              `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	Buffer *fuchsiamem.Buffer `fidl:"8" fidl_offset_v1:"8" fidl_offset_v1_no_ee:"8"`
 }
 
 var _mfileGetBufferResponse = _bindings.CreateLazyMarshaler(fileGetBufferResponse{})
@@ -1692,12 +1697,17 @@
 }
 
 func (s_ *FileStub) DispatchImpl(ordinal_ uint64, data_ []byte, handles_ []_zx.Handle) (_bindings.Message, bool, error) {
+	var ctx_ _bindings.MarshalerContext
+	return s_.DispatchImplWithCtx(ordinal_, ctx_, data_, handles_)
+}
+
+func (s_ *FileStub) DispatchImplWithCtx(ordinal_ uint64, ctx_ _bindings.MarshalerContext, data_ []byte, handles_ []_zx.Handle) (_bindings.Message, bool, error) {
 	switch ordinal_ {
 	case FileCloneOrdinal:
 		fallthrough
 	case FileCloneGenOrdinal:
 		in_ := fileCloneRequest{}
-		if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
+		if _, _, err_ := _bindings.UnmarshalWithContext(ctx_, data_, handles_, &in_); err_ != nil {
 			return nil, false, err_
 		}
 		err_ := s_.Impl.Clone(in_.Flags, in_.Object)
@@ -1735,7 +1745,7 @@
 		fallthrough
 	case FileSetAttrGenOrdinal:
 		in_ := fileSetAttrRequest{}
-		if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
+		if _, _, err_ := _bindings.UnmarshalWithContext(ctx_, data_, handles_, &in_); err_ != nil {
 			return nil, false, err_
 		}
 		s, err_ := s_.Impl.SetAttr(in_.Flags, in_.Attributes)
@@ -1754,7 +1764,7 @@
 		fallthrough
 	case FileNodeSetFlagsGenOrdinal:
 		in_ := fileNodeSetFlagsRequest{}
-		if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
+		if _, _, err_ := _bindings.UnmarshalWithContext(ctx_, data_, handles_, &in_); err_ != nil {
 			return nil, false, err_
 		}
 		s, err_ := s_.Impl.NodeSetFlags(in_.Flags)
@@ -1765,7 +1775,7 @@
 		fallthrough
 	case FileReadGenOrdinal:
 		in_ := fileReadRequest{}
-		if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
+		if _, _, err_ := _bindings.UnmarshalWithContext(ctx_, data_, handles_, &in_); err_ != nil {
 			return nil, false, err_
 		}
 		s, data, err_ := s_.Impl.Read(in_.Count)
@@ -1777,7 +1787,7 @@
 		fallthrough
 	case FileReadAtGenOrdinal:
 		in_ := fileReadAtRequest{}
-		if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
+		if _, _, err_ := _bindings.UnmarshalWithContext(ctx_, data_, handles_, &in_); err_ != nil {
 			return nil, false, err_
 		}
 		s, data, err_ := s_.Impl.ReadAt(in_.Count, in_.Offset)
@@ -1789,7 +1799,7 @@
 		fallthrough
 	case FileWriteGenOrdinal:
 		in_ := fileWriteRequest{}
-		if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
+		if _, _, err_ := _bindings.UnmarshalWithContext(ctx_, data_, handles_, &in_); err_ != nil {
 			return nil, false, err_
 		}
 		s, actual, err_ := s_.Impl.Write(in_.Data)
@@ -1801,7 +1811,7 @@
 		fallthrough
 	case FileWriteAtGenOrdinal:
 		in_ := fileWriteAtRequest{}
-		if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
+		if _, _, err_ := _bindings.UnmarshalWithContext(ctx_, data_, handles_, &in_); err_ != nil {
 			return nil, false, err_
 		}
 		s, actual, err_ := s_.Impl.WriteAt(in_.Data, in_.Offset)
@@ -1813,7 +1823,7 @@
 		fallthrough
 	case FileSeekGenOrdinal:
 		in_ := fileSeekRequest{}
-		if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
+		if _, _, err_ := _bindings.UnmarshalWithContext(ctx_, data_, handles_, &in_); err_ != nil {
 			return nil, false, err_
 		}
 		s, offset, err_ := s_.Impl.Seek(in_.Offset, in_.Start)
@@ -1825,7 +1835,7 @@
 		fallthrough
 	case FileTruncateGenOrdinal:
 		in_ := fileTruncateRequest{}
-		if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
+		if _, _, err_ := _bindings.UnmarshalWithContext(ctx_, data_, handles_, &in_); err_ != nil {
 			return nil, false, err_
 		}
 		s, err_ := s_.Impl.Truncate(in_.Length)
@@ -1844,7 +1854,7 @@
 		fallthrough
 	case FileSetFlagsGenOrdinal:
 		in_ := fileSetFlagsRequest{}
-		if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
+		if _, _, err_ := _bindings.UnmarshalWithContext(ctx_, data_, handles_, &in_); err_ != nil {
 			return nil, false, err_
 		}
 		s, err_ := s_.Impl.SetFlags(in_.Flags)
@@ -1855,7 +1865,7 @@
 		fallthrough
 	case FileGetBufferGenOrdinal:
 		in_ := fileGetBufferRequest{}
-		if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
+		if _, _, err_ := _bindings.UnmarshalWithContext(ctx_, data_, handles_, &in_); err_ != nil {
 			return nil, false, err_
 		}
 		s, buffer, err_ := s_.Impl.GetBuffer(in_.Flags)
@@ -1897,7 +1907,7 @@
 
 type directoryWatcherOnEventRequest struct {
 	_      struct{} `fidl:"s,16,0" fidl_size_v1:"16" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"0"`
-	Events []uint8  `fidl:"0,8192" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
+	Events []uint8  `fidl:"0,8192" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
 }
 
 var _mdirectoryWatcherOnEventRequest = _bindings.CreateLazyMarshaler(directoryWatcherOnEventRequest{})
@@ -1938,12 +1948,17 @@
 }
 
 func (s_ *DirectoryWatcherStub) DispatchImpl(ordinal_ uint64, data_ []byte, handles_ []_zx.Handle) (_bindings.Message, bool, error) {
+	var ctx_ _bindings.MarshalerContext
+	return s_.DispatchImplWithCtx(ordinal_, ctx_, data_, handles_)
+}
+
+func (s_ *DirectoryWatcherStub) DispatchImplWithCtx(ordinal_ uint64, ctx_ _bindings.MarshalerContext, data_ []byte, handles_ []_zx.Handle) (_bindings.Message, bool, error) {
 	switch ordinal_ {
 	case DirectoryWatcherOnEventOrdinal:
 		fallthrough
 	case DirectoryWatcherOnEventGenOrdinal:
 		in_ := directoryWatcherOnEventRequest{}
-		if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
+		if _, _, err_ := _bindings.UnmarshalWithContext(ctx_, data_, handles_, &in_); err_ != nil {
 			return nil, false, err_
 		}
 		err_ := s_.Impl.OnEvent(in_.Events)
@@ -2006,8 +2021,8 @@
 
 type directoryCloneRequest struct {
 	_      struct{}             `fidl:"s,8,0" fidl_size_v1:"8" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
-	Flags  uint32               `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
-	Object NodeInterfaceRequest `fidl:"4,0" fidl_offset_v1:"20" fidl_offset_v1_no_ee:"20"`
+	Flags  uint32               `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	Object NodeInterfaceRequest `fidl:"4,0" fidl_offset_v1:"4" fidl_offset_v1_no_ee:"4"`
 }
 
 var _mdirectoryCloneRequest = _bindings.CreateLazyMarshaler(directoryCloneRequest{})
@@ -2018,7 +2033,7 @@
 
 type directoryCloseResponse struct {
 	_ struct{} `fidl:"s,8,0" fidl_size_v1:"8" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
-	S int32    `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
+	S int32    `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
 }
 
 var _mdirectoryCloseResponse = _bindings.CreateLazyMarshaler(directoryCloseResponse{})
@@ -2029,7 +2044,7 @@
 
 type directoryDescribeResponse struct {
 	_    struct{} `fidl:"s,32,0" fidl_size_v1:"24" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"0"`
-	Info NodeInfo `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
+	Info NodeInfo `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
 }
 
 var _mdirectoryDescribeResponse = _bindings.CreateLazyMarshaler(directoryDescribeResponse{})
@@ -2040,8 +2055,8 @@
 
 type directoryOnOpenResponse struct {
 	_    struct{}  `fidl:"s,16,0" fidl_size_v1:"32" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"32" fidl_alignment_v1_no_ee:"0"`
-	S    int32     `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
-	Info *NodeInfo `fidl:"8" fidl_offset_v1:"24" fidl_offset_v1_no_ee:"24"`
+	S    int32     `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	Info *NodeInfo `fidl:"8" fidl_offset_v1:"8" fidl_offset_v1_no_ee:"8"`
 }
 
 var _mdirectoryOnOpenResponse = _bindings.CreateLazyMarshaler(directoryOnOpenResponse{})
@@ -2052,7 +2067,7 @@
 
 type directorySyncResponse struct {
 	_ struct{} `fidl:"s,8,0" fidl_size_v1:"8" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
-	S int32    `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
+	S int32    `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
 }
 
 var _mdirectorySyncResponse = _bindings.CreateLazyMarshaler(directorySyncResponse{})
@@ -2063,8 +2078,8 @@
 
 type directoryGetAttrResponse struct {
 	_          struct{}       `fidl:"s,64,0" fidl_size_v1:"64" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"64" fidl_alignment_v1_no_ee:"0"`
-	S          int32          `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
-	Attributes NodeAttributes `fidl:"8" fidl_offset_v1:"24" fidl_offset_v1_no_ee:"24"`
+	S          int32          `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	Attributes NodeAttributes `fidl:"8" fidl_offset_v1:"8" fidl_offset_v1_no_ee:"8"`
 }
 
 var _mdirectoryGetAttrResponse = _bindings.CreateLazyMarshaler(directoryGetAttrResponse{})
@@ -2075,8 +2090,8 @@
 
 type directorySetAttrRequest struct {
 	_          struct{}       `fidl:"s,64,0" fidl_size_v1:"64" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"64" fidl_alignment_v1_no_ee:"0"`
-	Flags      uint32         `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
-	Attributes NodeAttributes `fidl:"8" fidl_offset_v1:"24" fidl_offset_v1_no_ee:"24"`
+	Flags      uint32         `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	Attributes NodeAttributes `fidl:"8" fidl_offset_v1:"8" fidl_offset_v1_no_ee:"8"`
 }
 
 var _mdirectorySetAttrRequest = _bindings.CreateLazyMarshaler(directorySetAttrRequest{})
@@ -2087,7 +2102,7 @@
 
 type directorySetAttrResponse struct {
 	_ struct{} `fidl:"s,8,0" fidl_size_v1:"8" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
-	S int32    `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
+	S int32    `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
 }
 
 var _mdirectorySetAttrResponse = _bindings.CreateLazyMarshaler(directorySetAttrResponse{})
@@ -2098,8 +2113,8 @@
 
 type directoryNodeGetFlagsResponse struct {
 	_     struct{} `fidl:"s,8,0" fidl_size_v1:"8" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
-	S     int32    `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
-	Flags uint32   `fidl:"4" fidl_offset_v1:"20" fidl_offset_v1_no_ee:"20"`
+	S     int32    `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	Flags uint32   `fidl:"4" fidl_offset_v1:"4" fidl_offset_v1_no_ee:"4"`
 }
 
 var _mdirectoryNodeGetFlagsResponse = _bindings.CreateLazyMarshaler(directoryNodeGetFlagsResponse{})
@@ -2110,7 +2125,7 @@
 
 type directoryNodeSetFlagsRequest struct {
 	_     struct{} `fidl:"s,8,0" fidl_size_v1:"8" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
-	Flags uint32   `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
+	Flags uint32   `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
 }
 
 var _mdirectoryNodeSetFlagsRequest = _bindings.CreateLazyMarshaler(directoryNodeSetFlagsRequest{})
@@ -2121,7 +2136,7 @@
 
 type directoryNodeSetFlagsResponse struct {
 	_ struct{} `fidl:"s,8,0" fidl_size_v1:"8" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
-	S int32    `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
+	S int32    `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
 }
 
 var _mdirectoryNodeSetFlagsResponse = _bindings.CreateLazyMarshaler(directoryNodeSetFlagsResponse{})
@@ -2132,10 +2147,10 @@
 
 type directoryOpenRequest struct {
 	_      struct{}             `fidl:"s,32,0" fidl_size_v1:"32" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"32" fidl_alignment_v1_no_ee:"0"`
-	Flags  uint32               `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
-	Mode   uint32               `fidl:"4" fidl_offset_v1:"20" fidl_offset_v1_no_ee:"20"`
-	Path   string               `fidl:"8,4096" fidl_offset_v1:"24" fidl_offset_v1_no_ee:"24"`
-	Object NodeInterfaceRequest `fidl:"24,0" fidl_offset_v1:"40" fidl_offset_v1_no_ee:"40"`
+	Flags  uint32               `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	Mode   uint32               `fidl:"4" fidl_offset_v1:"4" fidl_offset_v1_no_ee:"4"`
+	Path   string               `fidl:"8,4096" fidl_offset_v1:"8" fidl_offset_v1_no_ee:"8"`
+	Object NodeInterfaceRequest `fidl:"24,0" fidl_offset_v1:"24" fidl_offset_v1_no_ee:"24"`
 }
 
 var _mdirectoryOpenRequest = _bindings.CreateLazyMarshaler(directoryOpenRequest{})
@@ -2146,7 +2161,7 @@
 
 type directoryUnlinkRequest struct {
 	_    struct{} `fidl:"s,16,0" fidl_size_v1:"16" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"0"`
-	Path string   `fidl:"0,4096" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
+	Path string   `fidl:"0,4096" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
 }
 
 var _mdirectoryUnlinkRequest = _bindings.CreateLazyMarshaler(directoryUnlinkRequest{})
@@ -2157,7 +2172,7 @@
 
 type directoryUnlinkResponse struct {
 	_ struct{} `fidl:"s,8,0" fidl_size_v1:"8" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
-	S int32    `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
+	S int32    `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
 }
 
 var _mdirectoryUnlinkResponse = _bindings.CreateLazyMarshaler(directoryUnlinkResponse{})
@@ -2168,7 +2183,7 @@
 
 type directoryReadDirentsRequest struct {
 	_        struct{} `fidl:"s,8,0" fidl_size_v1:"8" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
-	MaxBytes uint64   `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
+	MaxBytes uint64   `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
 }
 
 var _mdirectoryReadDirentsRequest = _bindings.CreateLazyMarshaler(directoryReadDirentsRequest{})
@@ -2179,8 +2194,8 @@
 
 type directoryReadDirentsResponse struct {
 	_       struct{} `fidl:"s,24,0" fidl_size_v1:"24" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"0"`
-	S       int32    `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
-	Dirents []uint8  `fidl:"8,8192" fidl_offset_v1:"24" fidl_offset_v1_no_ee:"24"`
+	S       int32    `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	Dirents []uint8  `fidl:"8,8192" fidl_offset_v1:"8" fidl_offset_v1_no_ee:"8"`
 }
 
 var _mdirectoryReadDirentsResponse = _bindings.CreateLazyMarshaler(directoryReadDirentsResponse{})
@@ -2191,7 +2206,7 @@
 
 type directoryRewindResponse struct {
 	_ struct{} `fidl:"s,8,0" fidl_size_v1:"8" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
-	S int32    `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
+	S int32    `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
 }
 
 var _mdirectoryRewindResponse = _bindings.CreateLazyMarshaler(directoryRewindResponse{})
@@ -2202,8 +2217,8 @@
 
 type directoryGetTokenResponse struct {
 	_     struct{}   `fidl:"s,8,0" fidl_size_v1:"8" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
-	S     int32      `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
-	Token _zx.Handle `fidl:"4,1" fidl_offset_v1:"20" fidl_offset_v1_no_ee:"20"`
+	S     int32      `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	Token _zx.Handle `fidl:"4,1" fidl_offset_v1:"4" fidl_offset_v1_no_ee:"4"`
 }
 
 var _mdirectoryGetTokenResponse = _bindings.CreateLazyMarshaler(directoryGetTokenResponse{})
@@ -2214,9 +2229,9 @@
 
 type directoryRenameRequest struct {
 	_              struct{}   `fidl:"s,40,0" fidl_size_v1:"40" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"40" fidl_alignment_v1_no_ee:"0"`
-	Src            string     `fidl:"0,4096" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
-	DstParentToken _zx.Handle `fidl:"16,0" fidl_offset_v1:"32" fidl_offset_v1_no_ee:"32"`
-	Dst            string     `fidl:"24,4096" fidl_offset_v1:"40" fidl_offset_v1_no_ee:"40"`
+	Src            string     `fidl:"0,4096" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	DstParentToken _zx.Handle `fidl:"16,0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
+	Dst            string     `fidl:"24,4096" fidl_offset_v1:"24" fidl_offset_v1_no_ee:"24"`
 }
 
 var _mdirectoryRenameRequest = _bindings.CreateLazyMarshaler(directoryRenameRequest{})
@@ -2227,7 +2242,7 @@
 
 type directoryRenameResponse struct {
 	_ struct{} `fidl:"s,8,0" fidl_size_v1:"8" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
-	S int32    `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
+	S int32    `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
 }
 
 var _mdirectoryRenameResponse = _bindings.CreateLazyMarshaler(directoryRenameResponse{})
@@ -2238,9 +2253,9 @@
 
 type directoryLinkRequest struct {
 	_              struct{}   `fidl:"s,40,0" fidl_size_v1:"40" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"40" fidl_alignment_v1_no_ee:"0"`
-	Src            string     `fidl:"0,4096" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
-	DstParentToken _zx.Handle `fidl:"16,0" fidl_offset_v1:"32" fidl_offset_v1_no_ee:"32"`
-	Dst            string     `fidl:"24,4096" fidl_offset_v1:"40" fidl_offset_v1_no_ee:"40"`
+	Src            string     `fidl:"0,4096" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	DstParentToken _zx.Handle `fidl:"16,0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
+	Dst            string     `fidl:"24,4096" fidl_offset_v1:"24" fidl_offset_v1_no_ee:"24"`
 }
 
 var _mdirectoryLinkRequest = _bindings.CreateLazyMarshaler(directoryLinkRequest{})
@@ -2251,7 +2266,7 @@
 
 type directoryLinkResponse struct {
 	_ struct{} `fidl:"s,8,0" fidl_size_v1:"8" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
-	S int32    `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
+	S int32    `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
 }
 
 var _mdirectoryLinkResponse = _bindings.CreateLazyMarshaler(directoryLinkResponse{})
@@ -2262,9 +2277,9 @@
 
 type directoryWatchRequest struct {
 	_       struct{}    `fidl:"s,16,0" fidl_size_v1:"16" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"0"`
-	Mask    uint32      `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
-	Options uint32      `fidl:"4" fidl_offset_v1:"20" fidl_offset_v1_no_ee:"20"`
-	Watcher _zx.Channel `fidl:"8,0" fidl_offset_v1:"24" fidl_offset_v1_no_ee:"24"`
+	Mask    uint32      `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	Options uint32      `fidl:"4" fidl_offset_v1:"4" fidl_offset_v1_no_ee:"4"`
+	Watcher _zx.Channel `fidl:"8,0" fidl_offset_v1:"8" fidl_offset_v1_no_ee:"8"`
 }
 
 var _mdirectoryWatchRequest = _bindings.CreateLazyMarshaler(directoryWatchRequest{})
@@ -2275,7 +2290,7 @@
 
 type directoryWatchResponse struct {
 	_ struct{} `fidl:"s,8,0" fidl_size_v1:"8" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
-	S int32    `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
+	S int32    `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
 }
 
 var _mdirectoryWatchResponse = _bindings.CreateLazyMarshaler(directoryWatchResponse{})
@@ -2806,12 +2821,17 @@
 }
 
 func (s_ *DirectoryStub) DispatchImpl(ordinal_ uint64, data_ []byte, handles_ []_zx.Handle) (_bindings.Message, bool, error) {
+	var ctx_ _bindings.MarshalerContext
+	return s_.DispatchImplWithCtx(ordinal_, ctx_, data_, handles_)
+}
+
+func (s_ *DirectoryStub) DispatchImplWithCtx(ordinal_ uint64, ctx_ _bindings.MarshalerContext, data_ []byte, handles_ []_zx.Handle) (_bindings.Message, bool, error) {
 	switch ordinal_ {
 	case DirectoryCloneOrdinal:
 		fallthrough
 	case DirectoryCloneGenOrdinal:
 		in_ := directoryCloneRequest{}
-		if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
+		if _, _, err_ := _bindings.UnmarshalWithContext(ctx_, data_, handles_, &in_); err_ != nil {
 			return nil, false, err_
 		}
 		err_ := s_.Impl.Clone(in_.Flags, in_.Object)
@@ -2849,7 +2869,7 @@
 		fallthrough
 	case DirectorySetAttrGenOrdinal:
 		in_ := directorySetAttrRequest{}
-		if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
+		if _, _, err_ := _bindings.UnmarshalWithContext(ctx_, data_, handles_, &in_); err_ != nil {
 			return nil, false, err_
 		}
 		s, err_ := s_.Impl.SetAttr(in_.Flags, in_.Attributes)
@@ -2868,7 +2888,7 @@
 		fallthrough
 	case DirectoryNodeSetFlagsGenOrdinal:
 		in_ := directoryNodeSetFlagsRequest{}
-		if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
+		if _, _, err_ := _bindings.UnmarshalWithContext(ctx_, data_, handles_, &in_); err_ != nil {
 			return nil, false, err_
 		}
 		s, err_ := s_.Impl.NodeSetFlags(in_.Flags)
@@ -2879,7 +2899,7 @@
 		fallthrough
 	case DirectoryOpenGenOrdinal:
 		in_ := directoryOpenRequest{}
-		if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
+		if _, _, err_ := _bindings.UnmarshalWithContext(ctx_, data_, handles_, &in_); err_ != nil {
 			return nil, false, err_
 		}
 		err_ := s_.Impl.Open(in_.Flags, in_.Mode, in_.Path, in_.Object)
@@ -2888,7 +2908,7 @@
 		fallthrough
 	case DirectoryUnlinkGenOrdinal:
 		in_ := directoryUnlinkRequest{}
-		if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
+		if _, _, err_ := _bindings.UnmarshalWithContext(ctx_, data_, handles_, &in_); err_ != nil {
 			return nil, false, err_
 		}
 		s, err_ := s_.Impl.Unlink(in_.Path)
@@ -2899,7 +2919,7 @@
 		fallthrough
 	case DirectoryReadDirentsGenOrdinal:
 		in_ := directoryReadDirentsRequest{}
-		if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
+		if _, _, err_ := _bindings.UnmarshalWithContext(ctx_, data_, handles_, &in_); err_ != nil {
 			return nil, false, err_
 		}
 		s, dirents, err_ := s_.Impl.ReadDirents(in_.MaxBytes)
@@ -2926,7 +2946,7 @@
 		fallthrough
 	case DirectoryRenameGenOrdinal:
 		in_ := directoryRenameRequest{}
-		if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
+		if _, _, err_ := _bindings.UnmarshalWithContext(ctx_, data_, handles_, &in_); err_ != nil {
 			return nil, false, err_
 		}
 		s, err_ := s_.Impl.Rename(in_.Src, in_.DstParentToken, in_.Dst)
@@ -2937,7 +2957,7 @@
 		fallthrough
 	case DirectoryLinkGenOrdinal:
 		in_ := directoryLinkRequest{}
-		if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
+		if _, _, err_ := _bindings.UnmarshalWithContext(ctx_, data_, handles_, &in_); err_ != nil {
 			return nil, false, err_
 		}
 		s, err_ := s_.Impl.Link(in_.Src, in_.DstParentToken, in_.Dst)
@@ -2948,7 +2968,7 @@
 		fallthrough
 	case DirectoryWatchGenOrdinal:
 		in_ := directoryWatchRequest{}
-		if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
+		if _, _, err_ := _bindings.UnmarshalWithContext(ctx_, data_, handles_, &in_); err_ != nil {
 			return nil, false, err_
 		}
 		s, err_ := s_.Impl.Watch(in_.Mask, in_.Options, in_.Watcher)
@@ -3033,8 +3053,8 @@
 
 type directoryAdminCloneRequest struct {
 	_      struct{}             `fidl:"s,8,0" fidl_size_v1:"8" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
-	Flags  uint32               `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
-	Object NodeInterfaceRequest `fidl:"4,0" fidl_offset_v1:"20" fidl_offset_v1_no_ee:"20"`
+	Flags  uint32               `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	Object NodeInterfaceRequest `fidl:"4,0" fidl_offset_v1:"4" fidl_offset_v1_no_ee:"4"`
 }
 
 var _mdirectoryAdminCloneRequest = _bindings.CreateLazyMarshaler(directoryAdminCloneRequest{})
@@ -3045,7 +3065,7 @@
 
 type directoryAdminCloseResponse struct {
 	_ struct{} `fidl:"s,8,0" fidl_size_v1:"8" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
-	S int32    `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
+	S int32    `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
 }
 
 var _mdirectoryAdminCloseResponse = _bindings.CreateLazyMarshaler(directoryAdminCloseResponse{})
@@ -3056,7 +3076,7 @@
 
 type directoryAdminDescribeResponse struct {
 	_    struct{} `fidl:"s,32,0" fidl_size_v1:"24" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"0"`
-	Info NodeInfo `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
+	Info NodeInfo `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
 }
 
 var _mdirectoryAdminDescribeResponse = _bindings.CreateLazyMarshaler(directoryAdminDescribeResponse{})
@@ -3067,8 +3087,8 @@
 
 type directoryAdminOnOpenResponse struct {
 	_    struct{}  `fidl:"s,16,0" fidl_size_v1:"32" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"32" fidl_alignment_v1_no_ee:"0"`
-	S    int32     `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
-	Info *NodeInfo `fidl:"8" fidl_offset_v1:"24" fidl_offset_v1_no_ee:"24"`
+	S    int32     `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	Info *NodeInfo `fidl:"8" fidl_offset_v1:"8" fidl_offset_v1_no_ee:"8"`
 }
 
 var _mdirectoryAdminOnOpenResponse = _bindings.CreateLazyMarshaler(directoryAdminOnOpenResponse{})
@@ -3079,7 +3099,7 @@
 
 type directoryAdminSyncResponse struct {
 	_ struct{} `fidl:"s,8,0" fidl_size_v1:"8" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
-	S int32    `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
+	S int32    `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
 }
 
 var _mdirectoryAdminSyncResponse = _bindings.CreateLazyMarshaler(directoryAdminSyncResponse{})
@@ -3090,8 +3110,8 @@
 
 type directoryAdminGetAttrResponse struct {
 	_          struct{}       `fidl:"s,64,0" fidl_size_v1:"64" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"64" fidl_alignment_v1_no_ee:"0"`
-	S          int32          `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
-	Attributes NodeAttributes `fidl:"8" fidl_offset_v1:"24" fidl_offset_v1_no_ee:"24"`
+	S          int32          `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	Attributes NodeAttributes `fidl:"8" fidl_offset_v1:"8" fidl_offset_v1_no_ee:"8"`
 }
 
 var _mdirectoryAdminGetAttrResponse = _bindings.CreateLazyMarshaler(directoryAdminGetAttrResponse{})
@@ -3102,8 +3122,8 @@
 
 type directoryAdminSetAttrRequest struct {
 	_          struct{}       `fidl:"s,64,0" fidl_size_v1:"64" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"64" fidl_alignment_v1_no_ee:"0"`
-	Flags      uint32         `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
-	Attributes NodeAttributes `fidl:"8" fidl_offset_v1:"24" fidl_offset_v1_no_ee:"24"`
+	Flags      uint32         `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	Attributes NodeAttributes `fidl:"8" fidl_offset_v1:"8" fidl_offset_v1_no_ee:"8"`
 }
 
 var _mdirectoryAdminSetAttrRequest = _bindings.CreateLazyMarshaler(directoryAdminSetAttrRequest{})
@@ -3114,7 +3134,7 @@
 
 type directoryAdminSetAttrResponse struct {
 	_ struct{} `fidl:"s,8,0" fidl_size_v1:"8" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
-	S int32    `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
+	S int32    `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
 }
 
 var _mdirectoryAdminSetAttrResponse = _bindings.CreateLazyMarshaler(directoryAdminSetAttrResponse{})
@@ -3125,8 +3145,8 @@
 
 type directoryAdminNodeGetFlagsResponse struct {
 	_     struct{} `fidl:"s,8,0" fidl_size_v1:"8" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
-	S     int32    `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
-	Flags uint32   `fidl:"4" fidl_offset_v1:"20" fidl_offset_v1_no_ee:"20"`
+	S     int32    `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	Flags uint32   `fidl:"4" fidl_offset_v1:"4" fidl_offset_v1_no_ee:"4"`
 }
 
 var _mdirectoryAdminNodeGetFlagsResponse = _bindings.CreateLazyMarshaler(directoryAdminNodeGetFlagsResponse{})
@@ -3137,7 +3157,7 @@
 
 type directoryAdminNodeSetFlagsRequest struct {
 	_     struct{} `fidl:"s,8,0" fidl_size_v1:"8" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
-	Flags uint32   `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
+	Flags uint32   `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
 }
 
 var _mdirectoryAdminNodeSetFlagsRequest = _bindings.CreateLazyMarshaler(directoryAdminNodeSetFlagsRequest{})
@@ -3148,7 +3168,7 @@
 
 type directoryAdminNodeSetFlagsResponse struct {
 	_ struct{} `fidl:"s,8,0" fidl_size_v1:"8" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
-	S int32    `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
+	S int32    `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
 }
 
 var _mdirectoryAdminNodeSetFlagsResponse = _bindings.CreateLazyMarshaler(directoryAdminNodeSetFlagsResponse{})
@@ -3159,10 +3179,10 @@
 
 type directoryAdminOpenRequest struct {
 	_      struct{}             `fidl:"s,32,0" fidl_size_v1:"32" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"32" fidl_alignment_v1_no_ee:"0"`
-	Flags  uint32               `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
-	Mode   uint32               `fidl:"4" fidl_offset_v1:"20" fidl_offset_v1_no_ee:"20"`
-	Path   string               `fidl:"8,4096" fidl_offset_v1:"24" fidl_offset_v1_no_ee:"24"`
-	Object NodeInterfaceRequest `fidl:"24,0" fidl_offset_v1:"40" fidl_offset_v1_no_ee:"40"`
+	Flags  uint32               `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	Mode   uint32               `fidl:"4" fidl_offset_v1:"4" fidl_offset_v1_no_ee:"4"`
+	Path   string               `fidl:"8,4096" fidl_offset_v1:"8" fidl_offset_v1_no_ee:"8"`
+	Object NodeInterfaceRequest `fidl:"24,0" fidl_offset_v1:"24" fidl_offset_v1_no_ee:"24"`
 }
 
 var _mdirectoryAdminOpenRequest = _bindings.CreateLazyMarshaler(directoryAdminOpenRequest{})
@@ -3173,7 +3193,7 @@
 
 type directoryAdminUnlinkRequest struct {
 	_    struct{} `fidl:"s,16,0" fidl_size_v1:"16" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"0"`
-	Path string   `fidl:"0,4096" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
+	Path string   `fidl:"0,4096" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
 }
 
 var _mdirectoryAdminUnlinkRequest = _bindings.CreateLazyMarshaler(directoryAdminUnlinkRequest{})
@@ -3184,7 +3204,7 @@
 
 type directoryAdminUnlinkResponse struct {
 	_ struct{} `fidl:"s,8,0" fidl_size_v1:"8" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
-	S int32    `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
+	S int32    `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
 }
 
 var _mdirectoryAdminUnlinkResponse = _bindings.CreateLazyMarshaler(directoryAdminUnlinkResponse{})
@@ -3195,7 +3215,7 @@
 
 type directoryAdminReadDirentsRequest struct {
 	_        struct{} `fidl:"s,8,0" fidl_size_v1:"8" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
-	MaxBytes uint64   `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
+	MaxBytes uint64   `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
 }
 
 var _mdirectoryAdminReadDirentsRequest = _bindings.CreateLazyMarshaler(directoryAdminReadDirentsRequest{})
@@ -3206,8 +3226,8 @@
 
 type directoryAdminReadDirentsResponse struct {
 	_       struct{} `fidl:"s,24,0" fidl_size_v1:"24" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"0"`
-	S       int32    `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
-	Dirents []uint8  `fidl:"8,8192" fidl_offset_v1:"24" fidl_offset_v1_no_ee:"24"`
+	S       int32    `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	Dirents []uint8  `fidl:"8,8192" fidl_offset_v1:"8" fidl_offset_v1_no_ee:"8"`
 }
 
 var _mdirectoryAdminReadDirentsResponse = _bindings.CreateLazyMarshaler(directoryAdminReadDirentsResponse{})
@@ -3218,7 +3238,7 @@
 
 type directoryAdminRewindResponse struct {
 	_ struct{} `fidl:"s,8,0" fidl_size_v1:"8" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
-	S int32    `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
+	S int32    `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
 }
 
 var _mdirectoryAdminRewindResponse = _bindings.CreateLazyMarshaler(directoryAdminRewindResponse{})
@@ -3229,8 +3249,8 @@
 
 type directoryAdminGetTokenResponse struct {
 	_     struct{}   `fidl:"s,8,0" fidl_size_v1:"8" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
-	S     int32      `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
-	Token _zx.Handle `fidl:"4,1" fidl_offset_v1:"20" fidl_offset_v1_no_ee:"20"`
+	S     int32      `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	Token _zx.Handle `fidl:"4,1" fidl_offset_v1:"4" fidl_offset_v1_no_ee:"4"`
 }
 
 var _mdirectoryAdminGetTokenResponse = _bindings.CreateLazyMarshaler(directoryAdminGetTokenResponse{})
@@ -3241,9 +3261,9 @@
 
 type directoryAdminRenameRequest struct {
 	_              struct{}   `fidl:"s,40,0" fidl_size_v1:"40" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"40" fidl_alignment_v1_no_ee:"0"`
-	Src            string     `fidl:"0,4096" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
-	DstParentToken _zx.Handle `fidl:"16,0" fidl_offset_v1:"32" fidl_offset_v1_no_ee:"32"`
-	Dst            string     `fidl:"24,4096" fidl_offset_v1:"40" fidl_offset_v1_no_ee:"40"`
+	Src            string     `fidl:"0,4096" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	DstParentToken _zx.Handle `fidl:"16,0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
+	Dst            string     `fidl:"24,4096" fidl_offset_v1:"24" fidl_offset_v1_no_ee:"24"`
 }
 
 var _mdirectoryAdminRenameRequest = _bindings.CreateLazyMarshaler(directoryAdminRenameRequest{})
@@ -3254,7 +3274,7 @@
 
 type directoryAdminRenameResponse struct {
 	_ struct{} `fidl:"s,8,0" fidl_size_v1:"8" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
-	S int32    `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
+	S int32    `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
 }
 
 var _mdirectoryAdminRenameResponse = _bindings.CreateLazyMarshaler(directoryAdminRenameResponse{})
@@ -3265,9 +3285,9 @@
 
 type directoryAdminLinkRequest struct {
 	_              struct{}   `fidl:"s,40,0" fidl_size_v1:"40" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"40" fidl_alignment_v1_no_ee:"0"`
-	Src            string     `fidl:"0,4096" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
-	DstParentToken _zx.Handle `fidl:"16,0" fidl_offset_v1:"32" fidl_offset_v1_no_ee:"32"`
-	Dst            string     `fidl:"24,4096" fidl_offset_v1:"40" fidl_offset_v1_no_ee:"40"`
+	Src            string     `fidl:"0,4096" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	DstParentToken _zx.Handle `fidl:"16,0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
+	Dst            string     `fidl:"24,4096" fidl_offset_v1:"24" fidl_offset_v1_no_ee:"24"`
 }
 
 var _mdirectoryAdminLinkRequest = _bindings.CreateLazyMarshaler(directoryAdminLinkRequest{})
@@ -3278,7 +3298,7 @@
 
 type directoryAdminLinkResponse struct {
 	_ struct{} `fidl:"s,8,0" fidl_size_v1:"8" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
-	S int32    `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
+	S int32    `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
 }
 
 var _mdirectoryAdminLinkResponse = _bindings.CreateLazyMarshaler(directoryAdminLinkResponse{})
@@ -3289,9 +3309,9 @@
 
 type directoryAdminWatchRequest struct {
 	_       struct{}    `fidl:"s,16,0" fidl_size_v1:"16" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"0"`
-	Mask    uint32      `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
-	Options uint32      `fidl:"4" fidl_offset_v1:"20" fidl_offset_v1_no_ee:"20"`
-	Watcher _zx.Channel `fidl:"8,0" fidl_offset_v1:"24" fidl_offset_v1_no_ee:"24"`
+	Mask    uint32      `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	Options uint32      `fidl:"4" fidl_offset_v1:"4" fidl_offset_v1_no_ee:"4"`
+	Watcher _zx.Channel `fidl:"8,0" fidl_offset_v1:"8" fidl_offset_v1_no_ee:"8"`
 }
 
 var _mdirectoryAdminWatchRequest = _bindings.CreateLazyMarshaler(directoryAdminWatchRequest{})
@@ -3302,7 +3322,7 @@
 
 type directoryAdminWatchResponse struct {
 	_ struct{} `fidl:"s,8,0" fidl_size_v1:"8" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
-	S int32    `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
+	S int32    `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
 }
 
 var _mdirectoryAdminWatchResponse = _bindings.CreateLazyMarshaler(directoryAdminWatchResponse{})
@@ -3313,7 +3333,7 @@
 
 type directoryAdminMountRequest struct {
 	_      struct{}           `fidl:"s,8,0" fidl_size_v1:"8" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
-	Remote DirectoryInterface `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
+	Remote DirectoryInterface `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
 }
 
 var _mdirectoryAdminMountRequest = _bindings.CreateLazyMarshaler(directoryAdminMountRequest{})
@@ -3324,7 +3344,7 @@
 
 type directoryAdminMountResponse struct {
 	_ struct{} `fidl:"s,8,0" fidl_size_v1:"8" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
-	S int32    `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
+	S int32    `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
 }
 
 var _mdirectoryAdminMountResponse = _bindings.CreateLazyMarshaler(directoryAdminMountResponse{})
@@ -3335,9 +3355,9 @@
 
 type directoryAdminMountAndCreateRequest struct {
 	_      struct{}           `fidl:"s,32,0" fidl_size_v1:"32" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"32" fidl_alignment_v1_no_ee:"0"`
-	Remote DirectoryInterface `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
-	Name   string             `fidl:"8,255" fidl_offset_v1:"24" fidl_offset_v1_no_ee:"24"`
-	Flags  uint32             `fidl:"24" fidl_offset_v1:"40" fidl_offset_v1_no_ee:"40"`
+	Remote DirectoryInterface `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	Name   string             `fidl:"8,255" fidl_offset_v1:"8" fidl_offset_v1_no_ee:"8"`
+	Flags  uint32             `fidl:"24" fidl_offset_v1:"24" fidl_offset_v1_no_ee:"24"`
 }
 
 var _mdirectoryAdminMountAndCreateRequest = _bindings.CreateLazyMarshaler(directoryAdminMountAndCreateRequest{})
@@ -3348,7 +3368,7 @@
 
 type directoryAdminMountAndCreateResponse struct {
 	_ struct{} `fidl:"s,8,0" fidl_size_v1:"8" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
-	S int32    `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
+	S int32    `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
 }
 
 var _mdirectoryAdminMountAndCreateResponse = _bindings.CreateLazyMarshaler(directoryAdminMountAndCreateResponse{})
@@ -3359,7 +3379,7 @@
 
 type directoryAdminUnmountResponse struct {
 	_ struct{} `fidl:"s,8,0" fidl_size_v1:"8" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
-	S int32    `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
+	S int32    `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
 }
 
 var _mdirectoryAdminUnmountResponse = _bindings.CreateLazyMarshaler(directoryAdminUnmountResponse{})
@@ -3370,8 +3390,8 @@
 
 type directoryAdminUnmountNodeResponse struct {
 	_      struct{}           `fidl:"s,8,0" fidl_size_v1:"8" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
-	S      int32              `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
-	Remote DirectoryInterface `fidl:"4" fidl_offset_v1:"20" fidl_offset_v1_no_ee:"20"`
+	S      int32              `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	Remote DirectoryInterface `fidl:"4" fidl_offset_v1:"4" fidl_offset_v1_no_ee:"4"`
 }
 
 var _mdirectoryAdminUnmountNodeResponse = _bindings.CreateLazyMarshaler(directoryAdminUnmountNodeResponse{})
@@ -3382,8 +3402,8 @@
 
 type directoryAdminQueryFilesystemResponse struct {
 	_    struct{}        `fidl:"s,16,0" fidl_size_v1:"16" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"0"`
-	S    int32           `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
-	Info *FilesystemInfo `fidl:"8" fidl_offset_v1:"24" fidl_offset_v1_no_ee:"24"`
+	S    int32           `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	Info *FilesystemInfo `fidl:"8" fidl_offset_v1:"8" fidl_offset_v1_no_ee:"8"`
 }
 
 var _mdirectoryAdminQueryFilesystemResponse = _bindings.CreateLazyMarshaler(directoryAdminQueryFilesystemResponse{})
@@ -3394,8 +3414,8 @@
 
 type directoryAdminGetDevicePathResponse struct {
 	_    struct{} `fidl:"s,24,0" fidl_size_v1:"24" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"0"`
-	S    int32    `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
-	Path *string  `fidl:"8,4096" fidl_offset_v1:"24" fidl_offset_v1_no_ee:"24"`
+	S    int32    `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	Path *string  `fidl:"8,4096" fidl_offset_v1:"8" fidl_offset_v1_no_ee:"8"`
 }
 
 var _mdirectoryAdminGetDevicePathResponse = _bindings.CreateLazyMarshaler(directoryAdminGetDevicePathResponse{})
@@ -4005,12 +4025,17 @@
 }
 
 func (s_ *DirectoryAdminStub) DispatchImpl(ordinal_ uint64, data_ []byte, handles_ []_zx.Handle) (_bindings.Message, bool, error) {
+	var ctx_ _bindings.MarshalerContext
+	return s_.DispatchImplWithCtx(ordinal_, ctx_, data_, handles_)
+}
+
+func (s_ *DirectoryAdminStub) DispatchImplWithCtx(ordinal_ uint64, ctx_ _bindings.MarshalerContext, data_ []byte, handles_ []_zx.Handle) (_bindings.Message, bool, error) {
 	switch ordinal_ {
 	case DirectoryAdminCloneOrdinal:
 		fallthrough
 	case DirectoryAdminCloneGenOrdinal:
 		in_ := directoryAdminCloneRequest{}
-		if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
+		if _, _, err_ := _bindings.UnmarshalWithContext(ctx_, data_, handles_, &in_); err_ != nil {
 			return nil, false, err_
 		}
 		err_ := s_.Impl.Clone(in_.Flags, in_.Object)
@@ -4048,7 +4073,7 @@
 		fallthrough
 	case DirectoryAdminSetAttrGenOrdinal:
 		in_ := directoryAdminSetAttrRequest{}
-		if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
+		if _, _, err_ := _bindings.UnmarshalWithContext(ctx_, data_, handles_, &in_); err_ != nil {
 			return nil, false, err_
 		}
 		s, err_ := s_.Impl.SetAttr(in_.Flags, in_.Attributes)
@@ -4067,7 +4092,7 @@
 		fallthrough
 	case DirectoryAdminNodeSetFlagsGenOrdinal:
 		in_ := directoryAdminNodeSetFlagsRequest{}
-		if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
+		if _, _, err_ := _bindings.UnmarshalWithContext(ctx_, data_, handles_, &in_); err_ != nil {
 			return nil, false, err_
 		}
 		s, err_ := s_.Impl.NodeSetFlags(in_.Flags)
@@ -4078,7 +4103,7 @@
 		fallthrough
 	case DirectoryAdminOpenGenOrdinal:
 		in_ := directoryAdminOpenRequest{}
-		if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
+		if _, _, err_ := _bindings.UnmarshalWithContext(ctx_, data_, handles_, &in_); err_ != nil {
 			return nil, false, err_
 		}
 		err_ := s_.Impl.Open(in_.Flags, in_.Mode, in_.Path, in_.Object)
@@ -4087,7 +4112,7 @@
 		fallthrough
 	case DirectoryAdminUnlinkGenOrdinal:
 		in_ := directoryAdminUnlinkRequest{}
-		if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
+		if _, _, err_ := _bindings.UnmarshalWithContext(ctx_, data_, handles_, &in_); err_ != nil {
 			return nil, false, err_
 		}
 		s, err_ := s_.Impl.Unlink(in_.Path)
@@ -4098,7 +4123,7 @@
 		fallthrough
 	case DirectoryAdminReadDirentsGenOrdinal:
 		in_ := directoryAdminReadDirentsRequest{}
-		if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
+		if _, _, err_ := _bindings.UnmarshalWithContext(ctx_, data_, handles_, &in_); err_ != nil {
 			return nil, false, err_
 		}
 		s, dirents, err_ := s_.Impl.ReadDirents(in_.MaxBytes)
@@ -4125,7 +4150,7 @@
 		fallthrough
 	case DirectoryAdminRenameGenOrdinal:
 		in_ := directoryAdminRenameRequest{}
-		if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
+		if _, _, err_ := _bindings.UnmarshalWithContext(ctx_, data_, handles_, &in_); err_ != nil {
 			return nil, false, err_
 		}
 		s, err_ := s_.Impl.Rename(in_.Src, in_.DstParentToken, in_.Dst)
@@ -4136,7 +4161,7 @@
 		fallthrough
 	case DirectoryAdminLinkGenOrdinal:
 		in_ := directoryAdminLinkRequest{}
-		if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
+		if _, _, err_ := _bindings.UnmarshalWithContext(ctx_, data_, handles_, &in_); err_ != nil {
 			return nil, false, err_
 		}
 		s, err_ := s_.Impl.Link(in_.Src, in_.DstParentToken, in_.Dst)
@@ -4147,7 +4172,7 @@
 		fallthrough
 	case DirectoryAdminWatchGenOrdinal:
 		in_ := directoryAdminWatchRequest{}
-		if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
+		if _, _, err_ := _bindings.UnmarshalWithContext(ctx_, data_, handles_, &in_); err_ != nil {
 			return nil, false, err_
 		}
 		s, err_ := s_.Impl.Watch(in_.Mask, in_.Options, in_.Watcher)
@@ -4158,7 +4183,7 @@
 		fallthrough
 	case DirectoryAdminMountGenOrdinal:
 		in_ := directoryAdminMountRequest{}
-		if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
+		if _, _, err_ := _bindings.UnmarshalWithContext(ctx_, data_, handles_, &in_); err_ != nil {
 			return nil, false, err_
 		}
 		s, err_ := s_.Impl.Mount(in_.Remote)
@@ -4169,7 +4194,7 @@
 		fallthrough
 	case DirectoryAdminMountAndCreateGenOrdinal:
 		in_ := directoryAdminMountAndCreateRequest{}
-		if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
+		if _, _, err_ := _bindings.UnmarshalWithContext(ctx_, data_, handles_, &in_); err_ != nil {
 			return nil, false, err_
 		}
 		s, err_ := s_.Impl.MountAndCreate(in_.Remote, in_.Name, in_.Flags)
diff --git a/src/syscall/zx/net/impl.go b/src/syscall/zx/net/impl.go
index 42b3885..06a378d 100644
--- a/src/syscall/zx/net/impl.go
+++ b/src/syscall/zx/net/impl.go
@@ -55,8 +55,8 @@
 
 type controlCloneRequest struct {
 	_      struct{}                       `fidl:"s,8,0" fidl_size_v1:"8" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
-	Flags  uint32                         `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
-	Object fuchsiaio.NodeInterfaceRequest `fidl:"4,0" fidl_offset_v1:"20" fidl_offset_v1_no_ee:"20"`
+	Flags  uint32                         `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	Object fuchsiaio.NodeInterfaceRequest `fidl:"4,0" fidl_offset_v1:"4" fidl_offset_v1_no_ee:"4"`
 }
 
 var _mcontrolCloneRequest = _bindings.CreateLazyMarshaler(controlCloneRequest{})
@@ -67,7 +67,7 @@
 
 type controlCloseResponse struct {
 	_ struct{} `fidl:"s,8,0" fidl_size_v1:"8" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
-	S int32    `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
+	S int32    `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
 }
 
 var _mcontrolCloseResponse = _bindings.CreateLazyMarshaler(controlCloseResponse{})
@@ -78,7 +78,7 @@
 
 type controlDescribeResponse struct {
 	_    struct{}           `fidl:"s,32,0" fidl_size_v1:"24" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"0"`
-	Info fuchsiaio.NodeInfo `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
+	Info fuchsiaio.NodeInfo `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
 }
 
 var _mcontrolDescribeResponse = _bindings.CreateLazyMarshaler(controlDescribeResponse{})
@@ -89,8 +89,8 @@
 
 type controlOnOpenResponse struct {
 	_    struct{}            `fidl:"s,16,0" fidl_size_v1:"32" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"32" fidl_alignment_v1_no_ee:"0"`
-	S    int32               `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
-	Info *fuchsiaio.NodeInfo `fidl:"8" fidl_offset_v1:"24" fidl_offset_v1_no_ee:"24"`
+	S    int32               `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	Info *fuchsiaio.NodeInfo `fidl:"8" fidl_offset_v1:"8" fidl_offset_v1_no_ee:"8"`
 }
 
 var _mcontrolOnOpenResponse = _bindings.CreateLazyMarshaler(controlOnOpenResponse{})
@@ -101,7 +101,7 @@
 
 type controlSyncResponse struct {
 	_ struct{} `fidl:"s,8,0" fidl_size_v1:"8" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
-	S int32    `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
+	S int32    `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
 }
 
 var _mcontrolSyncResponse = _bindings.CreateLazyMarshaler(controlSyncResponse{})
@@ -112,8 +112,8 @@
 
 type controlGetAttrResponse struct {
 	_          struct{}                 `fidl:"s,64,0" fidl_size_v1:"64" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"64" fidl_alignment_v1_no_ee:"0"`
-	S          int32                    `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
-	Attributes fuchsiaio.NodeAttributes `fidl:"8" fidl_offset_v1:"24" fidl_offset_v1_no_ee:"24"`
+	S          int32                    `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	Attributes fuchsiaio.NodeAttributes `fidl:"8" fidl_offset_v1:"8" fidl_offset_v1_no_ee:"8"`
 }
 
 var _mcontrolGetAttrResponse = _bindings.CreateLazyMarshaler(controlGetAttrResponse{})
@@ -124,8 +124,8 @@
 
 type controlSetAttrRequest struct {
 	_          struct{}                 `fidl:"s,64,0" fidl_size_v1:"64" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"64" fidl_alignment_v1_no_ee:"0"`
-	Flags      uint32                   `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
-	Attributes fuchsiaio.NodeAttributes `fidl:"8" fidl_offset_v1:"24" fidl_offset_v1_no_ee:"24"`
+	Flags      uint32                   `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	Attributes fuchsiaio.NodeAttributes `fidl:"8" fidl_offset_v1:"8" fidl_offset_v1_no_ee:"8"`
 }
 
 var _mcontrolSetAttrRequest = _bindings.CreateLazyMarshaler(controlSetAttrRequest{})
@@ -136,7 +136,7 @@
 
 type controlSetAttrResponse struct {
 	_ struct{} `fidl:"s,8,0" fidl_size_v1:"8" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
-	S int32    `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
+	S int32    `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
 }
 
 var _mcontrolSetAttrResponse = _bindings.CreateLazyMarshaler(controlSetAttrResponse{})
@@ -147,8 +147,8 @@
 
 type controlNodeGetFlagsResponse struct {
 	_     struct{} `fidl:"s,8,0" fidl_size_v1:"8" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
-	S     int32    `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
-	Flags uint32   `fidl:"4" fidl_offset_v1:"20" fidl_offset_v1_no_ee:"20"`
+	S     int32    `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	Flags uint32   `fidl:"4" fidl_offset_v1:"4" fidl_offset_v1_no_ee:"4"`
 }
 
 var _mcontrolNodeGetFlagsResponse = _bindings.CreateLazyMarshaler(controlNodeGetFlagsResponse{})
@@ -159,7 +159,7 @@
 
 type controlNodeSetFlagsRequest struct {
 	_     struct{} `fidl:"s,8,0" fidl_size_v1:"8" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
-	Flags uint32   `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
+	Flags uint32   `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
 }
 
 var _mcontrolNodeSetFlagsRequest = _bindings.CreateLazyMarshaler(controlNodeSetFlagsRequest{})
@@ -170,7 +170,7 @@
 
 type controlNodeSetFlagsResponse struct {
 	_ struct{} `fidl:"s,8,0" fidl_size_v1:"8" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
-	S int32    `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
+	S int32    `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
 }
 
 var _mcontrolNodeSetFlagsResponse = _bindings.CreateLazyMarshaler(controlNodeSetFlagsResponse{})
@@ -181,7 +181,7 @@
 
 type controlBindRequest struct {
 	_    struct{} `fidl:"s,16,0" fidl_size_v1:"16" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"0"`
-	Addr []uint8  `fidl:"0,128" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
+	Addr []uint8  `fidl:"0,128" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
 }
 
 var _mcontrolBindRequest = _bindings.CreateLazyMarshaler(controlBindRequest{})
@@ -192,7 +192,7 @@
 
 type controlBindResponse struct {
 	_    struct{} `fidl:"s,8,0" fidl_size_v1:"8" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
-	Code int16    `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
+	Code int16    `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
 }
 
 var _mcontrolBindResponse = _bindings.CreateLazyMarshaler(controlBindResponse{})
@@ -203,7 +203,7 @@
 
 type controlConnectRequest struct {
 	_    struct{} `fidl:"s,16,0" fidl_size_v1:"16" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"0"`
-	Addr []uint8  `fidl:"0,128" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
+	Addr []uint8  `fidl:"0,128" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
 }
 
 var _mcontrolConnectRequest = _bindings.CreateLazyMarshaler(controlConnectRequest{})
@@ -214,7 +214,7 @@
 
 type controlConnectResponse struct {
 	_    struct{} `fidl:"s,8,0" fidl_size_v1:"8" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
-	Code int16    `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
+	Code int16    `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
 }
 
 var _mcontrolConnectResponse = _bindings.CreateLazyMarshaler(controlConnectResponse{})
@@ -225,7 +225,7 @@
 
 type controlListenRequest struct {
 	_       struct{} `fidl:"s,8,0" fidl_size_v1:"8" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
-	Backlog int16    `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
+	Backlog int16    `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
 }
 
 var _mcontrolListenRequest = _bindings.CreateLazyMarshaler(controlListenRequest{})
@@ -236,7 +236,7 @@
 
 type controlListenResponse struct {
 	_    struct{} `fidl:"s,8,0" fidl_size_v1:"8" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
-	Code int16    `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
+	Code int16    `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
 }
 
 var _mcontrolListenResponse = _bindings.CreateLazyMarshaler(controlListenResponse{})
@@ -247,7 +247,7 @@
 
 type controlAcceptRequest struct {
 	_     struct{} `fidl:"s,8,0" fidl_size_v1:"8" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
-	Flags int16    `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
+	Flags int16    `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
 }
 
 var _mcontrolAcceptRequest = _bindings.CreateLazyMarshaler(controlAcceptRequest{})
@@ -258,8 +258,8 @@
 
 type controlAcceptResponse struct {
 	_    struct{}         `fidl:"s,8,0" fidl_size_v1:"8" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
-	Code int16            `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
-	S    ControlInterface `fidl:"4" fidl_offset_v1:"20" fidl_offset_v1_no_ee:"20"`
+	Code int16            `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	S    ControlInterface `fidl:"4" fidl_offset_v1:"4" fidl_offset_v1_no_ee:"4"`
 }
 
 var _mcontrolAcceptResponse = _bindings.CreateLazyMarshaler(controlAcceptResponse{})
@@ -270,8 +270,8 @@
 
 type controlGetSockNameResponse struct {
 	_    struct{} `fidl:"s,24,0" fidl_size_v1:"24" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"0"`
-	Code int16    `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
-	Addr []uint8  `fidl:"8,128" fidl_offset_v1:"24" fidl_offset_v1_no_ee:"24"`
+	Code int16    `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	Addr []uint8  `fidl:"8,128" fidl_offset_v1:"8" fidl_offset_v1_no_ee:"8"`
 }
 
 var _mcontrolGetSockNameResponse = _bindings.CreateLazyMarshaler(controlGetSockNameResponse{})
@@ -282,8 +282,8 @@
 
 type controlGetPeerNameResponse struct {
 	_    struct{} `fidl:"s,24,0" fidl_size_v1:"24" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"0"`
-	Code int16    `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
-	Addr []uint8  `fidl:"8,128" fidl_offset_v1:"24" fidl_offset_v1_no_ee:"24"`
+	Code int16    `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	Addr []uint8  `fidl:"8,128" fidl_offset_v1:"8" fidl_offset_v1_no_ee:"8"`
 }
 
 var _mcontrolGetPeerNameResponse = _bindings.CreateLazyMarshaler(controlGetPeerNameResponse{})
@@ -294,9 +294,9 @@
 
 type controlSetSockOptRequest struct {
 	_       struct{} `fidl:"s,24,0" fidl_size_v1:"24" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"0"`
-	Level   int16    `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
-	Optname int16    `fidl:"2" fidl_offset_v1:"18" fidl_offset_v1_no_ee:"18"`
-	Optval  []uint8  `fidl:"8,900" fidl_offset_v1:"24" fidl_offset_v1_no_ee:"24"`
+	Level   int16    `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	Optname int16    `fidl:"2" fidl_offset_v1:"2" fidl_offset_v1_no_ee:"2"`
+	Optval  []uint8  `fidl:"8,900" fidl_offset_v1:"8" fidl_offset_v1_no_ee:"8"`
 }
 
 var _mcontrolSetSockOptRequest = _bindings.CreateLazyMarshaler(controlSetSockOptRequest{})
@@ -307,7 +307,7 @@
 
 type controlSetSockOptResponse struct {
 	_    struct{} `fidl:"s,8,0" fidl_size_v1:"8" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
-	Code int16    `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
+	Code int16    `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
 }
 
 var _mcontrolSetSockOptResponse = _bindings.CreateLazyMarshaler(controlSetSockOptResponse{})
@@ -318,8 +318,8 @@
 
 type controlGetSockOptRequest struct {
 	_       struct{} `fidl:"s,8,0" fidl_size_v1:"8" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
-	Level   int16    `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
-	Optname int16    `fidl:"2" fidl_offset_v1:"18" fidl_offset_v1_no_ee:"18"`
+	Level   int16    `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	Optname int16    `fidl:"2" fidl_offset_v1:"2" fidl_offset_v1_no_ee:"2"`
 }
 
 var _mcontrolGetSockOptRequest = _bindings.CreateLazyMarshaler(controlGetSockOptRequest{})
@@ -330,8 +330,8 @@
 
 type controlGetSockOptResponse struct {
 	_      struct{} `fidl:"s,24,0" fidl_size_v1:"24" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"0"`
-	Code   int16    `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
-	Optval []uint8  `fidl:"8,900" fidl_offset_v1:"24" fidl_offset_v1_no_ee:"24"`
+	Code   int16    `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	Optval []uint8  `fidl:"8,900" fidl_offset_v1:"8" fidl_offset_v1_no_ee:"8"`
 }
 
 var _mcontrolGetSockOptResponse = _bindings.CreateLazyMarshaler(controlGetSockOptResponse{})
@@ -653,12 +653,17 @@
 }
 
 func (s_ *ControlStub) DispatchImpl(ordinal_ uint64, data_ []byte, handles_ []_zx.Handle) (_bindings.Message, bool, error) {
+	var ctx_ _bindings.MarshalerContext
+	return s_.DispatchImplWithCtx(ordinal_, ctx_, data_, handles_)
+}
+
+func (s_ *ControlStub) DispatchImplWithCtx(ordinal_ uint64, ctx_ _bindings.MarshalerContext, data_ []byte, handles_ []_zx.Handle) (_bindings.Message, bool, error) {
 	switch ordinal_ {
 	case ControlCloneOrdinal:
 		fallthrough
 	case ControlCloneGenOrdinal:
 		in_ := controlCloneRequest{}
-		if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
+		if _, _, err_ := _bindings.UnmarshalWithContext(ctx_, data_, handles_, &in_); err_ != nil {
 			return nil, false, err_
 		}
 		err_ := s_.Impl.Clone(in_.Flags, in_.Object)
@@ -696,7 +701,7 @@
 		fallthrough
 	case ControlSetAttrGenOrdinal:
 		in_ := controlSetAttrRequest{}
-		if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
+		if _, _, err_ := _bindings.UnmarshalWithContext(ctx_, data_, handles_, &in_); err_ != nil {
 			return nil, false, err_
 		}
 		s, err_ := s_.Impl.SetAttr(in_.Flags, in_.Attributes)
@@ -715,7 +720,7 @@
 		fallthrough
 	case ControlNodeSetFlagsGenOrdinal:
 		in_ := controlNodeSetFlagsRequest{}
-		if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
+		if _, _, err_ := _bindings.UnmarshalWithContext(ctx_, data_, handles_, &in_); err_ != nil {
 			return nil, false, err_
 		}
 		s, err_ := s_.Impl.NodeSetFlags(in_.Flags)
@@ -726,7 +731,7 @@
 		fallthrough
 	case ControlBindGenOrdinal:
 		in_ := controlBindRequest{}
-		if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
+		if _, _, err_ := _bindings.UnmarshalWithContext(ctx_, data_, handles_, &in_); err_ != nil {
 			return nil, false, err_
 		}
 		code, err_ := s_.Impl.Bind(in_.Addr)
@@ -737,7 +742,7 @@
 		fallthrough
 	case ControlConnectGenOrdinal:
 		in_ := controlConnectRequest{}
-		if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
+		if _, _, err_ := _bindings.UnmarshalWithContext(ctx_, data_, handles_, &in_); err_ != nil {
 			return nil, false, err_
 		}
 		code, err_ := s_.Impl.Connect(in_.Addr)
@@ -748,7 +753,7 @@
 		fallthrough
 	case ControlListenGenOrdinal:
 		in_ := controlListenRequest{}
-		if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
+		if _, _, err_ := _bindings.UnmarshalWithContext(ctx_, data_, handles_, &in_); err_ != nil {
 			return nil, false, err_
 		}
 		code, err_ := s_.Impl.Listen(in_.Backlog)
@@ -759,7 +764,7 @@
 		fallthrough
 	case ControlAcceptGenOrdinal:
 		in_ := controlAcceptRequest{}
-		if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
+		if _, _, err_ := _bindings.UnmarshalWithContext(ctx_, data_, handles_, &in_); err_ != nil {
 			return nil, false, err_
 		}
 		code, s, err_ := s_.Impl.Accept(in_.Flags)
@@ -787,7 +792,7 @@
 		fallthrough
 	case ControlSetSockOptGenOrdinal:
 		in_ := controlSetSockOptRequest{}
-		if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
+		if _, _, err_ := _bindings.UnmarshalWithContext(ctx_, data_, handles_, &in_); err_ != nil {
 			return nil, false, err_
 		}
 		code, err_ := s_.Impl.SetSockOpt(in_.Level, in_.Optname, in_.Optval)
@@ -798,7 +803,7 @@
 		fallthrough
 	case ControlGetSockOptGenOrdinal:
 		in_ := controlGetSockOptRequest{}
-		if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
+		if _, _, err_ := _bindings.UnmarshalWithContext(ctx_, data_, handles_, &in_); err_ != nil {
 			return nil, false, err_
 		}
 		code, optval, err_ := s_.Impl.GetSockOpt(in_.Level, in_.Optname)
@@ -840,9 +845,9 @@
 
 type providerSocketRequest struct {
 	_        struct{} `fidl:"s,8,0" fidl_size_v1:"8" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
-	Domain   int16    `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
-	Type     int16    `fidl:"2" fidl_offset_v1:"18" fidl_offset_v1_no_ee:"18"`
-	Protocol int16    `fidl:"4" fidl_offset_v1:"20" fidl_offset_v1_no_ee:"20"`
+	Domain   int16    `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	Type     int16    `fidl:"2" fidl_offset_v1:"2" fidl_offset_v1_no_ee:"2"`
+	Protocol int16    `fidl:"4" fidl_offset_v1:"4" fidl_offset_v1_no_ee:"4"`
 }
 
 var _mproviderSocketRequest = _bindings.CreateLazyMarshaler(providerSocketRequest{})
@@ -853,8 +858,8 @@
 
 type providerSocketResponse struct {
 	_    struct{}         `fidl:"s,8,0" fidl_size_v1:"8" fidl_alignment_v1:"0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
-	Code int16            `fidl:"0" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
-	S    ControlInterface `fidl:"4" fidl_offset_v1:"20" fidl_offset_v1_no_ee:"20"`
+	Code int16            `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	S    ControlInterface `fidl:"4" fidl_offset_v1:"4" fidl_offset_v1_no_ee:"4"`
 }
 
 var _mproviderSocketResponse = _bindings.CreateLazyMarshaler(providerSocketResponse{})
@@ -907,12 +912,17 @@
 }
 
 func (s_ *ProviderStub) DispatchImpl(ordinal_ uint64, data_ []byte, handles_ []_zx.Handle) (_bindings.Message, bool, error) {
+	var ctx_ _bindings.MarshalerContext
+	return s_.DispatchImplWithCtx(ordinal_, ctx_, data_, handles_)
+}
+
+func (s_ *ProviderStub) DispatchImplWithCtx(ordinal_ uint64, ctx_ _bindings.MarshalerContext, data_ []byte, handles_ []_zx.Handle) (_bindings.Message, bool, error) {
 	switch ordinal_ {
 	case ProviderSocketOrdinal:
 		fallthrough
 	case ProviderSocketGenOrdinal:
 		in_ := providerSocketRequest{}
-		if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
+		if _, _, err_ := _bindings.UnmarshalWithContext(ctx_, data_, handles_, &in_); err_ != nil {
 			return nil, false, err_
 		}
 		code, s, err_ := s_.Impl.Socket(in_.Domain, in_.Type, in_.Protocol)
