diff --git a/.golangci.yaml b/.golangci.yaml index 59a58315..086a010b 100644 --- a/.golangci.yaml +++ b/.golangci.yaml @@ -9,7 +9,7 @@ version: "2" run: modules-download-mode: readonly - timeout: 3m0s # none by default in v2 + timeout: 10m0s # none by default in v2 formatters: enable: @@ -126,6 +126,8 @@ linters: - github.com/mdlayher/arp # for github.com/sapcc/vpa_butler - k8s.io/client-go + # until https://github.com/openconfig/ygnmi/pull/157 is merged + - github.com/openconfig/ygnmi toolchain-forbidden: true go-version-pattern: 1\.\d+(\.0)?$ gosec: @@ -183,6 +185,7 @@ linters: - third_party$ - builtin$ - examples$ + - internal/provider/openconfig output: formats: diff --git a/.goreleaser.yaml b/.goreleaser.yaml index 1902b5f4..0f96bdb8 100644 --- a/.goreleaser.yaml +++ b/.goreleaser.yaml @@ -36,7 +36,7 @@ builds: - -X github.com/sapcc/go-api-declarations/bininfo.version={{ .Version }} - -X github.com/sapcc/go-api-declarations/bininfo.commit={{ .FullCommit }} - -X github.com/sapcc/go-api-declarations/bininfo.buildDate={{ .CommitDate }} # use CommitDate instead of Date for reproducibility - main: ./cmd/manager + main: ./cmd # Set the modified timestamp on the output binary to ensure that builds are reproducible. mod_timestamp: "{{ .CommitTimestamp }}" diff --git a/Makefile b/Makefile index 24aa71d6..4bfb054e 100644 --- a/Makefile +++ b/Makefile @@ -42,7 +42,7 @@ install-kustomize: FORCE fmt: FORCE install-gofumpt @printf "\e[1;36m>> gofumpt -l -w .\e[0m\n" - @gofumpt -l -w . + @gofumpt -l -w $(shell git ls-files '*.go' | grep -v '^internal/provider/openconfig') # Run the e2e tests against a k8s cluster. test-e2e: FORCE @@ -84,17 +84,13 @@ undeploy: FORCE install-kustomize # Install CRDs into the k8s cluster deploy-crds: FORCE generate install-kustomize - @if [ -d config/crd ]; then \ - @printf "\e[1;36m>> kustomize build config/crd | kubectl apply -f -\e[0m\n"; \ - @kustomize build config/crd | kubectl apply -f -; \ - fi + @printf "\e[1;36m>> kustomize build config/crd | kubectl apply -f -\e[0m\n" + @kustomize build config/crd | kubectl apply -f - # Uninstall CRDs from the k8s cluster undeploy-crds: FORCE install-kustomize - @if [ -d config/crd ]; then \ - @printf "\e[1;36m>> kustomize build config/crd | kubectl delete -f -\e[0m\n"; \ - @kustomize build config/crd | kubectl delete --ignore-not-found=true -f -; \ - fi + @printf "\e[1;36m>> kustomize build config/crd | kubectl delete -f -\e[0m\n" + @kustomize build config/crd | kubectl delete --ignore-not-found=true -f - # Create a Kind cluster for local development and testing. kind-create: FORCE @@ -173,7 +169,7 @@ BININFO_BUILD_DATE ?= $(shell date -u +"%Y-%m-%dT%H:%M:%SZ") build-all: build/network-operator build/network-operator: FORCE generate - env $(GO_BUILDENV) go build $(GO_BUILDFLAGS) -ldflags '-s -w -X github.com/sapcc/go-api-declarations/bininfo.binName=network-operator -X github.com/sapcc/go-api-declarations/bininfo.version=$(BININFO_VERSION) -X github.com/sapcc/go-api-declarations/bininfo.commit=$(BININFO_COMMIT_HASH) -X github.com/sapcc/go-api-declarations/bininfo.buildDate=$(BININFO_BUILD_DATE) $(GO_LDFLAGS)' -o build/network-operator ./cmd/manager + env $(GO_BUILDENV) go build $(GO_BUILDFLAGS) -ldflags '-s -w -X github.com/sapcc/go-api-declarations/bininfo.binName=network-operator -X github.com/sapcc/go-api-declarations/bininfo.version=$(BININFO_VERSION) -X github.com/sapcc/go-api-declarations/bininfo.commit=$(BININFO_COMMIT_HASH) -X github.com/sapcc/go-api-declarations/bininfo.buildDate=$(BININFO_BUILD_DATE) $(GO_LDFLAGS)' -o build/network-operator ./cmd DESTDIR = ifeq ($(shell uname -s),Darwin) @@ -192,7 +188,7 @@ ifeq ($(GO_TESTPKGS),) GO_TESTPKGS := ./... endif # which packages to measure coverage for -GO_COVERPKGS := $(shell go list ./... | grep -E '/internal') +GO_COVERPKGS := $(shell go list ./... | grep -E '/internal' | grep -Ev '/internal/provider/openconfig') # to get around weird Makefile syntax restrictions, we need variables containing nothing, a space and comma null := space := $(null) $(null) diff --git a/Makefile.maker.yaml b/Makefile.maker.yaml index d22f2961..4c41b6c4 100644 --- a/Makefile.maker.yaml +++ b/Makefile.maker.yaml @@ -5,7 +5,7 @@ metadata: binaries: - name: network-operator - fromPackage: ./cmd/manager + fromPackage: ./cmd installTo: bin/ controllerGen: @@ -16,6 +16,7 @@ controllerGen: coverageTest: only: "/internal" + except: "/internal/provider/openconfig" dockerfile: enabled: false @@ -25,6 +26,9 @@ golang: golangciLint: createConfig: true + skipDirs: + - internal/provider/openconfig + timeout: 10m goReleaser: createConfig: true @@ -76,7 +80,7 @@ verbatim: | fmt: FORCE install-gofumpt @printf "\e[1;36m>> gofumpt -l -w .\e[0m\n" - @gofumpt -l -w . + @gofumpt -l -w $(shell git ls-files '*.go' | grep -v '^internal/provider/openconfig') # Run the e2e tests against a k8s cluster. test-e2e: FORCE @@ -118,17 +122,13 @@ verbatim: | # Install CRDs into the k8s cluster deploy-crds: FORCE generate install-kustomize - @if [ -d config/crd ]; then \ - @printf "\e[1;36m>> kustomize build config/crd | kubectl apply -f -\e[0m\n"; \ - @kustomize build config/crd | kubectl apply -f -; \ - fi + @printf "\e[1;36m>> kustomize build config/crd | kubectl apply -f -\e[0m\n" + @kustomize build config/crd | kubectl apply -f - # Uninstall CRDs from the k8s cluster undeploy-crds: FORCE install-kustomize - @if [ -d config/crd ]; then \ - @printf "\e[1;36m>> kustomize build config/crd | kubectl delete -f -\e[0m\n"; \ - @kustomize build config/crd | kubectl delete --ignore-not-found=true -f -; \ - fi + @printf "\e[1;36m>> kustomize build config/crd | kubectl delete -f -\e[0m\n" + @kustomize build config/crd | kubectl delete --ignore-not-found=true -f - # Create a Kind cluster for local development and testing. kind-create: FORCE diff --git a/PROJECT b/PROJECT index fab007d7..754b153c 100644 --- a/PROJECT +++ b/PROJECT @@ -2,11 +2,21 @@ # This file is used to track the info used to scaffold your project # and allow the plugins properly work. # More info: https://book.kubebuilder.io/reference/project-config.html -domain: ironcore.dev +domain: cloud.sap layout: - go.kubebuilder.io/v4 plugins: helm.kubebuilder.io/v1-alpha: {} projectName: network-operator repo: github.com/ironcore-dev/network-operator +resources: +- api: + crdVersion: v1 + namespaced: true + controller: true + domain: cloud.sap + group: networking + kind: Interface + path: github.com/ironcore-dev/network-operator/api/v1alpha1 + version: v1alpha1 version: "3" diff --git a/Tiltfile b/Tiltfile index cd564482..f9ce7544 100644 --- a/Tiltfile +++ b/Tiltfile @@ -11,10 +11,22 @@ docker_build('controller:latest', '.', ignore=['*/*/zz_generated.deepcopy.go', ' 'api/', 'cmd/', 'hack/', 'internal/', 'go.mod', 'go.sum', 'Makefile', ]) +local_resource('controller-gen', 'make generate', ignore=['*/*/zz_generated.deepcopy.go', 'config/crd/bases/*'], deps=[ + 'api/', 'cmd/', 'hack/', 'internal/', 'go.mod', 'go.sum', 'Makefile', +]) + k8s_yaml(kustomize('config/default')) -k8s_resource('network-operator-controller-manager') +k8s_resource('network-operator-controller-manager', resource_deps=['controller-gen']) + +# Sample resources with manual trigger mode +k8s_yaml('./config/samples/v1alpha1_interface.yaml') +k8s_resource(new_name='lo0', objects=['lo0:interface'], trigger_mode=TRIGGER_MODE_MANUAL, auto_init=False) +k8s_resource(new_name='lo1', objects=['lo1:interface'], trigger_mode=TRIGGER_MODE_MANUAL, auto_init=False) +k8s_resource(new_name='eth1-1', objects=['eth1-1:interface'], trigger_mode=TRIGGER_MODE_MANUAL, auto_init=False) +k8s_resource(new_name='eth1-2', objects=['eth1-2:interface'], trigger_mode=TRIGGER_MODE_MANUAL, auto_init=False) +k8s_resource(new_name='eth1-10', objects=['eth1-10:interface'], trigger_mode=TRIGGER_MODE_MANUAL, auto_init=False) print('🚀 network-operator development environment') -print('👉 Edit the controller code inside the api/, cmd/, or internal/ directories') +print('👉 Edit the code inside the api/, cmd/, or internal/ directories') print('👉 Tilt will automatically rebuild and redeploy when changes are detected') # vim: ft=tiltfile syn=python diff --git a/api/v1alpha1/groupversion_info.go b/api/v1alpha1/groupversion_info.go new file mode 100644 index 00000000..e29f0dbc --- /dev/null +++ b/api/v1alpha1/groupversion_info.go @@ -0,0 +1,55 @@ +// SPDX-FileCopyrightText: 2025 SAP SE or an SAP affiliate company and IronCore contributors +// SPDX-License-Identifier: Apache-2.0 + +// Package v1alpha1 contains API Schema definitions for the networking.cloud.sap v1alpha1 API group. +// +kubebuilder:validation:Required +// +kubebuilder:object:generate=true +// +groupName=networking.cloud.sap +package v1alpha1 + +import ( + "k8s.io/apimachinery/pkg/runtime/schema" + "sigs.k8s.io/controller-runtime/pkg/scheme" +) + +var ( + // GroupVersion is group version used to register these objects. + GroupVersion = schema.GroupVersion{Group: "networking.cloud.sap", Version: "v1alpha1"} + + // SchemeBuilder is used to add go types to the GroupVersionKind scheme. + SchemeBuilder = &scheme.Builder{GroupVersion: GroupVersion} + + // AddToScheme adds the types in this group-version to the given scheme. + AddToScheme = SchemeBuilder.AddToScheme +) + +// WatchLabel is a label that can be applied to any Network API object. +// +// Controllers which allow for selective reconciliation may check this label and proceed +// with reconciliation of the object only if this label and a configured value is present. +const WatchLabel = "networking.cloud.sap/watch-filter" + +// FinalizerName is the identifier used by the controllers to perform cleanup before a resource is deleted. +// It is added when the resource is created and ensures that the controller can handle teardown logic +// (e.g., deleting external dependencies) before Kubernetes finalizes the deletion. +const FinalizerName = "networking.cloud.sap/finalizer" + +// Condition types that are used across different objects. +const ( + // Ready is the top-level status condition that reports if an object is ready. + // This condition indicates whether the resource is ready to be used and will be calculated by the + // controller based on child conditions, if present. + ReadyCondition = "Ready" +) + +// Reasons that are used across different objects. +const ( + // ReadyReason indicates that the resource is ready for use. + ReadyReason = "Ready" + + // NotReadyReason indicates that the resource is not ready for use. + NotReadyReason = "NotReady" + + // ReconcilePendingReason indicates that the controller is waiting for resources to be reconciled. + ReconcilePendingReason = "ReconcilePending" +) diff --git a/api/v1alpha1/interface_types.go b/api/v1alpha1/interface_types.go new file mode 100644 index 00000000..d9041616 --- /dev/null +++ b/api/v1alpha1/interface_types.go @@ -0,0 +1,179 @@ +// SPDX-FileCopyrightText: 2025 SAP SE or an SAP affiliate company and IronCore contributors +// SPDX-License-Identifier: Apache-2.0 + +package v1alpha1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// InterfaceSpec defines the desired state of Interface. +// +// +kubebuilder:validation:XValidation:rule="!has(self.switchport) || !has(self.ipv4Addresses)", message="switchport and ipv4Addresses are mutually exclusive" +// +kubebuilder:validation:XValidation:rule="self.type != 'Loopback' || !has(self.switchport)", message="switchport must not be specified for interfaces of type Loopback" +type InterfaceSpec struct { + // Name is the name of the interface. + // +kubebuilder:validation:MaxLength=255 + // +required + Name string `json:"name"` + + // AdminState indicates whether the interface is administratively up or down. + // + // +required + AdminState AdminState `json:"adminState,omitempty"` + + // Description provides a human-readable description of the interface. + // + // +kubebuilder:validation:MaxLength=255 + // +optional + Description string `json:"description,omitempty"` + + // Type indicates the type of the interface. + // + // +required + Type InterfaceType `json:"type,omitempty"` + + // MTU (Maximum Transmission Unit) specifies the size of the largest packet that can be sent over the interface. + // + // +kubebuilder:validation:Minimum=576 + // +kubebuilder:validation:Maximum=9216 + // +optional + MTU int32 `json:"mtu,omitempty"` + + // Switchport defines the switchport configuration for the interface. + // This is only applicable for interfaces that are switchports (e.g., Ethernet interfaces). + // + // +optional + Switchport *Switchport `json:"switchport,omitempty"` + + // Ipv4Addresses is the list of IPv4 addresses assigned to the interface. + // Each address should be given either in CIDR notation (e.g., "10.0.0.1/32") + // or as interface reference in the form of "unnumbered:" (e.g., "unnumbered:lo0"). + // + // +kubebuilder:validation:items:Pattern=`^(?:(?:\d{1,3}\.){3}\d{1,3}\/\d{1,2}?|unnumbered:[\w-]+)$` + // +optional + IPv4Addresses []string `json:"ipv4Addresses,omitempty"` +} + +// AdminState represents the administrative state of the interface. +// +// +kubebuilder:validation:Enum=Up;Down +type AdminState string + +const ( + // AdminStateUp indicates that the interface is administratively set up. + AdminStateUp AdminState = "Up" + // AdminStateDown indicates that the interface is administratively set down. + AdminStateDown AdminState = "Down" +) + +// InterfaceType represents the type of the interface. +// +// +kubebuilder:validation:Enum=Physical;Loopback +type InterfaceType string + +const ( + // InterfaceTypePhysical indicates that the interface is a physical/ethernet interface. + InterfaceTypePhysical InterfaceType = "Physical" + // InterfaceTypeLoopback indicates that the interface is a loopback interface. + InterfaceTypeLoopback InterfaceType = "Loopback" +) + +// Switchport defines the switchport configuration for an interface. +// +// +kubebuilder:validation:XValidation:rule="self.mode != 'Access' || has(self.accessVlan)", message="accessVlan must be specified when mode is Access" +// +kubebuilder:validation:XValidation:rule="self.mode != 'Trunk' || has(self.nativeVlan)", message="nativeVlan must be specified when mode is Trunk" +// +kubebuilder:validation:XValidation:rule="self.mode != 'Trunk' || has(self.allowedVlans)", message="allowedVlans must be specified when mode is Trunk" +type Switchport struct { + // Mode defines the switchport mode, such as access or trunk. + // + // +required + Mode SwitchportMode `json:"mode,omitempty"` + + // AccessVlan specifies the VLAN ID for access mode switchports. + // Only applicable when Mode is set to "Access". + // + // +kubebuilder:validation:Minimum=1 + // +kubebuilder:validation:Maximum=4094 + // +optional + AccessVlan int32 `json:"accessVlan,omitempty"` + + // NativeVlan specifies the native VLAN ID for trunk mode switchports. + // Only applicable when Mode is set to "Trunk". + // + // +kubebuilder:validation:Minimum=1 + // +kubebuilder:validation:Maximum=4094 + // +optional + NativeVlan int32 `json:"nativeVlan,omitempty"` + + // AllowedVlans is a list of VLAN IDs that are allowed on the trunk port. + // Only applicable when Mode is set to "Trunk". + // + // +kubebuilder:validation:MinItems=1 + // +kubebuilder:validation:items:Minimum=1 + // +kubebuilder:validation:items:Maximum=4094 + // +optional + AllowedVlans []int32 `json:"allowedVlans,omitempty"` +} + +// SwitchportMode represents the switchport mode of an interface. +// +// +kubebuilder:validation:Enum=Access;Trunk +type SwitchportMode string + +const ( + // SwitchportModeAccess indicates that the switchport is in access mode. + SwitchportModeAccess SwitchportMode = "Access" + // SwitchportModeTrunk indicates that the switchport is in trunk mode. + SwitchportModeTrunk SwitchportMode = "Trunk" +) + +// InterfaceStatus defines the observed state of Interface. +type InterfaceStatus struct { + // The conditions are a list of status objects that describe the state of the Interface. + //+listType=map + //+listMapKey=type + //+patchStrategy=merge + //+patchMergeKey=type + //+optional + Conditions []metav1.Condition `json:"conditions,omitempty" patchStrategy:"merge" patchMergeKey:"type"` +} + +// +kubebuilder:object:root=true +// +kubebuilder:subresource:status +// +kubebuilder:resource:path=interfaces +// +kubebuilder:resource:singular=interface +// +kubebuilder:resource:shortName=int +// +kubebuilder:printcolumn:name="Interface",type=string,JSONPath=`.spec.name` +// +kubebuilder:printcolumn:name="Admin State",type=string,JSONPath=`.spec.adminState` +// +kubebuilder:printcolumn:name="Description",type=string,JSONPath=`.spec.description` +// +kubebuilder:printcolumn:name="MTU",type=string,JSONPath=`.spec.mtu` +// +kubebuilder:printcolumn:name="Age",type="date",JSONPath=".metadata.creationTimestamp" + +// Interface is the Schema for the interfaces API. +type Interface struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty"` + + // Specification of the desired state of the resource. + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status + Spec InterfaceSpec `json:"spec,omitempty"` + + // Status of the resource. This is set and updated automatically. + // Read-only. + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status + Status InterfaceStatus `json:"status,omitempty"` +} + +// +kubebuilder:object:root=true + +// InterfaceList contains a list of Interface. +type InterfaceList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty"` + Items []Interface `json:"items"` +} + +func init() { + SchemeBuilder.Register(&Interface{}, &InterfaceList{}) +} diff --git a/api/v1alpha1/zz_generated.deepcopy.go b/api/v1alpha1/zz_generated.deepcopy.go new file mode 100644 index 00000000..519839de --- /dev/null +++ b/api/v1alpha1/zz_generated.deepcopy.go @@ -0,0 +1,139 @@ +//go:build !ignore_autogenerated + +// SPDX-FileCopyrightText: 2025 SAP SE or an SAP affiliate company and IronCore contributors +// SPDX-License-Identifier: Apache-2.0 + +// Code generated by controller-gen. DO NOT EDIT. + +package v1alpha1 + +import ( + "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" +) + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Interface) DeepCopyInto(out *Interface) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + in.Status.DeepCopyInto(&out.Status) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Interface. +func (in *Interface) DeepCopy() *Interface { + if in == nil { + return nil + } + out := new(Interface) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *Interface) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *InterfaceList) DeepCopyInto(out *InterfaceList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Interface, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InterfaceList. +func (in *InterfaceList) DeepCopy() *InterfaceList { + if in == nil { + return nil + } + out := new(InterfaceList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *InterfaceList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *InterfaceSpec) DeepCopyInto(out *InterfaceSpec) { + *out = *in + if in.Switchport != nil { + in, out := &in.Switchport, &out.Switchport + *out = new(Switchport) + (*in).DeepCopyInto(*out) + } + if in.IPv4Addresses != nil { + in, out := &in.IPv4Addresses, &out.IPv4Addresses + *out = make([]string, len(*in)) + copy(*out, *in) + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InterfaceSpec. +func (in *InterfaceSpec) DeepCopy() *InterfaceSpec { + if in == nil { + return nil + } + out := new(InterfaceSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *InterfaceStatus) DeepCopyInto(out *InterfaceStatus) { + *out = *in + if in.Conditions != nil { + in, out := &in.Conditions, &out.Conditions + *out = make([]v1.Condition, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InterfaceStatus. +func (in *InterfaceStatus) DeepCopy() *InterfaceStatus { + if in == nil { + return nil + } + out := new(InterfaceStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Switchport) DeepCopyInto(out *Switchport) { + *out = *in + if in.AllowedVlans != nil { + in, out := &in.AllowedVlans, &out.AllowedVlans + *out = make([]int32, len(*in)) + copy(*out, *in) + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Switchport. +func (in *Switchport) DeepCopy() *Switchport { + if in == nil { + return nil + } + out := new(Switchport) + in.DeepCopyInto(out) + return out +} diff --git a/cmd/manager/main.go b/cmd/main.go similarity index 86% rename from cmd/manager/main.go rename to cmd/main.go index d7001db1..25e8dbdf 100644 --- a/cmd/manager/main.go +++ b/cmd/main.go @@ -6,8 +6,10 @@ package main import ( "crypto/tls" "flag" + "fmt" "os" "path/filepath" + "strings" // Import all Kubernetes client auth plugins (e.g. Azure, GCP, OIDC, etc.) // to ensure that exec-entrypoint and run can make use of them. @@ -31,6 +33,13 @@ import ( "sigs.k8s.io/controller-runtime/pkg/metrics/filters" metricsserver "sigs.k8s.io/controller-runtime/pkg/metrics/server" "sigs.k8s.io/controller-runtime/pkg/webhook" + + // Import all supported provider implementations. + _ "github.com/ironcore-dev/network-operator/internal/provider/openconfig" + + "github.com/ironcore-dev/network-operator/api/v1alpha1" + "github.com/ironcore-dev/network-operator/internal/controller" + "github.com/ironcore-dev/network-operator/internal/provider" // +kubebuilder:scaffold:imports ) @@ -41,7 +50,7 @@ var ( func init() { utilruntime.Must(clientgoscheme.AddToScheme(scheme)) - + utilruntime.Must(v1alpha1.AddToScheme(scheme)) // +kubebuilder:scaffold:scheme } @@ -57,6 +66,8 @@ func main() { var secureMetrics bool var enableHTTP2 bool var tlsOpts []func(*tls.Config) + var watchFilterValue string + var providerName string flag.StringVar(&metricsAddr, "metrics-bind-address", "0", "The address the metrics endpoint binds to. Use :8443 for HTTPS or :8080 for HTTP, or leave as 0 to disable the metrics service.") flag.StringVar(&probeAddr, "health-probe-bind-address", ":8081", "The address the probe endpoint binds to.") flag.BoolVar(&enableLeaderElection, "leader-elect", false, "Enable leader election for controller manager. Enabling this will ensure there is only one active controller manager.") @@ -68,6 +79,8 @@ func main() { flag.StringVar(&metricsCertName, "metrics-cert-name", "tls.crt", "The name of the metrics server certificate file.") flag.StringVar(&metricsCertKey, "metrics-cert-key", "tls.key", "The name of the metrics server key file.") flag.BoolVar(&enableHTTP2, "enable-http2", false, "If set, HTTP/2 will be enabled for the metrics and webhook servers") + flag.StringVar(&watchFilterValue, "watch-filter", "", fmt.Sprintf("Label value that the controller watches to reconcile api objects. Label key is always %q. If unspecified, the controller watches for all api objects.", v1alpha1.WatchLabel)) + flag.StringVar(&providerName, "provider", "openconfig", "The provider to use for the controller. If not specified, the default provider is used. Available providers: "+strings.Join(provider.Providers(), ", ")) opts := zap.Options{ Development: true, TimeEncoder: zapcore.ISO8601TimeEncoder, @@ -190,6 +203,23 @@ func main() { os.Exit(1) } + prov, err := provider.Get(providerName) + if err != nil { + setupLog.Error(err, "failed to get provider", "provider", providerName) + os.Exit(1) + } + + if err = (&controller.InterfaceReconciler{ + Client: mgr.GetClient(), + Scheme: mgr.GetScheme(), + Recorder: mgr.GetEventRecorderFor("interface-controller"), + WatchFilterValue: watchFilterValue, + Provider: prov, + }).SetupWithManager(mgr); err != nil { + setupLog.Error(err, "unable to create controller", "controller", "Interface") + os.Exit(1) + } + // +kubebuilder:scaffold:builder if metricsCertWatcher != nil { diff --git a/config/crd/bases/networking.cloud.sap_interfaces.yaml b/config/crd/bases/networking.cloud.sap_interfaces.yaml new file mode 100644 index 00000000..91ee63ad --- /dev/null +++ b/config/crd/bases/networking.cloud.sap_interfaces.yaml @@ -0,0 +1,231 @@ +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.18.0 + name: interfaces.networking.cloud.sap +spec: + group: networking.cloud.sap + names: + kind: Interface + listKind: InterfaceList + plural: interfaces + shortNames: + - int + singular: interface + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .spec.name + name: Interface + type: string + - jsonPath: .spec.adminState + name: Admin State + type: string + - jsonPath: .spec.description + name: Description + type: string + - jsonPath: .spec.mtu + name: MTU + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1alpha1 + schema: + openAPIV3Schema: + description: Interface is the Schema for the interfaces API. + properties: + apiVersion: + description: |- + APIVersion defines the versioned schema of this representation of an object. + Servers should convert recognized schemas to the latest internal value, and + may reject unrecognized values. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources + type: string + kind: + description: |- + Kind is a string value representing the REST resource this object represents. + Servers may infer this from the endpoint the client submits requests to. + Cannot be updated. + In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds + type: string + metadata: + type: object + spec: + description: |- + Specification of the desired state of the resource. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status + properties: + adminState: + description: AdminState indicates whether the interface is administratively + up or down. + enum: + - Up + - Down + type: string + description: + description: Description provides a human-readable description of + the interface. + maxLength: 255 + type: string + ipv4Addresses: + description: |- + Ipv4Addresses is the list of IPv4 addresses assigned to the interface. + Each address should be given either in CIDR notation (e.g., "10.0.0.1/32") + or as interface reference in the form of "unnumbered:" (e.g., "unnumbered:lo0"). + items: + pattern: ^(?:(?:\d{1,3}\.){3}\d{1,3}\/\d{1,2}?|unnumbered:[\w-]+)$ + type: string + type: array + mtu: + description: MTU (Maximum Transmission Unit) specifies the size of + the largest packet that can be sent over the interface. + format: int32 + maximum: 9216 + minimum: 576 + type: integer + name: + description: Name is the name of the interface. + maxLength: 255 + type: string + switchport: + description: |- + Switchport defines the switchport configuration for the interface. + This is only applicable for interfaces that are switchports (e.g., Ethernet interfaces). + properties: + accessVlan: + description: |- + AccessVlan specifies the VLAN ID for access mode switchports. + Only applicable when Mode is set to "Access". + format: int32 + maximum: 4094 + minimum: 1 + type: integer + allowedVlans: + description: |- + AllowedVlans is a list of VLAN IDs that are allowed on the trunk port. + Only applicable when Mode is set to "Trunk". + items: + format: int32 + maximum: 4094 + minimum: 1 + type: integer + minItems: 1 + type: array + mode: + description: Mode defines the switchport mode, such as access + or trunk. + enum: + - Access + - Trunk + type: string + nativeVlan: + description: |- + NativeVlan specifies the native VLAN ID for trunk mode switchports. + Only applicable when Mode is set to "Trunk". + format: int32 + maximum: 4094 + minimum: 1 + type: integer + required: + - mode + type: object + x-kubernetes-validations: + - message: accessVlan must be specified when mode is Access + rule: self.mode != 'Access' || has(self.accessVlan) + - message: nativeVlan must be specified when mode is Trunk + rule: self.mode != 'Trunk' || has(self.nativeVlan) + - message: allowedVlans must be specified when mode is Trunk + rule: self.mode != 'Trunk' || has(self.allowedVlans) + type: + description: Type indicates the type of the interface. + enum: + - Physical + - Loopback + type: string + required: + - adminState + - name + - type + type: object + x-kubernetes-validations: + - message: switchport and ipv4Addresses are mutually exclusive + rule: '!has(self.switchport) || !has(self.ipv4Addresses)' + - message: switchport must not be specified for interfaces of type Loopback + rule: self.type != 'Loopback' || !has(self.switchport) + status: + description: |- + Status of the resource. This is set and updated automatically. + Read-only. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status + properties: + conditions: + description: The conditions are a list of status objects that describe + the state of the Interface. + items: + description: Condition contains details for one aspect of the current + state of this API Resource. + properties: + lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. + format: date-time + type: string + message: + description: |- + message is a human readable message indicating details about the transition. + This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: |- + observedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: |- + reason contains a programmatic identifier indicating the reason for the condition's last transition. + Producers of specific condition types may define expected values and meanings for this field, + and whether the values are considered a guaranteed API. + The value should be a CamelCase string. + This field may not be empty. + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + type: object + type: object + served: true + storage: true + subresources: + status: {} diff --git a/config/crd/kustomization.yaml b/config/crd/kustomization.yaml new file mode 100644 index 00000000..0f50c981 --- /dev/null +++ b/config/crd/kustomization.yaml @@ -0,0 +1,16 @@ +# This kustomization.yaml is not intended to be run by itself, +# since it depends on service name and namespace that are out of this kustomize package. +# It should be run by config/default +resources: +- bases/networking.cloud.sap_interfaces.yaml +# +kubebuilder:scaffold:crdkustomizeresource + +patches: +# [WEBHOOK] To enable webhook, uncomment all the sections with [WEBHOOK] prefix. +# patches here are for enabling the conversion webhook for each CRD +# +kubebuilder:scaffold:crdkustomizewebhookpatch + +# [WEBHOOK] To enable webhook, uncomment the following section +# the following config is for teaching kustomize how to do kustomization for CRDs. +#configurations: +#- kustomizeconfig.yaml diff --git a/config/crd/kustomizeconfig.yaml b/config/crd/kustomizeconfig.yaml new file mode 100644 index 00000000..ec5c150a --- /dev/null +++ b/config/crd/kustomizeconfig.yaml @@ -0,0 +1,19 @@ +# This file is for teaching kustomize how to substitute name and namespace reference in CRD +nameReference: +- kind: Service + version: v1 + fieldSpecs: + - kind: CustomResourceDefinition + version: v1 + group: apiextensions.k8s.io + path: spec/conversion/webhook/clientConfig/service/name + +namespace: +- kind: CustomResourceDefinition + version: v1 + group: apiextensions.k8s.io + path: spec/conversion/webhook/clientConfig/service/namespace + create: false + +varReference: +- path: metadata/annotations diff --git a/config/default/kustomization.yaml b/config/default/kustomization.yaml index 9271d44d..a58a3136 100644 --- a/config/default/kustomization.yaml +++ b/config/default/kustomization.yaml @@ -15,7 +15,7 @@ namePrefix: network-operator- # someName: someValue resources: -#- ../crd +- ../crd - ../rbac - ../manager # [WEBHOOK] To enable webhook, uncomment all the sections with [WEBHOOK] prefix including the one in diff --git a/config/rbac/interface_admin_role.yaml b/config/rbac/interface_admin_role.yaml new file mode 100644 index 00000000..4b6edf2a --- /dev/null +++ b/config/rbac/interface_admin_role.yaml @@ -0,0 +1,27 @@ +# This rule is not used by the project network-operator itself. +# It is provided to allow the cluster admin to help manage permissions for users. +# +# Grants full permissions ('*') over networking.cloud.sap. +# This role is intended for users authorized to modify roles and bindings within the cluster, +# enabling them to delegate specific permissions to other users or groups as needed. + +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app.kubernetes.io/name: network-operator + app.kubernetes.io/managed-by: kustomize + name: interface-admin-role +rules: +- apiGroups: + - networking.cloud.sap + resources: + - interfaces + verbs: + - '*' +- apiGroups: + - networking.cloud.sap + resources: + - interfaces/status + verbs: + - get diff --git a/config/rbac/interface_editor_role.yaml b/config/rbac/interface_editor_role.yaml new file mode 100644 index 00000000..db37e24c --- /dev/null +++ b/config/rbac/interface_editor_role.yaml @@ -0,0 +1,33 @@ +# This rule is not used by the project network-operator itself. +# It is provided to allow the cluster admin to help manage permissions for users. +# +# Grants permissions to create, update, and delete resources within the networking.cloud.sap. +# This role is intended for users who need to manage these resources +# but should not control RBAC or manage permissions for others. + +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app.kubernetes.io/name: network-operator + app.kubernetes.io/managed-by: kustomize + name: interface-editor-role +rules: +- apiGroups: + - networking.cloud.sap + resources: + - interfaces + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - networking.cloud.sap + resources: + - interfaces/status + verbs: + - get diff --git a/config/rbac/interface_viewer_role.yaml b/config/rbac/interface_viewer_role.yaml new file mode 100644 index 00000000..3d0fb20a --- /dev/null +++ b/config/rbac/interface_viewer_role.yaml @@ -0,0 +1,29 @@ +# This rule is not used by the project network-operator itself. +# It is provided to allow the cluster admin to help manage permissions for users. +# +# Grants read-only access to networking.cloud.sap resources. +# This role is intended for users who need visibility into these resources +# without permissions to modify them. It is ideal for monitoring purposes and limited-access viewing. + +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app.kubernetes.io/name: network-operator + app.kubernetes.io/managed-by: kustomize + name: interface-viewer-role +rules: +- apiGroups: + - networking.cloud.sap + resources: + - interfaces + verbs: + - get + - list + - watch +- apiGroups: + - networking.cloud.sap + resources: + - interfaces/status + verbs: + - get diff --git a/config/rbac/kustomization.yaml b/config/rbac/kustomization.yaml index 5619aa00..eeddc3c6 100644 --- a/config/rbac/kustomization.yaml +++ b/config/rbac/kustomization.yaml @@ -18,3 +18,10 @@ resources: - metrics_auth_role.yaml - metrics_auth_role_binding.yaml - metrics_reader_role.yaml +# For each CRD, "Admin", "Editor" and "Viewer" roles are scaffolded by +# default, aiding admins in cluster management. Those roles are +# not used by the {{ .ProjectName }} itself. You can comment the following lines +# if you do not want those helpers be installed with your Project. +- interface_admin_role.yaml +- interface_editor_role.yaml +- interface_viewer_role.yaml diff --git a/config/rbac/role.yaml b/config/rbac/role.yaml index 2c99b628..5ec318b3 100644 --- a/config/rbac/role.yaml +++ b/config/rbac/role.yaml @@ -1,11 +1,39 @@ +--- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: - labels: - app.kubernetes.io/name: network-operator - app.kubernetes.io/managed-by: kustomize name: manager-role rules: -- apiGroups: [""] - resources: ["pods"] - verbs: ["get", "list", "watch"] +- apiGroups: + - "" + resources: + - events + verbs: + - create + - patch +- apiGroups: + - networking.cloud.sap + resources: + - interfaces + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - networking.cloud.sap + resources: + - interfaces/finalizers + verbs: + - update +- apiGroups: + - networking.cloud.sap + resources: + - interfaces/status + verbs: + - get + - patch + - update diff --git a/config/samples/kustomization.yaml b/config/samples/kustomization.yaml new file mode 100644 index 00000000..cdf365e4 --- /dev/null +++ b/config/samples/kustomization.yaml @@ -0,0 +1,4 @@ +## Append samples of your project ## +resources: +- v1alpha1_interface.yaml +# +kubebuilder:scaffold:manifestskustomizesamples diff --git a/config/samples/v1alpha1_interface.yaml b/config/samples/v1alpha1_interface.yaml new file mode 100644 index 00000000..97900e54 --- /dev/null +++ b/config/samples/v1alpha1_interface.yaml @@ -0,0 +1,86 @@ +apiVersion: networking.cloud.sap/v1alpha1 +kind: Interface +metadata: + labels: + app.kubernetes.io/name: network-operator + app.kubernetes.io/managed-by: kustomize + networking.cloud.sap/device-name: leaf1 + name: lo0 +spec: + name: lo0 + description: Router-ID Leaf1 + adminState: Up + type: Loopback + mtu: 1500 + ipv4Addresses: + - 10.0.0.10/32 +--- +apiVersion: networking.cloud.sap/v1alpha1 +kind: Interface +metadata: + labels: + app.kubernetes.io/name: network-operator + app.kubernetes.io/managed-by: kustomize + networking.cloud.sap/device-name: leaf1 + name: lo1 +spec: + name: lo1 + description: VTEP Leaf1 + adminState: Up + type: Loopback + mtu: 1500 + ipv4Addresses: + - 10.0.1.10/32 +--- +apiVersion: networking.cloud.sap/v1alpha1 +kind: Interface +metadata: + labels: + app.kubernetes.io/name: network-operator + app.kubernetes.io/managed-by: kustomize + networking.cloud.sap/device-name: leaf1 + name: eth1-1 +spec: + name: eth1/1 + description: Leaf1 to Spine1 + adminState: Up + type: Physical + mtu: 9216 + ipv4Addresses: + - unnumbered:lo0 +--- +apiVersion: networking.cloud.sap/v1alpha1 +kind: Interface +metadata: + labels: + app.kubernetes.io/name: network-operator + app.kubernetes.io/managed-by: kustomize + networking.cloud.sap/device-name: leaf1 + name: eth1-2 +spec: + name: eth1/2 + description: Leaf1 to Spine2 + adminState: Up + type: Physical + mtu: 9216 + ipv4Addresses: + - unnumbered:lo0 +--- +apiVersion: networking.cloud.sap/v1alpha1 +kind: Interface +metadata: + labels: + app.kubernetes.io/name: network-operator + app.kubernetes.io/managed-by: kustomize + networking.cloud.sap/device-name: leaf1 + name: eth1-10 +spec: + name: eth1/10 + description: Leaf1 to Host1 + adminState: Up + type: Physical + mtu: 9216 + switchport: + mode: Trunk + nativeVlan: 1 + allowedVlans: [10] diff --git a/go.mod b/go.mod index f59994ac..37d9fdc3 100644 --- a/go.mod +++ b/go.mod @@ -3,19 +3,25 @@ module github.com/ironcore-dev/network-operator go 1.24 require ( - github.com/onsi/ginkgo/v2 v2.22.0 - github.com/onsi/gomega v1.36.1 + github.com/onsi/ginkgo/v2 v2.23.3 + github.com/onsi/gomega v1.36.3 + github.com/openconfig/gnmi v0.14.0 + github.com/openconfig/goyang v1.6.2 + github.com/openconfig/ygnmi v0.12.0 + github.com/openconfig/ygot v0.32.0 github.com/sapcc/go-api-declarations v1.16.0 go.uber.org/automaxprocs v1.6.0 go.uber.org/zap v1.27.0 - k8s.io/apimachinery v0.32.1 - k8s.io/client-go v0.32.1 + google.golang.org/grpc v1.71.0 + k8s.io/api v0.32.3 + k8s.io/apimachinery v0.32.3 + k8s.io/client-go v0.32.3 k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738 - sigs.k8s.io/controller-runtime v0.20.2 + sigs.k8s.io/controller-runtime v0.20.3 ) require ( - cel.dev/expr v0.18.0 // indirect + cel.dev/expr v0.19.1 // indirect github.com/antlr4-go/antlr/v4 v4.13.0 // indirect github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a // indirect github.com/beorn7/perks v1.0.1 // indirect @@ -26,7 +32,7 @@ require ( github.com/emicklei/go-restful/v3 v3.11.0 // indirect github.com/evanphx/json-patch/v5 v5.9.11 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect - github.com/fsnotify/fsnotify v1.7.0 // indirect + github.com/fsnotify/fsnotify v1.8.0 // indirect github.com/fxamacker/cbor/v2 v2.7.0 // indirect github.com/go-logr/logr v1.4.2 // indirect github.com/go-logr/stdr v1.2.2 // indirect @@ -36,65 +42,69 @@ require ( github.com/go-openapi/swag v0.23.0 // indirect github.com/go-task/slim-sprig/v3 v3.0.0 // indirect github.com/gogo/protobuf v1.3.2 // indirect + github.com/golang/glog v1.2.4 // indirect github.com/golang/protobuf v1.5.4 // indirect github.com/google/btree v1.1.3 // indirect github.com/google/cel-go v0.22.0 // indirect - github.com/google/gnostic-models v0.6.8 // indirect - github.com/google/go-cmp v0.6.0 // indirect + github.com/google/gnostic-models v0.6.9 // indirect + github.com/google/go-cmp v0.7.0 // indirect github.com/google/gofuzz v1.2.0 // indirect - github.com/google/pprof v0.0.0-20241029153458-d1b30febd7db // indirect + github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad // indirect github.com/google/uuid v1.6.0 // indirect github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/josharian/intern v1.0.0 // indirect github.com/json-iterator/go v1.1.12 // indirect + github.com/kylelemons/godebug v1.1.0 // indirect github.com/mailru/easyjson v0.7.7 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect + github.com/openconfig/gocloser v0.0.0-20220310182203-c6c950ed3b0b // indirect github.com/pkg/errors v0.9.1 // indirect github.com/prometheus/client_golang v1.19.1 // indirect github.com/prometheus/client_model v0.6.1 // indirect github.com/prometheus/common v0.55.0 // indirect github.com/prometheus/procfs v0.15.1 // indirect - github.com/spf13/cobra v1.8.1 // indirect - github.com/spf13/pflag v1.0.5 // indirect + github.com/spf13/cobra v1.9.1 // indirect + github.com/spf13/pflag v1.0.6 // indirect github.com/stoewer/go-strcase v1.3.0 // indirect github.com/x448/float16 v0.8.4 // indirect + go.opentelemetry.io/auto/sdk v1.1.0 // indirect go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0 // indirect - go.opentelemetry.io/otel v1.28.0 // indirect + go.opentelemetry.io/otel v1.34.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.28.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.27.0 // indirect - go.opentelemetry.io/otel/metric v1.28.0 // indirect - go.opentelemetry.io/otel/sdk v1.28.0 // indirect - go.opentelemetry.io/otel/trace v1.28.0 // indirect + go.opentelemetry.io/otel/metric v1.34.0 // indirect + go.opentelemetry.io/otel/sdk v1.34.0 // indirect + go.opentelemetry.io/otel/trace v1.34.0 // indirect go.opentelemetry.io/proto/otlp v1.3.1 // indirect go.uber.org/multierr v1.11.0 // indirect - golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 // indirect - golang.org/x/net v0.30.0 // indirect - golang.org/x/oauth2 v0.23.0 // indirect - golang.org/x/sync v0.8.0 // indirect - golang.org/x/sys v0.26.0 // indirect - golang.org/x/term v0.25.0 // indirect - golang.org/x/text v0.19.0 // indirect + golang.org/x/exp v0.0.0-20250218142911-aa4b98e5adaa // indirect + golang.org/x/net v0.38.0 // indirect + golang.org/x/oauth2 v0.25.0 // indirect + golang.org/x/sync v0.12.0 // indirect + golang.org/x/sys v0.31.0 // indirect + golang.org/x/term v0.30.0 // indirect + golang.org/x/text v0.23.0 // indirect golang.org/x/time v0.7.0 // indirect - golang.org/x/tools v0.26.0 // indirect + golang.org/x/tools v0.30.0 // indirect gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20240826202546-f6391c0de4c7 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20240826202546-f6391c0de4c7 // indirect - google.golang.org/grpc v1.65.0 // indirect - google.golang.org/protobuf v1.35.1 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20250106144421-5f5ef82da422 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20250218202821-56aae31c358a // indirect + google.golang.org/protobuf v1.36.5 // indirect gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - k8s.io/api v0.32.1 // indirect - k8s.io/apiextensions-apiserver v0.32.1 // indirect - k8s.io/apiserver v0.32.1 // indirect - k8s.io/component-base v0.32.1 // indirect + k8s.io/apiextensions-apiserver v0.32.2 // indirect + k8s.io/apiserver v0.32.3 // indirect + k8s.io/component-base v0.32.3 // indirect k8s.io/klog/v2 v2.130.1 // indirect - k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f // indirect + k8s.io/kube-openapi v0.0.0-20241212222426-2c72e554b1e7 // indirect sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.31.0 // indirect sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3 // indirect - sigs.k8s.io/structured-merge-diff/v4 v4.4.2 // indirect + sigs.k8s.io/structured-merge-diff/v4 v4.6.0 // indirect sigs.k8s.io/yaml v1.4.0 // indirect ) + +replace github.com/openconfig/ygnmi => github.com/felix-kaestner/ygnmi v0.0.0-20250709083711-68dcb70888a5 diff --git a/go.sum b/go.sum index 551eec79..58ff5492 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,5 @@ -cel.dev/expr v0.18.0 h1:CJ6drgk+Hf96lkLikr4rFf19WrU0BOWEihyZnI2TAzo= -cel.dev/expr v0.18.0/go.mod h1:MrpN08Q+lEBs+bGYdLxxHkZoUSsCp0nSKTs0nTymJgw= +cel.dev/expr v0.19.1 h1:NciYrtDRIR0lNCnH1LFJegdjspNx9fI59O7TWcua/W4= +cel.dev/expr v0.19.1/go.mod h1:MrpN08Q+lEBs+bGYdLxxHkZoUSsCp0nSKTs0nTymJgw= github.com/antlr4-go/antlr/v4 v4.13.0 h1:lxCg3LAv+EUK6t1i0y1V6/SLeUi0eKEKdhQAlS8TVTI= github.com/antlr4-go/antlr/v4 v4.13.0/go.mod h1:pfChB/xh/Unjila75QW7+VU4TSnWnnk9UTnmpPaOR2g= github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a h1:idn718Q4B6AGu/h5Sxe66HYVdqdGu2l9Iebqhi/AEoA= @@ -12,7 +12,7 @@ github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK3 github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -24,10 +24,14 @@ github.com/evanphx/json-patch v0.5.2 h1:xVCHIVMUu1wtM/VkR9jVZ45N3FhZfYMMYGorLCR8 github.com/evanphx/json-patch v0.5.2/go.mod h1:ZWS5hhDbVDyob71nXKNL0+PWn6ToqBHMikGIFbs31qQ= github.com/evanphx/json-patch/v5 v5.9.11 h1:/8HVnzMq13/3x9TPvjG08wUGqBTmZBsCWzjTM0wiaDU= github.com/evanphx/json-patch/v5 v5.9.11/go.mod h1:3j+LviiESTElxA4p3EMKAB9HXj3/XEtnUf6OZxqIQTM= +github.com/felix-kaestner/ygnmi v0.0.0-20250706092647-7cf6d2affc51 h1:cArwmdDJ7qHbYH3gl11tcOxm4FPsWx9TX63bz9+VckQ= +github.com/felix-kaestner/ygnmi v0.0.0-20250706092647-7cf6d2affc51/go.mod h1:PdM5tOI2aCWSqfci5OagAyKJUNJ1IhYIGmSeRlMBVCI= +github.com/felix-kaestner/ygnmi v0.0.0-20250709083711-68dcb70888a5 h1:X28XGxzt794nzhWsATA5RQC1jTC1QkFRgp0McbocnKM= +github.com/felix-kaestner/ygnmi v0.0.0-20250709083711-68dcb70888a5/go.mod h1:PdM5tOI2aCWSqfci5OagAyKJUNJ1IhYIGmSeRlMBVCI= github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= -github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= -github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= +github.com/fsnotify/fsnotify v1.8.0 h1:dAwr6QBTBZIkG8roQaJjGof0pp0EeF+tNV7YBP3F/8M= +github.com/fsnotify/fsnotify v1.8.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0= github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv5E= github.com/fxamacker/cbor/v2 v2.7.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= @@ -49,22 +53,24 @@ github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1v github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/golang/glog v1.2.4 h1:CNNw5U8lSiiBk7druxtSHHTsRWcxKoac6kZKm2peBBc= +github.com/golang/glog v1.2.4/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w= github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= github.com/google/btree v1.1.3 h1:CVpQJjYgC4VbzxeGVHfvZrv1ctoYCAI8vbl07Fcxlyg= github.com/google/btree v1.1.3/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= github.com/google/cel-go v0.22.0 h1:b3FJZxpiv1vTMo2/5RDUqAHPxkT8mmMfJIrq1llbf7g= github.com/google/cel-go v0.22.0/go.mod h1:BuznPXXfQDpXKWQ9sPW3TzlAJN5zzFe+i9tIs0yC4s8= -github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I= -github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U= +github.com/google/gnostic-models v0.6.9 h1:MU/8wDLif2qCXZmzncUQ/BOfxWfthHi63KqpoNbWqVw= +github.com/google/gnostic-models v0.6.9/go.mod h1:CiWsm0s6BSQd1hRn8/QmxqB6BesYcbSZxsz9b0KuDBw= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= -github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= +github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/pprof v0.0.0-20241029153458-d1b30febd7db h1:097atOisP2aRj7vFgYQBbFN4U4JNXUNYpxael3UzMyo= -github.com/google/pprof v0.0.0-20241029153458-d1b30febd7db/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144= +github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad h1:a6HEuzUHeKH6hwfN/ZoQgRgVIWFJljSWa/zetS2WTvg= +github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0 h1:bkypFPDjIYGfCYD5mRBvpqxfYX1YCS1PXdKYWi8FsN0= @@ -84,6 +90,8 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= +github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= @@ -93,10 +101,20 @@ github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9G github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= -github.com/onsi/ginkgo/v2 v2.22.0 h1:Yed107/8DjTr0lKCNt7Dn8yQ6ybuDRQoMGrNFKzMfHg= -github.com/onsi/ginkgo/v2 v2.22.0/go.mod h1:7Du3c42kxCUegi0IImZ1wUQzMBVecgIHjR1C+NkhLQo= -github.com/onsi/gomega v1.36.1 h1:bJDPBO7ibjxcbHMgSCoo4Yj18UWbKDlLwX1x9sybDcw= -github.com/onsi/gomega v1.36.1/go.mod h1:PvZbdDc8J6XJEpDK4HCuRBm8a6Fzp9/DmhC9C7yFlog= +github.com/onsi/ginkgo/v2 v2.23.3 h1:edHxnszytJ4lD9D5Jjc4tiDkPBZ3siDeJJkUZJJVkp0= +github.com/onsi/ginkgo/v2 v2.23.3/go.mod h1:zXTP6xIp3U8aVuXN8ENK9IXRaTjFnpVB9mGmaSRvxnM= +github.com/onsi/gomega v1.36.3 h1:hID7cr8t3Wp26+cYnfcjR6HpJ00fdogN6dqZ1t6IylU= +github.com/onsi/gomega v1.36.3/go.mod h1:8D9+Txp43QWKhM24yyOBEdpkzN8FvJyAwecBgsU4KU0= +github.com/openconfig/gnmi v0.14.0 h1:lXAd3HgjtNBnLypevp0pxzpEXmsUD0TbKzaNJ/FboPM= +github.com/openconfig/gnmi v0.14.0/go.mod h1:whr6zVq9PCU8mV1D0K9v7Ajd3+swoN6Yam9n8OH3eT0= +github.com/openconfig/gocloser v0.0.0-20220310182203-c6c950ed3b0b h1:NSYuxdlOWLldNpid1dThR6Dci96juXioUguMho6aliI= +github.com/openconfig/gocloser v0.0.0-20220310182203-c6c950ed3b0b/go.mod h1:uhC/ybmPapgeyAL2b9ZrUQ+DZE+DB+J+/7377PX+lek= +github.com/openconfig/goyang v1.6.2 h1:LVwwlVIIt4nmwacW67yBsxzP5DhDM94SOEMWod1hEA0= +github.com/openconfig/goyang v1.6.2/go.mod h1:jzlGg+yjRpOcq1Kg6q6cSiLGQK5hrNNMsUx0fFxm4U0= +github.com/openconfig/grpctunnel v0.1.0 h1:EN99qtlExZczgQgp5ANnHRC/Rs62cAG+Tz2BQ5m/maM= +github.com/openconfig/grpctunnel v0.1.0/go.mod h1:G04Pdu0pml98tdvXrvLaU+EBo3PxYfI9MYqpvdaEHLo= +github.com/openconfig/ygot v0.32.0 h1:zGYVk/T7hgcMuxhxH5bN5tFxy3VhHlLN6ZabSeTATtk= +github.com/openconfig/ygot v0.32.0/go.mod h1:sMTAECRlEmETQ36XaAbWav5AFrR6EZlNNcHyZ7KHBDE= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= @@ -112,15 +130,15 @@ github.com/prometheus/common v0.55.0 h1:KEi6DK7lXW/m7Ig5i47x0vRzuBsHuvJdi5ee6Y3G github.com/prometheus/common v0.55.0/go.mod h1:2SECS4xJG1kd8XF9IcM1gMX6510RAEL65zxzNImwdc8= github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc= github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk= -github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= -github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= +github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= +github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/sapcc/go-api-declarations v1.16.0 h1:uMB6SFPBAClusbAWwmeMeUi5eHVf9FpZWWf3VwPrsIg= github.com/sapcc/go-api-declarations v1.16.0/go.mod h1:MWmLjmvjftgyAugNUfIhsDsHIzXH1pn32cWLZpiluKg= -github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM= -github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y= -github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= -github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/cobra v1.9.1 h1:CXSaggrXdbHK9CF+8ywj8Amf7PBRmPCOJugH954Nnlo= +github.com/spf13/cobra v1.9.1/go.mod h1:nDyEzZ8ogv936Cinf6g1RU9MRY64Ir93oCnqb9wxYW0= +github.com/spf13/pflag v1.0.6 h1:jFzHGLGAlb3ruxLB8MhbI6A8+AQX/2eW4qeyNZXNp2o= +github.com/spf13/pflag v1.0.6/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/stoewer/go-strcase v1.3.0 h1:g0eASXYtp+yvN9fK8sH94oCIk0fau9uV1/ZdJ0AVEzs= github.com/stoewer/go-strcase v1.3.0/go.mod h1:fAH5hQ5pehh+j3nZfvwdk2RgEgQjAoM8wodgtPmh1xo= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= @@ -130,26 +148,30 @@ github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UV github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= -github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= +github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM= github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA= +go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0 h1:4K4tsIXefpVJtvA/8srF4V4y0akAoPHkIslgAkjixJA= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0/go.mod h1:jjdQuTGVsXV4vSs+CJ2qYDeDPf9yIJV23qlIzBm73Vg= -go.opentelemetry.io/otel v1.28.0 h1:/SqNcYk+idO0CxKEUOtKQClMK/MimZihKYMruSMViUo= -go.opentelemetry.io/otel v1.28.0/go.mod h1:q68ijF8Fc8CnMHKyzqL6akLO46ePnjkgfIMIjUIX9z4= +go.opentelemetry.io/otel v1.34.0 h1:zRLXxLCgL1WyKsPVrgbSdMN4c0FMkDAskSTQP+0hdUY= +go.opentelemetry.io/otel v1.34.0/go.mod h1:OWFPOQ+h4G8xpyjgqo4SxJYdDQ/qmRH+wivy7zzx9oI= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.28.0 h1:3Q/xZUyC1BBkualc9ROb4G8qkH90LXEIICcs5zv1OYY= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.28.0/go.mod h1:s75jGIWA9OfCMzF0xr+ZgfrB5FEbbV7UuYo32ahUiFI= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.27.0 h1:qFffATk0X+HD+f1Z8lswGiOQYKHRlzfmdJm0wEaVrFA= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.27.0/go.mod h1:MOiCmryaYtc+V0Ei+Tx9o5S1ZjA7kzLucuVuyzBZloQ= -go.opentelemetry.io/otel/metric v1.28.0 h1:f0HGvSl1KRAU1DLgLGFjrwVyismPlnuU6JD6bOeuA5Q= -go.opentelemetry.io/otel/metric v1.28.0/go.mod h1:Fb1eVBFZmLVTMb6PPohq3TO9IIhUisDsbJoL/+uQW4s= -go.opentelemetry.io/otel/sdk v1.28.0 h1:b9d7hIry8yZsgtbmM0DKyPWMMUMlK9NEKuIG4aBqWyE= -go.opentelemetry.io/otel/sdk v1.28.0/go.mod h1:oYj7ClPUA7Iw3m+r7GeEjz0qckQRJK2B8zjcZEfu7Pg= -go.opentelemetry.io/otel/trace v1.28.0 h1:GhQ9cUuQGmNDd5BTCP2dAvv75RdMxEfTmYejp+lkx9g= -go.opentelemetry.io/otel/trace v1.28.0/go.mod h1:jPyXzNPg6da9+38HEwElrQiHlVMTnVfM3/yv2OlIHaI= +go.opentelemetry.io/otel/metric v1.34.0 h1:+eTR3U0MyfWjRDhmFMxe2SsW64QrZ84AOhvqS7Y+PoQ= +go.opentelemetry.io/otel/metric v1.34.0/go.mod h1:CEDrp0fy2D0MvkXE+dPV7cMi8tWZwX3dmaIhwPOaqHE= +go.opentelemetry.io/otel/sdk v1.34.0 h1:95zS4k/2GOy069d321O8jWgYsW3MzVV+KuSPKp7Wr1A= +go.opentelemetry.io/otel/sdk v1.34.0/go.mod h1:0e/pNiaMAqaykJGKbi+tSjWfNNHMTxoC9qANsCzbyxU= +go.opentelemetry.io/otel/sdk/metric v1.34.0 h1:5CeK9ujjbFVL5c1PhLuStg1wxA7vQv7ce1EK0Gyvahk= +go.opentelemetry.io/otel/sdk/metric v1.34.0/go.mod h1:jQ/r8Ze28zRKoNRdkjCZxfs6YvBTG1+YIqyFVFYec5w= +go.opentelemetry.io/otel/trace v1.34.0 h1:+ouXS2V8Rd4hp4580a8q23bg0azF2nI8cqLYnC8mh/k= +go.opentelemetry.io/otel/trace v1.34.0/go.mod h1:Svm7lSjQD7kG7KJ/MUHPVXSDGz2OX4h0M2jHBhmSfRE= go.opentelemetry.io/proto/otlp v1.3.1 h1:TrMUixzpM0yuc/znrFTP9MMRh8trP93mkCiDVeXrui0= go.opentelemetry.io/proto/otlp v1.3.1/go.mod h1:0X1WI4de4ZsLrrJNLAQbFeLCm3T7yBkR0XqQ7niQU+8= go.uber.org/automaxprocs v1.6.0 h1:O3y2/QNTOdbF+e/dpXNNW7Rx2hZ4sTIPyybbxyNqTUs= @@ -163,56 +185,56 @@ go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 h1:2dVuKD2vS7b0QIHQbpyTISPd0LeHDbnYEryqj5Q1ug8= -golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56/go.mod h1:M4RDyNAINzryxdtnbRXRL/OHtkFuWGRjvuhBJpk2IlY= +golang.org/x/exp v0.0.0-20250218142911-aa4b98e5adaa h1:t2QcU6V556bFjYgu4L6C+6VrCPyJZ+eyRsABUPs1mz4= +golang.org/x/exp v0.0.0-20250218142911-aa4b98e5adaa/go.mod h1:BHOTPb3L19zxehTsLoJXVaTktb06DFgmdW6Wb9s8jqk= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.30.0 h1:AcW1SDZMkb8IpzCdQUaIq2sP4sZ4zw+55h6ynffypl4= -golang.org/x/net v0.30.0/go.mod h1:2wGyMJ5iFasEhkwi13ChkO/t1ECNC4X4eBKkVFyYFlU= -golang.org/x/oauth2 v0.23.0 h1:PbgcYx2W7i4LvjJWEbf0ngHV6qJYr86PkAV3bXdLEbs= -golang.org/x/oauth2 v0.23.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= +golang.org/x/net v0.38.0 h1:vRMAPTMaeGqVhG5QyLJHqNDwecKTomGeqbnfZyKlBI8= +golang.org/x/net v0.38.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8= +golang.org/x/oauth2 v0.25.0 h1:CY4y7XT9v0cRI9oupztF8AgiIu99L/ksR/Xp/6jrZ70= +golang.org/x/oauth2 v0.25.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= -golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.12.0 h1:MHc5BpPuC30uJk597Ri8TV3CNZcTLu6B6z4lJy+g6Jw= +golang.org/x/sync v0.12.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.26.0 h1:KHjCJyddX0LoSTb3J+vWpupP9p0oznkqVk/IfjymZbo= -golang.org/x/sys v0.26.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/term v0.25.0 h1:WtHI/ltw4NvSUig5KARz9h521QvRC8RmF/cuYqifU24= -golang.org/x/term v0.25.0/go.mod h1:RPyXicDX+6vLxogjjRxjgD2TKtmAO6NZBsBRfrOLu7M= +golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik= +golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/term v0.30.0 h1:PQ39fJZ+mfadBm0y5WlL4vlM7Sx1Hgf13sMIY2+QS9Y= +golang.org/x/term v0.30.0/go.mod h1:NYYFdzHoI5wRh/h5tDMdMqCqPJZEuNqVR5xJLd/n67g= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.19.0 h1:kTxAhCbGbxhK0IwgSKiMO5awPoDQ0RpfiVYBfK860YM= -golang.org/x/text v0.19.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= +golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY= +golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4= golang.org/x/time v0.7.0 h1:ntUhktv3OPE6TgYxXWv9vKvUSJyIFJlyohwbkEwPrKQ= golang.org/x/time v0.7.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.26.0 h1:v/60pFQmzmT9ExmjDv2gGIfi3OqfKoEP6I5+umXlbnQ= -golang.org/x/tools v0.26.0/go.mod h1:TPVVj70c7JJ3WCazhD8OdXcZg/og+b9+tH/KxylGwH0= +golang.org/x/tools v0.30.0 h1:BgcpHewrV5AUp2G9MebG4XPFI1E2W41zU1SaqVA9vJY= +golang.org/x/tools v0.30.0/go.mod h1:c347cR/OJfw5TI+GfX7RUPNMdDRRbjvYTS0jPyvsVtY= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gomodules.xyz/jsonpatch/v2 v2.4.0 h1:Ci3iUJyx9UeRx7CeFN8ARgGbkESwJK+KB9lLcWxY/Zw= gomodules.xyz/jsonpatch/v2 v2.4.0/go.mod h1:AH3dM2RI6uoBZxn3LVrfvJ3E0/9dG4cSrbuBJT4moAY= -google.golang.org/genproto/googleapis/api v0.0.0-20240826202546-f6391c0de4c7 h1:YcyjlL1PRr2Q17/I0dPk2JmYS5CDXfcdb2Z3YRioEbw= -google.golang.org/genproto/googleapis/api v0.0.0-20240826202546-f6391c0de4c7/go.mod h1:OCdP9MfskevB/rbYvHTsXTtKC+3bHWajPdoKgjcYkfo= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240826202546-f6391c0de4c7 h1:2035KHhUv+EpyB+hWgJnaWKJOdX1E95w2S8Rr4uWKTs= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240826202546-f6391c0de4c7/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU= -google.golang.org/grpc v1.65.0 h1:bs/cUb4lp1G5iImFFd3u5ixQzweKizoZJAwBNLR42lc= -google.golang.org/grpc v1.65.0/go.mod h1:WgYC2ypjlB0EiQi6wdKixMqukr6lBc0Vo+oOgjrM5ZQ= -google.golang.org/protobuf v1.35.1 h1:m3LfL6/Ca+fqnjnlqQXNpFPABW1UD7mjh8KO2mKFytA= -google.golang.org/protobuf v1.35.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +google.golang.org/genproto/googleapis/api v0.0.0-20250106144421-5f5ef82da422 h1:GVIKPyP/kLIyVOgOnTwFOrvQaQUzOzGMCxgFUOEmm24= +google.golang.org/genproto/googleapis/api v0.0.0-20250106144421-5f5ef82da422/go.mod h1:b6h1vNKhxaSoEI+5jc3PJUCustfli/mRab7295pY7rw= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250218202821-56aae31c358a h1:51aaUVRocpvUOSQKM6Q7VuoaktNIaMCLuhZB6DKksq4= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250218202821-56aae31c358a/go.mod h1:uRxBH1mhmO8PGhU89cMcHaXKZqO+OfakD8QQO0oYwlQ= +google.golang.org/grpc v1.71.0 h1:kF77BGdPTQ4/JZWMlb9VpJ5pa25aqvVqogsxNHHdeBg= +google.golang.org/grpc v1.71.0/go.mod h1:H0GRtasmQOh9LkFoCPDu3ZrwUtD1YGE+b2vYBYd/8Ec= +google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= +google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= @@ -223,31 +245,33 @@ gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -k8s.io/api v0.32.1 h1:f562zw9cy+GvXzXf0CKlVQ7yHJVYzLfL6JAS4kOAaOc= -k8s.io/api v0.32.1/go.mod h1:/Yi/BqkuueW1BgpoePYBRdDYfjPF5sgTr5+YqDZra5k= -k8s.io/apiextensions-apiserver v0.32.1 h1:hjkALhRUeCariC8DiVmb5jj0VjIc1N0DREP32+6UXZw= -k8s.io/apiextensions-apiserver v0.32.1/go.mod h1:sxWIGuGiYov7Io1fAS2X06NjMIk5CbRHc2StSmbaQto= -k8s.io/apimachinery v0.32.1 h1:683ENpaCBjma4CYqsmZyhEzrGz6cjn1MY/X2jB2hkZs= -k8s.io/apimachinery v0.32.1/go.mod h1:GpHVgxoKlTxClKcteaeuF1Ul/lDVb74KpZcxcmLDElE= -k8s.io/apiserver v0.32.1 h1:oo0OozRos66WFq87Zc5tclUX2r0mymoVHRq8JmR7Aak= -k8s.io/apiserver v0.32.1/go.mod h1:UcB9tWjBY7aryeI5zAgzVJB/6k7E97bkr1RgqDz0jPw= -k8s.io/client-go v0.32.1 h1:otM0AxdhdBIaQh7l1Q0jQpmo7WOFIk5FFa4bg6YMdUU= -k8s.io/client-go v0.32.1/go.mod h1:aTTKZY7MdxUaJ/KiUs8D+GssR9zJZi77ZqtzcGXIiDg= -k8s.io/component-base v0.32.1 h1:/5IfJ0dHIKBWysGV0yKTFfacZ5yNV1sulPh3ilJjRZk= -k8s.io/component-base v0.32.1/go.mod h1:j1iMMHi/sqAHeG5z+O9BFNCF698a1u0186zkjMZQ28w= +k8s.io/api v0.32.3 h1:Hw7KqxRusq+6QSplE3NYG4MBxZw1BZnq4aP4cJVINls= +k8s.io/api v0.32.3/go.mod h1:2wEDTXADtm/HA7CCMD8D8bK4yuBUptzaRhYcYEEYA3k= +k8s.io/apiextensions-apiserver v0.32.2 h1:2YMk285jWMk2188V2AERy5yDwBYrjgWYggscghPCvV4= +k8s.io/apiextensions-apiserver v0.32.2/go.mod h1:GPwf8sph7YlJT3H6aKUWtd0E+oyShk/YHWQHf/OOgCA= +k8s.io/apimachinery v0.32.3 h1:JmDuDarhDmA/Li7j3aPrwhpNBA94Nvk5zLeOge9HH1U= +k8s.io/apimachinery v0.32.3/go.mod h1:GpHVgxoKlTxClKcteaeuF1Ul/lDVb74KpZcxcmLDElE= +k8s.io/apiserver v0.32.3 h1:kOw2KBuHOA+wetX1MkmrxgBr648ksz653j26ESuWNY8= +k8s.io/apiserver v0.32.3/go.mod h1:q1x9B8E/WzShF49wh3ADOh6muSfpmFL0I2t+TG0Zdgc= +k8s.io/client-go v0.32.3 h1:RKPVltzopkSgHS7aS98QdscAgtgah/+zmpAogooIqVU= +k8s.io/client-go v0.32.3/go.mod h1:3v0+3k4IcT9bXTc4V2rt+d2ZPPG700Xy6Oi0Gdl2PaY= +k8s.io/component-base v0.32.3 h1:98WJvvMs3QZ2LYHBzvltFSeJjEx7t5+8s71P7M74u8k= +k8s.io/component-base v0.32.3/go.mod h1:LWi9cR+yPAv7cu2X9rZanTiFKB2kHA+JjmhkKjCZRpI= k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk= k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= -k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f h1:GA7//TjRY9yWGy1poLzYYJJ4JRdzg3+O6e8I+e+8T5Y= -k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f/go.mod h1:R/HEjbvWI0qdfb8viZUeVZm0X6IZnxAydC7YU42CMw4= +k8s.io/kube-openapi v0.0.0-20241212222426-2c72e554b1e7 h1:hcha5B1kVACrLujCKLbr8XWMxCxzQx42DY8QKYJrDLg= +k8s.io/kube-openapi v0.0.0-20241212222426-2c72e554b1e7/go.mod h1:GewRfANuJ70iYzvn+i4lezLDAFzvjxZYK1gn1lWcfas= k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738 h1:M3sRQVHv7vB20Xc2ybTt7ODCeFj6JSWYFzOFnYeS6Ro= k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.31.0 h1:CPT0ExVicCzcpeN4baWEV2ko2Z/AsiZgEdwgcfwLgMo= sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.31.0/go.mod h1:Ve9uj1L+deCXFrPOk1LpFXqTg7LCFzFso6PA48q/XZw= -sigs.k8s.io/controller-runtime v0.20.2 h1:/439OZVxoEc02psi1h4QO3bHzTgu49bb347Xp4gW1pc= -sigs.k8s.io/controller-runtime v0.20.2/go.mod h1:xg2XB0K5ShQzAgsoujxuKN4LNXR2LfwwHsPj7Iaw+XY= +sigs.k8s.io/controller-runtime v0.20.3 h1:I6Ln8JfQjHH7JbtCD2HCYHoIzajoRxPNuvhvcDbZgkI= +sigs.k8s.io/controller-runtime v0.20.3/go.mod h1:xg2XB0K5ShQzAgsoujxuKN4LNXR2LfwwHsPj7Iaw+XY= sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3 h1:/Rv+M11QRah1itp8VhT6HoVx1Ray9eB4DBr+K+/sCJ8= sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3/go.mod h1:18nIHnGi6636UCz6m8i4DhaJ65T6EruyzmoQqI2BVDo= -sigs.k8s.io/structured-merge-diff/v4 v4.4.2 h1:MdmvkGuXi/8io6ixD5wud3vOLwc1rj0aNqRlpuvjmwA= -sigs.k8s.io/structured-merge-diff/v4 v4.4.2/go.mod h1:N8f93tFZh9U6vpxwRArLiikrE5/2tiu1w1AGfACIGE4= +sigs.k8s.io/randfill v0.0.0-20250304075658-069ef1bbf016 h1:kXv6kKdoEtedwuqMmkqhbkgvYKeycVbC8+iPCP9j5kQ= +sigs.k8s.io/randfill v0.0.0-20250304075658-069ef1bbf016/go.mod h1:XeLlZ/jmk4i1HRopwe7/aU3H5n1zNUcX6TM94b3QxOY= +sigs.k8s.io/structured-merge-diff/v4 v4.6.0 h1:IUA9nvMmnKWcj5jl84xn+T5MnlZKThmUW1TdblaLVAc= +sigs.k8s.io/structured-merge-diff/v4 v4.6.0/go.mod h1:dDy58f92j70zLsuZVuUX5Wp9vtxXpaZnkPGWeqDfCps= sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E= sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY= diff --git a/internal/controller/interface_controller.go b/internal/controller/interface_controller.go new file mode 100644 index 00000000..945db678 --- /dev/null +++ b/internal/controller/interface_controller.go @@ -0,0 +1,180 @@ +// SPDX-FileCopyrightText: 2025 SAP SE or an SAP affiliate company and IronCore contributors +// SPDX-License-Identifier: Apache-2.0 + +package controller + +import ( + "context" + "fmt" + + "k8s.io/apimachinery/pkg/api/equality" + apierrors "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/api/meta" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/util/errors" + "k8s.io/client-go/tools/record" + ctrl "sigs.k8s.io/controller-runtime" + "sigs.k8s.io/controller-runtime/pkg/client" + "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil" + "sigs.k8s.io/controller-runtime/pkg/predicate" + + "github.com/ironcore-dev/network-operator/api/v1alpha1" + "github.com/ironcore-dev/network-operator/internal/provider" +) + +// InterfaceReconciler reconciles a Interface object +type InterfaceReconciler struct { + client.Client + Scheme *runtime.Scheme + + // WatchFilterValue is the label value used to filter events prior to reconciliation. + WatchFilterValue string + + // Recorder is used to record events for the controller. + // More info: https://book.kubebuilder.io/reference/raising-events + Recorder record.EventRecorder + + // Provider is the provider that will be used to create & delete the interface. + Provider provider.Provider +} + +// +kubebuilder:rbac:groups=networking.cloud.sap,resources=interfaces,verbs=get;list;watch;create;update;patch;delete +// +kubebuilder:rbac:groups=networking.cloud.sap,resources=interfaces/status,verbs=get;update;patch +// +kubebuilder:rbac:groups=networking.cloud.sap,resources=interfaces/finalizers,verbs=update +// +kubebuilder:rbac:groups=core,resources=events,verbs=create;patch + +// Reconcile is part of the main kubernetes reconciliation loop which aims to +// move the current state of the cluster closer to the desired state. +// +// For more details, check Reconcile and its Result here: +// - https://pkg.go.dev/sigs.k8s.io/controller-runtime@v0.20.2/pkg/reconcile +// +// For more details about the method shape, read up here: +// - https://ahmet.im/blog/controller-pitfalls/#reconcile-method-shape +func (r *InterfaceReconciler) Reconcile(ctx context.Context, req ctrl.Request) (_ ctrl.Result, reterr error) { + log := ctrl.LoggerFrom(ctx) + log.Info("Reconciling resource") + + obj := new(v1alpha1.Interface) + if err := r.Get(ctx, req.NamespacedName, obj); err != nil { + if apierrors.IsNotFound(err) { + // If the custom resource is not found then it usually means that it was deleted or not created + // In this way, we will stop the reconciliation + log.Info("Resource not found. Ignoring since object must be deleted") + return ctrl.Result{}, nil + } + // Error reading the object - requeue the request. + log.Error(err, "Failed to get resource") + return ctrl.Result{}, err + } + + if !obj.DeletionTimestamp.IsZero() { + if controllerutil.ContainsFinalizer(obj, v1alpha1.FinalizerName) { + if err := r.finalize(ctx, obj); err != nil { + log.Error(err, "Failed to finalize resource") + return ctrl.Result{}, err + } + controllerutil.RemoveFinalizer(obj, v1alpha1.FinalizerName) + if err := r.Update(ctx, obj); err != nil { + log.Error(err, "Failed to remove finalizer from resource") + return ctrl.Result{}, err + } + } + log.Info("Resource is being deleted, skipping reconciliation") + return ctrl.Result{}, nil + } + + // More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/finalizers + if !controllerutil.ContainsFinalizer(obj, v1alpha1.FinalizerName) { + controllerutil.AddFinalizer(obj, v1alpha1.FinalizerName) + if err := r.Update(ctx, obj); err != nil { + log.Error(err, "Failed to add finalizer to resource") + return ctrl.Result{}, err + } + log.Info("Added finalizer to resource") + return ctrl.Result{}, nil + } + + orig := obj.DeepCopy() + if len(obj.Status.Conditions) == 0 { + log.Info("Initializing status conditions") + meta.SetStatusCondition(&obj.Status.Conditions, metav1.Condition{ + Type: v1alpha1.ReadyCondition, + Status: metav1.ConditionUnknown, + Reason: v1alpha1.ReconcilePendingReason, + Message: "Starting reconciliation", + }) + return ctrl.Result{}, r.Status().Update(ctx, obj) + } + + // Always attempt to update the status after reconciliation + defer func() { + if !equality.Semantic.DeepEqual(orig.Status, obj.Status) { + if err := r.Status().Patch(ctx, obj, client.MergeFrom(orig)); err != nil { + log.Error(err, "Failed to update status") + reterr = errors.NewAggregate([]error{reterr, err}) + } + } + }() + + if err := r.reconcile(ctx, obj); err != nil { + log.Error(err, "Failed to reconcile resource") + return ctrl.Result{}, err + } + + return ctrl.Result{}, nil +} + +// SetupWithManager sets up the controller with the Manager. +func (r *InterfaceReconciler) SetupWithManager(mgr ctrl.Manager) error { + labelSelector := metav1.LabelSelector{} + if r.WatchFilterValue != "" { + labelSelector.MatchLabels = map[string]string{v1alpha1.WatchLabel: r.WatchFilterValue} + } + + filter, err := predicate.LabelSelectorPredicate(labelSelector) + if err != nil { + return fmt.Errorf("failed to create label selector predicate: %w", err) + } + + return ctrl.NewControllerManagedBy(mgr). + For(&v1alpha1.Interface{}). + Named("interface"). + WithEventFilter(filter). + Complete(r) +} + +func (r *InterfaceReconciler) reconcile(ctx context.Context, obj *v1alpha1.Interface) error { + if err := r.Provider.CreateInterface(ctx, obj); err != nil { + meta.SetStatusCondition(&obj.Status.Conditions, metav1.Condition{ + Type: v1alpha1.ReadyCondition, + Status: metav1.ConditionFalse, + Reason: v1alpha1.NotReadyReason, + Message: fmt.Sprintf("Failed to configured interface: %v", err), + ObservedGeneration: obj.Generation, + }) + return err + } + meta.SetStatusCondition(&obj.Status.Conditions, metav1.Condition{ + Type: v1alpha1.ReadyCondition, + Status: metav1.ConditionTrue, + Reason: v1alpha1.ReadyReason, + Message: "Interface configured successfully", + ObservedGeneration: obj.Generation, + }) + return nil +} + +func (r *InterfaceReconciler) finalize(ctx context.Context, obj *v1alpha1.Interface) error { + // NOTE: It is not recommended to use finalizers with the purpose of deleting resources which are + // created and managed in the reconciliation. These ones, such as the Deployment created on this reconcile, + // are defined as dependent of the custom resource. See that we use the method ctrl.SetControllerReference. + // to set the ownerRef which means that the Deployment will be deleted by the Kubernetes API. + // More info: https://kubernetes.io/docs/tasks/administer-cluster/use-cascading-deletion/ + if err := r.Provider.DeleteInterface(ctx, obj); err != nil { + r.Recorder.Event(obj, "Warning", "FinalizeFailed", err.Error()) + return err + } + return nil +} diff --git a/internal/controller/interface_controller_test.go b/internal/controller/interface_controller_test.go new file mode 100644 index 00000000..e2d6d302 --- /dev/null +++ b/internal/controller/interface_controller_test.go @@ -0,0 +1,89 @@ +// SPDX-FileCopyrightText: 2025 SAP SE or an SAP affiliate company and IronCore contributors +// SPDX-License-Identifier: Apache-2.0 + +package controller + +import ( + . "github.com/onsi/ginkgo/v2" + . "github.com/onsi/gomega" + "k8s.io/apimachinery/pkg/api/errors" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/types" + "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil" + + "github.com/ironcore-dev/network-operator/api/v1alpha1" +) + +var _ = Describe("Interface Controller", func() { + Context("When reconciling a resource", func() { + const name = "test-interface" + key := types.NamespacedName{Name: name, Namespace: metav1.NamespaceDefault} + + BeforeEach(func() { + By("Creating the custom resource for the Kind Interface") + iface := &v1alpha1.Interface{} + if err := k8sClient.Get(ctx, key, iface); errors.IsNotFound(err) { + resource := &v1alpha1.Interface{ + TypeMeta: metav1.TypeMeta{ + APIVersion: v1alpha1.GroupVersion.String(), + Kind: "Interface", + }, + ObjectMeta: metav1.ObjectMeta{ + Name: name, + Namespace: metav1.NamespaceDefault, + }, + Spec: v1alpha1.InterfaceSpec{ + Name: name, + AdminState: "Up", + Description: "Test", + MTU: 9000, + Type: "Physical", + }, + } + Expect(k8sClient.Create(ctx, resource)).To(Succeed()) + } + }) + + AfterEach(func() { + resource := &v1alpha1.Interface{} + err := k8sClient.Get(ctx, key, resource) + Expect(err).NotTo(HaveOccurred()) + + By("Cleanup the specific resource instance Interface") + Expect(k8sClient.Delete(ctx, resource)).To(Succeed()) + + By("Ensuring the resource is deleted from the provider") + Eventually(func(g Gomega) { + _, ok := testProvider.Items[name] + g.Expect(ok).To(BeFalse(), "Resource should not exist in the provider") + }).Should(Succeed()) + }) + + It("Should successfully reconcile the resource", func() { + By("Adding a finalizer to the resource") + Eventually(func(g Gomega) { + resource := &v1alpha1.Interface{} + g.Expect(k8sClient.Get(ctx, key, resource)).To(Succeed()) + g.Expect(controllerutil.ContainsFinalizer(resource, v1alpha1.FinalizerName)).To(BeTrue()) + }).Should(Succeed()) + + By("Updating the resource status") + Eventually(func(g Gomega) { + resource := &v1alpha1.Interface{} + g.Expect(k8sClient.Get(ctx, key, resource)).To(Succeed()) + g.Expect(resource.Status.Conditions).To(HaveLen(1)) + g.Expect(resource.Status.Conditions[0].Type).To(Equal(v1alpha1.ReadyCondition)) + g.Expect(resource.Status.Conditions[0].Status).To(Equal(metav1.ConditionTrue)) + }).Should(Succeed()) + + By("Ensuring the resource is created in the provider") + Eventually(func(g Gomega) { + item, ok := testProvider.Items[name] + g.Expect(ok).To(BeTrue(), "Resource should exist in the provider") + resource, ok := item.(*v1alpha1.Interface) + g.Expect(ok).To(BeTrue(), "Resource should be of type Interface") + g.Expect(resource.Spec.Name).To(Equal(name)) + }).Should(Succeed()) + }) + }) +}) diff --git a/internal/controller/suite_test.go b/internal/controller/suite_test.go new file mode 100644 index 00000000..dec177e9 --- /dev/null +++ b/internal/controller/suite_test.go @@ -0,0 +1,164 @@ +// SPDX-FileCopyrightText: 2025 SAP SE or an SAP affiliate company and IronCore contributors +// SPDX-License-Identifier: Apache-2.0 + +package controller + +import ( + "context" + "os" + "path/filepath" + "sync" + "testing" + + . "github.com/onsi/ginkgo/v2" + . "github.com/onsi/gomega" + + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/client-go/kubernetes/scheme" + "k8s.io/client-go/tools/record" + ctrl "sigs.k8s.io/controller-runtime" + "sigs.k8s.io/controller-runtime/pkg/client" + "sigs.k8s.io/controller-runtime/pkg/envtest" + logf "sigs.k8s.io/controller-runtime/pkg/log" + "sigs.k8s.io/controller-runtime/pkg/log/zap" + + "github.com/ironcore-dev/network-operator/api/v1alpha1" + "github.com/ironcore-dev/network-operator/internal/provider" + // +kubebuilder:scaffold:imports +) + +// These tests use Ginkgo (BDD-style Go testing framework). Refer to +// http://onsi.github.io/ginkgo/ to learn more about Ginkgo. + +var ( + ctx context.Context + cancel context.CancelFunc + testEnv *envtest.Environment + k8sClient client.Client + k8sManager ctrl.Manager + testProvider = &Provider{Items: make(map[string]client.Object)} +) + +func TestControllers(t *testing.T) { + RegisterFailHandler(Fail) + RunSpecs(t, "Controller Suite") +} + +var _ = BeforeSuite(func() { + logf.SetLogger(zap.New(zap.WriteTo(GinkgoWriter), zap.UseDevMode(true))) + + ctx, cancel = context.WithCancel(ctrl.SetupSignalHandler()) + + err := corev1.AddToScheme(scheme.Scheme) + Expect(err).NotTo(HaveOccurred()) + + err = v1alpha1.AddToScheme(scheme.Scheme) + Expect(err).NotTo(HaveOccurred()) + + // +kubebuilder:scaffold:scheme + + By("bootstrapping test environment") + testEnv = &envtest.Environment{ + CRDDirectoryPaths: []string{filepath.Join("..", "..", "config", "crd", "bases")}, + ErrorIfCRDPathMissing: true, + } + + // Retrieve the first found binary directory to allow running tests from IDEs + if dir := detectTestBinaryDir(); dir != "" { + testEnv.BinaryAssetsDirectory = dir + } + + cfg, err := testEnv.Start() + Expect(err).NotTo(HaveOccurred()) + Expect(cfg).NotTo(BeNil()) + + k8sManager, err = ctrl.NewManager(cfg, ctrl.Options{ + Scheme: scheme.Scheme, + Logger: GinkgoLogr, + }) + Expect(err).ToNot(HaveOccurred()) + + recorder := record.NewFakeRecorder(0) + go func() { + for event := range recorder.Events { + GinkgoLogr.Info("Event", "event", event) + } + }() + + k8sClient, err = client.New(cfg, client.Options{Scheme: scheme.Scheme}) + Expect(err).NotTo(HaveOccurred()) + Expect(k8sClient).NotTo(BeNil()) + + err = (&InterfaceReconciler{ + Client: k8sManager.GetClient(), + Scheme: k8sManager.GetScheme(), + Recorder: recorder, + Provider: testProvider, + }).SetupWithManager(k8sManager) + Expect(err).NotTo(HaveOccurred()) + + go func() { + defer GinkgoRecover() + err = k8sManager.Start(ctx) + Expect(err).ToNot(HaveOccurred(), "failed to run manager") + }() + + Eventually(func() error { + var namespace corev1.Namespace + return k8sClient.Get(context.Background(), client.ObjectKey{Name: metav1.NamespaceDefault}, &namespace) + }).Should(Succeed()) +}) + +var _ = AfterSuite(func() { + By("tearing down the test environment") + cancel() + err := testEnv.Stop() + Expect(err).NotTo(HaveOccurred()) +}) + +// detectTestBinaryDir locates the first binary in the specified path. +// ENVTEST-based tests depend on specific binaries, usually located in paths set by +// controller-runtime. When running tests directly (e.g., via an IDE) without using +// Makefile targets, the 'BinaryAssetsDirectory' must be explicitly configured. +// +// This function streamlines the process by finding the required binaries, similar to +// setting the 'KUBEBUILDER_ASSETS' environment variable. To ensure the binaries are +// properly set up, run 'make setup-envtest' beforehand. +func detectTestBinaryDir() string { + basePath := filepath.Join("..", "..", "bin", "k8s") + entries, err := os.ReadDir(basePath) + if err != nil { + logf.Log.Error(err, "Failed to read directory", "path", basePath) + return "" + } + for _, entry := range entries { + if entry.IsDir() { + return filepath.Join(basePath, entry.Name()) + } + } + return "" +} + +var _ provider.Provider = (*Provider)(nil) + +// Provider is a simple in-memory provider for testing purposes only. +type Provider struct { + sync.Mutex + + Items map[string]client.Object +} + +func (p *Provider) CreateInterface(_ context.Context, iface *v1alpha1.Interface) error { + p.Lock() + defer p.Unlock() + p.Items[iface.Name] = iface + return nil +} + +func (p *Provider) DeleteInterface(_ context.Context, iface *v1alpha1.Interface) error { + p.Lock() + defer p.Unlock() + delete(p.Items, iface.Name) + return nil +} diff --git a/internal/provider/openconfig/.gitignore b/internal/provider/openconfig/.gitignore new file mode 100644 index 00000000..8b7ac368 --- /dev/null +++ b/internal/provider/openconfig/.gitignore @@ -0,0 +1,3 @@ +# SPDX-FileCopyrightText: 2025 SAP SE or an SAP affiliate company and IronCore contributors +# SPDX-License-Identifier: Apache-2.0 +yang diff --git a/internal/provider/openconfig/client.go b/internal/provider/openconfig/client.go new file mode 100644 index 00000000..1b9edc42 --- /dev/null +++ b/internal/provider/openconfig/client.go @@ -0,0 +1,53 @@ +// SPDX-FileCopyrightText: 2025 SAP SE or an SAP affiliate company and IronCore contributors +// SPDX-License-Identifier: Apache-2.0 + +package openconfig + +import ( + "context" + "crypto/tls" + "fmt" + "io" + + gpb "github.com/openconfig/gnmi/proto/gnmi" + "github.com/openconfig/ygnmi/ygnmi" + "google.golang.org/grpc" + "google.golang.org/grpc/credentials" +) + +func NewClient(ctx context.Context, target, username, password string) (*ygnmi.Client, io.Closer, error) { + conn, err := grpc.NewClient( + target, + grpc.WithTransportCredentials(credentials.NewTLS(&tls.Config{ + InsecureSkipVerify: true, //nolint:gosec + })), + grpc.WithPerRPCCredentials(&auth{ + username: username, + password: password, + }), + ) + if err != nil { + return nil, nil, fmt.Errorf("failed to create grpc client: %w", err) + } + client, err := ygnmi.NewClient(gpb.NewGNMIClient(conn), ygnmi.WithRequestLogLevel(6)) + if err != nil { + return nil, nil, fmt.Errorf("failed to create ygnmi client: %w", err) + } + return client, conn, nil +} + +type auth struct { + username string + password string +} + +var _ credentials.PerRPCCredentials = (*auth)(nil) + +func (a *auth) GetRequestMetadata(_ context.Context, _ ...string) (map[string]string, error) { + return map[string]string{ + "username": a.username, + "password": a.password, + }, nil +} + +func (a *auth) RequireTransportSecurity() bool { return true } diff --git a/internal/provider/openconfig/enum.go b/internal/provider/openconfig/enum.go new file mode 100644 index 00000000..a695d69c --- /dev/null +++ b/internal/provider/openconfig/enum.go @@ -0,0 +1,1349 @@ +// SPDX-FileCopyrightText: 2025 SAP SE or an SAP affiliate company and IronCore contributors +// SPDX-License-Identifier: Apache-2.0 + +/* +Package openconfig is a generated package which contains definitions +of structs which represent a YANG schema. The generated schema can be +compressed by a series of transformations (compression was true +in this case). + +This package was generated by ygnmi version: v0.12.0: (ygot: v0.29.20) +using the following YANG input files: + - ./yang/release/models/interfaces/openconfig-interfaces.yang + - ./yang/release/models/interfaces/openconfig-if-ip.yang + - ./yang/third_party/ietf/iana-if-type.yang + +Imported modules were sourced from: + - ./yang/doc + - ./yang/regexp-tests + - ./yang/release/models + - ./yang/release/models/acl + - ./yang/release/models/aft + - ./yang/release/models/ate + - ./yang/release/models/bfd + - ./yang/release/models/bgp + - ./yang/release/models/catalog + - ./yang/release/models/defined-sets + - ./yang/release/models/devices-manifest + - ./yang/release/models/ethernet-segments + - ./yang/release/models/extensions + - ./yang/release/models/firewall + - ./yang/release/models/flex-algo + - ./yang/release/models/gnpsi + - ./yang/release/models/gnsi + - ./yang/release/models/gribi + - ./yang/release/models/grpc + - ./yang/release/models/interfaces + - ./yang/release/models/isis + - ./yang/release/models/keychain + - ./yang/release/models/lacp + - ./yang/release/models/lldp + - ./yang/release/models/local-routing + - ./yang/release/models/macsec + - ./yang/release/models/mpls + - ./yang/release/models/multicast + - ./yang/release/models/network-instance + - ./yang/release/models/oam + - ./yang/release/models/openflow + - ./yang/release/models/optical-transport + - ./yang/release/models/ospf + - ./yang/release/models/p4rt + - ./yang/release/models/pcep + - ./yang/release/models/platform + - ./yang/release/models/policy + - ./yang/release/models/policy-forwarding + - ./yang/release/models/probes + - ./yang/release/models/ptp + - ./yang/release/models/qos + - ./yang/release/models/relay-agent + - ./yang/release/models/rib + - ./yang/release/models/sampling + - ./yang/release/models/segment-routing + - ./yang/release/models/stp + - ./yang/release/models/system + - ./yang/release/models/telemetry + - ./yang/release/models/types + - ./yang/release/models/vlan + - ./yang/release/models/wifi + - ./yang/third_party/ietf +*/ +package openconfig + +import ( + "github.com/openconfig/ygot/ygot" +) + +// E_Address_Status is a derived int64 type which is used to represent +// the enumerated node Address_Status. An additional value named +// Address_Status_UNSET is added to the enumeration which is used as +// the nil value, indicating that the enumeration was not explicitly set by +// the program importing the generated structures. +type E_Address_Status int64 + +// IsYANGGoEnum ensures that Address_Status implements the yang.GoEnum +// interface. This ensures that Address_Status can be identified as a +// mapped type for a YANG enumeration. +func (E_Address_Status) IsYANGGoEnum() {} + +// ΛMap returns the value lookup map associated with Address_Status. +func (E_Address_Status) ΛMap() map[string]map[int64]ygot.EnumDefinition { return ΛEnum } + +// String returns a logging-friendly string for E_Address_Status. +func (e E_Address_Status) String() string { + return ygot.EnumLogString(e, int64(e), "E_Address_Status") +} + +const ( + // Address_Status_UNSET corresponds to the value UNSET of Address_Status + Address_Status_UNSET E_Address_Status = 0 + // Address_Status_PREFERRED corresponds to the value PREFERRED of Address_Status + Address_Status_PREFERRED E_Address_Status = 1 + // Address_Status_DEPRECATED corresponds to the value DEPRECATED of Address_Status + Address_Status_DEPRECATED E_Address_Status = 2 + // Address_Status_INVALID corresponds to the value INVALID of Address_Status + Address_Status_INVALID E_Address_Status = 3 + // Address_Status_INACCESSIBLE corresponds to the value INACCESSIBLE of Address_Status + Address_Status_INACCESSIBLE E_Address_Status = 4 + // Address_Status_UNKNOWN corresponds to the value UNKNOWN of Address_Status + Address_Status_UNKNOWN E_Address_Status = 5 + // Address_Status_TENTATIVE corresponds to the value TENTATIVE of Address_Status + Address_Status_TENTATIVE E_Address_Status = 6 + // Address_Status_DUPLICATE corresponds to the value DUPLICATE of Address_Status + Address_Status_DUPLICATE E_Address_Status = 7 + // Address_Status_OPTIMISTIC corresponds to the value OPTIMISTIC of Address_Status + Address_Status_OPTIMISTIC E_Address_Status = 8 +) + +// E_Ethernet_DuplexMode is a derived int64 type which is used to represent +// the enumerated node Ethernet_DuplexMode. An additional value named +// Ethernet_DuplexMode_UNSET is added to the enumeration which is used as +// the nil value, indicating that the enumeration was not explicitly set by +// the program importing the generated structures. +type E_Ethernet_DuplexMode int64 + +// IsYANGGoEnum ensures that Ethernet_DuplexMode implements the yang.GoEnum +// interface. This ensures that Ethernet_DuplexMode can be identified as a +// mapped type for a YANG enumeration. +func (E_Ethernet_DuplexMode) IsYANGGoEnum() {} + +// ΛMap returns the value lookup map associated with Ethernet_DuplexMode. +func (E_Ethernet_DuplexMode) ΛMap() map[string]map[int64]ygot.EnumDefinition { return ΛEnum } + +// String returns a logging-friendly string for E_Ethernet_DuplexMode. +func (e E_Ethernet_DuplexMode) String() string { + return ygot.EnumLogString(e, int64(e), "E_Ethernet_DuplexMode") +} + +const ( + // Ethernet_DuplexMode_UNSET corresponds to the value UNSET of Ethernet_DuplexMode + Ethernet_DuplexMode_UNSET E_Ethernet_DuplexMode = 0 + // Ethernet_DuplexMode_FULL corresponds to the value FULL of Ethernet_DuplexMode + Ethernet_DuplexMode_FULL E_Ethernet_DuplexMode = 1 + // Ethernet_DuplexMode_HALF corresponds to the value HALF of Ethernet_DuplexMode + Ethernet_DuplexMode_HALF E_Ethernet_DuplexMode = 2 +) + +// E_Ethernet_NegotiatedDuplexMode is a derived int64 type which is used to represent +// the enumerated node Ethernet_NegotiatedDuplexMode. An additional value named +// Ethernet_NegotiatedDuplexMode_UNSET is added to the enumeration which is used as +// the nil value, indicating that the enumeration was not explicitly set by +// the program importing the generated structures. +type E_Ethernet_NegotiatedDuplexMode int64 + +// IsYANGGoEnum ensures that Ethernet_NegotiatedDuplexMode implements the yang.GoEnum +// interface. This ensures that Ethernet_NegotiatedDuplexMode can be identified as a +// mapped type for a YANG enumeration. +func (E_Ethernet_NegotiatedDuplexMode) IsYANGGoEnum() {} + +// ΛMap returns the value lookup map associated with Ethernet_NegotiatedDuplexMode. +func (E_Ethernet_NegotiatedDuplexMode) ΛMap() map[string]map[int64]ygot.EnumDefinition { + return ΛEnum +} + +// String returns a logging-friendly string for E_Ethernet_NegotiatedDuplexMode. +func (e E_Ethernet_NegotiatedDuplexMode) String() string { + return ygot.EnumLogString(e, int64(e), "E_Ethernet_NegotiatedDuplexMode") +} + +const ( + // Ethernet_NegotiatedDuplexMode_UNSET corresponds to the value UNSET of Ethernet_NegotiatedDuplexMode + Ethernet_NegotiatedDuplexMode_UNSET E_Ethernet_NegotiatedDuplexMode = 0 + // Ethernet_NegotiatedDuplexMode_FULL corresponds to the value FULL of Ethernet_NegotiatedDuplexMode + Ethernet_NegotiatedDuplexMode_FULL E_Ethernet_NegotiatedDuplexMode = 1 + // Ethernet_NegotiatedDuplexMode_HALF corresponds to the value HALF of Ethernet_NegotiatedDuplexMode + Ethernet_NegotiatedDuplexMode_HALF E_Ethernet_NegotiatedDuplexMode = 2 +) + +// E_IETFInterfaces_InterfaceType is a derived int64 type which is used to represent +// the enumerated node IETFInterfaces_InterfaceType. An additional value named +// IETFInterfaces_InterfaceType_UNSET is added to the enumeration which is used as +// the nil value, indicating that the enumeration was not explicitly set by +// the program importing the generated structures. +type E_IETFInterfaces_InterfaceType int64 + +// IsYANGGoEnum ensures that IETFInterfaces_InterfaceType implements the yang.GoEnum +// interface. This ensures that IETFInterfaces_InterfaceType can be identified as a +// mapped type for a YANG enumeration. +func (E_IETFInterfaces_InterfaceType) IsYANGGoEnum() {} + +// ΛMap returns the value lookup map associated with IETFInterfaces_InterfaceType. +func (E_IETFInterfaces_InterfaceType) ΛMap() map[string]map[int64]ygot.EnumDefinition { return ΛEnum } + +// String returns a logging-friendly string for E_IETFInterfaces_InterfaceType. +func (e E_IETFInterfaces_InterfaceType) String() string { + return ygot.EnumLogString(e, int64(e), "E_IETFInterfaces_InterfaceType") +} + +const ( + // IETFInterfaces_InterfaceType_UNSET corresponds to the value UNSET of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_UNSET E_IETFInterfaces_InterfaceType = 0 + // IETFInterfaces_InterfaceType_a12MppSwitch corresponds to the value a12MppSwitch of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_a12MppSwitch E_IETFInterfaces_InterfaceType = 1 + // IETFInterfaces_InterfaceType_aal2 corresponds to the value aal2 of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_aal2 E_IETFInterfaces_InterfaceType = 2 + // IETFInterfaces_InterfaceType_aal5 corresponds to the value aal5 of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_aal5 E_IETFInterfaces_InterfaceType = 3 + // IETFInterfaces_InterfaceType_actelisMetaLOOP corresponds to the value actelisMetaLOOP of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_actelisMetaLOOP E_IETFInterfaces_InterfaceType = 4 + // IETFInterfaces_InterfaceType_adsl corresponds to the value adsl of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_adsl E_IETFInterfaces_InterfaceType = 5 + // IETFInterfaces_InterfaceType_adsl2 corresponds to the value adsl2 of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_adsl2 E_IETFInterfaces_InterfaceType = 6 + // IETFInterfaces_InterfaceType_adsl2plus corresponds to the value adsl2plus of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_adsl2plus E_IETFInterfaces_InterfaceType = 7 + // IETFInterfaces_InterfaceType_aflane8023 corresponds to the value aflane8023 of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_aflane8023 E_IETFInterfaces_InterfaceType = 8 + // IETFInterfaces_InterfaceType_aflane8025 corresponds to the value aflane8025 of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_aflane8025 E_IETFInterfaces_InterfaceType = 9 + // IETFInterfaces_InterfaceType_aluELP corresponds to the value aluELP of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_aluELP E_IETFInterfaces_InterfaceType = 10 + // IETFInterfaces_InterfaceType_aluEpon corresponds to the value aluEpon of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_aluEpon E_IETFInterfaces_InterfaceType = 11 + // IETFInterfaces_InterfaceType_aluEponLogicalLink corresponds to the value aluEponLogicalLink of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_aluEponLogicalLink E_IETFInterfaces_InterfaceType = 12 + // IETFInterfaces_InterfaceType_aluEponOnu corresponds to the value aluEponOnu of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_aluEponOnu E_IETFInterfaces_InterfaceType = 13 + // IETFInterfaces_InterfaceType_aluEponPhysicalUni corresponds to the value aluEponPhysicalUni of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_aluEponPhysicalUni E_IETFInterfaces_InterfaceType = 14 + // IETFInterfaces_InterfaceType_aluGponOnu corresponds to the value aluGponOnu of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_aluGponOnu E_IETFInterfaces_InterfaceType = 15 + // IETFInterfaces_InterfaceType_aluGponPhysicalUni corresponds to the value aluGponPhysicalUni of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_aluGponPhysicalUni E_IETFInterfaces_InterfaceType = 16 + // IETFInterfaces_InterfaceType_arap corresponds to the value arap of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_arap E_IETFInterfaces_InterfaceType = 17 + // IETFInterfaces_InterfaceType_arcnet corresponds to the value arcnet of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_arcnet E_IETFInterfaces_InterfaceType = 18 + // IETFInterfaces_InterfaceType_arcnetPlus corresponds to the value arcnetPlus of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_arcnetPlus E_IETFInterfaces_InterfaceType = 19 + // IETFInterfaces_InterfaceType_async corresponds to the value async of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_async E_IETFInterfaces_InterfaceType = 20 + // IETFInterfaces_InterfaceType_atm corresponds to the value atm of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_atm E_IETFInterfaces_InterfaceType = 21 + // IETFInterfaces_InterfaceType_atmDxi corresponds to the value atmDxi of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_atmDxi E_IETFInterfaces_InterfaceType = 22 + // IETFInterfaces_InterfaceType_atmFuni corresponds to the value atmFuni of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_atmFuni E_IETFInterfaces_InterfaceType = 23 + // IETFInterfaces_InterfaceType_atmIma corresponds to the value atmIma of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_atmIma E_IETFInterfaces_InterfaceType = 24 + // IETFInterfaces_InterfaceType_atmLogical corresponds to the value atmLogical of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_atmLogical E_IETFInterfaces_InterfaceType = 25 + // IETFInterfaces_InterfaceType_atmRadio corresponds to the value atmRadio of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_atmRadio E_IETFInterfaces_InterfaceType = 26 + // IETFInterfaces_InterfaceType_atmSubInterface corresponds to the value atmSubInterface of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_atmSubInterface E_IETFInterfaces_InterfaceType = 27 + // IETFInterfaces_InterfaceType_atmVciEndPt corresponds to the value atmVciEndPt of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_atmVciEndPt E_IETFInterfaces_InterfaceType = 28 + // IETFInterfaces_InterfaceType_atmVirtual corresponds to the value atmVirtual of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_atmVirtual E_IETFInterfaces_InterfaceType = 29 + // IETFInterfaces_InterfaceType_atmbond corresponds to the value atmbond of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_atmbond E_IETFInterfaces_InterfaceType = 30 + // IETFInterfaces_InterfaceType_aviciOpticalEther corresponds to the value aviciOpticalEther of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_aviciOpticalEther E_IETFInterfaces_InterfaceType = 31 + // IETFInterfaces_InterfaceType_basicISDN corresponds to the value basicISDN of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_basicISDN E_IETFInterfaces_InterfaceType = 32 + // IETFInterfaces_InterfaceType_bgppolicyaccounting corresponds to the value bgppolicyaccounting of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_bgppolicyaccounting E_IETFInterfaces_InterfaceType = 33 + // IETFInterfaces_InterfaceType_bits corresponds to the value bits of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_bits E_IETFInterfaces_InterfaceType = 34 + // IETFInterfaces_InterfaceType_bridge corresponds to the value bridge of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_bridge E_IETFInterfaces_InterfaceType = 35 + // IETFInterfaces_InterfaceType_bsc corresponds to the value bsc of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_bsc E_IETFInterfaces_InterfaceType = 36 + // IETFInterfaces_InterfaceType_cableDownstreamRfPort corresponds to the value cableDownstreamRfPort of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_cableDownstreamRfPort E_IETFInterfaces_InterfaceType = 37 + // IETFInterfaces_InterfaceType_capwapDot11Bss corresponds to the value capwapDot11Bss of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_capwapDot11Bss E_IETFInterfaces_InterfaceType = 38 + // IETFInterfaces_InterfaceType_capwapDot11Profile corresponds to the value capwapDot11Profile of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_capwapDot11Profile E_IETFInterfaces_InterfaceType = 39 + // IETFInterfaces_InterfaceType_capwapWtpVirtualRadio corresponds to the value capwapWtpVirtualRadio of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_capwapWtpVirtualRadio E_IETFInterfaces_InterfaceType = 40 + // IETFInterfaces_InterfaceType_cblVectaStar corresponds to the value cblVectaStar of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_cblVectaStar E_IETFInterfaces_InterfaceType = 41 + // IETFInterfaces_InterfaceType_cctEmul corresponds to the value cctEmul of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_cctEmul E_IETFInterfaces_InterfaceType = 42 + // IETFInterfaces_InterfaceType_ces corresponds to the value ces of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_ces E_IETFInterfaces_InterfaceType = 43 + // IETFInterfaces_InterfaceType_channel corresponds to the value channel of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_channel E_IETFInterfaces_InterfaceType = 44 + // IETFInterfaces_InterfaceType_ciscoISLvlan corresponds to the value ciscoISLvlan of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_ciscoISLvlan E_IETFInterfaces_InterfaceType = 45 + // IETFInterfaces_InterfaceType_cnr corresponds to the value cnr of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_cnr E_IETFInterfaces_InterfaceType = 46 + // IETFInterfaces_InterfaceType_coffee corresponds to the value coffee of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_coffee E_IETFInterfaces_InterfaceType = 47 + // IETFInterfaces_InterfaceType_compositeLink corresponds to the value compositeLink of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_compositeLink E_IETFInterfaces_InterfaceType = 48 + // IETFInterfaces_InterfaceType_dcn corresponds to the value dcn of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_dcn E_IETFInterfaces_InterfaceType = 49 + // IETFInterfaces_InterfaceType_ddnX25 corresponds to the value ddnX25 of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_ddnX25 E_IETFInterfaces_InterfaceType = 50 + // IETFInterfaces_InterfaceType_digitalPowerline corresponds to the value digitalPowerline of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_digitalPowerline E_IETFInterfaces_InterfaceType = 51 + // IETFInterfaces_InterfaceType_digitalWrapperOverheadChannel corresponds to the value digitalWrapperOverheadChannel of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_digitalWrapperOverheadChannel E_IETFInterfaces_InterfaceType = 52 + // IETFInterfaces_InterfaceType_dlsw corresponds to the value dlsw of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_dlsw E_IETFInterfaces_InterfaceType = 53 + // IETFInterfaces_InterfaceType_docsCableDownstream corresponds to the value docsCableDownstream of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_docsCableDownstream E_IETFInterfaces_InterfaceType = 54 + // IETFInterfaces_InterfaceType_docsCableMCmtsDownstream corresponds to the value docsCableMCmtsDownstream of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_docsCableMCmtsDownstream E_IETFInterfaces_InterfaceType = 55 + // IETFInterfaces_InterfaceType_docsCableMaclayer corresponds to the value docsCableMaclayer of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_docsCableMaclayer E_IETFInterfaces_InterfaceType = 56 + // IETFInterfaces_InterfaceType_docsCableNdf corresponds to the value docsCableNdf of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_docsCableNdf E_IETFInterfaces_InterfaceType = 57 + // IETFInterfaces_InterfaceType_docsCableNdr corresponds to the value docsCableNdr of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_docsCableNdr E_IETFInterfaces_InterfaceType = 58 + // IETFInterfaces_InterfaceType_docsCableScte55d1FwdOob corresponds to the value docsCableScte55d1FwdOob of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_docsCableScte55d1FwdOob E_IETFInterfaces_InterfaceType = 59 + // IETFInterfaces_InterfaceType_docsCableScte55d1RetOob corresponds to the value docsCableScte55d1RetOob of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_docsCableScte55d1RetOob E_IETFInterfaces_InterfaceType = 60 + // IETFInterfaces_InterfaceType_docsCableScte55d2DsOob corresponds to the value docsCableScte55d2DsOob of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_docsCableScte55d2DsOob E_IETFInterfaces_InterfaceType = 61 + // IETFInterfaces_InterfaceType_docsCableScte55d2UsOob corresponds to the value docsCableScte55d2UsOob of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_docsCableScte55d2UsOob E_IETFInterfaces_InterfaceType = 62 + // IETFInterfaces_InterfaceType_docsCableUpstream corresponds to the value docsCableUpstream of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_docsCableUpstream E_IETFInterfaces_InterfaceType = 63 + // IETFInterfaces_InterfaceType_docsCableUpstreamChannel corresponds to the value docsCableUpstreamChannel of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_docsCableUpstreamChannel E_IETFInterfaces_InterfaceType = 64 + // IETFInterfaces_InterfaceType_docsCableUpstreamRfPort corresponds to the value docsCableUpstreamRfPort of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_docsCableUpstreamRfPort E_IETFInterfaces_InterfaceType = 65 + // IETFInterfaces_InterfaceType_docsOfdmDownstream corresponds to the value docsOfdmDownstream of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_docsOfdmDownstream E_IETFInterfaces_InterfaceType = 66 + // IETFInterfaces_InterfaceType_docsOfdmaUpstream corresponds to the value docsOfdmaUpstream of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_docsOfdmaUpstream E_IETFInterfaces_InterfaceType = 67 + // IETFInterfaces_InterfaceType_ds0 corresponds to the value ds0 of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_ds0 E_IETFInterfaces_InterfaceType = 68 + // IETFInterfaces_InterfaceType_ds0Bundle corresponds to the value ds0Bundle of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_ds0Bundle E_IETFInterfaces_InterfaceType = 69 + // IETFInterfaces_InterfaceType_ds1 corresponds to the value ds1 of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_ds1 E_IETFInterfaces_InterfaceType = 70 + // IETFInterfaces_InterfaceType_ds1FDL corresponds to the value ds1FDL of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_ds1FDL E_IETFInterfaces_InterfaceType = 71 + // IETFInterfaces_InterfaceType_ds3 corresponds to the value ds3 of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_ds3 E_IETFInterfaces_InterfaceType = 72 + // IETFInterfaces_InterfaceType_dtm corresponds to the value dtm of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_dtm E_IETFInterfaces_InterfaceType = 73 + // IETFInterfaces_InterfaceType_dvbAsiIn corresponds to the value dvbAsiIn of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_dvbAsiIn E_IETFInterfaces_InterfaceType = 74 + // IETFInterfaces_InterfaceType_dvbAsiOut corresponds to the value dvbAsiOut of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_dvbAsiOut E_IETFInterfaces_InterfaceType = 75 + // IETFInterfaces_InterfaceType_dvbRccDownstream corresponds to the value dvbRccDownstream of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_dvbRccDownstream E_IETFInterfaces_InterfaceType = 76 + // IETFInterfaces_InterfaceType_dvbRccMacLayer corresponds to the value dvbRccMacLayer of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_dvbRccMacLayer E_IETFInterfaces_InterfaceType = 77 + // IETFInterfaces_InterfaceType_dvbRccUpstream corresponds to the value dvbRccUpstream of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_dvbRccUpstream E_IETFInterfaces_InterfaceType = 78 + // IETFInterfaces_InterfaceType_dvbRcsMacLayer corresponds to the value dvbRcsMacLayer of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_dvbRcsMacLayer E_IETFInterfaces_InterfaceType = 79 + // IETFInterfaces_InterfaceType_dvbRcsTdma corresponds to the value dvbRcsTdma of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_dvbRcsTdma E_IETFInterfaces_InterfaceType = 80 + // IETFInterfaces_InterfaceType_dvbTdm corresponds to the value dvbTdm of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_dvbTdm E_IETFInterfaces_InterfaceType = 81 + // IETFInterfaces_InterfaceType_e1 corresponds to the value e1 of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_e1 E_IETFInterfaces_InterfaceType = 82 + // IETFInterfaces_InterfaceType_econet corresponds to the value econet of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_econet E_IETFInterfaces_InterfaceType = 83 + // IETFInterfaces_InterfaceType_eon corresponds to the value eon of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_eon E_IETFInterfaces_InterfaceType = 84 + // IETFInterfaces_InterfaceType_eplrs corresponds to the value eplrs of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_eplrs E_IETFInterfaces_InterfaceType = 85 + // IETFInterfaces_InterfaceType_escon corresponds to the value escon of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_escon E_IETFInterfaces_InterfaceType = 86 + // IETFInterfaces_InterfaceType_ethernet3Mbit corresponds to the value ethernet3Mbit of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_ethernet3Mbit E_IETFInterfaces_InterfaceType = 87 + // IETFInterfaces_InterfaceType_ethernetCsmacd corresponds to the value ethernetCsmacd of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_ethernetCsmacd E_IETFInterfaces_InterfaceType = 88 + // IETFInterfaces_InterfaceType_fast corresponds to the value fast of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_fast E_IETFInterfaces_InterfaceType = 89 + // IETFInterfaces_InterfaceType_fastEther corresponds to the value fastEther of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_fastEther E_IETFInterfaces_InterfaceType = 90 + // IETFInterfaces_InterfaceType_fastEtherFX corresponds to the value fastEtherFX of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_fastEtherFX E_IETFInterfaces_InterfaceType = 91 + // IETFInterfaces_InterfaceType_fastdsl corresponds to the value fastdsl of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_fastdsl E_IETFInterfaces_InterfaceType = 92 + // IETFInterfaces_InterfaceType_fcipLink corresponds to the value fcipLink of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_fcipLink E_IETFInterfaces_InterfaceType = 93 + // IETFInterfaces_InterfaceType_fddi corresponds to the value fddi of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_fddi E_IETFInterfaces_InterfaceType = 94 + // IETFInterfaces_InterfaceType_fibreChannel corresponds to the value fibreChannel of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_fibreChannel E_IETFInterfaces_InterfaceType = 95 + // IETFInterfaces_InterfaceType_frDlciEndPt corresponds to the value frDlciEndPt of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_frDlciEndPt E_IETFInterfaces_InterfaceType = 96 + // IETFInterfaces_InterfaceType_frForward corresponds to the value frForward of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_frForward E_IETFInterfaces_InterfaceType = 97 + // IETFInterfaces_InterfaceType_frameRelay corresponds to the value frameRelay of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_frameRelay E_IETFInterfaces_InterfaceType = 98 + // IETFInterfaces_InterfaceType_frameRelayInterconnect corresponds to the value frameRelayInterconnect of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_frameRelayInterconnect E_IETFInterfaces_InterfaceType = 99 + // IETFInterfaces_InterfaceType_frameRelayMPI corresponds to the value frameRelayMPI of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_frameRelayMPI E_IETFInterfaces_InterfaceType = 100 + // IETFInterfaces_InterfaceType_frameRelayService corresponds to the value frameRelayService of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_frameRelayService E_IETFInterfaces_InterfaceType = 101 + // IETFInterfaces_InterfaceType_frf16MfrBundle corresponds to the value frf16MfrBundle of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_frf16MfrBundle E_IETFInterfaces_InterfaceType = 102 + // IETFInterfaces_InterfaceType_g703at2mb corresponds to the value g703at2mb of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_g703at2mb E_IETFInterfaces_InterfaceType = 103 + // IETFInterfaces_InterfaceType_g703at64k corresponds to the value g703at64k of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_g703at64k E_IETFInterfaces_InterfaceType = 104 + // IETFInterfaces_InterfaceType_g9981 corresponds to the value g9981 of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_g9981 E_IETFInterfaces_InterfaceType = 105 + // IETFInterfaces_InterfaceType_g9982 corresponds to the value g9982 of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_g9982 E_IETFInterfaces_InterfaceType = 106 + // IETFInterfaces_InterfaceType_g9983 corresponds to the value g9983 of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_g9983 E_IETFInterfaces_InterfaceType = 107 + // IETFInterfaces_InterfaceType_gfast corresponds to the value gfast of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_gfast E_IETFInterfaces_InterfaceType = 108 + // IETFInterfaces_InterfaceType_gfp corresponds to the value gfp of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_gfp E_IETFInterfaces_InterfaceType = 109 + // IETFInterfaces_InterfaceType_gigabitEthernet corresponds to the value gigabitEthernet of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_gigabitEthernet E_IETFInterfaces_InterfaceType = 110 + // IETFInterfaces_InterfaceType_gpon corresponds to the value gpon of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_gpon E_IETFInterfaces_InterfaceType = 111 + // IETFInterfaces_InterfaceType_gr303IDT corresponds to the value gr303IDT of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_gr303IDT E_IETFInterfaces_InterfaceType = 112 + // IETFInterfaces_InterfaceType_gr303RDT corresponds to the value gr303RDT of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_gr303RDT E_IETFInterfaces_InterfaceType = 113 + // IETFInterfaces_InterfaceType_gtp corresponds to the value gtp of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_gtp E_IETFInterfaces_InterfaceType = 114 + // IETFInterfaces_InterfaceType_h323Gatekeeper corresponds to the value h323Gatekeeper of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_h323Gatekeeper E_IETFInterfaces_InterfaceType = 115 + // IETFInterfaces_InterfaceType_h323Proxy corresponds to the value h323Proxy of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_h323Proxy E_IETFInterfaces_InterfaceType = 116 + // IETFInterfaces_InterfaceType_hdh1822 corresponds to the value hdh1822 of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_hdh1822 E_IETFInterfaces_InterfaceType = 117 + // IETFInterfaces_InterfaceType_hdlc corresponds to the value hdlc of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_hdlc E_IETFInterfaces_InterfaceType = 118 + // IETFInterfaces_InterfaceType_hdsl2 corresponds to the value hdsl2 of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_hdsl2 E_IETFInterfaces_InterfaceType = 119 + // IETFInterfaces_InterfaceType_hiperlan2 corresponds to the value hiperlan2 of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_hiperlan2 E_IETFInterfaces_InterfaceType = 120 + // IETFInterfaces_InterfaceType_hippi corresponds to the value hippi of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_hippi E_IETFInterfaces_InterfaceType = 121 + // IETFInterfaces_InterfaceType_hippiInterface corresponds to the value hippiInterface of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_hippiInterface E_IETFInterfaces_InterfaceType = 122 + // IETFInterfaces_InterfaceType_homepna corresponds to the value homepna of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_homepna E_IETFInterfaces_InterfaceType = 123 + // IETFInterfaces_InterfaceType_hostPad corresponds to the value hostPad of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_hostPad E_IETFInterfaces_InterfaceType = 124 + // IETFInterfaces_InterfaceType_hssi corresponds to the value hssi of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_hssi E_IETFInterfaces_InterfaceType = 125 + // IETFInterfaces_InterfaceType_hyperchannel corresponds to the value hyperchannel of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_hyperchannel E_IETFInterfaces_InterfaceType = 126 + // IETFInterfaces_InterfaceType_iana_interface_type corresponds to the value iana_interface_type of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_iana_interface_type E_IETFInterfaces_InterfaceType = 127 + // IETFInterfaces_InterfaceType_ibm370parChan corresponds to the value ibm370parChan of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_ibm370parChan E_IETFInterfaces_InterfaceType = 128 + // IETFInterfaces_InterfaceType_idsl corresponds to the value idsl of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_idsl E_IETFInterfaces_InterfaceType = 129 + // IETFInterfaces_InterfaceType_ieee1394 corresponds to the value ieee1394 of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_ieee1394 E_IETFInterfaces_InterfaceType = 130 + // IETFInterfaces_InterfaceType_ieee80211 corresponds to the value ieee80211 of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_ieee80211 E_IETFInterfaces_InterfaceType = 131 + // IETFInterfaces_InterfaceType_ieee80212 corresponds to the value ieee80212 of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_ieee80212 E_IETFInterfaces_InterfaceType = 132 + // IETFInterfaces_InterfaceType_ieee802154 corresponds to the value ieee802154 of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_ieee802154 E_IETFInterfaces_InterfaceType = 133 + // IETFInterfaces_InterfaceType_ieee80216WMAN corresponds to the value ieee80216WMAN of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_ieee80216WMAN E_IETFInterfaces_InterfaceType = 134 + // IETFInterfaces_InterfaceType_ieee8023adLag corresponds to the value ieee8023adLag of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_ieee8023adLag E_IETFInterfaces_InterfaceType = 135 + // IETFInterfaces_InterfaceType_if_gsn corresponds to the value if_gsn of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_if_gsn E_IETFInterfaces_InterfaceType = 136 + // IETFInterfaces_InterfaceType_ifPwType corresponds to the value ifPwType of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_ifPwType E_IETFInterfaces_InterfaceType = 137 + // IETFInterfaces_InterfaceType_ifVfiType corresponds to the value ifVfiType of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_ifVfiType E_IETFInterfaces_InterfaceType = 138 + // IETFInterfaces_InterfaceType_ilan corresponds to the value ilan of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_ilan E_IETFInterfaces_InterfaceType = 139 + // IETFInterfaces_InterfaceType_imt corresponds to the value imt of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_imt E_IETFInterfaces_InterfaceType = 140 + // IETFInterfaces_InterfaceType_infiniband corresponds to the value infiniband of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_infiniband E_IETFInterfaces_InterfaceType = 141 + // IETFInterfaces_InterfaceType_interleave corresponds to the value interleave of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_interleave E_IETFInterfaces_InterfaceType = 142 + // IETFInterfaces_InterfaceType_ip corresponds to the value ip of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_ip E_IETFInterfaces_InterfaceType = 143 + // IETFInterfaces_InterfaceType_ipForward corresponds to the value ipForward of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_ipForward E_IETFInterfaces_InterfaceType = 144 + // IETFInterfaces_InterfaceType_ipOverAtm corresponds to the value ipOverAtm of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_ipOverAtm E_IETFInterfaces_InterfaceType = 145 + // IETFInterfaces_InterfaceType_ipOverCdlc corresponds to the value ipOverCdlc of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_ipOverCdlc E_IETFInterfaces_InterfaceType = 146 + // IETFInterfaces_InterfaceType_ipOverClaw corresponds to the value ipOverClaw of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_ipOverClaw E_IETFInterfaces_InterfaceType = 147 + // IETFInterfaces_InterfaceType_ipSwitch corresponds to the value ipSwitch of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_ipSwitch E_IETFInterfaces_InterfaceType = 148 + // IETFInterfaces_InterfaceType_isdn corresponds to the value isdn of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_isdn E_IETFInterfaces_InterfaceType = 149 + // IETFInterfaces_InterfaceType_isdns corresponds to the value isdns of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_isdns E_IETFInterfaces_InterfaceType = 150 + // IETFInterfaces_InterfaceType_isdnu corresponds to the value isdnu of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_isdnu E_IETFInterfaces_InterfaceType = 151 + // IETFInterfaces_InterfaceType_iso88022llc corresponds to the value iso88022llc of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_iso88022llc E_IETFInterfaces_InterfaceType = 152 + // IETFInterfaces_InterfaceType_iso88023Csmacd corresponds to the value iso88023Csmacd of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_iso88023Csmacd E_IETFInterfaces_InterfaceType = 153 + // IETFInterfaces_InterfaceType_iso88024TokenBus corresponds to the value iso88024TokenBus of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_iso88024TokenBus E_IETFInterfaces_InterfaceType = 154 + // IETFInterfaces_InterfaceType_iso88025CRFPInt corresponds to the value iso88025CRFPInt of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_iso88025CRFPInt E_IETFInterfaces_InterfaceType = 155 + // IETFInterfaces_InterfaceType_iso88025Dtr corresponds to the value iso88025Dtr of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_iso88025Dtr E_IETFInterfaces_InterfaceType = 156 + // IETFInterfaces_InterfaceType_iso88025Fiber corresponds to the value iso88025Fiber of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_iso88025Fiber E_IETFInterfaces_InterfaceType = 157 + // IETFInterfaces_InterfaceType_iso88025TokenRing corresponds to the value iso88025TokenRing of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_iso88025TokenRing E_IETFInterfaces_InterfaceType = 158 + // IETFInterfaces_InterfaceType_iso88026Man corresponds to the value iso88026Man of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_iso88026Man E_IETFInterfaces_InterfaceType = 159 + // IETFInterfaces_InterfaceType_isup corresponds to the value isup of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_isup E_IETFInterfaces_InterfaceType = 160 + // IETFInterfaces_InterfaceType_l2vlan corresponds to the value l2vlan of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_l2vlan E_IETFInterfaces_InterfaceType = 161 + // IETFInterfaces_InterfaceType_l3ipvlan corresponds to the value l3ipvlan of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_l3ipvlan E_IETFInterfaces_InterfaceType = 162 + // IETFInterfaces_InterfaceType_l3ipxvlan corresponds to the value l3ipxvlan of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_l3ipxvlan E_IETFInterfaces_InterfaceType = 163 + // IETFInterfaces_InterfaceType_lapb corresponds to the value lapb of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_lapb E_IETFInterfaces_InterfaceType = 164 + // IETFInterfaces_InterfaceType_lapd corresponds to the value lapd of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_lapd E_IETFInterfaces_InterfaceType = 165 + // IETFInterfaces_InterfaceType_lapf corresponds to the value lapf of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_lapf E_IETFInterfaces_InterfaceType = 166 + // IETFInterfaces_InterfaceType_linegroup corresponds to the value linegroup of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_linegroup E_IETFInterfaces_InterfaceType = 167 + // IETFInterfaces_InterfaceType_lmp corresponds to the value lmp of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_lmp E_IETFInterfaces_InterfaceType = 168 + // IETFInterfaces_InterfaceType_localTalk corresponds to the value localTalk of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_localTalk E_IETFInterfaces_InterfaceType = 169 + // IETFInterfaces_InterfaceType_macSecControlledIF corresponds to the value macSecControlledIF of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_macSecControlledIF E_IETFInterfaces_InterfaceType = 170 + // IETFInterfaces_InterfaceType_macSecUncontrolledIF corresponds to the value macSecUncontrolledIF of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_macSecUncontrolledIF E_IETFInterfaces_InterfaceType = 171 + // IETFInterfaces_InterfaceType_mediaMailOverIp corresponds to the value mediaMailOverIp of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_mediaMailOverIp E_IETFInterfaces_InterfaceType = 172 + // IETFInterfaces_InterfaceType_mfSigLink corresponds to the value mfSigLink of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_mfSigLink E_IETFInterfaces_InterfaceType = 173 + // IETFInterfaces_InterfaceType_miox25 corresponds to the value miox25 of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_miox25 E_IETFInterfaces_InterfaceType = 174 + // IETFInterfaces_InterfaceType_mocaVersion1 corresponds to the value mocaVersion1 of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_mocaVersion1 E_IETFInterfaces_InterfaceType = 175 + // IETFInterfaces_InterfaceType_modem corresponds to the value modem of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_modem E_IETFInterfaces_InterfaceType = 176 + // IETFInterfaces_InterfaceType_mpc corresponds to the value mpc of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_mpc E_IETFInterfaces_InterfaceType = 177 + // IETFInterfaces_InterfaceType_mpegTransport corresponds to the value mpegTransport of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_mpegTransport E_IETFInterfaces_InterfaceType = 178 + // IETFInterfaces_InterfaceType_mpls corresponds to the value mpls of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_mpls E_IETFInterfaces_InterfaceType = 179 + // IETFInterfaces_InterfaceType_mplsTunnel corresponds to the value mplsTunnel of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_mplsTunnel E_IETFInterfaces_InterfaceType = 180 + // IETFInterfaces_InterfaceType_msdsl corresponds to the value msdsl of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_msdsl E_IETFInterfaces_InterfaceType = 181 + // IETFInterfaces_InterfaceType_mvl corresponds to the value mvl of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_mvl E_IETFInterfaces_InterfaceType = 182 + // IETFInterfaces_InterfaceType_myrinet corresponds to the value myrinet of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_myrinet E_IETFInterfaces_InterfaceType = 183 + // IETFInterfaces_InterfaceType_nfas corresponds to the value nfas of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_nfas E_IETFInterfaces_InterfaceType = 184 + // IETFInterfaces_InterfaceType_nsip corresponds to the value nsip of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_nsip E_IETFInterfaces_InterfaceType = 185 + // IETFInterfaces_InterfaceType_opticalChannel corresponds to the value opticalChannel of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_opticalChannel E_IETFInterfaces_InterfaceType = 186 + // IETFInterfaces_InterfaceType_opticalChannelGroup corresponds to the value opticalChannelGroup of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_opticalChannelGroup E_IETFInterfaces_InterfaceType = 187 + // IETFInterfaces_InterfaceType_opticalTransport corresponds to the value opticalTransport of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_opticalTransport E_IETFInterfaces_InterfaceType = 188 + // IETFInterfaces_InterfaceType_other corresponds to the value other of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_other E_IETFInterfaces_InterfaceType = 189 + // IETFInterfaces_InterfaceType_otnOdu corresponds to the value otnOdu of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_otnOdu E_IETFInterfaces_InterfaceType = 190 + // IETFInterfaces_InterfaceType_otnOtu corresponds to the value otnOtu of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_otnOtu E_IETFInterfaces_InterfaceType = 191 + // IETFInterfaces_InterfaceType_para corresponds to the value para of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_para E_IETFInterfaces_InterfaceType = 192 + // IETFInterfaces_InterfaceType_pdnEtherLoop1 corresponds to the value pdnEtherLoop1 of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_pdnEtherLoop1 E_IETFInterfaces_InterfaceType = 193 + // IETFInterfaces_InterfaceType_pdnEtherLoop2 corresponds to the value pdnEtherLoop2 of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_pdnEtherLoop2 E_IETFInterfaces_InterfaceType = 194 + // IETFInterfaces_InterfaceType_pip corresponds to the value pip of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_pip E_IETFInterfaces_InterfaceType = 195 + // IETFInterfaces_InterfaceType_plc corresponds to the value plc of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_plc E_IETFInterfaces_InterfaceType = 196 + // IETFInterfaces_InterfaceType_pon155 corresponds to the value pon155 of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_pon155 E_IETFInterfaces_InterfaceType = 197 + // IETFInterfaces_InterfaceType_pon622 corresponds to the value pon622 of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_pon622 E_IETFInterfaces_InterfaceType = 198 + // IETFInterfaces_InterfaceType_pos corresponds to the value pos of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_pos E_IETFInterfaces_InterfaceType = 199 + // IETFInterfaces_InterfaceType_ppp corresponds to the value ppp of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_ppp E_IETFInterfaces_InterfaceType = 200 + // IETFInterfaces_InterfaceType_pppMultilinkBundle corresponds to the value pppMultilinkBundle of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_pppMultilinkBundle E_IETFInterfaces_InterfaceType = 201 + // IETFInterfaces_InterfaceType_primaryISDN corresponds to the value primaryISDN of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_primaryISDN E_IETFInterfaces_InterfaceType = 202 + // IETFInterfaces_InterfaceType_propAtm corresponds to the value propAtm of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_propAtm E_IETFInterfaces_InterfaceType = 203 + // IETFInterfaces_InterfaceType_propBWAp2Mp corresponds to the value propBWAp2Mp of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_propBWAp2Mp E_IETFInterfaces_InterfaceType = 204 + // IETFInterfaces_InterfaceType_propCnls corresponds to the value propCnls of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_propCnls E_IETFInterfaces_InterfaceType = 205 + // IETFInterfaces_InterfaceType_propDocsWirelessDownstream corresponds to the value propDocsWirelessDownstream of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_propDocsWirelessDownstream E_IETFInterfaces_InterfaceType = 206 + // IETFInterfaces_InterfaceType_propDocsWirelessMaclayer corresponds to the value propDocsWirelessMaclayer of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_propDocsWirelessMaclayer E_IETFInterfaces_InterfaceType = 207 + // IETFInterfaces_InterfaceType_propDocsWirelessUpstream corresponds to the value propDocsWirelessUpstream of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_propDocsWirelessUpstream E_IETFInterfaces_InterfaceType = 208 + // IETFInterfaces_InterfaceType_propMultiplexor corresponds to the value propMultiplexor of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_propMultiplexor E_IETFInterfaces_InterfaceType = 209 + // IETFInterfaces_InterfaceType_propPointToPointSerial corresponds to the value propPointToPointSerial of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_propPointToPointSerial E_IETFInterfaces_InterfaceType = 210 + // IETFInterfaces_InterfaceType_propVirtual corresponds to the value propVirtual of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_propVirtual E_IETFInterfaces_InterfaceType = 211 + // IETFInterfaces_InterfaceType_propWirelessP2P corresponds to the value propWirelessP2P of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_propWirelessP2P E_IETFInterfaces_InterfaceType = 212 + // IETFInterfaces_InterfaceType_proteon10Mbit corresponds to the value proteon10Mbit of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_proteon10Mbit E_IETFInterfaces_InterfaceType = 213 + // IETFInterfaces_InterfaceType_proteon80Mbit corresponds to the value proteon80Mbit of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_proteon80Mbit E_IETFInterfaces_InterfaceType = 214 + // IETFInterfaces_InterfaceType_ptm corresponds to the value ptm of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_ptm E_IETFInterfaces_InterfaceType = 215 + // IETFInterfaces_InterfaceType_q2931 corresponds to the value q2931 of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_q2931 E_IETFInterfaces_InterfaceType = 216 + // IETFInterfaces_InterfaceType_qam corresponds to the value qam of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_qam E_IETFInterfaces_InterfaceType = 217 + // IETFInterfaces_InterfaceType_qllc corresponds to the value qllc of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_qllc E_IETFInterfaces_InterfaceType = 218 + // IETFInterfaces_InterfaceType_radioMAC corresponds to the value radioMAC of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_radioMAC E_IETFInterfaces_InterfaceType = 219 + // IETFInterfaces_InterfaceType_radsl corresponds to the value radsl of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_radsl E_IETFInterfaces_InterfaceType = 220 + // IETFInterfaces_InterfaceType_reachDSL corresponds to the value reachDSL of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_reachDSL E_IETFInterfaces_InterfaceType = 221 + // IETFInterfaces_InterfaceType_regular1822 corresponds to the value regular1822 of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_regular1822 E_IETFInterfaces_InterfaceType = 222 + // IETFInterfaces_InterfaceType_rfc1483 corresponds to the value rfc1483 of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_rfc1483 E_IETFInterfaces_InterfaceType = 223 + // IETFInterfaces_InterfaceType_rfc877x25 corresponds to the value rfc877x25 of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_rfc877x25 E_IETFInterfaces_InterfaceType = 224 + // IETFInterfaces_InterfaceType_rpr corresponds to the value rpr of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_rpr E_IETFInterfaces_InterfaceType = 225 + // IETFInterfaces_InterfaceType_rs232 corresponds to the value rs232 of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_rs232 E_IETFInterfaces_InterfaceType = 226 + // IETFInterfaces_InterfaceType_rsrb corresponds to the value rsrb of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_rsrb E_IETFInterfaces_InterfaceType = 227 + // IETFInterfaces_InterfaceType_sdci corresponds to the value sdci of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_sdci E_IETFInterfaces_InterfaceType = 228 + // IETFInterfaces_InterfaceType_sdlc corresponds to the value sdlc of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_sdlc E_IETFInterfaces_InterfaceType = 229 + // IETFInterfaces_InterfaceType_sdsl corresponds to the value sdsl of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_sdsl E_IETFInterfaces_InterfaceType = 230 + // IETFInterfaces_InterfaceType_shdsl corresponds to the value shdsl of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_shdsl E_IETFInterfaces_InterfaceType = 231 + // IETFInterfaces_InterfaceType_sip corresponds to the value sip of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_sip E_IETFInterfaces_InterfaceType = 232 + // IETFInterfaces_InterfaceType_sipSig corresponds to the value sipSig of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_sipSig E_IETFInterfaces_InterfaceType = 233 + // IETFInterfaces_InterfaceType_sipTg corresponds to the value sipTg of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_sipTg E_IETFInterfaces_InterfaceType = 234 + // IETFInterfaces_InterfaceType_sixToFour corresponds to the value sixToFour of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_sixToFour E_IETFInterfaces_InterfaceType = 235 + // IETFInterfaces_InterfaceType_slip corresponds to the value slip of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_slip E_IETFInterfaces_InterfaceType = 236 + // IETFInterfaces_InterfaceType_smdsDxi corresponds to the value smdsDxi of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_smdsDxi E_IETFInterfaces_InterfaceType = 237 + // IETFInterfaces_InterfaceType_smdsIcip corresponds to the value smdsIcip of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_smdsIcip E_IETFInterfaces_InterfaceType = 238 + // IETFInterfaces_InterfaceType_softwareLoopback corresponds to the value softwareLoopback of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_softwareLoopback E_IETFInterfaces_InterfaceType = 239 + // IETFInterfaces_InterfaceType_sonet corresponds to the value sonet of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_sonet E_IETFInterfaces_InterfaceType = 240 + // IETFInterfaces_InterfaceType_sonetOverheadChannel corresponds to the value sonetOverheadChannel of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_sonetOverheadChannel E_IETFInterfaces_InterfaceType = 241 + // IETFInterfaces_InterfaceType_sonetPath corresponds to the value sonetPath of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_sonetPath E_IETFInterfaces_InterfaceType = 242 + // IETFInterfaces_InterfaceType_sonetVT corresponds to the value sonetVT of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_sonetVT E_IETFInterfaces_InterfaceType = 243 + // IETFInterfaces_InterfaceType_srp corresponds to the value srp of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_srp E_IETFInterfaces_InterfaceType = 244 + // IETFInterfaces_InterfaceType_ss7SigLink corresponds to the value ss7SigLink of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_ss7SigLink E_IETFInterfaces_InterfaceType = 245 + // IETFInterfaces_InterfaceType_stackToStack corresponds to the value stackToStack of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_stackToStack E_IETFInterfaces_InterfaceType = 246 + // IETFInterfaces_InterfaceType_starLan corresponds to the value starLan of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_starLan E_IETFInterfaces_InterfaceType = 247 + // IETFInterfaces_InterfaceType_tdlc corresponds to the value tdlc of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_tdlc E_IETFInterfaces_InterfaceType = 248 + // IETFInterfaces_InterfaceType_teLink corresponds to the value teLink of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_teLink E_IETFInterfaces_InterfaceType = 249 + // IETFInterfaces_InterfaceType_termPad corresponds to the value termPad of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_termPad E_IETFInterfaces_InterfaceType = 250 + // IETFInterfaces_InterfaceType_tr008 corresponds to the value tr008 of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_tr008 E_IETFInterfaces_InterfaceType = 251 + // IETFInterfaces_InterfaceType_transpHdlc corresponds to the value transpHdlc of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_transpHdlc E_IETFInterfaces_InterfaceType = 252 + // IETFInterfaces_InterfaceType_tunnel corresponds to the value tunnel of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_tunnel E_IETFInterfaces_InterfaceType = 253 + // IETFInterfaces_InterfaceType_ultra corresponds to the value ultra of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_ultra E_IETFInterfaces_InterfaceType = 254 + // IETFInterfaces_InterfaceType_usb corresponds to the value usb of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_usb E_IETFInterfaces_InterfaceType = 255 + // IETFInterfaces_InterfaceType_v11 corresponds to the value v11 of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_v11 E_IETFInterfaces_InterfaceType = 256 + // IETFInterfaces_InterfaceType_v35 corresponds to the value v35 of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_v35 E_IETFInterfaces_InterfaceType = 257 + // IETFInterfaces_InterfaceType_v36 corresponds to the value v36 of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_v36 E_IETFInterfaces_InterfaceType = 258 + // IETFInterfaces_InterfaceType_v37 corresponds to the value v37 of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_v37 E_IETFInterfaces_InterfaceType = 259 + // IETFInterfaces_InterfaceType_vdsl corresponds to the value vdsl of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_vdsl E_IETFInterfaces_InterfaceType = 260 + // IETFInterfaces_InterfaceType_vdsl2 corresponds to the value vdsl2 of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_vdsl2 E_IETFInterfaces_InterfaceType = 261 + // IETFInterfaces_InterfaceType_virtualIpAddress corresponds to the value virtualIpAddress of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_virtualIpAddress E_IETFInterfaces_InterfaceType = 262 + // IETFInterfaces_InterfaceType_virtualTg corresponds to the value virtualTg of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_virtualTg E_IETFInterfaces_InterfaceType = 263 + // IETFInterfaces_InterfaceType_vmwareNicTeam corresponds to the value vmwareNicTeam of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_vmwareNicTeam E_IETFInterfaces_InterfaceType = 264 + // IETFInterfaces_InterfaceType_vmwareVirtualNic corresponds to the value vmwareVirtualNic of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_vmwareVirtualNic E_IETFInterfaces_InterfaceType = 265 + // IETFInterfaces_InterfaceType_voiceDID corresponds to the value voiceDID of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_voiceDID E_IETFInterfaces_InterfaceType = 266 + // IETFInterfaces_InterfaceType_voiceEBS corresponds to the value voiceEBS of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_voiceEBS E_IETFInterfaces_InterfaceType = 267 + // IETFInterfaces_InterfaceType_voiceEM corresponds to the value voiceEM of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_voiceEM E_IETFInterfaces_InterfaceType = 268 + // IETFInterfaces_InterfaceType_voiceEMFGD corresponds to the value voiceEMFGD of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_voiceEMFGD E_IETFInterfaces_InterfaceType = 269 + // IETFInterfaces_InterfaceType_voiceEncap corresponds to the value voiceEncap of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_voiceEncap E_IETFInterfaces_InterfaceType = 270 + // IETFInterfaces_InterfaceType_voiceFGDEANA corresponds to the value voiceFGDEANA of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_voiceFGDEANA E_IETFInterfaces_InterfaceType = 271 + // IETFInterfaces_InterfaceType_voiceFGDOS corresponds to the value voiceFGDOS of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_voiceFGDOS E_IETFInterfaces_InterfaceType = 272 + // IETFInterfaces_InterfaceType_voiceFXO corresponds to the value voiceFXO of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_voiceFXO E_IETFInterfaces_InterfaceType = 273 + // IETFInterfaces_InterfaceType_voiceFXS corresponds to the value voiceFXS of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_voiceFXS E_IETFInterfaces_InterfaceType = 274 + // IETFInterfaces_InterfaceType_voiceOverAtm corresponds to the value voiceOverAtm of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_voiceOverAtm E_IETFInterfaces_InterfaceType = 275 + // IETFInterfaces_InterfaceType_voiceOverCable corresponds to the value voiceOverCable of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_voiceOverCable E_IETFInterfaces_InterfaceType = 276 + // IETFInterfaces_InterfaceType_voiceOverFrameRelay corresponds to the value voiceOverFrameRelay of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_voiceOverFrameRelay E_IETFInterfaces_InterfaceType = 277 + // IETFInterfaces_InterfaceType_voiceOverIp corresponds to the value voiceOverIp of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_voiceOverIp E_IETFInterfaces_InterfaceType = 278 + // IETFInterfaces_InterfaceType_wwanPP corresponds to the value wwanPP of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_wwanPP E_IETFInterfaces_InterfaceType = 279 + // IETFInterfaces_InterfaceType_wwanPP2 corresponds to the value wwanPP2 of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_wwanPP2 E_IETFInterfaces_InterfaceType = 280 + // IETFInterfaces_InterfaceType_x213 corresponds to the value x213 of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_x213 E_IETFInterfaces_InterfaceType = 281 + // IETFInterfaces_InterfaceType_x25huntGroup corresponds to the value x25huntGroup of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_x25huntGroup E_IETFInterfaces_InterfaceType = 282 + // IETFInterfaces_InterfaceType_x25mlp corresponds to the value x25mlp of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_x25mlp E_IETFInterfaces_InterfaceType = 283 + // IETFInterfaces_InterfaceType_x25ple corresponds to the value x25ple of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_x25ple E_IETFInterfaces_InterfaceType = 284 + // IETFInterfaces_InterfaceType_x86Laps corresponds to the value x86Laps of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_x86Laps E_IETFInterfaces_InterfaceType = 285 + // IETFInterfaces_InterfaceType_xboxWireless corresponds to the value xboxWireless of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_xboxWireless E_IETFInterfaces_InterfaceType = 286 +) + +// E_IfAggregate_AggregationType is a derived int64 type which is used to represent +// the enumerated node IfAggregate_AggregationType. An additional value named +// IfAggregate_AggregationType_UNSET is added to the enumeration which is used as +// the nil value, indicating that the enumeration was not explicitly set by +// the program importing the generated structures. +type E_IfAggregate_AggregationType int64 + +// IsYANGGoEnum ensures that IfAggregate_AggregationType implements the yang.GoEnum +// interface. This ensures that IfAggregate_AggregationType can be identified as a +// mapped type for a YANG enumeration. +func (E_IfAggregate_AggregationType) IsYANGGoEnum() {} + +// ΛMap returns the value lookup map associated with IfAggregate_AggregationType. +func (E_IfAggregate_AggregationType) ΛMap() map[string]map[int64]ygot.EnumDefinition { return ΛEnum } + +// String returns a logging-friendly string for E_IfAggregate_AggregationType. +func (e E_IfAggregate_AggregationType) String() string { + return ygot.EnumLogString(e, int64(e), "E_IfAggregate_AggregationType") +} + +const ( + // IfAggregate_AggregationType_UNSET corresponds to the value UNSET of IfAggregate_AggregationType + IfAggregate_AggregationType_UNSET E_IfAggregate_AggregationType = 0 + // IfAggregate_AggregationType_LACP corresponds to the value LACP of IfAggregate_AggregationType + IfAggregate_AggregationType_LACP E_IfAggregate_AggregationType = 1 + // IfAggregate_AggregationType_STATIC corresponds to the value STATIC of IfAggregate_AggregationType + IfAggregate_AggregationType_STATIC E_IfAggregate_AggregationType = 2 +) + +// E_IfEthernet_ETHERNET_SPEED is a derived int64 type which is used to represent +// the enumerated node IfEthernet_ETHERNET_SPEED. An additional value named +// IfEthernet_ETHERNET_SPEED_UNSET is added to the enumeration which is used as +// the nil value, indicating that the enumeration was not explicitly set by +// the program importing the generated structures. +type E_IfEthernet_ETHERNET_SPEED int64 + +// IsYANGGoEnum ensures that IfEthernet_ETHERNET_SPEED implements the yang.GoEnum +// interface. This ensures that IfEthernet_ETHERNET_SPEED can be identified as a +// mapped type for a YANG enumeration. +func (E_IfEthernet_ETHERNET_SPEED) IsYANGGoEnum() {} + +// ΛMap returns the value lookup map associated with IfEthernet_ETHERNET_SPEED. +func (E_IfEthernet_ETHERNET_SPEED) ΛMap() map[string]map[int64]ygot.EnumDefinition { return ΛEnum } + +// String returns a logging-friendly string for E_IfEthernet_ETHERNET_SPEED. +func (e E_IfEthernet_ETHERNET_SPEED) String() string { + return ygot.EnumLogString(e, int64(e), "E_IfEthernet_ETHERNET_SPEED") +} + +const ( + // IfEthernet_ETHERNET_SPEED_UNSET corresponds to the value UNSET of IfEthernet_ETHERNET_SPEED + IfEthernet_ETHERNET_SPEED_UNSET E_IfEthernet_ETHERNET_SPEED = 0 + // IfEthernet_ETHERNET_SPEED_SPEED_100GB corresponds to the value SPEED_100GB of IfEthernet_ETHERNET_SPEED + IfEthernet_ETHERNET_SPEED_SPEED_100GB E_IfEthernet_ETHERNET_SPEED = 1 + // IfEthernet_ETHERNET_SPEED_SPEED_100MB corresponds to the value SPEED_100MB of IfEthernet_ETHERNET_SPEED + IfEthernet_ETHERNET_SPEED_SPEED_100MB E_IfEthernet_ETHERNET_SPEED = 2 + // IfEthernet_ETHERNET_SPEED_SPEED_10GB corresponds to the value SPEED_10GB of IfEthernet_ETHERNET_SPEED + IfEthernet_ETHERNET_SPEED_SPEED_10GB E_IfEthernet_ETHERNET_SPEED = 3 + // IfEthernet_ETHERNET_SPEED_SPEED_10MB corresponds to the value SPEED_10MB of IfEthernet_ETHERNET_SPEED + IfEthernet_ETHERNET_SPEED_SPEED_10MB E_IfEthernet_ETHERNET_SPEED = 4 + // IfEthernet_ETHERNET_SPEED_SPEED_1GB corresponds to the value SPEED_1GB of IfEthernet_ETHERNET_SPEED + IfEthernet_ETHERNET_SPEED_SPEED_1GB E_IfEthernet_ETHERNET_SPEED = 5 + // IfEthernet_ETHERNET_SPEED_SPEED_200GB corresponds to the value SPEED_200GB of IfEthernet_ETHERNET_SPEED + IfEthernet_ETHERNET_SPEED_SPEED_200GB E_IfEthernet_ETHERNET_SPEED = 6 + // IfEthernet_ETHERNET_SPEED_SPEED_2500MB corresponds to the value SPEED_2500MB of IfEthernet_ETHERNET_SPEED + IfEthernet_ETHERNET_SPEED_SPEED_2500MB E_IfEthernet_ETHERNET_SPEED = 7 + // IfEthernet_ETHERNET_SPEED_SPEED_25GB corresponds to the value SPEED_25GB of IfEthernet_ETHERNET_SPEED + IfEthernet_ETHERNET_SPEED_SPEED_25GB E_IfEthernet_ETHERNET_SPEED = 8 + // IfEthernet_ETHERNET_SPEED_SPEED_400GB corresponds to the value SPEED_400GB of IfEthernet_ETHERNET_SPEED + IfEthernet_ETHERNET_SPEED_SPEED_400GB E_IfEthernet_ETHERNET_SPEED = 9 + // IfEthernet_ETHERNET_SPEED_SPEED_40GB corresponds to the value SPEED_40GB of IfEthernet_ETHERNET_SPEED + IfEthernet_ETHERNET_SPEED_SPEED_40GB E_IfEthernet_ETHERNET_SPEED = 10 + // IfEthernet_ETHERNET_SPEED_SPEED_50GB corresponds to the value SPEED_50GB of IfEthernet_ETHERNET_SPEED + IfEthernet_ETHERNET_SPEED_SPEED_50GB E_IfEthernet_ETHERNET_SPEED = 11 + // IfEthernet_ETHERNET_SPEED_SPEED_5GB corresponds to the value SPEED_5GB of IfEthernet_ETHERNET_SPEED + IfEthernet_ETHERNET_SPEED_SPEED_5GB E_IfEthernet_ETHERNET_SPEED = 12 + // IfEthernet_ETHERNET_SPEED_SPEED_600GB corresponds to the value SPEED_600GB of IfEthernet_ETHERNET_SPEED + IfEthernet_ETHERNET_SPEED_SPEED_600GB E_IfEthernet_ETHERNET_SPEED = 13 + // IfEthernet_ETHERNET_SPEED_SPEED_800GB corresponds to the value SPEED_800GB of IfEthernet_ETHERNET_SPEED + IfEthernet_ETHERNET_SPEED_SPEED_800GB E_IfEthernet_ETHERNET_SPEED = 14 + // IfEthernet_ETHERNET_SPEED_SPEED_UNKNOWN corresponds to the value SPEED_UNKNOWN of IfEthernet_ETHERNET_SPEED + IfEthernet_ETHERNET_SPEED_SPEED_UNKNOWN E_IfEthernet_ETHERNET_SPEED = 15 +) + +// E_IfEthernet_INTERFACE_FEC is a derived int64 type which is used to represent +// the enumerated node IfEthernet_INTERFACE_FEC. An additional value named +// IfEthernet_INTERFACE_FEC_UNSET is added to the enumeration which is used as +// the nil value, indicating that the enumeration was not explicitly set by +// the program importing the generated structures. +type E_IfEthernet_INTERFACE_FEC int64 + +// IsYANGGoEnum ensures that IfEthernet_INTERFACE_FEC implements the yang.GoEnum +// interface. This ensures that IfEthernet_INTERFACE_FEC can be identified as a +// mapped type for a YANG enumeration. +func (E_IfEthernet_INTERFACE_FEC) IsYANGGoEnum() {} + +// ΛMap returns the value lookup map associated with IfEthernet_INTERFACE_FEC. +func (E_IfEthernet_INTERFACE_FEC) ΛMap() map[string]map[int64]ygot.EnumDefinition { return ΛEnum } + +// String returns a logging-friendly string for E_IfEthernet_INTERFACE_FEC. +func (e E_IfEthernet_INTERFACE_FEC) String() string { + return ygot.EnumLogString(e, int64(e), "E_IfEthernet_INTERFACE_FEC") +} + +const ( + // IfEthernet_INTERFACE_FEC_UNSET corresponds to the value UNSET of IfEthernet_INTERFACE_FEC + IfEthernet_INTERFACE_FEC_UNSET E_IfEthernet_INTERFACE_FEC = 0 + // IfEthernet_INTERFACE_FEC_FEC_DISABLED corresponds to the value FEC_DISABLED of IfEthernet_INTERFACE_FEC + IfEthernet_INTERFACE_FEC_FEC_DISABLED E_IfEthernet_INTERFACE_FEC = 1 + // IfEthernet_INTERFACE_FEC_FEC_FC corresponds to the value FEC_FC of IfEthernet_INTERFACE_FEC + IfEthernet_INTERFACE_FEC_FEC_FC E_IfEthernet_INTERFACE_FEC = 2 + // IfEthernet_INTERFACE_FEC_FEC_RS528 corresponds to the value FEC_RS528 of IfEthernet_INTERFACE_FEC + IfEthernet_INTERFACE_FEC_FEC_RS528 E_IfEthernet_INTERFACE_FEC = 3 + // IfEthernet_INTERFACE_FEC_FEC_RS544 corresponds to the value FEC_RS544 of IfEthernet_INTERFACE_FEC + IfEthernet_INTERFACE_FEC_FEC_RS544 E_IfEthernet_INTERFACE_FEC = 4 + // IfEthernet_INTERFACE_FEC_FEC_RS544_2X_INTERLEAVE corresponds to the value FEC_RS544_2X_INTERLEAVE of IfEthernet_INTERFACE_FEC + IfEthernet_INTERFACE_FEC_FEC_RS544_2X_INTERLEAVE E_IfEthernet_INTERFACE_FEC = 5 +) + +// E_IfIp_IpAddressOrigin is a derived int64 type which is used to represent +// the enumerated node IfIp_IpAddressOrigin. An additional value named +// IfIp_IpAddressOrigin_UNSET is added to the enumeration which is used as +// the nil value, indicating that the enumeration was not explicitly set by +// the program importing the generated structures. +type E_IfIp_IpAddressOrigin int64 + +// IsYANGGoEnum ensures that IfIp_IpAddressOrigin implements the yang.GoEnum +// interface. This ensures that IfIp_IpAddressOrigin can be identified as a +// mapped type for a YANG enumeration. +func (E_IfIp_IpAddressOrigin) IsYANGGoEnum() {} + +// ΛMap returns the value lookup map associated with IfIp_IpAddressOrigin. +func (E_IfIp_IpAddressOrigin) ΛMap() map[string]map[int64]ygot.EnumDefinition { return ΛEnum } + +// String returns a logging-friendly string for E_IfIp_IpAddressOrigin. +func (e E_IfIp_IpAddressOrigin) String() string { + return ygot.EnumLogString(e, int64(e), "E_IfIp_IpAddressOrigin") +} + +const ( + // IfIp_IpAddressOrigin_UNSET corresponds to the value UNSET of IfIp_IpAddressOrigin + IfIp_IpAddressOrigin_UNSET E_IfIp_IpAddressOrigin = 0 + // IfIp_IpAddressOrigin_OTHER corresponds to the value OTHER of IfIp_IpAddressOrigin + IfIp_IpAddressOrigin_OTHER E_IfIp_IpAddressOrigin = 1 + // IfIp_IpAddressOrigin_STATIC corresponds to the value STATIC of IfIp_IpAddressOrigin + IfIp_IpAddressOrigin_STATIC E_IfIp_IpAddressOrigin = 2 + // IfIp_IpAddressOrigin_DHCP corresponds to the value DHCP of IfIp_IpAddressOrigin + IfIp_IpAddressOrigin_DHCP E_IfIp_IpAddressOrigin = 3 + // IfIp_IpAddressOrigin_LINK_LAYER corresponds to the value LINK_LAYER of IfIp_IpAddressOrigin + IfIp_IpAddressOrigin_LINK_LAYER E_IfIp_IpAddressOrigin = 4 + // IfIp_IpAddressOrigin_RANDOM corresponds to the value RANDOM of IfIp_IpAddressOrigin + IfIp_IpAddressOrigin_RANDOM E_IfIp_IpAddressOrigin = 5 +) + +// E_IfIp_Ipv4AddressType is a derived int64 type which is used to represent +// the enumerated node IfIp_Ipv4AddressType. An additional value named +// IfIp_Ipv4AddressType_UNSET is added to the enumeration which is used as +// the nil value, indicating that the enumeration was not explicitly set by +// the program importing the generated structures. +type E_IfIp_Ipv4AddressType int64 + +// IsYANGGoEnum ensures that IfIp_Ipv4AddressType implements the yang.GoEnum +// interface. This ensures that IfIp_Ipv4AddressType can be identified as a +// mapped type for a YANG enumeration. +func (E_IfIp_Ipv4AddressType) IsYANGGoEnum() {} + +// ΛMap returns the value lookup map associated with IfIp_Ipv4AddressType. +func (E_IfIp_Ipv4AddressType) ΛMap() map[string]map[int64]ygot.EnumDefinition { return ΛEnum } + +// String returns a logging-friendly string for E_IfIp_Ipv4AddressType. +func (e E_IfIp_Ipv4AddressType) String() string { + return ygot.EnumLogString(e, int64(e), "E_IfIp_Ipv4AddressType") +} + +const ( + // IfIp_Ipv4AddressType_UNSET corresponds to the value UNSET of IfIp_Ipv4AddressType + IfIp_Ipv4AddressType_UNSET E_IfIp_Ipv4AddressType = 0 + // IfIp_Ipv4AddressType_PRIMARY corresponds to the value PRIMARY of IfIp_Ipv4AddressType + IfIp_Ipv4AddressType_PRIMARY E_IfIp_Ipv4AddressType = 1 + // IfIp_Ipv4AddressType_SECONDARY corresponds to the value SECONDARY of IfIp_Ipv4AddressType + IfIp_Ipv4AddressType_SECONDARY E_IfIp_Ipv4AddressType = 2 +) + +// E_IfIp_NeighborOrigin is a derived int64 type which is used to represent +// the enumerated node IfIp_NeighborOrigin. An additional value named +// IfIp_NeighborOrigin_UNSET is added to the enumeration which is used as +// the nil value, indicating that the enumeration was not explicitly set by +// the program importing the generated structures. +type E_IfIp_NeighborOrigin int64 + +// IsYANGGoEnum ensures that IfIp_NeighborOrigin implements the yang.GoEnum +// interface. This ensures that IfIp_NeighborOrigin can be identified as a +// mapped type for a YANG enumeration. +func (E_IfIp_NeighborOrigin) IsYANGGoEnum() {} + +// ΛMap returns the value lookup map associated with IfIp_NeighborOrigin. +func (E_IfIp_NeighborOrigin) ΛMap() map[string]map[int64]ygot.EnumDefinition { return ΛEnum } + +// String returns a logging-friendly string for E_IfIp_NeighborOrigin. +func (e E_IfIp_NeighborOrigin) String() string { + return ygot.EnumLogString(e, int64(e), "E_IfIp_NeighborOrigin") +} + +const ( + // IfIp_NeighborOrigin_UNSET corresponds to the value UNSET of IfIp_NeighborOrigin + IfIp_NeighborOrigin_UNSET E_IfIp_NeighborOrigin = 0 + // IfIp_NeighborOrigin_OTHER corresponds to the value OTHER of IfIp_NeighborOrigin + IfIp_NeighborOrigin_OTHER E_IfIp_NeighborOrigin = 1 + // IfIp_NeighborOrigin_STATIC corresponds to the value STATIC of IfIp_NeighborOrigin + IfIp_NeighborOrigin_STATIC E_IfIp_NeighborOrigin = 2 + // IfIp_NeighborOrigin_DYNAMIC corresponds to the value DYNAMIC of IfIp_NeighborOrigin + IfIp_NeighborOrigin_DYNAMIC E_IfIp_NeighborOrigin = 3 +) + +// E_InetTypes_Ipv6AddressType is a derived int64 type which is used to represent +// the enumerated node InetTypes_Ipv6AddressType. An additional value named +// InetTypes_Ipv6AddressType_UNSET is added to the enumeration which is used as +// the nil value, indicating that the enumeration was not explicitly set by +// the program importing the generated structures. +type E_InetTypes_Ipv6AddressType int64 + +// IsYANGGoEnum ensures that InetTypes_Ipv6AddressType implements the yang.GoEnum +// interface. This ensures that InetTypes_Ipv6AddressType can be identified as a +// mapped type for a YANG enumeration. +func (E_InetTypes_Ipv6AddressType) IsYANGGoEnum() {} + +// ΛMap returns the value lookup map associated with InetTypes_Ipv6AddressType. +func (E_InetTypes_Ipv6AddressType) ΛMap() map[string]map[int64]ygot.EnumDefinition { return ΛEnum } + +// String returns a logging-friendly string for E_InetTypes_Ipv6AddressType. +func (e E_InetTypes_Ipv6AddressType) String() string { + return ygot.EnumLogString(e, int64(e), "E_InetTypes_Ipv6AddressType") +} + +const ( + // InetTypes_Ipv6AddressType_UNSET corresponds to the value UNSET of InetTypes_Ipv6AddressType + InetTypes_Ipv6AddressType_UNSET E_InetTypes_Ipv6AddressType = 0 + // InetTypes_Ipv6AddressType_GLOBAL_UNICAST corresponds to the value GLOBAL_UNICAST of InetTypes_Ipv6AddressType + InetTypes_Ipv6AddressType_GLOBAL_UNICAST E_InetTypes_Ipv6AddressType = 1 + // InetTypes_Ipv6AddressType_LINK_LOCAL_UNICAST corresponds to the value LINK_LOCAL_UNICAST of InetTypes_Ipv6AddressType + InetTypes_Ipv6AddressType_LINK_LOCAL_UNICAST E_InetTypes_Ipv6AddressType = 2 +) + +// E_Interface_AdminStatus is a derived int64 type which is used to represent +// the enumerated node Interface_AdminStatus. An additional value named +// Interface_AdminStatus_UNSET is added to the enumeration which is used as +// the nil value, indicating that the enumeration was not explicitly set by +// the program importing the generated structures. +type E_Interface_AdminStatus int64 + +// IsYANGGoEnum ensures that Interface_AdminStatus implements the yang.GoEnum +// interface. This ensures that Interface_AdminStatus can be identified as a +// mapped type for a YANG enumeration. +func (E_Interface_AdminStatus) IsYANGGoEnum() {} + +// ΛMap returns the value lookup map associated with Interface_AdminStatus. +func (E_Interface_AdminStatus) ΛMap() map[string]map[int64]ygot.EnumDefinition { return ΛEnum } + +// String returns a logging-friendly string for E_Interface_AdminStatus. +func (e E_Interface_AdminStatus) String() string { + return ygot.EnumLogString(e, int64(e), "E_Interface_AdminStatus") +} + +const ( + // Interface_AdminStatus_UNSET corresponds to the value UNSET of Interface_AdminStatus + Interface_AdminStatus_UNSET E_Interface_AdminStatus = 0 + // Interface_AdminStatus_UP corresponds to the value UP of Interface_AdminStatus + Interface_AdminStatus_UP E_Interface_AdminStatus = 1 + // Interface_AdminStatus_DOWN corresponds to the value DOWN of Interface_AdminStatus + Interface_AdminStatus_DOWN E_Interface_AdminStatus = 2 + // Interface_AdminStatus_TESTING corresponds to the value TESTING of Interface_AdminStatus + Interface_AdminStatus_TESTING E_Interface_AdminStatus = 3 +) + +// E_Interface_OperStatus is a derived int64 type which is used to represent +// the enumerated node Interface_OperStatus. An additional value named +// Interface_OperStatus_UNSET is added to the enumeration which is used as +// the nil value, indicating that the enumeration was not explicitly set by +// the program importing the generated structures. +type E_Interface_OperStatus int64 + +// IsYANGGoEnum ensures that Interface_OperStatus implements the yang.GoEnum +// interface. This ensures that Interface_OperStatus can be identified as a +// mapped type for a YANG enumeration. +func (E_Interface_OperStatus) IsYANGGoEnum() {} + +// ΛMap returns the value lookup map associated with Interface_OperStatus. +func (E_Interface_OperStatus) ΛMap() map[string]map[int64]ygot.EnumDefinition { return ΛEnum } + +// String returns a logging-friendly string for E_Interface_OperStatus. +func (e E_Interface_OperStatus) String() string { + return ygot.EnumLogString(e, int64(e), "E_Interface_OperStatus") +} + +const ( + // Interface_OperStatus_UNSET corresponds to the value UNSET of Interface_OperStatus + Interface_OperStatus_UNSET E_Interface_OperStatus = 0 + // Interface_OperStatus_UP corresponds to the value UP of Interface_OperStatus + Interface_OperStatus_UP E_Interface_OperStatus = 2 + // Interface_OperStatus_DOWN corresponds to the value DOWN of Interface_OperStatus + Interface_OperStatus_DOWN E_Interface_OperStatus = 3 + // Interface_OperStatus_TESTING corresponds to the value TESTING of Interface_OperStatus + Interface_OperStatus_TESTING E_Interface_OperStatus = 4 + // Interface_OperStatus_UNKNOWN corresponds to the value UNKNOWN of Interface_OperStatus + Interface_OperStatus_UNKNOWN E_Interface_OperStatus = 5 + // Interface_OperStatus_DORMANT corresponds to the value DORMANT of Interface_OperStatus + Interface_OperStatus_DORMANT E_Interface_OperStatus = 6 + // Interface_OperStatus_NOT_PRESENT corresponds to the value NOT_PRESENT of Interface_OperStatus + Interface_OperStatus_NOT_PRESENT E_Interface_OperStatus = 7 + // Interface_OperStatus_LOWER_LAYER_DOWN corresponds to the value LOWER_LAYER_DOWN of Interface_OperStatus + Interface_OperStatus_LOWER_LAYER_DOWN E_Interface_OperStatus = 8 +) + +// E_Ipv6_LearnUnsolicited is a derived int64 type which is used to represent +// the enumerated node Ipv6_LearnUnsolicited. An additional value named +// Ipv6_LearnUnsolicited_UNSET is added to the enumeration which is used as +// the nil value, indicating that the enumeration was not explicitly set by +// the program importing the generated structures. +type E_Ipv6_LearnUnsolicited int64 + +// IsYANGGoEnum ensures that Ipv6_LearnUnsolicited implements the yang.GoEnum +// interface. This ensures that Ipv6_LearnUnsolicited can be identified as a +// mapped type for a YANG enumeration. +func (E_Ipv6_LearnUnsolicited) IsYANGGoEnum() {} + +// ΛMap returns the value lookup map associated with Ipv6_LearnUnsolicited. +func (E_Ipv6_LearnUnsolicited) ΛMap() map[string]map[int64]ygot.EnumDefinition { return ΛEnum } + +// String returns a logging-friendly string for E_Ipv6_LearnUnsolicited. +func (e E_Ipv6_LearnUnsolicited) String() string { + return ygot.EnumLogString(e, int64(e), "E_Ipv6_LearnUnsolicited") +} + +const ( + // Ipv6_LearnUnsolicited_UNSET corresponds to the value UNSET of Ipv6_LearnUnsolicited + Ipv6_LearnUnsolicited_UNSET E_Ipv6_LearnUnsolicited = 0 + // Ipv6_LearnUnsolicited_NONE corresponds to the value NONE of Ipv6_LearnUnsolicited + Ipv6_LearnUnsolicited_NONE E_Ipv6_LearnUnsolicited = 1 + // Ipv6_LearnUnsolicited_GLOBAL corresponds to the value GLOBAL of Ipv6_LearnUnsolicited + Ipv6_LearnUnsolicited_GLOBAL E_Ipv6_LearnUnsolicited = 2 + // Ipv6_LearnUnsolicited_LINK_LOCAL corresponds to the value LINK_LOCAL of Ipv6_LearnUnsolicited + Ipv6_LearnUnsolicited_LINK_LOCAL E_Ipv6_LearnUnsolicited = 3 + // Ipv6_LearnUnsolicited_BOTH corresponds to the value BOTH of Ipv6_LearnUnsolicited + Ipv6_LearnUnsolicited_BOTH E_Ipv6_LearnUnsolicited = 4 +) + +// E_Neighbor_NeighborState is a derived int64 type which is used to represent +// the enumerated node Neighbor_NeighborState. An additional value named +// Neighbor_NeighborState_UNSET is added to the enumeration which is used as +// the nil value, indicating that the enumeration was not explicitly set by +// the program importing the generated structures. +type E_Neighbor_NeighborState int64 + +// IsYANGGoEnum ensures that Neighbor_NeighborState implements the yang.GoEnum +// interface. This ensures that Neighbor_NeighborState can be identified as a +// mapped type for a YANG enumeration. +func (E_Neighbor_NeighborState) IsYANGGoEnum() {} + +// ΛMap returns the value lookup map associated with Neighbor_NeighborState. +func (E_Neighbor_NeighborState) ΛMap() map[string]map[int64]ygot.EnumDefinition { return ΛEnum } + +// String returns a logging-friendly string for E_Neighbor_NeighborState. +func (e E_Neighbor_NeighborState) String() string { + return ygot.EnumLogString(e, int64(e), "E_Neighbor_NeighborState") +} + +const ( + // Neighbor_NeighborState_UNSET corresponds to the value UNSET of Neighbor_NeighborState + Neighbor_NeighborState_UNSET E_Neighbor_NeighborState = 0 + // Neighbor_NeighborState_INCOMPLETE corresponds to the value INCOMPLETE of Neighbor_NeighborState + Neighbor_NeighborState_INCOMPLETE E_Neighbor_NeighborState = 1 + // Neighbor_NeighborState_REACHABLE corresponds to the value REACHABLE of Neighbor_NeighborState + Neighbor_NeighborState_REACHABLE E_Neighbor_NeighborState = 2 + // Neighbor_NeighborState_STALE corresponds to the value STALE of Neighbor_NeighborState + Neighbor_NeighborState_STALE E_Neighbor_NeighborState = 3 + // Neighbor_NeighborState_DELAY corresponds to the value DELAY of Neighbor_NeighborState + Neighbor_NeighborState_DELAY E_Neighbor_NeighborState = 4 + // Neighbor_NeighborState_PROBE corresponds to the value PROBE of Neighbor_NeighborState + Neighbor_NeighborState_PROBE E_Neighbor_NeighborState = 5 +) + +// E_ProxyArp_Mode is a derived int64 type which is used to represent +// the enumerated node ProxyArp_Mode. An additional value named +// ProxyArp_Mode_UNSET is added to the enumeration which is used as +// the nil value, indicating that the enumeration was not explicitly set by +// the program importing the generated structures. +type E_ProxyArp_Mode int64 + +// IsYANGGoEnum ensures that ProxyArp_Mode implements the yang.GoEnum +// interface. This ensures that ProxyArp_Mode can be identified as a +// mapped type for a YANG enumeration. +func (E_ProxyArp_Mode) IsYANGGoEnum() {} + +// ΛMap returns the value lookup map associated with ProxyArp_Mode. +func (E_ProxyArp_Mode) ΛMap() map[string]map[int64]ygot.EnumDefinition { return ΛEnum } + +// String returns a logging-friendly string for E_ProxyArp_Mode. +func (e E_ProxyArp_Mode) String() string { + return ygot.EnumLogString(e, int64(e), "E_ProxyArp_Mode") +} + +const ( + // ProxyArp_Mode_UNSET corresponds to the value UNSET of ProxyArp_Mode + ProxyArp_Mode_UNSET E_ProxyArp_Mode = 0 + // ProxyArp_Mode_DISABLE corresponds to the value DISABLE of ProxyArp_Mode + ProxyArp_Mode_DISABLE E_ProxyArp_Mode = 1 + // ProxyArp_Mode_REMOTE_ONLY corresponds to the value REMOTE_ONLY of ProxyArp_Mode + ProxyArp_Mode_REMOTE_ONLY E_ProxyArp_Mode = 2 + // ProxyArp_Mode_ALL corresponds to the value ALL of ProxyArp_Mode + ProxyArp_Mode_ALL E_ProxyArp_Mode = 3 +) + +// E_RouterAdvertisement_Mode is a derived int64 type which is used to represent +// the enumerated node RouterAdvertisement_Mode. An additional value named +// RouterAdvertisement_Mode_UNSET is added to the enumeration which is used as +// the nil value, indicating that the enumeration was not explicitly set by +// the program importing the generated structures. +type E_RouterAdvertisement_Mode int64 + +// IsYANGGoEnum ensures that RouterAdvertisement_Mode implements the yang.GoEnum +// interface. This ensures that RouterAdvertisement_Mode can be identified as a +// mapped type for a YANG enumeration. +func (E_RouterAdvertisement_Mode) IsYANGGoEnum() {} + +// ΛMap returns the value lookup map associated with RouterAdvertisement_Mode. +func (E_RouterAdvertisement_Mode) ΛMap() map[string]map[int64]ygot.EnumDefinition { return ΛEnum } + +// String returns a logging-friendly string for E_RouterAdvertisement_Mode. +func (e E_RouterAdvertisement_Mode) String() string { + return ygot.EnumLogString(e, int64(e), "E_RouterAdvertisement_Mode") +} + +const ( + // RouterAdvertisement_Mode_UNSET corresponds to the value UNSET of RouterAdvertisement_Mode + RouterAdvertisement_Mode_UNSET E_RouterAdvertisement_Mode = 0 + // RouterAdvertisement_Mode_ALL corresponds to the value ALL of RouterAdvertisement_Mode + RouterAdvertisement_Mode_ALL E_RouterAdvertisement_Mode = 1 + // RouterAdvertisement_Mode_DISABLE_UNSOLICITED_RA corresponds to the value DISABLE_UNSOLICITED_RA of RouterAdvertisement_Mode + RouterAdvertisement_Mode_DISABLE_UNSOLICITED_RA E_RouterAdvertisement_Mode = 2 +) + +// E_TransportTypes_LoopbackModeType is a derived int64 type which is used to represent +// the enumerated node TransportTypes_LoopbackModeType. An additional value named +// TransportTypes_LoopbackModeType_UNSET is added to the enumeration which is used as +// the nil value, indicating that the enumeration was not explicitly set by +// the program importing the generated structures. +type E_TransportTypes_LoopbackModeType int64 + +// IsYANGGoEnum ensures that TransportTypes_LoopbackModeType implements the yang.GoEnum +// interface. This ensures that TransportTypes_LoopbackModeType can be identified as a +// mapped type for a YANG enumeration. +func (E_TransportTypes_LoopbackModeType) IsYANGGoEnum() {} + +// ΛMap returns the value lookup map associated with TransportTypes_LoopbackModeType. +func (E_TransportTypes_LoopbackModeType) ΛMap() map[string]map[int64]ygot.EnumDefinition { + return ΛEnum +} + +// String returns a logging-friendly string for E_TransportTypes_LoopbackModeType. +func (e E_TransportTypes_LoopbackModeType) String() string { + return ygot.EnumLogString(e, int64(e), "E_TransportTypes_LoopbackModeType") +} + +const ( + // TransportTypes_LoopbackModeType_UNSET corresponds to the value UNSET of TransportTypes_LoopbackModeType + TransportTypes_LoopbackModeType_UNSET E_TransportTypes_LoopbackModeType = 0 + // TransportTypes_LoopbackModeType_NONE corresponds to the value NONE of TransportTypes_LoopbackModeType + TransportTypes_LoopbackModeType_NONE E_TransportTypes_LoopbackModeType = 1 + // TransportTypes_LoopbackModeType_FACILITY corresponds to the value FACILITY of TransportTypes_LoopbackModeType + TransportTypes_LoopbackModeType_FACILITY E_TransportTypes_LoopbackModeType = 2 + // TransportTypes_LoopbackModeType_TERMINAL corresponds to the value TERMINAL of TransportTypes_LoopbackModeType + TransportTypes_LoopbackModeType_TERMINAL E_TransportTypes_LoopbackModeType = 3 + // TransportTypes_LoopbackModeType_ASIC_PHY_LOCAL corresponds to the value ASIC_PHY_LOCAL of TransportTypes_LoopbackModeType + TransportTypes_LoopbackModeType_ASIC_PHY_LOCAL E_TransportTypes_LoopbackModeType = 4 + // TransportTypes_LoopbackModeType_ASIC_PHY_REMOTE corresponds to the value ASIC_PHY_REMOTE of TransportTypes_LoopbackModeType + TransportTypes_LoopbackModeType_ASIC_PHY_REMOTE E_TransportTypes_LoopbackModeType = 5 + // TransportTypes_LoopbackModeType_ASIC_MAC_LOCAL corresponds to the value ASIC_MAC_LOCAL of TransportTypes_LoopbackModeType + TransportTypes_LoopbackModeType_ASIC_MAC_LOCAL E_TransportTypes_LoopbackModeType = 6 + // TransportTypes_LoopbackModeType_ASIC_MAC_REMOTE corresponds to the value ASIC_MAC_REMOTE of TransportTypes_LoopbackModeType + TransportTypes_LoopbackModeType_ASIC_MAC_REMOTE E_TransportTypes_LoopbackModeType = 7 +) + +// E_VlanTypes_TPID_TYPES is a derived int64 type which is used to represent +// the enumerated node VlanTypes_TPID_TYPES. An additional value named +// VlanTypes_TPID_TYPES_UNSET is added to the enumeration which is used as +// the nil value, indicating that the enumeration was not explicitly set by +// the program importing the generated structures. +type E_VlanTypes_TPID_TYPES int64 + +// IsYANGGoEnum ensures that VlanTypes_TPID_TYPES implements the yang.GoEnum +// interface. This ensures that VlanTypes_TPID_TYPES can be identified as a +// mapped type for a YANG enumeration. +func (E_VlanTypes_TPID_TYPES) IsYANGGoEnum() {} + +// ΛMap returns the value lookup map associated with VlanTypes_TPID_TYPES. +func (E_VlanTypes_TPID_TYPES) ΛMap() map[string]map[int64]ygot.EnumDefinition { return ΛEnum } + +// String returns a logging-friendly string for E_VlanTypes_TPID_TYPES. +func (e E_VlanTypes_TPID_TYPES) String() string { + return ygot.EnumLogString(e, int64(e), "E_VlanTypes_TPID_TYPES") +} + +const ( + // VlanTypes_TPID_TYPES_UNSET corresponds to the value UNSET of VlanTypes_TPID_TYPES + VlanTypes_TPID_TYPES_UNSET E_VlanTypes_TPID_TYPES = 0 + // VlanTypes_TPID_TYPES_TPID_0X8100 corresponds to the value TPID_0X8100 of VlanTypes_TPID_TYPES + VlanTypes_TPID_TYPES_TPID_0X8100 E_VlanTypes_TPID_TYPES = 1 + // VlanTypes_TPID_TYPES_TPID_0X88A8 corresponds to the value TPID_0X88A8 of VlanTypes_TPID_TYPES + VlanTypes_TPID_TYPES_TPID_0X88A8 E_VlanTypes_TPID_TYPES = 2 + // VlanTypes_TPID_TYPES_TPID_0X9100 corresponds to the value TPID_0X9100 of VlanTypes_TPID_TYPES + VlanTypes_TPID_TYPES_TPID_0X9100 E_VlanTypes_TPID_TYPES = 3 + // VlanTypes_TPID_TYPES_TPID_0X9200 corresponds to the value TPID_0X9200 of VlanTypes_TPID_TYPES + VlanTypes_TPID_TYPES_TPID_0X9200 E_VlanTypes_TPID_TYPES = 4 + // VlanTypes_TPID_TYPES_TPID_ANY corresponds to the value TPID_ANY of VlanTypes_TPID_TYPES + VlanTypes_TPID_TYPES_TPID_ANY E_VlanTypes_TPID_TYPES = 5 +) + +// E_VlanTypes_VlanModeType is a derived int64 type which is used to represent +// the enumerated node VlanTypes_VlanModeType. An additional value named +// VlanTypes_VlanModeType_UNSET is added to the enumeration which is used as +// the nil value, indicating that the enumeration was not explicitly set by +// the program importing the generated structures. +type E_VlanTypes_VlanModeType int64 + +// IsYANGGoEnum ensures that VlanTypes_VlanModeType implements the yang.GoEnum +// interface. This ensures that VlanTypes_VlanModeType can be identified as a +// mapped type for a YANG enumeration. +func (E_VlanTypes_VlanModeType) IsYANGGoEnum() {} + +// ΛMap returns the value lookup map associated with VlanTypes_VlanModeType. +func (E_VlanTypes_VlanModeType) ΛMap() map[string]map[int64]ygot.EnumDefinition { return ΛEnum } + +// String returns a logging-friendly string for E_VlanTypes_VlanModeType. +func (e E_VlanTypes_VlanModeType) String() string { + return ygot.EnumLogString(e, int64(e), "E_VlanTypes_VlanModeType") +} + +const ( + // VlanTypes_VlanModeType_UNSET corresponds to the value UNSET of VlanTypes_VlanModeType + VlanTypes_VlanModeType_UNSET E_VlanTypes_VlanModeType = 0 + // VlanTypes_VlanModeType_ACCESS corresponds to the value ACCESS of VlanTypes_VlanModeType + VlanTypes_VlanModeType_ACCESS E_VlanTypes_VlanModeType = 1 + // VlanTypes_VlanModeType_TRUNK corresponds to the value TRUNK of VlanTypes_VlanModeType + VlanTypes_VlanModeType_TRUNK E_VlanTypes_VlanModeType = 2 +) + +// E_VlanTypes_VlanStackAction is a derived int64 type which is used to represent +// the enumerated node VlanTypes_VlanStackAction. An additional value named +// VlanTypes_VlanStackAction_UNSET is added to the enumeration which is used as +// the nil value, indicating that the enumeration was not explicitly set by +// the program importing the generated structures. +type E_VlanTypes_VlanStackAction int64 + +// IsYANGGoEnum ensures that VlanTypes_VlanStackAction implements the yang.GoEnum +// interface. This ensures that VlanTypes_VlanStackAction can be identified as a +// mapped type for a YANG enumeration. +func (E_VlanTypes_VlanStackAction) IsYANGGoEnum() {} + +// ΛMap returns the value lookup map associated with VlanTypes_VlanStackAction. +func (E_VlanTypes_VlanStackAction) ΛMap() map[string]map[int64]ygot.EnumDefinition { return ΛEnum } + +// String returns a logging-friendly string for E_VlanTypes_VlanStackAction. +func (e E_VlanTypes_VlanStackAction) String() string { + return ygot.EnumLogString(e, int64(e), "E_VlanTypes_VlanStackAction") +} + +const ( + // VlanTypes_VlanStackAction_UNSET corresponds to the value UNSET of VlanTypes_VlanStackAction + VlanTypes_VlanStackAction_UNSET E_VlanTypes_VlanStackAction = 0 + // VlanTypes_VlanStackAction_PUSH corresponds to the value PUSH of VlanTypes_VlanStackAction + VlanTypes_VlanStackAction_PUSH E_VlanTypes_VlanStackAction = 1 + // VlanTypes_VlanStackAction_POP corresponds to the value POP of VlanTypes_VlanStackAction + VlanTypes_VlanStackAction_POP E_VlanTypes_VlanStackAction = 2 + // VlanTypes_VlanStackAction_SWAP corresponds to the value SWAP of VlanTypes_VlanStackAction + VlanTypes_VlanStackAction_SWAP E_VlanTypes_VlanStackAction = 3 +) diff --git a/internal/provider/openconfig/enum_map.go b/internal/provider/openconfig/enum_map.go new file mode 100644 index 00000000..c383b267 --- /dev/null +++ b/internal/provider/openconfig/enum_map.go @@ -0,0 +1,699 @@ +// SPDX-FileCopyrightText: 2025 SAP SE or an SAP affiliate company and IronCore contributors +// SPDX-License-Identifier: Apache-2.0 + +/* +Package openconfig is a generated package which contains definitions +of structs which represent a YANG schema. The generated schema can be +compressed by a series of transformations (compression was true +in this case). + +This package was generated by ygnmi version: v0.12.0: (ygot: v0.29.20) +using the following YANG input files: + - ./yang/release/models/interfaces/openconfig-interfaces.yang + - ./yang/release/models/interfaces/openconfig-if-ip.yang + - ./yang/third_party/ietf/iana-if-type.yang + +Imported modules were sourced from: + - ./yang/doc + - ./yang/regexp-tests + - ./yang/release/models + - ./yang/release/models/acl + - ./yang/release/models/aft + - ./yang/release/models/ate + - ./yang/release/models/bfd + - ./yang/release/models/bgp + - ./yang/release/models/catalog + - ./yang/release/models/defined-sets + - ./yang/release/models/devices-manifest + - ./yang/release/models/ethernet-segments + - ./yang/release/models/extensions + - ./yang/release/models/firewall + - ./yang/release/models/flex-algo + - ./yang/release/models/gnpsi + - ./yang/release/models/gnsi + - ./yang/release/models/gribi + - ./yang/release/models/grpc + - ./yang/release/models/interfaces + - ./yang/release/models/isis + - ./yang/release/models/keychain + - ./yang/release/models/lacp + - ./yang/release/models/lldp + - ./yang/release/models/local-routing + - ./yang/release/models/macsec + - ./yang/release/models/mpls + - ./yang/release/models/multicast + - ./yang/release/models/network-instance + - ./yang/release/models/oam + - ./yang/release/models/openflow + - ./yang/release/models/optical-transport + - ./yang/release/models/ospf + - ./yang/release/models/p4rt + - ./yang/release/models/pcep + - ./yang/release/models/platform + - ./yang/release/models/policy + - ./yang/release/models/policy-forwarding + - ./yang/release/models/probes + - ./yang/release/models/ptp + - ./yang/release/models/qos + - ./yang/release/models/relay-agent + - ./yang/release/models/rib + - ./yang/release/models/sampling + - ./yang/release/models/segment-routing + - ./yang/release/models/stp + - ./yang/release/models/system + - ./yang/release/models/telemetry + - ./yang/release/models/types + - ./yang/release/models/vlan + - ./yang/release/models/wifi + - ./yang/third_party/ietf +*/ +package openconfig + +import ( + "reflect" + + "github.com/openconfig/ygot/ygot" +) + +// ΛEnum is a map, keyed by the name of the type defined for each enum in the +// generated Go code, which provides a mapping between the constant int64 value +// of each value of the enumeration, and the string that is used to represent it +// in the YANG schema. The map is named ΛEnum in order to avoid clash with any +// valid YANG identifier. +var ΛEnum = map[string]map[int64]ygot.EnumDefinition{ + "E_Address_Status": { + 1: {Name: "PREFERRED"}, + 2: {Name: "DEPRECATED"}, + 3: {Name: "INVALID"}, + 4: {Name: "INACCESSIBLE"}, + 5: {Name: "UNKNOWN"}, + 6: {Name: "TENTATIVE"}, + 7: {Name: "DUPLICATE"}, + 8: {Name: "OPTIMISTIC"}, + }, + "E_Ethernet_DuplexMode": { + 1: {Name: "FULL"}, + 2: {Name: "HALF"}, + }, + "E_Ethernet_NegotiatedDuplexMode": { + 1: {Name: "FULL"}, + 2: {Name: "HALF"}, + }, + "E_IETFInterfaces_InterfaceType": { + 1: {Name: "a12MppSwitch", DefiningModule: "iana-if-type"}, + 2: {Name: "aal2", DefiningModule: "iana-if-type"}, + 3: {Name: "aal5", DefiningModule: "iana-if-type"}, + 4: {Name: "actelisMetaLOOP", DefiningModule: "iana-if-type"}, + 5: {Name: "adsl", DefiningModule: "iana-if-type"}, + 6: {Name: "adsl2", DefiningModule: "iana-if-type"}, + 7: {Name: "adsl2plus", DefiningModule: "iana-if-type"}, + 8: {Name: "aflane8023", DefiningModule: "iana-if-type"}, + 9: {Name: "aflane8025", DefiningModule: "iana-if-type"}, + 10: {Name: "aluELP", DefiningModule: "iana-if-type"}, + 11: {Name: "aluEpon", DefiningModule: "iana-if-type"}, + 12: {Name: "aluEponLogicalLink", DefiningModule: "iana-if-type"}, + 13: {Name: "aluEponOnu", DefiningModule: "iana-if-type"}, + 14: {Name: "aluEponPhysicalUni", DefiningModule: "iana-if-type"}, + 15: {Name: "aluGponOnu", DefiningModule: "iana-if-type"}, + 16: {Name: "aluGponPhysicalUni", DefiningModule: "iana-if-type"}, + 17: {Name: "arap", DefiningModule: "iana-if-type"}, + 18: {Name: "arcnet", DefiningModule: "iana-if-type"}, + 19: {Name: "arcnetPlus", DefiningModule: "iana-if-type"}, + 20: {Name: "async", DefiningModule: "iana-if-type"}, + 21: {Name: "atm", DefiningModule: "iana-if-type"}, + 22: {Name: "atmDxi", DefiningModule: "iana-if-type"}, + 23: {Name: "atmFuni", DefiningModule: "iana-if-type"}, + 24: {Name: "atmIma", DefiningModule: "iana-if-type"}, + 25: {Name: "atmLogical", DefiningModule: "iana-if-type"}, + 26: {Name: "atmRadio", DefiningModule: "iana-if-type"}, + 27: {Name: "atmSubInterface", DefiningModule: "iana-if-type"}, + 28: {Name: "atmVciEndPt", DefiningModule: "iana-if-type"}, + 29: {Name: "atmVirtual", DefiningModule: "iana-if-type"}, + 30: {Name: "atmbond", DefiningModule: "iana-if-type"}, + 31: {Name: "aviciOpticalEther", DefiningModule: "iana-if-type"}, + 32: {Name: "basicISDN", DefiningModule: "iana-if-type"}, + 33: {Name: "bgppolicyaccounting", DefiningModule: "iana-if-type"}, + 34: {Name: "bits", DefiningModule: "iana-if-type"}, + 35: {Name: "bridge", DefiningModule: "iana-if-type"}, + 36: {Name: "bsc", DefiningModule: "iana-if-type"}, + 37: {Name: "cableDownstreamRfPort", DefiningModule: "iana-if-type"}, + 38: {Name: "capwapDot11Bss", DefiningModule: "iana-if-type"}, + 39: {Name: "capwapDot11Profile", DefiningModule: "iana-if-type"}, + 40: {Name: "capwapWtpVirtualRadio", DefiningModule: "iana-if-type"}, + 41: {Name: "cblVectaStar", DefiningModule: "iana-if-type"}, + 42: {Name: "cctEmul", DefiningModule: "iana-if-type"}, + 43: {Name: "ces", DefiningModule: "iana-if-type"}, + 44: {Name: "channel", DefiningModule: "iana-if-type"}, + 45: {Name: "ciscoISLvlan", DefiningModule: "iana-if-type"}, + 46: {Name: "cnr", DefiningModule: "iana-if-type"}, + 47: {Name: "coffee", DefiningModule: "iana-if-type"}, + 48: {Name: "compositeLink", DefiningModule: "iana-if-type"}, + 49: {Name: "dcn", DefiningModule: "iana-if-type"}, + 50: {Name: "ddnX25", DefiningModule: "iana-if-type"}, + 51: {Name: "digitalPowerline", DefiningModule: "iana-if-type"}, + 52: {Name: "digitalWrapperOverheadChannel", DefiningModule: "iana-if-type"}, + 53: {Name: "dlsw", DefiningModule: "iana-if-type"}, + 54: {Name: "docsCableDownstream", DefiningModule: "iana-if-type"}, + 55: {Name: "docsCableMCmtsDownstream", DefiningModule: "iana-if-type"}, + 56: {Name: "docsCableMaclayer", DefiningModule: "iana-if-type"}, + 57: {Name: "docsCableNdf", DefiningModule: "iana-if-type"}, + 58: {Name: "docsCableNdr", DefiningModule: "iana-if-type"}, + 59: {Name: "docsCableScte55d1FwdOob", DefiningModule: "iana-if-type"}, + 60: {Name: "docsCableScte55d1RetOob", DefiningModule: "iana-if-type"}, + 61: {Name: "docsCableScte55d2DsOob", DefiningModule: "iana-if-type"}, + 62: {Name: "docsCableScte55d2UsOob", DefiningModule: "iana-if-type"}, + 63: {Name: "docsCableUpstream", DefiningModule: "iana-if-type"}, + 64: {Name: "docsCableUpstreamChannel", DefiningModule: "iana-if-type"}, + 65: {Name: "docsCableUpstreamRfPort", DefiningModule: "iana-if-type"}, + 66: {Name: "docsOfdmDownstream", DefiningModule: "iana-if-type"}, + 67: {Name: "docsOfdmaUpstream", DefiningModule: "iana-if-type"}, + 68: {Name: "ds0", DefiningModule: "iana-if-type"}, + 69: {Name: "ds0Bundle", DefiningModule: "iana-if-type"}, + 70: {Name: "ds1", DefiningModule: "iana-if-type"}, + 71: {Name: "ds1FDL", DefiningModule: "iana-if-type"}, + 72: {Name: "ds3", DefiningModule: "iana-if-type"}, + 73: {Name: "dtm", DefiningModule: "iana-if-type"}, + 74: {Name: "dvbAsiIn", DefiningModule: "iana-if-type"}, + 75: {Name: "dvbAsiOut", DefiningModule: "iana-if-type"}, + 76: {Name: "dvbRccDownstream", DefiningModule: "iana-if-type"}, + 77: {Name: "dvbRccMacLayer", DefiningModule: "iana-if-type"}, + 78: {Name: "dvbRccUpstream", DefiningModule: "iana-if-type"}, + 79: {Name: "dvbRcsMacLayer", DefiningModule: "iana-if-type"}, + 80: {Name: "dvbRcsTdma", DefiningModule: "iana-if-type"}, + 81: {Name: "dvbTdm", DefiningModule: "iana-if-type"}, + 82: {Name: "e1", DefiningModule: "iana-if-type"}, + 83: {Name: "econet", DefiningModule: "iana-if-type"}, + 84: {Name: "eon", DefiningModule: "iana-if-type"}, + 85: {Name: "eplrs", DefiningModule: "iana-if-type"}, + 86: {Name: "escon", DefiningModule: "iana-if-type"}, + 87: {Name: "ethernet3Mbit", DefiningModule: "iana-if-type"}, + 88: {Name: "ethernetCsmacd", DefiningModule: "iana-if-type"}, + 89: {Name: "fast", DefiningModule: "iana-if-type"}, + 90: {Name: "fastEther", DefiningModule: "iana-if-type"}, + 91: {Name: "fastEtherFX", DefiningModule: "iana-if-type"}, + 92: {Name: "fastdsl", DefiningModule: "iana-if-type"}, + 93: {Name: "fcipLink", DefiningModule: "iana-if-type"}, + 94: {Name: "fddi", DefiningModule: "iana-if-type"}, + 95: {Name: "fibreChannel", DefiningModule: "iana-if-type"}, + 96: {Name: "frDlciEndPt", DefiningModule: "iana-if-type"}, + 97: {Name: "frForward", DefiningModule: "iana-if-type"}, + 98: {Name: "frameRelay", DefiningModule: "iana-if-type"}, + 99: {Name: "frameRelayInterconnect", DefiningModule: "iana-if-type"}, + 100: {Name: "frameRelayMPI", DefiningModule: "iana-if-type"}, + 101: {Name: "frameRelayService", DefiningModule: "iana-if-type"}, + 102: {Name: "frf16MfrBundle", DefiningModule: "iana-if-type"}, + 103: {Name: "g703at2mb", DefiningModule: "iana-if-type"}, + 104: {Name: "g703at64k", DefiningModule: "iana-if-type"}, + 105: {Name: "g9981", DefiningModule: "iana-if-type"}, + 106: {Name: "g9982", DefiningModule: "iana-if-type"}, + 107: {Name: "g9983", DefiningModule: "iana-if-type"}, + 108: {Name: "gfast", DefiningModule: "iana-if-type"}, + 109: {Name: "gfp", DefiningModule: "iana-if-type"}, + 110: {Name: "gigabitEthernet", DefiningModule: "iana-if-type"}, + 111: {Name: "gpon", DefiningModule: "iana-if-type"}, + 112: {Name: "gr303IDT", DefiningModule: "iana-if-type"}, + 113: {Name: "gr303RDT", DefiningModule: "iana-if-type"}, + 114: {Name: "gtp", DefiningModule: "iana-if-type"}, + 115: {Name: "h323Gatekeeper", DefiningModule: "iana-if-type"}, + 116: {Name: "h323Proxy", DefiningModule: "iana-if-type"}, + 117: {Name: "hdh1822", DefiningModule: "iana-if-type"}, + 118: {Name: "hdlc", DefiningModule: "iana-if-type"}, + 119: {Name: "hdsl2", DefiningModule: "iana-if-type"}, + 120: {Name: "hiperlan2", DefiningModule: "iana-if-type"}, + 121: {Name: "hippi", DefiningModule: "iana-if-type"}, + 122: {Name: "hippiInterface", DefiningModule: "iana-if-type"}, + 123: {Name: "homepna", DefiningModule: "iana-if-type"}, + 124: {Name: "hostPad", DefiningModule: "iana-if-type"}, + 125: {Name: "hssi", DefiningModule: "iana-if-type"}, + 126: {Name: "hyperchannel", DefiningModule: "iana-if-type"}, + 127: {Name: "iana-interface-type", DefiningModule: "iana-if-type"}, + 128: {Name: "ibm370parChan", DefiningModule: "iana-if-type"}, + 129: {Name: "idsl", DefiningModule: "iana-if-type"}, + 130: {Name: "ieee1394", DefiningModule: "iana-if-type"}, + 131: {Name: "ieee80211", DefiningModule: "iana-if-type"}, + 132: {Name: "ieee80212", DefiningModule: "iana-if-type"}, + 133: {Name: "ieee802154", DefiningModule: "iana-if-type"}, + 134: {Name: "ieee80216WMAN", DefiningModule: "iana-if-type"}, + 135: {Name: "ieee8023adLag", DefiningModule: "iana-if-type"}, + 136: {Name: "if-gsn", DefiningModule: "iana-if-type"}, + 137: {Name: "ifPwType", DefiningModule: "iana-if-type"}, + 138: {Name: "ifVfiType", DefiningModule: "iana-if-type"}, + 139: {Name: "ilan", DefiningModule: "iana-if-type"}, + 140: {Name: "imt", DefiningModule: "iana-if-type"}, + 141: {Name: "infiniband", DefiningModule: "iana-if-type"}, + 142: {Name: "interleave", DefiningModule: "iana-if-type"}, + 143: {Name: "ip", DefiningModule: "iana-if-type"}, + 144: {Name: "ipForward", DefiningModule: "iana-if-type"}, + 145: {Name: "ipOverAtm", DefiningModule: "iana-if-type"}, + 146: {Name: "ipOverCdlc", DefiningModule: "iana-if-type"}, + 147: {Name: "ipOverClaw", DefiningModule: "iana-if-type"}, + 148: {Name: "ipSwitch", DefiningModule: "iana-if-type"}, + 149: {Name: "isdn", DefiningModule: "iana-if-type"}, + 150: {Name: "isdns", DefiningModule: "iana-if-type"}, + 151: {Name: "isdnu", DefiningModule: "iana-if-type"}, + 152: {Name: "iso88022llc", DefiningModule: "iana-if-type"}, + 153: {Name: "iso88023Csmacd", DefiningModule: "iana-if-type"}, + 154: {Name: "iso88024TokenBus", DefiningModule: "iana-if-type"}, + 155: {Name: "iso88025CRFPInt", DefiningModule: "iana-if-type"}, + 156: {Name: "iso88025Dtr", DefiningModule: "iana-if-type"}, + 157: {Name: "iso88025Fiber", DefiningModule: "iana-if-type"}, + 158: {Name: "iso88025TokenRing", DefiningModule: "iana-if-type"}, + 159: {Name: "iso88026Man", DefiningModule: "iana-if-type"}, + 160: {Name: "isup", DefiningModule: "iana-if-type"}, + 161: {Name: "l2vlan", DefiningModule: "iana-if-type"}, + 162: {Name: "l3ipvlan", DefiningModule: "iana-if-type"}, + 163: {Name: "l3ipxvlan", DefiningModule: "iana-if-type"}, + 164: {Name: "lapb", DefiningModule: "iana-if-type"}, + 165: {Name: "lapd", DefiningModule: "iana-if-type"}, + 166: {Name: "lapf", DefiningModule: "iana-if-type"}, + 167: {Name: "linegroup", DefiningModule: "iana-if-type"}, + 168: {Name: "lmp", DefiningModule: "iana-if-type"}, + 169: {Name: "localTalk", DefiningModule: "iana-if-type"}, + 170: {Name: "macSecControlledIF", DefiningModule: "iana-if-type"}, + 171: {Name: "macSecUncontrolledIF", DefiningModule: "iana-if-type"}, + 172: {Name: "mediaMailOverIp", DefiningModule: "iana-if-type"}, + 173: {Name: "mfSigLink", DefiningModule: "iana-if-type"}, + 174: {Name: "miox25", DefiningModule: "iana-if-type"}, + 175: {Name: "mocaVersion1", DefiningModule: "iana-if-type"}, + 176: {Name: "modem", DefiningModule: "iana-if-type"}, + 177: {Name: "mpc", DefiningModule: "iana-if-type"}, + 178: {Name: "mpegTransport", DefiningModule: "iana-if-type"}, + 179: {Name: "mpls", DefiningModule: "iana-if-type"}, + 180: {Name: "mplsTunnel", DefiningModule: "iana-if-type"}, + 181: {Name: "msdsl", DefiningModule: "iana-if-type"}, + 182: {Name: "mvl", DefiningModule: "iana-if-type"}, + 183: {Name: "myrinet", DefiningModule: "iana-if-type"}, + 184: {Name: "nfas", DefiningModule: "iana-if-type"}, + 185: {Name: "nsip", DefiningModule: "iana-if-type"}, + 186: {Name: "opticalChannel", DefiningModule: "iana-if-type"}, + 187: {Name: "opticalChannelGroup", DefiningModule: "iana-if-type"}, + 188: {Name: "opticalTransport", DefiningModule: "iana-if-type"}, + 189: {Name: "other", DefiningModule: "iana-if-type"}, + 190: {Name: "otnOdu", DefiningModule: "iana-if-type"}, + 191: {Name: "otnOtu", DefiningModule: "iana-if-type"}, + 192: {Name: "para", DefiningModule: "iana-if-type"}, + 193: {Name: "pdnEtherLoop1", DefiningModule: "iana-if-type"}, + 194: {Name: "pdnEtherLoop2", DefiningModule: "iana-if-type"}, + 195: {Name: "pip", DefiningModule: "iana-if-type"}, + 196: {Name: "plc", DefiningModule: "iana-if-type"}, + 197: {Name: "pon155", DefiningModule: "iana-if-type"}, + 198: {Name: "pon622", DefiningModule: "iana-if-type"}, + 199: {Name: "pos", DefiningModule: "iana-if-type"}, + 200: {Name: "ppp", DefiningModule: "iana-if-type"}, + 201: {Name: "pppMultilinkBundle", DefiningModule: "iana-if-type"}, + 202: {Name: "primaryISDN", DefiningModule: "iana-if-type"}, + 203: {Name: "propAtm", DefiningModule: "iana-if-type"}, + 204: {Name: "propBWAp2Mp", DefiningModule: "iana-if-type"}, + 205: {Name: "propCnls", DefiningModule: "iana-if-type"}, + 206: {Name: "propDocsWirelessDownstream", DefiningModule: "iana-if-type"}, + 207: {Name: "propDocsWirelessMaclayer", DefiningModule: "iana-if-type"}, + 208: {Name: "propDocsWirelessUpstream", DefiningModule: "iana-if-type"}, + 209: {Name: "propMultiplexor", DefiningModule: "iana-if-type"}, + 210: {Name: "propPointToPointSerial", DefiningModule: "iana-if-type"}, + 211: {Name: "propVirtual", DefiningModule: "iana-if-type"}, + 212: {Name: "propWirelessP2P", DefiningModule: "iana-if-type"}, + 213: {Name: "proteon10Mbit", DefiningModule: "iana-if-type"}, + 214: {Name: "proteon80Mbit", DefiningModule: "iana-if-type"}, + 215: {Name: "ptm", DefiningModule: "iana-if-type"}, + 216: {Name: "q2931", DefiningModule: "iana-if-type"}, + 217: {Name: "qam", DefiningModule: "iana-if-type"}, + 218: {Name: "qllc", DefiningModule: "iana-if-type"}, + 219: {Name: "radioMAC", DefiningModule: "iana-if-type"}, + 220: {Name: "radsl", DefiningModule: "iana-if-type"}, + 221: {Name: "reachDSL", DefiningModule: "iana-if-type"}, + 222: {Name: "regular1822", DefiningModule: "iana-if-type"}, + 223: {Name: "rfc1483", DefiningModule: "iana-if-type"}, + 224: {Name: "rfc877x25", DefiningModule: "iana-if-type"}, + 225: {Name: "rpr", DefiningModule: "iana-if-type"}, + 226: {Name: "rs232", DefiningModule: "iana-if-type"}, + 227: {Name: "rsrb", DefiningModule: "iana-if-type"}, + 228: {Name: "sdci", DefiningModule: "iana-if-type"}, + 229: {Name: "sdlc", DefiningModule: "iana-if-type"}, + 230: {Name: "sdsl", DefiningModule: "iana-if-type"}, + 231: {Name: "shdsl", DefiningModule: "iana-if-type"}, + 232: {Name: "sip", DefiningModule: "iana-if-type"}, + 233: {Name: "sipSig", DefiningModule: "iana-if-type"}, + 234: {Name: "sipTg", DefiningModule: "iana-if-type"}, + 235: {Name: "sixToFour", DefiningModule: "iana-if-type"}, + 236: {Name: "slip", DefiningModule: "iana-if-type"}, + 237: {Name: "smdsDxi", DefiningModule: "iana-if-type"}, + 238: {Name: "smdsIcip", DefiningModule: "iana-if-type"}, + 239: {Name: "softwareLoopback", DefiningModule: "iana-if-type"}, + 240: {Name: "sonet", DefiningModule: "iana-if-type"}, + 241: {Name: "sonetOverheadChannel", DefiningModule: "iana-if-type"}, + 242: {Name: "sonetPath", DefiningModule: "iana-if-type"}, + 243: {Name: "sonetVT", DefiningModule: "iana-if-type"}, + 244: {Name: "srp", DefiningModule: "iana-if-type"}, + 245: {Name: "ss7SigLink", DefiningModule: "iana-if-type"}, + 246: {Name: "stackToStack", DefiningModule: "iana-if-type"}, + 247: {Name: "starLan", DefiningModule: "iana-if-type"}, + 248: {Name: "tdlc", DefiningModule: "iana-if-type"}, + 249: {Name: "teLink", DefiningModule: "iana-if-type"}, + 250: {Name: "termPad", DefiningModule: "iana-if-type"}, + 251: {Name: "tr008", DefiningModule: "iana-if-type"}, + 252: {Name: "transpHdlc", DefiningModule: "iana-if-type"}, + 253: {Name: "tunnel", DefiningModule: "iana-if-type"}, + 254: {Name: "ultra", DefiningModule: "iana-if-type"}, + 255: {Name: "usb", DefiningModule: "iana-if-type"}, + 256: {Name: "v11", DefiningModule: "iana-if-type"}, + 257: {Name: "v35", DefiningModule: "iana-if-type"}, + 258: {Name: "v36", DefiningModule: "iana-if-type"}, + 259: {Name: "v37", DefiningModule: "iana-if-type"}, + 260: {Name: "vdsl", DefiningModule: "iana-if-type"}, + 261: {Name: "vdsl2", DefiningModule: "iana-if-type"}, + 262: {Name: "virtualIpAddress", DefiningModule: "iana-if-type"}, + 263: {Name: "virtualTg", DefiningModule: "iana-if-type"}, + 264: {Name: "vmwareNicTeam", DefiningModule: "iana-if-type"}, + 265: {Name: "vmwareVirtualNic", DefiningModule: "iana-if-type"}, + 266: {Name: "voiceDID", DefiningModule: "iana-if-type"}, + 267: {Name: "voiceEBS", DefiningModule: "iana-if-type"}, + 268: {Name: "voiceEM", DefiningModule: "iana-if-type"}, + 269: {Name: "voiceEMFGD", DefiningModule: "iana-if-type"}, + 270: {Name: "voiceEncap", DefiningModule: "iana-if-type"}, + 271: {Name: "voiceFGDEANA", DefiningModule: "iana-if-type"}, + 272: {Name: "voiceFGDOS", DefiningModule: "iana-if-type"}, + 273: {Name: "voiceFXO", DefiningModule: "iana-if-type"}, + 274: {Name: "voiceFXS", DefiningModule: "iana-if-type"}, + 275: {Name: "voiceOverAtm", DefiningModule: "iana-if-type"}, + 276: {Name: "voiceOverCable", DefiningModule: "iana-if-type"}, + 277: {Name: "voiceOverFrameRelay", DefiningModule: "iana-if-type"}, + 278: {Name: "voiceOverIp", DefiningModule: "iana-if-type"}, + 279: {Name: "wwanPP", DefiningModule: "iana-if-type"}, + 280: {Name: "wwanPP2", DefiningModule: "iana-if-type"}, + 281: {Name: "x213", DefiningModule: "iana-if-type"}, + 282: {Name: "x25huntGroup", DefiningModule: "iana-if-type"}, + 283: {Name: "x25mlp", DefiningModule: "iana-if-type"}, + 284: {Name: "x25ple", DefiningModule: "iana-if-type"}, + 285: {Name: "x86Laps", DefiningModule: "iana-if-type"}, + 286: {Name: "xboxWireless", DefiningModule: "iana-if-type"}, + }, + "E_IfAggregate_AggregationType": { + 1: {Name: "LACP"}, + 2: {Name: "STATIC"}, + }, + "E_IfEthernet_ETHERNET_SPEED": { + 1: {Name: "SPEED_100GB", DefiningModule: "openconfig-if-ethernet"}, + 2: {Name: "SPEED_100MB", DefiningModule: "openconfig-if-ethernet"}, + 3: {Name: "SPEED_10GB", DefiningModule: "openconfig-if-ethernet"}, + 4: {Name: "SPEED_10MB", DefiningModule: "openconfig-if-ethernet"}, + 5: {Name: "SPEED_1GB", DefiningModule: "openconfig-if-ethernet"}, + 6: {Name: "SPEED_200GB", DefiningModule: "openconfig-if-ethernet"}, + 7: {Name: "SPEED_2500MB", DefiningModule: "openconfig-if-ethernet"}, + 8: {Name: "SPEED_25GB", DefiningModule: "openconfig-if-ethernet"}, + 9: {Name: "SPEED_400GB", DefiningModule: "openconfig-if-ethernet"}, + 10: {Name: "SPEED_40GB", DefiningModule: "openconfig-if-ethernet"}, + 11: {Name: "SPEED_50GB", DefiningModule: "openconfig-if-ethernet"}, + 12: {Name: "SPEED_5GB", DefiningModule: "openconfig-if-ethernet"}, + 13: {Name: "SPEED_600GB", DefiningModule: "openconfig-if-ethernet"}, + 14: {Name: "SPEED_800GB", DefiningModule: "openconfig-if-ethernet"}, + 15: {Name: "SPEED_UNKNOWN", DefiningModule: "openconfig-if-ethernet"}, + }, + "E_IfEthernet_INTERFACE_FEC": { + 1: {Name: "FEC_DISABLED", DefiningModule: "openconfig-if-ethernet"}, + 2: {Name: "FEC_FC", DefiningModule: "openconfig-if-ethernet"}, + 3: {Name: "FEC_RS528", DefiningModule: "openconfig-if-ethernet"}, + 4: {Name: "FEC_RS544", DefiningModule: "openconfig-if-ethernet"}, + 5: {Name: "FEC_RS544_2X_INTERLEAVE", DefiningModule: "openconfig-if-ethernet"}, + }, + "E_IfIp_IpAddressOrigin": { + 1: {Name: "OTHER"}, + 2: {Name: "STATIC"}, + 3: {Name: "DHCP"}, + 4: {Name: "LINK_LAYER"}, + 5: {Name: "RANDOM"}, + }, + "E_IfIp_Ipv4AddressType": { + 1: {Name: "PRIMARY"}, + 2: {Name: "SECONDARY"}, + }, + "E_IfIp_NeighborOrigin": { + 1: {Name: "OTHER"}, + 2: {Name: "STATIC"}, + 3: {Name: "DYNAMIC"}, + }, + "E_InetTypes_Ipv6AddressType": { + 1: {Name: "GLOBAL_UNICAST"}, + 2: {Name: "LINK_LOCAL_UNICAST"}, + }, + "E_Interface_AdminStatus": { + 1: {Name: "UP"}, + 2: {Name: "DOWN"}, + 3: {Name: "TESTING"}, + }, + "E_Interface_OperStatus": { + 2: {Name: "UP"}, + 3: {Name: "DOWN"}, + 4: {Name: "TESTING"}, + 5: {Name: "UNKNOWN"}, + 6: {Name: "DORMANT"}, + 7: {Name: "NOT_PRESENT"}, + 8: {Name: "LOWER_LAYER_DOWN"}, + }, + "E_Ipv6_LearnUnsolicited": { + 1: {Name: "NONE"}, + 2: {Name: "GLOBAL"}, + 3: {Name: "LINK_LOCAL"}, + 4: {Name: "BOTH"}, + }, + "E_Neighbor_NeighborState": { + 1: {Name: "INCOMPLETE"}, + 2: {Name: "REACHABLE"}, + 3: {Name: "STALE"}, + 4: {Name: "DELAY"}, + 5: {Name: "PROBE"}, + }, + "E_ProxyArp_Mode": { + 1: {Name: "DISABLE"}, + 2: {Name: "REMOTE_ONLY"}, + 3: {Name: "ALL"}, + }, + "E_RouterAdvertisement_Mode": { + 1: {Name: "ALL"}, + 2: {Name: "DISABLE_UNSOLICITED_RA"}, + }, + "E_TransportTypes_LoopbackModeType": { + 1: {Name: "NONE"}, + 2: {Name: "FACILITY"}, + 3: {Name: "TERMINAL"}, + 4: {Name: "ASIC_PHY_LOCAL"}, + 5: {Name: "ASIC_PHY_REMOTE"}, + 6: {Name: "ASIC_MAC_LOCAL"}, + 7: {Name: "ASIC_MAC_REMOTE"}, + }, + "E_VlanTypes_TPID_TYPES": { + 1: {Name: "TPID_0X8100", DefiningModule: "openconfig-vlan-types"}, + 2: {Name: "TPID_0X88A8", DefiningModule: "openconfig-vlan-types"}, + 3: {Name: "TPID_0X9100", DefiningModule: "openconfig-vlan-types"}, + 4: {Name: "TPID_0X9200", DefiningModule: "openconfig-vlan-types"}, + 5: {Name: "TPID_ANY", DefiningModule: "openconfig-vlan-types"}, + }, + "E_VlanTypes_VlanModeType": { + 1: {Name: "ACCESS"}, + 2: {Name: "TRUNK"}, + }, + "E_VlanTypes_VlanStackAction": { + 1: {Name: "PUSH"}, + 2: {Name: "POP"}, + 3: {Name: "SWAP"}, + }, +} + +// ΛEnumTypes is a map, keyed by a YANG schema path, of the enumerated types that +// correspond with the leaf. The type is represented as a reflect.Type. The naming +// of the map ensures that there are no clashes with valid YANG identifiers. +func initΛEnumTypes() { + ΛEnumTypes = map[string][]reflect.Type{ + "/interfaces/interface/aggregation/config/lag-type": []reflect.Type{ + reflect.TypeOf((E_IfAggregate_AggregationType)(0)), + }, + "/interfaces/interface/aggregation/state/lag-type": []reflect.Type{ + reflect.TypeOf((E_IfAggregate_AggregationType)(0)), + }, + "/interfaces/interface/aggregation/switched-vlan/config/interface-mode": []reflect.Type{ + reflect.TypeOf((E_VlanTypes_VlanModeType)(0)), + }, + "/interfaces/interface/aggregation/switched-vlan/state/interface-mode": []reflect.Type{ + reflect.TypeOf((E_VlanTypes_VlanModeType)(0)), + }, + "/interfaces/interface/config/loopback-mode": []reflect.Type{ + reflect.TypeOf((E_TransportTypes_LoopbackModeType)(0)), + }, + "/interfaces/interface/config/tpid": []reflect.Type{ + reflect.TypeOf((E_VlanTypes_TPID_TYPES)(0)), + }, + "/interfaces/interface/config/type": []reflect.Type{ + reflect.TypeOf((E_IETFInterfaces_InterfaceType)(0)), + }, + "/interfaces/interface/ethernet/config/duplex-mode": []reflect.Type{ + reflect.TypeOf((E_Ethernet_DuplexMode)(0)), + }, + "/interfaces/interface/ethernet/config/fec-mode": []reflect.Type{ + reflect.TypeOf((E_IfEthernet_INTERFACE_FEC)(0)), + }, + "/interfaces/interface/ethernet/config/port-speed": []reflect.Type{ + reflect.TypeOf((E_IfEthernet_ETHERNET_SPEED)(0)), + }, + "/interfaces/interface/ethernet/state/duplex-mode": []reflect.Type{ + reflect.TypeOf((E_Ethernet_DuplexMode)(0)), + }, + "/interfaces/interface/ethernet/state/fec-mode": []reflect.Type{ + reflect.TypeOf((E_IfEthernet_INTERFACE_FEC)(0)), + }, + "/interfaces/interface/ethernet/state/negotiated-duplex-mode": []reflect.Type{ + reflect.TypeOf((E_Ethernet_NegotiatedDuplexMode)(0)), + }, + "/interfaces/interface/ethernet/state/negotiated-port-speed": []reflect.Type{ + reflect.TypeOf((E_IfEthernet_ETHERNET_SPEED)(0)), + }, + "/interfaces/interface/ethernet/state/port-speed": []reflect.Type{ + reflect.TypeOf((E_IfEthernet_ETHERNET_SPEED)(0)), + }, + "/interfaces/interface/ethernet/switched-vlan/config/interface-mode": []reflect.Type{ + reflect.TypeOf((E_VlanTypes_VlanModeType)(0)), + }, + "/interfaces/interface/ethernet/switched-vlan/state/interface-mode": []reflect.Type{ + reflect.TypeOf((E_VlanTypes_VlanModeType)(0)), + }, + "/interfaces/interface/routed-vlan/ipv4/addresses/address/config/type": []reflect.Type{ + reflect.TypeOf((E_IfIp_Ipv4AddressType)(0)), + }, + "/interfaces/interface/routed-vlan/ipv4/addresses/address/state/origin": []reflect.Type{ + reflect.TypeOf((E_IfIp_IpAddressOrigin)(0)), + }, + "/interfaces/interface/routed-vlan/ipv4/addresses/address/state/type": []reflect.Type{ + reflect.TypeOf((E_IfIp_Ipv4AddressType)(0)), + }, + "/interfaces/interface/routed-vlan/ipv4/neighbors/neighbor/state/origin": []reflect.Type{ + reflect.TypeOf((E_IfIp_NeighborOrigin)(0)), + }, + "/interfaces/interface/routed-vlan/ipv4/proxy-arp/config/mode": []reflect.Type{ + reflect.TypeOf((E_ProxyArp_Mode)(0)), + }, + "/interfaces/interface/routed-vlan/ipv4/proxy-arp/state/mode": []reflect.Type{ + reflect.TypeOf((E_ProxyArp_Mode)(0)), + }, + "/interfaces/interface/routed-vlan/ipv6/addresses/address/config/type": []reflect.Type{ + reflect.TypeOf((E_InetTypes_Ipv6AddressType)(0)), + }, + "/interfaces/interface/routed-vlan/ipv6/addresses/address/state/origin": []reflect.Type{ + reflect.TypeOf((E_IfIp_IpAddressOrigin)(0)), + }, + "/interfaces/interface/routed-vlan/ipv6/addresses/address/state/status": []reflect.Type{ + reflect.TypeOf((E_Address_Status)(0)), + }, + "/interfaces/interface/routed-vlan/ipv6/addresses/address/state/type": []reflect.Type{ + reflect.TypeOf((E_InetTypes_Ipv6AddressType)(0)), + }, + "/interfaces/interface/routed-vlan/ipv6/config/learn-unsolicited": []reflect.Type{ + reflect.TypeOf((E_Ipv6_LearnUnsolicited)(0)), + }, + "/interfaces/interface/routed-vlan/ipv6/neighbors/neighbor/state/neighbor-state": []reflect.Type{ + reflect.TypeOf((E_Neighbor_NeighborState)(0)), + }, + "/interfaces/interface/routed-vlan/ipv6/neighbors/neighbor/state/origin": []reflect.Type{ + reflect.TypeOf((E_IfIp_NeighborOrigin)(0)), + }, + "/interfaces/interface/routed-vlan/ipv6/router-advertisement/config/mode": []reflect.Type{ + reflect.TypeOf((E_RouterAdvertisement_Mode)(0)), + }, + "/interfaces/interface/routed-vlan/ipv6/router-advertisement/state/mode": []reflect.Type{ + reflect.TypeOf((E_RouterAdvertisement_Mode)(0)), + }, + "/interfaces/interface/routed-vlan/ipv6/state/learn-unsolicited": []reflect.Type{ + reflect.TypeOf((E_Ipv6_LearnUnsolicited)(0)), + }, + "/interfaces/interface/state/admin-status": []reflect.Type{ + reflect.TypeOf((E_Interface_AdminStatus)(0)), + }, + "/interfaces/interface/state/loopback-mode": []reflect.Type{ + reflect.TypeOf((E_TransportTypes_LoopbackModeType)(0)), + }, + "/interfaces/interface/state/oper-status": []reflect.Type{ + reflect.TypeOf((E_Interface_OperStatus)(0)), + }, + "/interfaces/interface/state/tpid": []reflect.Type{ + reflect.TypeOf((E_VlanTypes_TPID_TYPES)(0)), + }, + "/interfaces/interface/state/type": []reflect.Type{ + reflect.TypeOf((E_IETFInterfaces_InterfaceType)(0)), + }, + "/interfaces/interface/subinterfaces/subinterface/ipv4/addresses/address/config/type": []reflect.Type{ + reflect.TypeOf((E_IfIp_Ipv4AddressType)(0)), + }, + "/interfaces/interface/subinterfaces/subinterface/ipv4/addresses/address/state/origin": []reflect.Type{ + reflect.TypeOf((E_IfIp_IpAddressOrigin)(0)), + }, + "/interfaces/interface/subinterfaces/subinterface/ipv4/addresses/address/state/type": []reflect.Type{ + reflect.TypeOf((E_IfIp_Ipv4AddressType)(0)), + }, + "/interfaces/interface/subinterfaces/subinterface/ipv4/neighbors/neighbor/state/origin": []reflect.Type{ + reflect.TypeOf((E_IfIp_NeighborOrigin)(0)), + }, + "/interfaces/interface/subinterfaces/subinterface/ipv4/proxy-arp/config/mode": []reflect.Type{ + reflect.TypeOf((E_ProxyArp_Mode)(0)), + }, + "/interfaces/interface/subinterfaces/subinterface/ipv4/proxy-arp/state/mode": []reflect.Type{ + reflect.TypeOf((E_ProxyArp_Mode)(0)), + }, + "/interfaces/interface/subinterfaces/subinterface/ipv6/addresses/address/config/type": []reflect.Type{ + reflect.TypeOf((E_InetTypes_Ipv6AddressType)(0)), + }, + "/interfaces/interface/subinterfaces/subinterface/ipv6/addresses/address/state/origin": []reflect.Type{ + reflect.TypeOf((E_IfIp_IpAddressOrigin)(0)), + }, + "/interfaces/interface/subinterfaces/subinterface/ipv6/addresses/address/state/status": []reflect.Type{ + reflect.TypeOf((E_Address_Status)(0)), + }, + "/interfaces/interface/subinterfaces/subinterface/ipv6/addresses/address/state/type": []reflect.Type{ + reflect.TypeOf((E_InetTypes_Ipv6AddressType)(0)), + }, + "/interfaces/interface/subinterfaces/subinterface/ipv6/config/learn-unsolicited": []reflect.Type{ + reflect.TypeOf((E_Ipv6_LearnUnsolicited)(0)), + }, + "/interfaces/interface/subinterfaces/subinterface/ipv6/neighbors/neighbor/state/neighbor-state": []reflect.Type{ + reflect.TypeOf((E_Neighbor_NeighborState)(0)), + }, + "/interfaces/interface/subinterfaces/subinterface/ipv6/neighbors/neighbor/state/origin": []reflect.Type{ + reflect.TypeOf((E_IfIp_NeighborOrigin)(0)), + }, + "/interfaces/interface/subinterfaces/subinterface/ipv6/router-advertisement/config/mode": []reflect.Type{ + reflect.TypeOf((E_RouterAdvertisement_Mode)(0)), + }, + "/interfaces/interface/subinterfaces/subinterface/ipv6/router-advertisement/state/mode": []reflect.Type{ + reflect.TypeOf((E_RouterAdvertisement_Mode)(0)), + }, + "/interfaces/interface/subinterfaces/subinterface/ipv6/state/learn-unsolicited": []reflect.Type{ + reflect.TypeOf((E_Ipv6_LearnUnsolicited)(0)), + }, + "/interfaces/interface/subinterfaces/subinterface/state/admin-status": []reflect.Type{ + reflect.TypeOf((E_Interface_AdminStatus)(0)), + }, + "/interfaces/interface/subinterfaces/subinterface/state/oper-status": []reflect.Type{ + reflect.TypeOf((E_Interface_OperStatus)(0)), + }, + "/interfaces/interface/subinterfaces/subinterface/vlan/egress-mapping/config/tpid": []reflect.Type{ + reflect.TypeOf((E_VlanTypes_TPID_TYPES)(0)), + }, + "/interfaces/interface/subinterfaces/subinterface/vlan/egress-mapping/config/vlan-stack-action": []reflect.Type{ + reflect.TypeOf((E_VlanTypes_VlanStackAction)(0)), + }, + "/interfaces/interface/subinterfaces/subinterface/vlan/egress-mapping/state/tpid": []reflect.Type{ + reflect.TypeOf((E_VlanTypes_TPID_TYPES)(0)), + }, + "/interfaces/interface/subinterfaces/subinterface/vlan/egress-mapping/state/vlan-stack-action": []reflect.Type{ + reflect.TypeOf((E_VlanTypes_VlanStackAction)(0)), + }, + "/interfaces/interface/subinterfaces/subinterface/vlan/ingress-mapping/config/tpid": []reflect.Type{ + reflect.TypeOf((E_VlanTypes_TPID_TYPES)(0)), + }, + "/interfaces/interface/subinterfaces/subinterface/vlan/ingress-mapping/config/vlan-stack-action": []reflect.Type{ + reflect.TypeOf((E_VlanTypes_VlanStackAction)(0)), + }, + "/interfaces/interface/subinterfaces/subinterface/vlan/ingress-mapping/state/tpid": []reflect.Type{ + reflect.TypeOf((E_VlanTypes_TPID_TYPES)(0)), + }, + "/interfaces/interface/subinterfaces/subinterface/vlan/ingress-mapping/state/vlan-stack-action": []reflect.Type{ + reflect.TypeOf((E_VlanTypes_VlanStackAction)(0)), + }, + } +} diff --git a/internal/controller/controller_test.go b/internal/provider/openconfig/gen.go similarity index 75% rename from internal/controller/controller_test.go rename to internal/provider/openconfig/gen.go index a89d91a2..59bbaea4 100644 --- a/internal/controller/controller_test.go +++ b/internal/provider/openconfig/gen.go @@ -1,3 +1,5 @@ // SPDX-FileCopyrightText: 2025 SAP SE or an SAP affiliate company and IronCore contributors // SPDX-License-Identifier: Apache-2.0 -package controller + +//go:generate ./gen.sh +package openconfig diff --git a/internal/provider/openconfig/gen.sh b/internal/provider/openconfig/gen.sh new file mode 100755 index 00000000..a80bdf89 --- /dev/null +++ b/internal/provider/openconfig/gen.sh @@ -0,0 +1,37 @@ +#!/usr/bin/env bash +# SPDX-FileCopyrightText: 2025 SAP SE or an SAP affiliate company and IronCore contributors +# SPDX-License-Identifier: Apache-2.0 +VERSION=5.2.0 + +set -e + +cd "$(dirname "$0")" || exit 1 + +find . ! -name "gen.go" ! -name "gen.sh" ! -name "client.go" ! -name "provider.go" ! -name ".gitignore" -delete + +mkdir -p yang +curl -fsSL https://github.com/openconfig/public/archive/refs/tags/v$VERSION.tar.gz | tar -C yang --strip-components=1 -xf - public-$VERSION + +go run github.com/openconfig/ygnmi/app/ygnmi@v0.12.0 generator \ + --fakeroot_name=device \ + --root_package_name=openconfig \ + --trim_module_prefix=openconfig \ + --prefer_operational_state=false \ + --split_top_level_packages=false \ + --exclude_modules=ietf-interfaces \ + --paths="$(find . -type f -name "*.yang" -exec dirname {} \; | sort -u | paste -sd, -)" \ + --base_package_path=github.com/ironcore-dev/network-operator/internal/provider/openconfig \ + ./yang/release/models/interfaces/openconfig-interfaces.yang \ + ./yang/release/models/interfaces/openconfig-if-ip.yang \ + ./yang/third_party/ietf/iana-if-type.yang + +mv structs-0.go structs.go + +sed 's/oc\.//g; s/oc\ "github.com\/ironcore-dev\/network-operator\/internal\/provider\/openconfig"//' openconfig/openconfig.go >path.go +rm -rf openconfig + +go run golang.org/x/tools/cmd/goimports@v0.35.0 -w . +go run github.com/google/addlicense@v1.1.1 -c "SAP SE or an SAP affiliate company and IronCore contributors" -s=only -y "$(date +%Y)" . + +find . -type f -name "*.go" -exec sed -i.bak '1s|// Copyright|// SPDX-FileCopyrightText:|' {} \; +find . -type f -name "*.bak" -delete diff --git a/internal/provider/openconfig/path.go b/internal/provider/openconfig/path.go new file mode 100644 index 00000000..5b07560b --- /dev/null +++ b/internal/provider/openconfig/path.go @@ -0,0 +1,72529 @@ +// SPDX-FileCopyrightText: 2025 SAP SE or an SAP affiliate company and IronCore contributors +// SPDX-License-Identifier: Apache-2.0 + +/* +Package openconfig is a generated package which contains definitions +of structs which generate gNMI paths for a YANG schema. + +This package was generated by ygnmi version: v0.12.0: (ygot: v0.29.20) +using the following YANG input files: + - ./yang/release/models/interfaces/openconfig-interfaces.yang + - ./yang/release/models/interfaces/openconfig-if-ip.yang + - ./yang/third_party/ietf/iana-if-type.yang + +Imported modules were sourced from: + - ./yang/doc + - ./yang/regexp-tests + - ./yang/release/models + - ./yang/release/models/acl + - ./yang/release/models/aft + - ./yang/release/models/ate + - ./yang/release/models/bfd + - ./yang/release/models/bgp + - ./yang/release/models/catalog + - ./yang/release/models/defined-sets + - ./yang/release/models/devices-manifest + - ./yang/release/models/ethernet-segments + - ./yang/release/models/extensions + - ./yang/release/models/firewall + - ./yang/release/models/flex-algo + - ./yang/release/models/gnpsi + - ./yang/release/models/gnsi + - ./yang/release/models/gribi + - ./yang/release/models/grpc + - ./yang/release/models/interfaces + - ./yang/release/models/isis + - ./yang/release/models/keychain + - ./yang/release/models/lacp + - ./yang/release/models/lldp + - ./yang/release/models/local-routing + - ./yang/release/models/macsec + - ./yang/release/models/mpls + - ./yang/release/models/multicast + - ./yang/release/models/network-instance + - ./yang/release/models/oam + - ./yang/release/models/openflow + - ./yang/release/models/optical-transport + - ./yang/release/models/ospf + - ./yang/release/models/p4rt + - ./yang/release/models/pcep + - ./yang/release/models/platform + - ./yang/release/models/policy + - ./yang/release/models/policy-forwarding + - ./yang/release/models/probes + - ./yang/release/models/ptp + - ./yang/release/models/qos + - ./yang/release/models/relay-agent + - ./yang/release/models/rib + - ./yang/release/models/sampling + - ./yang/release/models/segment-routing + - ./yang/release/models/stp + - ./yang/release/models/system + - ./yang/release/models/telemetry + - ./yang/release/models/types + - ./yang/release/models/vlan + - ./yang/release/models/wifi + - ./yang/third_party/ietf +*/ +package openconfig + +import ( + "reflect" + + "github.com/openconfig/ygnmi/ygnmi" + "github.com/openconfig/ygot/ygot" + "github.com/openconfig/ygot/ytypes" +) + +// DevicePath represents the /device YANG schema element. +type DevicePath struct { + *ygnmi.DeviceRootBase +} + +// Root returns a root path object from which YANG paths can be constructed. +func Root() *DevicePath { + return &DevicePath{ygnmi.NewDeviceRootBase()} +} + +// InterfaceAny (list): The list of named interfaces on the device. +// +// Defining module: "openconfig-interfaces" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "interfaces/interface" +// Path from root: "/interfaces/interface" +func (n *DevicePath) InterfaceAny() *InterfacePathAny { + ps := &InterfacePathAny{ + NodePath: ygnmi.NewNodePath( + []string{"interfaces", "interface"}, + map[string]interface{}{"name": "*"}, + n, + ), + } + return ps +} + +// Interface (list): The list of named interfaces on the device. +// +// Defining module: "openconfig-interfaces" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "interfaces/interface" +// Path from root: "/interfaces/interface" +// +// Name: string +func (n *DevicePath) Interface(Name string) *InterfacePath { + ps := &InterfacePath{ + NodePath: ygnmi.NewNodePath( + []string{"interfaces", "interface"}, + map[string]interface{}{"name": Name}, + n, + ), + } + return ps +} + +// InterfaceMap (list): The list of named interfaces on the device. +// +// Defining module: "openconfig-interfaces" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "interfaces/interface" +// Path from root: "/interfaces/interface" +func (n *DevicePath) InterfaceMap() *InterfacePathMap { + ps := &InterfacePathMap{ + NodePath: ygnmi.NewNodePath( + []string{"interfaces"}, + map[string]interface{}{}, + n, + ), + } + return ps +} + +// Batch contains a collection of paths. +// Use batch to call Lookup, Watch, etc. on multiple paths at once. +type Batch struct { + paths []ygnmi.PathStruct +} + +// AddPaths adds the paths to the batch. +func (b *Batch) AddPaths(paths ...ygnmi.PathStruct) *Batch { + b.paths = append(b.paths, paths...) + return b +} + +// State returns a Query that can be used in gNMI operations. +// The returned query is immutable, adding paths does not modify existing queries. +func (b *Batch) State() ygnmi.SingletonQuery[*Device] { + queryPaths := make([]ygnmi.PathStruct, len(b.paths)) + copy(queryPaths, b.paths) + return ygnmi.NewSingletonQuery[*Device]( + "Device", + true, + true, + false, + false, + true, + false, + ygnmi.NewDeviceRootBase(), + nil, + nil, + func() *ytypes.Schema { + return &ytypes.Schema{ + Root: &Device{}, + SchemaTree: SchemaTree, + Unmarshal: Unmarshal, + } + }, + queryPaths, + nil, + ) +} + +// Config returns a Query that can be used in gNMI operations. +// The returned query is immutable, adding paths does not modify existing queries. +func (b *Batch) Config() ygnmi.SingletonQuery[*Device] { + queryPaths := make([]ygnmi.PathStruct, len(b.paths)) + copy(queryPaths, b.paths) + return ygnmi.NewSingletonQuery[*Device]( + "Device", + false, + false, + false, + false, + true, + false, + ygnmi.NewDeviceRootBase(), + nil, + nil, + func() *ytypes.Schema { + return &ytypes.Schema{ + Root: &Device{}, + SchemaTree: SchemaTree, + Unmarshal: Unmarshal, + } + }, + queryPaths, + nil, + ) +} + +func binarySliceToFloatSlice(in []Binary) []float32 { + converted := make([]float32, 0, len(in)) + for _, binary := range in { + converted = append(converted, ygot.BinaryToFloat32(binary)) + } + return converted +} + +// State returns a Query that can be used in gNMI operations. +func (n *DevicePath) State() ygnmi.SingletonQuery[*Device] { + return ygnmi.NewSingletonQuery[*Device]( + "Device", + true, + true, + false, + false, + true, + false, + n, + nil, + nil, + func() *ytypes.Schema { + return &ytypes.Schema{ + Root: &Device{}, + SchemaTree: SchemaTree, + Unmarshal: Unmarshal, + } + }, + nil, + nil, + ) +} + +// Config returns a Query that can be used in gNMI operations. +func (n *DevicePath) Config() ygnmi.ConfigQuery[*Device] { + return ygnmi.NewConfigQuery[*Device]( + "Device", + false, + false, + false, + false, + true, + false, + n, + nil, + nil, + func() *ytypes.Schema { + return &ytypes.Schema{ + Root: &Device{}, + SchemaTree: SchemaTree, + Unmarshal: Unmarshal, + } + }, + nil, + nil, + ) +} + +// Interface_AdminStatusPath represents the /openconfig-interfaces/interfaces/interface/state/admin-status YANG schema element. +type Interface_AdminStatusPath struct { + *ygnmi.NodePath + parent ygnmi.PathStruct +} + +// Interface_AdminStatusPathAny represents the wildcard version of the /openconfig-interfaces/interfaces/interface/state/admin-status YANG schema element. +type Interface_AdminStatusPathAny struct { + *ygnmi.NodePath + parent ygnmi.PathStruct +} + +// State returns a Query that can be used in gNMI operations. +// +// Defining module: "openconfig-interfaces" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "state/admin-status" +// Path from root: "/interfaces/interface/state/admin-status" +func (n *Interface_AdminStatusPath) State() ygnmi.SingletonQuery[E_Interface_AdminStatus] { + return ygnmi.NewSingletonQuery[E_Interface_AdminStatus]( + "Interface", + true, + true, + true, + false, + true, + false, + ygnmi.NewNodePath( + []string{"state", "admin-status"}, + nil, + n.parent, + ), + func(gs ygot.ValidatedGoStruct) (E_Interface_AdminStatus, bool) { + ret := gs.(*Interface).AdminStatus + return ret, !reflect.ValueOf(ret).IsZero() + }, + func() ygot.ValidatedGoStruct { return new(Interface) }, + func() *ytypes.Schema { + return &ytypes.Schema{ + Root: &Device{}, + SchemaTree: SchemaTree, + Unmarshal: Unmarshal, + } + }, + nil, + nil, + ) +} + +// State returns a Query that can be used in gNMI operations. +// +// Defining module: "openconfig-interfaces" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "state/admin-status" +// Path from root: "/interfaces/interface/state/admin-status" +func (n *Interface_AdminStatusPathAny) State() ygnmi.WildcardQuery[E_Interface_AdminStatus] { + return ygnmi.NewWildcardQuery[E_Interface_AdminStatus]( + "Interface", + true, + true, + true, + false, + true, + false, + ygnmi.NewNodePath( + []string{"state", "admin-status"}, + nil, + n.parent, + ), + func(gs ygot.ValidatedGoStruct) (E_Interface_AdminStatus, bool) { + ret := gs.(*Interface).AdminStatus + return ret, !reflect.ValueOf(ret).IsZero() + }, + func() ygot.ValidatedGoStruct { return new(Interface) }, + func() *ytypes.Schema { + return &ytypes.Schema{ + Root: &Device{}, + SchemaTree: SchemaTree, + Unmarshal: Unmarshal, + } + }, + nil, + nil, + ) +} + +// Interface_CpuPath represents the /openconfig-interfaces/interfaces/interface/state/cpu YANG schema element. +type Interface_CpuPath struct { + *ygnmi.NodePath + parent ygnmi.PathStruct +} + +// Interface_CpuPathAny represents the wildcard version of the /openconfig-interfaces/interfaces/interface/state/cpu YANG schema element. +type Interface_CpuPathAny struct { + *ygnmi.NodePath + parent ygnmi.PathStruct +} + +// State returns a Query that can be used in gNMI operations. +// +// Defining module: "openconfig-interfaces" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "state/cpu" +// Path from root: "/interfaces/interface/state/cpu" +func (n *Interface_CpuPath) State() ygnmi.SingletonQuery[bool] { + return ygnmi.NewSingletonQuery[bool]( + "Interface", + true, + true, + true, + true, + true, + false, + ygnmi.NewNodePath( + []string{"state", "cpu"}, + nil, + n.parent, + ), + func(gs ygot.ValidatedGoStruct) (bool, bool) { + ret := gs.(*Interface).Cpu + if ret == nil { + var zero bool + return zero, false + } + return *ret, true + }, + func() ygot.ValidatedGoStruct { return new(Interface) }, + func() *ytypes.Schema { + return &ytypes.Schema{ + Root: &Device{}, + SchemaTree: SchemaTree, + Unmarshal: Unmarshal, + } + }, + nil, + nil, + ) +} + +// State returns a Query that can be used in gNMI operations. +// +// Defining module: "openconfig-interfaces" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "state/cpu" +// Path from root: "/interfaces/interface/state/cpu" +func (n *Interface_CpuPathAny) State() ygnmi.WildcardQuery[bool] { + return ygnmi.NewWildcardQuery[bool]( + "Interface", + true, + true, + true, + true, + true, + false, + ygnmi.NewNodePath( + []string{"state", "cpu"}, + nil, + n.parent, + ), + func(gs ygot.ValidatedGoStruct) (bool, bool) { + ret := gs.(*Interface).Cpu + if ret == nil { + var zero bool + return zero, false + } + return *ret, true + }, + func() ygot.ValidatedGoStruct { return new(Interface) }, + func() *ytypes.Schema { + return &ytypes.Schema{ + Root: &Device{}, + SchemaTree: SchemaTree, + Unmarshal: Unmarshal, + } + }, + nil, + nil, + ) +} + +// Interface_DescriptionPath represents the /openconfig-interfaces/interfaces/interface/config/description YANG schema element. +type Interface_DescriptionPath struct { + *ygnmi.NodePath + parent ygnmi.PathStruct +} + +// Interface_DescriptionPathAny represents the wildcard version of the /openconfig-interfaces/interfaces/interface/config/description YANG schema element. +type Interface_DescriptionPathAny struct { + *ygnmi.NodePath + parent ygnmi.PathStruct +} + +// State returns a Query that can be used in gNMI operations. +// +// Defining module: "openconfig-interfaces" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "state/description" +// Path from root: "/interfaces/interface/state/description" +func (n *Interface_DescriptionPath) State() ygnmi.SingletonQuery[string] { + return ygnmi.NewSingletonQuery[string]( + "Interface", + true, + true, + true, + true, + true, + false, + ygnmi.NewNodePath( + []string{"state", "description"}, + nil, + n.parent, + ), + func(gs ygot.ValidatedGoStruct) (string, bool) { + ret := gs.(*Interface).Description + if ret == nil { + var zero string + return zero, false + } + return *ret, true + }, + func() ygot.ValidatedGoStruct { return new(Interface) }, + func() *ytypes.Schema { + return &ytypes.Schema{ + Root: &Device{}, + SchemaTree: SchemaTree, + Unmarshal: Unmarshal, + } + }, + nil, + nil, + ) +} + +// State returns a Query that can be used in gNMI operations. +// +// Defining module: "openconfig-interfaces" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "state/description" +// Path from root: "/interfaces/interface/state/description" +func (n *Interface_DescriptionPathAny) State() ygnmi.WildcardQuery[string] { + return ygnmi.NewWildcardQuery[string]( + "Interface", + true, + true, + true, + true, + true, + false, + ygnmi.NewNodePath( + []string{"state", "description"}, + nil, + n.parent, + ), + func(gs ygot.ValidatedGoStruct) (string, bool) { + ret := gs.(*Interface).Description + if ret == nil { + var zero string + return zero, false + } + return *ret, true + }, + func() ygot.ValidatedGoStruct { return new(Interface) }, + func() *ytypes.Schema { + return &ytypes.Schema{ + Root: &Device{}, + SchemaTree: SchemaTree, + Unmarshal: Unmarshal, + } + }, + nil, + nil, + ) +} + +// Config returns a Query that can be used in gNMI operations. +// +// Defining module: "openconfig-interfaces" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "config/description" +// Path from root: "/interfaces/interface/config/description" +func (n *Interface_DescriptionPath) Config() ygnmi.ConfigQuery[string] { + return ygnmi.NewConfigQuery[string]( + "Interface", + false, + false, + true, + true, + true, + false, + ygnmi.NewNodePath( + []string{"config", "description"}, + nil, + n.parent, + ), + func(gs ygot.ValidatedGoStruct) (string, bool) { + ret := gs.(*Interface).Description + if ret == nil { + var zero string + return zero, false + } + return *ret, true + }, + func() ygot.ValidatedGoStruct { return new(Interface) }, + func() *ytypes.Schema { + return &ytypes.Schema{ + Root: &Device{}, + SchemaTree: SchemaTree, + Unmarshal: Unmarshal, + } + }, + nil, + nil, + ) +} + +// Config returns a Query that can be used in gNMI operations. +// +// Defining module: "openconfig-interfaces" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "config/description" +// Path from root: "/interfaces/interface/config/description" +func (n *Interface_DescriptionPathAny) Config() ygnmi.WildcardQuery[string] { + return ygnmi.NewWildcardQuery[string]( + "Interface", + false, + false, + true, + true, + true, + false, + ygnmi.NewNodePath( + []string{"config", "description"}, + nil, + n.parent, + ), + func(gs ygot.ValidatedGoStruct) (string, bool) { + ret := gs.(*Interface).Description + if ret == nil { + var zero string + return zero, false + } + return *ret, true + }, + func() ygot.ValidatedGoStruct { return new(Interface) }, + func() *ytypes.Schema { + return &ytypes.Schema{ + Root: &Device{}, + SchemaTree: SchemaTree, + Unmarshal: Unmarshal, + } + }, + nil, + nil, + ) +} + +// Interface_EnabledPath represents the /openconfig-interfaces/interfaces/interface/config/enabled YANG schema element. +type Interface_EnabledPath struct { + *ygnmi.NodePath + parent ygnmi.PathStruct +} + +// Interface_EnabledPathAny represents the wildcard version of the /openconfig-interfaces/interfaces/interface/config/enabled YANG schema element. +type Interface_EnabledPathAny struct { + *ygnmi.NodePath + parent ygnmi.PathStruct +} + +// State returns a Query that can be used in gNMI operations. +// +// Defining module: "openconfig-interfaces" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "state/enabled" +// Path from root: "/interfaces/interface/state/enabled" +func (n *Interface_EnabledPath) State() ygnmi.SingletonQuery[bool] { + return ygnmi.NewSingletonQuery[bool]( + "Interface", + true, + true, + true, + true, + true, + false, + ygnmi.NewNodePath( + []string{"state", "enabled"}, + nil, + n.parent, + ), + func(gs ygot.ValidatedGoStruct) (bool, bool) { + ret := gs.(*Interface).Enabled + if ret == nil { + var zero bool + return zero, false + } + return *ret, true + }, + func() ygot.ValidatedGoStruct { return new(Interface) }, + func() *ytypes.Schema { + return &ytypes.Schema{ + Root: &Device{}, + SchemaTree: SchemaTree, + Unmarshal: Unmarshal, + } + }, + nil, + nil, + ) +} + +// State returns a Query that can be used in gNMI operations. +// +// Defining module: "openconfig-interfaces" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "state/enabled" +// Path from root: "/interfaces/interface/state/enabled" +func (n *Interface_EnabledPathAny) State() ygnmi.WildcardQuery[bool] { + return ygnmi.NewWildcardQuery[bool]( + "Interface", + true, + true, + true, + true, + true, + false, + ygnmi.NewNodePath( + []string{"state", "enabled"}, + nil, + n.parent, + ), + func(gs ygot.ValidatedGoStruct) (bool, bool) { + ret := gs.(*Interface).Enabled + if ret == nil { + var zero bool + return zero, false + } + return *ret, true + }, + func() ygot.ValidatedGoStruct { return new(Interface) }, + func() *ytypes.Schema { + return &ytypes.Schema{ + Root: &Device{}, + SchemaTree: SchemaTree, + Unmarshal: Unmarshal, + } + }, + nil, + nil, + ) +} + +// Config returns a Query that can be used in gNMI operations. +// +// Defining module: "openconfig-interfaces" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "config/enabled" +// Path from root: "/interfaces/interface/config/enabled" +func (n *Interface_EnabledPath) Config() ygnmi.ConfigQuery[bool] { + return ygnmi.NewConfigQuery[bool]( + "Interface", + false, + false, + true, + true, + true, + false, + ygnmi.NewNodePath( + []string{"config", "enabled"}, + nil, + n.parent, + ), + func(gs ygot.ValidatedGoStruct) (bool, bool) { + ret := gs.(*Interface).Enabled + if ret == nil { + var zero bool + return zero, false + } + return *ret, true + }, + func() ygot.ValidatedGoStruct { return new(Interface) }, + func() *ytypes.Schema { + return &ytypes.Schema{ + Root: &Device{}, + SchemaTree: SchemaTree, + Unmarshal: Unmarshal, + } + }, + nil, + nil, + ) +} + +// Config returns a Query that can be used in gNMI operations. +// +// Defining module: "openconfig-interfaces" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "config/enabled" +// Path from root: "/interfaces/interface/config/enabled" +func (n *Interface_EnabledPathAny) Config() ygnmi.WildcardQuery[bool] { + return ygnmi.NewWildcardQuery[bool]( + "Interface", + false, + false, + true, + true, + true, + false, + ygnmi.NewNodePath( + []string{"config", "enabled"}, + nil, + n.parent, + ), + func(gs ygot.ValidatedGoStruct) (bool, bool) { + ret := gs.(*Interface).Enabled + if ret == nil { + var zero bool + return zero, false + } + return *ret, true + }, + func() ygot.ValidatedGoStruct { return new(Interface) }, + func() *ytypes.Schema { + return &ytypes.Schema{ + Root: &Device{}, + SchemaTree: SchemaTree, + Unmarshal: Unmarshal, + } + }, + nil, + nil, + ) +} + +// Interface_IfindexPath represents the /openconfig-interfaces/interfaces/interface/state/ifindex YANG schema element. +type Interface_IfindexPath struct { + *ygnmi.NodePath + parent ygnmi.PathStruct +} + +// Interface_IfindexPathAny represents the wildcard version of the /openconfig-interfaces/interfaces/interface/state/ifindex YANG schema element. +type Interface_IfindexPathAny struct { + *ygnmi.NodePath + parent ygnmi.PathStruct +} + +// State returns a Query that can be used in gNMI operations. +// +// Defining module: "openconfig-interfaces" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "state/ifindex" +// Path from root: "/interfaces/interface/state/ifindex" +func (n *Interface_IfindexPath) State() ygnmi.SingletonQuery[uint32] { + return ygnmi.NewSingletonQuery[uint32]( + "Interface", + true, + true, + true, + true, + true, + false, + ygnmi.NewNodePath( + []string{"state", "ifindex"}, + nil, + n.parent, + ), + func(gs ygot.ValidatedGoStruct) (uint32, bool) { + ret := gs.(*Interface).Ifindex + if ret == nil { + var zero uint32 + return zero, false + } + return *ret, true + }, + func() ygot.ValidatedGoStruct { return new(Interface) }, + func() *ytypes.Schema { + return &ytypes.Schema{ + Root: &Device{}, + SchemaTree: SchemaTree, + Unmarshal: Unmarshal, + } + }, + nil, + nil, + ) +} + +// State returns a Query that can be used in gNMI operations. +// +// Defining module: "openconfig-interfaces" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "state/ifindex" +// Path from root: "/interfaces/interface/state/ifindex" +func (n *Interface_IfindexPathAny) State() ygnmi.WildcardQuery[uint32] { + return ygnmi.NewWildcardQuery[uint32]( + "Interface", + true, + true, + true, + true, + true, + false, + ygnmi.NewNodePath( + []string{"state", "ifindex"}, + nil, + n.parent, + ), + func(gs ygot.ValidatedGoStruct) (uint32, bool) { + ret := gs.(*Interface).Ifindex + if ret == nil { + var zero uint32 + return zero, false + } + return *ret, true + }, + func() ygot.ValidatedGoStruct { return new(Interface) }, + func() *ytypes.Schema { + return &ytypes.Schema{ + Root: &Device{}, + SchemaTree: SchemaTree, + Unmarshal: Unmarshal, + } + }, + nil, + nil, + ) +} + +// Interface_LastChangePath represents the /openconfig-interfaces/interfaces/interface/state/last-change YANG schema element. +type Interface_LastChangePath struct { + *ygnmi.NodePath + parent ygnmi.PathStruct +} + +// Interface_LastChangePathAny represents the wildcard version of the /openconfig-interfaces/interfaces/interface/state/last-change YANG schema element. +type Interface_LastChangePathAny struct { + *ygnmi.NodePath + parent ygnmi.PathStruct +} + +// State returns a Query that can be used in gNMI operations. +// +// Defining module: "openconfig-interfaces" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "state/last-change" +// Path from root: "/interfaces/interface/state/last-change" +func (n *Interface_LastChangePath) State() ygnmi.SingletonQuery[uint64] { + return ygnmi.NewSingletonQuery[uint64]( + "Interface", + true, + true, + true, + true, + true, + false, + ygnmi.NewNodePath( + []string{"state", "last-change"}, + nil, + n.parent, + ), + func(gs ygot.ValidatedGoStruct) (uint64, bool) { + ret := gs.(*Interface).LastChange + if ret == nil { + var zero uint64 + return zero, false + } + return *ret, true + }, + func() ygot.ValidatedGoStruct { return new(Interface) }, + func() *ytypes.Schema { + return &ytypes.Schema{ + Root: &Device{}, + SchemaTree: SchemaTree, + Unmarshal: Unmarshal, + } + }, + nil, + nil, + ) +} + +// State returns a Query that can be used in gNMI operations. +// +// Defining module: "openconfig-interfaces" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "state/last-change" +// Path from root: "/interfaces/interface/state/last-change" +func (n *Interface_LastChangePathAny) State() ygnmi.WildcardQuery[uint64] { + return ygnmi.NewWildcardQuery[uint64]( + "Interface", + true, + true, + true, + true, + true, + false, + ygnmi.NewNodePath( + []string{"state", "last-change"}, + nil, + n.parent, + ), + func(gs ygot.ValidatedGoStruct) (uint64, bool) { + ret := gs.(*Interface).LastChange + if ret == nil { + var zero uint64 + return zero, false + } + return *ret, true + }, + func() ygot.ValidatedGoStruct { return new(Interface) }, + func() *ytypes.Schema { + return &ytypes.Schema{ + Root: &Device{}, + SchemaTree: SchemaTree, + Unmarshal: Unmarshal, + } + }, + nil, + nil, + ) +} + +// Interface_LogicalPath represents the /openconfig-interfaces/interfaces/interface/state/logical YANG schema element. +type Interface_LogicalPath struct { + *ygnmi.NodePath + parent ygnmi.PathStruct +} + +// Interface_LogicalPathAny represents the wildcard version of the /openconfig-interfaces/interfaces/interface/state/logical YANG schema element. +type Interface_LogicalPathAny struct { + *ygnmi.NodePath + parent ygnmi.PathStruct +} + +// State returns a Query that can be used in gNMI operations. +// +// Defining module: "openconfig-interfaces" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "state/logical" +// Path from root: "/interfaces/interface/state/logical" +func (n *Interface_LogicalPath) State() ygnmi.SingletonQuery[bool] { + return ygnmi.NewSingletonQuery[bool]( + "Interface", + true, + true, + true, + true, + true, + false, + ygnmi.NewNodePath( + []string{"state", "logical"}, + nil, + n.parent, + ), + func(gs ygot.ValidatedGoStruct) (bool, bool) { + ret := gs.(*Interface).Logical + if ret == nil { + var zero bool + return zero, false + } + return *ret, true + }, + func() ygot.ValidatedGoStruct { return new(Interface) }, + func() *ytypes.Schema { + return &ytypes.Schema{ + Root: &Device{}, + SchemaTree: SchemaTree, + Unmarshal: Unmarshal, + } + }, + nil, + nil, + ) +} + +// State returns a Query that can be used in gNMI operations. +// +// Defining module: "openconfig-interfaces" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "state/logical" +// Path from root: "/interfaces/interface/state/logical" +func (n *Interface_LogicalPathAny) State() ygnmi.WildcardQuery[bool] { + return ygnmi.NewWildcardQuery[bool]( + "Interface", + true, + true, + true, + true, + true, + false, + ygnmi.NewNodePath( + []string{"state", "logical"}, + nil, + n.parent, + ), + func(gs ygot.ValidatedGoStruct) (bool, bool) { + ret := gs.(*Interface).Logical + if ret == nil { + var zero bool + return zero, false + } + return *ret, true + }, + func() ygot.ValidatedGoStruct { return new(Interface) }, + func() *ytypes.Schema { + return &ytypes.Schema{ + Root: &Device{}, + SchemaTree: SchemaTree, + Unmarshal: Unmarshal, + } + }, + nil, + nil, + ) +} + +// Interface_LoopbackModePath represents the /openconfig-interfaces/interfaces/interface/config/loopback-mode YANG schema element. +type Interface_LoopbackModePath struct { + *ygnmi.NodePath + parent ygnmi.PathStruct +} + +// Interface_LoopbackModePathAny represents the wildcard version of the /openconfig-interfaces/interfaces/interface/config/loopback-mode YANG schema element. +type Interface_LoopbackModePathAny struct { + *ygnmi.NodePath + parent ygnmi.PathStruct +} + +// State returns a Query that can be used in gNMI operations. +// +// Defining module: "openconfig-interfaces" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "state/loopback-mode" +// Path from root: "/interfaces/interface/state/loopback-mode" +func (n *Interface_LoopbackModePath) State() ygnmi.SingletonQuery[E_TransportTypes_LoopbackModeType] { + return ygnmi.NewSingletonQuery[E_TransportTypes_LoopbackModeType]( + "Interface", + true, + true, + true, + false, + true, + false, + ygnmi.NewNodePath( + []string{"state", "loopback-mode"}, + nil, + n.parent, + ), + func(gs ygot.ValidatedGoStruct) (E_TransportTypes_LoopbackModeType, bool) { + ret := gs.(*Interface).LoopbackMode + return ret, !reflect.ValueOf(ret).IsZero() + }, + func() ygot.ValidatedGoStruct { return new(Interface) }, + func() *ytypes.Schema { + return &ytypes.Schema{ + Root: &Device{}, + SchemaTree: SchemaTree, + Unmarshal: Unmarshal, + } + }, + nil, + nil, + ) +} + +// State returns a Query that can be used in gNMI operations. +// +// Defining module: "openconfig-interfaces" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "state/loopback-mode" +// Path from root: "/interfaces/interface/state/loopback-mode" +func (n *Interface_LoopbackModePathAny) State() ygnmi.WildcardQuery[E_TransportTypes_LoopbackModeType] { + return ygnmi.NewWildcardQuery[E_TransportTypes_LoopbackModeType]( + "Interface", + true, + true, + true, + false, + true, + false, + ygnmi.NewNodePath( + []string{"state", "loopback-mode"}, + nil, + n.parent, + ), + func(gs ygot.ValidatedGoStruct) (E_TransportTypes_LoopbackModeType, bool) { + ret := gs.(*Interface).LoopbackMode + return ret, !reflect.ValueOf(ret).IsZero() + }, + func() ygot.ValidatedGoStruct { return new(Interface) }, + func() *ytypes.Schema { + return &ytypes.Schema{ + Root: &Device{}, + SchemaTree: SchemaTree, + Unmarshal: Unmarshal, + } + }, + nil, + nil, + ) +} + +// Config returns a Query that can be used in gNMI operations. +// +// Defining module: "openconfig-interfaces" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "config/loopback-mode" +// Path from root: "/interfaces/interface/config/loopback-mode" +func (n *Interface_LoopbackModePath) Config() ygnmi.ConfigQuery[E_TransportTypes_LoopbackModeType] { + return ygnmi.NewConfigQuery[E_TransportTypes_LoopbackModeType]( + "Interface", + false, + false, + true, + false, + true, + false, + ygnmi.NewNodePath( + []string{"config", "loopback-mode"}, + nil, + n.parent, + ), + func(gs ygot.ValidatedGoStruct) (E_TransportTypes_LoopbackModeType, bool) { + ret := gs.(*Interface).LoopbackMode + return ret, !reflect.ValueOf(ret).IsZero() + }, + func() ygot.ValidatedGoStruct { return new(Interface) }, + func() *ytypes.Schema { + return &ytypes.Schema{ + Root: &Device{}, + SchemaTree: SchemaTree, + Unmarshal: Unmarshal, + } + }, + nil, + nil, + ) +} + +// Config returns a Query that can be used in gNMI operations. +// +// Defining module: "openconfig-interfaces" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "config/loopback-mode" +// Path from root: "/interfaces/interface/config/loopback-mode" +func (n *Interface_LoopbackModePathAny) Config() ygnmi.WildcardQuery[E_TransportTypes_LoopbackModeType] { + return ygnmi.NewWildcardQuery[E_TransportTypes_LoopbackModeType]( + "Interface", + false, + false, + true, + false, + true, + false, + ygnmi.NewNodePath( + []string{"config", "loopback-mode"}, + nil, + n.parent, + ), + func(gs ygot.ValidatedGoStruct) (E_TransportTypes_LoopbackModeType, bool) { + ret := gs.(*Interface).LoopbackMode + return ret, !reflect.ValueOf(ret).IsZero() + }, + func() ygot.ValidatedGoStruct { return new(Interface) }, + func() *ytypes.Schema { + return &ytypes.Schema{ + Root: &Device{}, + SchemaTree: SchemaTree, + Unmarshal: Unmarshal, + } + }, + nil, + nil, + ) +} + +// Interface_ManagementPath represents the /openconfig-interfaces/interfaces/interface/state/management YANG schema element. +type Interface_ManagementPath struct { + *ygnmi.NodePath + parent ygnmi.PathStruct +} + +// Interface_ManagementPathAny represents the wildcard version of the /openconfig-interfaces/interfaces/interface/state/management YANG schema element. +type Interface_ManagementPathAny struct { + *ygnmi.NodePath + parent ygnmi.PathStruct +} + +// State returns a Query that can be used in gNMI operations. +// +// Defining module: "openconfig-interfaces" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "state/management" +// Path from root: "/interfaces/interface/state/management" +func (n *Interface_ManagementPath) State() ygnmi.SingletonQuery[bool] { + return ygnmi.NewSingletonQuery[bool]( + "Interface", + true, + true, + true, + true, + true, + false, + ygnmi.NewNodePath( + []string{"state", "management"}, + nil, + n.parent, + ), + func(gs ygot.ValidatedGoStruct) (bool, bool) { + ret := gs.(*Interface).Management + if ret == nil { + var zero bool + return zero, false + } + return *ret, true + }, + func() ygot.ValidatedGoStruct { return new(Interface) }, + func() *ytypes.Schema { + return &ytypes.Schema{ + Root: &Device{}, + SchemaTree: SchemaTree, + Unmarshal: Unmarshal, + } + }, + nil, + nil, + ) +} + +// State returns a Query that can be used in gNMI operations. +// +// Defining module: "openconfig-interfaces" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "state/management" +// Path from root: "/interfaces/interface/state/management" +func (n *Interface_ManagementPathAny) State() ygnmi.WildcardQuery[bool] { + return ygnmi.NewWildcardQuery[bool]( + "Interface", + true, + true, + true, + true, + true, + false, + ygnmi.NewNodePath( + []string{"state", "management"}, + nil, + n.parent, + ), + func(gs ygot.ValidatedGoStruct) (bool, bool) { + ret := gs.(*Interface).Management + if ret == nil { + var zero bool + return zero, false + } + return *ret, true + }, + func() ygot.ValidatedGoStruct { return new(Interface) }, + func() *ytypes.Schema { + return &ytypes.Schema{ + Root: &Device{}, + SchemaTree: SchemaTree, + Unmarshal: Unmarshal, + } + }, + nil, + nil, + ) +} + +// Interface_MtuPath represents the /openconfig-interfaces/interfaces/interface/config/mtu YANG schema element. +type Interface_MtuPath struct { + *ygnmi.NodePath + parent ygnmi.PathStruct +} + +// Interface_MtuPathAny represents the wildcard version of the /openconfig-interfaces/interfaces/interface/config/mtu YANG schema element. +type Interface_MtuPathAny struct { + *ygnmi.NodePath + parent ygnmi.PathStruct +} + +// State returns a Query that can be used in gNMI operations. +// +// Defining module: "openconfig-interfaces" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "state/mtu" +// Path from root: "/interfaces/interface/state/mtu" +func (n *Interface_MtuPath) State() ygnmi.SingletonQuery[uint16] { + return ygnmi.NewSingletonQuery[uint16]( + "Interface", + true, + true, + true, + true, + true, + false, + ygnmi.NewNodePath( + []string{"state", "mtu"}, + nil, + n.parent, + ), + func(gs ygot.ValidatedGoStruct) (uint16, bool) { + ret := gs.(*Interface).Mtu + if ret == nil { + var zero uint16 + return zero, false + } + return *ret, true + }, + func() ygot.ValidatedGoStruct { return new(Interface) }, + func() *ytypes.Schema { + return &ytypes.Schema{ + Root: &Device{}, + SchemaTree: SchemaTree, + Unmarshal: Unmarshal, + } + }, + nil, + nil, + ) +} + +// State returns a Query that can be used in gNMI operations. +// +// Defining module: "openconfig-interfaces" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "state/mtu" +// Path from root: "/interfaces/interface/state/mtu" +func (n *Interface_MtuPathAny) State() ygnmi.WildcardQuery[uint16] { + return ygnmi.NewWildcardQuery[uint16]( + "Interface", + true, + true, + true, + true, + true, + false, + ygnmi.NewNodePath( + []string{"state", "mtu"}, + nil, + n.parent, + ), + func(gs ygot.ValidatedGoStruct) (uint16, bool) { + ret := gs.(*Interface).Mtu + if ret == nil { + var zero uint16 + return zero, false + } + return *ret, true + }, + func() ygot.ValidatedGoStruct { return new(Interface) }, + func() *ytypes.Schema { + return &ytypes.Schema{ + Root: &Device{}, + SchemaTree: SchemaTree, + Unmarshal: Unmarshal, + } + }, + nil, + nil, + ) +} + +// Config returns a Query that can be used in gNMI operations. +// +// Defining module: "openconfig-interfaces" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "config/mtu" +// Path from root: "/interfaces/interface/config/mtu" +func (n *Interface_MtuPath) Config() ygnmi.ConfigQuery[uint16] { + return ygnmi.NewConfigQuery[uint16]( + "Interface", + false, + false, + true, + true, + true, + false, + ygnmi.NewNodePath( + []string{"config", "mtu"}, + nil, + n.parent, + ), + func(gs ygot.ValidatedGoStruct) (uint16, bool) { + ret := gs.(*Interface).Mtu + if ret == nil { + var zero uint16 + return zero, false + } + return *ret, true + }, + func() ygot.ValidatedGoStruct { return new(Interface) }, + func() *ytypes.Schema { + return &ytypes.Schema{ + Root: &Device{}, + SchemaTree: SchemaTree, + Unmarshal: Unmarshal, + } + }, + nil, + nil, + ) +} + +// Config returns a Query that can be used in gNMI operations. +// +// Defining module: "openconfig-interfaces" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "config/mtu" +// Path from root: "/interfaces/interface/config/mtu" +func (n *Interface_MtuPathAny) Config() ygnmi.WildcardQuery[uint16] { + return ygnmi.NewWildcardQuery[uint16]( + "Interface", + false, + false, + true, + true, + true, + false, + ygnmi.NewNodePath( + []string{"config", "mtu"}, + nil, + n.parent, + ), + func(gs ygot.ValidatedGoStruct) (uint16, bool) { + ret := gs.(*Interface).Mtu + if ret == nil { + var zero uint16 + return zero, false + } + return *ret, true + }, + func() ygot.ValidatedGoStruct { return new(Interface) }, + func() *ytypes.Schema { + return &ytypes.Schema{ + Root: &Device{}, + SchemaTree: SchemaTree, + Unmarshal: Unmarshal, + } + }, + nil, + nil, + ) +} + +// Interface_NamePath represents the /openconfig-interfaces/interfaces/interface/config/name YANG schema element. +type Interface_NamePath struct { + *ygnmi.NodePath + parent ygnmi.PathStruct +} + +// Interface_NamePathAny represents the wildcard version of the /openconfig-interfaces/interfaces/interface/config/name YANG schema element. +type Interface_NamePathAny struct { + *ygnmi.NodePath + parent ygnmi.PathStruct +} + +// State returns a Query that can be used in gNMI operations. +// +// Defining module: "openconfig-interfaces" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "state/name" +// Path from root: "/interfaces/interface/state/name" +func (n *Interface_NamePath) State() ygnmi.SingletonQuery[string] { + return ygnmi.NewSingletonQuery[string]( + "Interface", + true, + true, + true, + true, + true, + false, + ygnmi.NewNodePath( + []string{"state", "name"}, + nil, + n.parent, + ), + func(gs ygot.ValidatedGoStruct) (string, bool) { + ret := gs.(*Interface).Name + if ret == nil { + var zero string + return zero, false + } + return *ret, true + }, + func() ygot.ValidatedGoStruct { return new(Interface) }, + func() *ytypes.Schema { + return &ytypes.Schema{ + Root: &Device{}, + SchemaTree: SchemaTree, + Unmarshal: Unmarshal, + } + }, + nil, + nil, + ) +} + +// State returns a Query that can be used in gNMI operations. +// +// Defining module: "openconfig-interfaces" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "state/name" +// Path from root: "/interfaces/interface/state/name" +func (n *Interface_NamePathAny) State() ygnmi.WildcardQuery[string] { + return ygnmi.NewWildcardQuery[string]( + "Interface", + true, + true, + true, + true, + true, + false, + ygnmi.NewNodePath( + []string{"state", "name"}, + nil, + n.parent, + ), + func(gs ygot.ValidatedGoStruct) (string, bool) { + ret := gs.(*Interface).Name + if ret == nil { + var zero string + return zero, false + } + return *ret, true + }, + func() ygot.ValidatedGoStruct { return new(Interface) }, + func() *ytypes.Schema { + return &ytypes.Schema{ + Root: &Device{}, + SchemaTree: SchemaTree, + Unmarshal: Unmarshal, + } + }, + nil, + nil, + ) +} + +// Config returns a Query that can be used in gNMI operations. +// +// Defining module: "openconfig-interfaces" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "config/name" +// Path from root: "/interfaces/interface/config/name" +func (n *Interface_NamePath) Config() ygnmi.ConfigQuery[string] { + return ygnmi.NewConfigQuery[string]( + "Interface", + false, + false, + true, + true, + true, + false, + ygnmi.NewNodePath( + []string{"config", "name"}, + nil, + n.parent, + ), + func(gs ygot.ValidatedGoStruct) (string, bool) { + ret := gs.(*Interface).Name + if ret == nil { + var zero string + return zero, false + } + return *ret, true + }, + func() ygot.ValidatedGoStruct { return new(Interface) }, + func() *ytypes.Schema { + return &ytypes.Schema{ + Root: &Device{}, + SchemaTree: SchemaTree, + Unmarshal: Unmarshal, + } + }, + nil, + nil, + ) +} + +// Config returns a Query that can be used in gNMI operations. +// +// Defining module: "openconfig-interfaces" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "config/name" +// Path from root: "/interfaces/interface/config/name" +func (n *Interface_NamePathAny) Config() ygnmi.WildcardQuery[string] { + return ygnmi.NewWildcardQuery[string]( + "Interface", + false, + false, + true, + true, + true, + false, + ygnmi.NewNodePath( + []string{"config", "name"}, + nil, + n.parent, + ), + func(gs ygot.ValidatedGoStruct) (string, bool) { + ret := gs.(*Interface).Name + if ret == nil { + var zero string + return zero, false + } + return *ret, true + }, + func() ygot.ValidatedGoStruct { return new(Interface) }, + func() *ytypes.Schema { + return &ytypes.Schema{ + Root: &Device{}, + SchemaTree: SchemaTree, + Unmarshal: Unmarshal, + } + }, + nil, + nil, + ) +} + +// Interface_OperStatusPath represents the /openconfig-interfaces/interfaces/interface/state/oper-status YANG schema element. +type Interface_OperStatusPath struct { + *ygnmi.NodePath + parent ygnmi.PathStruct +} + +// Interface_OperStatusPathAny represents the wildcard version of the /openconfig-interfaces/interfaces/interface/state/oper-status YANG schema element. +type Interface_OperStatusPathAny struct { + *ygnmi.NodePath + parent ygnmi.PathStruct +} + +// State returns a Query that can be used in gNMI operations. +// +// Defining module: "openconfig-interfaces" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "state/oper-status" +// Path from root: "/interfaces/interface/state/oper-status" +func (n *Interface_OperStatusPath) State() ygnmi.SingletonQuery[E_Interface_OperStatus] { + return ygnmi.NewSingletonQuery[E_Interface_OperStatus]( + "Interface", + true, + true, + true, + false, + true, + false, + ygnmi.NewNodePath( + []string{"state", "oper-status"}, + nil, + n.parent, + ), + func(gs ygot.ValidatedGoStruct) (E_Interface_OperStatus, bool) { + ret := gs.(*Interface).OperStatus + return ret, !reflect.ValueOf(ret).IsZero() + }, + func() ygot.ValidatedGoStruct { return new(Interface) }, + func() *ytypes.Schema { + return &ytypes.Schema{ + Root: &Device{}, + SchemaTree: SchemaTree, + Unmarshal: Unmarshal, + } + }, + nil, + nil, + ) +} + +// State returns a Query that can be used in gNMI operations. +// +// Defining module: "openconfig-interfaces" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "state/oper-status" +// Path from root: "/interfaces/interface/state/oper-status" +func (n *Interface_OperStatusPathAny) State() ygnmi.WildcardQuery[E_Interface_OperStatus] { + return ygnmi.NewWildcardQuery[E_Interface_OperStatus]( + "Interface", + true, + true, + true, + false, + true, + false, + ygnmi.NewNodePath( + []string{"state", "oper-status"}, + nil, + n.parent, + ), + func(gs ygot.ValidatedGoStruct) (E_Interface_OperStatus, bool) { + ret := gs.(*Interface).OperStatus + return ret, !reflect.ValueOf(ret).IsZero() + }, + func() ygot.ValidatedGoStruct { return new(Interface) }, + func() *ytypes.Schema { + return &ytypes.Schema{ + Root: &Device{}, + SchemaTree: SchemaTree, + Unmarshal: Unmarshal, + } + }, + nil, + nil, + ) +} + +// Interface_TpidPath represents the /openconfig-interfaces/interfaces/interface/config/tpid YANG schema element. +type Interface_TpidPath struct { + *ygnmi.NodePath + parent ygnmi.PathStruct +} + +// Interface_TpidPathAny represents the wildcard version of the /openconfig-interfaces/interfaces/interface/config/tpid YANG schema element. +type Interface_TpidPathAny struct { + *ygnmi.NodePath + parent ygnmi.PathStruct +} + +// State returns a Query that can be used in gNMI operations. +// +// Defining module: "openconfig-vlan" +// Instantiating module: "openconfig-vlan" +// Path from parent: "state/tpid" +// Path from root: "/interfaces/interface/state/tpid" +func (n *Interface_TpidPath) State() ygnmi.SingletonQuery[E_VlanTypes_TPID_TYPES] { + return ygnmi.NewSingletonQuery[E_VlanTypes_TPID_TYPES]( + "Interface", + true, + true, + true, + false, + true, + false, + ygnmi.NewNodePath( + []string{"state", "tpid"}, + nil, + n.parent, + ), + func(gs ygot.ValidatedGoStruct) (E_VlanTypes_TPID_TYPES, bool) { + ret := gs.(*Interface).Tpid + return ret, !reflect.ValueOf(ret).IsZero() + }, + func() ygot.ValidatedGoStruct { return new(Interface) }, + func() *ytypes.Schema { + return &ytypes.Schema{ + Root: &Device{}, + SchemaTree: SchemaTree, + Unmarshal: Unmarshal, + } + }, + nil, + nil, + ) +} + +// State returns a Query that can be used in gNMI operations. +// +// Defining module: "openconfig-vlan" +// Instantiating module: "openconfig-vlan" +// Path from parent: "state/tpid" +// Path from root: "/interfaces/interface/state/tpid" +func (n *Interface_TpidPathAny) State() ygnmi.WildcardQuery[E_VlanTypes_TPID_TYPES] { + return ygnmi.NewWildcardQuery[E_VlanTypes_TPID_TYPES]( + "Interface", + true, + true, + true, + false, + true, + false, + ygnmi.NewNodePath( + []string{"state", "tpid"}, + nil, + n.parent, + ), + func(gs ygot.ValidatedGoStruct) (E_VlanTypes_TPID_TYPES, bool) { + ret := gs.(*Interface).Tpid + return ret, !reflect.ValueOf(ret).IsZero() + }, + func() ygot.ValidatedGoStruct { return new(Interface) }, + func() *ytypes.Schema { + return &ytypes.Schema{ + Root: &Device{}, + SchemaTree: SchemaTree, + Unmarshal: Unmarshal, + } + }, + nil, + nil, + ) +} + +// Config returns a Query that can be used in gNMI operations. +// +// Defining module: "openconfig-vlan" +// Instantiating module: "openconfig-vlan" +// Path from parent: "config/tpid" +// Path from root: "/interfaces/interface/config/tpid" +func (n *Interface_TpidPath) Config() ygnmi.ConfigQuery[E_VlanTypes_TPID_TYPES] { + return ygnmi.NewConfigQuery[E_VlanTypes_TPID_TYPES]( + "Interface", + false, + false, + true, + false, + true, + false, + ygnmi.NewNodePath( + []string{"config", "tpid"}, + nil, + n.parent, + ), + func(gs ygot.ValidatedGoStruct) (E_VlanTypes_TPID_TYPES, bool) { + ret := gs.(*Interface).Tpid + return ret, !reflect.ValueOf(ret).IsZero() + }, + func() ygot.ValidatedGoStruct { return new(Interface) }, + func() *ytypes.Schema { + return &ytypes.Schema{ + Root: &Device{}, + SchemaTree: SchemaTree, + Unmarshal: Unmarshal, + } + }, + nil, + nil, + ) +} + +// Config returns a Query that can be used in gNMI operations. +// +// Defining module: "openconfig-vlan" +// Instantiating module: "openconfig-vlan" +// Path from parent: "config/tpid" +// Path from root: "/interfaces/interface/config/tpid" +func (n *Interface_TpidPathAny) Config() ygnmi.WildcardQuery[E_VlanTypes_TPID_TYPES] { + return ygnmi.NewWildcardQuery[E_VlanTypes_TPID_TYPES]( + "Interface", + false, + false, + true, + false, + true, + false, + ygnmi.NewNodePath( + []string{"config", "tpid"}, + nil, + n.parent, + ), + func(gs ygot.ValidatedGoStruct) (E_VlanTypes_TPID_TYPES, bool) { + ret := gs.(*Interface).Tpid + return ret, !reflect.ValueOf(ret).IsZero() + }, + func() ygot.ValidatedGoStruct { return new(Interface) }, + func() *ytypes.Schema { + return &ytypes.Schema{ + Root: &Device{}, + SchemaTree: SchemaTree, + Unmarshal: Unmarshal, + } + }, + nil, + nil, + ) +} + +// Interface_TypePath represents the /openconfig-interfaces/interfaces/interface/config/type YANG schema element. +type Interface_TypePath struct { + *ygnmi.NodePath + parent ygnmi.PathStruct +} + +// Interface_TypePathAny represents the wildcard version of the /openconfig-interfaces/interfaces/interface/config/type YANG schema element. +type Interface_TypePathAny struct { + *ygnmi.NodePath + parent ygnmi.PathStruct +} + +// State returns a Query that can be used in gNMI operations. +// +// Defining module: "openconfig-interfaces" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "state/type" +// Path from root: "/interfaces/interface/state/type" +func (n *Interface_TypePath) State() ygnmi.SingletonQuery[E_IETFInterfaces_InterfaceType] { + return ygnmi.NewSingletonQuery[E_IETFInterfaces_InterfaceType]( + "Interface", + true, + true, + true, + false, + true, + false, + ygnmi.NewNodePath( + []string{"state", "type"}, + nil, + n.parent, + ), + func(gs ygot.ValidatedGoStruct) (E_IETFInterfaces_InterfaceType, bool) { + ret := gs.(*Interface).Type + return ret, !reflect.ValueOf(ret).IsZero() + }, + func() ygot.ValidatedGoStruct { return new(Interface) }, + func() *ytypes.Schema { + return &ytypes.Schema{ + Root: &Device{}, + SchemaTree: SchemaTree, + Unmarshal: Unmarshal, + } + }, + nil, + nil, + ) +} + +// State returns a Query that can be used in gNMI operations. +// +// Defining module: "openconfig-interfaces" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "state/type" +// Path from root: "/interfaces/interface/state/type" +func (n *Interface_TypePathAny) State() ygnmi.WildcardQuery[E_IETFInterfaces_InterfaceType] { + return ygnmi.NewWildcardQuery[E_IETFInterfaces_InterfaceType]( + "Interface", + true, + true, + true, + false, + true, + false, + ygnmi.NewNodePath( + []string{"state", "type"}, + nil, + n.parent, + ), + func(gs ygot.ValidatedGoStruct) (E_IETFInterfaces_InterfaceType, bool) { + ret := gs.(*Interface).Type + return ret, !reflect.ValueOf(ret).IsZero() + }, + func() ygot.ValidatedGoStruct { return new(Interface) }, + func() *ytypes.Schema { + return &ytypes.Schema{ + Root: &Device{}, + SchemaTree: SchemaTree, + Unmarshal: Unmarshal, + } + }, + nil, + nil, + ) +} + +// Config returns a Query that can be used in gNMI operations. +// +// Defining module: "openconfig-interfaces" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "config/type" +// Path from root: "/interfaces/interface/config/type" +func (n *Interface_TypePath) Config() ygnmi.ConfigQuery[E_IETFInterfaces_InterfaceType] { + return ygnmi.NewConfigQuery[E_IETFInterfaces_InterfaceType]( + "Interface", + false, + false, + true, + false, + true, + false, + ygnmi.NewNodePath( + []string{"config", "type"}, + nil, + n.parent, + ), + func(gs ygot.ValidatedGoStruct) (E_IETFInterfaces_InterfaceType, bool) { + ret := gs.(*Interface).Type + return ret, !reflect.ValueOf(ret).IsZero() + }, + func() ygot.ValidatedGoStruct { return new(Interface) }, + func() *ytypes.Schema { + return &ytypes.Schema{ + Root: &Device{}, + SchemaTree: SchemaTree, + Unmarshal: Unmarshal, + } + }, + nil, + nil, + ) +} + +// Config returns a Query that can be used in gNMI operations. +// +// Defining module: "openconfig-interfaces" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "config/type" +// Path from root: "/interfaces/interface/config/type" +func (n *Interface_TypePathAny) Config() ygnmi.WildcardQuery[E_IETFInterfaces_InterfaceType] { + return ygnmi.NewWildcardQuery[E_IETFInterfaces_InterfaceType]( + "Interface", + false, + false, + true, + false, + true, + false, + ygnmi.NewNodePath( + []string{"config", "type"}, + nil, + n.parent, + ), + func(gs ygot.ValidatedGoStruct) (E_IETFInterfaces_InterfaceType, bool) { + ret := gs.(*Interface).Type + return ret, !reflect.ValueOf(ret).IsZero() + }, + func() ygot.ValidatedGoStruct { return new(Interface) }, + func() *ytypes.Schema { + return &ytypes.Schema{ + Root: &Device{}, + SchemaTree: SchemaTree, + Unmarshal: Unmarshal, + } + }, + nil, + nil, + ) +} + +// InterfacePath represents the /openconfig-interfaces/interfaces/interface YANG schema element. +type InterfacePath struct { + *ygnmi.NodePath +} + +// InterfacePathAny represents the wildcard version of the /openconfig-interfaces/interfaces/interface YANG schema element. +type InterfacePathAny struct { + *ygnmi.NodePath +} + +// InterfacePathMap represents the /openconfig-interfaces/interfaces/interface YANG schema element. +type InterfacePathMap struct { + *ygnmi.NodePath +} + +// InterfacePathMapAny represents the wildcard version of the /openconfig-interfaces/interfaces/interface YANG schema element. +type InterfacePathMapAny struct { + *ygnmi.NodePath +} + +// AdminStatus (leaf): The desired state of the interface. In RFC 7223 this leaf +// has the same read semantics as ifAdminStatus. Here, it +// reflects the administrative state as set by enabling or +// disabling the interface. +// +// Defining module: "openconfig-interfaces" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "state/admin-status" +// Path from root: "/interfaces/interface/state/admin-status" +func (n *InterfacePath) AdminStatus() *Interface_AdminStatusPath { + ps := &Interface_AdminStatusPath{ + NodePath: ygnmi.NewNodePath( + []string{"state", "admin-status"}, + map[string]interface{}{}, + n, + ), + parent: n, + } + return ps +} + +// AdminStatus (leaf): The desired state of the interface. In RFC 7223 this leaf +// has the same read semantics as ifAdminStatus. Here, it +// reflects the administrative state as set by enabling or +// disabling the interface. +// +// Defining module: "openconfig-interfaces" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "state/admin-status" +// Path from root: "/interfaces/interface/state/admin-status" +func (n *InterfacePathAny) AdminStatus() *Interface_AdminStatusPathAny { + ps := &Interface_AdminStatusPathAny{ + NodePath: ygnmi.NewNodePath( + []string{"state", "admin-status"}, + map[string]interface{}{}, + n, + ), + parent: n, + } + return ps +} + +// Aggregation (container): Options for logical interfaces representing +// aggregates +// +// Defining module: "openconfig-if-aggregate" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "aggregation" +// Path from root: "/interfaces/interface/aggregation" +func (n *InterfacePath) Aggregation() *Interface_AggregationPath { + ps := &Interface_AggregationPath{ + NodePath: ygnmi.NewNodePath( + []string{"aggregation"}, + map[string]interface{}{}, + n, + ), + } + return ps +} + +// Aggregation (container): Options for logical interfaces representing +// aggregates +// +// Defining module: "openconfig-if-aggregate" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "aggregation" +// Path from root: "/interfaces/interface/aggregation" +func (n *InterfacePathAny) Aggregation() *Interface_AggregationPathAny { + ps := &Interface_AggregationPathAny{ + NodePath: ygnmi.NewNodePath( + []string{"aggregation"}, + map[string]interface{}{}, + n, + ), + } + return ps +} + +// Counters (container): A collection of interface specific statistics entitites which are +// not common to subinterfaces. +// +// Defining module: "openconfig-interfaces" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "state/counters" +// Path from root: "/interfaces/interface/state/counters" +func (n *InterfacePath) Counters() *Interface_CountersPath { + ps := &Interface_CountersPath{ + NodePath: ygnmi.NewNodePath( + []string{"state", "counters"}, + map[string]interface{}{}, + n, + ), + } + return ps +} + +// Counters (container): A collection of interface specific statistics entitites which are +// not common to subinterfaces. +// +// Defining module: "openconfig-interfaces" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "state/counters" +// Path from root: "/interfaces/interface/state/counters" +func (n *InterfacePathAny) Counters() *Interface_CountersPathAny { + ps := &Interface_CountersPathAny{ + NodePath: ygnmi.NewNodePath( + []string{"state", "counters"}, + map[string]interface{}{}, + n, + ), + } + return ps +} + +// Cpu (leaf): When set to true, the interface is for traffic +// that is handled by the system CPU, sometimes also called the +// control plane interface. On systems that represent the CPU +// interface as an Ethernet interface, for example, this leaf +// should be used to distinguish the CPU interface from dataplane +// interfaces. +// +// Defining module: "openconfig-interfaces" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "state/cpu" +// Path from root: "/interfaces/interface/state/cpu" +func (n *InterfacePath) Cpu() *Interface_CpuPath { + ps := &Interface_CpuPath{ + NodePath: ygnmi.NewNodePath( + []string{"state", "cpu"}, + map[string]interface{}{}, + n, + ), + parent: n, + } + return ps +} + +// Cpu (leaf): When set to true, the interface is for traffic +// that is handled by the system CPU, sometimes also called the +// control plane interface. On systems that represent the CPU +// interface as an Ethernet interface, for example, this leaf +// should be used to distinguish the CPU interface from dataplane +// interfaces. +// +// Defining module: "openconfig-interfaces" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "state/cpu" +// Path from root: "/interfaces/interface/state/cpu" +func (n *InterfacePathAny) Cpu() *Interface_CpuPathAny { + ps := &Interface_CpuPathAny{ + NodePath: ygnmi.NewNodePath( + []string{"state", "cpu"}, + map[string]interface{}{}, + n, + ), + parent: n, + } + return ps +} + +// Description (leaf): A textual description of the interface. +// +// A server implementation MAY map this leaf to the ifAlias +// MIB object. Such an implementation needs to use some +// mechanism to handle the differences in size and characters +// allowed between this leaf and ifAlias. The definition of +// such a mechanism is outside the scope of this document. +// +// Since ifAlias is defined to be stored in non-volatile +// storage, the MIB implementation MUST map ifAlias to the +// value of 'description' in the persistently stored +// datastore. +// +// Specifically, if the device supports ':startup', when +// ifAlias is read the device MUST return the value of +// 'description' in the 'startup' datastore, and when it is +// written, it MUST be written to the 'running' and 'startup' +// datastores. Note that it is up to the implementation to +// +// decide whether to modify this single leaf in 'startup' or +// perform an implicit copy-config from 'running' to +// 'startup'. +// +// If the device does not support ':startup', ifAlias MUST +// be mapped to the 'description' leaf in the 'running' +// datastore. +// +// Defining module: "openconfig-interfaces" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "*/description" +// Path from root: "/interfaces/interface/*/description" +func (n *InterfacePath) Description() *Interface_DescriptionPath { + ps := &Interface_DescriptionPath{ + NodePath: ygnmi.NewNodePath( + []string{"*", "description"}, + map[string]interface{}{}, + n, + ), + parent: n, + } + return ps +} + +// Description (leaf): A textual description of the interface. +// +// A server implementation MAY map this leaf to the ifAlias +// MIB object. Such an implementation needs to use some +// mechanism to handle the differences in size and characters +// allowed between this leaf and ifAlias. The definition of +// such a mechanism is outside the scope of this document. +// +// Since ifAlias is defined to be stored in non-volatile +// storage, the MIB implementation MUST map ifAlias to the +// value of 'description' in the persistently stored +// datastore. +// +// Specifically, if the device supports ':startup', when +// ifAlias is read the device MUST return the value of +// 'description' in the 'startup' datastore, and when it is +// written, it MUST be written to the 'running' and 'startup' +// datastores. Note that it is up to the implementation to +// +// decide whether to modify this single leaf in 'startup' or +// perform an implicit copy-config from 'running' to +// 'startup'. +// +// If the device does not support ':startup', ifAlias MUST +// be mapped to the 'description' leaf in the 'running' +// datastore. +// +// Defining module: "openconfig-interfaces" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "*/description" +// Path from root: "/interfaces/interface/*/description" +func (n *InterfacePathAny) Description() *Interface_DescriptionPathAny { + ps := &Interface_DescriptionPathAny{ + NodePath: ygnmi.NewNodePath( + []string{"*", "description"}, + map[string]interface{}{}, + n, + ), + parent: n, + } + return ps +} + +// Enabled (leaf): This leaf contains the configured, desired state of the +// interface. +// +// Systems that implement the IF-MIB use the value of this +// leaf in the 'running' datastore to set +// IF-MIB.ifAdminStatus to 'up' or 'down' after an ifEntry +// has been initialized, as described in RFC 2863. +// +// Changes in this leaf in the 'running' datastore are +// reflected in ifAdminStatus, but if ifAdminStatus is +// changed over SNMP, this leaf is not affected. +// +// Defining module: "openconfig-interfaces" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "*/enabled" +// Path from root: "/interfaces/interface/*/enabled" +func (n *InterfacePath) Enabled() *Interface_EnabledPath { + ps := &Interface_EnabledPath{ + NodePath: ygnmi.NewNodePath( + []string{"*", "enabled"}, + map[string]interface{}{}, + n, + ), + parent: n, + } + return ps +} + +// Enabled (leaf): This leaf contains the configured, desired state of the +// interface. +// +// Systems that implement the IF-MIB use the value of this +// leaf in the 'running' datastore to set +// IF-MIB.ifAdminStatus to 'up' or 'down' after an ifEntry +// has been initialized, as described in RFC 2863. +// +// Changes in this leaf in the 'running' datastore are +// reflected in ifAdminStatus, but if ifAdminStatus is +// changed over SNMP, this leaf is not affected. +// +// Defining module: "openconfig-interfaces" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "*/enabled" +// Path from root: "/interfaces/interface/*/enabled" +func (n *InterfacePathAny) Enabled() *Interface_EnabledPathAny { + ps := &Interface_EnabledPathAny{ + NodePath: ygnmi.NewNodePath( + []string{"*", "enabled"}, + map[string]interface{}{}, + n, + ), + parent: n, + } + return ps +} + +// Ethernet (container): Top-level container for ethernet configuration +// and state +// +// Defining module: "openconfig-if-ethernet" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "ethernet" +// Path from root: "/interfaces/interface/ethernet" +func (n *InterfacePath) Ethernet() *Interface_EthernetPath { + ps := &Interface_EthernetPath{ + NodePath: ygnmi.NewNodePath( + []string{"ethernet"}, + map[string]interface{}{}, + n, + ), + } + return ps +} + +// Ethernet (container): Top-level container for ethernet configuration +// and state +// +// Defining module: "openconfig-if-ethernet" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "ethernet" +// Path from root: "/interfaces/interface/ethernet" +func (n *InterfacePathAny) Ethernet() *Interface_EthernetPathAny { + ps := &Interface_EthernetPathAny{ + NodePath: ygnmi.NewNodePath( + []string{"ethernet"}, + map[string]interface{}{}, + n, + ), + } + return ps +} + +// HoldTime (container): Top-level container for hold-time settings to enable +// dampening advertisements of interface transitions. +// +// Defining module: "openconfig-interfaces" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "hold-time" +// Path from root: "/interfaces/interface/hold-time" +func (n *InterfacePath) HoldTime() *Interface_HoldTimePath { + ps := &Interface_HoldTimePath{ + NodePath: ygnmi.NewNodePath( + []string{"hold-time"}, + map[string]interface{}{}, + n, + ), + } + return ps +} + +// HoldTime (container): Top-level container for hold-time settings to enable +// dampening advertisements of interface transitions. +// +// Defining module: "openconfig-interfaces" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "hold-time" +// Path from root: "/interfaces/interface/hold-time" +func (n *InterfacePathAny) HoldTime() *Interface_HoldTimePathAny { + ps := &Interface_HoldTimePathAny{ + NodePath: ygnmi.NewNodePath( + []string{"hold-time"}, + map[string]interface{}{}, + n, + ), + } + return ps +} + +// Ifindex (leaf): System assigned number for each interface. Corresponds to +// ifIndex object in SNMP Interface MIB +// +// Defining module: "openconfig-interfaces" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "state/ifindex" +// Path from root: "/interfaces/interface/state/ifindex" +func (n *InterfacePath) Ifindex() *Interface_IfindexPath { + ps := &Interface_IfindexPath{ + NodePath: ygnmi.NewNodePath( + []string{"state", "ifindex"}, + map[string]interface{}{}, + n, + ), + parent: n, + } + return ps +} + +// Ifindex (leaf): System assigned number for each interface. Corresponds to +// ifIndex object in SNMP Interface MIB +// +// Defining module: "openconfig-interfaces" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "state/ifindex" +// Path from root: "/interfaces/interface/state/ifindex" +func (n *InterfacePathAny) Ifindex() *Interface_IfindexPathAny { + ps := &Interface_IfindexPathAny{ + NodePath: ygnmi.NewNodePath( + []string{"state", "ifindex"}, + map[string]interface{}{}, + n, + ), + parent: n, + } + return ps +} + +// LastChange (leaf): This timestamp indicates the absolute time of the last +// state change of the interface (e.g., up-to-down transition). +// This is different than the SNMP ifLastChange object in the +// standard interface MIB in that it is not relative to the +// system boot time (i.e,. sysUpTime). +// +// The value is the timestamp in nanoseconds relative to +// the Unix Epoch (Jan 1, 1970 00:00:00 UTC). +// +// Defining module: "openconfig-interfaces" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "state/last-change" +// Path from root: "/interfaces/interface/state/last-change" +func (n *InterfacePath) LastChange() *Interface_LastChangePath { + ps := &Interface_LastChangePath{ + NodePath: ygnmi.NewNodePath( + []string{"state", "last-change"}, + map[string]interface{}{}, + n, + ), + parent: n, + } + return ps +} + +// LastChange (leaf): This timestamp indicates the absolute time of the last +// state change of the interface (e.g., up-to-down transition). +// This is different than the SNMP ifLastChange object in the +// standard interface MIB in that it is not relative to the +// system boot time (i.e,. sysUpTime). +// +// The value is the timestamp in nanoseconds relative to +// the Unix Epoch (Jan 1, 1970 00:00:00 UTC). +// +// Defining module: "openconfig-interfaces" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "state/last-change" +// Path from root: "/interfaces/interface/state/last-change" +func (n *InterfacePathAny) LastChange() *Interface_LastChangePathAny { + ps := &Interface_LastChangePathAny{ + NodePath: ygnmi.NewNodePath( + []string{"state", "last-change"}, + map[string]interface{}{}, + n, + ), + parent: n, + } + return ps +} + +// Logical (leaf): When set to true, the interface is a logical interface +// which does not have an associated physical port or +// channel on the system. +// +// Defining module: "openconfig-interfaces" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "state/logical" +// Path from root: "/interfaces/interface/state/logical" +func (n *InterfacePath) Logical() *Interface_LogicalPath { + ps := &Interface_LogicalPath{ + NodePath: ygnmi.NewNodePath( + []string{"state", "logical"}, + map[string]interface{}{}, + n, + ), + parent: n, + } + return ps +} + +// Logical (leaf): When set to true, the interface is a logical interface +// which does not have an associated physical port or +// channel on the system. +// +// Defining module: "openconfig-interfaces" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "state/logical" +// Path from root: "/interfaces/interface/state/logical" +func (n *InterfacePathAny) Logical() *Interface_LogicalPathAny { + ps := &Interface_LogicalPathAny{ + NodePath: ygnmi.NewNodePath( + []string{"state", "logical"}, + map[string]interface{}{}, + n, + ), + parent: n, + } + return ps +} + +// LoopbackMode (leaf): Sets the loopback type on the interface. Setting the +// mode to something besides NONE activates the loopback in +// the specified mode. +// +// Defining module: "openconfig-interfaces" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "*/loopback-mode" +// Path from root: "/interfaces/interface/*/loopback-mode" +func (n *InterfacePath) LoopbackMode() *Interface_LoopbackModePath { + ps := &Interface_LoopbackModePath{ + NodePath: ygnmi.NewNodePath( + []string{"*", "loopback-mode"}, + map[string]interface{}{}, + n, + ), + parent: n, + } + return ps +} + +// LoopbackMode (leaf): Sets the loopback type on the interface. Setting the +// mode to something besides NONE activates the loopback in +// the specified mode. +// +// Defining module: "openconfig-interfaces" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "*/loopback-mode" +// Path from root: "/interfaces/interface/*/loopback-mode" +func (n *InterfacePathAny) LoopbackMode() *Interface_LoopbackModePathAny { + ps := &Interface_LoopbackModePathAny{ + NodePath: ygnmi.NewNodePath( + []string{"*", "loopback-mode"}, + map[string]interface{}{}, + n, + ), + parent: n, + } + return ps +} + +// Management (leaf): When set to true, the interface is a dedicated +// management interface that is not connected to dataplane +// interfaces. It may be used to connect the system to an +// out-of-band management network, for example. +// +// Defining module: "openconfig-interfaces" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "state/management" +// Path from root: "/interfaces/interface/state/management" +func (n *InterfacePath) Management() *Interface_ManagementPath { + ps := &Interface_ManagementPath{ + NodePath: ygnmi.NewNodePath( + []string{"state", "management"}, + map[string]interface{}{}, + n, + ), + parent: n, + } + return ps +} + +// Management (leaf): When set to true, the interface is a dedicated +// management interface that is not connected to dataplane +// interfaces. It may be used to connect the system to an +// out-of-band management network, for example. +// +// Defining module: "openconfig-interfaces" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "state/management" +// Path from root: "/interfaces/interface/state/management" +func (n *InterfacePathAny) Management() *Interface_ManagementPathAny { + ps := &Interface_ManagementPathAny{ + NodePath: ygnmi.NewNodePath( + []string{"state", "management"}, + map[string]interface{}{}, + n, + ), + parent: n, + } + return ps +} + +// Mtu (leaf): Set the max transmission unit size in octets +// for the physical interface. If this is not set, the mtu is +// set to the operational default -- e.g., 1514 bytes on an +// Ethernet interface. +// +// Defining module: "openconfig-interfaces" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "*/mtu" +// Path from root: "/interfaces/interface/*/mtu" +func (n *InterfacePath) Mtu() *Interface_MtuPath { + ps := &Interface_MtuPath{ + NodePath: ygnmi.NewNodePath( + []string{"*", "mtu"}, + map[string]interface{}{}, + n, + ), + parent: n, + } + return ps +} + +// Mtu (leaf): Set the max transmission unit size in octets +// for the physical interface. If this is not set, the mtu is +// set to the operational default -- e.g., 1514 bytes on an +// Ethernet interface. +// +// Defining module: "openconfig-interfaces" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "*/mtu" +// Path from root: "/interfaces/interface/*/mtu" +func (n *InterfacePathAny) Mtu() *Interface_MtuPathAny { + ps := &Interface_MtuPathAny{ + NodePath: ygnmi.NewNodePath( + []string{"*", "mtu"}, + map[string]interface{}{}, + n, + ), + parent: n, + } + return ps +} + +// Name (leaf): The name of the interface. +// +// A device MAY restrict the allowed values for this leaf, +// possibly depending on the type of the interface. +// For system-controlled interfaces, this leaf is the +// device-specific name of the interface. The 'config false' +// list interfaces/interface[name]/state contains the currently +// existing interfaces on the device. +// +// If a client tries to create configuration for a +// system-controlled interface that is not present in the +// corresponding state list, the server MAY reject +// the request if the implementation does not support +// pre-provisioning of interfaces or if the name refers to +// an interface that can never exist in the system. A +// NETCONF server MUST reply with an rpc-error with the +// error-tag 'invalid-value' in this case. +// +// The IETF model in RFC 7223 provides YANG features for the +// following (i.e., pre-provisioning and arbitrary-names), +// however they are omitted here: +// +// If the device supports pre-provisioning of interface +// configuration, the 'pre-provisioning' feature is +// advertised. +// +// If the device allows arbitrarily named user-controlled +// interfaces, the 'arbitrary-names' feature is advertised. +// +// When a configured user-controlled interface is created by +// the system, it is instantiated with the same name in the +// /interfaces/interface[name]/state list. +// +// Defining module: "openconfig-interfaces" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "*/name" +// Path from root: "/interfaces/interface/*/name" +func (n *InterfacePath) Name() *Interface_NamePath { + ps := &Interface_NamePath{ + NodePath: ygnmi.NewNodePath( + []string{"*", "name"}, + map[string]interface{}{}, + n, + ), + parent: n, + } + return ps +} + +// Name (leaf): The name of the interface. +// +// A device MAY restrict the allowed values for this leaf, +// possibly depending on the type of the interface. +// For system-controlled interfaces, this leaf is the +// device-specific name of the interface. The 'config false' +// list interfaces/interface[name]/state contains the currently +// existing interfaces on the device. +// +// If a client tries to create configuration for a +// system-controlled interface that is not present in the +// corresponding state list, the server MAY reject +// the request if the implementation does not support +// pre-provisioning of interfaces or if the name refers to +// an interface that can never exist in the system. A +// NETCONF server MUST reply with an rpc-error with the +// error-tag 'invalid-value' in this case. +// +// The IETF model in RFC 7223 provides YANG features for the +// following (i.e., pre-provisioning and arbitrary-names), +// however they are omitted here: +// +// If the device supports pre-provisioning of interface +// configuration, the 'pre-provisioning' feature is +// advertised. +// +// If the device allows arbitrarily named user-controlled +// interfaces, the 'arbitrary-names' feature is advertised. +// +// When a configured user-controlled interface is created by +// the system, it is instantiated with the same name in the +// /interfaces/interface[name]/state list. +// +// Defining module: "openconfig-interfaces" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "*/name" +// Path from root: "/interfaces/interface/*/name" +func (n *InterfacePathAny) Name() *Interface_NamePathAny { + ps := &Interface_NamePathAny{ + NodePath: ygnmi.NewNodePath( + []string{"*", "name"}, + map[string]interface{}{}, + n, + ), + parent: n, + } + return ps +} + +// OperStatus (leaf): The current operational state of the interface. +// +// This leaf has the same semantics as ifOperStatus. +// +// Defining module: "openconfig-interfaces" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "state/oper-status" +// Path from root: "/interfaces/interface/state/oper-status" +func (n *InterfacePath) OperStatus() *Interface_OperStatusPath { + ps := &Interface_OperStatusPath{ + NodePath: ygnmi.NewNodePath( + []string{"state", "oper-status"}, + map[string]interface{}{}, + n, + ), + parent: n, + } + return ps +} + +// OperStatus (leaf): The current operational state of the interface. +// +// This leaf has the same semantics as ifOperStatus. +// +// Defining module: "openconfig-interfaces" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "state/oper-status" +// Path from root: "/interfaces/interface/state/oper-status" +func (n *InterfacePathAny) OperStatus() *Interface_OperStatusPathAny { + ps := &Interface_OperStatusPathAny{ + NodePath: ygnmi.NewNodePath( + []string{"state", "oper-status"}, + map[string]interface{}{}, + n, + ), + parent: n, + } + return ps +} + +// PenaltyBasedAied (container): Top level container to suppress UP->DOWN link events using a penalty based additive-increase, exponential-decrease algorithm. +// +// Defining module: "openconfig-interfaces" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "penalty-based-aied" +// Path from root: "/interfaces/interface/penalty-based-aied" +func (n *InterfacePath) PenaltyBasedAied() *Interface_PenaltyBasedAiedPath { + ps := &Interface_PenaltyBasedAiedPath{ + NodePath: ygnmi.NewNodePath( + []string{"penalty-based-aied"}, + map[string]interface{}{}, + n, + ), + } + return ps +} + +// PenaltyBasedAied (container): Top level container to suppress UP->DOWN link events using a penalty based additive-increase, exponential-decrease algorithm. +// +// Defining module: "openconfig-interfaces" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "penalty-based-aied" +// Path from root: "/interfaces/interface/penalty-based-aied" +func (n *InterfacePathAny) PenaltyBasedAied() *Interface_PenaltyBasedAiedPathAny { + ps := &Interface_PenaltyBasedAiedPathAny{ + NodePath: ygnmi.NewNodePath( + []string{"penalty-based-aied"}, + map[string]interface{}{}, + n, + ), + } + return ps +} + +// RoutedVlan (container): Top-level container for routed vlan interfaces. These +// logical interfaces are also known as SVI (switched virtual +// interface), IRB (integrated routing and bridging), RVI +// (routed VLAN interface) +// +// Defining module: "openconfig-vlan" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "routed-vlan" +// Path from root: "/interfaces/interface/routed-vlan" +func (n *InterfacePath) RoutedVlan() *Interface_RoutedVlanPath { + ps := &Interface_RoutedVlanPath{ + NodePath: ygnmi.NewNodePath( + []string{"routed-vlan"}, + map[string]interface{}{}, + n, + ), + } + return ps +} + +// RoutedVlan (container): Top-level container for routed vlan interfaces. These +// logical interfaces are also known as SVI (switched virtual +// interface), IRB (integrated routing and bridging), RVI +// (routed VLAN interface) +// +// Defining module: "openconfig-vlan" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "routed-vlan" +// Path from root: "/interfaces/interface/routed-vlan" +func (n *InterfacePathAny) RoutedVlan() *Interface_RoutedVlanPathAny { + ps := &Interface_RoutedVlanPathAny{ + NodePath: ygnmi.NewNodePath( + []string{"routed-vlan"}, + map[string]interface{}{}, + n, + ), + } + return ps +} + +// SubinterfaceAny (list): The list of subinterfaces (logical interfaces) associated +// with a physical interface +// +// Defining module: "openconfig-interfaces" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "subinterfaces/subinterface" +// Path from root: "/interfaces/interface/subinterfaces/subinterface" +func (n *InterfacePath) SubinterfaceAny() *Interface_SubinterfacePathAny { + ps := &Interface_SubinterfacePathAny{ + NodePath: ygnmi.NewNodePath( + []string{"subinterfaces", "subinterface"}, + map[string]interface{}{"index": "*"}, + n, + ), + } + return ps +} + +// SubinterfaceAny (list): The list of subinterfaces (logical interfaces) associated +// with a physical interface +// +// Defining module: "openconfig-interfaces" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "subinterfaces/subinterface" +// Path from root: "/interfaces/interface/subinterfaces/subinterface" +func (n *InterfacePathAny) SubinterfaceAny() *Interface_SubinterfacePathAny { + ps := &Interface_SubinterfacePathAny{ + NodePath: ygnmi.NewNodePath( + []string{"subinterfaces", "subinterface"}, + map[string]interface{}{"index": "*"}, + n, + ), + } + return ps +} + +// Subinterface (list): The list of subinterfaces (logical interfaces) associated +// with a physical interface +// +// Defining module: "openconfig-interfaces" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "subinterfaces/subinterface" +// Path from root: "/interfaces/interface/subinterfaces/subinterface" +// +// Index: uint32 +func (n *InterfacePath) Subinterface(Index uint32) *Interface_SubinterfacePath { + ps := &Interface_SubinterfacePath{ + NodePath: ygnmi.NewNodePath( + []string{"subinterfaces", "subinterface"}, + map[string]interface{}{"index": Index}, + n, + ), + } + return ps +} + +// Subinterface (list): The list of subinterfaces (logical interfaces) associated +// with a physical interface +// +// Defining module: "openconfig-interfaces" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "subinterfaces/subinterface" +// Path from root: "/interfaces/interface/subinterfaces/subinterface" +// +// Index: uint32 +func (n *InterfacePathAny) Subinterface(Index uint32) *Interface_SubinterfacePathAny { + ps := &Interface_SubinterfacePathAny{ + NodePath: ygnmi.NewNodePath( + []string{"subinterfaces", "subinterface"}, + map[string]interface{}{"index": Index}, + n, + ), + } + return ps +} + +// SubinterfaceMap (list): The list of subinterfaces (logical interfaces) associated +// with a physical interface +// +// Defining module: "openconfig-interfaces" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "subinterfaces/subinterface" +// Path from root: "/interfaces/interface/subinterfaces/subinterface" +func (n *InterfacePath) SubinterfaceMap() *Interface_SubinterfacePathMap { + ps := &Interface_SubinterfacePathMap{ + NodePath: ygnmi.NewNodePath( + []string{"subinterfaces"}, + map[string]interface{}{}, + n, + ), + } + return ps +} + +// SubinterfaceMap (list): The list of subinterfaces (logical interfaces) associated +// with a physical interface +// +// Defining module: "openconfig-interfaces" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "subinterfaces/subinterface" +// Path from root: "/interfaces/interface/subinterfaces/subinterface" +func (n *InterfacePathAny) SubinterfaceMap() *Interface_SubinterfacePathMapAny { + ps := &Interface_SubinterfacePathMapAny{ + NodePath: ygnmi.NewNodePath( + []string{"subinterfaces"}, + map[string]interface{}{}, + n, + ), + } + return ps +} + +// Tpid (leaf): Optionally set the tag protocol identifier field (TPID) that +// is accepted on the VLAN +// +// Defining module: "openconfig-vlan" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "*/tpid" +// Path from root: "/interfaces/interface/*/tpid" +func (n *InterfacePath) Tpid() *Interface_TpidPath { + ps := &Interface_TpidPath{ + NodePath: ygnmi.NewNodePath( + []string{"*", "tpid"}, + map[string]interface{}{}, + n, + ), + parent: n, + } + return ps +} + +// Tpid (leaf): Optionally set the tag protocol identifier field (TPID) that +// is accepted on the VLAN +// +// Defining module: "openconfig-vlan" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "*/tpid" +// Path from root: "/interfaces/interface/*/tpid" +func (n *InterfacePathAny) Tpid() *Interface_TpidPathAny { + ps := &Interface_TpidPathAny{ + NodePath: ygnmi.NewNodePath( + []string{"*", "tpid"}, + map[string]interface{}{}, + n, + ), + parent: n, + } + return ps +} + +// Type (leaf): The type of the interface. +// +// When an interface entry is created, a server MAY +// initialize the type leaf with a valid value, e.g., if it +// is possible to derive the type from the name of the +// interface. +// +// If a client tries to set the type of an interface to a +// value that can never be used by the system, e.g., if the +// type is not supported or if the type does not match the +// name of the interface, the server MUST reject the request. +// A NETCONF server MUST reply with an rpc-error with the +// error-tag 'invalid-value' in this case. +// +// Defining module: "openconfig-interfaces" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "*/type" +// Path from root: "/interfaces/interface/*/type" +func (n *InterfacePath) Type() *Interface_TypePath { + ps := &Interface_TypePath{ + NodePath: ygnmi.NewNodePath( + []string{"*", "type"}, + map[string]interface{}{}, + n, + ), + parent: n, + } + return ps +} + +// Type (leaf): The type of the interface. +// +// When an interface entry is created, a server MAY +// initialize the type leaf with a valid value, e.g., if it +// is possible to derive the type from the name of the +// interface. +// +// If a client tries to set the type of an interface to a +// value that can never be used by the system, e.g., if the +// type is not supported or if the type does not match the +// name of the interface, the server MUST reject the request. +// A NETCONF server MUST reply with an rpc-error with the +// error-tag 'invalid-value' in this case. +// +// Defining module: "openconfig-interfaces" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "*/type" +// Path from root: "/interfaces/interface/*/type" +func (n *InterfacePathAny) Type() *Interface_TypePathAny { + ps := &Interface_TypePathAny{ + NodePath: ygnmi.NewNodePath( + []string{"*", "type"}, + map[string]interface{}{}, + n, + ), + parent: n, + } + return ps +} + +// State returns a Query that can be used in gNMI operations. +func (n *InterfacePath) State() ygnmi.SingletonQuery[*Interface] { + return ygnmi.NewSingletonQuery[*Interface]( + "Interface", + true, + true, + false, + false, + true, + false, + n, + nil, + nil, + func() *ytypes.Schema { + return &ytypes.Schema{ + Root: &Device{}, + SchemaTree: SchemaTree, + Unmarshal: Unmarshal, + } + }, + nil, + nil, + ) +} + +// State returns a Query that can be used in gNMI operations. +func (n *InterfacePathAny) State() ygnmi.WildcardQuery[*Interface] { + return ygnmi.NewWildcardQuery[*Interface]( + "Interface", + true, + true, + false, + false, + true, + false, + n, + nil, + nil, + func() *ytypes.Schema { + return &ytypes.Schema{ + Root: &Device{}, + SchemaTree: SchemaTree, + Unmarshal: Unmarshal, + } + }, + nil, + nil, + ) +} + +// Config returns a Query that can be used in gNMI operations. +func (n *InterfacePath) Config() ygnmi.ConfigQuery[*Interface] { + return ygnmi.NewConfigQuery[*Interface]( + "Interface", + false, + false, + false, + false, + true, + false, + n, + nil, + nil, + func() *ytypes.Schema { + return &ytypes.Schema{ + Root: &Device{}, + SchemaTree: SchemaTree, + Unmarshal: Unmarshal, + } + }, + nil, + nil, + ) +} + +// Config returns a Query that can be used in gNMI operations. +func (n *InterfacePathAny) Config() ygnmi.WildcardQuery[*Interface] { + return ygnmi.NewWildcardQuery[*Interface]( + "Interface", + false, + false, + false, + false, + true, + false, + n, + nil, + nil, + func() *ytypes.Schema { + return &ytypes.Schema{ + Root: &Device{}, + SchemaTree: SchemaTree, + Unmarshal: Unmarshal, + } + }, + nil, + nil, + ) +} + +// State returns a Query that can be used in gNMI operations. +func (n *InterfacePathMap) State() ygnmi.SingletonQuery[map[string]*Interface] { + return ygnmi.NewSingletonQuery[map[string]*Interface]( + "Device", + true, + true, + false, + false, + true, + true, + n, + func(gs ygot.ValidatedGoStruct) (map[string]*Interface, bool) { + ret := gs.(*Device).Interface + return ret, ret != nil + }, + func() ygot.ValidatedGoStruct { return new(Device) }, + func() *ytypes.Schema { + return &ytypes.Schema{ + Root: &Device{}, + SchemaTree: SchemaTree, + Unmarshal: Unmarshal, + } + }, + nil, + &ygnmi.CompressionInfo{ + PreRelPath: []string{"openconfig-interfaces:interfaces"}, + PostRelPath: []string{"openconfig-interfaces:interface"}, + }, + ) +} + +// State returns a Query that can be used in gNMI operations. +func (n *InterfacePathMapAny) State() ygnmi.WildcardQuery[map[string]*Interface] { + return ygnmi.NewWildcardQuery[map[string]*Interface]( + "Device", + true, + true, + false, + false, + true, + true, + n, + func(gs ygot.ValidatedGoStruct) (map[string]*Interface, bool) { + ret := gs.(*Device).Interface + return ret, ret != nil + }, + func() ygot.ValidatedGoStruct { return new(Device) }, + func() *ytypes.Schema { + return &ytypes.Schema{ + Root: &Device{}, + SchemaTree: SchemaTree, + Unmarshal: Unmarshal, + } + }, + nil, + &ygnmi.CompressionInfo{ + PreRelPath: []string{"openconfig-interfaces:interfaces"}, + PostRelPath: []string{"openconfig-interfaces:interface"}, + }, + ) +} + +// Config returns a Query that can be used in gNMI operations. +func (n *InterfacePathMap) Config() ygnmi.ConfigQuery[map[string]*Interface] { + return ygnmi.NewConfigQuery[map[string]*Interface]( + "Device", + false, + false, + false, + false, + true, + true, + n, + func(gs ygot.ValidatedGoStruct) (map[string]*Interface, bool) { + ret := gs.(*Device).Interface + return ret, ret != nil + }, + func() ygot.ValidatedGoStruct { return new(Device) }, + func() *ytypes.Schema { + return &ytypes.Schema{ + Root: &Device{}, + SchemaTree: SchemaTree, + Unmarshal: Unmarshal, + } + }, + nil, + &ygnmi.CompressionInfo{ + PreRelPath: []string{"openconfig-interfaces:interfaces"}, + PostRelPath: []string{"openconfig-interfaces:interface"}, + }, + ) +} + +// Config returns a Query that can be used in gNMI operations. +func (n *InterfacePathMapAny) Config() ygnmi.WildcardQuery[map[string]*Interface] { + return ygnmi.NewWildcardQuery[map[string]*Interface]( + "Device", + false, + false, + false, + false, + true, + true, + n, + func(gs ygot.ValidatedGoStruct) (map[string]*Interface, bool) { + ret := gs.(*Device).Interface + return ret, ret != nil + }, + func() ygot.ValidatedGoStruct { return new(Device) }, + func() *ytypes.Schema { + return &ytypes.Schema{ + Root: &Device{}, + SchemaTree: SchemaTree, + Unmarshal: Unmarshal, + } + }, + nil, + &ygnmi.CompressionInfo{ + PreRelPath: []string{"openconfig-interfaces:interfaces"}, + PostRelPath: []string{"openconfig-interfaces:interface"}, + }, + ) +} + +// Interface_Aggregation_LagSpeedPath represents the /openconfig-interfaces/interfaces/interface/aggregation/state/lag-speed YANG schema element. +type Interface_Aggregation_LagSpeedPath struct { + *ygnmi.NodePath + parent ygnmi.PathStruct +} + +// Interface_Aggregation_LagSpeedPathAny represents the wildcard version of the /openconfig-interfaces/interfaces/interface/aggregation/state/lag-speed YANG schema element. +type Interface_Aggregation_LagSpeedPathAny struct { + *ygnmi.NodePath + parent ygnmi.PathStruct +} + +// State returns a Query that can be used in gNMI operations. +// +// Defining module: "openconfig-if-aggregate" +// Instantiating module: "openconfig-if-aggregate" +// Path from parent: "state/lag-speed" +// Path from root: "/interfaces/interface/aggregation/state/lag-speed" +func (n *Interface_Aggregation_LagSpeedPath) State() ygnmi.SingletonQuery[uint32] { + return ygnmi.NewSingletonQuery[uint32]( + "Interface_Aggregation", + true, + true, + true, + true, + true, + false, + ygnmi.NewNodePath( + []string{"state", "lag-speed"}, + nil, + n.parent, + ), + func(gs ygot.ValidatedGoStruct) (uint32, bool) { + ret := gs.(*Interface_Aggregation).LagSpeed + if ret == nil { + var zero uint32 + return zero, false + } + return *ret, true + }, + func() ygot.ValidatedGoStruct { return new(Interface_Aggregation) }, + func() *ytypes.Schema { + return &ytypes.Schema{ + Root: &Device{}, + SchemaTree: SchemaTree, + Unmarshal: Unmarshal, + } + }, + nil, + nil, + ) +} + +// State returns a Query that can be used in gNMI operations. +// +// Defining module: "openconfig-if-aggregate" +// Instantiating module: "openconfig-if-aggregate" +// Path from parent: "state/lag-speed" +// Path from root: "/interfaces/interface/aggregation/state/lag-speed" +func (n *Interface_Aggregation_LagSpeedPathAny) State() ygnmi.WildcardQuery[uint32] { + return ygnmi.NewWildcardQuery[uint32]( + "Interface_Aggregation", + true, + true, + true, + true, + true, + false, + ygnmi.NewNodePath( + []string{"state", "lag-speed"}, + nil, + n.parent, + ), + func(gs ygot.ValidatedGoStruct) (uint32, bool) { + ret := gs.(*Interface_Aggregation).LagSpeed + if ret == nil { + var zero uint32 + return zero, false + } + return *ret, true + }, + func() ygot.ValidatedGoStruct { return new(Interface_Aggregation) }, + func() *ytypes.Schema { + return &ytypes.Schema{ + Root: &Device{}, + SchemaTree: SchemaTree, + Unmarshal: Unmarshal, + } + }, + nil, + nil, + ) +} + +// Interface_Aggregation_LagTypePath represents the /openconfig-interfaces/interfaces/interface/aggregation/config/lag-type YANG schema element. +type Interface_Aggregation_LagTypePath struct { + *ygnmi.NodePath + parent ygnmi.PathStruct +} + +// Interface_Aggregation_LagTypePathAny represents the wildcard version of the /openconfig-interfaces/interfaces/interface/aggregation/config/lag-type YANG schema element. +type Interface_Aggregation_LagTypePathAny struct { + *ygnmi.NodePath + parent ygnmi.PathStruct +} + +// State returns a Query that can be used in gNMI operations. +// +// Defining module: "openconfig-if-aggregate" +// Instantiating module: "openconfig-if-aggregate" +// Path from parent: "state/lag-type" +// Path from root: "/interfaces/interface/aggregation/state/lag-type" +func (n *Interface_Aggregation_LagTypePath) State() ygnmi.SingletonQuery[E_IfAggregate_AggregationType] { + return ygnmi.NewSingletonQuery[E_IfAggregate_AggregationType]( + "Interface_Aggregation", + true, + true, + true, + false, + true, + false, + ygnmi.NewNodePath( + []string{"state", "lag-type"}, + nil, + n.parent, + ), + func(gs ygot.ValidatedGoStruct) (E_IfAggregate_AggregationType, bool) { + ret := gs.(*Interface_Aggregation).LagType + return ret, !reflect.ValueOf(ret).IsZero() + }, + func() ygot.ValidatedGoStruct { return new(Interface_Aggregation) }, + func() *ytypes.Schema { + return &ytypes.Schema{ + Root: &Device{}, + SchemaTree: SchemaTree, + Unmarshal: Unmarshal, + } + }, + nil, + nil, + ) +} + +// State returns a Query that can be used in gNMI operations. +// +// Defining module: "openconfig-if-aggregate" +// Instantiating module: "openconfig-if-aggregate" +// Path from parent: "state/lag-type" +// Path from root: "/interfaces/interface/aggregation/state/lag-type" +func (n *Interface_Aggregation_LagTypePathAny) State() ygnmi.WildcardQuery[E_IfAggregate_AggregationType] { + return ygnmi.NewWildcardQuery[E_IfAggregate_AggregationType]( + "Interface_Aggregation", + true, + true, + true, + false, + true, + false, + ygnmi.NewNodePath( + []string{"state", "lag-type"}, + nil, + n.parent, + ), + func(gs ygot.ValidatedGoStruct) (E_IfAggregate_AggregationType, bool) { + ret := gs.(*Interface_Aggregation).LagType + return ret, !reflect.ValueOf(ret).IsZero() + }, + func() ygot.ValidatedGoStruct { return new(Interface_Aggregation) }, + func() *ytypes.Schema { + return &ytypes.Schema{ + Root: &Device{}, + SchemaTree: SchemaTree, + Unmarshal: Unmarshal, + } + }, + nil, + nil, + ) +} + +// Config returns a Query that can be used in gNMI operations. +// +// Defining module: "openconfig-if-aggregate" +// Instantiating module: "openconfig-if-aggregate" +// Path from parent: "config/lag-type" +// Path from root: "/interfaces/interface/aggregation/config/lag-type" +func (n *Interface_Aggregation_LagTypePath) Config() ygnmi.ConfigQuery[E_IfAggregate_AggregationType] { + return ygnmi.NewConfigQuery[E_IfAggregate_AggregationType]( + "Interface_Aggregation", + false, + false, + true, + false, + true, + false, + ygnmi.NewNodePath( + []string{"config", "lag-type"}, + nil, + n.parent, + ), + func(gs ygot.ValidatedGoStruct) (E_IfAggregate_AggregationType, bool) { + ret := gs.(*Interface_Aggregation).LagType + return ret, !reflect.ValueOf(ret).IsZero() + }, + func() ygot.ValidatedGoStruct { return new(Interface_Aggregation) }, + func() *ytypes.Schema { + return &ytypes.Schema{ + Root: &Device{}, + SchemaTree: SchemaTree, + Unmarshal: Unmarshal, + } + }, + nil, + nil, + ) +} + +// Config returns a Query that can be used in gNMI operations. +// +// Defining module: "openconfig-if-aggregate" +// Instantiating module: "openconfig-if-aggregate" +// Path from parent: "config/lag-type" +// Path from root: "/interfaces/interface/aggregation/config/lag-type" +func (n *Interface_Aggregation_LagTypePathAny) Config() ygnmi.WildcardQuery[E_IfAggregate_AggregationType] { + return ygnmi.NewWildcardQuery[E_IfAggregate_AggregationType]( + "Interface_Aggregation", + false, + false, + true, + false, + true, + false, + ygnmi.NewNodePath( + []string{"config", "lag-type"}, + nil, + n.parent, + ), + func(gs ygot.ValidatedGoStruct) (E_IfAggregate_AggregationType, bool) { + ret := gs.(*Interface_Aggregation).LagType + return ret, !reflect.ValueOf(ret).IsZero() + }, + func() ygot.ValidatedGoStruct { return new(Interface_Aggregation) }, + func() *ytypes.Schema { + return &ytypes.Schema{ + Root: &Device{}, + SchemaTree: SchemaTree, + Unmarshal: Unmarshal, + } + }, + nil, + nil, + ) +} + +// Interface_Aggregation_MemberPath represents the /openconfig-interfaces/interfaces/interface/aggregation/state/member YANG schema element. +type Interface_Aggregation_MemberPath struct { + *ygnmi.NodePath + parent ygnmi.PathStruct +} + +// Interface_Aggregation_MemberPathAny represents the wildcard version of the /openconfig-interfaces/interfaces/interface/aggregation/state/member YANG schema element. +type Interface_Aggregation_MemberPathAny struct { + *ygnmi.NodePath + parent ygnmi.PathStruct +} + +// State returns a Query that can be used in gNMI operations. +// +// Defining module: "openconfig-if-aggregate" +// Instantiating module: "openconfig-if-aggregate" +// Path from parent: "state/member" +// Path from root: "/interfaces/interface/aggregation/state/member" +func (n *Interface_Aggregation_MemberPath) State() ygnmi.SingletonQuery[[]string] { + return ygnmi.NewSingletonQuery[[]string]( + "Interface_Aggregation", + true, + true, + true, + false, + true, + false, + ygnmi.NewNodePath( + []string{"state", "member"}, + nil, + n.parent, + ), + func(gs ygot.ValidatedGoStruct) ([]string, bool) { + ret := gs.(*Interface_Aggregation).Member + return ret, !reflect.ValueOf(ret).IsZero() + }, + func() ygot.ValidatedGoStruct { return new(Interface_Aggregation) }, + func() *ytypes.Schema { + return &ytypes.Schema{ + Root: &Device{}, + SchemaTree: SchemaTree, + Unmarshal: Unmarshal, + } + }, + nil, + nil, + ) +} + +// State returns a Query that can be used in gNMI operations. +// +// Defining module: "openconfig-if-aggregate" +// Instantiating module: "openconfig-if-aggregate" +// Path from parent: "state/member" +// Path from root: "/interfaces/interface/aggregation/state/member" +func (n *Interface_Aggregation_MemberPathAny) State() ygnmi.WildcardQuery[[]string] { + return ygnmi.NewWildcardQuery[[]string]( + "Interface_Aggregation", + true, + true, + true, + false, + true, + false, + ygnmi.NewNodePath( + []string{"state", "member"}, + nil, + n.parent, + ), + func(gs ygot.ValidatedGoStruct) ([]string, bool) { + ret := gs.(*Interface_Aggregation).Member + return ret, !reflect.ValueOf(ret).IsZero() + }, + func() ygot.ValidatedGoStruct { return new(Interface_Aggregation) }, + func() *ytypes.Schema { + return &ytypes.Schema{ + Root: &Device{}, + SchemaTree: SchemaTree, + Unmarshal: Unmarshal, + } + }, + nil, + nil, + ) +} + +// Interface_Aggregation_MinLinksPath represents the /openconfig-interfaces/interfaces/interface/aggregation/config/min-links YANG schema element. +type Interface_Aggregation_MinLinksPath struct { + *ygnmi.NodePath + parent ygnmi.PathStruct +} + +// Interface_Aggregation_MinLinksPathAny represents the wildcard version of the /openconfig-interfaces/interfaces/interface/aggregation/config/min-links YANG schema element. +type Interface_Aggregation_MinLinksPathAny struct { + *ygnmi.NodePath + parent ygnmi.PathStruct +} + +// State returns a Query that can be used in gNMI operations. +// +// Defining module: "openconfig-if-aggregate" +// Instantiating module: "openconfig-if-aggregate" +// Path from parent: "state/min-links" +// Path from root: "/interfaces/interface/aggregation/state/min-links" +func (n *Interface_Aggregation_MinLinksPath) State() ygnmi.SingletonQuery[uint16] { + return ygnmi.NewSingletonQuery[uint16]( + "Interface_Aggregation", + true, + true, + true, + true, + true, + false, + ygnmi.NewNodePath( + []string{"state", "min-links"}, + nil, + n.parent, + ), + func(gs ygot.ValidatedGoStruct) (uint16, bool) { + ret := gs.(*Interface_Aggregation).MinLinks + if ret == nil { + var zero uint16 + return zero, false + } + return *ret, true + }, + func() ygot.ValidatedGoStruct { return new(Interface_Aggregation) }, + func() *ytypes.Schema { + return &ytypes.Schema{ + Root: &Device{}, + SchemaTree: SchemaTree, + Unmarshal: Unmarshal, + } + }, + nil, + nil, + ) +} + +// State returns a Query that can be used in gNMI operations. +// +// Defining module: "openconfig-if-aggregate" +// Instantiating module: "openconfig-if-aggregate" +// Path from parent: "state/min-links" +// Path from root: "/interfaces/interface/aggregation/state/min-links" +func (n *Interface_Aggregation_MinLinksPathAny) State() ygnmi.WildcardQuery[uint16] { + return ygnmi.NewWildcardQuery[uint16]( + "Interface_Aggregation", + true, + true, + true, + true, + true, + false, + ygnmi.NewNodePath( + []string{"state", "min-links"}, + nil, + n.parent, + ), + func(gs ygot.ValidatedGoStruct) (uint16, bool) { + ret := gs.(*Interface_Aggregation).MinLinks + if ret == nil { + var zero uint16 + return zero, false + } + return *ret, true + }, + func() ygot.ValidatedGoStruct { return new(Interface_Aggregation) }, + func() *ytypes.Schema { + return &ytypes.Schema{ + Root: &Device{}, + SchemaTree: SchemaTree, + Unmarshal: Unmarshal, + } + }, + nil, + nil, + ) +} + +// Config returns a Query that can be used in gNMI operations. +// +// Defining module: "openconfig-if-aggregate" +// Instantiating module: "openconfig-if-aggregate" +// Path from parent: "config/min-links" +// Path from root: "/interfaces/interface/aggregation/config/min-links" +func (n *Interface_Aggregation_MinLinksPath) Config() ygnmi.ConfigQuery[uint16] { + return ygnmi.NewConfigQuery[uint16]( + "Interface_Aggregation", + false, + false, + true, + true, + true, + false, + ygnmi.NewNodePath( + []string{"config", "min-links"}, + nil, + n.parent, + ), + func(gs ygot.ValidatedGoStruct) (uint16, bool) { + ret := gs.(*Interface_Aggregation).MinLinks + if ret == nil { + var zero uint16 + return zero, false + } + return *ret, true + }, + func() ygot.ValidatedGoStruct { return new(Interface_Aggregation) }, + func() *ytypes.Schema { + return &ytypes.Schema{ + Root: &Device{}, + SchemaTree: SchemaTree, + Unmarshal: Unmarshal, + } + }, + nil, + nil, + ) +} + +// Config returns a Query that can be used in gNMI operations. +// +// Defining module: "openconfig-if-aggregate" +// Instantiating module: "openconfig-if-aggregate" +// Path from parent: "config/min-links" +// Path from root: "/interfaces/interface/aggregation/config/min-links" +func (n *Interface_Aggregation_MinLinksPathAny) Config() ygnmi.WildcardQuery[uint16] { + return ygnmi.NewWildcardQuery[uint16]( + "Interface_Aggregation", + false, + false, + true, + true, + true, + false, + ygnmi.NewNodePath( + []string{"config", "min-links"}, + nil, + n.parent, + ), + func(gs ygot.ValidatedGoStruct) (uint16, bool) { + ret := gs.(*Interface_Aggregation).MinLinks + if ret == nil { + var zero uint16 + return zero, false + } + return *ret, true + }, + func() ygot.ValidatedGoStruct { return new(Interface_Aggregation) }, + func() *ytypes.Schema { + return &ytypes.Schema{ + Root: &Device{}, + SchemaTree: SchemaTree, + Unmarshal: Unmarshal, + } + }, + nil, + nil, + ) +} + +// Interface_AggregationPath represents the /openconfig-interfaces/interfaces/interface/aggregation YANG schema element. +type Interface_AggregationPath struct { + *ygnmi.NodePath +} + +// Interface_AggregationPathAny represents the wildcard version of the /openconfig-interfaces/interfaces/interface/aggregation YANG schema element. +type Interface_AggregationPathAny struct { + *ygnmi.NodePath +} + +// LagSpeed (leaf): Reports the effective speed of the aggregate interface, calculated +// as the sum of the speeds of member interfaces that are +// active (operationally up), forwarding-viable and selected by the +// aggregation protocol (e.g., LACP) for active traffic distribution +// +// Defining module: "openconfig-if-aggregate" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "state/lag-speed" +// Path from root: "/interfaces/interface/aggregation/state/lag-speed" +func (n *Interface_AggregationPath) LagSpeed() *Interface_Aggregation_LagSpeedPath { + ps := &Interface_Aggregation_LagSpeedPath{ + NodePath: ygnmi.NewNodePath( + []string{"state", "lag-speed"}, + map[string]interface{}{}, + n, + ), + parent: n, + } + return ps +} + +// LagSpeed (leaf): Reports the effective speed of the aggregate interface, calculated +// as the sum of the speeds of member interfaces that are +// active (operationally up), forwarding-viable and selected by the +// aggregation protocol (e.g., LACP) for active traffic distribution +// +// Defining module: "openconfig-if-aggregate" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "state/lag-speed" +// Path from root: "/interfaces/interface/aggregation/state/lag-speed" +func (n *Interface_AggregationPathAny) LagSpeed() *Interface_Aggregation_LagSpeedPathAny { + ps := &Interface_Aggregation_LagSpeedPathAny{ + NodePath: ygnmi.NewNodePath( + []string{"state", "lag-speed"}, + map[string]interface{}{}, + n, + ), + parent: n, + } + return ps +} + +// LagType (leaf): Sets the type of LAG, i.e., how it is +// configured / maintained +// +// Defining module: "openconfig-if-aggregate" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "*/lag-type" +// Path from root: "/interfaces/interface/aggregation/*/lag-type" +func (n *Interface_AggregationPath) LagType() *Interface_Aggregation_LagTypePath { + ps := &Interface_Aggregation_LagTypePath{ + NodePath: ygnmi.NewNodePath( + []string{"*", "lag-type"}, + map[string]interface{}{}, + n, + ), + parent: n, + } + return ps +} + +// LagType (leaf): Sets the type of LAG, i.e., how it is +// configured / maintained +// +// Defining module: "openconfig-if-aggregate" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "*/lag-type" +// Path from root: "/interfaces/interface/aggregation/*/lag-type" +func (n *Interface_AggregationPathAny) LagType() *Interface_Aggregation_LagTypePathAny { + ps := &Interface_Aggregation_LagTypePathAny{ + NodePath: ygnmi.NewNodePath( + []string{"*", "lag-type"}, + map[string]interface{}{}, + n, + ), + parent: n, + } + return ps +} + +// Member (leaf-list): List of current member interfaces for the aggregate, +// expressed as references to existing interfaces +// +// Defining module: "openconfig-if-aggregate" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "state/member" +// Path from root: "/interfaces/interface/aggregation/state/member" +func (n *Interface_AggregationPath) Member() *Interface_Aggregation_MemberPath { + ps := &Interface_Aggregation_MemberPath{ + NodePath: ygnmi.NewNodePath( + []string{"state", "member"}, + map[string]interface{}{}, + n, + ), + parent: n, + } + return ps +} + +// Member (leaf-list): List of current member interfaces for the aggregate, +// expressed as references to existing interfaces +// +// Defining module: "openconfig-if-aggregate" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "state/member" +// Path from root: "/interfaces/interface/aggregation/state/member" +func (n *Interface_AggregationPathAny) Member() *Interface_Aggregation_MemberPathAny { + ps := &Interface_Aggregation_MemberPathAny{ + NodePath: ygnmi.NewNodePath( + []string{"state", "member"}, + map[string]interface{}{}, + n, + ), + parent: n, + } + return ps +} + +// MinLinks (leaf): Specifies the mininum number of member +// interfaces that must be active for the aggregate interface +// to be available +// +// Defining module: "openconfig-if-aggregate" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "*/min-links" +// Path from root: "/interfaces/interface/aggregation/*/min-links" +func (n *Interface_AggregationPath) MinLinks() *Interface_Aggregation_MinLinksPath { + ps := &Interface_Aggregation_MinLinksPath{ + NodePath: ygnmi.NewNodePath( + []string{"*", "min-links"}, + map[string]interface{}{}, + n, + ), + parent: n, + } + return ps +} + +// MinLinks (leaf): Specifies the mininum number of member +// interfaces that must be active for the aggregate interface +// to be available +// +// Defining module: "openconfig-if-aggregate" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "*/min-links" +// Path from root: "/interfaces/interface/aggregation/*/min-links" +func (n *Interface_AggregationPathAny) MinLinks() *Interface_Aggregation_MinLinksPathAny { + ps := &Interface_Aggregation_MinLinksPathAny{ + NodePath: ygnmi.NewNodePath( + []string{"*", "min-links"}, + map[string]interface{}{}, + n, + ), + parent: n, + } + return ps +} + +// SwitchedVlan (container): Enclosing container for VLAN interface-specific +// data on Ethernet interfaces. These are for standard +// L2, switched-style VLANs. +// +// Defining module: "openconfig-vlan" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "switched-vlan" +// Path from root: "/interfaces/interface/aggregation/switched-vlan" +func (n *Interface_AggregationPath) SwitchedVlan() *Interface_Aggregation_SwitchedVlanPath { + ps := &Interface_Aggregation_SwitchedVlanPath{ + NodePath: ygnmi.NewNodePath( + []string{"switched-vlan"}, + map[string]interface{}{}, + n, + ), + } + return ps +} + +// SwitchedVlan (container): Enclosing container for VLAN interface-specific +// data on Ethernet interfaces. These are for standard +// L2, switched-style VLANs. +// +// Defining module: "openconfig-vlan" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "switched-vlan" +// Path from root: "/interfaces/interface/aggregation/switched-vlan" +func (n *Interface_AggregationPathAny) SwitchedVlan() *Interface_Aggregation_SwitchedVlanPathAny { + ps := &Interface_Aggregation_SwitchedVlanPathAny{ + NodePath: ygnmi.NewNodePath( + []string{"switched-vlan"}, + map[string]interface{}{}, + n, + ), + } + return ps +} + +// State returns a Query that can be used in gNMI operations. +func (n *Interface_AggregationPath) State() ygnmi.SingletonQuery[*Interface_Aggregation] { + return ygnmi.NewSingletonQuery[*Interface_Aggregation]( + "Interface_Aggregation", + true, + true, + false, + false, + true, + false, + n, + nil, + nil, + func() *ytypes.Schema { + return &ytypes.Schema{ + Root: &Device{}, + SchemaTree: SchemaTree, + Unmarshal: Unmarshal, + } + }, + nil, + nil, + ) +} + +// State returns a Query that can be used in gNMI operations. +func (n *Interface_AggregationPathAny) State() ygnmi.WildcardQuery[*Interface_Aggregation] { + return ygnmi.NewWildcardQuery[*Interface_Aggregation]( + "Interface_Aggregation", + true, + true, + false, + false, + true, + false, + n, + nil, + nil, + func() *ytypes.Schema { + return &ytypes.Schema{ + Root: &Device{}, + SchemaTree: SchemaTree, + Unmarshal: Unmarshal, + } + }, + nil, + nil, + ) +} + +// Config returns a Query that can be used in gNMI operations. +func (n *Interface_AggregationPath) Config() ygnmi.ConfigQuery[*Interface_Aggregation] { + return ygnmi.NewConfigQuery[*Interface_Aggregation]( + "Interface_Aggregation", + false, + false, + false, + false, + true, + false, + n, + nil, + nil, + func() *ytypes.Schema { + return &ytypes.Schema{ + Root: &Device{}, + SchemaTree: SchemaTree, + Unmarshal: Unmarshal, + } + }, + nil, + nil, + ) +} + +// Config returns a Query that can be used in gNMI operations. +func (n *Interface_AggregationPathAny) Config() ygnmi.WildcardQuery[*Interface_Aggregation] { + return ygnmi.NewWildcardQuery[*Interface_Aggregation]( + "Interface_Aggregation", + false, + false, + false, + false, + true, + false, + n, + nil, + nil, + func() *ytypes.Schema { + return &ytypes.Schema{ + Root: &Device{}, + SchemaTree: SchemaTree, + Unmarshal: Unmarshal, + } + }, + nil, + nil, + ) +} + +// Interface_Aggregation_SwitchedVlan_AccessVlanPath represents the /openconfig-interfaces/interfaces/interface/aggregation/switched-vlan/config/access-vlan YANG schema element. +type Interface_Aggregation_SwitchedVlan_AccessVlanPath struct { + *ygnmi.NodePath + parent ygnmi.PathStruct +} + +// Interface_Aggregation_SwitchedVlan_AccessVlanPathAny represents the wildcard version of the /openconfig-interfaces/interfaces/interface/aggregation/switched-vlan/config/access-vlan YANG schema element. +type Interface_Aggregation_SwitchedVlan_AccessVlanPathAny struct { + *ygnmi.NodePath + parent ygnmi.PathStruct +} + +// State returns a Query that can be used in gNMI operations. +// +// Defining module: "openconfig-vlan" +// Instantiating module: "openconfig-vlan" +// Path from parent: "state/access-vlan" +// Path from root: "/interfaces/interface/aggregation/switched-vlan/state/access-vlan" +func (n *Interface_Aggregation_SwitchedVlan_AccessVlanPath) State() ygnmi.SingletonQuery[uint16] { + return ygnmi.NewSingletonQuery[uint16]( + "Interface_Aggregation_SwitchedVlan", + true, + true, + true, + true, + true, + false, + ygnmi.NewNodePath( + []string{"state", "access-vlan"}, + nil, + n.parent, + ), + func(gs ygot.ValidatedGoStruct) (uint16, bool) { + ret := gs.(*Interface_Aggregation_SwitchedVlan).AccessVlan + if ret == nil { + var zero uint16 + return zero, false + } + return *ret, true + }, + func() ygot.ValidatedGoStruct { return new(Interface_Aggregation_SwitchedVlan) }, + func() *ytypes.Schema { + return &ytypes.Schema{ + Root: &Device{}, + SchemaTree: SchemaTree, + Unmarshal: Unmarshal, + } + }, + nil, + nil, + ) +} + +// State returns a Query that can be used in gNMI operations. +// +// Defining module: "openconfig-vlan" +// Instantiating module: "openconfig-vlan" +// Path from parent: "state/access-vlan" +// Path from root: "/interfaces/interface/aggregation/switched-vlan/state/access-vlan" +func (n *Interface_Aggregation_SwitchedVlan_AccessVlanPathAny) State() ygnmi.WildcardQuery[uint16] { + return ygnmi.NewWildcardQuery[uint16]( + "Interface_Aggregation_SwitchedVlan", + true, + true, + true, + true, + true, + false, + ygnmi.NewNodePath( + []string{"state", "access-vlan"}, + nil, + n.parent, + ), + func(gs ygot.ValidatedGoStruct) (uint16, bool) { + ret := gs.(*Interface_Aggregation_SwitchedVlan).AccessVlan + if ret == nil { + var zero uint16 + return zero, false + } + return *ret, true + }, + func() ygot.ValidatedGoStruct { return new(Interface_Aggregation_SwitchedVlan) }, + func() *ytypes.Schema { + return &ytypes.Schema{ + Root: &Device{}, + SchemaTree: SchemaTree, + Unmarshal: Unmarshal, + } + }, + nil, + nil, + ) +} + +// Config returns a Query that can be used in gNMI operations. +// +// Defining module: "openconfig-vlan" +// Instantiating module: "openconfig-vlan" +// Path from parent: "config/access-vlan" +// Path from root: "/interfaces/interface/aggregation/switched-vlan/config/access-vlan" +func (n *Interface_Aggregation_SwitchedVlan_AccessVlanPath) Config() ygnmi.ConfigQuery[uint16] { + return ygnmi.NewConfigQuery[uint16]( + "Interface_Aggregation_SwitchedVlan", + false, + false, + true, + true, + true, + false, + ygnmi.NewNodePath( + []string{"config", "access-vlan"}, + nil, + n.parent, + ), + func(gs ygot.ValidatedGoStruct) (uint16, bool) { + ret := gs.(*Interface_Aggregation_SwitchedVlan).AccessVlan + if ret == nil { + var zero uint16 + return zero, false + } + return *ret, true + }, + func() ygot.ValidatedGoStruct { return new(Interface_Aggregation_SwitchedVlan) }, + func() *ytypes.Schema { + return &ytypes.Schema{ + Root: &Device{}, + SchemaTree: SchemaTree, + Unmarshal: Unmarshal, + } + }, + nil, + nil, + ) +} + +// Config returns a Query that can be used in gNMI operations. +// +// Defining module: "openconfig-vlan" +// Instantiating module: "openconfig-vlan" +// Path from parent: "config/access-vlan" +// Path from root: "/interfaces/interface/aggregation/switched-vlan/config/access-vlan" +func (n *Interface_Aggregation_SwitchedVlan_AccessVlanPathAny) Config() ygnmi.WildcardQuery[uint16] { + return ygnmi.NewWildcardQuery[uint16]( + "Interface_Aggregation_SwitchedVlan", + false, + false, + true, + true, + true, + false, + ygnmi.NewNodePath( + []string{"config", "access-vlan"}, + nil, + n.parent, + ), + func(gs ygot.ValidatedGoStruct) (uint16, bool) { + ret := gs.(*Interface_Aggregation_SwitchedVlan).AccessVlan + if ret == nil { + var zero uint16 + return zero, false + } + return *ret, true + }, + func() ygot.ValidatedGoStruct { return new(Interface_Aggregation_SwitchedVlan) }, + func() *ytypes.Schema { + return &ytypes.Schema{ + Root: &Device{}, + SchemaTree: SchemaTree, + Unmarshal: Unmarshal, + } + }, + nil, + nil, + ) +} + +// Interface_Aggregation_SwitchedVlan_InterfaceModePath represents the /openconfig-interfaces/interfaces/interface/aggregation/switched-vlan/config/interface-mode YANG schema element. +type Interface_Aggregation_SwitchedVlan_InterfaceModePath struct { + *ygnmi.NodePath + parent ygnmi.PathStruct +} + +// Interface_Aggregation_SwitchedVlan_InterfaceModePathAny represents the wildcard version of the /openconfig-interfaces/interfaces/interface/aggregation/switched-vlan/config/interface-mode YANG schema element. +type Interface_Aggregation_SwitchedVlan_InterfaceModePathAny struct { + *ygnmi.NodePath + parent ygnmi.PathStruct +} + +// State returns a Query that can be used in gNMI operations. +// +// Defining module: "openconfig-vlan" +// Instantiating module: "openconfig-vlan" +// Path from parent: "state/interface-mode" +// Path from root: "/interfaces/interface/aggregation/switched-vlan/state/interface-mode" +func (n *Interface_Aggregation_SwitchedVlan_InterfaceModePath) State() ygnmi.SingletonQuery[E_VlanTypes_VlanModeType] { + return ygnmi.NewSingletonQuery[E_VlanTypes_VlanModeType]( + "Interface_Aggregation_SwitchedVlan", + true, + true, + true, + false, + true, + false, + ygnmi.NewNodePath( + []string{"state", "interface-mode"}, + nil, + n.parent, + ), + func(gs ygot.ValidatedGoStruct) (E_VlanTypes_VlanModeType, bool) { + ret := gs.(*Interface_Aggregation_SwitchedVlan).InterfaceMode + return ret, !reflect.ValueOf(ret).IsZero() + }, + func() ygot.ValidatedGoStruct { return new(Interface_Aggregation_SwitchedVlan) }, + func() *ytypes.Schema { + return &ytypes.Schema{ + Root: &Device{}, + SchemaTree: SchemaTree, + Unmarshal: Unmarshal, + } + }, + nil, + nil, + ) +} + +// State returns a Query that can be used in gNMI operations. +// +// Defining module: "openconfig-vlan" +// Instantiating module: "openconfig-vlan" +// Path from parent: "state/interface-mode" +// Path from root: "/interfaces/interface/aggregation/switched-vlan/state/interface-mode" +func (n *Interface_Aggregation_SwitchedVlan_InterfaceModePathAny) State() ygnmi.WildcardQuery[E_VlanTypes_VlanModeType] { + return ygnmi.NewWildcardQuery[E_VlanTypes_VlanModeType]( + "Interface_Aggregation_SwitchedVlan", + true, + true, + true, + false, + true, + false, + ygnmi.NewNodePath( + []string{"state", "interface-mode"}, + nil, + n.parent, + ), + func(gs ygot.ValidatedGoStruct) (E_VlanTypes_VlanModeType, bool) { + ret := gs.(*Interface_Aggregation_SwitchedVlan).InterfaceMode + return ret, !reflect.ValueOf(ret).IsZero() + }, + func() ygot.ValidatedGoStruct { return new(Interface_Aggregation_SwitchedVlan) }, + func() *ytypes.Schema { + return &ytypes.Schema{ + Root: &Device{}, + SchemaTree: SchemaTree, + Unmarshal: Unmarshal, + } + }, + nil, + nil, + ) +} + +// Config returns a Query that can be used in gNMI operations. +// +// Defining module: "openconfig-vlan" +// Instantiating module: "openconfig-vlan" +// Path from parent: "config/interface-mode" +// Path from root: "/interfaces/interface/aggregation/switched-vlan/config/interface-mode" +func (n *Interface_Aggregation_SwitchedVlan_InterfaceModePath) Config() ygnmi.ConfigQuery[E_VlanTypes_VlanModeType] { + return ygnmi.NewConfigQuery[E_VlanTypes_VlanModeType]( + "Interface_Aggregation_SwitchedVlan", + false, + false, + true, + false, + true, + false, + ygnmi.NewNodePath( + []string{"config", "interface-mode"}, + nil, + n.parent, + ), + func(gs ygot.ValidatedGoStruct) (E_VlanTypes_VlanModeType, bool) { + ret := gs.(*Interface_Aggregation_SwitchedVlan).InterfaceMode + return ret, !reflect.ValueOf(ret).IsZero() + }, + func() ygot.ValidatedGoStruct { return new(Interface_Aggregation_SwitchedVlan) }, + func() *ytypes.Schema { + return &ytypes.Schema{ + Root: &Device{}, + SchemaTree: SchemaTree, + Unmarshal: Unmarshal, + } + }, + nil, + nil, + ) +} + +// Config returns a Query that can be used in gNMI operations. +// +// Defining module: "openconfig-vlan" +// Instantiating module: "openconfig-vlan" +// Path from parent: "config/interface-mode" +// Path from root: "/interfaces/interface/aggregation/switched-vlan/config/interface-mode" +func (n *Interface_Aggregation_SwitchedVlan_InterfaceModePathAny) Config() ygnmi.WildcardQuery[E_VlanTypes_VlanModeType] { + return ygnmi.NewWildcardQuery[E_VlanTypes_VlanModeType]( + "Interface_Aggregation_SwitchedVlan", + false, + false, + true, + false, + true, + false, + ygnmi.NewNodePath( + []string{"config", "interface-mode"}, + nil, + n.parent, + ), + func(gs ygot.ValidatedGoStruct) (E_VlanTypes_VlanModeType, bool) { + ret := gs.(*Interface_Aggregation_SwitchedVlan).InterfaceMode + return ret, !reflect.ValueOf(ret).IsZero() + }, + func() ygot.ValidatedGoStruct { return new(Interface_Aggregation_SwitchedVlan) }, + func() *ytypes.Schema { + return &ytypes.Schema{ + Root: &Device{}, + SchemaTree: SchemaTree, + Unmarshal: Unmarshal, + } + }, + nil, + nil, + ) +} + +// Interface_Aggregation_SwitchedVlan_NativeVlanPath represents the /openconfig-interfaces/interfaces/interface/aggregation/switched-vlan/config/native-vlan YANG schema element. +type Interface_Aggregation_SwitchedVlan_NativeVlanPath struct { + *ygnmi.NodePath + parent ygnmi.PathStruct +} + +// Interface_Aggregation_SwitchedVlan_NativeVlanPathAny represents the wildcard version of the /openconfig-interfaces/interfaces/interface/aggregation/switched-vlan/config/native-vlan YANG schema element. +type Interface_Aggregation_SwitchedVlan_NativeVlanPathAny struct { + *ygnmi.NodePath + parent ygnmi.PathStruct +} + +// State returns a Query that can be used in gNMI operations. +// +// Defining module: "openconfig-vlan" +// Instantiating module: "openconfig-vlan" +// Path from parent: "state/native-vlan" +// Path from root: "/interfaces/interface/aggregation/switched-vlan/state/native-vlan" +func (n *Interface_Aggregation_SwitchedVlan_NativeVlanPath) State() ygnmi.SingletonQuery[uint16] { + return ygnmi.NewSingletonQuery[uint16]( + "Interface_Aggregation_SwitchedVlan", + true, + true, + true, + true, + true, + false, + ygnmi.NewNodePath( + []string{"state", "native-vlan"}, + nil, + n.parent, + ), + func(gs ygot.ValidatedGoStruct) (uint16, bool) { + ret := gs.(*Interface_Aggregation_SwitchedVlan).NativeVlan + if ret == nil { + var zero uint16 + return zero, false + } + return *ret, true + }, + func() ygot.ValidatedGoStruct { return new(Interface_Aggregation_SwitchedVlan) }, + func() *ytypes.Schema { + return &ytypes.Schema{ + Root: &Device{}, + SchemaTree: SchemaTree, + Unmarshal: Unmarshal, + } + }, + nil, + nil, + ) +} + +// State returns a Query that can be used in gNMI operations. +// +// Defining module: "openconfig-vlan" +// Instantiating module: "openconfig-vlan" +// Path from parent: "state/native-vlan" +// Path from root: "/interfaces/interface/aggregation/switched-vlan/state/native-vlan" +func (n *Interface_Aggregation_SwitchedVlan_NativeVlanPathAny) State() ygnmi.WildcardQuery[uint16] { + return ygnmi.NewWildcardQuery[uint16]( + "Interface_Aggregation_SwitchedVlan", + true, + true, + true, + true, + true, + false, + ygnmi.NewNodePath( + []string{"state", "native-vlan"}, + nil, + n.parent, + ), + func(gs ygot.ValidatedGoStruct) (uint16, bool) { + ret := gs.(*Interface_Aggregation_SwitchedVlan).NativeVlan + if ret == nil { + var zero uint16 + return zero, false + } + return *ret, true + }, + func() ygot.ValidatedGoStruct { return new(Interface_Aggregation_SwitchedVlan) }, + func() *ytypes.Schema { + return &ytypes.Schema{ + Root: &Device{}, + SchemaTree: SchemaTree, + Unmarshal: Unmarshal, + } + }, + nil, + nil, + ) +} + +// Config returns a Query that can be used in gNMI operations. +// +// Defining module: "openconfig-vlan" +// Instantiating module: "openconfig-vlan" +// Path from parent: "config/native-vlan" +// Path from root: "/interfaces/interface/aggregation/switched-vlan/config/native-vlan" +func (n *Interface_Aggregation_SwitchedVlan_NativeVlanPath) Config() ygnmi.ConfigQuery[uint16] { + return ygnmi.NewConfigQuery[uint16]( + "Interface_Aggregation_SwitchedVlan", + false, + false, + true, + true, + true, + false, + ygnmi.NewNodePath( + []string{"config", "native-vlan"}, + nil, + n.parent, + ), + func(gs ygot.ValidatedGoStruct) (uint16, bool) { + ret := gs.(*Interface_Aggregation_SwitchedVlan).NativeVlan + if ret == nil { + var zero uint16 + return zero, false + } + return *ret, true + }, + func() ygot.ValidatedGoStruct { return new(Interface_Aggregation_SwitchedVlan) }, + func() *ytypes.Schema { + return &ytypes.Schema{ + Root: &Device{}, + SchemaTree: SchemaTree, + Unmarshal: Unmarshal, + } + }, + nil, + nil, + ) +} + +// Config returns a Query that can be used in gNMI operations. +// +// Defining module: "openconfig-vlan" +// Instantiating module: "openconfig-vlan" +// Path from parent: "config/native-vlan" +// Path from root: "/interfaces/interface/aggregation/switched-vlan/config/native-vlan" +func (n *Interface_Aggregation_SwitchedVlan_NativeVlanPathAny) Config() ygnmi.WildcardQuery[uint16] { + return ygnmi.NewWildcardQuery[uint16]( + "Interface_Aggregation_SwitchedVlan", + false, + false, + true, + true, + true, + false, + ygnmi.NewNodePath( + []string{"config", "native-vlan"}, + nil, + n.parent, + ), + func(gs ygot.ValidatedGoStruct) (uint16, bool) { + ret := gs.(*Interface_Aggregation_SwitchedVlan).NativeVlan + if ret == nil { + var zero uint16 + return zero, false + } + return *ret, true + }, + func() ygot.ValidatedGoStruct { return new(Interface_Aggregation_SwitchedVlan) }, + func() *ytypes.Schema { + return &ytypes.Schema{ + Root: &Device{}, + SchemaTree: SchemaTree, + Unmarshal: Unmarshal, + } + }, + nil, + nil, + ) +} + +// Interface_Aggregation_SwitchedVlan_TrunkVlansPath represents the /openconfig-interfaces/interfaces/interface/aggregation/switched-vlan/config/trunk-vlans YANG schema element. +type Interface_Aggregation_SwitchedVlan_TrunkVlansPath struct { + *ygnmi.NodePath + parent ygnmi.PathStruct +} + +// Interface_Aggregation_SwitchedVlan_TrunkVlansPathAny represents the wildcard version of the /openconfig-interfaces/interfaces/interface/aggregation/switched-vlan/config/trunk-vlans YANG schema element. +type Interface_Aggregation_SwitchedVlan_TrunkVlansPathAny struct { + *ygnmi.NodePath + parent ygnmi.PathStruct +} + +// State returns a Query that can be used in gNMI operations. +// +// Defining module: "openconfig-vlan" +// Instantiating module: "openconfig-vlan" +// Path from parent: "state/trunk-vlans" +// Path from root: "/interfaces/interface/aggregation/switched-vlan/state/trunk-vlans" +func (n *Interface_Aggregation_SwitchedVlan_TrunkVlansPath) State() ygnmi.SingletonQuery[[]Interface_Aggregation_SwitchedVlan_TrunkVlans_Union] { + return ygnmi.NewSingletonQuery[[]Interface_Aggregation_SwitchedVlan_TrunkVlans_Union]( + "Interface_Aggregation_SwitchedVlan", + true, + true, + true, + false, + true, + false, + ygnmi.NewNodePath( + []string{"state", "trunk-vlans"}, + nil, + n.parent, + ), + func(gs ygot.ValidatedGoStruct) ([]Interface_Aggregation_SwitchedVlan_TrunkVlans_Union, bool) { + ret := gs.(*Interface_Aggregation_SwitchedVlan).TrunkVlans + return ret, !reflect.ValueOf(ret).IsZero() + }, + func() ygot.ValidatedGoStruct { return new(Interface_Aggregation_SwitchedVlan) }, + func() *ytypes.Schema { + return &ytypes.Schema{ + Root: &Device{}, + SchemaTree: SchemaTree, + Unmarshal: Unmarshal, + } + }, + nil, + nil, + ) +} + +// State returns a Query that can be used in gNMI operations. +// +// Defining module: "openconfig-vlan" +// Instantiating module: "openconfig-vlan" +// Path from parent: "state/trunk-vlans" +// Path from root: "/interfaces/interface/aggregation/switched-vlan/state/trunk-vlans" +func (n *Interface_Aggregation_SwitchedVlan_TrunkVlansPathAny) State() ygnmi.WildcardQuery[[]Interface_Aggregation_SwitchedVlan_TrunkVlans_Union] { + return ygnmi.NewWildcardQuery[[]Interface_Aggregation_SwitchedVlan_TrunkVlans_Union]( + "Interface_Aggregation_SwitchedVlan", + true, + true, + true, + false, + true, + false, + ygnmi.NewNodePath( + []string{"state", "trunk-vlans"}, + nil, + n.parent, + ), + func(gs ygot.ValidatedGoStruct) ([]Interface_Aggregation_SwitchedVlan_TrunkVlans_Union, bool) { + ret := gs.(*Interface_Aggregation_SwitchedVlan).TrunkVlans + return ret, !reflect.ValueOf(ret).IsZero() + }, + func() ygot.ValidatedGoStruct { return new(Interface_Aggregation_SwitchedVlan) }, + func() *ytypes.Schema { + return &ytypes.Schema{ + Root: &Device{}, + SchemaTree: SchemaTree, + Unmarshal: Unmarshal, + } + }, + nil, + nil, + ) +} + +// Config returns a Query that can be used in gNMI operations. +// +// Defining module: "openconfig-vlan" +// Instantiating module: "openconfig-vlan" +// Path from parent: "config/trunk-vlans" +// Path from root: "/interfaces/interface/aggregation/switched-vlan/config/trunk-vlans" +func (n *Interface_Aggregation_SwitchedVlan_TrunkVlansPath) Config() ygnmi.ConfigQuery[[]Interface_Aggregation_SwitchedVlan_TrunkVlans_Union] { + return ygnmi.NewConfigQuery[[]Interface_Aggregation_SwitchedVlan_TrunkVlans_Union]( + "Interface_Aggregation_SwitchedVlan", + false, + false, + true, + false, + true, + false, + ygnmi.NewNodePath( + []string{"config", "trunk-vlans"}, + nil, + n.parent, + ), + func(gs ygot.ValidatedGoStruct) ([]Interface_Aggregation_SwitchedVlan_TrunkVlans_Union, bool) { + ret := gs.(*Interface_Aggregation_SwitchedVlan).TrunkVlans + return ret, !reflect.ValueOf(ret).IsZero() + }, + func() ygot.ValidatedGoStruct { return new(Interface_Aggregation_SwitchedVlan) }, + func() *ytypes.Schema { + return &ytypes.Schema{ + Root: &Device{}, + SchemaTree: SchemaTree, + Unmarshal: Unmarshal, + } + }, + nil, + nil, + ) +} + +// Config returns a Query that can be used in gNMI operations. +// +// Defining module: "openconfig-vlan" +// Instantiating module: "openconfig-vlan" +// Path from parent: "config/trunk-vlans" +// Path from root: "/interfaces/interface/aggregation/switched-vlan/config/trunk-vlans" +func (n *Interface_Aggregation_SwitchedVlan_TrunkVlansPathAny) Config() ygnmi.WildcardQuery[[]Interface_Aggregation_SwitchedVlan_TrunkVlans_Union] { + return ygnmi.NewWildcardQuery[[]Interface_Aggregation_SwitchedVlan_TrunkVlans_Union]( + "Interface_Aggregation_SwitchedVlan", + false, + false, + true, + false, + true, + false, + ygnmi.NewNodePath( + []string{"config", "trunk-vlans"}, + nil, + n.parent, + ), + func(gs ygot.ValidatedGoStruct) ([]Interface_Aggregation_SwitchedVlan_TrunkVlans_Union, bool) { + ret := gs.(*Interface_Aggregation_SwitchedVlan).TrunkVlans + return ret, !reflect.ValueOf(ret).IsZero() + }, + func() ygot.ValidatedGoStruct { return new(Interface_Aggregation_SwitchedVlan) }, + func() *ytypes.Schema { + return &ytypes.Schema{ + Root: &Device{}, + SchemaTree: SchemaTree, + Unmarshal: Unmarshal, + } + }, + nil, + nil, + ) +} + +// Interface_Aggregation_SwitchedVlanPath represents the /openconfig-interfaces/interfaces/interface/aggregation/switched-vlan YANG schema element. +type Interface_Aggregation_SwitchedVlanPath struct { + *ygnmi.NodePath +} + +// Interface_Aggregation_SwitchedVlanPathAny represents the wildcard version of the /openconfig-interfaces/interfaces/interface/aggregation/switched-vlan YANG schema element. +type Interface_Aggregation_SwitchedVlanPathAny struct { + *ygnmi.NodePath +} + +// AccessVlan (leaf): Assign the access vlan to the access port. +// +// Defining module: "openconfig-vlan" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "*/access-vlan" +// Path from root: "/interfaces/interface/aggregation/switched-vlan/*/access-vlan" +func (n *Interface_Aggregation_SwitchedVlanPath) AccessVlan() *Interface_Aggregation_SwitchedVlan_AccessVlanPath { + ps := &Interface_Aggregation_SwitchedVlan_AccessVlanPath{ + NodePath: ygnmi.NewNodePath( + []string{"*", "access-vlan"}, + map[string]interface{}{}, + n, + ), + parent: n, + } + return ps +} + +// AccessVlan (leaf): Assign the access vlan to the access port. +// +// Defining module: "openconfig-vlan" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "*/access-vlan" +// Path from root: "/interfaces/interface/aggregation/switched-vlan/*/access-vlan" +func (n *Interface_Aggregation_SwitchedVlanPathAny) AccessVlan() *Interface_Aggregation_SwitchedVlan_AccessVlanPathAny { + ps := &Interface_Aggregation_SwitchedVlan_AccessVlanPathAny{ + NodePath: ygnmi.NewNodePath( + []string{"*", "access-vlan"}, + map[string]interface{}{}, + n, + ), + parent: n, + } + return ps +} + +// InterfaceMode (leaf): Set the interface to access or trunk mode for +// VLANs +// +// Defining module: "openconfig-vlan" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "*/interface-mode" +// Path from root: "/interfaces/interface/aggregation/switched-vlan/*/interface-mode" +func (n *Interface_Aggregation_SwitchedVlanPath) InterfaceMode() *Interface_Aggregation_SwitchedVlan_InterfaceModePath { + ps := &Interface_Aggregation_SwitchedVlan_InterfaceModePath{ + NodePath: ygnmi.NewNodePath( + []string{"*", "interface-mode"}, + map[string]interface{}{}, + n, + ), + parent: n, + } + return ps +} + +// InterfaceMode (leaf): Set the interface to access or trunk mode for +// VLANs +// +// Defining module: "openconfig-vlan" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "*/interface-mode" +// Path from root: "/interfaces/interface/aggregation/switched-vlan/*/interface-mode" +func (n *Interface_Aggregation_SwitchedVlanPathAny) InterfaceMode() *Interface_Aggregation_SwitchedVlan_InterfaceModePathAny { + ps := &Interface_Aggregation_SwitchedVlan_InterfaceModePathAny{ + NodePath: ygnmi.NewNodePath( + []string{"*", "interface-mode"}, + map[string]interface{}{}, + n, + ), + parent: n, + } + return ps +} + +// NativeVlan (leaf): Set the native VLAN id for untagged frames arriving on +// a trunk interface. Tagged frames sent on an interface +// configured with a native VLAN should have their tags +// stripped prior to transmission. This configuration is only +// valid on a trunk interface. +// +// Defining module: "openconfig-vlan" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "*/native-vlan" +// Path from root: "/interfaces/interface/aggregation/switched-vlan/*/native-vlan" +func (n *Interface_Aggregation_SwitchedVlanPath) NativeVlan() *Interface_Aggregation_SwitchedVlan_NativeVlanPath { + ps := &Interface_Aggregation_SwitchedVlan_NativeVlanPath{ + NodePath: ygnmi.NewNodePath( + []string{"*", "native-vlan"}, + map[string]interface{}{}, + n, + ), + parent: n, + } + return ps +} + +// NativeVlan (leaf): Set the native VLAN id for untagged frames arriving on +// a trunk interface. Tagged frames sent on an interface +// configured with a native VLAN should have their tags +// stripped prior to transmission. This configuration is only +// valid on a trunk interface. +// +// Defining module: "openconfig-vlan" +// Instantiating module: "openconfig-interfaces" +// Path from parent: "*/native-vlan" +// Path from root: "/interfaces/interface/aggregation/switched-vlan/*/native-vlan" +func (n *Interface_Aggregation_SwitchedVlanPathAny) NativeVlan() *Interface_Aggregation_SwitchedVlan_NativeVlanPathAny { + ps := &Interface_Aggregation_SwitchedVlan_NativeVlanPathAny{ + NodePath: ygnmi.NewNodePath( + []string{"*", "native-vlan"}, + map[string]interface{}{}, + n, + ), + parent: n, + } + return ps +} + +// TrunkVlans (leaf-list): Specify VLANs, or ranges thereof, that the interface may +// carry when in trunk mode. If not specified, all VLANs are +// allowed on the interface. Ranges are specified in the form +// x..y, where x= 10 && addr[:10] == "unnumbered": + sourceIface := addr[11:] // Extract the source interface name + i.GetOrCreateSubinterface(uint32(idx)).GetOrCreateIpv4().GetOrCreateUnnumbered().GetOrCreateInterfaceRef().SetInterface(sourceIface) + default: + var ip netip.Prefix + if ip, err = netip.ParsePrefix(addr); err != nil { + return fmt.Errorf("failed to parse IPv4 address %q: %w", addr, err) + } + i.GetOrCreateSubinterface(uint32(idx)).GetOrCreateIpv4().GetOrCreateAddress(ip.Addr().String()).SetPrefixLength(uint8(ip.Bits())) + } + } + if iface.Spec.Switchport != nil { + i.Tpid = VlanTypes_TPID_TYPES_TPID_0X8100 + port := i.GetOrCreateEthernet().GetOrCreateSwitchedVlan() + switch iface.Spec.Switchport.Mode { + case v1alpha1.SwitchportModeAccess: + port.InterfaceMode = VlanTypes_VlanModeType_ACCESS + port.AccessVlan = ygot.Uint16(uint16(iface.Spec.Switchport.AccessVlan)) + case v1alpha1.SwitchportModeTrunk: + port.InterfaceMode = VlanTypes_VlanModeType_TRUNK + port.NativeVlan = ygot.Uint16(uint16(iface.Spec.Switchport.NativeVlan)) + for _, vlan := range iface.Spec.Switchport.AllowedVlans { + var union Interface_Ethernet_SwitchedVlan_TrunkVlans_Union + if union, err = port.To_Interface_Ethernet_SwitchedVlan_TrunkVlans_Union(vlan); err != nil { + return fmt.Errorf("failed to convert vlan %d to union type: %w", vlan, err) + } + port.TrunkVlans = append(port.TrunkVlans, union) + } + default: + return fmt.Errorf("invalid switchport mode: %s", iface.Spec.Switchport.Mode) + } + } + + log := ctrl.LoggerFrom(ctx) + b, err := ygot.Marshal7951(i) + if err != nil { + return fmt.Errorf("failed to marshal interface: %w", err) + } + log.V(1).Info("Marshalled interface", "interface", string(b)) + + _, err = ygnmi.Update(ctx, client, Root().Interface(iface.Spec.Name).Config(), i, ygnmi.WithEncoding(gpb.Encoding_JSON), ygnmi.WithAppendModuleName(false)) + return err +} + +func (p *Provider) DeleteInterface(ctx context.Context, iface *v1alpha1.Interface) error { + // Only for testing purposes, this should be replaced with a real API client. + client, conn, err := NewClient(ctx, "host.docker.internal:9339", "admin", "admin") + if err != nil { + return fmt.Errorf("failed to create gnmi client: %w", err) + } + defer conn.Close() + + switch iface.Spec.Type { + case v1alpha1.InterfaceTypePhysical: + // For physical interfaces, we can't delete the interface directly. + // Instead, we reset the configuration and set the admin state down. + sb := new(ygnmi.SetBatch) + ygnmi.BatchUpdate(sb, Root().Interface(iface.Spec.Name).Enabled().Config(), false) + ygnmi.BatchDelete(sb, Root().Interface(iface.Spec.Name).Description().Config()) + ygnmi.BatchDelete(sb, Root().Interface(iface.Spec.Name).SubinterfaceMap().Config()) + ygnmi.BatchDelete(sb, Root().Interface(iface.Spec.Name).Ethernet().Config()) + ygnmi.BatchDelete(sb, Root().Interface(iface.Spec.Name).Ethernet().SwitchedVlan().Config()) + _, err = sb.Set(ctx, client, ygnmi.WithEncoding(gpb.Encoding_JSON), ygnmi.WithAppendModuleName(true)) + return err + case v1alpha1.InterfaceTypeLoopback: + _, err = ygnmi.Delete(ctx, client, Root().Interface(iface.Spec.Name).Config()) + return err + } + + return fmt.Errorf("unsupported interface type: %s", iface.Spec.Type) +} + +func init() { + provider.Register("openconfig", &Provider{}) +} diff --git a/internal/provider/openconfig/schema.go b/internal/provider/openconfig/schema.go new file mode 100644 index 00000000..401b5176 --- /dev/null +++ b/internal/provider/openconfig/schema.go @@ -0,0 +1,3919 @@ +// SPDX-FileCopyrightText: 2025 SAP SE or an SAP affiliate company and IronCore contributors +// SPDX-License-Identifier: Apache-2.0 + +/* +Package openconfig is a generated package which contains definitions +of structs which represent a YANG schema. The generated schema can be +compressed by a series of transformations (compression was true +in this case). + +This package was generated by ygnmi version: v0.12.0: (ygot: v0.29.20) +using the following YANG input files: + - ./yang/release/models/interfaces/openconfig-interfaces.yang + - ./yang/release/models/interfaces/openconfig-if-ip.yang + - ./yang/third_party/ietf/iana-if-type.yang + +Imported modules were sourced from: + - ./yang/doc + - ./yang/regexp-tests + - ./yang/release/models + - ./yang/release/models/acl + - ./yang/release/models/aft + - ./yang/release/models/ate + - ./yang/release/models/bfd + - ./yang/release/models/bgp + - ./yang/release/models/catalog + - ./yang/release/models/defined-sets + - ./yang/release/models/devices-manifest + - ./yang/release/models/ethernet-segments + - ./yang/release/models/extensions + - ./yang/release/models/firewall + - ./yang/release/models/flex-algo + - ./yang/release/models/gnpsi + - ./yang/release/models/gnsi + - ./yang/release/models/gribi + - ./yang/release/models/grpc + - ./yang/release/models/interfaces + - ./yang/release/models/isis + - ./yang/release/models/keychain + - ./yang/release/models/lacp + - ./yang/release/models/lldp + - ./yang/release/models/local-routing + - ./yang/release/models/macsec + - ./yang/release/models/mpls + - ./yang/release/models/multicast + - ./yang/release/models/network-instance + - ./yang/release/models/oam + - ./yang/release/models/openflow + - ./yang/release/models/optical-transport + - ./yang/release/models/ospf + - ./yang/release/models/p4rt + - ./yang/release/models/pcep + - ./yang/release/models/platform + - ./yang/release/models/policy + - ./yang/release/models/policy-forwarding + - ./yang/release/models/probes + - ./yang/release/models/ptp + - ./yang/release/models/qos + - ./yang/release/models/relay-agent + - ./yang/release/models/rib + - ./yang/release/models/sampling + - ./yang/release/models/segment-routing + - ./yang/release/models/stp + - ./yang/release/models/system + - ./yang/release/models/telemetry + - ./yang/release/models/types + - ./yang/release/models/vlan + - ./yang/release/models/wifi + - ./yang/third_party/ietf +*/ +package openconfig + +var ( + // ySchema is a byte slice contain a gzip compressed representation of the + // YANG schema from which the Go code was generated. When uncompressed the + // contents of the byte slice is a JSON document containing an object, keyed + // on the name of the generated struct, and containing the JSON marshalled + // contents of a goyang yang.Entry struct, which defines the schema for the + // fields within the struct. + ySchema = []byte{ + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x6b, 0x4f, 0xe3, 0xca, + 0xd2, 0x36, 0xfc, 0x7d, 0x7e, 0x85, 0x15, 0x6d, 0x69, 0x0f, 0x8f, 0xc6, 0x43, 0x12, 0x42, 0x80, + 0x48, 0xb7, 0x1e, 0x65, 0x38, 0xac, 0x15, 0x6d, 0x4e, 0x02, 0x66, 0xf6, 0xda, 0x1a, 0xd8, 0xa8, + 0xb1, 0x3b, 0xc1, 0xcf, 0x38, 0xb6, 0x6f, 0xbb, 0xc3, 0xc0, 0x3b, 0xc3, 0x7f, 0x7f, 0x65, 0xe7, + 0x40, 0x20, 0xc9, 0x22, 0xee, 0x93, 0xdd, 0xc9, 0xc5, 0x87, 0xb5, 0x20, 0x13, 0xb7, 0xfb, 0x58, + 0x75, 0x5d, 0x55, 0xd5, 0x55, 0xbf, 0x3e, 0x58, 0x96, 0x65, 0x55, 0x4e, 0x49, 0x9f, 0x56, 0x5a, + 0x56, 0xc5, 0xa5, 0x0f, 0x9e, 0x43, 0x2b, 0x9f, 0x86, 0x9f, 0xfe, 0xcb, 0x0b, 0xdc, 0x4a, 0xcb, + 0xaa, 0x8d, 0xfe, 0xdc, 0x0f, 0x83, 0xae, 0xd7, 0xab, 0xb4, 0xac, 0xea, 0xe8, 0x83, 0x03, 0x2f, + 0xae, 0xb4, 0xac, 0x61, 0x13, 0xd9, 0x07, 0x5e, 0xc0, 0x68, 0xdc, 0x25, 0x0e, 0x4d, 0x5e, 0x7d, + 0xfe, 0xea, 0x15, 0x53, 0xdf, 0xf9, 0xf4, 0xfa, 0x1b, 0xaf, 0x5f, 0x37, 0xf9, 0xf8, 0xed, 0x6b, + 0x27, 0xff, 0x70, 0x1e, 0xd3, 0xae, 0xf7, 0x38, 0xf3, 0xa6, 0x57, 0x6f, 0x0b, 0x1d, 0xdb, 0xeb, + 0xbe, 0x79, 0x51, 0xf6, 0x85, 0xcb, 0x70, 0x10, 0x3b, 0x74, 0xee, 0xc3, 0xc3, 0xce, 0xd0, 0xa7, + 0x9f, 0x61, 0x9c, 0xf6, 0xa7, 0x12, 0x0d, 0xdf, 0xf3, 0x69, 0xfe, 0x17, 0xff, 0x24, 0x49, 0x3b, + 0xee, 0x0d, 0xfa, 0x34, 0x60, 0x95, 0x96, 0xc5, 0xe2, 0x01, 0x5d, 0xf0, 0xc5, 0xa9, 0x6f, 0x8d, + 0xba, 0x35, 0xf3, 0xbd, 0xe7, 0x57, 0x9f, 0x3c, 0xbf, 0x19, 0xef, 0xdb, 0xe9, 0x9e, 0x9d, 0xf6, + 0xc5, 0xc3, 0x99, 0x99, 0xfd, 0x45, 0xc3, 0x99, 0xbf, 0x08, 0xef, 0x2e, 0xc6, 0x32, 0x8b, 0xb2, + 0xf4, 0xe2, 0x2c, 0xbb, 0x48, 0xb9, 0x17, 0x2b, 0xf7, 0xa2, 0xe5, 0x59, 0xbc, 0xf9, 0x8b, 0xb8, + 0x60, 0x31, 0xdf, 0x5d, 0xd4, 0xc9, 0x17, 0x48, 0xaf, 0x17, 0xd3, 0x1e, 0x61, 0x5e, 0x18, 0xbc, + 0x3f, 0x11, 0xe3, 0x99, 0x9d, 0x7e, 0xe8, 0x9d, 0x91, 0xfd, 0xfd, 0x82, 0x2f, 0xbd, 0xf0, 0x79, + 0x36, 0xc0, 0xbc, 0x8d, 0xe0, 0x93, 0xde, 0x3b, 0x3d, 0xcd, 0xb3, 0x23, 0xb8, 0x77, 0x06, 0xf7, + 0x0e, 0x59, 0xb4, 0x53, 0xd2, 0x71, 0xbd, 0xfb, 0xe0, 0xf3, 0xdf, 0x7e, 0xe3, 0xf9, 0x9d, 0x19, + 0x7f, 0x6f, 0x0b, 0x4d, 0xbe, 0xe8, 0x8c, 0xd7, 0x70, 0xc9, 0xc9, 0x1b, 0x2f, 0xcf, 0xe8, 0xb9, + 0x25, 0x27, 0x60, 0xb9, 0x0d, 0x95, 0x7b, 0x63, 0xf1, 0x6c, 0x30, 0xfe, 0x8d, 0xc6, 0xbb, 0xe1, + 0x84, 0x37, 0x9e, 0xf0, 0x06, 0x14, 0xda, 0x88, 0xcb, 0x6d, 0xc8, 0x25, 0x37, 0x66, 0xee, 0x0d, + 0x3a, 0x79, 0xc0, 0x27, 0x3d, 0x9b, 0x3d, 0x45, 0x1c, 0xd3, 0x3e, 0x5e, 0xe8, 0x49, 0x0b, 0x39, + 0x27, 0x6d, 0xb4, 0x79, 0xab, 0x39, 0x1f, 0xcb, 0xbb, 0x89, 0x45, 0x36, 0xb3, 0xf8, 0xa6, 0x16, + 0xdd, 0xdc, 0xd2, 0x36, 0xb9, 0xb4, 0xcd, 0x2e, 0x65, 0xd3, 0xe7, 0xdb, 0xfc, 0x39, 0x0f, 0xc1, + 0xa4, 0x87, 0x57, 0x3c, 0xfb, 0x7a, 0x91, 0x72, 0xe7, 0xd9, 0xe3, 0xaf, 0x84, 0x74, 0x83, 0xe3, + 0xd9, 0xc3, 0x60, 0xd0, 0xe7, 0xdf, 0x33, 0x57, 0xe1, 0x25, 0x8b, 0xbd, 0xa0, 0xc7, 0xdd, 0x42, + 0xd6, 0x4a, 0x35, 0x9d, 0x88, 0xe3, 0xf6, 0xfe, 0x39, 0xe7, 0x8e, 0xcb, 0x1a, 0xa9, 0xa5, 0x8d, + 0x5c, 0x5e, 0xb5, 0xaf, 0x3a, 0xfb, 0x15, 0xae, 0x56, 0x9e, 0x3f, 0xf1, 0xce, 0x41, 0x27, 0xdb, + 0xa2, 0x02, 0x13, 0x90, 0x8d, 0x3d, 0xb7, 0xbc, 0x79, 0x7d, 0xfa, 0x87, 0x23, 0x6f, 0x59, 0x35, + 0xbe, 0xc1, 0x97, 0xec, 0x60, 0xb5, 0x83, 0x20, 0x64, 0xcb, 0xe1, 0xe4, 0xb9, 0xcf, 0x3f, 0xf5, + 0x42, 0x66, 0x87, 0x8e, 0xed, 0x84, 0xfd, 0x28, 0xa6, 0x49, 0x42, 0x5d, 0xdb, 0xa7, 0xa4, 0x9b, + 0x36, 0x96, 0xb3, 0xe3, 0x1f, 0x14, 0x0c, 0xb1, 0xd2, 0xf7, 0x02, 0xdb, 0xf7, 0x82, 0x1f, 0x09, + 0xbf, 0x52, 0x7c, 0x69, 0x02, 0x5a, 0x11, 0x5a, 0x71, 0xc5, 0xb4, 0xe2, 0xc0, 0x0b, 0x58, 0xad, + 0x29, 0xa0, 0x0b, 0x9b, 0x1c, 0x8f, 0x5e, 0x90, 0xa0, 0x97, 0xbe, 0xfd, 0x3b, 0xd7, 0xba, 0x08, + 0x88, 0xff, 0x13, 0x2f, 0x10, 0xd2, 0x1f, 0x59, 0x23, 0xdf, 0x88, 0x3f, 0xa0, 0x62, 0x4a, 0x24, + 0x6b, 0xe7, 0x28, 0x26, 0x4e, 0x2a, 0x77, 0x0f, 0xbc, 0x9e, 0xc7, 0x12, 0x09, 0x0d, 0x9e, 0x66, + 0xf0, 0xe6, 0x21, 0xed, 0x5b, 0x97, 0xf8, 0x09, 0xe5, 0x6e, 0xed, 0x59, 0x40, 0x3d, 0x9e, 0x90, + 0x47, 0x79, 0x53, 0xdc, 0xdc, 0xde, 0xde, 0xda, 0x5e, 0xdd, 0x69, 0xd6, 0x04, 0x20, 0x6e, 0x00, + 0x20, 0x54, 0xf2, 0x74, 0xce, 0x09, 0xa8, 0x24, 0xce, 0x3d, 0xed, 0x93, 0x88, 0xb0, 0xfb, 0x54, + 0x10, 0x6f, 0x86, 0x11, 0x0d, 0x86, 0x26, 0x23, 0xfb, 0xc5, 0xd8, 0xbf, 0x39, 0xef, 0xd7, 0xcd, + 0x29, 0x2a, 0xb3, 0x39, 0xb2, 0x32, 0x7d, 0x90, 0x33, 0xee, 0x25, 0xc6, 0x5c, 0x49, 0x18, 0x61, + 0x34, 0xbf, 0x39, 0x6c, 0xf8, 0x98, 0x62, 0x6b, 0x58, 0x1d, 0xd6, 0x30, 0x58, 0xc3, 0x5e, 0xac, + 0x61, 0x49, 0x44, 0xa9, 0x2b, 0x66, 0x0e, 0x1b, 0x36, 0x01, 0xe4, 0x0f, 0xe4, 0xbf, 0x82, 0xc8, + 0x7f, 0xab, 0x2e, 0x80, 0xfc, 0x77, 0x80, 0xfc, 0x81, 0xfc, 0x55, 0x21, 0xff, 0x46, 0x7d, 0xaf, + 0xb1, 0xd7, 0xdc, 0xa9, 0xef, 0x01, 0xfe, 0x6b, 0x86, 0xff, 0x4a, 0xcc, 0x70, 0x70, 0x4d, 0x41, + 0x15, 0x43, 0x15, 0x2f, 0x5a, 0x6f, 0xb8, 0xa6, 0xe0, 0x9a, 0x5a, 0x07, 0xd7, 0x94, 0x1a, 0x0f, + 0x0f, 0xed, 0xdf, 0xd1, 0x58, 0xc0, 0xbd, 0x33, 0x7c, 0x1e, 0x6a, 0x05, 0x6a, 0x65, 0xc5, 0xd4, + 0xca, 0x1d, 0x49, 0xe8, 0x8b, 0x2d, 0xd1, 0x8e, 0x69, 0x57, 0x44, 0xb1, 0xf0, 0xd0, 0xbd, 0xf3, + 0x89, 0x71, 0xd3, 0xb1, 0xbd, 0x6e, 0x6b, 0xca, 0x98, 0xf9, 0xe6, 0x83, 0xd1, 0xdf, 0x41, 0xda, + 0x73, 0xa5, 0xb3, 0x7a, 0xec, 0x25, 0xac, 0xcd, 0x58, 0xcc, 0x37, 0xb3, 0x27, 0x5e, 0x70, 0xe8, + 0xd3, 0x74, 0xdf, 0x70, 0x32, 0x89, 0x94, 0x24, 0x4d, 0xb5, 0x50, 0xdb, 0x6d, 0x34, 0x9a, 0x3b, + 0x8d, 0x46, 0x75, 0x67, 0x6b, 0xa7, 0xba, 0xb7, 0xbd, 0x5d, 0x6b, 0xd6, 0x38, 0xf8, 0x4e, 0xe5, + 0x2c, 0x76, 0x69, 0x4c, 0xdd, 0x2f, 0x4f, 0x95, 0x96, 0x15, 0x0c, 0x7c, 0x5f, 0xa4, 0x89, 0xaf, + 0x49, 0x26, 0x4c, 0xf3, 0x53, 0x9b, 0xbc, 0x2b, 0x41, 0x1f, 0x59, 0x4c, 0xec, 0x41, 0x90, 0x30, + 0x72, 0xe7, 0x73, 0xee, 0xf4, 0x9f, 0xf7, 0x34, 0x28, 0xc2, 0x9a, 0x30, 0x3e, 0x61, 0x9f, 0x3f, + 0x6f, 0x7e, 0xfe, 0x3c, 0x32, 0xc1, 0x6f, 0x8e, 0x19, 0x8a, 0xf5, 0x3f, 0xd6, 0x3f, 0x87, 0x9a, + 0xf8, 0x9f, 0x22, 0x58, 0x46, 0x50, 0xe6, 0xce, 0x93, 0xbd, 0xd9, 0x74, 0x09, 0xd2, 0x5f, 0x59, + 0x12, 0x78, 0xae, 0x24, 0x7e, 0x77, 0x3e, 0x0b, 0x31, 0x6c, 0x1c, 0xd0, 0xc4, 0x89, 0xbd, 0x88, + 0xdb, 0xc5, 0x35, 0x77, 0xeb, 0x5c, 0xdd, 0x53, 0x2b, 0xf1, 0xfa, 0x91, 0x4f, 0x2d, 0xdf, 0x4b, + 0x98, 0x15, 0x76, 0xad, 0x21, 0x12, 0xb1, 0x5e, 0xa4, 0xa4, 0xe5, 0x25, 0x16, 0x71, 0x98, 0xf7, + 0x40, 0xaf, 0x83, 0x74, 0xed, 0x2c, 0x76, 0x4f, 0xad, 0x31, 0x59, 0xa0, 0xe9, 0xbf, 0x26, 0x8c, + 0x30, 0xcf, 0x21, 0xbe, 0xff, 0x64, 0x0d, 0x67, 0x6d, 0x10, 0xe7, 0xb6, 0x56, 0xab, 0xda, 0x79, + 0x6f, 0x77, 0x9f, 0x3b, 0x35, 0x8d, 0x9f, 0xc4, 0x5b, 0x96, 0xbd, 0x11, 0x67, 0x36, 0xa3, 0xca, + 0x15, 0x12, 0xea, 0xe9, 0x33, 0x4c, 0x4e, 0xcb, 0xf0, 0x02, 0x44, 0x7e, 0x81, 0x1d, 0x80, 0x1d, + 0x2c, 0x5c, 0x6f, 0x44, 0x7e, 0xe5, 0x6e, 0x04, 0xfe, 0x9f, 0x77, 0xa8, 0x0d, 0x22, 0xbf, 0xd6, + 0x44, 0x0f, 0xaf, 0x50, 0x00, 0xd5, 0x30, 0x2e, 0x49, 0x67, 0xfc, 0xd4, 0x4f, 0x8f, 0x39, 0xf7, + 0xd4, 0xb5, 0x1f, 0x7c, 0x12, 0x70, 0xc4, 0x51, 0xbd, 0x7a, 0x7c, 0x35, 0x6e, 0x17, 0xe6, 0x18, + 0x8a, 0xb5, 0x52, 0x01, 0x55, 0xd9, 0xc0, 0x4d, 0x89, 0xa8, 0xca, 0x79, 0x11, 0x76, 0x66, 0xa1, + 0x73, 0x5d, 0x88, 0xe5, 0xdc, 0xba, 0xa5, 0xc1, 0xd2, 0x39, 0xb7, 0xf4, 0xfa, 0x80, 0xe9, 0x7c, + 0x5b, 0x5e, 0x0f, 0x9a, 0xce, 0x7b, 0x14, 0x26, 0x0f, 0x12, 0xc7, 0xa1, 0x49, 0x92, 0x4f, 0x92, + 0x2f, 0xdc, 0x35, 0xd3, 0x8d, 0x71, 0xce, 0x35, 0x1f, 0xf1, 0x14, 0x3e, 0x34, 0x32, 0x0e, 0x8f, + 0xc4, 0x43, 0xa4, 0xd2, 0x86, 0x2a, 0x74, 0xa8, 0xf4, 0x58, 0x51, 0xb9, 0x0f, 0x99, 0x20, 0x3c, + 0xe5, 0xf5, 0x9d, 0xf3, 0x52, 0xd9, 0x99, 0x1d, 0x93, 0x8e, 0xda, 0xf6, 0x44, 0xec, 0x9f, 0x02, + 0xdc, 0x56, 0x12, 0xc7, 0x15, 0xe7, 0xba, 0x52, 0x39, 0xef, 0x0c, 0x31, 0xab, 0x7d, 0x92, 0xd3, + 0x9e, 0x6c, 0x72, 0x26, 0x9f, 0xa4, 0x49, 0xe0, 0xc4, 0x52, 0xb9, 0xf1, 0xcc, 0x52, 0x34, 0xaa, + 0x7b, 0x8d, 0xf5, 0x5b, 0x8d, 0x82, 0x4c, 0xe7, 0x37, 0x5a, 0x65, 0xa2, 0x04, 0xe7, 0xe8, 0xa4, + 0x2d, 0x21, 0x27, 0xa9, 0x44, 0x71, 0x34, 0xe5, 0x34, 0x7d, 0x09, 0x4a, 0xe8, 0x87, 0x6e, 0xe6, + 0xe0, 0x6b, 0xef, 0xef, 0x1f, 0x5e, 0x5e, 0xfe, 0x53, 0x86, 0x63, 0x48, 0xa2, 0xfb, 0xca, 0x92, + 0xef, 0x40, 0x55, 0x06, 0x01, 0xe6, 0x42, 0x81, 0xbf, 0x9d, 0xeb, 0x52, 0x48, 0x46, 0x99, 0xce, + 0xd5, 0x99, 0xad, 0xd6, 0xce, 0x10, 0xb5, 0xf5, 0xed, 0xb8, 0x7d, 0x6a, 0x91, 0x24, 0xf1, 0x7a, + 0x01, 0x75, 0x2d, 0x16, 0x66, 0x5e, 0xba, 0x85, 0x19, 0xf5, 0xca, 0xb2, 0xf1, 0x2c, 0xa5, 0xfe, + 0x53, 0xe5, 0xfb, 0x70, 0x66, 0x2f, 0x2e, 0xb9, 0x18, 0x52, 0x5e, 0xfe, 0x0c, 0x3d, 0xa3, 0xd2, + 0xf4, 0x3a, 0xd3, 0x8e, 0xb4, 0x4b, 0xbc, 0xfc, 0x13, 0xc8, 0x31, 0x05, 0x95, 0xd7, 0xb2, 0x51, + 0x9c, 0xc1, 0xbf, 0x69, 0x0f, 0x24, 0x1e, 0x24, 0x1e, 0x24, 0x9e, 0x87, 0xc4, 0xa7, 0xc7, 0x87, + 0xf7, 0x2a, 0xc4, 0xdb, 0x73, 0x54, 0x13, 0x20, 0x49, 0x62, 0x57, 0x23, 0x5e, 0x66, 0x47, 0xc6, + 0x15, 0x89, 0x49, 0x6b, 0xd9, 0x55, 0x89, 0x21, 0x88, 0x93, 0x81, 0x97, 0xb3, 0x4b, 0x13, 0x57, + 0x17, 0x5f, 0x4f, 0xff, 0x25, 0x18, 0x96, 0xf4, 0x49, 0x74, 0x92, 0x44, 0xef, 0x50, 0xbc, 0x1c, + 0xa4, 0xe1, 0xe4, 0x48, 0xa1, 0xb1, 0xa3, 0xa9, 0xe1, 0xbd, 0x54, 0x21, 0x8e, 0x08, 0x9e, 0x81, + 0x08, 0xf4, 0x21, 0x82, 0x20, 0xb3, 0x56, 0x48, 0x32, 0xe8, 0x4f, 0x37, 0x06, 0x2c, 0x00, 0x2c, + 0x00, 0x2c, 0xc0, 0x83, 0x05, 0x60, 0xd0, 0x1f, 0x77, 0x04, 0x06, 0x7d, 0x18, 0xf4, 0x57, 0x6f, + 0x35, 0x60, 0xd0, 0xcf, 0xd9, 0x96, 0x11, 0x06, 0xfd, 0x0c, 0x35, 0xc3, 0x9e, 0x2f, 0xa1, 0xe1, + 0x77, 0xed, 0xf9, 0xa3, 0xa9, 0x5e, 0x7d, 0x73, 0xfe, 0x69, 0x26, 0x79, 0x86, 0x16, 0x64, 0x2f, + 0xb1, 0x1e, 0x88, 0xef, 0xb9, 0x56, 0x37, 0x8c, 0xd3, 0xd9, 0x0e, 0x7e, 0x58, 0xd9, 0x7c, 0xc0, + 0xac, 0xaf, 0x76, 0x3b, 0xce, 0x6c, 0xc9, 0x9c, 0x8b, 0x02, 0xf3, 0x3e, 0xc8, 0xbc, 0x2e, 0x32, + 0x9f, 0xed, 0xc0, 0x8c, 0x3a, 0x25, 0xe2, 0x64, 0x7e, 0xba, 0x31, 0x90, 0x79, 0x90, 0x79, 0x90, + 0xf9, 0x9c, 0x3b, 0x66, 0x10, 0x88, 0xa9, 0xb8, 0x89, 0x3d, 0x7f, 0x4f, 0xa0, 0x8d, 0xd1, 0x70, + 0x4a, 0x83, 0x9d, 0xc5, 0x2d, 0x1c, 0x12, 0x2d, 0x1d, 0x92, 0x2d, 0x1e, 0xf2, 0xa6, 0x4b, 0x89, + 0x05, 0x44, 0x95, 0x25, 0x44, 0x39, 0x07, 0x57, 0xc7, 0xc5, 0x25, 0x32, 0x01, 0x25, 0x96, 0x12, + 0x85, 0x16, 0x93, 0x55, 0x58, 0xb5, 0x92, 0x60, 0xeb, 0x9b, 0x22, 0xdd, 0x88, 0xb2, 0x65, 0x73, + 0x9c, 0x89, 0x42, 0x79, 0xe2, 0xb9, 0xb6, 0x2b, 0xa1, 0xad, 0x73, 0xc2, 0x18, 0x8d, 0x03, 0x69, + 0x12, 0xba, 0xf2, 0xb1, 0x51, 0xdd, 0xfb, 0x5e, 0xb5, 0x1b, 0x37, 0xbf, 0x1b, 0xd5, 0xef, 0x55, + 0x7b, 0xf7, 0xe6, 0x7b, 0xd5, 0xde, 0xbb, 0xf9, 0xfd, 0xbd, 0x66, 0x6f, 0x0d, 0x7f, 0xfd, 0xb5, + 0xf5, 0x9c, 0xfe, 0xb5, 0x37, 0xfa, 0xab, 0xf6, 0xa9, 0x3e, 0xfa, 0x7b, 0xe3, 0xfa, 0xfa, 0xf3, + 0xf5, 0xf5, 0x67, 0x81, 0x06, 0xc4, 0x29, 0xe1, 0x8d, 0x8c, 0x29, 0x3d, 0xbb, 0xec, 0xfc, 0x25, + 0x7d, 0x5e, 0xff, 0x5b, 0xe4, 0xc4, 0xfe, 0xa3, 0x52, 0xf4, 0x51, 0x36, 0x84, 0x26, 0x0b, 0x25, + 0x05, 0x9b, 0xc6, 0x26, 0x62, 0xc9, 0xc1, 0xa6, 0x55, 0xa6, 0xf4, 0x24, 0x61, 0x93, 0xc6, 0xc5, + 0x93, 0x85, 0xcd, 0x36, 0xc5, 0x9d, 0x34, 0x4c, 0x74, 0xe5, 0x60, 0x56, 0x2f, 0x8b, 0x59, 0x13, + 0x66, 0x75, 0x85, 0x60, 0x5a, 0x71, 0x94, 0xbc, 0xef, 0x87, 0x3f, 0xa9, 0x9b, 0x99, 0x70, 0x13, + 0xab, 0x4f, 0x9e, 0xac, 0x3b, 0x6a, 0x25, 0x11, 0x75, 0xbc, 0xae, 0x47, 0xdf, 0xda, 0x72, 0xaf, + 0x83, 0x17, 0x63, 0xee, 0x67, 0x98, 0xd8, 0xf5, 0x44, 0xce, 0xf3, 0x2f, 0x10, 0xcc, 0xed, 0x1a, + 0xb5, 0xd1, 0x2a, 0x99, 0xdb, 0x4b, 0x5d, 0x33, 0x4c, 0x52, 0xe6, 0x97, 0xe9, 0x4c, 0x2a, 0xb9, + 0x0a, 0x69, 0xe5, 0x9f, 0xa5, 0x3c, 0x99, 0xeb, 0xf2, 0x15, 0xd8, 0x9a, 0x11, 0xe7, 0x79, 0x0a, + 0x6d, 0xcd, 0xb0, 0x53, 0xde, 0x2c, 0x1b, 0x75, 0x64, 0xd9, 0x28, 0x54, 0x87, 0x20, 0xcb, 0xc6, + 0xb2, 0xbb, 0x06, 0x59, 0x36, 0x2c, 0xf8, 0xf1, 0x24, 0x80, 0x32, 0x04, 0xe5, 0x22, 0x28, 0x17, + 0x41, 0xb9, 0x08, 0xca, 0x5d, 0xcd, 0xd5, 0x40, 0x50, 0xee, 0x2a, 0x5a, 0x0f, 0x91, 0x65, 0x03, + 0x59, 0x36, 0x90, 0x65, 0x63, 0xb5, 0x6d, 0x85, 0xc8, 0xb2, 0xa1, 0x4e, 0xcf, 0x20, 0x29, 0x05, + 0x38, 0x2f, 0x38, 0x2f, 0x92, 0x52, 0x20, 0x29, 0xc5, 0x4c, 0x6b, 0x48, 0x4a, 0xf1, 0xee, 0x41, + 0x42, 0x52, 0x0a, 0xe4, 0x70, 0x80, 0xea, 0x84, 0xea, 0x5c, 0x43, 0xd5, 0x09, 0x73, 0xf1, 0xc4, + 0x46, 0x09, 0x73, 0x31, 0xcc, 0xc5, 0x2b, 0xb7, 0x1a, 0x30, 0x17, 0xe7, 0x6c, 0x0b, 0xc1, 0xa6, + 0xb2, 0x74, 0x3f, 0x82, 0x4d, 0x65, 0xcb, 0x45, 0xe4, 0x70, 0xc8, 0xbb, 0x07, 0x91, 0xc3, 0x41, + 0xb7, 0xce, 0xb0, 0x60, 0x3c, 0x9e, 0xbb, 0xaa, 0x48, 0x79, 0x00, 0xee, 0x0b, 0xee, 0x5b, 0x16, + 0xee, 0x8b, 0x94, 0x07, 0x4a, 0x0c, 0x02, 0x12, 0x0d, 0x03, 0x92, 0x0d, 0x04, 0xf2, 0xa6, 0x4b, + 0x89, 0xc1, 0x40, 0x95, 0xe1, 0x40, 0x39, 0x65, 0x55, 0x47, 0x5d, 0x25, 0x02, 0x67, 0x25, 0x86, + 0x05, 0x85, 0x06, 0x86, 0x55, 0x58, 0x35, 0xa4, 0x3c, 0x40, 0xca, 0x03, 0xbe, 0x06, 0x91, 0xf2, + 0x00, 0x29, 0x0f, 0x14, 0x1c, 0x65, 0xa4, 0x3c, 0xe0, 0x55, 0x99, 0x48, 0x79, 0xb0, 0x54, 0x0f, + 0x60, 0x85, 0x2e, 0x8b, 0x15, 0x10, 0x56, 0x68, 0x85, 0x60, 0x1a, 0x29, 0x0f, 0x84, 0xf6, 0x23, + 0x52, 0x1e, 0x14, 0x4d, 0x09, 0x56, 0xde, 0x3a, 0xbd, 0x76, 0x19, 0x02, 0x86, 0x17, 0xeb, 0x55, + 0x25, 0x08, 0xf8, 0x20, 0x71, 0x1a, 0x79, 0xa7, 0x4f, 0xc5, 0xb4, 0x55, 0x72, 0x65, 0x3e, 0x88, + 0x07, 0x0e, 0x0b, 0x46, 0x42, 0xba, 0x33, 0x6e, 0xfc, 0xb6, 0xfd, 0xd2, 0xf8, 0xed, 0xe5, 0xa8, + 0xf1, 0x6f, 0x4b, 0x5b, 0x94, 0xdf, 0x9f, 0xda, 0xbf, 0xff, 0xc6, 0x3b, 0x93, 0x5e, 0x69, 0x0f, + 0x7a, 0xa9, 0xd8, 0xa2, 0xee, 0x52, 0x50, 0x6a, 0xb9, 0xd5, 0x98, 0x68, 0xaa, 0xcd, 0xd0, 0xb1, + 0xbd, 0x6e, 0x6b, 0x6a, 0xce, 0xdf, 0x7c, 0x90, 0xfe, 0xed, 0x93, 0x5e, 0x6b, 0x6a, 0x01, 0x96, + 0x9c, 0xf2, 0x37, 0x2a, 0xb6, 0xd2, 0x76, 0xdd, 0xd1, 0xc5, 0x91, 0x84, 0x32, 0xe6, 0x05, 0xbd, + 0xc4, 0x62, 0xa1, 0x45, 0xac, 0xe3, 0xf6, 0x1f, 0x2f, 0xde, 0xbf, 0x65, 0xdb, 0xce, 0x97, 0x50, + 0x22, 0xb7, 0xa3, 0x87, 0xc7, 0xb1, 0x23, 0xe0, 0xc8, 0xe1, 0x55, 0xd7, 0xc2, 0x8e, 0x1a, 0x61, + 0x8d, 0x2b, 0xe6, 0x88, 0x91, 0x2b, 0x95, 0xf2, 0x26, 0x80, 0xa8, 0xbc, 0x16, 0x24, 0xfc, 0x19, + 0x51, 0x38, 0xe5, 0xd1, 0xbc, 0x43, 0x72, 0x18, 0x38, 0x7e, 0x98, 0x78, 0x41, 0xcf, 0x72, 0xc2, + 0x80, 0x11, 0x2f, 0xa0, 0x71, 0x86, 0x46, 0x86, 0xbe, 0xf3, 0x09, 0xa2, 0x1e, 0x41, 0x15, 0xe7, + 0x3a, 0x70, 0x09, 0x23, 0x56, 0x18, 0x58, 0x87, 0xec, 0x9e, 0xc6, 0x01, 0x65, 0x53, 0x8e, 0xf4, + 0xcf, 0x96, 0x75, 0x75, 0x4f, 0x13, 0x6a, 0x91, 0x98, 0x66, 0x8d, 0x24, 0x8c, 0x04, 0x2e, 0x89, + 0xdd, 0xeb, 0xe0, 0xb8, 0xfe, 0xc9, 0x9a, 0x74, 0x3b, 0x61, 0x4f, 0xfe, 0xd0, 0x3b, 0x9f, 0x1b, + 0x7f, 0x0a, 0x27, 0x76, 0xa9, 0x22, 0xb1, 0x4b, 0xa1, 0x48, 0xb9, 0x90, 0xc4, 0x2e, 0xb2, 0xe5, + 0x83, 0xa0, 0x02, 0x7e, 0xc7, 0xd8, 0xc9, 0x63, 0x12, 0xc9, 0x67, 0xfa, 0xe0, 0xd3, 0x31, 0x5e, + 0xb7, 0x35, 0x04, 0x4f, 0x23, 0x95, 0xcd, 0x9e, 0xa2, 0x8c, 0x65, 0x7b, 0x24, 0x20, 0x5e, 0x97, + 0xb5, 0x3c, 0x4a, 0xe9, 0x6e, 0xb5, 0xbe, 0x45, 0xdc, 0x63, 0xd2, 0xfb, 0xa7, 0x66, 0x6d, 0xc4, + 0x61, 0xb0, 0x90, 0xae, 0x8b, 0x72, 0x4e, 0x90, 0x92, 0x64, 0x5b, 0x22, 0x66, 0x86, 0xa9, 0x9c, + 0x42, 0x59, 0xfc, 0x54, 0x3a, 0xa7, 0xaf, 0x2f, 0xda, 0x5a, 0x5e, 0x92, 0x82, 0xa9, 0xec, 0x02, + 0x6e, 0x3a, 0xb8, 0xe3, 0xf6, 0x1f, 0x79, 0x27, 0x5d, 0x40, 0xa2, 0xc9, 0x33, 0x08, 0x48, 0x11, + 0x67, 0xaf, 0x96, 0x3f, 0xd7, 0x94, 0x95, 0x5c, 0x7a, 0xdd, 0x88, 0xd1, 0x87, 0x7c, 0x5c, 0x4d, + 0x0e, 0x47, 0x5b, 0x62, 0x0f, 0x2c, 0xc3, 0xc6, 0xfe, 0x7e, 0x65, 0x16, 0xcf, 0xdc, 0xdf, 0xcc, + 0x49, 0xc5, 0x19, 0x43, 0x8f, 0xbf, 0x9f, 0x8b, 0xc9, 0xe1, 0x1b, 0x7d, 0xff, 0x9d, 0x59, 0x5e, + 0x0e, 0x07, 0x2d, 0x8d, 0x7b, 0xf2, 0xe0, 0x9c, 0xd7, 0x3a, 0x61, 0x99, 0x99, 0xcf, 0x79, 0xe6, + 0xb9, 0x51, 0x0b, 0xf7, 0xb1, 0x9e, 0x95, 0xe4, 0x15, 0xc5, 0x24, 0x7b, 0x59, 0xee, 0xf0, 0x4a, + 0xd0, 0xb5, 0xf2, 0xb2, 0xed, 0xfc, 0x52, 0x32, 0x67, 0x84, 0xa3, 0x76, 0xa2, 0xbb, 0xd4, 0x86, + 0x5b, 0x3d, 0x9a, 0xbb, 0xcc, 0x86, 0x54, 0x43, 0x72, 0x73, 0x47, 0x0f, 0x4e, 0x25, 0xee, 0xcc, + 0xae, 0x63, 0xe7, 0x58, 0xae, 0x49, 0x80, 0x85, 0xd4, 0x11, 0x08, 0x78, 0x18, 0x2b, 0x31, 0xed, + 0xd2, 0x98, 0x06, 0x4e, 0xfe, 0x50, 0x3a, 0x01, 0xbe, 0x78, 0x71, 0xb4, 0x6f, 0xd5, 0x77, 0x9b, + 0x5b, 0xad, 0x94, 0x4e, 0x5b, 0x13, 0x45, 0x95, 0x58, 0x7f, 0xc4, 0xe1, 0x20, 0xb2, 0x4e, 0x3a, + 0x5f, 0x2c, 0xdb, 0xf2, 0xba, 0x6d, 0xdf, 0x23, 0x49, 0xc1, 0xa4, 0xf2, 0x65, 0x7e, 0xca, 0xc4, + 0x2b, 0x73, 0x4d, 0x60, 0x69, 0xc8, 0xe7, 0x4d, 0x29, 0x4c, 0xe6, 0xc2, 0xc9, 0x9a, 0x97, 0x60, + 0xc7, 0x4b, 0x40, 0x06, 0x1a, 0xa4, 0x87, 0xd5, 0xcd, 0xaf, 0xf2, 0xc6, 0x0f, 0x2e, 0x6d, 0x33, + 0xee, 0x92, 0x81, 0xcf, 0x72, 0x1d, 0xef, 0x4a, 0xba, 0x4d, 0x97, 0xdb, 0x37, 0x37, 0xd0, 0xba, + 0xd0, 0xba, 0x5a, 0xb5, 0xee, 0x5d, 0x18, 0xfa, 0x34, 0x9f, 0x33, 0x60, 0xac, 0x76, 0x6b, 0x50, + 0xbb, 0xcb, 0x68, 0x0d, 0xb7, 0xef, 0x05, 0x97, 0x8c, 0xb0, 0x01, 0x94, 0xaf, 0x88, 0xf2, 0x9d, + 0x9a, 0x46, 0xa8, 0xe0, 0x32, 0xaa, 0x60, 0x3f, 0x0c, 0xa3, 0x3b, 0xe2, 0xfc, 0xc8, 0x97, 0xb7, + 0x6d, 0x72, 0x9c, 0x5e, 0x3f, 0x0e, 0x3d, 0x08, 0x3d, 0xa8, 0x55, 0x0f, 0xbe, 0xda, 0x7e, 0x79, + 0xd3, 0x9c, 0xf1, 0xa4, 0x35, 0xe3, 0x4b, 0x63, 0x26, 0x96, 0xb6, 0x6c, 0x98, 0xa6, 0xec, 0xf4, + 0xec, 0xf4, 0x90, 0x47, 0x15, 0x65, 0x49, 0xc9, 0x8e, 0xda, 0xfb, 0x9d, 0xe3, 0xce, 0xd5, 0x7f, + 0x78, 0x1a, 0xa8, 0x67, 0x59, 0xcd, 0x0e, 0x2f, 0x4e, 0x3a, 0xa7, 0xed, 0x63, 0x9e, 0x06, 0xb6, + 0xb2, 0x38, 0x8d, 0xcb, 0xce, 0xfe, 0xed, 0xf9, 0x9f, 0xff, 0xb9, 0x3d, 0x3e, 0xdb, 0xe7, 0x6b, + 0xa6, 0xf1, 0xaa, 0x99, 0x8b, 0xc3, 0x93, 0xb3, 0x2b, 0xae, 0x09, 0xd9, 0x9e, 0xb4, 0x73, 0xd2, + 0xde, 0xe7, 0xef, 0x4e, 0xf3, 0x55, 0x33, 0xa3, 0xee, 0x28, 0x0d, 0x2f, 0xe3, 0x4f, 0xeb, 0xf6, + 0x76, 0xb8, 0x2d, 0x6b, 0xfb, 0x93, 0x40, 0x23, 0xa3, 0xc1, 0x72, 0xdd, 0x61, 0x7c, 0xbb, 0x11, + 0x5a, 0xd6, 0x96, 0x48, 0x23, 0x93, 0xae, 0x70, 0x5c, 0x2f, 0x7b, 0x39, 0x15, 0x5c, 0x77, 0x0a, + 0x87, 0x27, 0x92, 0xeb, 0x06, 0xc1, 0xcb, 0x71, 0x6a, 0x59, 0xf5, 0x12, 0x14, 0xef, 0x79, 0xe1, + 0xc7, 0x79, 0xc5, 0x4c, 0xaa, 0x85, 0x5e, 0x9e, 0x4e, 0x95, 0x10, 0xc0, 0xd5, 0x4b, 0x37, 0xfa, + 0x6c, 0x90, 0x1f, 0x52, 0xa5, 0x0f, 0x01, 0x48, 0x01, 0x48, 0x69, 0x05, 0x52, 0x03, 0x2f, 0x60, + 0xb5, 0x26, 0x07, 0x78, 0xca, 0xa1, 0x02, 0x38, 0xaf, 0xab, 0x73, 0xa8, 0x3b, 0x91, 0xeb, 0xe7, + 0x93, 0x3b, 0xcb, 0xbc, 0xd9, 0x3b, 0x64, 0x5d, 0x4c, 0x16, 0xbf, 0x80, 0xcc, 0x93, 0x8b, 0x45, + 0xe4, 0x1a, 0xf8, 0x64, 0xea, 0x9a, 0xdb, 0xdb, 0x5b, 0xdb, 0xe6, 0x4f, 0x1f, 0xec, 0x0f, 0xea, + 0x55, 0xe4, 0x28, 0x52, 0x23, 0xa7, 0x8e, 0xcc, 0x9e, 0x82, 0x92, 0x84, 0x92, 0xd4, 0xaa, 0x24, + 0xcb, 0xe2, 0xeb, 0x36, 0xfc, 0xc8, 0xb3, 0xc8, 0xe3, 0x70, 0xf9, 0x65, 0x4f, 0xa9, 0xf4, 0xf7, + 0x8d, 0xe2, 0x94, 0x33, 0x2b, 0x52, 0xd2, 0xba, 0x3a, 0xef, 0x1c, 0xdc, 0x56, 0xff, 0xda, 0xad, + 0x55, 0xab, 0x6b, 0xe5, 0x04, 0xc4, 0x1d, 0x13, 0xa3, 0x44, 0x92, 0xe7, 0xd2, 0x80, 0x79, 0xec, + 0x29, 0xa6, 0x5d, 0x1e, 0xb9, 0x94, 0x03, 0xa4, 0x55, 0x3a, 0xa3, 0x57, 0x7d, 0x21, 0x89, 0x40, + 0xa1, 0xdf, 0xec, 0x5c, 0x5d, 0xfd, 0xe7, 0xfc, 0x30, 0x6f, 0xc5, 0x85, 0x21, 0xb8, 0x4c, 0xb8, + 0x6e, 0xfe, 0x0b, 0xa6, 0x14, 0xcc, 0x2d, 0x0b, 0x04, 0x41, 0xb8, 0xa4, 0xee, 0xee, 0xb6, 0x77, + 0x0d, 0xea, 0xee, 0x9e, 0x59, 0xb3, 0xbb, 0x57, 0x37, 0xa8, 0xbb, 0xed, 0xd3, 0xff, 0xa8, 0x76, + 0xbf, 0xde, 0x18, 0x76, 0x69, 0xb8, 0x2c, 0x58, 0x28, 0x8f, 0xe4, 0x7f, 0xc1, 0x42, 0xcb, 0x3b, + 0xba, 0x40, 0x7f, 0x40, 0x7f, 0xde, 0x18, 0x78, 0x02, 0x97, 0xb0, 0x30, 0x7e, 0xca, 0x71, 0xd1, + 0x79, 0x8d, 0xf0, 0xc9, 0xcb, 0x6d, 0x58, 0x8e, 0xa2, 0x59, 0x05, 0x62, 0x14, 0x52, 0xab, 0x9f, + 0x44, 0xd1, 0x30, 0xcf, 0x80, 0x09, 0x7a, 0x89, 0x10, 0xbf, 0x6e, 0x48, 0x3f, 0xb7, 0x8d, 0xe8, + 0xa7, 0xc3, 0xa8, 0xef, 0x25, 0x27, 0x94, 0x91, 0xe3, 0xb3, 0xb3, 0x73, 0x23, 0xba, 0xec, 0x26, + 0xbe, 0x29, 0xfd, 0xac, 0x1b, 0xd3, 0xd1, 0xc8, 0xe7, 0x8a, 0xb5, 0xd3, 0xdf, 0xd9, 0xae, 0x4f, + 0x82, 0xec, 0xa6, 0xac, 0x51, 0xbd, 0x35, 0x43, 0x18, 0xf8, 0x83, 0xc3, 0xe3, 0x73, 0x53, 0x7a, + 0x1a, 0x85, 0x81, 0x41, 0x5d, 0x3d, 0x0e, 0x7b, 0x9e, 0x43, 0xfc, 0x63, 0x2f, 0xf8, 0x61, 0x50, + 0xaf, 0xcf, 0x82, 0x81, 0x41, 0xbd, 0x3d, 0xbf, 0x7f, 0x4a, 0xd2, 0x49, 0xfe, 0x1a, 0x78, 0x86, + 0xf4, 0xfa, 0x0f, 0xa3, 0xe6, 0xf8, 0x0f, 0x03, 0xe7, 0x38, 0x26, 0x91, 0x19, 0xfd, 0x74, 0x02, + 0xca, 0xcc, 0xe9, 0xe9, 0xb9, 0x29, 0x70, 0x21, 0x79, 0x0a, 0x1c, 0x23, 0x3a, 0xca, 0xfa, 0x86, + 0x74, 0xf3, 0xe0, 0xd1, 0x33, 0xa4, 0xa7, 0x47, 0x83, 0xc0, 0x94, 0xae, 0x76, 0xfa, 0xc4, 0x90, + 0x9e, 0x8e, 0x80, 0x8c, 0x21, 0xbd, 0xbd, 0x20, 0xae, 0x17, 0x1a, 0xd2, 0xd7, 0xcb, 0xc1, 0xdd, + 0xe4, 0x46, 0x94, 0x21, 0x5d, 0xfe, 0xe6, 0x78, 0x87, 0x81, 0x7b, 0xce, 0x4c, 0xe9, 0xae, 0x17, + 0xb3, 0x81, 0x31, 0x7b, 0xf7, 0x2e, 0x0c, 0x5c, 0x23, 0xba, 0xfa, 0xe0, 0x39, 0xde, 0x59, 0xc4, + 0x52, 0xb1, 0x90, 0x65, 0xfe, 0x33, 0xa1, 0xd3, 0x77, 0x24, 0xf1, 0x9c, 0xce, 0xe5, 0xc1, 0xa9, + 0x11, 0x9d, 0xed, 0x45, 0x51, 0xe8, 0x7b, 0xce, 0x13, 0x71, 0x9c, 0x70, 0x10, 0x30, 0x2f, 0xe8, + 0x19, 0xd1, 0x6d, 0x8f, 0x19, 0x01, 0x12, 0xef, 0x62, 0xcf, 0xed, 0x19, 0x21, 0x72, 0xef, 0x12, + 0x23, 0xc0, 0xac, 0x43, 0xee, 0x7c, 0x7a, 0x10, 0xfe, 0x0c, 0x12, 0x16, 0x53, 0xd2, 0xbf, 0xe8, + 0x9e, 0x87, 0x31, 0x33, 0xa3, 0xe3, 0xd1, 0x4f, 0x12, 0x1d, 0x84, 0xac, 0x56, 0xfb, 0x92, 0x24, + 0x86, 0xf5, 0xf8, 0x3c, 0x0e, 0xbb, 0x9e, 0x4f, 0xcd, 0xe9, 0xf5, 0xbf, 0x59, 0x34, 0xd2, 0xc8, + 0xc6, 0xc0, 0x34, 0xe7, 0xce, 0xff, 0x46, 0x1d, 0x46, 0x2e, 0x19, 0x31, 0x42, 0xcd, 0x39, 0x0e, + 0x3b, 0xec, 0x0f, 0x8c, 0x40, 0x3c, 0x5c, 0xd5, 0x76, 0x0b, 0xe8, 0xe6, 0x3d, 0x09, 0x02, 0x6a, + 0xc6, 0x8c, 0x7a, 0x89, 0x13, 0x76, 0x2e, 0x8f, 0x39, 0xf3, 0xe8, 0xea, 0xef, 0x6f, 0x60, 0xc6, + 0x99, 0x0a, 0xbb, 0x5d, 0x6a, 0x86, 0x98, 0x0d, 0xfb, 0x51, 0x98, 0x78, 0x8c, 0x9a, 0xe2, 0x76, + 0x70, 0x1d, 0x23, 0x36, 0xaa, 0xeb, 0x06, 0x7f, 0x99, 0xe1, 0xd2, 0x73, 0xbd, 0x9e, 0xc7, 0x88, + 0x7f, 0x1e, 0xfe, 0xa4, 0xb1, 0xef, 0x05, 0xd4, 0xa0, 0x3e, 0xff, 0x3b, 0x26, 0x51, 0x44, 0xe3, + 0xb3, 0x07, 0x1a, 0xdf, 0x53, 0xe2, 0xee, 0x9b, 0x23, 0x77, 0x5d, 0x3f, 0xf9, 0x69, 0x44, 0x3f, + 0x43, 0x27, 0xd9, 0x7f, 0x0d, 0xd5, 0x8d, 0xea, 0xf6, 0xc9, 0x7e, 0x9f, 0x25, 0xa6, 0xf6, 0x9d, + 0x38, 0x3e, 0x79, 0x32, 0xc3, 0x56, 0x32, 0xe9, 0xf4, 0xa9, 0xdb, 0x35, 0xac, 0xbf, 0x66, 0xcd, + 0xef, 0xa5, 0xc3, 0xe8, 0xf6, 0xb6, 0x5b, 0x3b, 0xfa, 0xe9, 0x9e, 0x85, 0x77, 0x46, 0x76, 0xfd, + 0x82, 0x32, 0x43, 0xbb, 0x5e, 0x3f, 0x48, 0x4c, 0xed, 0xf9, 0x57, 0xe3, 0x7a, 0xfe, 0x35, 0x32, + 0x50, 0x66, 0x8f, 0x3b, 0x6d, 0x12, 0x14, 0x79, 0xdb, 0x77, 0x73, 0x6c, 0x71, 0x69, 0xd7, 0xcf, + 0xba, 0x6e, 0xdf, 0x3c, 0x05, 0x9f, 0xf6, 0x9a, 0x18, 0xb5, 0xc3, 0x93, 0xaa, 0x21, 0xdd, 0xfc, + 0x32, 0x08, 0x5c, 0x33, 0x4c, 0x9c, 0x6e, 0x52, 0x33, 0xa4, 0x9b, 0x47, 0x07, 0xc7, 0x66, 0xf4, + 0xd4, 0x88, 0x90, 0x5f, 0xd7, 0x8c, 0x40, 0x1e, 0xf7, 0xe1, 0xae, 0x9d, 0x78, 0x9d, 0xc0, 0x9c, + 0xbe, 0x9e, 0x0d, 0x98, 0x21, 0x9d, 0xbd, 0x70, 0x1c, 0xc3, 0x94, 0x56, 0xd6, 0xe7, 0x13, 0xe2, + 0x1c, 0x1b, 0x43, 0x49, 0xb3, 0x1e, 0x1b, 0xa5, 0x63, 0xd3, 0x1e, 0x27, 0xc6, 0xcd, 0x71, 0x72, + 0xe5, 0x9a, 0x11, 0x9a, 0xe6, 0x3e, 0xdc, 0x5d, 0xb9, 0x46, 0xec, 0x04, 0x6a, 0x04, 0x30, 0xa0, + 0x4e, 0x68, 0x48, 0x44, 0x32, 0x35, 0xe3, 0x22, 0x08, 0x8d, 0xfc, 0xd8, 0x08, 0x0f, 0x27, 0x4d, + 0x1c, 0x43, 0x66, 0x74, 0x54, 0x66, 0x76, 0xeb, 0xe4, 0xce, 0x63, 0x26, 0x75, 0x78, 0x3f, 0xe9, + 0x13, 0xc7, 0x88, 0xd8, 0xbe, 0x2e, 0x49, 0x98, 0x29, 0xfd, 0x34, 0x26, 0xf6, 0x70, 0xd2, 0xd9, + 0xa3, 0xbf, 0x4c, 0xe9, 0xae, 0x21, 0x77, 0x6e, 0xbb, 0x8e, 0x17, 0x99, 0xe2, 0xeb, 0xee, 0xba, + 0xae, 0x11, 0xb7, 0x13, 0xba, 0xde, 0x5d, 0x4c, 0x0d, 0x32, 0x79, 0x76, 0xe3, 0x03, 0xdf, 0xa0, + 0xb0, 0xf4, 0x6e, 0x7c, 0x14, 0xc6, 0x3f, 0x49, 0x6c, 0x86, 0x3a, 0x88, 0x49, 0x9f, 0x5e, 0x50, + 0x9f, 0x3c, 0x99, 0xd5, 0xdb, 0xec, 0x5e, 0x85, 0x13, 0x06, 0x01, 0x75, 0x98, 0x59, 0x3d, 0x3f, + 0x39, 0xef, 0x98, 0xd5, 0xe1, 0x4b, 0x1a, 0x3f, 0x78, 0x66, 0x5c, 0x60, 0xe9, 0xc6, 0xdd, 0x5a, + 0xf3, 0xa4, 0x1b, 0x9b, 0x63, 0x54, 0xee, 0xed, 0x54, 0xb7, 0x08, 0xab, 0xf7, 0xef, 0xcc, 0xe9, + 0x6c, 0xb3, 0x61, 0x84, 0x36, 0xee, 0xed, 0xed, 0xed, 0xd6, 0x4c, 0xe9, 0x68, 0xdd, 0x94, 0x8e, + 0x1a, 0x61, 0xb1, 0xef, 0x99, 0x42, 0x72, 0x7a, 0x5d, 0x23, 0xee, 0xb2, 0xf7, 0xbc, 0x1e, 0xb9, + 0xf3, 0x86, 0x0c, 0xc7, 0x10, 0x13, 0x52, 0xcf, 0x90, 0x64, 0x22, 0xbd, 0x78, 0xab, 0xba, 0xd5, + 0x39, 0xb8, 0x32, 0xa6, 0xaf, 0x17, 0x86, 0xf4, 0x95, 0x19, 0x71, 0xb2, 0xee, 0xb7, 0xea, 0x5b, + 0x7f, 0x10, 0x46, 0x7f, 0x50, 0x1a, 0x99, 0x61, 0xea, 0x48, 0x7b, 0x7c, 0x1e, 0x87, 0x8f, 0x46, + 0xf0, 0x85, 0x7b, 0xf7, 0xbe, 0xb6, 0x5b, 0xaf, 0x9b, 0xd1, 0x55, 0xdf, 0x31, 0xa3, 0x9f, 0x86, + 0x24, 0x41, 0xbb, 0xf7, 0x22, 0x1a, 0xfb, 0x24, 0x30, 0xa5, 0xb3, 0x91, 0x67, 0x4c, 0x47, 0x8d, + 0x4a, 0x6a, 0x70, 0x1f, 0xf6, 0x69, 0x14, 0x10, 0x33, 0xba, 0x9a, 0xb0, 0x73, 0x62, 0x84, 0xdd, + 0xe8, 0x3e, 0x49, 0xcc, 0xd8, 0xaf, 0x4f, 0x11, 0x8d, 0x0d, 0xba, 0xe1, 0xe7, 0x91, 0x80, 0xd8, + 0x42, 0xb9, 0x67, 0x27, 0x4d, 0x0a, 0xe4, 0xa0, 0x15, 0x1b, 0xcc, 0xcc, 0xa0, 0xc4, 0x72, 0xd2, + 0x0a, 0x2c, 0x86, 0xec, 0x71, 0x70, 0xe5, 0xaa, 0x2d, 0x55, 0xff, 0xb7, 0x8d, 0xee, 0xbf, 0x68, + 0x6e, 0xdb, 0x12, 0x0d, 0x85, 0xcb, 0xff, 0x56, 0xae, 0xfe, 0xd7, 0x8d, 0x1f, 0x00, 0x5f, 0x8e, + 0xdc, 0x12, 0x0d, 0x42, 0x20, 0x77, 0x6e, 0x09, 0x47, 0x61, 0xb6, 0x70, 0xe2, 0xcc, 0xb5, 0x5b, + 0xae, 0x11, 0x70, 0x99, 0xcd, 0x4a, 0x37, 0x04, 0xa1, 0xdc, 0xbc, 0xa5, 0x1b, 0x0d, 0x57, 0x3e, + 0xd9, 0xd2, 0x8d, 0x42, 0x28, 0xcf, 0x6c, 0xa9, 0x46, 0xf3, 0xc7, 0x4a, 0xac, 0xc9, 0x1f, 0x2b, + 0xb4, 0x26, 0x5c, 0x39, 0x81, 0xcb, 0xd4, 0x7f, 0xbe, 0x5c, 0xc1, 0x65, 0x1b, 0xc1, 0xb9, 0xe9, + 0x70, 0x8a, 0x2f, 0xb7, 0x70, 0x89, 0x06, 0xc0, 0x73, 0x55, 0xa9, 0x54, 0xdd, 0xe7, 0xca, 0x45, + 0x5c, 0xaa, 0x11, 0xf0, 0xe5, 0x28, 0x2e, 0xd5, 0x10, 0xb8, 0x72, 0x17, 0x97, 0x6a, 0x04, 0xdc, + 0x39, 0x8d, 0x4b, 0x35, 0x0a, 0xce, 0x24, 0x7a, 0xa5, 0x1a, 0x83, 0x58, 0x0e, 0xe4, 0x52, 0x0d, + 0x85, 0x3f, 0x37, 0x72, 0xb9, 0x86, 0xc1, 0x9b, 0x33, 0xb9, 0x54, 0xa3, 0xe0, 0xcb, 0xa5, 0x5c, + 0xa2, 0x21, 0x88, 0xe7, 0x58, 0x2e, 0xcf, 0x60, 0x04, 0x72, 0x2f, 0x97, 0x68, 0x10, 0x32, 0x72, + 0x32, 0x97, 0x68, 0x38, 0x5c, 0xb9, 0x9a, 0x4b, 0xd4, 0x7f, 0xce, 0x1c, 0xce, 0x25, 0x1a, 0x41, + 0x62, 0x34, 0x99, 0x90, 0x94, 0xf3, 0xb9, 0x4c, 0x03, 0x12, 0xcb, 0x05, 0x5d, 0xca, 0x91, 0x70, + 0xe7, 0x88, 0x2e, 0xdb, 0x68, 0x84, 0x73, 0x47, 0x97, 0x68, 0x40, 0x42, 0x39, 0xa5, 0x4b, 0x34, + 0x0e, 0xde, 0x5c, 0xd3, 0x25, 0x1a, 0x02, 0x35, 0xfb, 0xa0, 0xf3, 0x46, 0xae, 0x94, 0x68, 0x08, + 0x42, 0x39, 0xab, 0x4b, 0x34, 0x8e, 0xc0, 0xec, 0xb3, 0xcc, 0x99, 0xe3, 0xba, 0x4c, 0x23, 0x10, + 0xca, 0x7d, 0x5d, 0x9e, 0x81, 0x70, 0xe5, 0xc4, 0x2e, 0x51, 0xf7, 0x39, 0x73, 0x65, 0x97, 0x68, + 0x04, 0xc2, 0x39, 0xb4, 0x4b, 0x37, 0x16, 0x59, 0xb9, 0xb5, 0x4b, 0x34, 0x30, 0xae, 0x9c, 0xdb, + 0x25, 0xea, 0xbf, 0x8c, 0x5c, 0xdc, 0x25, 0x1c, 0x8e, 0x70, 0x8e, 0xee, 0x32, 0x8e, 0x89, 0x3b, + 0x77, 0x77, 0x09, 0x07, 0xc3, 0x95, 0xd3, 0xbb, 0x94, 0xe3, 0x58, 0x8d, 0xf5, 0x10, 0xcd, 0x01, + 0x5e, 0xe2, 0x21, 0xf1, 0xe6, 0x06, 0x2f, 0xef, 0x90, 0x78, 0x73, 0x86, 0x97, 0x78, 0x44, 0x5f, + 0x57, 0x66, 0x44, 0xfc, 0xd9, 0x21, 0x4b, 0x3c, 0x98, 0x55, 0x80, 0x6a, 0xb2, 0x72, 0x92, 0x97, + 0x6b, 0x48, 0xa2, 0xb9, 0xca, 0xcb, 0x37, 0x1a, 0xb2, 0x12, 0x27, 0x88, 0x27, 0xb7, 0x79, 0xa9, + 0xba, 0xcf, 0x9b, 0x9e, 0xa6, 0x4c, 0x83, 0xa8, 0x19, 0xde, 0x7d, 0xae, 0x1c, 0xe9, 0x65, 0x1a, + 0x81, 0xd1, 0x57, 0x3e, 0x5c, 0xb3, 0x03, 0x15, 0xf9, 0x73, 0xad, 0x97, 0x6d, 0x0c, 0x5c, 0x39, + 0xd8, 0x4b, 0x35, 0x08, 0xc1, 0xdc, 0xec, 0x65, 0x1b, 0x0b, 0x7f, 0x3e, 0xf1, 0xb2, 0x8d, 0x64, + 0x25, 0xb0, 0x86, 0x60, 0x8e, 0xf7, 0xb2, 0x8d, 0x84, 0x2f, 0xf7, 0x7b, 0xa9, 0x46, 0xc1, 0x95, + 0x13, 0xbe, 0x3c, 0x23, 0xa0, 0x46, 0x03, 0x27, 0xde, 0x1c, 0xf2, 0x25, 0x1a, 0x81, 0xd9, 0x17, + 0x1c, 0x39, 0x73, 0xce, 0x97, 0x68, 0x00, 0x7c, 0xb9, 0xe8, 0x4b, 0x34, 0x00, 0xb1, 0x1c, 0xf5, + 0xe5, 0x1b, 0x08, 0x6f, 0xee, 0xfa, 0xf2, 0x8c, 0x84, 0x2f, 0xdd, 0x63, 0xb9, 0xfa, 0x6f, 0x7c, + 0x0c, 0xb8, 0x50, 0x0e, 0xfc, 0x72, 0x0d, 0xc3, 0xf0, 0xdc, 0x1c, 0xfc, 0x39, 0xf3, 0x4b, 0x34, + 0x06, 0xae, 0x5c, 0xfa, 0x25, 0xea, 0xbf, 0x50, 0x8e, 0xfd, 0x12, 0x8d, 0x43, 0x24, 0xf7, 0x7e, + 0x99, 0x86, 0xc1, 0x9d, 0x93, 0xbf, 0x4c, 0x83, 0xe0, 0xcf, 0xd5, 0x5f, 0xc6, 0x51, 0x88, 0xe5, + 0xf0, 0x2f, 0xe3, 0x88, 0xb8, 0x72, 0xfb, 0x97, 0x71, 0x20, 0xdc, 0x39, 0xff, 0xcb, 0x34, 0x18, + 0xb1, 0x5a, 0x00, 0xe5, 0x19, 0x89, 0x40, 0x8d, 0x80, 0xb2, 0x0d, 0x82, 0xab, 0x76, 0x40, 0x89, + 0x06, 0xc1, 0x57, 0x53, 0xa0, 0x5c, 0x03, 0xa8, 0x9b, 0x3e, 0x00, 0xa3, 0x3d, 0x5f, 0x3d, 0xd3, + 0xc9, 0x2a, 0x57, 0xcd, 0x82, 0x12, 0x75, 0x5f, 0xb4, 0x96, 0x41, 0x89, 0x86, 0x62, 0x78, 0xb2, + 0x36, 0xfe, 0xda, 0x07, 0x25, 0x1b, 0xc3, 0x85, 0xe1, 0x63, 0x60, 0x46, 0x9f, 0x68, 0xd1, 0x1a, + 0x0a, 0xe5, 0x1a, 0x09, 0x67, 0x6d, 0x85, 0x12, 0x0d, 0x82, 0xb7, 0xe6, 0x42, 0x99, 0x86, 0xe0, + 0x3b, 0x66, 0xf7, 0xdf, 0xf0, 0xe4, 0xbc, 0x02, 0xb5, 0x1b, 0x4a, 0x35, 0x88, 0xc8, 0x33, 0x7e, + 0x00, 0x2b, 0x91, 0xbc, 0x89, 0xbb, 0x06, 0x44, 0x99, 0x86, 0xc0, 0x59, 0x1b, 0xa2, 0x44, 0x43, + 0xe0, 0xaa, 0x19, 0x51, 0xa2, 0xfe, 0x0b, 0xd5, 0x92, 0x28, 0xcf, 0x38, 0xbc, 0xbb, 0xfe, 0xd6, + 0x4e, 0x35, 0x22, 0xf1, 0xfe, 0xbd, 0xd9, 0x57, 0xf2, 0x3d, 0xc3, 0x1d, 0x75, 0x1e, 0xa5, 0xb4, + 0xb6, 0xb5, 0xd7, 0x30, 0x7d, 0x0c, 0xbb, 0xd5, 0x7a, 0xad, 0xb6, 0x0a, 0x83, 0xa8, 0xaf, 0xc2, + 0x20, 0xb6, 0x57, 0x62, 0x3f, 0x35, 0xff, 0x7d, 0xd2, 0x3e, 0x5d, 0x81, 0x81, 0x6c, 0x11, 0xf7, + 0x98, 0x18, 0x9d, 0x48, 0xce, 0xeb, 0xda, 0xbd, 0xc4, 0x6c, 0x3d, 0xd1, 0x3d, 0xff, 0x79, 0xf5, + 0x14, 0x51, 0xb3, 0xc7, 0xf0, 0xad, 0xeb, 0x19, 0x3f, 0x08, 0xc3, 0x73, 0x00, 0x79, 0x7d, 0xa3, + 0x0d, 0xc6, 0x5e, 0xd0, 0xf5, 0x02, 0xef, 0x8e, 0x98, 0x9d, 0x39, 0x35, 0xab, 0x8e, 0xe6, 0x53, + 0xf2, 0x60, 0xf6, 0x51, 0x88, 0xcc, 0xee, 0xfd, 0x0a, 0xc4, 0xd3, 0x78, 0xd1, 0xd9, 0x03, 0x8d, + 0xdb, 0x66, 0x5f, 0x45, 0x1b, 0x0e, 0x62, 0xdf, 0x70, 0x8b, 0xe5, 0x68, 0x14, 0x3e, 0xf9, 0x69, + 0xf6, 0x28, 0xcc, 0xaf, 0x71, 0xe8, 0x25, 0x6e, 0x60, 0x7a, 0xff, 0x13, 0xd3, 0x07, 0x30, 0x30, + 0x7b, 0x00, 0xe1, 0xee, 0x6e, 0xb5, 0x5e, 0xf7, 0x0d, 0x17, 0x49, 0xc3, 0x61, 0x6c, 0x99, 0x7f, + 0x3d, 0x62, 0x34, 0x92, 0xc6, 0x55, 0xf8, 0x83, 0x06, 0x5f, 0x06, 0xc9, 0x0a, 0x8c, 0x65, 0x7b, + 0xff, 0xe2, 0xe8, 0xbc, 0x13, 0xb0, 0x55, 0x18, 0xca, 0x01, 0x8b, 0x57, 0x61, 0x18, 0x47, 0xde, + 0x1d, 0x5d, 0x89, 0x81, 0x64, 0xc7, 0xe4, 0xc2, 0xf0, 0xec, 0xff, 0xa3, 0xc1, 0x34, 0x4f, 0x0c, + 0x27, 0xdc, 0xc9, 0xc0, 0x68, 0x9e, 0xe4, 0xd7, 0x4d, 0x4f, 0x7b, 0xec, 0x6f, 0x79, 0xd1, 0x2a, + 0x8c, 0xe1, 0xd1, 0xf8, 0x41, 0x90, 0xe8, 0xce, 0xf0, 0xfe, 0xbb, 0x86, 0xf7, 0xdf, 0xe8, 0xbc, + 0x9a, 0xbe, 0x17, 0xd0, 0x5e, 0x1c, 0x1a, 0x2e, 0x4f, 0xfb, 0x66, 0x77, 0x3f, 0x74, 0x88, 0x7f, + 0x45, 0x7c, 0xa3, 0x2f, 0x41, 0xf4, 0x89, 0x73, 0x49, 0x9d, 0xfd, 0x30, 0x60, 0x71, 0xe8, 0xfb, + 0xd4, 0xed, 0x1c, 0x99, 0x3f, 0x9a, 0xaf, 0x81, 0xb3, 0x2a, 0xe3, 0xa1, 0xae, 0x47, 0x4e, 0x88, + 0xe7, 0x9f, 0x3d, 0xd0, 0xb8, 0x63, 0xf4, 0x69, 0xe9, 0x77, 0x2f, 0xbd, 0x9e, 0xe9, 0x17, 0x99, + 0xfb, 0x5e, 0xf8, 0x68, 0x76, 0xb6, 0xfc, 0x7e, 0xe8, 0x90, 0x6f, 0x34, 0x4e, 0xbc, 0x30, 0xa8, + 0x99, 0x3d, 0x0e, 0x97, 0x1a, 0x6d, 0xea, 0xef, 0x47, 0x8e, 0xd9, 0xdd, 0xa7, 0xbd, 0xab, 0x98, + 0x04, 0x49, 0x64, 0x78, 0x6e, 0xd8, 0x7e, 0xe4, 0x27, 0xa6, 0xf7, 0xff, 0x6a, 0x60, 0x7a, 0x14, + 0x63, 0x3f, 0x31, 0x3c, 0xfa, 0xaf, 0xff, 0x60, 0x76, 0xf7, 0x9f, 0x62, 0xcf, 0xf0, 0x0b, 0x74, + 0x41, 0x97, 0x18, 0x7d, 0x90, 0x83, 0xc4, 0xec, 0x28, 0x82, 0x70, 0x58, 0xfe, 0x76, 0x05, 0xd2, + 0xa4, 0xbc, 0x1e, 0xc9, 0x1f, 0xa6, 0xd3, 0xec, 0xd1, 0x70, 0x56, 0x42, 0x5b, 0x87, 0xa6, 0x27, + 0xd6, 0x0a, 0x59, 0x70, 0xe6, 0x0e, 0x4c, 0x1f, 0x01, 0x33, 0x7a, 0x04, 0x11, 0x89, 0x8d, 0xbe, + 0x3d, 0x14, 0xb9, 0x41, 0x76, 0xe3, 0xfd, 0x38, 0x0c, 0xa3, 0xda, 0xaa, 0x0c, 0xc4, 0xe8, 0x68, + 0xfd, 0xc8, 0x6c, 0xd5, 0x1d, 0x99, 0x1d, 0xdc, 0x11, 0x85, 0x41, 0x6d, 0x7b, 0xdb, 0xf0, 0x11, + 0x34, 0xcd, 0xbe, 0x65, 0x1d, 0x85, 0x46, 0x83, 0xef, 0x28, 0x8a, 0x0c, 0xef, 0xfe, 0xc9, 0xc0, + 0x67, 0x9e, 0xef, 0x05, 0x3f, 0xcc, 0x4f, 0x91, 0x15, 0xc5, 0x5e, 0x9f, 0xc4, 0x4f, 0x9d, 0xcb, + 0x83, 0x53, 0xb3, 0x87, 0x11, 0x46, 0x86, 0xc7, 0x23, 0xa7, 0x43, 0xf8, 0xf2, 0xef, 0x76, 0x54, + 0x3f, 0x89, 0x4c, 0x1f, 0xc6, 0x7e, 0x60, 0xb6, 0x9d, 0x2f, 0x1d, 0xc3, 0x41, 0xe8, 0x24, 0xff, + 0xf6, 0x62, 0xea, 0xd3, 0x64, 0x45, 0x8a, 0x76, 0xbe, 0x1d, 0xd5, 0x2a, 0xd4, 0xee, 0x7c, 0x3b, + 0xa6, 0x55, 0x28, 0x9d, 0x91, 0x8e, 0x29, 0xd3, 0x30, 0x91, 0x4f, 0x1f, 0x43, 0xe3, 0x97, 0xe7, + 0x3c, 0xf4, 0x02, 0x76, 0x15, 0x66, 0xff, 0xbb, 0xa4, 0xb1, 0x47, 0x7c, 0xd3, 0x47, 0xf4, 0xcd, + 0x8b, 0xd9, 0xc0, 0xfc, 0x61, 0x8c, 0xcf, 0xcc, 0x79, 0xfd, 0xdc, 0xf0, 0xa1, 0x30, 0x1a, 0x06, + 0xb5, 0xaa, 0xe9, 0x65, 0x05, 0x46, 0x03, 0xd9, 0x35, 0x7f, 0x20, 0x66, 0x03, 0xb1, 0xff, 0xad, + 0xef, 0x6d, 0x19, 0x6d, 0xea, 0xf9, 0x5f, 0xb3, 0xf5, 0xdf, 0xff, 0x1a, 0x7e, 0xff, 0x25, 0x26, + 0xae, 0x17, 0x9e, 0xb4, 0xf7, 0x0d, 0x1f, 0x83, 0xd9, 0x3e, 0xe2, 0x98, 0x12, 0xe7, 0xfe, 0xe0, + 0xf2, 0xd8, 0xec, 0x31, 0xf4, 0x06, 0x3e, 0x89, 0x4d, 0x4f, 0x0a, 0x18, 0x77, 0x9d, 0x5a, 0xc3, + 0xec, 0xdc, 0xc3, 0x71, 0xd7, 0xd9, 0xdd, 0xd9, 0x31, 0x3c, 0x1c, 0x2d, 0x8e, 0x8c, 0xe6, 0x12, + 0x71, 0x52, 0xdf, 0x32, 0xfb, 0x1c, 0x24, 0xb1, 0xd1, 0xf7, 0x10, 0x12, 0xd7, 0xf1, 0xcc, 0xee, + 0xbf, 0xd9, 0xb8, 0xc2, 0xf4, 0xb0, 0xad, 0xe4, 0xde, 0xf4, 0x01, 0x98, 0xed, 0x79, 0x4c, 0xbc, + 0xe8, 0xd2, 0xeb, 0x19, 0x3e, 0x82, 0x2b, 0xc3, 0x07, 0xf0, 0x78, 0x15, 0x1e, 0x85, 0x03, 0xa3, + 0x15, 0x71, 0xe2, 0x1b, 0x7e, 0x0e, 0xfa, 0x6e, 0x72, 0xf0, 0xe8, 0x99, 0x3e, 0x84, 0x8e, 0x63, + 0xf8, 0x32, 0x84, 0x5d, 0xf6, 0x93, 0xc4, 0xf4, 0x38, 0x0c, 0xa3, 0x3b, 0xe2, 0xfc, 0x30, 0x7b, + 0x2c, 0x86, 0x07, 0xf4, 0x66, 0x03, 0x38, 0x7b, 0xa0, 0xf1, 0x3d, 0x25, 0xee, 0x0a, 0x84, 0x95, + 0x66, 0xe3, 0x39, 0x27, 0xec, 0xde, 0xf8, 0x41, 0x7c, 0x33, 0xba, 0x42, 0x46, 0x12, 0x9b, 0x2d, + 0xa3, 0x92, 0x9d, 0x15, 0xb8, 0x49, 0x97, 0x30, 0xe2, 0xfc, 0xb8, 0x0a, 0x2f, 0x99, 0xe9, 0x52, + 0x96, 0x91, 0xf8, 0xd8, 0xec, 0x5c, 0x04, 0xcc, 0x70, 0x0e, 0xca, 0xa8, 0xe9, 0x87, 0x81, 0xd1, + 0xb8, 0x6f, 0x78, 0x39, 0x00, 0x16, 0x57, 0xab, 0xbb, 0x66, 0x0f, 0x80, 0x04, 0x49, 0xf4, 0xa7, + 0xe9, 0x67, 0xc1, 0xf8, 0x9b, 0x80, 0x03, 0x9f, 0x99, 0x1d, 0x9d, 0x3f, 0x48, 0x8c, 0xb6, 0xa8, + 0x3e, 0x98, 0x9d, 0xfc, 0xff, 0x61, 0x6b, 0xdb, 0xec, 0xee, 0x37, 0xcd, 0xee, 0xfe, 0x8e, 0xd1, + 0xdd, 0x37, 0xdc, 0x18, 0xfc, 0x60, 0x7a, 0xa9, 0xb0, 0x87, 0x61, 0x14, 0x5b, 0x27, 0x6a, 0xbb, + 0x6e, 0x4c, 0x93, 0x64, 0x05, 0xc6, 0x62, 0xb6, 0x71, 0xf8, 0xa1, 0xff, 0x93, 0xc4, 0xf4, 0xd4, + 0x73, 0xae, 0x0c, 0x0f, 0x60, 0x1d, 0x0e, 0x64, 0x14, 0x25, 0x79, 0xea, 0x19, 0x0d, 0xf2, 0x1e, + 0x42, 0xcf, 0xa1, 0x07, 0x9d, 0x03, 0xe3, 0xc7, 0x70, 0xf8, 0xe5, 0xd2, 0xfc, 0x31, 0x9c, 0xac, + 0xc0, 0x10, 0x8e, 0xfe, 0x58, 0x81, 0xcd, 0x14, 0x38, 0x24, 0x32, 0x7e, 0x14, 0x47, 0x7f, 0x1c, + 0x1c, 0xb6, 0x4f, 0xdb, 0xab, 0x30, 0x8e, 0x33, 0xf3, 0x0f, 0xf7, 0xd1, 0x5f, 0x67, 0x2b, 0x30, + 0x06, 0xf3, 0xd7, 0x61, 0x05, 0x4a, 0x7b, 0x4c, 0xc6, 0xb1, 0x4f, 0xee, 0xcc, 0xbe, 0x9e, 0x39, + 0x19, 0xc9, 0x51, 0x4c, 0xfa, 0xf4, 0x82, 0xfa, 0xe4, 0x69, 0x25, 0x86, 0x63, 0x76, 0x7e, 0xc5, + 0x9f, 0x3f, 0x49, 0x70, 0x7e, 0x6e, 0xfe, 0x08, 0x8c, 0xe6, 0xaf, 0x8f, 0xf5, 0xda, 0x96, 0xd9, + 0xfd, 0xdf, 0xbe, 0x1f, 0x04, 0xcc, 0xf8, 0x94, 0x47, 0x8f, 0xf5, 0xed, 0xbe, 0x6f, 0xfa, 0x08, + 0x22, 0xb3, 0xd5, 0xc4, 0xe3, 0x6e, 0xf3, 0x98, 0x44, 0x46, 0x9b, 0x70, 0x1e, 0xef, 0xc2, 0xc7, + 0xf1, 0x8d, 0x44, 0x81, 0x71, 0x70, 0x3d, 0x79, 0xf3, 0x41, 0xc3, 0x7c, 0xf1, 0xcd, 0x93, 0xac, + 0xda, 0xd3, 0x05, 0x74, 0x98, 0xcb, 0xc0, 0x5b, 0x40, 0x3f, 0xb9, 0x6b, 0x49, 0x17, 0xd3, 0x57, + 0xce, 0x9a, 0xd1, 0xc5, 0x75, 0xb6, 0x6e, 0x52, 0x67, 0xb7, 0x8d, 0xda, 0x07, 0x9c, 0xb5, 0x9e, + 0x0b, 0xeb, 0x30, 0x6f, 0x4d, 0xe7, 0x02, 0x3a, 0xcc, 0x59, 0xbb, 0xb9, 0x88, 0x9e, 0xf2, 0xd6, + 0x68, 0x2e, 0xa2, 0xaf, 0xdc, 0xb5, 0x98, 0x0b, 0xe8, 0xac, 0x6f, 0x88, 0xa2, 0xe5, 0xa9, 0xad, + 0x5c, 0x40, 0x37, 0x05, 0x6a, 0x28, 0x17, 0xd1, 0x5b, 0xfe, 0x5a, 0xc9, 0x05, 0xf4, 0x36, 0x32, + 0xa3, 0x97, 0xdc, 0xb5, 0x8f, 0x8b, 0xe8, 0x2c, 0xb7, 0x21, 0xb4, 0xa8, 0xce, 0xf2, 0xd5, 0x32, + 0x2e, 0xac, 0xb7, 0x5c, 0x35, 0x8b, 0x8b, 0xe8, 0x2d, 0x6f, 0x6d, 0xe2, 0x02, 0xfa, 0xca, 0x55, + 0x83, 0xb8, 0x98, 0x7e, 0x26, 0xa6, 0x74, 0x74, 0x60, 0x46, 0x47, 0x05, 0x6a, 0x07, 0x17, 0xd6, + 0x5d, 0xee, 0x1a, 0xc1, 0x85, 0xf5, 0x58, 0xa0, 0x16, 0x70, 0x61, 0x7d, 0xe6, 0xaf, 0xf9, 0x5b, + 0x5c, 0x97, 0xb9, 0x6a, 0xfb, 0x16, 0xd7, 0x5d, 0xce, 0x1a, 0xbe, 0xc5, 0x75, 0x58, 0xa0, 0x56, + 0x6f, 0x61, 0x9d, 0xe6, 0xab, 0xc9, 0x5b, 0x44, 0x77, 0x07, 0x46, 0xe0, 0x71, 0xde, 0x1a, 0xbb, + 0x05, 0xf4, 0x94, 0xbb, 0x96, 0x6e, 0x31, 0x7d, 0x7d, 0x34, 0xa6, 0xb3, 0x5c, 0xb5, 0x71, 0x0b, + 0xe9, 0xa7, 0x6b, 0x48, 0x3f, 0xbb, 0x46, 0xf4, 0x93, 0xbf, 0xa6, 0x6d, 0x01, 0x9d, 0xed, 0x9b, + 0xd1, 0x4d, 0xfe, 0x1a, 0xb5, 0xfa, 0x3b, 0x2b, 0xa3, 0x16, 0x6d, 0x51, 0xbd, 0x16, 0xad, 0x39, + 0x5b, 0x40, 0xbf, 0x45, 0x6b, 0xcb, 0x16, 0xd0, 0x65, 0xfe, 0x1a, 0xb2, 0x05, 0x74, 0x96, 0xb3, + 0x56, 0x6c, 0x01, 0x3d, 0x15, 0xaa, 0x09, 0x5b, 0x44, 0x7f, 0xb9, 0x6a, 0xbf, 0x16, 0xd0, 0xd1, + 0xc8, 0x31, 0xa3, 0x9b, 0x42, 0xb5, 0x5c, 0x8b, 0xe8, 0xb0, 0x9f, 0x98, 0xd2, 0x4f, 0xde, 0xda, + 0xac, 0x05, 0xf4, 0x36, 0x31, 0x24, 0x3a, 0x86, 0xab, 0xd6, 0x6a, 0x01, 0xdd, 0xe4, 0xad, 0xa9, + 0xaa, 0xbf, 0xab, 0x7c, 0xb5, 0x53, 0x0b, 0xe8, 0x67, 0x62, 0x86, 0x57, 0x51, 0xb4, 0x16, 0x6a, + 0xd1, 0x3d, 0xfe, 0xc3, 0x14, 0x1a, 0x26, 0x5e, 0xdb, 0xb4, 0x80, 0x3e, 0xf3, 0xd5, 0x30, 0x2d, + 0xa2, 0xa3, 0x7c, 0xb5, 0x4a, 0x8b, 0xe9, 0x29, 0x33, 0xa2, 0xa7, 0x7c, 0xb5, 0x47, 0x0b, 0xe8, + 0xa7, 0x58, 0x8d, 0xd1, 0x62, 0x3b, 0x6c, 0x44, 0x74, 0x67, 0x64, 0x86, 0x2a, 0x8b, 0xcc, 0x70, + 0xde, 0xf2, 0xd6, 0x00, 0x2d, 0xa4, 0xa7, 0x5c, 0xb5, 0x3e, 0x8b, 0xe8, 0xa9, 0x11, 0xa0, 0x90, + 0xab, 0x76, 0x67, 0x21, 0xdd, 0x14, 0xae, 0xd1, 0x59, 0x40, 0xaf, 0x45, 0x6a, 0x71, 0x16, 0xd1, + 0x5d, 0xce, 0x9a, 0x9b, 0xc5, 0x74, 0x95, 0xbb, 0xb6, 0x66, 0x31, 0xdd, 0xe5, 0xab, 0xa1, 0x59, + 0x4c, 0x5f, 0x65, 0xd5, 0xca, 0x2c, 0xbe, 0xf7, 0xfc, 0x35, 0x31, 0x8b, 0xef, 0x3b, 0x7f, 0xed, + 0xcb, 0x62, 0xfa, 0x2e, 0x54, 0xe3, 0xb2, 0x98, 0x2e, 0xcb, 0xa8, 0x65, 0x59, 0x4c, 0xcf, 0xb9, + 0x6b, 0x56, 0x16, 0xd3, 0x5d, 0xa1, 0xda, 0x94, 0x85, 0x74, 0x59, 0xa4, 0x06, 0x65, 0x61, 0x1d, + 0xde, 0x35, 0xa7, 0xc3, 0x66, 0x00, 0x0d, 0xce, 0xda, 0x91, 0x05, 0x74, 0xd4, 0x0c, 0x3d, 0xf1, + 0xbf, 0x86, 0xc4, 0x33, 0xf3, 0xd7, 0x7c, 0x2c, 0xa4, 0xaf, 0x66, 0xf8, 0x9e, 0xf8, 0x6b, 0x38, + 0x16, 0xd1, 0x57, 0x81, 0x5a, 0x8d, 0x05, 0x74, 0x97, 0xb7, 0x26, 0x63, 0x21, 0x5d, 0xe5, 0xad, + 0xbd, 0x58, 0x40, 0x67, 0x23, 0x23, 0xb0, 0x2c, 0x67, 0x2d, 0xc5, 0x22, 0x3a, 0x1a, 0x1b, 0x11, + 0x9f, 0xca, 0x57, 0x1b, 0xb1, 0x88, 0x7e, 0x9a, 0xa1, 0x4f, 0x4d, 0x09, 0x8f, 0xe0, 0xac, 0x69, + 0x58, 0x40, 0x47, 0xcd, 0xf0, 0x80, 0xf0, 0xd6, 0x28, 0x2c, 0xa4, 0xa7, 0x57, 0x86, 0x74, 0x94, + 0xbb, 0xe6, 0x60, 0x01, 0x9d, 0xf5, 0x0d, 0xd9, 0xa7, 0xbc, 0x35, 0x04, 0x8b, 0xe9, 0x2a, 0x5f, + 0xad, 0xc0, 0x02, 0xfa, 0x2a, 0x5c, 0x13, 0xb0, 0x88, 0x3e, 0x1b, 0x12, 0x78, 0x26, 0xa7, 0xc6, + 0x5f, 0x41, 0xfd, 0xe6, 0xab, 0xe5, 0x57, 0x50, 0x67, 0x79, 0x6a, 0xf6, 0x15, 0xd0, 0xd5, 0xd8, + 0x0c, 0x99, 0x20, 0x50, 0x83, 0xaf, 0x80, 0xde, 0x0a, 0xd5, 0xda, 0x2b, 0xa4, 0xbf, 0x7c, 0x35, + 0xf5, 0xf4, 0x77, 0x95, 0x19, 0xc2, 0x5d, 0x78, 0x6b, 0xe4, 0x15, 0xd1, 0x53, 0xce, 0x5a, 0x78, + 0x05, 0x74, 0x95, 0xaf, 0xe6, 0x5d, 0x11, 0x1d, 0xe5, 0xaf, 0x6d, 0x57, 0x40, 0x6f, 0x8d, 0xb9, + 0x31, 0xc1, 0x59, 0xab, 0xae, 0x80, 0x8e, 0x26, 0x46, 0x58, 0xac, 0x1e, 0xcc, 0x48, 0x22, 0xca, + 0x55, 0x63, 0xae, 0x88, 0x6e, 0x36, 0xcd, 0xe8, 0xe6, 0x8e, 0x11, 0xdd, 0x34, 0xc4, 0xa8, 0xc6, + 0x59, 0x03, 0xae, 0x80, 0x8e, 0x0a, 0xd7, 0x7a, 0x2b, 0xac, 0xcf, 0x66, 0x18, 0xd9, 0x04, 0x6b, + 0xb7, 0x15, 0xd5, 0x61, 0x91, 0x1a, 0x6d, 0x05, 0xf4, 0x99, 0xbb, 0x16, 0x5b, 0x41, 0x7d, 0xe5, + 0xaa, 0xb9, 0x56, 0x54, 0x5f, 0x4f, 0x0c, 0xea, 0x2a, 0x57, 0x0d, 0xb5, 0xa2, 0x7a, 0xcb, 0x57, + 0x2b, 0xad, 0xa0, 0xde, 0x72, 0xd7, 0x44, 0x2b, 0xae, 0xbf, 0x67, 0xe6, 0x1c, 0x32, 0xae, 0x1a, + 0x67, 0x85, 0xf5, 0xd5, 0x9c, 0x79, 0x35, 0x28, 0x55, 0xaf, 0x68, 0x6d, 0xb2, 0x02, 0x7b, 0x2c, + 0x52, 0x83, 0xac, 0xc0, 0x6e, 0x9b, 0x91, 0x6f, 0x87, 0xb7, 0xa6, 0x58, 0x51, 0x3d, 0x35, 0x82, + 0xf7, 0xf0, 0xd5, 0x08, 0x2b, 0xa2, 0x9f, 0x22, 0xb5, 0xc0, 0x0a, 0xe9, 0x2f, 0x57, 0xcd, 0xaf, + 0x42, 0x7a, 0x1a, 0x99, 0x21, 0x66, 0xb9, 0x6b, 0x78, 0x15, 0xd0, 0x55, 0xa1, 0x5a, 0x5d, 0xf9, + 0x6a, 0x74, 0x2d, 0x5f, 0x9b, 0x6b, 0xb9, 0x76, 0x97, 0x9c, 0xad, 0x0a, 0x7d, 0x64, 0x31, 0xb1, + 0x07, 0x41, 0xc2, 0x32, 0x3d, 0xdd, 0xca, 0x31, 0x67, 0x95, 0x98, 0x76, 0x69, 0x4c, 0x03, 0x27, + 0x7d, 0xec, 0xfb, 0x07, 0xb5, 0x0b, 0x33, 0x59, 0x94, 0x8b, 0xa3, 0x7d, 0xab, 0xbe, 0xdb, 0xdc, + 0x6a, 0x59, 0x57, 0xf7, 0xd4, 0xea, 0x04, 0x8c, 0xc6, 0x5d, 0xe2, 0xd0, 0xc4, 0xca, 0xa4, 0x8a, + 0x75, 0xd2, 0xf9, 0x62, 0xd9, 0x96, 0xd7, 0xcd, 0xaa, 0xaf, 0xe4, 0xdf, 0x31, 0x95, 0xcb, 0x70, + 0x10, 0x3b, 0xf9, 0xe6, 0xe1, 0xd5, 0xf3, 0xff, 0xa2, 0x4f, 0x3f, 0xc3, 0xd8, 0x1d, 0xc6, 0x4a, + 0x8f, 0xa7, 0x87, 0xaf, 0xea, 0x5c, 0xe5, 0x4f, 0x92, 0xb4, 0xe3, 0xde, 0xa0, 0x4f, 0x03, 0x56, + 0x69, 0x59, 0x2c, 0x1e, 0x50, 0xce, 0x86, 0xa6, 0x5a, 0xc9, 0x35, 0x7f, 0x8a, 0xf7, 0xfc, 0xf2, + 0xdf, 0xbe, 0x91, 0xba, 0xe7, 0xdb, 0x41, 0x10, 0x32, 0xc2, 0xbc, 0x30, 0xc8, 0xb7, 0xdf, 0x9f, + 0x7a, 0x21, 0xb3, 0x43, 0xc7, 0x76, 0xc2, 0x7e, 0x14, 0xd3, 0x24, 0xa1, 0xae, 0xed, 0x53, 0xd2, + 0x4d, 0x1b, 0x59, 0xf2, 0x50, 0x7e, 0x10, 0xfb, 0xc6, 0x3b, 0x03, 0xac, 0x1c, 0x3e, 0xb2, 0x64, + 0xa9, 0xb3, 0xb8, 0xdc, 0xa0, 0xa7, 0x37, 0x73, 0xe8, 0xd8, 0xf4, 0x91, 0xb5, 0x18, 0xf5, 0x69, + 0x9f, 0xb2, 0xf8, 0xc9, 0x0e, 0x03, 0xdb, 0xb9, 0x27, 0x41, 0x6f, 0xd9, 0xdd, 0xfd, 0x66, 0x37, + 0x77, 0x89, 0x9f, 0xd0, 0x65, 0xd7, 0x6b, 0x6a, 0xfb, 0x56, 0x04, 0xa7, 0xf0, 0xe6, 0x9d, 0x29, + 0x6c, 0x0f, 0x7a, 0xe9, 0xab, 0xa8, 0x2b, 0x73, 0x1e, 0xc7, 0xb2, 0x6b, 0x33, 0x74, 0x6c, 0xaf, + 0xdb, 0xf2, 0x26, 0x87, 0xee, 0xed, 0x07, 0xa3, 0xbf, 0x9d, 0x30, 0xe8, 0x7a, 0xbd, 0x65, 0x27, + 0xf6, 0x80, 0x26, 0x4e, 0xec, 0x45, 0xa3, 0xfd, 0x5c, 0x69, 0xbb, 0x6e, 0x62, 0x5d, 0x9d, 0x77, + 0x0e, 0xac, 0x4d, 0x8b, 0xb2, 0x7b, 0x1a, 0xb3, 0xa7, 0x88, 0x5a, 0x09, 0x65, 0xcc, 0x0b, 0x7a, + 0x56, 0x37, 0x8c, 0x2d, 0x76, 0x4f, 0xad, 0x3b, 0x92, 0x50, 0x6b, 0xf2, 0xde, 0x65, 0x5f, 0xf5, + 0x2f, 0x2f, 0x48, 0x27, 0xa6, 0xb6, 0xe4, 0xd7, 0xf7, 0x87, 0xe3, 0x68, 0x59, 0xd5, 0x25, 0x1f, + 0x38, 0x8f, 0x69, 0xd7, 0x7b, 0xcc, 0x77, 0x2a, 0x27, 0x09, 0x7b, 0x1c, 0x3b, 0x4b, 0x47, 0xbd, + 0xbc, 0x8c, 0xe4, 0x15, 0xf6, 0xd3, 0xe7, 0x22, 0x1a, 0xf6, 0x38, 0x9f, 0x60, 0x16, 0x96, 0xec, + 0xaf, 0x8e, 0xc4, 0x78, 0xe0, 0x05, 0x21, 0x88, 0x03, 0x2f, 0xce, 0xb7, 0x60, 0x2c, 0xf2, 0xdc, + 0xfc, 0x73, 0x3e, 0x71, 0xe5, 0xa7, 0x4f, 0xe7, 0x9c, 0xad, 0x37, 0x27, 0xe4, 0x2c, 0xfb, 0x8d, + 0xf8, 0xfe, 0x53, 0x7a, 0x2c, 0xb2, 0xe3, 0xc0, 0x48, 0xcf, 0x8a, 0xe2, 0x90, 0x85, 0x4e, 0xe8, + 0x5b, 0x9e, 0x4b, 0x03, 0xe6, 0x75, 0x3d, 0x1a, 0x5b, 0x5d, 0x8f, 0xfa, 0xae, 0xf5, 0x31, 0x3d, + 0x4e, 0x1b, 0x16, 0xbb, 0x27, 0xec, 0x3a, 0xf0, 0x12, 0x8b, 0x38, 0x0e, 0x8d, 0x18, 0x75, 0xad, + 0x30, 0xc8, 0x9e, 0xfe, 0x76, 0xdc, 0x3e, 0xcd, 0xdf, 0xa7, 0x2e, 0x19, 0xf8, 0x2c, 0x37, 0x74, + 0xca, 0x1e, 0x1e, 0x2d, 0xb9, 0x9d, 0x1e, 0xed, 0xa4, 0x95, 0xf6, 0xee, 0xb6, 0xfa, 0xd7, 0x6e, + 0xad, 0x5a, 0xcd, 0xa7, 0xb2, 0x6f, 0x72, 0xf6, 0x79, 0x74, 0xfc, 0xab, 0x39, 0x1f, 0xcb, 0x2b, + 0x06, 0x44, 0xc4, 0x81, 0x04, 0xb1, 0xa0, 0x02, 0x0b, 0x72, 0x89, 0x09, 0xb5, 0x40, 0x30, 0xb7, + 0xd8, 0xe0, 0x04, 0x79, 0x39, 0xd7, 0x3c, 0x03, 0x9e, 0x42, 0x2b, 0x3e, 0x3c, 0xbe, 0xec, 0x29, + 0xa6, 0x5d, 0x9e, 0x55, 0x1f, 0xeb, 0xb8, 0x6d, 0x8e, 0x67, 0x3b, 0xa3, 0x57, 0x7f, 0x21, 0x89, + 0xc0, 0xbe, 0x19, 0x0f, 0x24, 0x3b, 0xd7, 0x57, 0xff, 0x39, 0x3f, 0xbc, 0xe4, 0xdd, 0x38, 0xdf, + 0x88, 0x3f, 0xa0, 0x09, 0x97, 0x8c, 0x11, 0xe3, 0xd0, 0xf3, 0xc7, 0xc2, 0x23, 0xa3, 0x04, 0x4d, + 0x00, 0x8a, 0x86, 0xb1, 0xdb, 0xde, 0x5d, 0x81, 0x61, 0xec, 0xad, 0xc6, 0x6a, 0xec, 0xd5, 0x57, + 0x60, 0x18, 0xed, 0xd3, 0xff, 0x18, 0x50, 0x0f, 0x5e, 0x11, 0xbf, 0xd7, 0x43, 0x9f, 0xdf, 0xe5, + 0x7e, 0xf9, 0xec, 0x02, 0x95, 0xc4, 0xb9, 0xa7, 0x7d, 0x12, 0x11, 0x76, 0x3f, 0x24, 0x77, 0x11, + 0x0d, 0x86, 0xcc, 0xcd, 0x9e, 0x62, 0x78, 0xf3, 0x7e, 0xdd, 0x1c, 0x11, 0xbc, 0x0f, 0x7c, 0x63, + 0xf9, 0x9b, 0x1d, 0x5b, 0xc9, 0x18, 0x5f, 0x40, 0xd9, 0xbb, 0x23, 0x98, 0xec, 0xbe, 0xc9, 0x13, + 0xef, 0xcc, 0xce, 0x72, 0xdc, 0x6f, 0x69, 0xb0, 0x97, 0x07, 0xdc, 0x4d, 0x83, 0x39, 0xca, 0xee, + 0x97, 0xd0, 0x86, 0x79, 0xb1, 0x1b, 0x37, 0x56, 0xe3, 0xc6, 0x66, 0x6f, 0xb1, 0x18, 0x5d, 0xe6, + 0xe2, 0x8f, 0x98, 0x79, 0x68, 0x59, 0xa6, 0x56, 0x71, 0xc6, 0x6b, 0x98, 0xd3, 0xbe, 0x91, 0xcf, + 0x6e, 0x51, 0x72, 0x63, 0xc2, 0x72, 0x1b, 0x6d, 0xf5, 0x6c, 0x09, 0x34, 0xcf, 0x0d, 0xb4, 0x82, + 0x4d, 0x09, 0xa4, 0xd7, 0x8b, 0x69, 0x8f, 0x30, 0x6a, 0x8b, 0x98, 0x14, 0x5e, 0xb5, 0xb2, 0x1e, + 0x94, 0xd8, 0x27, 0x3d, 0x30, 0xe2, 0x39, 0x9b, 0x3f, 0x9d, 0x97, 0x95, 0x23, 0xc4, 0x3e, 0x25, + 0x5d, 0x41, 0x32, 0xbc, 0xc3, 0xf1, 0xec, 0xf9, 0x04, 0x18, 0x2d, 0x67, 0xf5, 0x0e, 0xd2, 0xee, + 0x2a, 0x9d, 0x4a, 0x4e, 0xc7, 0xcf, 0xe4, 0x79, 0x61, 0x07, 0x10, 0x07, 0x32, 0xce, 0xa1, 0x82, + 0xc8, 0x80, 0x85, 0x76, 0x40, 0x7b, 0x21, 0xf3, 0x08, 0xa3, 0x02, 0xf2, 0xf0, 0x75, 0x3b, 0x3a, + 0x0d, 0x9b, 0xe9, 0x49, 0x86, 0x0d, 0x53, 0x18, 0x8d, 0xac, 0x8f, 0xc0, 0xa6, 0x5c, 0xf7, 0xe5, + 0x4b, 0x2e, 0xb0, 0xef, 0xc2, 0xd0, 0xa7, 0x7c, 0x36, 0xeb, 0xb1, 0xc0, 0xae, 0x29, 0x1d, 0xa2, + 0x40, 0xd4, 0xc8, 0xa4, 0x0d, 0xfe, 0xe8, 0x11, 0x71, 0xf3, 0xcb, 0x64, 0xa6, 0x3b, 0x87, 0x87, + 0x87, 0xd6, 0x6e, 0xb5, 0xfe, 0x79, 0xcb, 0xae, 0x57, 0x6b, 0x75, 0xeb, 0x95, 0xe8, 0xf3, 0xc2, + 0xc0, 0xca, 0xee, 0xb9, 0xf6, 0xbd, 0x24, 0x49, 0xff, 0x88, 0x48, 0x4c, 0xfa, 0x94, 0xd1, 0x38, + 0xa9, 0xf0, 0x1b, 0x8d, 0x44, 0xcf, 0xe4, 0xbc, 0xb3, 0x29, 0x1a, 0x6a, 0x22, 0xfd, 0x98, 0xce, + 0x3d, 0xae, 0xdc, 0x93, 0xad, 0xd9, 0x2e, 0x96, 0xff, 0xa9, 0x1b, 0xc0, 0x16, 0x7e, 0xd8, 0xe2, + 0x0e, 0x22, 0x9f, 0x3e, 0xda, 0xfd, 0xd0, 0x15, 0xc0, 0x2c, 0xd3, 0x8d, 0x00, 0x11, 0x00, 0x11, + 0xac, 0x18, 0x22, 0xa0, 0xc1, 0xa0, 0x4f, 0xe3, 0xa1, 0x0c, 0x10, 0x40, 0x05, 0x0d, 0x8e, 0x67, + 0x0f, 0x83, 0x41, 0x9f, 0x7f, 0xbb, 0x5c, 0x85, 0x97, 0x2c, 0xf6, 0x82, 0x9e, 0x90, 0xba, 0xab, + 0x54, 0xd3, 0x39, 0x38, 0xfa, 0x7a, 0x7c, 0x2c, 0xa2, 0x77, 0x6b, 0x69, 0x23, 0x7f, 0xb6, 0x8f, + 0x8f, 0xf8, 0xf4, 0x09, 0xa7, 0x9f, 0xa8, 0x72, 0x15, 0x76, 0x02, 0x26, 0x36, 0xfc, 0x6c, 0xe4, + 0xb9, 0x05, 0xcd, 0xeb, 0xd3, 0x96, 0x8e, 0xbb, 0x65, 0xd5, 0x34, 0x29, 0xc4, 0x67, 0x28, 0x44, + 0x7e, 0x85, 0x48, 0x83, 0x14, 0x55, 0xdb, 0x5d, 0x3f, 0xfc, 0x69, 0x8f, 0x4a, 0x80, 0xf3, 0x2b, + 0xc6, 0x79, 0x8d, 0xe9, 0x64, 0xf4, 0x59, 0xa0, 0x27, 0x28, 0x3d, 0x14, 0x38, 0x28, 0x3d, 0x28, + 0xbd, 0x5e, 0x4a, 0xff, 0x08, 0x96, 0x2e, 0xc4, 0xd2, 0x1f, 0x41, 0xbc, 0x57, 0x1a, 0x67, 0x74, + 0xa9, 0x23, 0xc8, 0xba, 0x27, 0x2d, 0x40, 0x63, 0x43, 0x63, 0xaf, 0x98, 0xc6, 0x5e, 0x99, 0x30, + 0xe2, 0xce, 0xe9, 0xd5, 0xe1, 0xc5, 0x51, 0x7b, 0xff, 0xf0, 0xf6, 0xe8, 0x70, 0xdf, 0xfc, 0x48, + 0xe2, 0xa3, 0xc3, 0xfd, 0xdb, 0x83, 0xce, 0x65, 0xfb, 0xcb, 0xf1, 0xe1, 0x81, 0xc9, 0x51, 0x9f, + 0xe9, 0x38, 0x8e, 0xf6, 0x4d, 0x1f, 0xc1, 0xc5, 0xe5, 0x76, 0x7d, 0x77, 0x05, 0x06, 0xd1, 0x68, + 0xac, 0xc4, 0x20, 0x6e, 0xeb, 0x7f, 0xdd, 0x66, 0xe7, 0xfd, 0xf8, 0xb0, 0xfd, 0xed, 0x70, 0xe5, + 0x02, 0x8a, 0x81, 0xdf, 0xa6, 0xbb, 0xd7, 0x27, 0x8e, 0x4d, 0x46, 0x99, 0x0e, 0xb9, 0x21, 0xdc, + 0x74, 0x23, 0x40, 0x71, 0x40, 0x71, 0x2b, 0x86, 0xe2, 0xf8, 0xb7, 0xf7, 0x2b, 0x14, 0xb7, 0xcb, + 0x17, 0xff, 0xc6, 0x68, 0x1c, 0x70, 0x63, 0xa6, 0xca, 0xf7, 0xaa, 0xbd, 0x47, 0xec, 0x6e, 0xdb, + 0x3e, 0xba, 0xf9, 0x55, 0x7f, 0xfe, 0xd8, 0x7a, 0xfd, 0xf7, 0xc6, 0xaf, 0xed, 0xe7, 0xfc, 0xeb, + 0x75, 0xc3, 0x33, 0x90, 0xb3, 0xcb, 0xce, 0x5f, 0xc2, 0xa3, 0xf9, 0xef, 0xfb, 0xc3, 0xf9, 0x47, + 0x05, 0x06, 0x00, 0x9d, 0x0a, 0x24, 0x0a, 0x63, 0x66, 0x27, 0x11, 0xa5, 0x02, 0xc1, 0xd3, 0x53, + 0x6d, 0x40, 0x7d, 0x40, 0x7d, 0xc0, 0x08, 0x50, 0x4e, 0x23, 0xc0, 0xe1, 0xd5, 0x9f, 0x87, 0x17, + 0xa7, 0x87, 0x57, 0xb7, 0x97, 0xe7, 0x87, 0x87, 0x07, 0xe6, 0x5b, 0x01, 0xb2, 0x61, 0xdc, 0xd6, + 0xaa, 0xd5, 0x3f, 0xbe, 0x98, 0x4c, 0xdc, 0x26, 0xc3, 0x38, 0x59, 0x89, 0x61, 0xac, 0xc6, 0x62, + 0xac, 0xc4, 0x5a, 0xac, 0xc2, 0x52, 0xd4, 0x57, 0xe3, 0x78, 0xd7, 0xb7, 0x57, 0xe3, 0x7c, 0xd7, + 0xb7, 0x57, 0x61, 0x35, 0x1a, 0xab, 0xb1, 0xa9, 0x1a, 0x2b, 0x31, 0x8a, 0xed, 0xd5, 0x18, 0xc5, + 0x2a, 0x0c, 0xa2, 0xb9, 0x1a, 0xe7, 0x62, 0x77, 0x35, 0x86, 0xf1, 0xf5, 0xf4, 0x5f, 0xa7, 0x67, + 0xff, 0x3e, 0x85, 0x05, 0x7f, 0xa5, 0x0d, 0x30, 0x09, 0x23, 0x81, 0x4b, 0xfc, 0x30, 0xa0, 0xb6, + 0xef, 0x05, 0x3f, 0x6c, 0x16, 0x13, 0x2f, 0xe0, 0x89, 0x96, 0x9e, 0x2e, 0x74, 0x39, 0xbf, 0x45, + 0xc4, 0x7c, 0xc2, 0x78, 0x04, 0xe3, 0x91, 0x56, 0xe3, 0x51, 0xe9, 0x63, 0x3e, 0x4d, 0x94, 0xae, + 0x72, 0x33, 0x41, 0xe7, 0xca, 0xf6, 0xcb, 0xa7, 0xe8, 0xf3, 0x65, 0xff, 0xa5, 0xec, 0xbe, 0x35, + 0xce, 0xc8, 0x34, 0xfe, 0x3b, 0x57, 0x5a, 0x9d, 0x29, 0x09, 0x3e, 0x9b, 0x16, 0xf8, 0xb8, 0xfd, + 0xc7, 0x38, 0x13, 0x70, 0x62, 0xb1, 0xd0, 0xf2, 0x02, 0xd7, 0x7b, 0xf0, 0xdc, 0x01, 0xf1, 0xad, + 0xc3, 0xd1, 0x4b, 0x5f, 0x92, 0x02, 0xf3, 0xfa, 0x83, 0x6b, 0xc8, 0x85, 0xb2, 0x12, 0x32, 0xb9, + 0x84, 0xb9, 0x50, 0xf2, 0x26, 0x08, 0x9a, 0x3c, 0x28, 0x94, 0x28, 0x68, 0x66, 0xd3, 0x08, 0x24, + 0x0c, 0x5a, 0x74, 0x3c, 0x2f, 0x23, 0xea, 0x78, 0xdd, 0xa7, 0x2c, 0x9d, 0xb0, 0x1f, 0xf6, 0x3c, + 0x87, 0xf8, 0xd6, 0xe4, 0x35, 0x2f, 0x67, 0x32, 0x3d, 0xb4, 0x3f, 0xef, 0x3d, 0xe7, 0xfe, 0x3a, + 0x60, 0xf7, 0x5e, 0x32, 0xf5, 0x0f, 0x77, 0xd4, 0x0f, 0x83, 0x1e, 0xef, 0xc5, 0x74, 0x4e, 0x3c, + 0x25, 0x7c, 0x86, 0x65, 0x9c, 0x65, 0x79, 0x67, 0x5a, 0xd6, 0xd9, 0x96, 0x7e, 0xc6, 0xa5, 0x9f, + 0x75, 0xa9, 0x67, 0x5e, 0x8c, 0x72, 0x72, 0xdf, 0xab, 0xe4, 0xc5, 0x67, 0x33, 0xfb, 0x85, 0x3f, + 0x3f, 0xd2, 0x8c, 0xea, 0xdb, 0x11, 0x68, 0x43, 0x7d, 0xbe, 0x24, 0xfe, 0x85, 0x2a, 0x16, 0xce, + 0xdd, 0x28, 0x2e, 0xec, 0xc1, 0x9f, 0xc8, 0x73, 0x02, 0xd5, 0x96, 0xc9, 0xe8, 0xb9, 0xfc, 0xa0, + 0x97, 0x38, 0x13, 0x29, 0xd3, 0xcf, 0x91, 0xe4, 0x69, 0xda, 0x40, 0xc0, 0x94, 0xd7, 0x7b, 0xa8, + 0x23, 0x45, 0xa3, 0x4c, 0xa9, 0x8d, 0x14, 0x8d, 0x48, 0xd1, 0x08, 0x5a, 0x82, 0x14, 0x8d, 0xb2, + 0xa1, 0x87, 0x8e, 0x14, 0x8d, 0xc8, 0x74, 0x38, 0xff, 0x61, 0x64, 0x3a, 0x94, 0xa2, 0xd4, 0xd7, + 0x47, 0xee, 0xc1, 0x44, 0x3e, 0x5f, 0xee, 0x21, 0x2d, 0xc2, 0x52, 0x33, 0x8d, 0x4c, 0x87, 0x1a, + 0x2d, 0x29, 0xc8, 0x74, 0xa8, 0x52, 0xfb, 0x3b, 0xe1, 0x20, 0xc8, 0x66, 0x8b, 0x5b, 0xef, 0x4f, + 0x5a, 0x58, 0x0f, 0x0f, 0x07, 0x54, 0xaa, 0x31, 0x2a, 0x95, 0xdb, 0xc3, 0xe1, 0x05, 0xf6, 0x6e, + 0xb5, 0x5e, 0xfb, 0x5f, 0xbb, 0x9b, 0x0a, 0x93, 0x44, 0xdc, 0xc9, 0xf1, 0xb6, 0x41, 0x38, 0x16, + 0xf8, 0x8f, 0x92, 0x4a, 0x8d, 0x68, 0x86, 0x63, 0x81, 0xeb, 0xa8, 0x09, 0x2a, 0xb7, 0xc2, 0x1d, + 0x0b, 0x23, 0x35, 0xd3, 0x6c, 0x48, 0x70, 0x2d, 0xec, 0x0a, 0x34, 0x71, 0x91, 0xd5, 0x69, 0x16, + 0xb9, 0xb5, 0x63, 0x09, 0xc7, 0x37, 0x66, 0x1d, 0x39, 0xf1, 0x02, 0xe1, 0xbd, 0x3f, 0x69, 0x2c, + 0xbb, 0x8c, 0x24, 0x96, 0x16, 0xf3, 0x55, 0x7b, 0x47, 0x31, 0x71, 0x52, 0x70, 0x76, 0xe0, 0xf5, + 0xbc, 0xac, 0x8e, 0xb6, 0xac, 0x86, 0x4f, 0x69, 0x8f, 0x30, 0xef, 0x81, 0x8e, 0xcb, 0x5e, 0x0b, + 0xb7, 0xfa, 0xfc, 0x49, 0xc2, 0x52, 0x90, 0x47, 0xf9, 0x4b, 0x51, 0xdb, 0x6d, 0x34, 0x9a, 0x3b, + 0x8d, 0x46, 0x75, 0x67, 0x6b, 0xa7, 0xba, 0xb7, 0xbd, 0x5d, 0x6b, 0xf2, 0x5c, 0x7d, 0x33, 0x7d, + 0x75, 0x3e, 0x14, 0xf3, 0xf4, 0x8d, 0x2e, 0x5f, 0xe0, 0x27, 0x2e, 0x74, 0x72, 0xe7, 0x87, 0xce, + 0x0f, 0x9b, 0xc6, 0x71, 0x18, 0xcb, 0x41, 0x27, 0xaf, 0x1a, 0x04, 0x3a, 0x01, 0x3a, 0x01, 0x3a, + 0x01, 0x3a, 0x01, 0x3a, 0x01, 0x3a, 0x01, 0x3a, 0x01, 0x3a, 0xc9, 0x8b, 0x4e, 0x1c, 0x12, 0xc7, + 0x1e, 0x8d, 0x65, 0xe2, 0x93, 0x37, 0x4d, 0x02, 0xa1, 0x00, 0xa1, 0x00, 0xa1, 0x00, 0xa1, 0x00, + 0xa1, 0x00, 0xa1, 0x00, 0xa1, 0xac, 0x0e, 0x42, 0xe1, 0x94, 0x92, 0x12, 0x02, 0x0b, 0x26, 0x6d, + 0x89, 0x07, 0x18, 0x48, 0x94, 0x51, 0x63, 0xe1, 0x7d, 0x71, 0xb4, 0x6f, 0xd5, 0x9a, 0x8d, 0x2d, + 0xeb, 0x80, 0x76, 0xbd, 0xc0, 0x4b, 0xf7, 0x5e, 0x62, 0x85, 0x5d, 0xeb, 0x84, 0x04, 0xa4, 0x47, + 0xdd, 0xeb, 0xe0, 0xec, 0xee, 0xff, 0x51, 0x87, 0x25, 0x56, 0x37, 0x8c, 0xb3, 0x6b, 0x2f, 0xe3, + 0x1b, 0x68, 0xb6, 0xef, 0xfd, 0xa0, 0x56, 0x67, 0x72, 0xb3, 0x25, 0xd5, 0x27, 0xc9, 0xe7, 0x8a, + 0x84, 0x33, 0x2b, 0x09, 0x3d, 0xcc, 0x43, 0x11, 0xb2, 0xe2, 0x12, 0x94, 0x01, 0x8a, 0xb9, 0xc0, + 0x42, 0xf6, 0x1a, 0x81, 0x9d, 0x28, 0x62, 0x27, 0xb1, 0x23, 0x95, 0x99, 0xbc, 0x34, 0x07, 0x56, + 0x02, 0x56, 0x02, 0x56, 0x02, 0x56, 0x02, 0x56, 0x02, 0x56, 0x02, 0x56, 0x02, 0x56, 0xb2, 0x0e, + 0xac, 0xa4, 0xbe, 0x5b, 0xdb, 0x6b, 0x59, 0x17, 0xb4, 0x1f, 0x32, 0x6a, 0x9d, 0x52, 0xf6, 0x33, + 0x8c, 0x7f, 0x58, 0x27, 0x61, 0xe0, 0xb1, 0x30, 0xf6, 0x82, 0x9e, 0x75, 0xd2, 0xf9, 0x62, 0xd9, + 0xd7, 0x41, 0x76, 0xb7, 0xf3, 0x92, 0x11, 0x96, 0xec, 0x5f, 0xec, 0xb7, 0x7d, 0xaf, 0x17, 0x1c, + 0x8a, 0x60, 0x26, 0x30, 0x91, 0xf7, 0x98, 0x88, 0xe8, 0xba, 0x80, 0x7d, 0xa8, 0x61, 0x1f, 0xdd, + 0x98, 0x64, 0x69, 0x72, 0x64, 0x86, 0x96, 0xbe, 0x6d, 0x13, 0x3c, 0x04, 0x3c, 0x04, 0x3c, 0x04, + 0x3c, 0x04, 0x3c, 0x04, 0x3c, 0x04, 0x3c, 0x04, 0x18, 0x25, 0x2f, 0x46, 0xc9, 0x6e, 0xaa, 0xc7, + 0x83, 0x88, 0x51, 0xd7, 0x66, 0x8f, 0x52, 0x20, 0xca, 0x9b, 0x26, 0x81, 0x50, 0x80, 0x50, 0x80, + 0x50, 0x80, 0x50, 0x80, 0x50, 0x80, 0x50, 0x80, 0x50, 0x56, 0x07, 0xa1, 0xc0, 0x52, 0x3a, 0x5f, + 0x78, 0x23, 0x7e, 0xa3, 0x54, 0x80, 0x62, 0x2e, 0xb0, 0x40, 0xfc, 0x86, 0x19, 0xec, 0xe4, 0xff, + 0x91, 0xbb, 0x3b, 0x1a, 0xcb, 0xb4, 0x9f, 0xbe, 0x6e, 0x11, 0xdc, 0x04, 0xdc, 0x04, 0xdc, 0x04, + 0xdc, 0x04, 0xdc, 0x04, 0xdc, 0x04, 0xdc, 0x04, 0xf8, 0x24, 0x2f, 0x3e, 0xf1, 0x09, 0xa3, 0xb6, + 0x13, 0xfa, 0xbe, 0x97, 0xf0, 0x16, 0x83, 0x79, 0x0b, 0x50, 0xde, 0x34, 0x09, 0x84, 0x02, 0x84, + 0x02, 0x84, 0x02, 0x84, 0x02, 0x84, 0x02, 0x84, 0x02, 0x84, 0xb2, 0x3a, 0x08, 0x05, 0xd6, 0xd3, + 0xf9, 0xc2, 0x1b, 0xd6, 0xd3, 0x52, 0x01, 0x8a, 0xb9, 0xc0, 0x02, 0xd6, 0x53, 0x33, 0xd8, 0x49, + 0x9f, 0x38, 0xb6, 0x13, 0x06, 0x2c, 0x0e, 0x7d, 0x99, 0x26, 0xd4, 0x39, 0xcd, 0x82, 0xa5, 0x80, + 0xa5, 0x80, 0xa5, 0x80, 0xa5, 0x80, 0xa5, 0x80, 0xa5, 0x80, 0xa5, 0x00, 0xa9, 0xf0, 0x20, 0x95, + 0xe1, 0xc5, 0x7a, 0x3b, 0x7e, 0x94, 0x06, 0x52, 0x5e, 0x5a, 0x04, 0x3e, 0x01, 0x3e, 0x01, 0x3e, + 0x01, 0x3e, 0x01, 0x3e, 0x01, 0x3e, 0x01, 0x3e, 0x59, 0x1d, 0x7c, 0x02, 0x2b, 0xea, 0x7c, 0xe1, + 0x0d, 0x2b, 0x6a, 0xa9, 0x00, 0xc5, 0x5c, 0x60, 0x01, 0x2b, 0xaa, 0x39, 0xdc, 0x24, 0x22, 0x83, + 0x84, 0xca, 0xb6, 0xa1, 0xbe, 0x6a, 0x14, 0x0c, 0x05, 0x0c, 0x05, 0x0c, 0x05, 0x0c, 0x05, 0x0c, + 0x05, 0x0c, 0x05, 0x0c, 0x05, 0x28, 0x25, 0x3f, 0x4a, 0x79, 0x4c, 0xbc, 0xff, 0x8f, 0xda, 0xf4, + 0xd1, 0xa1, 0xd4, 0xa5, 0xae, 0x24, 0x94, 0xf2, 0xa6, 0x51, 0xa0, 0x14, 0xa0, 0x14, 0xa0, 0x14, + 0xa0, 0x14, 0xa0, 0x14, 0xa0, 0x14, 0xa0, 0x14, 0xa0, 0x94, 0xbc, 0x28, 0x25, 0x7c, 0xa0, 0x71, + 0x86, 0x28, 0x24, 0x9a, 0x52, 0xde, 0xb6, 0x09, 0x8c, 0x02, 0x8c, 0x02, 0x8c, 0x02, 0x8c, 0x02, + 0x8c, 0x02, 0x8c, 0x02, 0x8c, 0x02, 0x8c, 0x92, 0x17, 0xa3, 0x24, 0x5e, 0xd0, 0xf3, 0x65, 0xdf, + 0xea, 0x9d, 0x69, 0x14, 0x28, 0x05, 0x28, 0x05, 0x28, 0x05, 0x28, 0x05, 0x28, 0x05, 0x28, 0x05, + 0x28, 0x65, 0x75, 0x50, 0x0a, 0x22, 0xd2, 0xe6, 0x0b, 0x6f, 0x44, 0xa4, 0x95, 0x0a, 0x50, 0xcc, + 0x05, 0x16, 0x88, 0x48, 0x33, 0x84, 0xa1, 0x3c, 0xf5, 0xef, 0x42, 0x7f, 0x78, 0xbd, 0x45, 0x0e, + 0x3b, 0x99, 0x6e, 0x10, 0xcc, 0x04, 0xcc, 0x04, 0xcc, 0x04, 0xcc, 0x04, 0xcc, 0x04, 0xcc, 0x04, + 0xcc, 0x04, 0xcc, 0x04, 0xcc, 0x04, 0xcc, 0x04, 0xcc, 0x04, 0xcc, 0x64, 0x19, 0x66, 0x32, 0x08, + 0x5c, 0xf9, 0x01, 0x1e, 0x33, 0x8d, 0x82, 0xa1, 0x80, 0xa1, 0x80, 0xa1, 0x80, 0xa1, 0x80, 0xa1, + 0x80, 0xa1, 0x80, 0xa1, 0x80, 0xa1, 0xa0, 0xf6, 0xfe, 0x9c, 0x1a, 0xef, 0x5f, 0xc7, 0xa8, 0xe9, + 0xfc, 0x07, 0x43, 0xe9, 0xfd, 0xd2, 0x94, 0xde, 0x7f, 0xbd, 0x2c, 0xe0, 0x21, 0x0a, 0x78, 0x48, + 0x38, 0x60, 0xf6, 0x6e, 0xb5, 0x5e, 0xfb, 0x5f, 0x69, 0x24, 0x64, 0xa6, 0x45, 0x30, 0x10, 0x30, + 0x10, 0x30, 0x10, 0x30, 0x10, 0x30, 0x10, 0x30, 0x10, 0x30, 0x10, 0xe0, 0x93, 0xdc, 0xf8, 0x44, + 0x45, 0x6a, 0xf6, 0x05, 0xed, 0x02, 0xab, 0x00, 0xab, 0x00, 0xab, 0x00, 0xab, 0x00, 0xab, 0x00, + 0xab, 0x00, 0xab, 0x00, 0xab, 0x70, 0x61, 0x95, 0x51, 0x2a, 0x75, 0xf6, 0x28, 0x0f, 0xa6, 0xbc, + 0x34, 0x09, 0x84, 0x02, 0x84, 0x02, 0x84, 0x02, 0x84, 0x02, 0x84, 0x02, 0x84, 0x02, 0x84, 0xb2, + 0x3a, 0x08, 0x05, 0xfe, 0xdc, 0xf9, 0xc2, 0x1b, 0x11, 0xa7, 0xa5, 0x02, 0x14, 0x73, 0x81, 0x05, + 0x22, 0x4e, 0x0d, 0x62, 0x27, 0x72, 0xd3, 0xb3, 0xcf, 0x6d, 0x15, 0x1c, 0x05, 0x1c, 0x05, 0x1c, + 0x05, 0x1c, 0x05, 0x1c, 0x05, 0x1c, 0x05, 0x1c, 0x65, 0x9d, 0x71, 0xca, 0x07, 0x85, 0x7b, 0xb5, + 0xd2, 0x0e, 0x82, 0x90, 0x11, 0xc6, 0x9b, 0x76, 0xac, 0x92, 0x38, 0xf7, 0xb4, 0x4f, 0x22, 0xc2, + 0xee, 0x53, 0x09, 0xbc, 0x19, 0x46, 0x34, 0x70, 0x32, 0x0c, 0x61, 0x7b, 0x63, 0x44, 0x9a, 0x6c, + 0xce, 0xfb, 0x75, 0x93, 0x8e, 0xf0, 0xeb, 0x66, 0xc2, 0x08, 0xa3, 0x9b, 0x23, 0xe1, 0xcd, 0x03, + 0x7c, 0x2a, 0x09, 0x8b, 0x07, 0x0e, 0x0b, 0x46, 0x6a, 0x60, 0x02, 0x85, 0x6f, 0xc7, 0x10, 0xf9, + 0x76, 0x7f, 0xdc, 0xf8, 0x07, 0x35, 0x33, 0x9f, 0x63, 0xd6, 0x2b, 0xee, 0x20, 0xf2, 0xe9, 0xa3, + 0xdd, 0x0f, 0xdd, 0xfc, 0x6a, 0x6f, 0xa2, 0xea, 0xa6, 0x1b, 0xc9, 0xb9, 0xe2, 0x7c, 0x08, 0x91, + 0x1b, 0x19, 0x8a, 0x20, 0x42, 0x71, 0x24, 0x28, 0x8a, 0x00, 0xa5, 0x21, 0x3f, 0x69, 0x88, 0x4f, + 0x0a, 0xd2, 0x53, 0x2b, 0x53, 0xb8, 0x11, 0xdd, 0x64, 0xbd, 0x69, 0x30, 0xe8, 0xd3, 0x78, 0x28, + 0x96, 0x38, 0x16, 0x7d, 0xb4, 0xc5, 0x6b, 0x0d, 0x8e, 0x67, 0x0f, 0x83, 0x41, 0x9f, 0x7f, 0xbb, + 0x5c, 0x85, 0x97, 0x2c, 0xf6, 0x82, 0x9e, 0x18, 0xa0, 0xad, 0xa6, 0x73, 0x70, 0xf4, 0xf5, 0xf8, + 0x58, 0x04, 0xc8, 0xd6, 0xd2, 0x46, 0xfe, 0x6c, 0x1f, 0x1f, 0x55, 0xf4, 0xc2, 0xf9, 0xb0, 0x93, + 0xed, 0x4d, 0x81, 0xe1, 0x67, 0x23, 0x17, 0x42, 0x1c, 0xc3, 0x71, 0xb7, 0xac, 0x5a, 0x39, 0x75, + 0xb4, 0x12, 0xbd, 0x42, 0x03, 0x72, 0xe7, 0x53, 0xbb, 0xeb, 0x87, 0x3f, 0xc7, 0x11, 0x59, 0xfc, + 0xfa, 0x65, 0x5e, 0x63, 0x39, 0xa5, 0xc0, 0x01, 0xed, 0x92, 0x81, 0xcf, 0xb8, 0x78, 0x50, 0x25, + 0x83, 0x86, 0xf9, 0x36, 0xee, 0x0d, 0xf4, 0x20, 0xf4, 0xe0, 0x8a, 0xe9, 0xc1, 0xbb, 0x30, 0xf4, + 0x29, 0x11, 0xd2, 0x81, 0x35, 0xa5, 0x43, 0x94, 0xe0, 0x3a, 0x91, 0xe0, 0x32, 0x91, 0x60, 0x3b, + 0xea, 0x1c, 0x1e, 0x1e, 0x5a, 0xbb, 0xd5, 0xfa, 0xe7, 0xad, 0xc7, 0x92, 0x19, 0x1c, 0x65, 0xb9, + 0x33, 0xd4, 0xda, 0x1c, 0xa7, 0xe7, 0x4f, 0xb7, 0xe1, 0xf1, 0x83, 0x5a, 0xea, 0xae, 0x46, 0x5d, + 0x77, 0xa9, 0x23, 0xc8, 0x01, 0x27, 0x2d, 0x40, 0xf1, 0x41, 0xf1, 0xad, 0x98, 0xe2, 0xf3, 0x5c, + 0x1a, 0x30, 0x8f, 0x3d, 0xc5, 0xb4, 0x2b, 0xa2, 0xfc, 0x38, 0xac, 0xa1, 0x95, 0xce, 0xe8, 0xd5, + 0x5f, 0x48, 0x42, 0xc5, 0x7d, 0x7b, 0x9d, 0xd3, 0xab, 0xc3, 0x8b, 0xa3, 0xf6, 0xfe, 0xe1, 0xed, + 0xd1, 0xe1, 0x3e, 0xef, 0xd6, 0xc9, 0xec, 0xbd, 0x89, 0x90, 0x47, 0x41, 0x50, 0x1f, 0x8d, 0x87, + 0x73, 0x74, 0xb8, 0x7f, 0x7b, 0xd0, 0xb9, 0x6c, 0x7f, 0x39, 0x3e, 0x3c, 0x10, 0x90, 0xf3, 0x9f, + 0xca, 0x30, 0x8e, 0xa3, 0x7d, 0xd3, 0x47, 0x70, 0x71, 0xb9, 0x5d, 0xdf, 0x5d, 0x81, 0x41, 0x34, + 0x1a, 0x2b, 0x31, 0x88, 0xdb, 0xfa, 0x5f, 0xb7, 0xd9, 0x79, 0x3f, 0x3e, 0x6c, 0x7f, 0x3b, 0xd4, + 0x0d, 0x83, 0x6e, 0x8c, 0xb4, 0x5a, 0xdc, 0xff, 0xcc, 0x42, 0x1f, 0x88, 0xeb, 0xc6, 0x34, 0x49, + 0xf8, 0xc1, 0xd0, 0x9b, 0x76, 0x00, 0x89, 0x00, 0x89, 0x56, 0x0c, 0x12, 0xf1, 0x6f, 0xef, 0x57, + 0x90, 0x88, 0x23, 0xb0, 0xa1, 0x72, 0x4e, 0x18, 0xa3, 0x71, 0xc0, 0x0d, 0x40, 0x2a, 0xdf, 0xab, + 0xf6, 0x1e, 0xb1, 0xbb, 0x6d, 0xfb, 0xe8, 0xe6, 0x57, 0xfd, 0xf9, 0x63, 0xeb, 0xf5, 0xdf, 0x1b, + 0xbf, 0xb6, 0x9f, 0xf3, 0xaf, 0xd7, 0x0d, 0xcf, 0x40, 0xce, 0x2e, 0x3b, 0x7f, 0x09, 0x8f, 0xe6, + 0xbf, 0xef, 0x0f, 0xe7, 0x1f, 0x15, 0x23, 0x49, 0xa9, 0x14, 0x51, 0x0c, 0x39, 0x0c, 0x39, 0x0c, + 0x39, 0x0c, 0x39, 0x0c, 0x39, 0xcc, 0x2d, 0x87, 0x03, 0xda, 0x0b, 0x99, 0x47, 0x18, 0x75, 0x6d, + 0x29, 0xe1, 0x22, 0x0b, 0xda, 0x83, 0x74, 0x86, 0x74, 0x5e, 0x31, 0xe9, 0x8c, 0xc8, 0x11, 0x44, + 0x8e, 0x20, 0x72, 0x84, 0x5b, 0xdb, 0x44, 0x61, 0xcc, 0xec, 0x24, 0xa2, 0xd4, 0x95, 0xa2, 0x6c, + 0xa6, 0x9a, 0x83, 0xae, 0x81, 0xae, 0x59, 0x31, 0x5d, 0xb3, 0x32, 0x4e, 0xaa, 0xc3, 0xab, 0x3f, + 0x0f, 0x2f, 0x4e, 0x0f, 0xaf, 0x6e, 0x2f, 0xcf, 0x0f, 0x0f, 0x0f, 0xcc, 0xf7, 0x52, 0x65, 0xc3, + 0xb8, 0xad, 0x55, 0xab, 0x7f, 0x7c, 0x31, 0xd9, 0xb1, 0x30, 0x19, 0xc6, 0xc9, 0x4a, 0x0c, 0x63, + 0x35, 0x16, 0x63, 0x25, 0xd6, 0x62, 0x15, 0x96, 0xa2, 0xbe, 0x1a, 0xc7, 0xbb, 0xbe, 0xbd, 0x1a, + 0xe7, 0xbb, 0xbe, 0xbd, 0x0a, 0xab, 0xd1, 0x58, 0x8d, 0x4d, 0xd5, 0x58, 0x89, 0x51, 0x6c, 0xaf, + 0xc6, 0x28, 0x56, 0x61, 0x10, 0xcd, 0xd5, 0x38, 0x17, 0xbb, 0xab, 0x31, 0x8c, 0xaf, 0xa7, 0xff, + 0x3a, 0x3d, 0xfb, 0xf7, 0x29, 0x22, 0x4c, 0x96, 0x99, 0x3a, 0x19, 0x26, 0x0d, 0xd8, 0x31, 0x60, + 0xc7, 0x80, 0x1d, 0x03, 0x76, 0x0c, 0xd8, 0x31, 0x60, 0xc7, 0x80, 0x1d, 0x03, 0x76, 0x0c, 0xd8, + 0x31, 0x60, 0xc7, 0x80, 0x1d, 0x03, 0x76, 0x0c, 0xd8, 0x31, 0x60, 0xc7, 0x80, 0x1d, 0x03, 0x76, + 0x0c, 0x1d, 0x76, 0x8c, 0x84, 0x91, 0xc0, 0x25, 0x7e, 0x18, 0x50, 0xdb, 0xf7, 0x82, 0x1f, 0x36, + 0x8b, 0x89, 0x17, 0xf0, 0x04, 0x0c, 0x4d, 0x16, 0x61, 0x61, 0x8b, 0xc8, 0xf4, 0x01, 0x1b, 0x0c, + 0x6c, 0x30, 0x5a, 0x6d, 0x30, 0xfa, 0x33, 0x7d, 0x7c, 0x90, 0xfb, 0xcd, 0x25, 0xa7, 0xac, 0xd2, + 0x1e, 0xf4, 0xd2, 0xb5, 0xcc, 0xac, 0xb1, 0xcb, 0x8b, 0x0b, 0x4e, 0x09, 0xb7, 0x19, 0x3a, 0xb6, + 0xd7, 0x6d, 0x4d, 0xe5, 0x1f, 0x7c, 0xf3, 0xc1, 0xe6, 0x70, 0x3f, 0xb5, 0x26, 0xc9, 0x08, 0x47, + 0x7f, 0x67, 0x39, 0x09, 0xf3, 0xcb, 0xc1, 0xc4, 0x89, 0xbd, 0x68, 0x94, 0x4c, 0xb1, 0xd2, 0x76, + 0xdd, 0xc4, 0x3a, 0x6e, 0xff, 0x61, 0x25, 0x94, 0x31, 0x2f, 0xe8, 0x25, 0x16, 0x0b, 0x2d, 0x2f, + 0x70, 0xbd, 0x07, 0xcf, 0x1d, 0x10, 0x7f, 0x92, 0xc0, 0xdb, 0x7a, 0xe9, 0x1e, 0xa7, 0x75, 0xb9, + 0x66, 0x98, 0x64, 0xf3, 0x49, 0x0f, 0x92, 0x6d, 0x8e, 0x64, 0x4b, 0xe7, 0xa5, 0x64, 0x92, 0xed, + 0xc0, 0x8b, 0xf9, 0x96, 0x9b, 0xf4, 0x7a, 0x31, 0xed, 0x11, 0x46, 0x6d, 0xcf, 0x15, 0xb7, 0xec, + 0xbe, 0x6a, 0x8d, 0x73, 0xb2, 0xdf, 0x1c, 0xcf, 0xcb, 0x88, 0x3a, 0x5e, 0xf7, 0x29, 0xcb, 0xa5, + 0xef, 0x87, 0x3d, 0xcf, 0x21, 0xbe, 0x35, 0x79, 0xcd, 0xcb, 0x99, 0x4c, 0x0f, 0xed, 0xcf, 0x7b, + 0xcf, 0xb9, 0xbf, 0x0e, 0xd8, 0xbd, 0x97, 0x4c, 0xfd, 0xc3, 0x1d, 0xf5, 0xc3, 0xa0, 0x87, 0x4c, + 0xed, 0x22, 0x67, 0x5a, 0xd6, 0xd9, 0x96, 0x7e, 0xc6, 0xa5, 0x9f, 0x75, 0xa9, 0x67, 0x5e, 0x8c, + 0xff, 0x14, 0x9f, 0xa9, 0xdd, 0xa7, 0xa4, 0xcb, 0xe7, 0x6d, 0x9a, 0x51, 0x7d, 0x3b, 0x02, 0x6d, + 0x9c, 0x4f, 0xd2, 0x16, 0x2f, 0x01, 0x13, 0xbc, 0x6e, 0x2b, 0xcb, 0x30, 0x6c, 0xfa, 0xc5, 0x80, + 0x0f, 0x12, 0x29, 0x16, 0x6f, 0xfa, 0x68, 0x69, 0x69, 0xa3, 0x97, 0x5b, 0x8d, 0xf7, 0xc7, 0xbc, + 0xc4, 0x91, 0xa8, 0x24, 0x3f, 0x3d, 0xe6, 0xdc, 0x53, 0xd7, 0x7e, 0xf0, 0xc9, 0xf2, 0xc3, 0x7d, + 0x61, 0xdb, 0xaf, 0x1e, 0x5f, 0x72, 0x7e, 0xf3, 0x01, 0xbc, 0xdc, 0x4a, 0x81, 0x47, 0x09, 0x4c, + 0x0b, 0xfd, 0x1c, 0x43, 0x11, 0x91, 0xf2, 0xc2, 0x52, 0x5d, 0x58, 0x8a, 0xbf, 0x95, 0xda, 0xd9, + 0xc0, 0x0b, 0x62, 0x50, 0x79, 0x21, 0x59, 0xc5, 0x19, 0xef, 0x0a, 0x4e, 0x16, 0x35, 0x7a, 0x7e, + 0x3d, 0xb8, 0x49, 0xce, 0x2d, 0xbd, 0x3e, 0xe4, 0x24, 0xdf, 0x96, 0x2f, 0x3b, 0x3b, 0x71, 0x1c, + 0x9a, 0x24, 0xf9, 0x24, 0xf9, 0x62, 0x72, 0x32, 0xd5, 0x18, 0xc8, 0x80, 0xc0, 0x21, 0x02, 0x1b, + 0xe0, 0x3b, 0x64, 0xa6, 0xd3, 0x81, 0x74, 0xd4, 0xfc, 0xc4, 0x7e, 0xfa, 0x00, 0x35, 0x51, 0xb6, + 0xe9, 0x4d, 0x63, 0x93, 0x5a, 0x41, 0x28, 0xdb, 0xc4, 0xb3, 0x14, 0x2a, 0xca, 0x36, 0x35, 0xaa, + 0x7b, 0x0d, 0x94, 0x69, 0xd2, 0xf4, 0xb4, 0xb9, 0xa5, 0x64, 0x7f, 0xde, 0xd3, 0xa0, 0x4c, 0x55, + 0x64, 0x3f, 0x7f, 0x7e, 0xa1, 0xe1, 0x59, 0xfe, 0x18, 0xeb, 0x7f, 0xac, 0x7f, 0xb6, 0xf7, 0xf7, + 0x0f, 0x2f, 0x2f, 0xff, 0x59, 0xf2, 0x92, 0xb0, 0xd9, 0x54, 0x9a, 0x54, 0x0d, 0xf6, 0x6f, 0xe7, + 0xba, 0x14, 0x92, 0xf1, 0xb5, 0x35, 0x5d, 0xd2, 0x92, 0x8d, 0xb7, 0x5a, 0x3b, 0x43, 0xd4, 0xd6, + 0xb7, 0xe3, 0xf6, 0xa9, 0x45, 0x92, 0xc4, 0xeb, 0x05, 0xd4, 0xb5, 0x58, 0x98, 0xd9, 0xea, 0xb9, + 0xbd, 0x65, 0xba, 0x36, 0xde, 0xdb, 0xcd, 0xe7, 0x4e, 0xcd, 0xd4, 0x27, 0x79, 0x6f, 0x50, 0xb5, + 0x0f, 0x67, 0xf6, 0xe2, 0x92, 0x8b, 0x21, 0xe5, 0xe5, 0xcf, 0xd0, 0x33, 0x2a, 0xed, 0xae, 0x33, + 0xed, 0x3c, 0xf5, 0x42, 0x66, 0x87, 0x8e, 0xed, 0x84, 0xfd, 0x28, 0xa6, 0x49, 0x42, 0x5d, 0xdb, + 0xa7, 0xa4, 0x9b, 0x36, 0xfa, 0x5c, 0xe2, 0x3a, 0xcc, 0xaf, 0x65, 0xa3, 0x38, 0x83, 0x7f, 0xd3, + 0x1e, 0x48, 0x3c, 0x48, 0x3c, 0x48, 0x3c, 0x0f, 0x89, 0x4f, 0x8f, 0x8f, 0xcd, 0xd2, 0x36, 0x25, + 0xb8, 0xf6, 0x04, 0x48, 0x92, 0x58, 0x32, 0xb6, 0x97, 0xd9, 0x91, 0x91, 0x94, 0x6d, 0xd2, 0x5a, + 0x96, 0x9c, 0x6d, 0x08, 0xe2, 0x64, 0xe0, 0xe5, 0x2c, 0x4d, 0xdb, 0xd5, 0xc5, 0xd7, 0xd3, 0x7f, + 0x89, 0xe9, 0x5e, 0x41, 0x34, 0x28, 0x21, 0x6f, 0xdb, 0xcb, 0x41, 0x1a, 0x4e, 0x8e, 0x14, 0x1a, + 0x3b, 0x9a, 0x1a, 0xde, 0x54, 0x6e, 0xe2, 0x88, 0xe0, 0x19, 0x88, 0x40, 0x1f, 0x22, 0x08, 0x32, + 0x6b, 0x85, 0x24, 0x83, 0xfe, 0x74, 0x63, 0xc0, 0x02, 0xc0, 0x02, 0xc0, 0x02, 0x3c, 0x58, 0x00, + 0x06, 0xfd, 0x71, 0x47, 0x60, 0xd0, 0x87, 0x41, 0x7f, 0xf5, 0x56, 0x03, 0x06, 0xfd, 0x9c, 0x6d, + 0x19, 0x61, 0xd0, 0xcf, 0x50, 0x33, 0xec, 0xf9, 0x12, 0x1a, 0x7e, 0xd7, 0x9e, 0x3f, 0x9a, 0xea, + 0xd5, 0x37, 0xe7, 0x9f, 0x66, 0x92, 0x67, 0x68, 0x41, 0xf6, 0x12, 0xeb, 0x81, 0xf8, 0x9e, 0x6b, + 0x75, 0xc3, 0x38, 0x9d, 0xed, 0xe0, 0x87, 0x95, 0xcd, 0x07, 0xcc, 0xfa, 0x6a, 0xb7, 0xe3, 0xcc, + 0x96, 0xcc, 0xb9, 0x28, 0x30, 0xef, 0x83, 0xcc, 0xeb, 0x22, 0xf3, 0xd9, 0x0e, 0xcc, 0xa8, 0x53, + 0x22, 0x4e, 0xe6, 0xa7, 0x1b, 0x03, 0x99, 0x07, 0x99, 0x07, 0x99, 0xcf, 0xb9, 0x63, 0x06, 0x81, + 0x98, 0x8a, 0x9b, 0xd8, 0xf3, 0xf7, 0x04, 0xda, 0x18, 0x0d, 0xa7, 0x34, 0xd8, 0x59, 0xdc, 0xc2, + 0x21, 0xd1, 0xd2, 0x21, 0xd9, 0xe2, 0x21, 0x6f, 0xba, 0x94, 0x58, 0x40, 0x54, 0x59, 0x42, 0x94, + 0x73, 0x70, 0x75, 0x5c, 0x5c, 0x22, 0x13, 0x50, 0x62, 0x29, 0x51, 0x68, 0x31, 0x59, 0x85, 0x55, + 0x2b, 0x09, 0xb6, 0xbe, 0x29, 0xd2, 0x8d, 0x28, 0x5b, 0x36, 0xc7, 0x99, 0x28, 0x94, 0x27, 0x9e, + 0x79, 0x0a, 0x36, 0xce, 0x02, 0x39, 0xc1, 0x92, 0x87, 0x33, 0x0d, 0x7e, 0x6c, 0x54, 0xf7, 0xbe, + 0x57, 0xed, 0xc6, 0xcd, 0xef, 0x46, 0xf5, 0x7b, 0xd5, 0xde, 0xbd, 0xf9, 0x5e, 0xb5, 0xf7, 0x6e, + 0x7e, 0x7f, 0xaf, 0xd9, 0x5b, 0xc3, 0x5f, 0x7f, 0x6d, 0x3d, 0xa7, 0x7f, 0xed, 0x8d, 0xfe, 0xaa, + 0x7d, 0xaa, 0x8f, 0xfe, 0xde, 0xb8, 0xbe, 0xfe, 0x7c, 0x7d, 0xfd, 0x59, 0xa0, 0x01, 0x71, 0x4a, + 0x78, 0x23, 0x63, 0x4a, 0x65, 0x94, 0x92, 0x9c, 0x69, 0xf5, 0xbf, 0x45, 0x4e, 0xec, 0x3f, 0x2a, + 0x45, 0x1f, 0x65, 0x43, 0x68, 0xf2, 0xb1, 0x97, 0xb0, 0x36, 0x63, 0xb1, 0x18, 0xce, 0x3d, 0xf1, + 0x82, 0x43, 0x9f, 0xa6, 0x30, 0x5f, 0x50, 0x6b, 0xa4, 0x2a, 0x73, 0xaa, 0xa5, 0xda, 0x6e, 0xa3, + 0xd1, 0xdc, 0x69, 0x34, 0xaa, 0x3b, 0x5b, 0x3b, 0xd5, 0xbd, 0xed, 0xed, 0x5a, 0x93, 0x27, 0x45, + 0xf2, 0xa4, 0xf1, 0xb3, 0xd8, 0xa5, 0x31, 0x75, 0xbf, 0x3c, 0x55, 0x5a, 0x56, 0x30, 0xf0, 0x7d, + 0x19, 0x4d, 0x7d, 0x4d, 0x68, 0x2c, 0xa4, 0xce, 0x60, 0x56, 0x9f, 0x55, 0x3f, 0x30, 0xab, 0xc3, + 0xac, 0x3e, 0xee, 0xac, 0xda, 0x28, 0x79, 0xdf, 0x0f, 0x7f, 0x52, 0x37, 0x33, 0xe1, 0x26, 0x56, + 0x9f, 0x3c, 0x59, 0x77, 0xd4, 0x4a, 0xb2, 0xb4, 0x36, 0x1e, 0x7d, 0x6b, 0xcb, 0xbd, 0x0e, 0x5e, + 0x8c, 0xb9, 0x9f, 0x61, 0x62, 0xd7, 0x13, 0x39, 0xcf, 0xbf, 0x40, 0x30, 0xb7, 0x6b, 0xd4, 0x46, + 0xab, 0x64, 0x6e, 0x57, 0x7a, 0xdf, 0x5e, 0x70, 0xa2, 0xa4, 0xa4, 0x7d, 0x99, 0x4e, 0xa3, 0xb2, + 0x39, 0x4a, 0x4d, 0x51, 0x8e, 0xf4, 0xac, 0x8c, 0x0a, 0xe5, 0x62, 0x65, 0x54, 0x77, 0x8a, 0x8d, + 0x3a, 0x52, 0x6c, 0x14, 0xaa, 0x40, 0x90, 0x62, 0x63, 0xd9, 0x5d, 0x83, 0x14, 0x1b, 0x16, 0x9c, + 0x78, 0x12, 0x10, 0x19, 0x22, 0x72, 0x11, 0x91, 0x8b, 0x88, 0x5c, 0x44, 0xe4, 0xae, 0xe6, 0x6a, + 0x20, 0x22, 0x77, 0x15, 0x4d, 0x87, 0x48, 0xb1, 0x81, 0x14, 0x1b, 0x48, 0xb1, 0xb1, 0xda, 0x86, + 0x42, 0xa4, 0xd8, 0x50, 0xa7, 0x67, 0x90, 0x91, 0x02, 0x9c, 0x17, 0x9c, 0x17, 0x19, 0x29, 0x90, + 0x91, 0x62, 0xa6, 0x35, 0x64, 0xa4, 0x78, 0xf7, 0x20, 0x21, 0x23, 0x05, 0x12, 0x38, 0x40, 0x75, + 0x42, 0x75, 0xae, 0xa1, 0xea, 0x84, 0xb9, 0x78, 0x62, 0xa3, 0x84, 0xb9, 0x18, 0xe6, 0xe2, 0x95, + 0x5b, 0x0d, 0x98, 0x8b, 0x73, 0xb6, 0x85, 0x48, 0x53, 0x59, 0xba, 0x1f, 0x91, 0xa6, 0xb2, 0xe5, + 0x22, 0x12, 0x38, 0xe4, 0xdd, 0x83, 0x48, 0xe0, 0xa0, 0x5b, 0x67, 0x58, 0x30, 0x1e, 0xcf, 0x5d, + 0x55, 0xe4, 0x3b, 0x00, 0xf7, 0x05, 0xf7, 0x2d, 0x0b, 0xf7, 0x45, 0xbe, 0x03, 0x25, 0x06, 0x01, + 0x89, 0x86, 0x01, 0xc9, 0x06, 0x02, 0x79, 0xd3, 0xa5, 0xc4, 0x60, 0xa0, 0xca, 0x70, 0xa0, 0x9c, + 0xb2, 0xaa, 0xa3, 0xae, 0x12, 0x81, 0xb3, 0x12, 0xc3, 0x82, 0x42, 0x03, 0xc3, 0x2a, 0xac, 0x1a, + 0xf2, 0x1d, 0x20, 0xdf, 0x01, 0x5f, 0x83, 0xc8, 0x77, 0x80, 0x7c, 0x07, 0x0a, 0x8e, 0x32, 0xf2, + 0x1d, 0xf0, 0xaa, 0x4c, 0xe4, 0x3b, 0x58, 0xaa, 0x07, 0xb0, 0x42, 0x97, 0xc5, 0x0a, 0x08, 0x2b, + 0xb4, 0x42, 0x30, 0x8d, 0x7c, 0x07, 0x42, 0xfb, 0x11, 0xf9, 0x0e, 0x8a, 0xa6, 0x04, 0x2b, 0x6f, + 0x9d, 0x5e, 0xaf, 0xf4, 0x00, 0xc3, 0x5b, 0xf5, 0xaa, 0xb2, 0x03, 0x7c, 0x90, 0x38, 0x87, 0xbc, + 0x73, 0x27, 0x7d, 0xce, 0x2a, 0xb9, 0x72, 0x1e, 0xc4, 0x03, 0x87, 0x05, 0x23, 0xf1, 0xdc, 0x19, + 0xb7, 0x7c, 0x7b, 0x38, 0x6a, 0xf9, 0xf6, 0x72, 0xd4, 0xf2, 0xb7, 0xa5, 0x0d, 0xc9, 0xef, 0x4f, + 0xea, 0xdf, 0x7f, 0xe3, 0x9d, 0xe9, 0xae, 0xb4, 0x07, 0xbd, 0x54, 0x5a, 0x51, 0x77, 0x29, 0x04, + 0xb5, 0xdc, 0x3a, 0x4c, 0x14, 0xd4, 0x66, 0xe8, 0xd8, 0x5e, 0xb7, 0x35, 0x35, 0xdb, 0x6f, 0x3e, + 0x48, 0xff, 0xa6, 0xec, 0xbe, 0x35, 0x9e, 0xfa, 0x25, 0x27, 0xfb, 0x8d, 0x5a, 0xad, 0xb4, 0x5d, + 0x77, 0x74, 0x59, 0x24, 0xa1, 0x8c, 0x79, 0x41, 0x2f, 0xb1, 0x58, 0x68, 0x79, 0x81, 0xeb, 0x3d, + 0x78, 0xee, 0x80, 0xf8, 0xd6, 0x78, 0x01, 0xf2, 0x3b, 0x65, 0x73, 0xe6, 0x94, 0xc8, 0xed, 0xeb, + 0xe1, 0xf1, 0xed, 0x08, 0xf8, 0x72, 0x78, 0x35, 0xb6, 0xb0, 0xaf, 0x46, 0x58, 0xe9, 0x8a, 0xf9, + 0x62, 0xe4, 0xca, 0xa6, 0xbc, 0x39, 0x20, 0x2a, 0xaf, 0x25, 0x0a, 0x7f, 0x52, 0x14, 0x4e, 0xc1, + 0x34, 0xef, 0xcc, 0x1c, 0x06, 0x8e, 0x1f, 0x26, 0x5e, 0xd0, 0xb3, 0x9c, 0x30, 0x60, 0xc4, 0x0b, + 0x68, 0x9c, 0x01, 0x92, 0xa1, 0xfb, 0x7c, 0x02, 0xaa, 0x47, 0x68, 0xc5, 0xb9, 0x0e, 0x5c, 0xc2, + 0x88, 0x15, 0x06, 0xf3, 0xce, 0xd2, 0x67, 0xcb, 0xba, 0xba, 0xa7, 0x09, 0xb5, 0x48, 0x4c, 0xb3, + 0x46, 0x12, 0x46, 0x02, 0x97, 0xc4, 0xee, 0x75, 0x70, 0x5c, 0xff, 0x64, 0x4d, 0xba, 0x9d, 0xb0, + 0x27, 0x7f, 0xe8, 0xa0, 0xcf, 0x0d, 0x41, 0x85, 0x73, 0xbb, 0x54, 0x91, 0xdb, 0xa5, 0x50, 0xb0, + 0x5c, 0x48, 0x6e, 0x17, 0xd9, 0xf2, 0x41, 0x50, 0x19, 0xbf, 0x63, 0xef, 0xe4, 0xb1, 0x8a, 0xe4, + 0xb3, 0x7e, 0xf0, 0xe9, 0x18, 0xaf, 0xdb, 0x1a, 0x42, 0xa8, 0x91, 0xfa, 0x66, 0x4f, 0x51, 0x46, + 0xb4, 0x3d, 0x12, 0x10, 0xaf, 0xcb, 0x26, 0xda, 0x7b, 0x3f, 0xe9, 0x13, 0xc7, 0xfd, 0xa7, 0x15, + 0xc6, 0xd6, 0x12, 0x4f, 0x79, 0x94, 0xd2, 0xdd, 0x6a, 0x7d, 0x8b, 0xb8, 0xc7, 0xa4, 0xf7, 0x4f, + 0xcd, 0x3a, 0x8c, 0xc3, 0xd2, 0x21, 0x5d, 0x83, 0x69, 0x99, 0x56, 0x25, 0xb9, 0xbd, 0x44, 0xac, + 0x1a, 0x2f, 0xd6, 0x0b, 0xd7, 0xf5, 0xd2, 0x16, 0x88, 0xff, 0xa2, 0x49, 0xac, 0xe1, 0xd0, 0x06, + 0x71, 0x06, 0xfc, 0xad, 0x88, 0xc4, 0xa4, 0x4f, 0x19, 0x8d, 0x13, 0x2b, 0x5d, 0xb0, 0xeb, 0xe0, + 0xd5, 0xfd, 0x5f, 0x2b, 0x1b, 0xba, 0x97, 0x4c, 0x34, 0xd2, 0xa7, 0x74, 0x8a, 0x5e, 0x7f, 0xc5, + 0x4b, 0x2c, 0x12, 0x58, 0xa4, 0xd7, 0x8b, 0x69, 0x8f, 0xb0, 0x69, 0x8e, 0x9d, 0x5b, 0x01, 0x09, + 0x48, 0x64, 0x79, 0x36, 0x0d, 0x29, 0xe2, 0xf8, 0xb5, 0x8d, 0xa2, 0xe8, 0x65, 0x28, 0xb9, 0x44, + 0xbf, 0x11, 0xa3, 0x57, 0xf9, 0x58, 0xac, 0x04, 0xf6, 0xba, 0xc4, 0xa6, 0x7a, 0x97, 0xa7, 0xfe, + 0xfd, 0x9a, 0x2c, 0x9e, 0xb3, 0xbf, 0x99, 0x8d, 0xca, 0x7d, 0xe8, 0xbb, 0x36, 0xf3, 0xfa, 0xef, + 0x9f, 0xa0, 0x89, 0x84, 0x78, 0x79, 0xe4, 0x9d, 0x59, 0x5e, 0x0e, 0x1b, 0x2e, 0x8d, 0x05, 0xf3, + 0x60, 0xbf, 0xd7, 0x7a, 0x72, 0x99, 0xc9, 0xcf, 0x29, 0x47, 0xb8, 0x91, 0x1c, 0xb7, 0xa8, 0x98, + 0xd5, 0x53, 0x15, 0xc5, 0x46, 0x88, 0x65, 0xf9, 0x54, 0xc5, 0x19, 0xaf, 0x60, 0x4e, 0x43, 0xc4, + 0xe8, 0xb9, 0xd5, 0xa0, 0xfc, 0x4b, 0x6d, 0xb3, 0xd5, 0x23, 0xfc, 0xcb, 0x6c, 0xc3, 0x92, 0xd0, + 0x7d, 0x37, 0xfc, 0x29, 0x00, 0x8c, 0xb2, 0xa7, 0x73, 0x93, 0xfb, 0x2e, 0x19, 0xf8, 0x8c, 0xcb, + 0x0d, 0x5a, 0xa9, 0xe6, 0xd3, 0xc1, 0x37, 0x7c, 0xcc, 0xbd, 0x6a, 0x18, 0x73, 0xcf, 0x75, 0xcc, + 0xd6, 0x87, 0xb7, 0xe7, 0x39, 0x86, 0x7a, 0xbc, 0x2c, 0xdc, 0x91, 0xce, 0x2f, 0x11, 0xce, 0x5e, + 0xc0, 0xb6, 0xea, 0x3c, 0xcb, 0x3d, 0xda, 0xdb, 0x3b, 0x1c, 0x8f, 0x8a, 0xc5, 0xea, 0x8a, 0xc5, + 0xbb, 0x88, 0xc7, 0xee, 0x8f, 0x03, 0x39, 0x05, 0x83, 0x2c, 0xa5, 0x47, 0x6d, 0xca, 0x8b, 0xd2, + 0x7c, 0x16, 0x0b, 0x04, 0x92, 0x37, 0xc5, 0x8d, 0xfa, 0x5e, 0x63, 0xaf, 0xb9, 0x53, 0xdf, 0xdb, + 0x5e, 0xdd, 0xb9, 0xd6, 0xe4, 0xee, 0xbd, 0x29, 0xb5, 0xbb, 0x57, 0x5a, 0xba, 0x7c, 0x35, 0x19, + 0xdd, 0x07, 0x11, 0x3f, 0xa6, 0x19, 0x44, 0x40, 0x34, 0x40, 0x34, 0x40, 0x34, 0x40, 0x34, 0x40, + 0x34, 0x40, 0x34, 0x40, 0x34, 0x40, 0x34, 0xcf, 0x46, 0x44, 0xa1, 0x1d, 0x3e, 0x66, 0xdb, 0x6a, + 0x79, 0x89, 0xc6, 0x6f, 0x65, 0x0b, 0x1d, 0x9b, 0x3e, 0xb2, 0x16, 0xa3, 0x3e, 0xed, 0x53, 0x16, + 0x3f, 0xd9, 0x61, 0x60, 0x3b, 0xf7, 0x1c, 0xb7, 0x98, 0xde, 0x28, 0xca, 0x6c, 0x1f, 0x0b, 0x98, + 0xde, 0x64, 0x5b, 0xdd, 0x6e, 0x4a, 0x1b, 0x00, 0x38, 0xf1, 0x37, 0xe4, 0x2a, 0xa3, 0xb4, 0x44, + 0x50, 0xc0, 0x52, 0x2e, 0x99, 0x3c, 0xe5, 0x92, 0xb8, 0xca, 0x24, 0x71, 0xdb, 0xb5, 0xeb, 0xb0, + 0x6b, 0x4b, 0x84, 0xa1, 0xb0, 0x6b, 0x83, 0x05, 0x82, 0x05, 0x82, 0x05, 0x82, 0x05, 0x82, 0x05, + 0x82, 0x05, 0x82, 0x05, 0x16, 0xc0, 0x02, 0x61, 0x1e, 0x06, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x28, 0xda, 0xca, 0x5a, 0xa4, 0xa9, 0x2f, 0xc7, 0x95, + 0x68, 0xd5, 0x77, 0x71, 0xcb, 0x78, 0xfd, 0xe7, 0xf3, 0x66, 0x44, 0x03, 0xe2, 0xb3, 0x27, 0xfb, + 0x8e, 0x24, 0xd4, 0xb5, 0x89, 0x47, 0xdd, 0x91, 0x79, 0x74, 0x33, 0x19, 0x44, 0x99, 0x55, 0xdf, + 0x66, 0xf7, 0x31, 0x4d, 0xd2, 0x29, 0xb5, 0xfe, 0xc7, 0xaa, 0x5e, 0x07, 0x61, 0x6c, 0xfd, 0xdd, + 0x63, 0x31, 0x1d, 0x24, 0x34, 0xe7, 0x33, 0x5d, 0x9f, 0x44, 0xf6, 0xe8, 0x9f, 0xd3, 0x07, 0xd6, + 0xed, 0xba, 0x50, 0x59, 0x97, 0xa1, 0xbc, 0xd7, 0x8b, 0xfe, 0x4c, 0xc7, 0x94, 0x9e, 0x70, 0x8b, + 0x04, 0xae, 0x35, 0x3b, 0xa4, 0xec, 0xae, 0x2a, 0xfb, 0x19, 0x5a, 0xc4, 0xef, 0x85, 0xb1, 0xc7, + 0xee, 0xfb, 0xd9, 0xa5, 0xf1, 0xf1, 0x64, 0x5e, 0x07, 0xbe, 0x17, 0xfc, 0xb0, 0x58, 0x4c, 0x82, + 0x24, 0xbb, 0x1f, 0x93, 0x64, 0xed, 0xf4, 0x07, 0x09, 0xb3, 0xee, 0xa8, 0xd5, 0x1f, 0xb0, 0x01, + 0xf1, 0xfd, 0x27, 0x8b, 0x3e, 0x3a, 0xfe, 0x20, 0xf1, 0x1e, 0x70, 0x9f, 0x68, 0xb4, 0x53, 0xf5, + 0xcf, 0x3b, 0x2e, 0x10, 0xc9, 0x55, 0x89, 0x22, 0x37, 0x88, 0xd2, 0xd5, 0xbf, 0x4a, 0xdb, 0x50, + 0x70, 0x83, 0x68, 0xf4, 0xb6, 0x25, 0x2f, 0x0f, 0x65, 0xdf, 0x5e, 0xee, 0xde, 0x50, 0x15, 0xf7, + 0x86, 0x64, 0x88, 0x04, 0xfd, 0xf7, 0x86, 0x96, 0x26, 0xc2, 0x93, 0xd9, 0xf6, 0x29, 0xe9, 0xc6, + 0x74, 0xa9, 0xf9, 0x1e, 0x7b, 0x4b, 0x97, 0xa0, 0xba, 0x95, 0xf3, 0xd1, 0x79, 0xfb, 0xfc, 0x79, + 0xac, 0x29, 0xb3, 0xed, 0xa7, 0xe0, 0x10, 0xcc, 0x0a, 0xd4, 0xe5, 0x8f, 0xc4, 0x9c, 0x67, 0x71, + 0xb1, 0x0e, 0x17, 0xeb, 0x70, 0xb1, 0x0e, 0x01, 0x08, 0xc5, 0xf0, 0xfe, 0xfc, 0x01, 0x08, 0xd4, + 0x21, 0x4f, 0xf6, 0x3d, 0xf1, 0xbb, 0xb6, 0xef, 0x75, 0xa9, 0x40, 0x2c, 0xc2, 0x9b, 0x86, 0xe0, + 0x7d, 0x80, 0xf7, 0x01, 0xde, 0x07, 0x78, 0x1f, 0xe0, 0x7d, 0x80, 0xf7, 0x01, 0xde, 0x87, 0x82, + 0xbc, 0x0f, 0xb8, 0x6e, 0x37, 0xdd, 0xbd, 0x69, 0x5b, 0x2b, 0x3f, 0xd0, 0x79, 0xd5, 0x0a, 0x50, + 0x0e, 0x50, 0x0e, 0x50, 0x0e, 0x50, 0x0e, 0x50, 0x0e, 0x50, 0x0e, 0x50, 0x0e, 0x50, 0x4e, 0x09, + 0x50, 0x4e, 0x9f, 0x3c, 0xda, 0x2f, 0x0e, 0xec, 0x65, 0xd2, 0xc3, 0x2d, 0x14, 0xb8, 0xb3, 0x4d, + 0x01, 0xef, 0x00, 0xef, 0x00, 0xef, 0x00, 0xef, 0x00, 0xef, 0x00, 0xef, 0x00, 0xef, 0x00, 0xef, + 0x94, 0x00, 0xef, 0xbc, 0x89, 0xba, 0xe3, 0x47, 0x3b, 0x6f, 0x1b, 0x02, 0xd6, 0x01, 0xd6, 0x01, + 0xd6, 0x01, 0xd6, 0x01, 0xd6, 0x01, 0xd6, 0x01, 0xd6, 0x01, 0xd6, 0x29, 0x01, 0xd6, 0x99, 0xbd, + 0x98, 0x20, 0x50, 0xfa, 0x6a, 0xb6, 0x2d, 0x20, 0x1e, 0x20, 0x1e, 0x20, 0x1e, 0x20, 0x1e, 0x20, + 0x1e, 0x20, 0x1e, 0x20, 0x1e, 0x20, 0x1e, 0x5c, 0x75, 0x9e, 0x7b, 0xaf, 0x6b, 0xe1, 0x6d, 0x4e, + 0xa4, 0x37, 0x44, 0x7a, 0x43, 0xf9, 0xa0, 0x08, 0xb7, 0x0b, 0x70, 0xbb, 0x00, 0x4c, 0x05, 0x4c, + 0x05, 0x4c, 0x05, 0x4c, 0x05, 0x4c, 0x05, 0x4c, 0xa5, 0x34, 0x4c, 0x05, 0x41, 0xfa, 0x00, 0x0b, + 0x00, 0x0b, 0x00, 0x0b, 0x00, 0x0b, 0x00, 0x0b, 0x00, 0x0b, 0x00, 0x0b, 0xfa, 0xc1, 0x02, 0x62, + 0xdd, 0x01, 0x1b, 0x00, 0x1b, 0x00, 0x1b, 0x00, 0x1b, 0x00, 0x1b, 0x00, 0x1b, 0x00, 0x1b, 0x96, + 0x9c, 0x34, 0x84, 0x8c, 0x03, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x32, 0x2c, 0x31, 0x69, 0x88, 0xbc, 0x06, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, + 0x70, 0x00, 0x70, 0x40, 0xad, 0x26, 0x79, 0x3b, 0xaa, 0x1c, 0x01, 0xcc, 0x25, 0x2a, 0xda, 0xa4, + 0xaf, 0x40, 0x47, 0xee, 0xf4, 0xfd, 0xd6, 0xdf, 0x55, 0xea, 0x38, 0x1f, 0xb6, 0xf6, 0x25, 0x6d, + 0xac, 0x9d, 0xb6, 0xa5, 0xa0, 0x58, 0x41, 0x1c, 0x0e, 0x18, 0x75, 0xed, 0x07, 0x9f, 0x04, 0xcb, + 0x57, 0x29, 0x98, 0x7e, 0xc8, 0x8c, 0xf2, 0x04, 0x4b, 0x74, 0xd5, 0x32, 0xb2, 0x40, 0x41, 0x36, + 0x30, 0x94, 0x28, 0x90, 0xc8, 0x03, 0x44, 0x2f, 0x11, 0x2c, 0xb9, 0xd5, 0x44, 0x11, 0x7f, 0xf9, + 0xae, 0x11, 0x2c, 0xb7, 0x15, 0xd5, 0xa8, 0xbc, 0xdc, 0x17, 0x09, 0x96, 0x12, 0x78, 0x0b, 0x97, + 0x39, 0xe7, 0x1a, 0x9b, 0x4c, 0x63, 0x39, 0x86, 0xba, 0x1e, 0x44, 0x36, 0xdf, 0x76, 0x37, 0x86, + 0xca, 0x06, 0x9c, 0x55, 0xea, 0xc6, 0x52, 0x79, 0x8f, 0xe3, 0xd9, 0x51, 0xb7, 0xb5, 0x33, 0xd9, + 0x69, 0xfe, 0x5e, 0x6b, 0x56, 0x04, 0x08, 0xdb, 0x68, 0xf4, 0x4d, 0x81, 0x26, 0xc4, 0xf8, 0xbc, + 0xf8, 0x6c, 0x48, 0xe5, 0xf7, 0xb2, 0x79, 0xbe, 0x32, 0x0e, 0x2a, 0x9f, 0x8b, 0x4a, 0xe0, 0xff, + 0x52, 0xed, 0x00, 0x33, 0x4b, 0xd1, 0xdc, 0xde, 0xde, 0xda, 0x5e, 0xbf, 0xe5, 0xf8, 0x50, 0xcc, + 0xd3, 0x37, 0x1f, 0x34, 0x6e, 0x1e, 0x09, 0xb2, 0x30, 0x61, 0xb1, 0x17, 0xf4, 0x24, 0xc8, 0xc2, + 0xda, 0x2e, 0xae, 0xc3, 0xe3, 0x3a, 0x3c, 0x8f, 0x15, 0x65, 0xca, 0xbc, 0x50, 0xc0, 0x3d, 0x78, + 0x2f, 0x7a, 0x68, 0xe4, 0xa7, 0xb0, 0xd9, 0x53, 0x2b, 0x52, 0x63, 0x2f, 0x5a, 0xcf, 0x5b, 0xf0, + 0x91, 0x31, 0xe4, 0x95, 0xb8, 0x6e, 0x26, 0x4a, 0x12, 0x7e, 0x06, 0xfb, 0xd2, 0x04, 0x1f, 0x8d, + 0xad, 0x99, 0xe6, 0x8d, 0x8d, 0x40, 0x62, 0x05, 0x37, 0xbd, 0x1e, 0x0a, 0x9b, 0xf7, 0x30, 0xbc, + 0x3d, 0x14, 0xfc, 0x8b, 0xf5, 0xe6, 0x68, 0xf0, 0x2e, 0x15, 0xdf, 0x01, 0x11, 0x3e, 0x28, 0x32, + 0x0e, 0x8c, 0xb4, 0x83, 0x23, 0xeb, 0x00, 0x49, 0x3f, 0x48, 0xd2, 0x0f, 0x94, 0xcc, 0x83, 0x25, + 0x46, 0x36, 0x38, 0x29, 0x03, 0xf7, 0x81, 0x9b, 0x34, 0x90, 0xd3, 0xea, 0xff, 0xee, 0xa6, 0xcb, + 0xe5, 0x0d, 0x50, 0x74, 0x0c, 0xa5, 0x1d, 0x47, 0x99, 0xc7, 0x52, 0xfa, 0xf1, 0x94, 0x7d, 0x4c, + 0x95, 0x1d, 0x57, 0x65, 0xc7, 0x56, 0xc5, 0xf1, 0x95, 0x64, 0x71, 0x10, 0xdc, 0x6f, 0xa2, 0xc7, + 0x7a, 0x8a, 0x0f, 0xc9, 0xdb, 0x17, 0x2f, 0x6c, 0x49, 0xd6, 0x86, 0xe0, 0xf3, 0xaa, 0x28, 0x3f, + 0xee, 0x2a, 0x8e, 0xbd, 0xb2, 0xe3, 0xaf, 0x4a, 0x0c, 0x28, 0x17, 0x07, 0xca, 0xc5, 0x82, 0x4a, + 0xf1, 0x20, 0x47, 0x4c, 0x48, 0x12, 0x17, 0x93, 0x81, 0x72, 0x7b, 0x90, 0x96, 0xb2, 0x90, 0xd8, + 0x62, 0xd8, 0xfa, 0xef, 0xcd, 0x8d, 0x12, 0xdb, 0x3c, 0x27, 0x8c, 0xd1, 0x38, 0x10, 0xf6, 0xc6, + 0xcc, 0x34, 0xfc, 0xf1, 0x7b, 0xd5, 0xde, 0xbb, 0xf9, 0xfd, 0xbd, 0x66, 0xef, 0xdd, 0x0c, 0x7f, + 0xad, 0x65, 0xff, 0xfb, 0x55, 0x7f, 0xfe, 0x5d, 0xff, 0x5e, 0xb5, 0x1b, 0xa3, 0x4f, 0xeb, 0xdb, + 0xdf, 0xab, 0xf6, 0xf6, 0xcd, 0xc6, 0xc7, 0xeb, 0xeb, 0xcf, 0x79, 0x9f, 0xd9, 0xf8, 0xb5, 0xf5, + 0x2c, 0x6f, 0x7b, 0xde, 0xc8, 0x9c, 0xd6, 0xb3, 0xcb, 0xce, 0x5f, 0xca, 0xe6, 0xf6, 0xbf, 0x1f, + 0x75, 0xcd, 0xee, 0xc6, 0x3f, 0x24, 0xce, 0x6f, 0xa9, 0x8e, 0xbf, 0xa0, 0xb5, 0x7b, 0x61, 0xbb, + 0xd2, 0xac, 0xe0, 0xea, 0xa4, 0xa8, 0x0c, 0x7f, 0xdd, 0x50, 0xbb, 0xd9, 0x3e, 0x0d, 0x7a, 0x99, + 0xd9, 0x5b, 0x32, 0x6c, 0x7a, 0xdd, 0x3c, 0x10, 0x14, 0x10, 0x14, 0x10, 0xd4, 0x1a, 0x21, 0xa8, + 0x81, 0x17, 0xb0, 0x5d, 0x05, 0xd0, 0x69, 0x5b, 0x62, 0x93, 0x72, 0xa2, 0x58, 0xde, 0xfe, 0xc8, + 0x3d, 0x4d, 0x96, 0xec, 0x28, 0x97, 0x99, 0xc6, 0x25, 0x47, 0xbd, 0xcc, 0xb4, 0xaf, 0x2a, 0xec, + 0x62, 0x76, 0xeb, 0xc9, 0x0e, 0xc3, 0x50, 0x74, 0xea, 0x5e, 0x2f, 0x2d, 0x79, 0x54, 0xbf, 0xb4, + 0x5b, 0x75, 0xac, 0xad, 0x16, 0xb9, 0x2c, 0xbf, 0x35, 0x40, 0xee, 0x15, 0x82, 0xdc, 0x4c, 0xa6, + 0xba, 0x9d, 0xa8, 0xda, 0xac, 0x55, 0x49, 0x0b, 0x2c, 0x72, 0xb7, 0x7a, 0x31, 0x2a, 0xbe, 0xe8, + 0x9c, 0xb4, 0x2f, 0xfe, 0x23, 0x07, 0x44, 0xdd, 0x80, 0x4a, 0x80, 0x4a, 0x80, 0x4a, 0xac, 0xa9, + 0x31, 0xd6, 0x96, 0x28, 0xec, 0xa6, 0xc5, 0x40, 0xad, 0x21, 0xb1, 0xcd, 0xc3, 0x60, 0xd0, 0x97, + 0x7f, 0x16, 0xae, 0xc2, 0xcb, 0x61, 0xb8, 0xab, 0x0a, 0xb8, 0x58, 0xa9, 0xa6, 0x33, 0x3d, 0x16, + 0xd4, 0x0a, 0x70, 0x6e, 0x2d, 0x6d, 0xff, 0xf2, 0x70, 0xff, 0xec, 0xf4, 0x40, 0x9a, 0x2a, 0x50, + 0x84, 0xcb, 0x2b, 0x57, 0x61, 0x27, 0x3b, 0xb0, 0x0a, 0xa6, 0x79, 0x3c, 0xc3, 0x4a, 0x90, 0xf2, + 0xd4, 0xfc, 0xb6, 0xac, 0x5a, 0x49, 0x01, 0xed, 0x33, 0x00, 0x6d, 0x49, 0x00, 0x6d, 0xa1, 0x2e, + 0x7f, 0xc9, 0x13, 0x2f, 0x29, 0x82, 0x3b, 0x55, 0x35, 0x9b, 0x93, 0x70, 0xd3, 0xf1, 0x6f, 0xb9, + 0x02, 0xbb, 0xe5, 0x4f, 0xb7, 0x48, 0x72, 0x0e, 0x09, 0x01, 0x11, 0xf2, 0x02, 0x21, 0x24, 0x61, + 0x6e, 0xc4, 0x39, 0x95, 0x0a, 0x4b, 0x23, 0xce, 0x49, 0x3f, 0x46, 0x9e, 0xec, 0xb6, 0x54, 0xa9, + 0xc4, 0xb4, 0x2b, 0x63, 0xbf, 0x8d, 0x91, 0xf0, 0x8e, 0x84, 0xb6, 0xce, 0x47, 0x72, 0xf8, 0xf3, + 0xe7, 0x91, 0xec, 0xdc, 0x14, 0x5d, 0xbc, 0x62, 0xc4, 0x67, 0xbe, 0x3a, 0x93, 0xef, 0xae, 0x56, + 0x9e, 0xfa, 0x93, 0xef, 0xae, 0x93, 0x2c, 0x21, 0x5a, 0x87, 0x10, 0x85, 0x10, 0x35, 0x48, 0x88, + 0x22, 0x58, 0xb4, 0x48, 0xcc, 0xa4, 0xe2, 0xd8, 0x2b, 0x3b, 0xfe, 0xaa, 0xc4, 0x80, 0x72, 0x71, + 0xa0, 0x5c, 0x2c, 0xa8, 0x14, 0x0f, 0xe5, 0x64, 0xfa, 0x08, 0x16, 0x45, 0xb0, 0xe8, 0xab, 0x1f, + 0x04, 0x8b, 0x1a, 0x11, 0x2c, 0x5a, 0x0a, 0xc7, 0x6d, 0x18, 0x7b, 0x3d, 0x99, 0x99, 0x66, 0x26, + 0x8a, 0x6e, 0xd8, 0x2e, 0x20, 0x03, 0x20, 0x03, 0x20, 0xc3, 0x5a, 0x41, 0x86, 0x89, 0x43, 0x53, + 0xaa, 0x08, 0xb0, 0xe0, 0xd2, 0x7c, 0x69, 0x3d, 0x73, 0x69, 0x9e, 0x5d, 0xfd, 0x79, 0x78, 0xa1, + 0xce, 0xa1, 0x79, 0xd5, 0xbe, 0xea, 0xec, 0xab, 0x68, 0xbe, 0x9e, 0x36, 0x7f, 0xf0, 0xe7, 0xfe, + 0xb9, 0x8a, 0xc6, 0xb7, 0xd2, 0xc6, 0x8f, 0x3b, 0xa7, 0xff, 0xba, 0x3d, 0x6e, 0xff, 0x47, 0xcd, + 0xf4, 0x34, 0xd2, 0x57, 0x5c, 0xb4, 0x4f, 0x0f, 0xce, 0x4e, 0xd6, 0xd6, 0xd9, 0x9b, 0x2d, 0x9f, + 0xb0, 0x81, 0x6d, 0x6e, 0xd3, 0x53, 0x8b, 0xd7, 0xb2, 0xb6, 0x14, 0xbc, 0x60, 0x78, 0x6e, 0xd4, + 0xb8, 0xa9, 0x47, 0xdb, 0xa2, 0x65, 0x35, 0x54, 0xf8, 0xc0, 0x87, 0x47, 0x72, 0xe5, 0x1d, 0xe0, + 0xb8, 0x43, 0x04, 0x94, 0x0c, 0x94, 0x0c, 0x94, 0xbc, 0xc2, 0x28, 0x19, 0x77, 0x88, 0x24, 0xee, + 0x47, 0xdc, 0x21, 0x5a, 0x6a, 0xeb, 0xe1, 0x0e, 0xd1, 0x82, 0xa5, 0xc5, 0x1d, 0x22, 0x8d, 0x18, + 0xd1, 0x2a, 0xe3, 0x1d, 0x22, 0x5c, 0xa1, 0x59, 0x8e, 0xf5, 0xe1, 0x0a, 0x0d, 0x90, 0x34, 0x90, + 0x34, 0x90, 0x74, 0x89, 0x90, 0x34, 0xae, 0xd0, 0x58, 0xb8, 0x42, 0xa3, 0x11, 0x96, 0xe2, 0x0a, + 0x8d, 0x4a, 0x3c, 0x87, 0x1b, 0x24, 0xc6, 0xdd, 0x20, 0xc9, 0x51, 0x61, 0x52, 0xfe, 0x6c, 0x8b, + 0x44, 0x40, 0x3f, 0xc4, 0xb1, 0xc4, 0x2b, 0x24, 0x59, 0x6b, 0x48, 0x96, 0xab, 0x0d, 0x5d, 0x22, + 0xfe, 0x19, 0xf1, 0xcf, 0x7f, 0x7b, 0xb4, 0xed, 0x5e, 0x1c, 0x0e, 0x14, 0xc4, 0x41, 0x4f, 0xb5, + 0x2d, 0x97, 0x6c, 0xd6, 0x40, 0x36, 0x41, 0x36, 0x41, 0x36, 0x25, 0x98, 0xa9, 0x24, 0x89, 0x91, + 0x49, 0x83, 0x92, 0x52, 0xeb, 0x2f, 0x3c, 0x04, 0x52, 0x52, 0xed, 0x2b, 0x16, 0x2b, 0xca, 0xc4, + 0x8b, 0x4a, 0x31, 0xa3, 0x5c, 0xdc, 0xa8, 0x16, 0x3b, 0xda, 0xc4, 0x8f, 0x36, 0x31, 0xa4, 0x43, + 0x1c, 0xc9, 0xe7, 0xa5, 0x2a, 0x0c, 0x09, 0xb2, 0xc5, 0xd4, 0xa4, 0x61, 0xe2, 0x38, 0x34, 0x62, + 0x76, 0x3f, 0x74, 0x15, 0x6e, 0xc8, 0x49, 0x99, 0x9e, 0xa9, 0x97, 0x29, 0xda, 0x29, 0x2a, 0xdc, + 0x0e, 0x33, 0x2f, 0xc9, 0xfc, 0x66, 0x15, 0x25, 0xed, 0xdf, 0x28, 0x9a, 0x17, 0xb9, 0x4e, 0x0a, + 0x6d, 0x82, 0x5e, 0x87, 0xc0, 0xd7, 0x26, 0xf8, 0x75, 0x29, 0x00, 0xed, 0x8a, 0x40, 0xbb, 0x42, + 0xd0, 0xa9, 0x18, 0xd4, 0x28, 0x08, 0x45, 0x8a, 0x62, 0x32, 0x31, 0xd2, 0x9d, 0x28, 0x0b, 0x4f, + 0xcb, 0x5d, 0x18, 0xfa, 0x94, 0x04, 0x2a, 0xcf, 0xcb, 0x18, 0x9d, 0xd6, 0x8c, 0x5a, 0x02, 0x45, + 0x49, 0x95, 0x66, 0xde, 0xa3, 0x3c, 0xc9, 0x92, 0xfa, 0x93, 0xa0, 0x22, 0x1c, 0x88, 0xb8, 0x0f, + 0x34, 0x66, 0x5e, 0x42, 0x53, 0xf9, 0x30, 0x34, 0x5e, 0x3f, 0x10, 0x5f, 0x03, 0xc8, 0x99, 0xff, + 0x5e, 0x93, 0xf1, 0x4e, 0xad, 0x5a, 0x05, 0xda, 0x01, 0xda, 0x01, 0xda, 0x01, 0xda, 0x59, 0x77, + 0xb4, 0x33, 0xf0, 0x02, 0x56, 0x6b, 0x6a, 0x00, 0x3b, 0x4d, 0x85, 0xaf, 0x50, 0x13, 0xad, 0xfd, + 0xf6, 0x47, 0xed, 0x71, 0xb7, 0x54, 0x47, 0x73, 0xcf, 0xbc, 0x6c, 0x1c, 0x02, 0x5c, 0xfb, 0xa4, + 0xe7, 0x7d, 0xba, 0x22, 0x82, 0x67, 0xf7, 0xba, 0xea, 0x08, 0x61, 0x4d, 0x62, 0xe1, 0xf5, 0x56, + 0x21, 0x8f, 0xfa, 0xb7, 0x4a, 0xa3, 0xba, 0xb7, 0x8d, 0xdd, 0x62, 0x84, 0x6a, 0x52, 0xdf, 0xfa, + 0x0d, 0xd8, 0x2b, 0xd8, 0xeb, 0xb2, 0xd3, 0x12, 0xc5, 0x94, 0xf6, 0x23, 0xa6, 0x9e, 0xae, 0x8e, + 0x5f, 0x64, 0x32, 0x3f, 0x4d, 0xa1, 0x37, 0x08, 0x2a, 0x08, 0x2a, 0x08, 0x2a, 0x08, 0xea, 0xba, + 0x13, 0x54, 0x98, 0xe3, 0x01, 0x68, 0x4a, 0x0c, 0x68, 0x6c, 0x97, 0xfa, 0xe4, 0x49, 0x1b, 0xac, + 0x19, 0xbd, 0xce, 0x64, 0x70, 0x03, 0xd3, 0x3b, 0x90, 0x0d, 0x90, 0x0d, 0x90, 0xcd, 0xda, 0x23, + 0x1b, 0x98, 0xde, 0x97, 0xfe, 0x59, 0x55, 0xd3, 0x7b, 0x15, 0xc6, 0x54, 0x33, 0xc4, 0xc2, 0xeb, + 0xad, 0x52, 0x84, 0xe9, 0x7d, 0xab, 0x59, 0xc5, 0x6e, 0x31, 0x43, 0x35, 0xa9, 0x6f, 0x1d, 0xa6, + 0x77, 0x30, 0xd5, 0x1c, 0x4c, 0xd5, 0x0b, 0x63, 0x8f, 0x69, 0x21, 0xa9, 0xa3, 0x37, 0x21, 0x38, + 0x0c, 0x0c, 0x15, 0x0c, 0x15, 0x0c, 0x15, 0x0c, 0xd5, 0x78, 0x86, 0xba, 0xab, 0x81, 0xa0, 0x6e, + 0x83, 0xa0, 0x96, 0x94, 0xa0, 0x22, 0x36, 0x0c, 0x04, 0x75, 0xc9, 0xad, 0x52, 0xdf, 0x6e, 0x60, + 0xb3, 0x80, 0x9f, 0x82, 0x9f, 0x82, 0x9f, 0xe6, 0x9b, 0x96, 0x07, 0x2f, 0x66, 0x03, 0xe2, 0x4f, + 0x6a, 0xed, 0x29, 0xa7, 0xa9, 0x6f, 0x5f, 0x08, 0x5e, 0x06, 0x5e, 0x06, 0x5e, 0x06, 0x5e, 0x66, + 0x0c, 0x2f, 0x7b, 0xa9, 0x33, 0xa6, 0x23, 0x2c, 0x6a, 0x4f, 0xe1, 0x3b, 0x46, 0x73, 0x66, 0x3c, + 0x39, 0x53, 0x5c, 0x34, 0xf6, 0xdd, 0x35, 0xda, 0xd5, 0xf0, 0x2e, 0x55, 0x85, 0x50, 0x17, 0xbe, + 0xd0, 0xbc, 0xe2, 0xb3, 0x0b, 0xf1, 0xb0, 0x8e, 0xe5, 0x51, 0x59, 0xac, 0x76, 0xe1, 0x5b, 0xcd, + 0x2c, 0x62, 0xab, 0x97, 0xb7, 0x68, 0xa2, 0xfe, 0x7a, 0xc5, 0x5c, 0x13, 0x62, 0x4e, 0x96, 0x98, + 0xcb, 0x4e, 0x03, 0xb1, 0xbb, 0x6d, 0xfb, 0xe8, 0xe6, 0x57, 0xed, 0x53, 0xe3, 0xb9, 0xb5, 0xf1, + 0x6b, 0xe7, 0xf9, 0xed, 0x87, 0xbf, 0xe7, 0x7d, 0xad, 0xf6, 0x69, 0xe7, 0xb9, 0xb5, 0xe0, 0x5f, + 0x9a, 0xcf, 0xad, 0x25, 0xdb, 0xd8, 0x7e, 0xfe, 0x38, 0xf3, 0xd5, 0xf4, 0xf3, 0xfa, 0xa2, 0x07, + 0x1a, 0x0b, 0x1e, 0xd8, 0x5a, 0xf4, 0xc0, 0xd6, 0x82, 0x07, 0x16, 0x76, 0xa9, 0xbe, 0xe0, 0x81, + 0xed, 0xe7, 0xdf, 0x33, 0xdf, 0xff, 0x38, 0xff, 0xab, 0xcd, 0xe7, 0x8d, 0xdf, 0x8b, 0xfe, 0x6d, + 0xe7, 0xf9, 0x77, 0x6b, 0x63, 0x03, 0x82, 0x5f, 0x58, 0xf0, 0x63, 0xdb, 0xea, 0xdf, 0xb6, 0xe6, + 0x2b, 0x42, 0x18, 0x1e, 0xb3, 0x33, 0x74, 0xec, 0x25, 0xac, 0xcd, 0x58, 0xac, 0x96, 0x35, 0x9e, + 0x78, 0xc1, 0xa1, 0x9f, 0x65, 0xef, 0x51, 0x6c, 0x2b, 0xaf, 0x9c, 0x90, 0xc7, 0xa9, 0x37, 0xd5, + 0x76, 0x1b, 0x8d, 0xe6, 0x4e, 0xa3, 0x51, 0xdd, 0xd9, 0xda, 0xa9, 0xee, 0x6d, 0x6f, 0xd7, 0x9a, + 0x35, 0x95, 0x8e, 0xbe, 0xb3, 0xd8, 0xa5, 0x31, 0x75, 0xbf, 0x3c, 0x55, 0x5a, 0x56, 0x30, 0xf0, + 0x7d, 0x1d, 0xaf, 0xfa, 0x9a, 0xd0, 0x58, 0xa9, 0x33, 0x00, 0x26, 0xef, 0xc2, 0x45, 0x8b, 0x4a, + 0x93, 0x77, 0x56, 0x62, 0x22, 0xb6, 0x3d, 0x57, 0x9f, 0xd1, 0xfb, 0xe5, 0x95, 0x30, 0x7b, 0xcf, + 0x87, 0x53, 0x30, 0x7b, 0x73, 0x2c, 0x3a, 0xcc, 0xde, 0x65, 0x87, 0x47, 0x08, 0x47, 0x5a, 0x56, + 0x74, 0x21, 0x1c, 0x69, 0x39, 0x54, 0x89, 0x70, 0x24, 0xf9, 0x5b, 0x1d, 0xe1, 0x48, 0x92, 0xb6, + 0x4a, 0x7d, 0x1b, 0x99, 0xaa, 0xcc, 0xe1, 0xed, 0xb0, 0x0a, 0x80, 0x9b, 0x15, 0xde, 0xa2, 0xec, + 0x22, 0x17, 0x8a, 0x17, 0x52, 0x6d, 0x69, 0xc3, 0x87, 0x38, 0x8e, 0x36, 0x5f, 0xea, 0x7d, 0x6d, + 0x8e, 0xea, 0xf4, 0x94, 0xb5, 0x76, 0xa6, 0xc4, 0x2a, 0x5a, 0x93, 0x69, 0xb2, 0x59, 0x4c, 0x9c, + 0x1f, 0x2a, 0x0a, 0xcb, 0xbe, 0x38, 0xd2, 0x66, 0xdf, 0x85, 0x4a, 0x48, 0xa8, 0x84, 0x54, 0x34, + 0xcd, 0x46, 0x25, 0x24, 0x6d, 0x4a, 0x42, 0x59, 0x25, 0x24, 0x45, 0x85, 0xdb, 0x66, 0x0e, 0x93, + 0x92, 0x02, 0x6e, 0x8a, 0xc5, 0x97, 0x72, 0x31, 0xa6, 0x43, 0x9c, 0x69, 0x13, 0x6b, 0xba, 0xc4, + 0x9b, 0x76, 0x31, 0xa7, 0x5d, 0xdc, 0xe9, 0x14, 0x7b, 0x6a, 0x69, 0x95, 0x2a, 0xf2, 0xa3, 0x4a, + 0x1c, 0x4e, 0x5e, 0x30, 0xbe, 0xa3, 0x6e, 0xbb, 0xd4, 0x89, 0xe9, 0x68, 0x0d, 0x14, 0xef, 0xe7, + 0xb7, 0xf7, 0xe3, 0xa7, 0xde, 0xad, 0x78, 0x9f, 0xe9, 0xb8, 0x31, 0x3f, 0x79, 0x59, 0x55, 0x6d, + 0x5c, 0x82, 0xe2, 0x58, 0x1a, 0xc5, 0x8e, 0x2b, 0x6d, 0x2a, 0x47, 0xa7, 0xea, 0xd1, 0xae, 0x82, + 0x74, 0xab, 0xa2, 0xc2, 0x54, 0x52, 0x61, 0xaa, 0xa9, 0x08, 0x15, 0xa5, 0x56, 0x55, 0x29, 0x56, + 0x59, 0x93, 0x09, 0x53, 0xee, 0x08, 0x9b, 0x39, 0x6d, 0xaa, 0x1d, 0x62, 0x6f, 0x45, 0xa3, 0x06, + 0x8b, 0xba, 0x26, 0x07, 0xd9, 0xf8, 0x47, 0x8f, 0xf4, 0xb0, 0x74, 0x3b, 0xcc, 0x26, 0x2f, 0xd5, + 0x9c, 0x68, 0x6e, 0xf2, 0xde, 0xa2, 0x7c, 0x22, 0x2f, 0x47, 0x44, 0xb7, 0x6f, 0x44, 0x93, 0x94, + 0x79, 0xbd, 0xa5, 0x34, 0x3a, 0xd6, 0x66, 0xb6, 0x94, 0xb6, 0xfb, 0xfe, 0xd8, 0x54, 0x8a, 0x15, + 0xa3, 0xbe, 0xb7, 0x18, 0x7d, 0xbf, 0x46, 0x97, 0x63, 0x6e, 0xf2, 0x3e, 0xed, 0x0e, 0x3a, 0xf5, + 0x1b, 0x41, 0xe1, 0x12, 0x55, 0x32, 0x0f, 0xca, 0x8b, 0xeb, 0x4b, 0x1f, 0xad, 0x7f, 0xfb, 0x62, + 0xf0, 0x54, 0xf0, 0x54, 0xf0, 0x54, 0xf0, 0x54, 0xf0, 0xd4, 0xd1, 0x69, 0x4b, 0xb5, 0x56, 0x4c, + 0xbb, 0x3a, 0x6f, 0x8a, 0xee, 0xe8, 0xb9, 0x29, 0x3a, 0x8a, 0xbc, 0x70, 0x6c, 0xaf, 0xdb, 0x9a, + 0x8a, 0xb4, 0x78, 0xf3, 0xc1, 0xe8, 0xef, 0x20, 0x9d, 0x0e, 0xa3, 0xb7, 0x8e, 0x96, 0x0b, 0x4b, + 0xd3, 0x8c, 0x59, 0xcf, 0xc5, 0xa5, 0x69, 0x42, 0x55, 0xd8, 0x05, 0xa6, 0x49, 0x27, 0xf4, 0x5d, + 0x64, 0x9a, 0x7d, 0xa5, 0xf2, 0x0b, 0x4d, 0xc0, 0xea, 0xe6, 0x60, 0x75, 0x44, 0x4d, 0xce, 0x79, + 0x8f, 0xd6, 0xa0, 0xbb, 0xd9, 0xf0, 0x30, 0x25, 0x71, 0x78, 0xea, 0x56, 0x5c, 0xc5, 0xe5, 0xb9, + 0x84, 0x11, 0x46, 0xd5, 0xc7, 0xb5, 0x0c, 0x5f, 0x63, 0x78, 0x58, 0x4b, 0x1d, 0x61, 0x2d, 0xa5, + 0xe1, 0x68, 0x08, 0x6b, 0x59, 0x5f, 0xed, 0x84, 0xb0, 0x16, 0xb9, 0xd3, 0x89, 0xb0, 0x96, 0xbc, + 0xaa, 0x06, 0xe6, 0xc2, 0x12, 0xab, 0x20, 0xdd, 0xaa, 0xa8, 0x30, 0x95, 0x54, 0x98, 0x6a, 0x2a, + 0x42, 0x45, 0xa9, 0xa7, 0x68, 0x16, 0xc2, 0x5a, 0x24, 0x88, 0x46, 0x84, 0xb5, 0x88, 0x98, 0xcc, + 0x10, 0xd6, 0xa2, 0xb1, 0x03, 0x08, 0x6b, 0x51, 0xbd, 0xa5, 0x10, 0xd6, 0x82, 0xb0, 0x96, 0xdc, + 0x10, 0x1e, 0xd1, 0x18, 0x33, 0x9b, 0x0a, 0xd1, 0x18, 0xa0, 0x57, 0xa0, 0x57, 0xa0, 0x57, 0xa0, + 0x57, 0x65, 0xa3, 0x57, 0x88, 0xc6, 0x40, 0x34, 0x06, 0x1f, 0xd1, 0x43, 0x34, 0xc6, 0xaa, 0x46, + 0x63, 0xc0, 0x4d, 0x63, 0xad, 0x53, 0x10, 0xc1, 0xd0, 0xb7, 0x8d, 0x24, 0x4f, 0xe5, 0xdf, 0x32, + 0x45, 0x6f, 0x95, 0x8a, 0x92, 0x00, 0x8e, 0x78, 0xe0, 0xb0, 0x60, 0x04, 0x47, 0x3a, 0xe3, 0x77, + 0xde, 0x5e, 0x64, 0x1d, 0xfe, 0xe6, 0x93, 0xe0, 0xb6, 0x13, 0x3d, 0x34, 0x6e, 0xdb, 0xc3, 0x5e, + 0xde, 0x7e, 0x8b, 0xe3, 0xe8, 0x8f, 0xb4, 0x7f, 0xb7, 0x93, 0xef, 0x5e, 0x8d, 0xbb, 0xb7, 0x06, + 0xf9, 0xa8, 0xd4, 0xc4, 0xbb, 0x28, 0x8d, 0x73, 0x51, 0x9e, 0x75, 0xaa, 0x8e, 0xac, 0x53, 0xda, + 0x58, 0x2d, 0xb2, 0x4e, 0xad, 0x9e, 0xd6, 0x52, 0x96, 0x75, 0x8a, 0x38, 0x0e, 0x8d, 0x98, 0xdd, + 0x0f, 0x5d, 0x0d, 0x21, 0x7a, 0xd3, 0x2f, 0x53, 0x15, 0xb8, 0xa3, 0x21, 0xd2, 0xa4, 0x92, 0x01, + 0x7c, 0x35, 0x70, 0xec, 0x06, 0x59, 0xfe, 0x75, 0x0b, 0x7c, 0x6d, 0x82, 0x5f, 0x97, 0x02, 0xd0, + 0xae, 0x08, 0xb4, 0x2b, 0x04, 0x9d, 0x8a, 0xc1, 0x4c, 0x66, 0xac, 0x2f, 0xcb, 0xff, 0x5d, 0x18, + 0xfa, 0x94, 0x04, 0x3a, 0x2a, 0xdb, 0xd6, 0xd6, 0x38, 0x8a, 0x9e, 0xb8, 0x0f, 0x34, 0x66, 0x5e, + 0x92, 0xd9, 0xd7, 0x86, 0x5c, 0xf2, 0x81, 0xf8, 0x1a, 0x74, 0xf6, 0xfc, 0xf7, 0x9a, 0xac, 0xbe, + 0x6b, 0xd5, 0x2a, 0x94, 0x37, 0x94, 0x37, 0x94, 0x37, 0x94, 0xf7, 0xba, 0x2b, 0xef, 0x81, 0x17, + 0xb0, 0x5a, 0x53, 0x83, 0xee, 0x6e, 0xa2, 0x46, 0xcf, 0xfb, 0x03, 0x41, 0x8d, 0x1e, 0x25, 0x7b, + 0x1d, 0x35, 0x7a, 0x24, 0x6d, 0x95, 0x46, 0x75, 0x0f, 0x45, 0x7a, 0xcc, 0x50, 0x4d, 0xea, 0x5b, + 0xbf, 0x59, 0x63, 0x32, 0xe6, 0x0c, 0xe2, 0x38, 0xa5, 0x43, 0xe3, 0x9b, 0x74, 0x1a, 0xb2, 0xf6, + 0xbf, 0x7d, 0x23, 0xa8, 0x06, 0xa8, 0x06, 0xa8, 0x06, 0xa8, 0x86, 0x51, 0x54, 0x03, 0xd5, 0x40, + 0xd7, 0x99, 0x69, 0x54, 0x81, 0x1d, 0xc1, 0x34, 0x96, 0xdb, 0x2a, 0xa8, 0x06, 0x0a, 0xa2, 0x01, + 0xa2, 0x91, 0xc1, 0x31, 0xda, 0x8f, 0x98, 0x7a, 0x7e, 0x31, 0x7e, 0x91, 0xc9, 0x7e, 0x9d, 0x14, + 0x47, 0xc2, 0xb1, 0x03, 0xb6, 0x05, 0xb6, 0x05, 0xb6, 0xb5, 0xee, 0x6c, 0x0b, 0x51, 0x19, 0x3a, + 0xf5, 0xb3, 0xed, 0x52, 0x9f, 0x3c, 0x69, 0xd3, 0xd2, 0xa3, 0xd7, 0x99, 0xac, 0xab, 0x11, 0x81, + 0x01, 0x45, 0x0d, 0x45, 0x0d, 0x45, 0xbd, 0xf6, 0x8a, 0x1a, 0x11, 0x18, 0x4b, 0xff, 0xc0, 0x2e, + 0x2a, 0xf6, 0x3e, 0xd8, 0x45, 0xa5, 0x6e, 0x95, 0x22, 0xec, 0xa2, 0x5b, 0xcd, 0x2a, 0x76, 0x8b, + 0x19, 0xaa, 0x49, 0x7d, 0xeb, 0xeb, 0x6d, 0x18, 0xd5, 0x15, 0x79, 0xa1, 0x3a, 0xe2, 0x02, 0x21, + 0xef, 0x20, 0x5c, 0x20, 0x5c, 0x20, 0x5c, 0x20, 0x5c, 0x88, 0x43, 0x01, 0xdf, 0xd2, 0x01, 0xa2, + 0x11, 0xf1, 0x0e, 0xbe, 0xb5, 0xe4, 0x56, 0xd1, 0x96, 0x5d, 0x18, 0x74, 0x0b, 0x74, 0xab, 0xc4, + 0x74, 0xeb, 0xc1, 0x8b, 0xd9, 0x80, 0xf8, 0xf6, 0x28, 0x11, 0x95, 0x7a, 0xd6, 0xf5, 0xf6, 0x85, + 0xa0, 0x19, 0xa0, 0x19, 0xa0, 0x19, 0xa0, 0x19, 0xc6, 0xd0, 0x0c, 0x2f, 0x52, 0x2c, 0xbb, 0xa6, + 0xe5, 0x57, 0x6d, 0x4f, 0xe1, 0x3b, 0x46, 0x73, 0x66, 0x3c, 0xd7, 0x78, 0x59, 0x99, 0x87, 0x86, + 0x86, 0xb5, 0x99, 0x59, 0xa3, 0x5d, 0x3d, 0x49, 0x95, 0x19, 0x8d, 0x03, 0x6d, 0x85, 0x6b, 0x2a, + 0x1f, 0xbf, 0x57, 0xed, 0xbd, 0x9b, 0xdf, 0xdf, 0x6b, 0xf6, 0xde, 0xcd, 0xf0, 0xd7, 0x5a, 0xf6, + 0xbf, 0x5f, 0xf5, 0xe7, 0xdf, 0xf5, 0xef, 0x55, 0xbb, 0x31, 0xfa, 0xb4, 0xbe, 0xfd, 0xbd, 0x6a, + 0x6f, 0xdf, 0x6c, 0x7c, 0xbc, 0xbe, 0xfe, 0x9c, 0xf7, 0x99, 0x8d, 0x5f, 0x5b, 0xcf, 0xea, 0xd3, + 0x92, 0xdf, 0xe8, 0x58, 0x9e, 0xb3, 0xcb, 0xce, 0x5f, 0xda, 0xd7, 0xe8, 0xbf, 0x1f, 0x75, 0xad, + 0xd2, 0xc6, 0x3f, 0x2a, 0xa6, 0x17, 0xef, 0xf8, 0xb4, 0x42, 0x62, 0xae, 0x09, 0x31, 0x27, 0x4b, + 0xcc, 0x65, 0xa7, 0x81, 0xd8, 0xdd, 0xb6, 0x7d, 0x74, 0xf3, 0xab, 0xf6, 0xa9, 0xf1, 0xdc, 0xda, + 0xf8, 0xb5, 0xf3, 0xfc, 0xf6, 0xc3, 0xdf, 0xf3, 0xbe, 0x56, 0xfb, 0xb4, 0xf3, 0xdc, 0x5a, 0xf0, + 0x2f, 0xcd, 0xe7, 0xd6, 0x92, 0x6d, 0x6c, 0x3f, 0x7f, 0x9c, 0xf9, 0x6a, 0xfa, 0x79, 0x7d, 0xd1, + 0x03, 0x8d, 0x05, 0x0f, 0x6c, 0x2d, 0x7a, 0x60, 0x6b, 0xc1, 0x03, 0x0b, 0xbb, 0x54, 0x5f, 0xf0, + 0xc0, 0xf6, 0xf3, 0xef, 0x99, 0xef, 0x7f, 0x9c, 0xff, 0xd5, 0xe6, 0xf3, 0xc6, 0xef, 0x45, 0xff, + 0xb6, 0xf3, 0xfc, 0xbb, 0xb5, 0xb1, 0x01, 0xc1, 0x2f, 0x2c, 0xf8, 0xb1, 0x6d, 0xf5, 0x6f, 0x5b, + 0xf3, 0x15, 0xa1, 0x69, 0x76, 0x34, 0x45, 0x8c, 0x51, 0x4b, 0xd1, 0x0e, 0x7d, 0xc5, 0x3a, 0x0a, + 0x2d, 0xd2, 0xa1, 0xb1, 0x38, 0x87, 0xc6, 0xa2, 0x1c, 0x66, 0x59, 0x70, 0xb3, 0x2a, 0x03, 0xb1, + 0xed, 0xb9, 0xfa, 0x6c, 0xb8, 0x2f, 0xaf, 0x84, 0x15, 0x17, 0x56, 0x5c, 0x58, 0x71, 0x61, 0xc5, + 0x35, 0xc6, 0x8a, 0x8b, 0x60, 0x91, 0x12, 0x59, 0x36, 0x10, 0x2c, 0xa2, 0x64, 0xab, 0x23, 0x58, + 0x44, 0xd2, 0x56, 0x41, 0xd2, 0x12, 0x93, 0x68, 0xa8, 0x85, 0x60, 0x11, 0x14, 0x6b, 0xd3, 0x59, + 0xac, 0x4d, 0x41, 0x11, 0xbf, 0x72, 0x16, 0x40, 0x53, 0x4f, 0x35, 0xb5, 0x51, 0x4c, 0x45, 0xd4, + 0x52, 0x19, 0xa5, 0x44, 0x61, 0xb4, 0x32, 0x50, 0x46, 0x14, 0x46, 0xd3, 0xa6, 0x21, 0x94, 0x51, + 0x41, 0x0d, 0xe5, 0xb7, 0x55, 0x96, 0xdb, 0x9e, 0x94, 0xd7, 0xfe, 0xfc, 0x79, 0x73, 0xa8, 0xd2, + 0x36, 0x67, 0x65, 0x65, 0x59, 0x75, 0xd1, 0x87, 0x12, 0xed, 0xb4, 0x54, 0x68, 0xa8, 0xd4, 0x34, + 0x6a, 0x1c, 0x0c, 0xea, 0x1c, 0x0a, 0x5a, 0x1d, 0x08, 0x0a, 0x1d, 0x06, 0x0a, 0x1d, 0x04, 0xb2, + 0x76, 0x9e, 0x22, 0xf4, 0xab, 0x15, 0xf5, 0x56, 0xa4, 0x16, 0xd6, 0xe5, 0xac, 0x43, 0x2c, 0x47, + 0xd0, 0x89, 0x8b, 0x25, 0xb1, 0x16, 0x04, 0xb7, 0x55, 0x85, 0x3e, 0xb2, 0x98, 0xd8, 0x83, 0x20, + 0x61, 0xe4, 0xce, 0x97, 0xa3, 0x34, 0x2b, 0x31, 0xed, 0xd2, 0x98, 0x06, 0x8e, 0x3c, 0xfb, 0xa2, + 0xc4, 0x7d, 0x3e, 0xd6, 0xe0, 0x17, 0x47, 0xfb, 0xd6, 0xf6, 0xce, 0xde, 0xae, 0x65, 0x5b, 0xdf, + 0x86, 0x52, 0xdc, 0xca, 0xb6, 0x4c, 0x6c, 0x5d, 0x50, 0x77, 0x10, 0xb8, 0x24, 0x70, 0x9e, 0xac, + 0xf3, 0x38, 0x64, 0xa1, 0x13, 0xfa, 0xd7, 0xc1, 0xc7, 0x6f, 0x17, 0x17, 0xe7, 0x1b, 0xd6, 0x37, + 0x1a, 0x27, 0x5e, 0x18, 0x58, 0x5b, 0x56, 0x37, 0x8c, 0xad, 0xce, 0xf9, 0x43, 0xc3, 0x22, 0x81, + 0x9b, 0xfe, 0x22, 0x33, 0x5b, 0x8b, 0x2a, 0xcc, 0x3b, 0x8d, 0x75, 0x5f, 0x16, 0x49, 0x32, 0xf8, + 0x52, 0x0d, 0x73, 0x5f, 0xc1, 0x5b, 0xf9, 0xab, 0x58, 0x36, 0xc0, 0xf2, 0xa1, 0x58, 0xa3, 0x93, + 0xa8, 0x7c, 0x91, 0xac, 0xae, 0xd4, 0xab, 0x29, 0xb1, 0x0d, 0xc0, 0xbf, 0x5c, 0x7c, 0x4f, 0x72, + 0x2e, 0xcf, 0x18, 0xbf, 0x72, 0x33, 0x76, 0x39, 0x00, 0x55, 0x1e, 0x20, 0x55, 0x0a, 0x40, 0x25, + 0x02, 0x4e, 0x89, 0x00, 0x93, 0x77, 0xe9, 0xdb, 0x83, 0x5e, 0x3a, 0x4d, 0xd4, 0x15, 0xd2, 0xce, + 0x62, 0x47, 0x79, 0xa2, 0x85, 0x37, 0x43, 0xc7, 0xf6, 0xba, 0xad, 0xa9, 0x03, 0xfb, 0xe6, 0x83, + 0xf4, 0xef, 0xf4, 0xc8, 0xb6, 0xa6, 0x8f, 0x6f, 0x66, 0xd4, 0x68, 0x65, 0x87, 0x78, 0xf8, 0xeb, + 0xcb, 0x51, 0x7e, 0xf5, 0xb7, 0xa0, 0x6a, 0xab, 0x1c, 0xd0, 0xc4, 0x89, 0xbd, 0x68, 0x24, 0xbd, + 0x2a, 0x6d, 0xd7, 0xf5, 0xd2, 0xdf, 0x89, 0x6f, 0x75, 0xce, 0xad, 0xf4, 0x1d, 0x56, 0x97, 0xf4, + 0x3d, 0xff, 0xc9, 0x1a, 0x8a, 0xa0, 0x41, 0x9c, 0x09, 0xba, 0x54, 0xa9, 0x5c, 0x07, 0x2f, 0x43, + 0x12, 0xed, 0xc5, 0xd8, 0x20, 0x20, 0xd8, 0x8c, 0x2c, 0xeb, 0xa2, 0x4c, 0x6b, 0xa2, 0x74, 0xeb, + 0xa1, 0x6c, 0xe4, 0xa4, 0xcc, 0x3a, 0xa8, 0x0c, 0x26, 0xa9, 0xb0, 0xfe, 0x15, 0x4b, 0x51, 0x0e, + 0x3c, 0x39, 0x66, 0x90, 0x4a, 0xa6, 0xde, 0xa5, 0xed, 0x8c, 0x89, 0xb7, 0x21, 0x6d, 0x55, 0xd2, + 0xda, 0xbd, 0x11, 0x38, 0x87, 0x81, 0xe3, 0x87, 0x89, 0x17, 0xf4, 0x52, 0x01, 0xc3, 0x88, 0x17, + 0xd0, 0x38, 0x43, 0xac, 0x29, 0x8a, 0xb5, 0x32, 0x26, 0x9d, 0x58, 0xf7, 0x24, 0x70, 0x7d, 0xea, + 0x5a, 0x77, 0x4f, 0x16, 0xbb, 0xf7, 0x92, 0xeb, 0xa0, 0x73, 0x6e, 0x4d, 0x64, 0x8f, 0xac, 0x7e, + 0xc9, 0x11, 0x41, 0xd2, 0x45, 0x91, 0x0a, 0x91, 0xa4, 0x4c, 0x34, 0xe9, 0x24, 0x77, 0x4a, 0x1c, + 0x19, 0x7a, 0x99, 0x9d, 0x64, 0xc7, 0x45, 0xb9, 0xcc, 0xc7, 0x0a, 0xac, 0x2e, 0x0a, 0xad, 0x2f, + 0xf2, 0xad, 0x30, 0x46, 0x59, 0x63, 0x54, 0x1f, 0x5c, 0x9d, 0xd6, 0x19, 0x6d, 0x67, 0xd9, 0x34, + 0x6b, 0x8d, 0x5c, 0x39, 0x21, 0xbf, 0xb5, 0x9b, 0xd5, 0xb0, 0x56, 0x6b, 0x36, 0x8f, 0xdc, 0xf0, + 0x72, 0x64, 0x39, 0x56, 0x2b, 0xa5, 0xd6, 0x2a, 0x01, 0xc9, 0x90, 0xd7, 0x69, 0xc2, 0x77, 0xcc, + 0xf2, 0x2f, 0x59, 0xbe, 0x27, 0x72, 0x2a, 0x63, 0xd1, 0x45, 0x55, 0xb2, 0x98, 0xf9, 0x66, 0x76, + 0xf9, 0xf9, 0xc9, 0x31, 0x37, 0x15, 0x67, 0x8c, 0xc6, 0xf3, 0xcd, 0xc9, 0x4b, 0x15, 0xe2, 0xe1, + 0xf3, 0x39, 0x57, 0x83, 0x8f, 0x52, 0x70, 0x53, 0x07, 0x11, 0x8a, 0x20, 0x4c, 0x05, 0x44, 0x91, + 0x83, 0x34, 0x68, 0x2f, 0x4d, 0xed, 0xcb, 0x80, 0xea, 0x6a, 0x4f, 0x3b, 0xaf, 0xd5, 0xa0, 0xe2, + 0xde, 0x3b, 0x91, 0xed, 0xf8, 0xde, 0x70, 0x70, 0x9c, 0x0b, 0x36, 0xde, 0x31, 0xd3, 0x8d, 0x71, + 0xce, 0xb4, 0x8c, 0x54, 0xd0, 0x95, 0xcc, 0xcc, 0x5c, 0xd1, 0xaa, 0x43, 0xc5, 0x82, 0x24, 0x85, + 0x6d, 0x04, 0x32, 0x6c, 0x02, 0xd2, 0x6c, 0x00, 0xb2, 0xa8, 0x83, 0x74, 0x8e, 0x2f, 0x9d, 0x07, + 0xc8, 0xe4, 0xf0, 0x7a, 0x5d, 0x62, 0xc2, 0x41, 0x83, 0x12, 0xcb, 0xac, 0x09, 0x96, 0x51, 0x7b, + 0x2e, 0x18, 0xf6, 0x3e, 0xf5, 0x42, 0x66, 0x87, 0x8e, 0xed, 0x84, 0xfd, 0x28, 0xc3, 0x39, 0xae, + 0xed, 0x53, 0xd2, 0x4d, 0x1b, 0x7d, 0xd6, 0x05, 0x25, 0x39, 0xb4, 0x34, 0x0d, 0xc8, 0x9d, 0x4f, + 0x5d, 0x71, 0xa9, 0x3f, 0x6e, 0xa8, 0x48, 0x89, 0xcf, 0x5f, 0xf7, 0x14, 0x02, 0x1f, 0x02, 0x1f, + 0x02, 0x1f, 0x02, 0x7f, 0xf5, 0x05, 0x7e, 0x2f, 0x26, 0x6c, 0xe0, 0xb1, 0x70, 0x90, 0xd8, 0x24, + 0x8e, 0x6c, 0xe2, 0x38, 0x34, 0x62, 0x32, 0x14, 0xc0, 0xa2, 0x86, 0x21, 0x59, 0x21, 0x59, 0x21, + 0x59, 0xd7, 0x41, 0xb2, 0x4a, 0xf4, 0xf0, 0x49, 0xf4, 0xe8, 0x49, 0x8c, 0xd8, 0xb9, 0x38, 0xda, + 0xb7, 0x76, 0xeb, 0xcd, 0x96, 0xd5, 0x0e, 0xac, 0x43, 0x76, 0x4f, 0xe3, 0x80, 0x32, 0x6b, 0x64, + 0x2f, 0xb6, 0x2e, 0x68, 0x12, 0xfa, 0x83, 0x2c, 0x18, 0x6a, 0xec, 0xce, 0x29, 0x79, 0x70, 0x8f, + 0x6c, 0x87, 0x9b, 0x9e, 0xf8, 0x9e, 0xdc, 0x8b, 0x60, 0xac, 0xff, 0xe7, 0x06, 0xb8, 0x48, 0x1f, + 0x2e, 0xea, 0xb3, 0x81, 0x38, 0x06, 0x4a, 0x1b, 0x01, 0xde, 0x01, 0xde, 0x01, 0xde, 0xc9, 0xb1, + 0x5b, 0x84, 0x0b, 0x3f, 0x4b, 0x28, 0xec, 0x2c, 0x29, 0x37, 0x94, 0x04, 0xac, 0x21, 0x33, 0xb7, + 0xd3, 0x24, 0x21, 0x4f, 0x53, 0x52, 0x2e, 0x6a, 0x65, 0xf9, 0x76, 0xe4, 0xe7, 0xd3, 0x91, 0x10, + 0xb6, 0x26, 0x35, 0x79, 0xd2, 0xcb, 0x5a, 0x6c, 0x6f, 0x6f, 0x6d, 0xaf, 0xdf, 0x72, 0xac, 0x05, + 0x86, 0x5a, 0x0b, 0x06, 0xb4, 0xb3, 0x57, 0x6b, 0x59, 0x59, 0xfc, 0x4c, 0x8a, 0xbc, 0xc1, 0x75, + 0x14, 0x73, 0x9d, 0x05, 0xd3, 0x8d, 0x13, 0xb9, 0x76, 0xac, 0x66, 0x5d, 0x22, 0xc5, 0x46, 0xc1, + 0x55, 0x25, 0x08, 0x13, 0x0b, 0xa8, 0xd7, 0xbb, 0xbf, 0x0b, 0xe3, 0x84, 0x3f, 0x52, 0xec, 0xa5, + 0x09, 0x04, 0x8b, 0x29, 0x93, 0xfc, 0x08, 0x16, 0xd3, 0x18, 0x2c, 0x36, 0xde, 0xd1, 0xe2, 0xe6, + 0x92, 0x49, 0x4b, 0x62, 0x36, 0x93, 0x1a, 0x6c, 0x26, 0xb0, 0x99, 0x98, 0x60, 0x33, 0x11, 0xbd, + 0xd5, 0xc9, 0x1b, 0xb6, 0xbc, 0x70, 0xd3, 0x71, 0x85, 0x31, 0x4b, 0x3e, 0x86, 0xd2, 0x8e, 0xa3, + 0xcc, 0x63, 0x29, 0xfd, 0x78, 0xea, 0xe0, 0x38, 0xb8, 0xac, 0x5d, 0x88, 0xa9, 0x48, 0xde, 0x65, + 0x6d, 0x4f, 0xc1, 0x55, 0x6d, 0x69, 0xf7, 0x78, 0x25, 0x67, 0x80, 0xc5, 0x85, 0x68, 0x5c, 0x88, + 0xd6, 0x25, 0x1e, 0xe4, 0x88, 0x09, 0x49, 0xe2, 0x62, 0x32, 0x50, 0xe9, 0x19, 0x5b, 0x55, 0x17, + 0xf6, 0x55, 0x51, 0xd9, 0x52, 0x59, 0x05, 0x4b, 0x03, 0x0b, 0xf2, 0xde, 0xc8, 0x9c, 0x56, 0x95, + 0x75, 0x16, 0x0d, 0x2d, 0xa4, 0x7b, 0xb3, 0x16, 0x49, 0x4d, 0xa5, 0x5b, 0x2a, 0xe5, 0x4b, 0x51, + 0x19, 0xbe, 0x39, 0xdf, 0x0b, 0x7e, 0xd8, 0x3e, 0x79, 0xa2, 0xf1, 0x44, 0xd2, 0x49, 0xc7, 0x4e, + 0x73, 0xde, 0x01, 0x2c, 0x05, 0x2c, 0x05, 0x2c, 0x55, 0x3a, 0x2c, 0x75, 0x42, 0x02, 0x97, 0xb0, + 0x30, 0x7e, 0x92, 0x98, 0xb1, 0x49, 0x1d, 0x3e, 0x8b, 0xee, 0x9f, 0x12, 0xe0, 0xb3, 0xe9, 0x9a, + 0xc1, 0x6f, 0x4b, 0x11, 0xd7, 0x9f, 0x37, 0xfe, 0xcf, 0xc6, 0xff, 0x5d, 0x4f, 0x68, 0xf5, 0xfe, + 0xbc, 0x00, 0x13, 0xad, 0x20, 0x26, 0x42, 0xca, 0xe2, 0xf9, 0xde, 0xe0, 0x89, 0x03, 0x75, 0xf2, + 0x1b, 0x97, 0x83, 0x58, 0xde, 0x7c, 0x0b, 0xcc, 0xb5, 0x0c, 0x0b, 0x9f, 0x3c, 0xcb, 0x9e, 0x24, + 0x14, 0x0a, 0xc3, 0x7d, 0xa9, 0xd0, 0x25, 0x0c, 0xf7, 0xfa, 0x11, 0x9e, 0x82, 0x1a, 0x49, 0x32, + 0x6b, 0x22, 0xcd, 0xa9, 0x81, 0xe4, 0x45, 0x26, 0x8a, 0xcf, 0x61, 0xe5, 0x40, 0x69, 0x12, 0x74, + 0xd8, 0x5c, 0xc9, 0xbc, 0x9f, 0x75, 0x08, 0x51, 0x08, 0x51, 0x83, 0x84, 0x28, 0xbc, 0x9f, 0xb0, + 0xd8, 0xc1, 0x62, 0x07, 0x8b, 0x5d, 0x69, 0xac, 0x6b, 0xf0, 0x7e, 0xc2, 0xfb, 0x09, 0xef, 0xa7, + 0x2a, 0x4b, 0x1f, 0x9c, 0x7f, 0x80, 0x12, 0x80, 0x12, 0x80, 0x12, 0x25, 0x82, 0x12, 0x70, 0xfe, + 0xc1, 0xf9, 0xb7, 0x2a, 0xc8, 0xc2, 0x44, 0xe7, 0x5f, 0x29, 0x20, 0x41, 0x18, 0x7b, 0x3d, 0x99, + 0xa9, 0x13, 0x26, 0x0a, 0x6b, 0xd8, 0x2e, 0x54, 0x3f, 0x54, 0x3f, 0x54, 0xff, 0x1a, 0x59, 0x11, + 0xc6, 0xce, 0x66, 0x5b, 0xaa, 0x00, 0x78, 0xa5, 0xa9, 0x1b, 0x12, 0xdb, 0x3c, 0x0c, 0x06, 0x7d, + 0xf9, 0x27, 0xe1, 0x2a, 0xbc, 0x64, 0xb1, 0x17, 0xf4, 0x94, 0xd4, 0x7f, 0xaa, 0x54, 0xd3, 0x79, + 0x3e, 0xbb, 0xfa, 0xf3, 0xf0, 0x42, 0x45, 0xe5, 0xaa, 0x5a, 0xda, 0xfa, 0xe5, 0x55, 0xfb, 0xaa, + 0xb3, 0xaf, 0xa2, 0xf9, 0x7a, 0xda, 0xfc, 0xc1, 0x7f, 0x4e, 0xdb, 0x27, 0x9d, 0x7d, 0xb9, 0x25, + 0x99, 0x9e, 0x3f, 0xc9, 0x5e, 0xc4, 0x8e, 0x40, 0x59, 0x87, 0xbf, 0x6d, 0x7a, 0x3c, 0x7e, 0x61, + 0xaf, 0xd5, 0xdc, 0xd6, 0x87, 0x5b, 0x43, 0x9a, 0x72, 0x7b, 0xad, 0x3b, 0x86, 0x1b, 0xa3, 0x65, + 0xd5, 0x4a, 0x5a, 0xfc, 0x0a, 0x71, 0x49, 0xe6, 0xc5, 0x25, 0x0d, 0xfd, 0xc9, 0x28, 0xa6, 0xbe, + 0x4c, 0x03, 0x28, 0xa6, 0x2e, 0xd8, 0x54, 0x61, 0xc5, 0xd4, 0x91, 0xe6, 0x17, 0x69, 0x7e, 0x91, + 0xe6, 0x57, 0xde, 0xd3, 0x66, 0x26, 0xc4, 0x52, 0xaa, 0x49, 0x75, 0xd4, 0x79, 0x3c, 0x1d, 0xbf, + 0x0b, 0xe9, 0xbb, 0x14, 0x2d, 0x67, 0x19, 0x32, 0x78, 0x45, 0x71, 0xf8, 0xf8, 0x64, 0x13, 0x8e, + 0x22, 0xf8, 0x2f, 0x06, 0xfb, 0x49, 0x13, 0xc8, 0xe0, 0xa5, 0x4c, 0x81, 0x21, 0x83, 0x97, 0xc6, + 0x0c, 0x5e, 0x82, 0x69, 0x84, 0xe4, 0xa4, 0x0f, 0x42, 0xf6, 0x2e, 0x05, 0xf8, 0x0f, 0xd9, 0xbb, + 0xd4, 0x21, 0x27, 0xe1, 0xec, 0x5d, 0xfd, 0xd0, 0x95, 0x18, 0xbc, 0x9e, 0xb5, 0x26, 0x1a, 0xbb, + 0x2b, 0xa1, 0xea, 0xde, 0x4b, 0x63, 0x9d, 0xcb, 0xf6, 0x97, 0xe3, 0x43, 0x31, 0x20, 0x7e, 0x83, + 0x2b, 0x4d, 0xca, 0x85, 0x8d, 0x0e, 0xd2, 0x89, 0x68, 0xfc, 0x62, 0x0c, 0xa6, 0xf2, 0xaf, 0x34, + 0xd1, 0x60, 0xd0, 0xa7, 0xf1, 0x90, 0x5a, 0x48, 0xbc, 0xd6, 0x24, 0xc1, 0xf9, 0x25, 0xd7, 0xe9, + 0xa5, 0xc6, 0xd9, 0x35, 0x74, 0x72, 0x8d, 0x45, 0xa3, 0x44, 0x87, 0x5f, 0xe6, 0xde, 0xba, 0x38, + 0x3c, 0x39, 0xbb, 0x3a, 0xbc, 0x3d, 0x3b, 0x3d, 0xfe, 0x8f, 0xcc, 0xb6, 0x33, 0xdf, 0x56, 0xfb, + 0xf8, 0xb8, 0x52, 0x2e, 0x5f, 0xaf, 0x74, 0x3f, 0x56, 0x36, 0x46, 0xa9, 0xbe, 0xab, 0xc9, 0x4a, + 0x4b, 0xf5, 0x5a, 0xbd, 0x5a, 0x67, 0x59, 0x2e, 0x2b, 0xd3, 0x5d, 0x43, 0x12, 0xcd, 0xd0, 0x93, + 0x36, 0xe5, 0x99, 0xa3, 0xc7, 0x3f, 0x0a, 0x22, 0x13, 0x2e, 0x8e, 0xf6, 0x6b, 0xd5, 0xfa, 0x4e, + 0xcb, 0xfa, 0x9a, 0x78, 0x41, 0xcf, 0x6a, 0x5f, 0x9c, 0x5b, 0x2c, 0xb4, 0x3a, 0xfd, 0x68, 0xe8, + 0xbe, 0xb0, 0xae, 0x62, 0x12, 0x24, 0x11, 0x89, 0xd3, 0xdf, 0x2f, 0x07, 0x77, 0x01, 0x65, 0xd6, + 0x1f, 0x84, 0xd1, 0x9f, 0xe4, 0x29, 0x31, 0x2c, 0xfa, 0x46, 0xb6, 0xe5, 0x5a, 0x39, 0x9e, 0x98, + 0x8b, 0x2b, 0x44, 0xd6, 0x6b, 0xe5, 0xdc, 0xc9, 0x37, 0x2b, 0xe5, 0x4e, 0x56, 0x96, 0x57, 0xc4, + 0x14, 0x37, 0x70, 0x09, 0xbd, 0x09, 0x13, 0x73, 0xad, 0x50, 0x9a, 0x10, 0x3d, 0x45, 0x07, 0xc5, + 0xee, 0xb3, 0x4b, 0xb9, 0xc7, 0x2e, 0xcd, 0x0c, 0x57, 0x87, 0x19, 0x0e, 0x66, 0x38, 0x98, 0xe1, + 0x60, 0x86, 0x83, 0x19, 0x0e, 0x66, 0x38, 0x98, 0xe1, 0x60, 0x86, 0x83, 0x19, 0x0e, 0x66, 0x38, + 0x98, 0xe1, 0x60, 0x86, 0x83, 0x19, 0x0e, 0x66, 0x38, 0x98, 0xe1, 0x56, 0xca, 0x0c, 0x07, 0xeb, + 0x94, 0xb8, 0x75, 0x4a, 0xe0, 0xb2, 0x08, 0x82, 0x4f, 0xdf, 0x9f, 0xdf, 0x0a, 0x97, 0x39, 0x6e, + 0xb9, 0xd0, 0xe1, 0xf3, 0xf4, 0x25, 0xed, 0x38, 0x2a, 0x43, 0x80, 0x2b, 0x9f, 0x09, 0x51, 0xc8, + 0x74, 0x28, 0x1c, 0xd8, 0x5a, 0x47, 0x60, 0x6b, 0x81, 0xda, 0x72, 0xa5, 0x03, 0x5b, 0x07, 0xe9, + 0xa1, 0x4d, 0x64, 0x84, 0xb6, 0x8e, 0x5a, 0x42, 0x70, 0x2b, 0xac, 0xea, 0x85, 0x18, 0xb2, 0x0c, + 0xb3, 0xaa, 0x7b, 0x81, 0xed, 0x7a, 0x89, 0x43, 0x62, 0x97, 0xba, 0x76, 0xf4, 0x83, 0x25, 0x12, + 0x13, 0xdd, 0xcf, 0x34, 0x0d, 0xeb, 0xb4, 0xf2, 0x43, 0xab, 0x8a, 0x60, 0xc2, 0x3a, 0x6d, 0xad, + 0xa0, 0x75, 0x7a, 0xa4, 0x2e, 0x9b, 0x0d, 0x89, 0xb6, 0x69, 0x09, 0x89, 0xcc, 0x2a, 0x17, 0x24, + 0xe8, 0x95, 0xd2, 0x8a, 0x74, 0xe2, 0x05, 0xf2, 0x6d, 0x36, 0xdf, 0x88, 0x3f, 0xa0, 0xf2, 0x13, + 0x66, 0x54, 0x8e, 0x62, 0xe2, 0xa4, 0xec, 0xee, 0xc0, 0xeb, 0x79, 0xa2, 0x17, 0xed, 0xe7, 0x6f, + 0x23, 0xda, 0x23, 0xcc, 0x7b, 0xa0, 0x42, 0xf7, 0xd9, 0x15, 0x9c, 0x94, 0xd7, 0x4b, 0x46, 0x1e, + 0xd5, 0x2d, 0x99, 0xdc, 0x84, 0x03, 0xab, 0xb6, 0x8a, 0x08, 0x5e, 0x5b, 0x73, 0x4b, 0xbb, 0xd5, + 0xa8, 0xef, 0x6d, 0x59, 0xb6, 0x75, 0x42, 0x02, 0xd2, 0x1b, 0xda, 0x6b, 0x3b, 0x41, 0x37, 0x8c, + 0xfb, 0x99, 0xd5, 0xc9, 0xfa, 0x42, 0x12, 0x6a, 0x75, 0xc3, 0xd8, 0x62, 0xf7, 0xf4, 0x3a, 0xc8, + 0x0c, 0x37, 0x01, 0x65, 0x93, 0xdc, 0x00, 0xd6, 0xc7, 0xce, 0xf9, 0x06, 0x8c, 0xee, 0x6a, 0x61, + 0xd2, 0x5c, 0xb8, 0x24, 0x69, 0xe9, 0x20, 0x49, 0x24, 0xbd, 0x5f, 0xa8, 0x76, 0x59, 0x60, 0xd3, + 0x38, 0x0e, 0x63, 0xf9, 0xec, 0x6e, 0xaa, 0x59, 0x30, 0x3b, 0x30, 0x3b, 0x30, 0x3b, 0x30, 0x3b, + 0x30, 0x3b, 0x30, 0x3b, 0x30, 0x3b, 0x30, 0x3b, 0x30, 0x3b, 0x30, 0x3b, 0x30, 0x3b, 0x30, 0x3b, + 0x30, 0x3b, 0xb5, 0xcc, 0xae, 0x1b, 0xc6, 0x3f, 0x87, 0x0e, 0xb6, 0xd0, 0x61, 0x54, 0x32, 0xbf, + 0x9b, 0x69, 0x1c, 0x2c, 0x0f, 0x2c, 0x0f, 0x2c, 0x0f, 0x2c, 0x0f, 0x2c, 0x0f, 0x2c, 0x0f, 0x2c, + 0x0f, 0x2c, 0x0f, 0x2c, 0x0f, 0x2c, 0x0f, 0x2c, 0x0f, 0x2c, 0x0f, 0x2c, 0x4f, 0x17, 0xcb, 0x93, + 0xee, 0xc3, 0x7b, 0xd3, 0x34, 0x18, 0x1e, 0x18, 0x1e, 0x18, 0x1e, 0x18, 0x1e, 0x18, 0x1e, 0x18, + 0x1e, 0x18, 0x1e, 0x18, 0x1e, 0x18, 0x1e, 0x18, 0x1e, 0x18, 0x1e, 0x18, 0x1e, 0x18, 0x9e, 0x5a, + 0x86, 0xd7, 0x1f, 0xf8, 0xcc, 0x73, 0x48, 0xc2, 0x54, 0xf8, 0xf1, 0x66, 0x1a, 0x07, 0xcb, 0x03, + 0xcb, 0x03, 0xcb, 0x03, 0xcb, 0x03, 0xcb, 0x03, 0xcb, 0x03, 0xcb, 0x03, 0xcb, 0x03, 0xcb, 0x5b, + 0x07, 0x96, 0xd7, 0x5a, 0x86, 0x29, 0x58, 0x63, 0xa2, 0x70, 0x1d, 0xbc, 0x62, 0x0a, 0x96, 0x6d, + 0x79, 0xd1, 0xe5, 0x53, 0xc2, 0x68, 0xff, 0x92, 0x11, 0x96, 0xfc, 0xb9, 0xdf, 0x09, 0x4e, 0x52, + 0x4c, 0x79, 0x26, 0x03, 0x52, 0x82, 0x03, 0x8a, 0x70, 0x40, 0xa5, 0x0b, 0x0b, 0x29, 0x54, 0x36, + 0x86, 0x28, 0xdd, 0x07, 0xf8, 0xa6, 0x69, 0xb0, 0x43, 0xb0, 0x43, 0xb0, 0x43, 0xb0, 0x43, 0xb0, + 0x43, 0xb0, 0x43, 0xb0, 0x43, 0xb0, 0x43, 0xb0, 0x43, 0xb0, 0x43, 0x5e, 0x12, 0x71, 0xfe, 0x03, + 0xdc, 0x70, 0x05, 0xb9, 0x61, 0xb6, 0xac, 0x90, 0x40, 0xe5, 0x60, 0x86, 0x0a, 0x3c, 0x86, 0xf0, + 0x13, 0x82, 0x09, 0x82, 0x09, 0x82, 0x09, 0x82, 0x09, 0x82, 0x09, 0x82, 0x09, 0x82, 0x09, 0x82, + 0x09, 0xae, 0x11, 0x13, 0x44, 0x34, 0xa8, 0xb1, 0x6c, 0x0f, 0xd1, 0xa0, 0x2b, 0xc1, 0xe8, 0xa4, + 0x7b, 0xf8, 0xe0, 0xd7, 0x03, 0x9b, 0x03, 0x9b, 0x03, 0x9b, 0x03, 0x9b, 0x03, 0x9b, 0x03, 0x9b, + 0x03, 0x9b, 0x03, 0x9b, 0x03, 0x9b, 0x03, 0x9b, 0x03, 0x9b, 0x03, 0x9b, 0x53, 0xcd, 0xe6, 0xc2, + 0x01, 0x53, 0x56, 0x60, 0x6f, 0x4e, 0xdb, 0xe0, 0x78, 0xe0, 0x78, 0xe0, 0x78, 0xe0, 0x78, 0xe0, + 0x78, 0xe0, 0x78, 0xe0, 0x78, 0xe0, 0x78, 0xe0, 0x78, 0xe0, 0x78, 0xe0, 0x78, 0xe0, 0x78, 0xe0, + 0x78, 0x8a, 0x39, 0x9e, 0x8a, 0x12, 0x7b, 0x6f, 0xda, 0x05, 0xb7, 0x03, 0xb7, 0x03, 0xb7, 0x03, + 0xb7, 0x03, 0xb7, 0x03, 0xb7, 0x03, 0xb7, 0x03, 0xb7, 0x03, 0xb7, 0x03, 0xb7, 0x03, 0xb7, 0x03, + 0xb7, 0x03, 0xb7, 0x53, 0xcc, 0xed, 0xd4, 0x15, 0xd9, 0x9b, 0xdb, 0x3a, 0x78, 0x1e, 0x78, 0x1e, + 0x78, 0x1e, 0x78, 0x1e, 0x78, 0x1e, 0x78, 0x1e, 0x78, 0x1e, 0x78, 0x1e, 0x78, 0x1e, 0x78, 0x1e, + 0x78, 0x1e, 0x78, 0x1e, 0x78, 0x9e, 0x36, 0x9e, 0x27, 0xdf, 0x8f, 0x87, 0x3a, 0x7b, 0xe0, 0x78, + 0xe0, 0x78, 0xe0, 0x78, 0xe0, 0x78, 0xe0, 0x78, 0xe0, 0x78, 0xe0, 0x78, 0xe0, 0x78, 0xe0, 0x78, + 0xe0, 0x78, 0xe0, 0x78, 0xe0, 0x78, 0x7a, 0x39, 0x9e, 0xba, 0x42, 0x7b, 0x73, 0x5b, 0x07, 0xcf, + 0x03, 0xcf, 0x03, 0xcf, 0x03, 0xcf, 0x03, 0xcf, 0x03, 0xcf, 0x03, 0xcf, 0x03, 0xcf, 0x03, 0xcf, + 0x03, 0xcf, 0x03, 0xcf, 0x03, 0xcf, 0x03, 0xcf, 0xd3, 0xc6, 0xf3, 0xe4, 0xfb, 0xf2, 0x50, 0x2f, + 0x0f, 0x1c, 0x0f, 0x1c, 0x0f, 0x1c, 0x0f, 0x1c, 0x0f, 0x1c, 0x0f, 0x1c, 0x0f, 0x1c, 0x0f, 0x1c, + 0x0f, 0x1c, 0x2f, 0x27, 0x51, 0xb8, 0x0e, 0x66, 0x6b, 0xab, 0x9d, 0x0d, 0x18, 0x6a, 0xe6, 0x99, + 0xcf, 0x01, 0xdf, 0x5d, 0x5a, 0x48, 0xa2, 0x92, 0x70, 0x44, 0x15, 0x1e, 0x40, 0xf8, 0xfd, 0xc0, + 0x09, 0xc1, 0x09, 0xc1, 0x09, 0xc1, 0x09, 0xc1, 0x09, 0xc1, 0x09, 0xc1, 0x09, 0xc1, 0x09, 0xc1, + 0x09, 0xe1, 0xf7, 0x5b, 0x75, 0xce, 0x07, 0x4e, 0x57, 0x16, 0x4e, 0x27, 0xdf, 0xdb, 0x07, 0x1f, + 0x1f, 0xf8, 0x1c, 0xf8, 0x1c, 0xf8, 0x1c, 0xf8, 0x1c, 0xf8, 0x1c, 0xf8, 0x1c, 0xf8, 0x1c, 0xf8, + 0x1c, 0xf8, 0x1c, 0xf8, 0x1c, 0xf8, 0x1c, 0xf8, 0x9c, 0xba, 0x27, 0x39, 0x25, 0x57, 0xa5, 0x1d, + 0x04, 0x21, 0xcb, 0x96, 0x59, 0xe8, 0xa8, 0x54, 0x12, 0xe7, 0x9e, 0xf6, 0x49, 0x44, 0xd8, 0x7d, + 0xba, 0xa7, 0x36, 0xc3, 0x88, 0x06, 0x4e, 0xc6, 0xbd, 0x6c, 0x2f, 0xdd, 0x2f, 0x5d, 0xe2, 0xd0, + 0x64, 0x73, 0xde, 0xaf, 0x9b, 0x71, 0x38, 0x60, 0xd4, 0xb5, 0x1f, 0x7c, 0x12, 0x6c, 0x7a, 0xd1, + 0x43, 0x63, 0x33, 0x61, 0x84, 0xd1, 0xcd, 0x11, 0x5c, 0x15, 0x21, 0x92, 0x95, 0x84, 0xc5, 0x03, + 0x87, 0x05, 0x23, 0x19, 0xd5, 0x19, 0xbf, 0xf2, 0xf6, 0x22, 0x7b, 0xe5, 0x37, 0x9f, 0x04, 0xb7, + 0x9d, 0xe8, 0xa1, 0x71, 0xbb, 0x3f, 0x7e, 0xd7, 0x07, 0x3d, 0x0b, 0xc6, 0xb1, 0x58, 0x15, 0xf7, + 0xde, 0x89, 0x6c, 0xc7, 0xf7, 0x86, 0xa7, 0x96, 0x6f, 0xa5, 0x26, 0xe2, 0x7a, 0xba, 0x31, 0xce, + 0x8d, 0x73, 0x40, 0xbb, 0x64, 0xe0, 0x33, 0x21, 0xa5, 0x54, 0xc9, 0x30, 0x08, 0xdf, 0xac, 0xdf, + 0x70, 0xf6, 0x5b, 0xcc, 0xb0, 0x20, 0x6c, 0x50, 0x90, 0x61, 0x48, 0x90, 0x66, 0x40, 0x90, 0xa5, + 0x24, 0xa5, 0x1b, 0x0c, 0xa4, 0x6b, 0x40, 0x99, 0x06, 0x02, 0xbd, 0x02, 0x5a, 0xd8, 0x10, 0x30, + 0xd9, 0x2d, 0x77, 0x61, 0xe8, 0x53, 0x12, 0x88, 0xec, 0x97, 0xd1, 0xe1, 0xa9, 0xd5, 0x4a, 0x2c, + 0x28, 0x69, 0x90, 0x62, 0x6f, 0x57, 0x5c, 0x48, 0x8e, 0x1b, 0x2a, 0x52, 0x40, 0xa6, 0x3b, 0x1f, + 0xf2, 0x11, 0xf2, 0x11, 0xf2, 0x11, 0xf2, 0x51, 0x92, 0x7c, 0xec, 0xc5, 0x84, 0x0d, 0x3c, 0x16, + 0x0e, 0x12, 0x9b, 0xc4, 0x91, 0x4d, 0x1c, 0x87, 0x46, 0x4c, 0x86, 0xbc, 0x5c, 0xd4, 0x30, 0x04, + 0x11, 0x04, 0x11, 0x04, 0x91, 0x51, 0x82, 0x88, 0x73, 0x0a, 0x24, 0x9a, 0x3f, 0x25, 0x9a, 0x3d, + 0x25, 0xfa, 0xd0, 0x2e, 0x8e, 0xf6, 0xad, 0xdd, 0x7a, 0xb3, 0x65, 0xb5, 0x03, 0xeb, 0x90, 0xdd, + 0x0f, 0xed, 0x60, 0x6d, 0xd7, 0x8d, 0x69, 0x92, 0x58, 0x17, 0x34, 0x09, 0xfd, 0x41, 0x66, 0x31, + 0x1b, 0x9b, 0xc6, 0x4a, 0xee, 0xdc, 0x95, 0x6d, 0xc0, 0xd4, 0xe3, 0xdf, 0xcd, 0xbd, 0x08, 0x45, + 0xbb, 0x82, 0x3f, 0xe8, 0x35, 0x41, 0xea, 0x81, 0x11, 0x7d, 0x36, 0x10, 0x87, 0x0c, 0x69, 0x23, + 0x80, 0x07, 0x80, 0x07, 0x80, 0x07, 0x39, 0x76, 0xcb, 0xc0, 0x0b, 0x58, 0xad, 0x29, 0x01, 0x1d, + 0x34, 0x05, 0x9a, 0x90, 0x13, 0xb5, 0x21, 0x41, 0x35, 0xcb, 0x8c, 0xd2, 0x98, 0xb8, 0xfa, 0x9b, + 0xbb, 0x92, 0xf4, 0x96, 0x2a, 0x87, 0xbe, 0x7c, 0x47, 0xbe, 0x84, 0x30, 0x0c, 0xa9, 0xe1, 0x17, + 0x2f, 0x6b, 0xb1, 0xbd, 0xbd, 0xb5, 0xbd, 0x7e, 0xcb, 0x61, 0x16, 0xe4, 0x00, 0x61, 0x58, 0x4c, + 0x18, 0x76, 0xf6, 0x6a, 0x2d, 0x6b, 0xc6, 0x6b, 0x0e, 0x6a, 0xa0, 0x88, 0x1a, 0x2c, 0x98, 0x6e, + 0x90, 0x00, 0xa9, 0x4f, 0xe4, 0x3c, 0xf1, 0xa2, 0x71, 0x06, 0xd2, 0xe3, 0x0b, 0xf2, 0xed, 0x87, + 0xe5, 0xe7, 0x26, 0xc7, 0xbc, 0x54, 0x06, 0x41, 0x30, 0xe8, 0xdf, 0xd1, 0x98, 0xc3, 0xf8, 0xfa, + 0x02, 0x06, 0x5f, 0xda, 0xc8, 0xb9, 0x22, 0x63, 0x13, 0x51, 0xce, 0xc7, 0x78, 0x89, 0x93, 0x08, + 0x61, 0x7a, 0x45, 0x94, 0xba, 0x1c, 0x12, 0x49, 0x54, 0x52, 0x4a, 0x23, 0x46, 0xd2, 0xc4, 0xe0, + 0x0c, 0x11, 0xea, 0x56, 0x4a, 0x76, 0xe2, 0x0f, 0xbc, 0x98, 0x6f, 0xb1, 0x9d, 0xf1, 0x0e, 0x13, + 0x34, 0x2e, 0x8c, 0xda, 0x11, 0xb3, 0x2f, 0xd4, 0x56, 0xc5, 0xbe, 0xd0, 0x85, 0x7d, 0x41, 0xd3, + 0xb1, 0x2a, 0xc6, 0xbe, 0xc0, 0x7b, 0xdc, 0x5e, 0xb0, 0xb8, 0x60, 0xdc, 0xc4, 0xcc, 0xae, 0x13, + 0x8b, 0x9f, 0x78, 0x19, 0x98, 0x84, 0x38, 0x8a, 0x49, 0x63, 0x02, 0x01, 0x67, 0x13, 0x3c, 0x86, + 0x9b, 0x6d, 0xca, 0x05, 0x8e, 0x0e, 0x86, 0x63, 0xe8, 0xcd, 0xb6, 0x2e, 0x6e, 0xb6, 0xbd, 0xdd, + 0x6d, 0xe2, 0xfe, 0xd2, 0x19, 0xad, 0x5f, 0x2b, 0x74, 0x8a, 0x24, 0x05, 0x65, 0x4f, 0xda, 0x7b, + 0xea, 0x85, 0xcc, 0x0e, 0x1d, 0xdb, 0x09, 0xfb, 0x51, 0x4c, 0x93, 0x84, 0xba, 0xb6, 0x4f, 0x49, + 0x37, 0x6d, 0xfc, 0x79, 0x2d, 0xa2, 0xdc, 0x0f, 0x1f, 0x33, 0x6b, 0x1f, 0xbf, 0x02, 0x91, 0x87, + 0x7b, 0x42, 0xc7, 0xa6, 0x8f, 0xac, 0xc5, 0xa8, 0x4f, 0xfb, 0x94, 0xc5, 0x4f, 0x76, 0x18, 0xd8, + 0xce, 0x7d, 0x66, 0x4d, 0x97, 0x8a, 0x85, 0x32, 0x4d, 0x27, 0x11, 0x0c, 0xe9, 0xc6, 0x41, 0x37, + 0xab, 0x73, 0xa1, 0xe1, 0x85, 0xa3, 0x6f, 0x8e, 0x38, 0x49, 0x89, 0xfd, 0xba, 0x93, 0x71, 0xd8, + 0x31, 0xed, 0x8a, 0x93, 0xb0, 0xd7, 0xcd, 0x81, 0x8b, 0x81, 0x8b, 0x81, 0x8b, 0x29, 0x37, 0x81, + 0xc8, 0x35, 0x85, 0x48, 0x3a, 0x86, 0x60, 0x2e, 0x60, 0x2e, 0x66, 0x33, 0x17, 0xd1, 0x63, 0x3d, + 0xab, 0x63, 0xe5, 0x6d, 0x8f, 0x19, 0x7d, 0x2b, 0x6b, 0x7b, 0xc8, 0x31, 0x57, 0x48, 0x3f, 0xfc, + 0x2a, 0x84, 0x80, 0x32, 0x61, 0xa0, 0x4a, 0x28, 0x28, 0x17, 0x0e, 0xca, 0x85, 0x84, 0x4a, 0x61, + 0x21, 0x47, 0x68, 0x48, 0x12, 0x1e, 0xf2, 0xcd, 0x1f, 0x33, 0xbb, 0x35, 0xa5, 0xf4, 0xfc, 0x20, + 0xfb, 0x6f, 0x35, 0xfe, 0x8e, 0xc4, 0x36, 0xcf, 0x27, 0x94, 0x2a, 0x5d, 0xe6, 0xd6, 0x14, 0x85, + 0x7a, 0xf3, 0xc1, 0xe8, 0xef, 0xec, 0xfa, 0x76, 0xa9, 0x96, 0x50, 0xb2, 0x79, 0x46, 0xbd, 0x99, + 0x46, 0xde, 0x49, 0x90, 0x11, 0x25, 0x96, 0x0c, 0xee, 0x14, 0x2a, 0xc0, 0x57, 0xad, 0x43, 0x07, + 0x42, 0x07, 0x42, 0x07, 0x42, 0x07, 0x1a, 0xab, 0x03, 0xbf, 0xbf, 0xe8, 0xc0, 0xff, 0x71, 0x06, + 0x71, 0x4c, 0x03, 0xf6, 0x71, 0x63, 0xf3, 0xf3, 0xe7, 0x17, 0x73, 0xe3, 0xcd, 0xe8, 0x91, 0x69, + 0xb9, 0x97, 0xcc, 0xf9, 0x6c, 0xd2, 0xb2, 0x4b, 0x1f, 0xa1, 0x4e, 0xcb, 0xa2, 0x4e, 0x0b, 0xe5, + 0xb3, 0xc2, 0x5e, 0x91, 0xf1, 0x8f, 0x7c, 0x13, 0x87, 0x32, 0x2f, 0xc9, 0x02, 0x69, 0x2e, 0xc1, + 0x5b, 0x32, 0x57, 0x8c, 0x17, 0x6d, 0xf2, 0xb8, 0x29, 0x99, 0x27, 0x52, 0x8d, 0x57, 0xe5, 0x95, + 0x93, 0x41, 0xc8, 0xc7, 0x22, 0x3e, 0xeb, 0xcf, 0x42, 0xf9, 0xaa, 0x08, 0xa3, 0xf2, 0xac, 0xbe, + 0xc3, 0xe6, 0x4a, 0x66, 0xf4, 0xad, 0xc3, 0xe8, 0x5b, 0x3c, 0xa6, 0x85, 0xd1, 0x77, 0xe9, 0x01, + 0xc1, 0xe8, 0x0b, 0xc2, 0x0b, 0xc2, 0x0b, 0xc2, 0x0b, 0xc2, 0xab, 0x85, 0xf0, 0xca, 0x37, 0xfa, + 0xc2, 0xe6, 0x09, 0x15, 0x00, 0x15, 0x00, 0x15, 0x00, 0x15, 0x60, 0x88, 0x0a, 0x28, 0xb5, 0xcd, + 0xd3, 0x70, 0x36, 0x63, 0xa2, 0x3d, 0x87, 0xe3, 0xbe, 0xae, 0x44, 0x73, 0xce, 0xba, 0x67, 0x63, + 0x5f, 0xb4, 0x2c, 0x3a, 0xf2, 0xb2, 0x7f, 0x9d, 0xbc, 0xfb, 0x76, 0xf2, 0xa5, 0x0b, 0xda, 0x2d, + 0x73, 0xf8, 0xb4, 0x98, 0x09, 0x4f, 0x8a, 0xe9, 0x4e, 0x5a, 0xb8, 0x74, 0x1d, 0xe1, 0xd2, 0xea, + 0xa0, 0x16, 0xc2, 0xa5, 0xa5, 0x99, 0xd8, 0x70, 0x75, 0x75, 0xc9, 0x1f, 0x5c, 0x5d, 0xd5, 0xc7, + 0xfd, 0xe0, 0x0b, 0xc0, 0xd5, 0xd5, 0xf7, 0x77, 0x5b, 0xf9, 0xae, 0xae, 0x02, 0x29, 0x4b, 0x40, + 0xca, 0x02, 0x94, 0x05, 0x89, 0x9b, 0x96, 0x98, 0xe0, 0x0a, 0x17, 0x32, 0xcf, 0x4b, 0x3a, 0x94, + 0xe5, 0x88, 0xfa, 0x20, 0x71, 0xa1, 0x78, 0x17, 0x48, 0xe2, 0xc2, 0xe4, 0x58, 0x8d, 0x65, 0x57, + 0x61, 0xb9, 0xa9, 0x7f, 0x7f, 0x22, 0x97, 0x98, 0xc4, 0x8a, 0x17, 0x3d, 0x34, 0x97, 0x9e, 0xba, + 0x17, 0x9f, 0x6b, 0xfa, 0xd4, 0x92, 0x4b, 0x94, 0x8f, 0x90, 0xe5, 0xc6, 0x47, 0x3c, 0x38, 0x88, + 0x3b, 0xf7, 0x30, 0x2f, 0xae, 0x11, 0xc6, 0x2f, 0xc2, 0x38, 0x45, 0x24, 0x77, 0xb0, 0xdc, 0x23, + 0x9b, 0x97, 0xf0, 0x54, 0xc8, 0x30, 0xbb, 0x39, 0x4d, 0xf8, 0x13, 0xc5, 0xbd, 0x34, 0xb1, 0x26, + 0x79, 0xe2, 0x22, 0xe4, 0x89, 0x93, 0x94, 0x30, 0xbb, 0xa4, 0x79, 0xe2, 0x46, 0x3b, 0x5a, 0xdc, + 0xd8, 0x36, 0x6e, 0x08, 0xd9, 0x09, 0x90, 0x89, 0x5e, 0xeb, 0xc1, 0x32, 0xd4, 0xdc, 0x86, 0xec, + 0x04, 0x45, 0x1a, 0xa7, 0x22, 0x18, 0xa7, 0x54, 0x18, 0xa7, 0x22, 0x04, 0xaa, 0x4e, 0xf8, 0x90, + 0x82, 0x08, 0xd5, 0x08, 0x71, 0x49, 0xe5, 0x39, 0xfe, 0xaa, 0xc4, 0x80, 0x72, 0x71, 0xa0, 0x5c, + 0x2c, 0xa8, 0x14, 0x0f, 0x72, 0xc4, 0x84, 0x24, 0x71, 0x31, 0x19, 0xa8, 0xba, 0xb8, 0x24, 0x2f, + 0x7a, 0x68, 0xda, 0x62, 0xd8, 0xfa, 0x6f, 0x15, 0xfd, 0xae, 0xdc, 0xe0, 0x24, 0x46, 0xe3, 0x40, + 0x8a, 0xa7, 0xee, 0x55, 0xc3, 0x1f, 0x3f, 0x7e, 0xaf, 0xda, 0x7b, 0xc4, 0xee, 0xb6, 0xed, 0xa3, + 0x9b, 0x5f, 0xb5, 0x4f, 0x8d, 0xe7, 0xd6, 0xc6, 0xaf, 0x9d, 0xe7, 0xb7, 0x1f, 0xfe, 0x9e, 0xf7, + 0xb5, 0xda, 0xa7, 0x9d, 0xe7, 0xd6, 0x82, 0x7f, 0x69, 0x3e, 0xb7, 0x96, 0x6c, 0x63, 0xfb, 0xf9, + 0xe3, 0xcc, 0x57, 0xd3, 0xcf, 0xeb, 0x8b, 0x1e, 0x68, 0x2c, 0x78, 0x60, 0x6b, 0xd1, 0x03, 0x5b, + 0x0b, 0x1e, 0x58, 0xd8, 0xa5, 0xfa, 0x82, 0x07, 0xb6, 0x9f, 0x7f, 0xcf, 0x7c, 0xff, 0xe3, 0xfc, + 0xaf, 0x36, 0x9f, 0x37, 0x7e, 0x2f, 0xfa, 0xb7, 0x9d, 0xe7, 0xdf, 0xad, 0x8d, 0x0d, 0x79, 0x07, + 0xf6, 0x46, 0xe6, 0x46, 0x3b, 0xbb, 0xec, 0xfc, 0xa5, 0x6c, 0xb7, 0xfd, 0x17, 0xdb, 0xad, 0xa8, + 0xed, 0xf6, 0x0f, 0x89, 0xfb, 0x0d, 0xd7, 0xb3, 0xcb, 0xa1, 0x67, 0x65, 0x44, 0xfe, 0x0f, 0xf1, + 0x8f, 0xed, 0xd3, 0xa0, 0x97, 0x79, 0x5a, 0x24, 0x03, 0xeb, 0xd7, 0xcd, 0x03, 0x63, 0x03, 0x63, + 0x03, 0x63, 0x97, 0x0e, 0x63, 0x9f, 0x90, 0xc0, 0x25, 0x2c, 0x8c, 0x9f, 0xc4, 0xed, 0x53, 0x1a, + 0x70, 0xfb, 0xc0, 0x0b, 0xd8, 0xae, 0x02, 0xc0, 0xbe, 0x2d, 0xb1, 0x49, 0x39, 0xe5, 0x27, 0xdf, + 0xfe, 0xc8, 0x3d, 0xa1, 0x96, 0xec, 0xf2, 0x94, 0x33, 0x8d, 0x8f, 0x4b, 0x24, 0x56, 0x3f, 0xa9, + 0x69, 0x5f, 0x55, 0xb9, 0xc4, 0xd9, 0xad, 0x27, 0xbb, 0x7c, 0xa2, 0xa2, 0x93, 0xfc, 0xe6, 0x54, + 0x3f, 0xaa, 0x5f, 0xda, 0x5a, 0x7d, 0x17, 0x8b, 0xab, 0x45, 0xd8, 0xcb, 0x6f, 0x0d, 0x38, 0x7e, + 0x85, 0x70, 0x3c, 0x93, 0xa9, 0x6f, 0x27, 0xba, 0x36, 0x6b, 0x55, 0xd2, 0x02, 0xcb, 0x8c, 0x36, + 0x9f, 0x34, 0xfa, 0xc7, 0xf1, 0xd9, 0x97, 0xf6, 0xf1, 0xed, 0xd7, 0xd3, 0xce, 0x7e, 0xfb, 0xf2, + 0x4a, 0x0e, 0x40, 0xbb, 0x01, 0x4d, 0x01, 0x4d, 0x01, 0x4d, 0x59, 0x53, 0x57, 0x80, 0x2d, 0x51, + 0xe6, 0x4d, 0x8b, 0x81, 0x5a, 0x43, 0x62, 0x9b, 0x87, 0xc1, 0xa0, 0x2f, 0xff, 0x2c, 0x5c, 0x85, + 0x97, 0x2c, 0xf6, 0x82, 0x9e, 0x12, 0xd8, 0x58, 0xa9, 0xa6, 0x33, 0xfd, 0x46, 0x5e, 0x2b, 0x80, + 0xbd, 0xb5, 0xf4, 0x35, 0xc7, 0x9d, 0xd3, 0x7f, 0xdd, 0x1e, 0x9f, 0xed, 0xcb, 0x56, 0x0d, 0x8a, + 0xf0, 0x7a, 0xe5, 0x2a, 0xec, 0x64, 0x07, 0x58, 0xc1, 0xb4, 0xbf, 0x99, 0x71, 0x25, 0x38, 0x7a, + 0xde, 0x7c, 0xb7, 0xac, 0x5a, 0x49, 0x71, 0xef, 0x33, 0x70, 0x6f, 0x49, 0x70, 0x2f, 0x72, 0x0d, + 0xcc, 0xbb, 0xb0, 0xd0, 0xdc, 0x9c, 0x04, 0x43, 0x8f, 0x7f, 0x33, 0x38, 0x69, 0xa4, 0x84, 0x70, + 0x1d, 0x79, 0x61, 0x3a, 0x6b, 0x73, 0x45, 0x14, 0x51, 0x78, 0x65, 0xc5, 0xd6, 0xab, 0x76, 0x45, + 0x54, 0x5e, 0x7a, 0x1f, 0x99, 0x69, 0x7d, 0x26, 0xe9, 0x7c, 0x3e, 0x7f, 0x1e, 0xc9, 0xce, 0x4d, + 0xd1, 0xc5, 0x43, 0xce, 0xdd, 0xb7, 0xeb, 0xb4, 0xea, 0x39, 0x77, 0x21, 0x44, 0x21, 0x44, 0xe7, + 0x0d, 0x08, 0xa1, 0xcc, 0x45, 0x62, 0x26, 0x15, 0xc7, 0x5e, 0xd9, 0xf1, 0x57, 0x25, 0x06, 0x94, + 0x8b, 0x03, 0xe5, 0x62, 0x41, 0xa5, 0x78, 0x28, 0x27, 0xd3, 0x47, 0x28, 0x33, 0x42, 0x99, 0x11, + 0xca, 0xfc, 0xb7, 0x3f, 0x08, 0x65, 0xc6, 0x76, 0x33, 0x30, 0x94, 0xb9, 0x14, 0x11, 0x00, 0x61, + 0xec, 0xf5, 0x24, 0x46, 0x73, 0xbd, 0x40, 0xa1, 0x61, 0xbb, 0x00, 0x95, 0x00, 0x95, 0x00, 0x95, + 0x6b, 0x05, 0x2a, 0x27, 0x2e, 0x71, 0xa9, 0x22, 0xc0, 0x82, 0x53, 0xfc, 0xa5, 0xf5, 0xcc, 0x29, + 0x7e, 0x76, 0xf5, 0xe7, 0xe1, 0x85, 0x32, 0x5f, 0xf8, 0xe5, 0x55, 0xfb, 0xaa, 0xb3, 0xaf, 0xa2, + 0xf9, 0x7a, 0xda, 0xfc, 0xc1, 0x9f, 0xfb, 0xe7, 0x2a, 0x1a, 0xdf, 0x7a, 0xf1, 0xe3, 0xb7, 0xff, + 0xa3, 0x66, 0x7a, 0x1a, 0xe9, 0x2b, 0x2e, 0xda, 0xa7, 0x07, 0x67, 0x27, 0x6b, 0x1b, 0x1e, 0x90, + 0x2d, 0x9f, 0xb0, 0x09, 0x76, 0x6e, 0xd3, 0x53, 0x8b, 0xd7, 0xb2, 0xb6, 0x14, 0xbc, 0x60, 0x78, + 0x6e, 0xd4, 0x44, 0x34, 0x8c, 0xb6, 0x45, 0xcb, 0x6a, 0x28, 0x68, 0x7c, 0x74, 0x24, 0x57, 0x3e, + 0x44, 0x02, 0x37, 0xdc, 0x80, 0x92, 0x81, 0x92, 0x81, 0x92, 0x0b, 0x47, 0xc9, 0xb8, 0xe1, 0x86, + 0x1b, 0x6e, 0x0a, 0x7e, 0x70, 0xc3, 0xad, 0x28, 0x48, 0x6c, 0xe1, 0x86, 0x5b, 0x99, 0x16, 0x77, + 0xb5, 0x6f, 0xb8, 0x95, 0xa3, 0x44, 0x23, 0x23, 0x6c, 0x90, 0x28, 0x28, 0xce, 0x38, 0x6c, 0x17, + 0xc0, 0x15, 0xc0, 0x15, 0xc0, 0x75, 0x8d, 0xcc, 0xbb, 0x34, 0x18, 0xf4, 0x69, 0x3c, 0x8c, 0x7f, + 0x87, 0x61, 0x57, 0xba, 0xce, 0xcd, 0x0c, 0xbb, 0xe7, 0x17, 0x87, 0x47, 0x87, 0x17, 0x17, 0x87, + 0x07, 0xca, 0x8c, 0xbb, 0x07, 0x87, 0xe7, 0x17, 0x87, 0xfb, 0xed, 0x2b, 0x35, 0xaf, 0xc8, 0x0c, + 0xbc, 0x9d, 0xd3, 0x6f, 0xed, 0xe3, 0xce, 0x81, 0x32, 0x1b, 0x6f, 0xe7, 0xb4, 0xbd, 0xbf, 0x7f, + 0x78, 0x79, 0xd9, 0xf9, 0x72, 0x7c, 0xa8, 0xcc, 0xca, 0xfb, 0xf5, 0xf4, 0x5f, 0xa7, 0x67, 0xff, + 0x3e, 0x55, 0xd1, 0xfe, 0x76, 0xda, 0xfe, 0xd5, 0xe1, 0xe9, 0x55, 0xfb, 0xaa, 0xf3, 0x4d, 0xc9, + 0x08, 0x9a, 0xd9, 0x4a, 0x7f, 0x3d, 0x3f, 0xee, 0xa4, 0x2b, 0xad, 0xe2, 0x0d, 0x3b, 0x99, 0x1b, + 0xe2, 0xfc, 0xaa, 0x73, 0xd2, 0xb9, 0xbc, 0xea, 0xec, 0xaf, 0xaf, 0x35, 0xfc, 0xe5, 0x38, 0x49, + 0x33, 0x14, 0xbc, 0x7e, 0xc1, 0x64, 0x15, 0x5b, 0x56, 0x53, 0x41, 0xfb, 0xaf, 0x0e, 0x93, 0x1a, + 0xab, 0xfb, 0x58, 0x1e, 0xa8, 0x71, 0x1a, 0x4c, 0x6d, 0xc2, 0x96, 0xb5, 0xa3, 0xe0, 0x05, 0x2f, + 0x32, 0x59, 0x8d, 0xe3, 0xe0, 0x45, 0x12, 0x48, 0x35, 0xb8, 0x4c, 0xda, 0x1f, 0x4b, 0xb2, 0x96, + 0xd5, 0xc0, 0xfd, 0xca, 0x25, 0xe6, 0x8b, 0x3e, 0xb2, 0x98, 0xd8, 0x83, 0x20, 0x61, 0xe4, 0xce, + 0x97, 0x8c, 0xa5, 0x62, 0xda, 0xa5, 0x31, 0x0d, 0x1c, 0x23, 0x0c, 0x61, 0x63, 0xe0, 0x77, 0x71, + 0xb4, 0x6f, 0x35, 0xea, 0x7b, 0x5b, 0x2d, 0xeb, 0x84, 0x04, 0xa4, 0x47, 0x53, 0x1c, 0x6d, 0x75, + 0x82, 0x6e, 0x18, 0xf7, 0x33, 0x34, 0x68, 0x7d, 0x21, 0x09, 0xb5, 0xba, 0x61, 0x6c, 0xb1, 0x7b, + 0x7a, 0x1d, 0x4c, 0x35, 0x91, 0x95, 0x43, 0x0a, 0x28, 0xb3, 0xce, 0xe3, 0x90, 0x85, 0x4e, 0xe8, + 0x5b, 0x1f, 0x3b, 0xe7, 0x1b, 0xaf, 0xbe, 0x62, 0x5b, 0x9d, 0xa8, 0x3d, 0x8c, 0x1a, 0xb8, 0xcc, + 0x88, 0xe5, 0xd5, 0xfe, 0x75, 0x60, 0x65, 0xaf, 0xdc, 0x6d, 0xd6, 0x5b, 0x56, 0xe7, 0xfc, 0xa1, + 0x69, 0xa5, 0xff, 0x42, 0x7d, 0x9a, 0x24, 0xd6, 0xe8, 0xab, 0x56, 0x7b, 0x90, 0xb6, 0x97, 0x72, + 0xbd, 0x81, 0x74, 0x48, 0xaa, 0x9a, 0x4e, 0xcd, 0xa3, 0x55, 0x2f, 0x1b, 0x43, 0x91, 0x49, 0x47, + 0x35, 0xc3, 0x9a, 0xcb, 0xb4, 0xcc, 0xd8, 0x39, 0xb0, 0x6e, 0x19, 0x68, 0xdd, 0x42, 0xfa, 0x22, + 0xa4, 0x2f, 0x82, 0x29, 0x0f, 0xa6, 0x3c, 0x98, 0xf2, 0x38, 0x76, 0x2b, 0xd2, 0x17, 0x59, 0x48, + 0x5f, 0xb4, 0xa2, 0x16, 0x19, 0xa4, 0x2f, 0x52, 0x24, 0xd5, 0x90, 0xbd, 0xe7, 0x55, 0x7b, 0x4a, + 0xb3, 0xf7, 0x08, 0xd4, 0xdb, 0x16, 0x9f, 0x6d, 0x91, 0xec, 0x13, 0x0f, 0x71, 0x2c, 0x31, 0x7d, + 0x4f, 0xd6, 0x1a, 0xca, 0xe8, 0x69, 0x43, 0x9f, 0xc8, 0x3d, 0x81, 0xdc, 0x13, 0x7f, 0x7b, 0xb4, + 0xed, 0x5e, 0x1c, 0x0e, 0x14, 0xe4, 0xa0, 0x98, 0x6a, 0x5b, 0x2e, 0x19, 0xad, 0x81, 0x8c, 0x82, + 0x8c, 0x82, 0x8c, 0x4a, 0xb0, 0x66, 0x49, 0x12, 0x23, 0x93, 0x06, 0x25, 0x15, 0xdd, 0x5d, 0x78, + 0x08, 0xa4, 0x14, 0xe1, 0x55, 0x2c, 0x56, 0x94, 0x89, 0x17, 0x95, 0x62, 0x46, 0xb9, 0xb8, 0x51, + 0x2d, 0x76, 0xb4, 0x89, 0x1f, 0x6d, 0x62, 0x48, 0x87, 0x38, 0x92, 0xcf, 0x4b, 0x55, 0x18, 0x16, + 0x64, 0x8b, 0xa9, 0x49, 0xc3, 0xc4, 0x71, 0x68, 0xc4, 0xec, 0x7e, 0xe8, 0x2a, 0xdc, 0x90, 0x93, + 0x02, 0xfe, 0x53, 0x2f, 0x53, 0xb4, 0x53, 0x54, 0x78, 0x27, 0x66, 0x5e, 0x92, 0x05, 0x8f, 0x57, + 0x94, 0xb4, 0x7f, 0xa3, 0x68, 0x5e, 0xe4, 0x3a, 0x31, 0xb4, 0x09, 0x7a, 0x1d, 0x02, 0x5f, 0x9b, + 0xe0, 0xd7, 0xa5, 0x00, 0xb4, 0x2b, 0x02, 0xed, 0x0a, 0x41, 0xa7, 0x62, 0x50, 0xa3, 0x20, 0x14, + 0x29, 0x8a, 0xc9, 0xc4, 0x48, 0x77, 0xb2, 0x2c, 0x3c, 0x2d, 0x77, 0x61, 0xe8, 0x53, 0x12, 0xa8, + 0x3c, 0x2f, 0x63, 0x74, 0x5a, 0x33, 0x6a, 0x09, 0x14, 0x25, 0xb4, 0x9f, 0x79, 0x8f, 0xf2, 0x04, + 0xf7, 0xea, 0x4f, 0x82, 0x8a, 0x4b, 0x71, 0xc4, 0x7d, 0xa0, 0x31, 0xf3, 0x92, 0x2c, 0x3a, 0x67, + 0x68, 0xbc, 0x7e, 0x20, 0xbe, 0x06, 0x90, 0x33, 0xff, 0xbd, 0x26, 0xe3, 0x9d, 0x5a, 0xb5, 0x0a, + 0xb4, 0x03, 0xb4, 0x03, 0xb4, 0x03, 0xb4, 0xb3, 0xee, 0x68, 0x67, 0xe0, 0x05, 0xac, 0xd6, 0xd4, + 0x00, 0x76, 0x9a, 0x0a, 0x5f, 0xa1, 0x26, 0x67, 0xc1, 0xdb, 0x1f, 0xb5, 0xc7, 0xdd, 0x52, 0x9d, + 0xd3, 0x60, 0xe6, 0x65, 0x93, 0x8b, 0xf0, 0x9f, 0xf4, 0xbc, 0x4f, 0xd7, 0xb5, 0xf8, 0xd9, 0xbd, + 0xae, 0xfa, 0x9a, 0xbc, 0x26, 0xb1, 0xf0, 0x7a, 0xab, 0x90, 0x47, 0xfd, 0x5b, 0xa5, 0x51, 0xdd, + 0xdb, 0xc6, 0x6e, 0x31, 0x42, 0x35, 0xa9, 0x6f, 0xfd, 0x06, 0xec, 0x15, 0xec, 0x75, 0xd9, 0x69, + 0x89, 0x62, 0x4a, 0xfb, 0x11, 0x53, 0x4f, 0x57, 0xc7, 0x2f, 0x32, 0x99, 0x9f, 0xa6, 0xd0, 0x1b, + 0x04, 0x15, 0x04, 0x15, 0x04, 0x15, 0x04, 0x75, 0xdd, 0x09, 0x2a, 0xcc, 0xf1, 0x00, 0x34, 0x25, + 0x06, 0x34, 0xb6, 0x4b, 0x7d, 0xf2, 0xa4, 0x0d, 0xd6, 0x8c, 0x5e, 0x67, 0x32, 0xb8, 0x81, 0xe9, + 0x1d, 0xc8, 0x06, 0xc8, 0x06, 0xc8, 0x66, 0xed, 0x91, 0x0d, 0x4c, 0xef, 0x4b, 0xff, 0xac, 0xaa, + 0xe9, 0xbd, 0x0a, 0x63, 0xaa, 0x19, 0x62, 0xe1, 0xf5, 0x56, 0x29, 0xc2, 0xf4, 0xbe, 0xd5, 0xac, + 0x62, 0xb7, 0x98, 0xa1, 0x9a, 0xd4, 0xb7, 0x0e, 0xd3, 0x3b, 0x98, 0x6a, 0x0e, 0xa6, 0xea, 0x85, + 0xb1, 0xc7, 0xb4, 0x90, 0xd4, 0xd1, 0x9b, 0x10, 0x1c, 0x06, 0x86, 0x0a, 0x86, 0x0a, 0x86, 0x0a, + 0x86, 0x6a, 0x3c, 0x43, 0xdd, 0xd5, 0x40, 0x50, 0xb7, 0x41, 0x50, 0x4b, 0x4a, 0x50, 0x11, 0x1b, + 0x06, 0x82, 0xba, 0xe4, 0x56, 0xa9, 0x6f, 0x37, 0xb0, 0x59, 0xc0, 0x4f, 0xc1, 0x4f, 0xc1, 0x4f, + 0xf3, 0x4d, 0xcb, 0x83, 0x17, 0xb3, 0x01, 0xf1, 0xc7, 0x89, 0x0e, 0xd5, 0xd3, 0xd4, 0xb7, 0x2f, + 0x04, 0x2f, 0x03, 0x2f, 0x03, 0x2f, 0x03, 0x2f, 0x33, 0x86, 0x97, 0xbd, 0x54, 0xf0, 0xd7, 0x11, + 0x16, 0xb5, 0xa7, 0xf0, 0x1d, 0xa3, 0x39, 0x33, 0x9e, 0x9c, 0x4d, 0x65, 0xec, 0x6d, 0x68, 0x58, + 0x9b, 0x99, 0x35, 0xda, 0xd5, 0xf0, 0xae, 0x73, 0xc2, 0x18, 0x8d, 0x03, 0xe5, 0xcb, 0x35, 0x79, + 0xe1, 0xc7, 0xef, 0x55, 0x7b, 0xef, 0xe6, 0xf7, 0xf7, 0x9a, 0xbd, 0x77, 0x33, 0xfc, 0xb5, 0x96, + 0xfd, 0xef, 0x57, 0xfd, 0xf9, 0x77, 0xfd, 0x7b, 0xd5, 0x6e, 0x8c, 0x3e, 0xad, 0x6f, 0x7f, 0xaf, + 0xda, 0xdb, 0x37, 0x1b, 0x1f, 0xaf, 0xaf, 0x3f, 0xe7, 0x7d, 0x66, 0xe3, 0xd7, 0xd6, 0x73, 0x45, + 0xf9, 0x70, 0x6e, 0x74, 0x2c, 0xcf, 0xd9, 0x65, 0xe7, 0x2f, 0xed, 0x6b, 0xf4, 0xdf, 0x8f, 0xba, + 0x56, 0x69, 0xe3, 0x1f, 0x1a, 0xd6, 0xe9, 0x83, 0xc1, 0xd4, 0x5f, 0xaf, 0x98, 0x6b, 0x42, 0xcc, + 0xc9, 0x12, 0x73, 0xd9, 0x69, 0x20, 0x76, 0xb7, 0x6d, 0x1f, 0xdd, 0xfc, 0xaa, 0x7d, 0x6a, 0x3c, + 0xb7, 0x36, 0x7e, 0xed, 0x3c, 0xbf, 0xfd, 0xf0, 0xf7, 0xbc, 0xaf, 0xd5, 0x3e, 0xed, 0x3c, 0xb7, + 0x16, 0xfc, 0x4b, 0xf3, 0xb9, 0xb5, 0x64, 0x1b, 0xdb, 0xcf, 0x1f, 0x67, 0xbe, 0x9a, 0x7e, 0x5e, + 0x5f, 0xf4, 0x40, 0x63, 0xc1, 0x03, 0x5b, 0x8b, 0x1e, 0xd8, 0x5a, 0xf0, 0xc0, 0xc2, 0x2e, 0xd5, + 0x17, 0x3c, 0xb0, 0xfd, 0xfc, 0x7b, 0xe6, 0xfb, 0x1f, 0xe7, 0x7f, 0xb5, 0xf9, 0xbc, 0xf1, 0x7b, + 0xd1, 0xbf, 0xed, 0x3c, 0xff, 0x6e, 0x6d, 0x6c, 0x40, 0xf0, 0x0b, 0x0b, 0x7e, 0x6c, 0x5b, 0xfd, + 0xdb, 0xd6, 0x7c, 0x45, 0x08, 0xc3, 0x63, 0x76, 0x86, 0x8e, 0xbd, 0x84, 0xb5, 0x19, 0x8b, 0xd5, + 0xb2, 0xc6, 0x13, 0x2f, 0x38, 0xf4, 0xb3, 0xec, 0x3d, 0x8a, 0x6d, 0xe5, 0x95, 0x13, 0xf2, 0x38, + 0xf5, 0xa6, 0xda, 0x6e, 0xa3, 0xd1, 0xdc, 0x69, 0x34, 0xaa, 0x3b, 0x5b, 0x3b, 0xd5, 0xbd, 0xed, + 0xed, 0x5a, 0xb3, 0xa6, 0xd2, 0xd1, 0x77, 0x16, 0xbb, 0x34, 0xa6, 0xee, 0x97, 0xa7, 0x4a, 0xcb, + 0x0a, 0x06, 0xbe, 0xaf, 0xe3, 0x55, 0x5f, 0x13, 0x1a, 0x2b, 0x75, 0x06, 0xc0, 0xe4, 0x5d, 0xb8, + 0x68, 0x51, 0x69, 0xf2, 0xf6, 0xbd, 0xe0, 0x87, 0xed, 0x87, 0x8e, 0x8e, 0x3c, 0x5e, 0x73, 0xde, + 0x09, 0xc3, 0xf7, 0x7c, 0x40, 0x05, 0xc3, 0x37, 0xc7, 0xa2, 0xc3, 0xf0, 0x5d, 0x76, 0x80, 0x04, + 0xc3, 0x77, 0x3e, 0x6b, 0x03, 0x0c, 0xdf, 0xb9, 0x2c, 0x42, 0x30, 0x7c, 0x4b, 0xb3, 0x08, 0xc1, + 0xf0, 0x6d, 0x8a, 0xfd, 0x03, 0x86, 0xef, 0xe2, 0x14, 0x4f, 0x31, 0x62, 0x0e, 0x86, 0x6f, 0x69, + 0x62, 0x0e, 0x16, 0x44, 0x18, 0xbe, 0x4d, 0x15, 0xfc, 0xd8, 0xb6, 0x30, 0x7c, 0x97, 0x84, 0xd7, + 0x59, 0x88, 0xb8, 0x85, 0xf9, 0x91, 0xc7, 0xfc, 0x98, 0x55, 0xb8, 0x8d, 0x6d, 0xcf, 0xd5, 0x67, + 0x7d, 0x7c, 0x79, 0x25, 0x8c, 0x8f, 0x30, 0x3e, 0xc2, 0xf8, 0x08, 0xe3, 0xa3, 0x31, 0xc6, 0x47, + 0xdc, 0x86, 0x2c, 0x11, 0x21, 0xc7, 0x6d, 0x48, 0x25, 0x5b, 0x1d, 0xb7, 0x21, 0x25, 0x6d, 0x95, + 0xfa, 0x36, 0x12, 0xe5, 0x9b, 0xc3, 0x9e, 0xc0, 0xcd, 0xc0, 0xcd, 0x0a, 0x6f, 0x51, 0x76, 0x8d, + 0xdd, 0xf6, 0xa0, 0x97, 0x22, 0x46, 0xea, 0x2a, 0xd1, 0xf7, 0x8a, 0xf9, 0xe2, 0x66, 0x0a, 0x72, + 0xbb, 0xad, 0xac, 0xdc, 0x5c, 0x97, 0x38, 0x34, 0x79, 0xfb, 0x41, 0xfa, 0xf7, 0x83, 0x4f, 0x82, + 0x56, 0xc6, 0x28, 0xdd, 0xec, 0xf7, 0xec, 0x3b, 0x51, 0xcb, 0x8b, 0x1e, 0x9a, 0xa3, 0x5f, 0x47, + 0xa6, 0xfa, 0xd1, 0xe3, 0x93, 0xbf, 0x37, 0x1f, 0xe2, 0x38, 0xca, 0xfe, 0x63, 0xf7, 0xe2, 0x70, + 0x10, 0x6d, 0x2a, 0xa9, 0x42, 0x3e, 0x19, 0xd4, 0x01, 0x4d, 0x9c, 0xd8, 0x8b, 0x46, 0x67, 0xaa, + 0xd2, 0x76, 0x5d, 0x2f, 0xfd, 0x9d, 0xf8, 0xd6, 0xb7, 0x8b, 0x8b, 0x73, 0xcb, 0x25, 0x8c, 0x58, + 0xdd, 0x30, 0xb6, 0x3a, 0xe7, 0x0f, 0x4d, 0xeb, 0x65, 0xc8, 0x8a, 0x29, 0x72, 0x0d, 0x14, 0x19, + 0x14, 0x19, 0x14, 0x79, 0xf5, 0x29, 0xb2, 0xaa, 0x62, 0xeb, 0x93, 0x17, 0x68, 0x0c, 0x67, 0x9c, + 0x39, 0xa0, 0xda, 0xc2, 0x1a, 0x17, 0x49, 0xf3, 0xa3, 0x30, 0x1e, 0x8a, 0xf1, 0x30, 0x78, 0x2b, + 0xc0, 0x3f, 0x59, 0x09, 0x65, 0x89, 0xc5, 0xee, 0xa9, 0x35, 0xea, 0xa6, 0x95, 0x76, 0xd3, 0xca, + 0xba, 0x79, 0x1d, 0xe8, 0xf1, 0x23, 0x2b, 0xb6, 0x88, 0x6a, 0x13, 0xfb, 0x3a, 0xc5, 0xbf, 0x76, + 0x35, 0xa0, 0x5b, 0x1d, 0x14, 0xa6, 0x16, 0x0a, 0x53, 0x0f, 0x45, 0xa8, 0x09, 0x4d, 0xc4, 0x55, + 0xf1, 0x79, 0x53, 0x6e, 0x61, 0x9d, 0x39, 0x6d, 0x5a, 0xc2, 0x3c, 0x67, 0xe0, 0xf0, 0x9e, 0x86, + 0x77, 0x69, 0x09, 0xfb, 0x54, 0x4b, 0xd1, 0xde, 0x59, 0x39, 0xad, 0x61, 0xa0, 0x33, 0x6b, 0xb8, + 0xab, 0xf1, 0x9d, 0xba, 0x23, 0x4f, 0x26, 0x2f, 0x5e, 0x9d, 0xf0, 0xd0, 0x89, 0x85, 0x4c, 0xe7, + 0xb2, 0x15, 0x11, 0x35, 0x34, 0x79, 0xfb, 0x6a, 0x85, 0x8d, 0x4e, 0xd6, 0x4f, 0xcb, 0x9b, 0x9e, + 0x3f, 0xad, 0xb0, 0xd8, 0x6c, 0x42, 0x6c, 0xaa, 0x16, 0x9b, 0x88, 0xdb, 0x5b, 0xd9, 0x70, 0xd3, + 0xb5, 0x55, 0x24, 0xd8, 0xce, 0x2b, 0x19, 0x86, 0xaa, 0x59, 0xb1, 0x22, 0xac, 0x56, 0xaf, 0xa1, + 0xb7, 0xe4, 0x9e, 0xc8, 0x1b, 0xd9, 0x9e, 0x48, 0xb5, 0x2e, 0xe5, 0x4a, 0xe2, 0xdc, 0xd3, 0x3e, + 0x89, 0x08, 0xbb, 0x1f, 0xba, 0x0e, 0x23, 0x1a, 0x0c, 0x1d, 0x7a, 0xf6, 0x94, 0xff, 0x70, 0xde, + 0xaf, 0x9b, 0xd3, 0xce, 0xc3, 0xcc, 0x6d, 0xf8, 0xe2, 0x30, 0x7c, 0xc7, 0x55, 0xf8, 0xa1, 0x9c, + 0xcb, 0x27, 0x11, 0x23, 0x57, 0x26, 0xd3, 0x64, 0xb3, 0x98, 0x38, 0x3f, 0xbc, 0xa0, 0x27, 0x7d, + 0xf9, 0x5e, 0x10, 0xf0, 0xec, 0xbb, 0x24, 0x6f, 0x42, 0x35, 0x5e, 0x4f, 0x65, 0x66, 0x6f, 0x95, + 0x66, 0x6e, 0xe5, 0x66, 0x6d, 0xd5, 0x66, 0x6c, 0x6d, 0x66, 0x6b, 0x6d, 0x66, 0x6a, 0x1d, 0x66, + 0xe9, 0x72, 0x87, 0xab, 0xa8, 0xf2, 0x52, 0x56, 0x9c, 0xf1, 0x09, 0x55, 0x1c, 0xb2, 0xa2, 0x36, + 0x86, 0x04, 0x41, 0x1b, 0xc5, 0x8b, 0x35, 0x5d, 0xe2, 0x4d, 0xbb, 0x98, 0xd3, 0x2e, 0xee, 0x74, + 0x8a, 0x3d, 0xc5, 0x58, 0xde, 0xd4, 0xa0, 0x8d, 0x71, 0xb1, 0x3e, 0xdb, 0xa5, 0x4e, 0x4c, 0x47, + 0x6b, 0xa0, 0x29, 0x68, 0x63, 0xce, 0xbb, 0x95, 0x07, 0x6d, 0xa8, 0x2f, 0x1d, 0x38, 0x79, 0x59, + 0x55, 0xad, 0x81, 0xe0, 0x06, 0x01, 0x23, 0x65, 0x53, 0x3d, 0xda, 0x55, 0x90, 0x6e, 0x55, 0x54, + 0x98, 0x4a, 0x2a, 0x4c, 0x35, 0x15, 0xa1, 0xa2, 0xd4, 0x1b, 0xb4, 0xac, 0x95, 0x0c, 0x18, 0x51, + 0x7d, 0x35, 0xef, 0xad, 0x68, 0xd4, 0x70, 0xb7, 0x47, 0xd3, 0x55, 0xbd, 0xf1, 0x8f, 0x46, 0xa7, + 0xa7, 0xce, 0xab, 0x7b, 0x93, 0x97, 0x6a, 0xae, 0xb8, 0x3f, 0x79, 0x6f, 0x51, 0xb7, 0xb3, 0x5e, + 0x8e, 0x88, 0xee, 0x5b, 0x5a, 0x9a, 0xa4, 0xcc, 0xeb, 0x2d, 0xa5, 0xf1, 0x8a, 0xdf, 0xcc, 0x96, + 0xd2, 0x56, 0xf8, 0x10, 0x9b, 0x4a, 0x83, 0xa7, 0xca, 0x5a, 0x05, 0x7f, 0x98, 0x6a, 0xd2, 0xae, + 0xe7, 0x8a, 0xe0, 0xe4, 0x7d, 0xda, 0xaf, 0x0a, 0xaa, 0xdf, 0x08, 0x0a, 0x97, 0xa8, 0x92, 0x79, + 0x50, 0x5e, 0x5c, 0x5f, 0xfa, 0x68, 0xfd, 0xdb, 0x17, 0x83, 0xa7, 0x82, 0xa7, 0x82, 0xa7, 0x82, + 0xa7, 0x82, 0xa7, 0x8e, 0x4e, 0x5b, 0xaa, 0xb5, 0x62, 0xda, 0xd5, 0x79, 0xab, 0x61, 0x47, 0x4f, + 0xe6, 0xd0, 0xfb, 0xa5, 0x2f, 0x6d, 0x7b, 0xdd, 0x56, 0x90, 0x4e, 0x87, 0xd1, 0x5b, 0x47, 0x4b, + 0xe5, 0x96, 0x69, 0xc6, 0xac, 0xa7, 0x82, 0xcb, 0x34, 0xa1, 0x2a, 0xac, 0x92, 0xcb, 0xa4, 0x13, + 0xfa, 0x2a, 0xba, 0xcc, 0xbe, 0x52, 0x79, 0x65, 0x17, 0x60, 0x75, 0x73, 0xb0, 0x3a, 0xf2, 0xb7, + 0xcc, 0x79, 0x8f, 0xd6, 0xa0, 0xbb, 0xd9, 0xf0, 0x30, 0x25, 0x71, 0x78, 0xea, 0x56, 0x5c, 0x45, + 0x1a, 0xcf, 0x84, 0x11, 0x46, 0xd5, 0xc7, 0xb5, 0x0c, 0x5f, 0x63, 0x78, 0x58, 0x4b, 0x1d, 0x61, + 0x2d, 0xa5, 0xe1, 0x68, 0x08, 0x6b, 0x59, 0x5f, 0xed, 0x84, 0xb0, 0x16, 0xb9, 0xd3, 0x89, 0xb0, + 0x96, 0xbc, 0xaa, 0x06, 0xe6, 0xc2, 0x12, 0xab, 0x20, 0xdd, 0xaa, 0xa8, 0x30, 0x95, 0x54, 0x98, + 0x6a, 0x2a, 0x42, 0x45, 0xa9, 0xa7, 0x68, 0x16, 0xc2, 0x5a, 0x24, 0x88, 0x46, 0x84, 0xb5, 0x88, + 0x98, 0xcc, 0x10, 0xd6, 0xa2, 0xb1, 0x03, 0x08, 0x6b, 0x51, 0xbd, 0xa5, 0x10, 0xd6, 0x82, 0xb0, + 0x96, 0xdc, 0x10, 0x1e, 0xd1, 0x18, 0x33, 0x9b, 0x0a, 0xd1, 0x18, 0xa0, 0x57, 0xa0, 0x57, 0xa0, + 0x57, 0xa0, 0x57, 0x65, 0xa3, 0x57, 0x88, 0xc6, 0x40, 0x34, 0x06, 0x1f, 0xd1, 0x43, 0x34, 0xc6, + 0xaa, 0x46, 0x63, 0xc0, 0x4d, 0x63, 0xad, 0x53, 0x10, 0xc1, 0xd0, 0xb7, 0x8d, 0x72, 0x33, 0xe5, + 0xdf, 0x32, 0x45, 0x6f, 0x95, 0x8a, 0x92, 0x00, 0x8e, 0x78, 0xe0, 0xb0, 0x60, 0x04, 0x47, 0x3a, + 0xe3, 0x77, 0xde, 0x5e, 0x64, 0x1d, 0xfe, 0xe6, 0x93, 0xe0, 0xb6, 0x13, 0x3d, 0x34, 0x6f, 0xdb, + 0xc3, 0x5e, 0xde, 0x7e, 0x8b, 0xe3, 0xe8, 0x8f, 0xb4, 0x7f, 0xb7, 0x93, 0xef, 0x5e, 0x8d, 0xbb, + 0xb7, 0x06, 0xf9, 0xa8, 0xd4, 0xc4, 0xbb, 0x28, 0x8d, 0x73, 0x51, 0x9e, 0x75, 0xaa, 0x8e, 0xac, + 0x53, 0xda, 0x58, 0x2d, 0xb2, 0x4e, 0xad, 0x9e, 0xd6, 0x52, 0x96, 0x75, 0x8a, 0x38, 0x0e, 0x8d, + 0x98, 0xdd, 0x0f, 0x5d, 0x0d, 0x21, 0x7a, 0xd3, 0x2f, 0x53, 0x56, 0xc3, 0x4c, 0x7d, 0xa4, 0x49, + 0x25, 0x03, 0xf8, 0x6a, 0xe0, 0xd8, 0x0d, 0xea, 0x8d, 0xeb, 0x16, 0xf8, 0xda, 0x04, 0xbf, 0x2e, + 0x05, 0xa0, 0x5d, 0x11, 0x68, 0x57, 0x08, 0x3a, 0x15, 0x83, 0x99, 0xcc, 0x58, 0x5f, 0xbd, 0xf1, + 0xbb, 0x30, 0xf4, 0x29, 0x09, 0x34, 0x54, 0x1c, 0xaf, 0xd5, 0xd6, 0x38, 0x8a, 0x9e, 0xb8, 0x0f, + 0x34, 0x66, 0x5e, 0x92, 0xd9, 0xd7, 0x86, 0x5c, 0xf2, 0x41, 0x61, 0x01, 0xbb, 0x17, 0x9d, 0x3d, + 0xff, 0xbd, 0x26, 0xab, 0xef, 0x5a, 0xb5, 0x0a, 0xe5, 0x0d, 0xe5, 0x0d, 0xe5, 0x0d, 0xe5, 0xbd, + 0xee, 0xca, 0x7b, 0xe0, 0x05, 0xac, 0xd6, 0xd4, 0xa0, 0xbb, 0x9b, 0x0a, 0x5f, 0xa1, 0x27, 0x56, + 0x53, 0x8f, 0xcb, 0x4e, 0x5f, 0xac, 0xc3, 0x38, 0x80, 0xae, 0xa6, 0x29, 0xd2, 0xa0, 0xa8, 0xb0, + 0x39, 0xfd, 0xe1, 0x72, 0xcf, 0x7a, 0x7c, 0xad, 0xfa, 0xb7, 0x4a, 0xa3, 0xba, 0xb7, 0x8d, 0xdd, + 0x62, 0x84, 0x6a, 0x52, 0xdf, 0xfa, 0xcd, 0x1a, 0x93, 0x31, 0x67, 0x10, 0xc7, 0x29, 0x1d, 0x1a, + 0xdf, 0xa4, 0xd3, 0x90, 0xb5, 0xff, 0xed, 0x1b, 0x41, 0x35, 0x40, 0x35, 0x40, 0x35, 0x40, 0x35, + 0x8c, 0xa2, 0x1a, 0xbb, 0x1a, 0x98, 0xc6, 0x36, 0x98, 0x46, 0x49, 0x99, 0x46, 0x15, 0xd8, 0x11, + 0x4c, 0x63, 0xb9, 0xad, 0x52, 0xdf, 0x06, 0xd1, 0x00, 0xd1, 0x00, 0xd1, 0x88, 0x62, 0x4a, 0xfb, + 0x11, 0x53, 0xcf, 0x2f, 0xc6, 0x2f, 0x32, 0xd9, 0xaf, 0x93, 0xe2, 0x48, 0x38, 0x76, 0xc0, 0xb6, + 0xc0, 0xb6, 0xc0, 0xb6, 0xd6, 0x9d, 0x6d, 0x21, 0x2a, 0x43, 0xa7, 0x7e, 0xb6, 0x5d, 0xea, 0x93, + 0x27, 0x6d, 0x5a, 0x7a, 0xf4, 0x3a, 0x93, 0x75, 0x35, 0x22, 0x30, 0xa0, 0xa8, 0xa1, 0xa8, 0xa1, + 0xa8, 0xd7, 0x5e, 0x51, 0x23, 0x02, 0x63, 0xe9, 0x1f, 0xd8, 0x45, 0xc5, 0xde, 0x07, 0xbb, 0xa8, + 0xd4, 0xad, 0x52, 0x84, 0x5d, 0x74, 0xab, 0x59, 0xc5, 0x6e, 0x31, 0x43, 0x35, 0xa9, 0x6f, 0x7d, + 0xbd, 0x0d, 0xa3, 0xba, 0x22, 0x2f, 0x54, 0x47, 0x5c, 0x20, 0xe4, 0x1d, 0x84, 0x0b, 0x84, 0x0b, + 0x84, 0x0b, 0x84, 0x0b, 0x71, 0x28, 0xe0, 0x5b, 0x3a, 0x40, 0x34, 0x22, 0xde, 0xc1, 0xb7, 0x96, + 0xdc, 0x2a, 0xda, 0xb2, 0x0b, 0x83, 0x6e, 0x81, 0x6e, 0x95, 0x98, 0x6e, 0x3d, 0x78, 0x31, 0x1b, + 0x10, 0xdf, 0x1e, 0x25, 0xa2, 0x52, 0xcf, 0xba, 0xde, 0xbe, 0x10, 0x34, 0x03, 0x34, 0x03, 0x34, + 0x03, 0x34, 0xc3, 0x18, 0x9a, 0xe1, 0x45, 0x8a, 0x65, 0xd7, 0xb4, 0xfc, 0xaa, 0xed, 0x29, 0x7c, + 0xc7, 0x68, 0xce, 0x8c, 0xe7, 0x1a, 0x2f, 0x2b, 0xf3, 0xd0, 0xd0, 0xb0, 0x36, 0x33, 0x6b, 0xb4, + 0xab, 0x27, 0xa9, 0x32, 0xa3, 0x71, 0xa0, 0xad, 0x70, 0x4d, 0xe5, 0xe3, 0xf7, 0xaa, 0xbd, 0x77, + 0xf3, 0xfb, 0x7b, 0xcd, 0xde, 0xbb, 0x19, 0xfe, 0x5a, 0xcb, 0xfe, 0xf7, 0xab, 0xfe, 0xfc, 0xbb, + 0xfe, 0xbd, 0x6a, 0x37, 0x46, 0x9f, 0xd6, 0xb7, 0xbf, 0x57, 0xed, 0xed, 0x9b, 0x8d, 0x8f, 0xd7, + 0xd7, 0x9f, 0xf3, 0x3e, 0xb3, 0xf1, 0x6b, 0xeb, 0x59, 0x7d, 0x5a, 0xf2, 0x1b, 0x1d, 0xcb, 0x73, + 0x76, 0xd9, 0xf9, 0x4b, 0xfb, 0x1a, 0xfd, 0xf7, 0xa3, 0xae, 0x55, 0xda, 0xf8, 0x47, 0xc5, 0xf4, + 0xe2, 0x1d, 0x9f, 0x56, 0x48, 0xcc, 0x35, 0x21, 0xe6, 0x64, 0x89, 0xb9, 0xec, 0x34, 0x10, 0xbb, + 0xdb, 0xb6, 0x8f, 0x6e, 0x7e, 0xd5, 0x3e, 0x35, 0x9e, 0x5b, 0x1b, 0xbf, 0x76, 0x9e, 0xdf, 0x7e, + 0xf8, 0x7b, 0xde, 0xd7, 0x6a, 0x9f, 0x76, 0x9e, 0x5b, 0x0b, 0xfe, 0xa5, 0xf9, 0xdc, 0x5a, 0xb2, + 0x8d, 0xed, 0xe7, 0x8f, 0x33, 0x5f, 0x4d, 0x3f, 0xaf, 0x2f, 0x7a, 0xa0, 0xb1, 0xe0, 0x81, 0xad, + 0x45, 0x0f, 0x6c, 0x2d, 0x78, 0x60, 0x61, 0x97, 0xea, 0x0b, 0x1e, 0xd8, 0x7e, 0xfe, 0x3d, 0xf3, + 0xfd, 0x8f, 0xf3, 0xbf, 0xda, 0x7c, 0xde, 0xf8, 0xbd, 0xe8, 0xdf, 0x76, 0x9e, 0x7f, 0xb7, 0x36, + 0x36, 0x20, 0xf8, 0x85, 0x05, 0x3f, 0xb6, 0xad, 0xfe, 0x6d, 0x6b, 0xbe, 0x22, 0x34, 0xcd, 0x8e, + 0xa6, 0x88, 0x31, 0x6a, 0x29, 0xda, 0xa1, 0xaf, 0x58, 0x47, 0xa1, 0x45, 0x3a, 0x34, 0x16, 0xe7, + 0xd0, 0x58, 0x94, 0xc3, 0x2c, 0x0b, 0xae, 0xef, 0x05, 0x3f, 0x6c, 0x3f, 0x74, 0x74, 0xe4, 0x8e, + 0x9c, 0xf3, 0x4e, 0xd8, 0x71, 0x61, 0xc7, 0x85, 0x1d, 0x17, 0x76, 0x5c, 0xd8, 0x71, 0x61, 0xc7, + 0x85, 0x1d, 0x17, 0x76, 0x5c, 0xd0, 0x79, 0xd8, 0x71, 0x61, 0xc7, 0x85, 0x1d, 0x17, 0x76, 0x5c, + 0xd8, 0x71, 0x21, 0xf8, 0x61, 0xc7, 0x85, 0x1d, 0x77, 0xdd, 0xed, 0xb8, 0x46, 0x59, 0xd3, 0xb2, + 0x9a, 0x9d, 0xb1, 0xed, 0xb9, 0xfa, 0x8c, 0x69, 0x2f, 0xaf, 0x84, 0x2d, 0x0d, 0xb6, 0x34, 0xd8, + 0xd2, 0x60, 0x4b, 0x33, 0xc6, 0x96, 0x86, 0xab, 0x57, 0x25, 0xe2, 0x97, 0xb8, 0x7a, 0xa5, 0x64, + 0xab, 0xe3, 0xea, 0x95, 0xa4, 0xad, 0x82, 0x14, 0xc0, 0x26, 0x91, 0x01, 0x50, 0x0d, 0xab, 0xf4, + 0x45, 0xa4, 0xdb, 0x83, 0x5e, 0x0a, 0x80, 0xa8, 0xab, 0x44, 0x7d, 0x29, 0xa6, 0x3f, 0x9b, 0x29, + 0x66, 0xeb, 0xb6, 0xb2, 0x02, 0x94, 0x5d, 0xe2, 0xd0, 0xe4, 0xed, 0x07, 0xe9, 0xdf, 0x0f, 0x3e, + 0x09, 0x5a, 0x19, 0x41, 0x72, 0xb3, 0xdf, 0xb3, 0xef, 0x44, 0x2d, 0x2f, 0x7a, 0x68, 0x8e, 0x7e, + 0x1d, 0x19, 0x52, 0x47, 0x8f, 0x4f, 0xfe, 0xde, 0x7c, 0x88, 0xe3, 0x28, 0xfb, 0x8f, 0xdd, 0x8b, + 0xc3, 0x41, 0xb4, 0xa9, 0xa2, 0xca, 0xfe, 0x64, 0x4c, 0x07, 0x34, 0x71, 0x62, 0x2f, 0x4a, 0x65, + 0x4e, 0x3a, 0xb4, 0xb6, 0xeb, 0x7a, 0xe9, 0xef, 0xc4, 0xb7, 0xbe, 0x5d, 0x5c, 0x9c, 0x5b, 0x2e, + 0x61, 0xc4, 0xea, 0x86, 0xb1, 0xd5, 0x39, 0x7f, 0x68, 0x5a, 0x2f, 0x23, 0x56, 0x4c, 0xf8, 0x6a, + 0x20, 0x7c, 0x20, 0x7c, 0x20, 0x7c, 0xab, 0x4f, 0xf8, 0x0e, 0x3c, 0xc5, 0xd1, 0x8c, 0x1a, 0x63, + 0xcd, 0x16, 0x9a, 0xc9, 0x94, 0xc7, 0x9c, 0x2d, 0x92, 0xe6, 0x47, 0x61, 0x3c, 0x14, 0xe3, 0x61, + 0xf0, 0x56, 0x80, 0x7f, 0xb2, 0x12, 0xca, 0x12, 0x8b, 0xdd, 0x53, 0x6b, 0xd4, 0x4d, 0x2b, 0xed, + 0xa6, 0x95, 0x75, 0xf3, 0x3a, 0xd0, 0xe3, 0xe4, 0x53, 0x6c, 0xdf, 0xd3, 0x26, 0xf6, 0x75, 0x8a, + 0x7f, 0xed, 0x6a, 0x40, 0xb7, 0x3a, 0x28, 0x4c, 0x2d, 0x14, 0xa6, 0x1e, 0x8a, 0x50, 0x13, 0x9a, + 0x68, 0x98, 0xe2, 0xf3, 0xa6, 0xdc, 0x5e, 0x38, 0x73, 0xda, 0xb4, 0xc4, 0xe0, 0xcd, 0xc0, 0xe1, + 0x3d, 0x0d, 0xef, 0xd2, 0x12, 0x93, 0xa7, 0x96, 0xa1, 0xbd, 0xb3, 0x72, 0x5a, 0x63, 0xf4, 0x66, + 0xd6, 0x70, 0x57, 0xe3, 0x3b, 0x75, 0x87, 0x05, 0x4c, 0x5e, 0xbc, 0x3a, 0xb1, 0x7b, 0x13, 0x7b, + 0x8f, 0xce, 0x65, 0x2b, 0x22, 0xa4, 0x63, 0xf2, 0xf6, 0xd5, 0x8a, 0xe9, 0x53, 0x6b, 0xaf, 0xd3, + 0xac, 0xe8, 0x8a, 0x15, 0x9b, 0x4d, 0x88, 0x4d, 0xd5, 0x62, 0x13, 0x41, 0x55, 0x2b, 0x1b, 0x0b, + 0xb8, 0xb6, 0x8a, 0x04, 0xdb, 0x79, 0x25, 0x63, 0x04, 0x35, 0x2b, 0x56, 0xc4, 0x3c, 0xea, 0x35, + 0xf4, 0x96, 0xdc, 0x11, 0x79, 0x23, 0xdb, 0x11, 0x19, 0x04, 0x21, 0x23, 0x23, 0x83, 0xa9, 0x7c, + 0x78, 0x55, 0x49, 0x9c, 0x7b, 0xda, 0x27, 0x11, 0x61, 0xf7, 0x43, 0xcf, 0x61, 0x44, 0x03, 0x27, + 0xb3, 0x46, 0xda, 0x53, 0xee, 0xc3, 0x79, 0xbf, 0x6e, 0x4e, 0xfb, 0x0e, 0x33, 0xaf, 0xe1, 0x8b, + 0xbf, 0xf0, 0xef, 0x3d, 0x85, 0x1f, 0xca, 0xb9, 0x7a, 0x12, 0x21, 0xb2, 0x86, 0x98, 0x57, 0x6d, + 0xb1, 0xae, 0x8a, 0x6c, 0xe0, 0xca, 0x6c, 0xde, 0x2a, 0x6d, 0xdc, 0xca, 0x6d, 0xda, 0xaa, 0x6d, + 0xd8, 0xda, 0x6c, 0xd6, 0xda, 0x6c, 0xd4, 0x3a, 0x6c, 0xd2, 0xe5, 0x0e, 0x55, 0x51, 0x66, 0x63, + 0x9e, 0xec, 0x76, 0x9f, 0x92, 0x6e, 0x4c, 0xbb, 0x2a, 0xf6, 0xfb, 0x98, 0x45, 0xef, 0x28, 0x68, + 0xfb, 0x7c, 0xa4, 0xd4, 0x3e, 0x7f, 0xde, 0x1c, 0xaa, 0xb4, 0xcd, 0x59, 0x59, 0x59, 0x56, 0x5d, + 0xf4, 0xa1, 0x44, 0x3b, 0x2d, 0x15, 0x1a, 0x2a, 0x35, 0x8d, 0x9a, 0xbc, 0x41, 0xea, 0xf2, 0x04, + 0x69, 0xcd, 0x0b, 0xa4, 0x30, 0x0f, 0x90, 0xc2, 0xbc, 0x3f, 0xb2, 0x76, 0x9e, 0x22, 0xf4, 0xab, + 0x15, 0xf5, 0x4a, 0x14, 0x9b, 0x95, 0x84, 0xc5, 0x03, 0x87, 0x05, 0x23, 0xb9, 0xdc, 0x19, 0xf7, + 0xea, 0xf6, 0x22, 0xeb, 0xd5, 0x37, 0x9f, 0x04, 0xb7, 0x9d, 0xe8, 0xa1, 0x79, 0xdb, 0x1e, 0x76, + 0xe5, 0xf6, 0x5b, 0x1c, 0x47, 0x7f, 0x64, 0x9d, 0xf8, 0x50, 0x0e, 0xb1, 0x24, 0xd6, 0x82, 0xe0, + 0xb6, 0xaa, 0xd0, 0x47, 0x16, 0x13, 0x7b, 0x10, 0x24, 0x8c, 0xdc, 0xf9, 0x72, 0x94, 0x66, 0x25, + 0xa6, 0x5d, 0x1a, 0xd3, 0xc0, 0x91, 0xe7, 0x9b, 0x94, 0xb8, 0xcf, 0xc7, 0x1a, 0xfc, 0xe2, 0x68, + 0xdf, 0xda, 0xde, 0xd9, 0xdb, 0xb5, 0x6c, 0xeb, 0xdb, 0x28, 0x9a, 0x26, 0xdb, 0x32, 0xb1, 0x75, + 0x41, 0xdd, 0x41, 0xe0, 0x92, 0xc0, 0x79, 0xb2, 0xce, 0xe3, 0x90, 0x85, 0x4e, 0xe8, 0x5f, 0x07, + 0x1f, 0xbf, 0x5d, 0x5c, 0x9c, 0x6f, 0x58, 0xdf, 0x68, 0x9c, 0x78, 0x61, 0x60, 0x6d, 0x8d, 0x23, + 0x2c, 0x1b, 0x16, 0x09, 0xdc, 0x2c, 0x52, 0x47, 0xe6, 0xa6, 0x56, 0x84, 0x79, 0xa7, 0xb1, 0xee, + 0xcb, 0x22, 0x49, 0x06, 0x5f, 0xaa, 0x61, 0xee, 0x2b, 0x78, 0x2b, 0x7f, 0x15, 0xcb, 0x06, 0x58, + 0x3e, 0x14, 0x6b, 0x2c, 0x13, 0x95, 0x2f, 0x92, 0xd5, 0x95, 0x7a, 0x35, 0x25, 0xb6, 0x01, 0xf8, + 0x97, 0x8b, 0xef, 0x49, 0xce, 0xe5, 0x19, 0xe3, 0x57, 0x6e, 0xc6, 0x2e, 0x07, 0xa0, 0xca, 0x03, + 0xa4, 0x4a, 0x01, 0xa8, 0x44, 0xc0, 0x29, 0x11, 0x60, 0xf2, 0x2e, 0xbd, 0x9c, 0x7b, 0x1c, 0x62, + 0x47, 0x59, 0xd3, 0xbd, 0x0c, 0x41, 0xd5, 0xf6, 0x37, 0x37, 0x2d, 0x3a, 0xe7, 0x56, 0xfa, 0x0e, + 0xab, 0x4b, 0xfa, 0x9e, 0xff, 0x64, 0x0d, 0x45, 0xd0, 0x20, 0xce, 0x04, 0x5d, 0xaa, 0x54, 0xae, + 0x03, 0x69, 0x17, 0x2f, 0x24, 0x5d, 0xb0, 0x90, 0x66, 0x5d, 0x94, 0x69, 0x4d, 0x94, 0x6e, 0x3d, + 0x94, 0x8d, 0x9c, 0x94, 0x59, 0x07, 0x95, 0xc1, 0x24, 0x15, 0xd6, 0xbf, 0x62, 0x29, 0x8a, 0xac, + 0x0b, 0x07, 0x95, 0x4c, 0xbd, 0x4b, 0xdb, 0x19, 0x13, 0x6f, 0x43, 0xda, 0xaa, 0xa4, 0xb5, 0x7b, + 0x23, 0x70, 0x0e, 0x03, 0xc7, 0x0f, 0x13, 0x2f, 0xe8, 0xa5, 0x02, 0x86, 0x11, 0x2f, 0xa0, 0x71, + 0x86, 0x58, 0xb3, 0x0b, 0x02, 0x19, 0x93, 0x4e, 0xac, 0x7b, 0x12, 0xb8, 0x3e, 0x75, 0xad, 0xbb, + 0x27, 0x8b, 0xdd, 0x7b, 0xc9, 0x75, 0xd0, 0x39, 0x7f, 0xb9, 0x33, 0x20, 0xab, 0x5f, 0x72, 0xef, + 0x78, 0x49, 0x77, 0x74, 0xa8, 0x70, 0x70, 0x28, 0x73, 0x6c, 0xe8, 0x20, 0x77, 0x4a, 0x1c, 0x19, + 0x7a, 0x99, 0x9d, 0x64, 0xc7, 0x45, 0xb9, 0xcc, 0xc7, 0x0a, 0xac, 0x2e, 0x0a, 0xad, 0x2f, 0xf2, + 0xad, 0x30, 0x46, 0x59, 0x63, 0x54, 0x1f, 0x5c, 0x9d, 0xd6, 0x19, 0x6d, 0x67, 0xd9, 0x34, 0x6b, + 0x8d, 0x5c, 0x39, 0x21, 0xbf, 0xb5, 0x9b, 0xd5, 0xb0, 0x56, 0x6b, 0x36, 0x8f, 0xdc, 0xf0, 0x72, + 0x64, 0x39, 0x56, 0x2b, 0xa5, 0xd6, 0x2a, 0x01, 0xc9, 0x90, 0xd7, 0x69, 0xc2, 0x77, 0xcc, 0xf2, + 0x2f, 0x59, 0xbe, 0x27, 0x72, 0x2a, 0x63, 0xd1, 0x45, 0x55, 0xb2, 0x98, 0xf9, 0x66, 0x76, 0xf9, + 0xf9, 0xc9, 0x31, 0x37, 0x15, 0x67, 0x8c, 0xc6, 0xf3, 0xcd, 0xc9, 0x44, 0x77, 0x8f, 0x9e, 0xcf, + 0xb9, 0x1a, 0x7c, 0x94, 0x82, 0x9b, 0x3a, 0x88, 0x50, 0x04, 0x61, 0x2a, 0x20, 0x8a, 0x1c, 0xa4, + 0x41, 0x7b, 0x69, 0x6a, 0x5f, 0x06, 0x54, 0x57, 0x7b, 0xda, 0x79, 0xad, 0x06, 0x15, 0xf7, 0xde, + 0x89, 0x6c, 0xc7, 0xf7, 0x86, 0x83, 0xe3, 0x5c, 0xb0, 0xf1, 0x8e, 0x99, 0x6e, 0x8c, 0x73, 0xa6, + 0x0f, 0x68, 0x97, 0x0c, 0x7c, 0x26, 0x84, 0xe6, 0x2b, 0x99, 0x99, 0xb9, 0xa2, 0x55, 0x87, 0x8a, + 0x05, 0x49, 0x0a, 0xdb, 0x08, 0x64, 0xd8, 0x04, 0xa4, 0xd9, 0x00, 0x64, 0x51, 0x07, 0xe9, 0x1c, + 0x5f, 0x3a, 0x0f, 0x90, 0xc9, 0xe1, 0xf5, 0xba, 0xc4, 0x84, 0x83, 0x06, 0x27, 0xbb, 0xe5, 0x2e, + 0x0c, 0x7d, 0x4a, 0x02, 0x91, 0xfd, 0x32, 0xd6, 0x8e, 0x35, 0xbd, 0xae, 0x21, 0x49, 0xb0, 0xf7, + 0xa9, 0x17, 0x32, 0x3b, 0x74, 0x6c, 0x27, 0xec, 0x47, 0x19, 0xce, 0x71, 0x6d, 0x9f, 0x92, 0x6e, + 0xda, 0xe8, 0xb3, 0x2e, 0x28, 0xc9, 0xa1, 0xa5, 0xdd, 0xc1, 0x30, 0x53, 0x80, 0xed, 0x52, 0x46, + 0x1d, 0x66, 0xb3, 0x98, 0x04, 0x49, 0x7f, 0x98, 0xd4, 0x4f, 0x54, 0x0f, 0x2c, 0x6c, 0xba, 0x48, + 0xad, 0x50, 0x83, 0x46, 0x80, 0x46, 0x80, 0x46, 0x50, 0xaf, 0x11, 0x06, 0x5e, 0xc0, 0xb6, 0xea, + 0x12, 0x14, 0x82, 0x40, 0x50, 0xb8, 0xa4, 0xdc, 0xc3, 0x12, 0xfc, 0x70, 0x32, 0x73, 0x07, 0x4f, + 0x12, 0xbe, 0xca, 0x72, 0x25, 0xa9, 0x4a, 0xe7, 0x2a, 0x3f, 0x5d, 0xab, 0x04, 0x67, 0x84, 0xd4, + 0xdc, 0xbc, 0x93, 0xa5, 0x68, 0xd4, 0xf7, 0x1a, 0x7b, 0xcd, 0x9d, 0xfa, 0xde, 0xf6, 0xfa, 0xad, + 0x49, 0x41, 0xe6, 0xd1, 0x1b, 0xad, 0x82, 0x51, 0xa2, 0xfb, 0x4a, 0xa2, 0xbb, 0x4a, 0x62, 0x38, + 0xca, 0xc5, 0xd1, 0xbe, 0xd5, 0xd8, 0x6d, 0xd6, 0x5b, 0xc3, 0x1c, 0x7c, 0x97, 0x8c, 0x30, 0xea, + 0xd3, 0x24, 0xb1, 0x46, 0x06, 0x51, 0xab, 0x3d, 0x60, 0xe1, 0xab, 0xa0, 0x9f, 0x92, 0xc7, 0xae, + 0xc8, 0xf6, 0x27, 0xe9, 0x09, 0x5f, 0xe1, 0x58, 0x06, 0x9c, 0x60, 0x30, 0xbd, 0x25, 0x04, 0x58, + 0x90, 0x0a, 0x2e, 0x57, 0x9c, 0xd7, 0x8d, 0x1b, 0x2a, 0x92, 0xc5, 0xa5, 0x87, 0x0f, 0x44, 0x0e, + 0x44, 0x0e, 0x44, 0x0e, 0xa6, 0x3d, 0x08, 0xfc, 0xf9, 0xdd, 0xf6, 0x29, 0x89, 0x83, 0x14, 0xb1, + 0x86, 0xbe, 0xe7, 0x78, 0x4c, 0x86, 0xe8, 0x9f, 0x6d, 0xb2, 0x48, 0x25, 0x70, 0x7a, 0x76, 0x7a, + 0x08, 0x25, 0x00, 0x25, 0x00, 0x25, 0xa0, 0x5e, 0x09, 0xd0, 0x60, 0xd0, 0xa7, 0xc2, 0xb4, 0x6f, + 0xa2, 0x08, 0x1a, 0x02, 0x6d, 0x1c, 0x06, 0x83, 0xbe, 0xf8, 0xae, 0xbb, 0x0a, 0x2f, 0x59, 0xec, + 0x05, 0x3d, 0x39, 0x61, 0xf6, 0xd5, 0x74, 0x8e, 0x32, 0x79, 0x24, 0x81, 0x13, 0xd7, 0xd2, 0xc6, + 0xfe, 0x38, 0x3e, 0xfb, 0xd2, 0x3e, 0x96, 0xd1, 0x5c, 0x3d, 0x6d, 0xee, 0xb8, 0x73, 0xfa, 0xaf, + 0xdb, 0xe3, 0xb3, 0x7d, 0x39, 0x4d, 0x6e, 0xa5, 0x4d, 0x7e, 0x39, 0xbb, 0xfa, 0xb3, 0x52, 0xe8, + 0x2d, 0x89, 0xab, 0xb0, 0x23, 0x10, 0xb0, 0xf0, 0xaa, 0xa9, 0x6c, 0x30, 0x2d, 0x6b, 0x4b, 0xc2, + 0xe4, 0x8c, 0x56, 0x4e, 0xca, 0xd5, 0x81, 0xe9, 0x75, 0x6b, 0x59, 0x75, 0x09, 0x0d, 0x66, 0x9b, + 0xb4, 0x65, 0x55, 0xd7, 0xe2, 0xca, 0xe7, 0x5a, 0x18, 0xed, 0xf6, 0x6a, 0x5b, 0xb5, 0xd6, 0x28, + 0xa8, 0x38, 0xb1, 0xf6, 0x63, 0x4a, 0x98, 0x17, 0xf4, 0xac, 0x7d, 0xe2, 0xdc, 0x53, 0xeb, 0x30, + 0x60, 0xb1, 0x47, 0x13, 0x6b, 0x10, 0x85, 0xc1, 0x75, 0x70, 0x41, 0x1d, 0xea, 0x3d, 0xa4, 0xff, + 0xfa, 0xf5, 0x05, 0xc3, 0x59, 0xa7, 0xd4, 0xeb, 0xdd, 0xdf, 0x85, 0xb1, 0xd5, 0x76, 0x1f, 0x68, + 0xcc, 0xbc, 0x64, 0x74, 0xa7, 0x14, 0xe6, 0x3d, 0x35, 0xe6, 0x3d, 0x65, 0x0b, 0x06, 0x43, 0x20, + 0x78, 0xe1, 0xfb, 0xdd, 0xee, 0xb3, 0x81, 0x38, 0x13, 0x4c, 0x1b, 0x01, 0x89, 0x02, 0x89, 0x02, + 0x89, 0xca, 0xb1, 0x5b, 0x10, 0x12, 0x31, 0xdd, 0x11, 0x25, 0x21, 0x11, 0xb5, 0xfa, 0x2e, 0xa2, + 0x22, 0xb8, 0x56, 0x03, 0x51, 0x11, 0x88, 0x8a, 0x00, 0xc1, 0x9a, 0x47, 0xb0, 0xea, 0x8d, 0x66, + 0xb5, 0x65, 0x65, 0x37, 0xc6, 0x02, 0xca, 0x26, 0x97, 0x35, 0x3f, 0x4d, 0x6e, 0x69, 0x36, 0xad, + 0x8f, 0x9d, 0xf3, 0x87, 0xe6, 0x86, 0x75, 0x19, 0x51, 0xc7, 0xeb, 0x7a, 0x4e, 0x06, 0x2e, 0xaf, + 0x83, 0x49, 0x73, 0x97, 0x34, 0xdb, 0xb5, 0xd6, 0x36, 0x38, 0x95, 0x22, 0x4e, 0x25, 0x73, 0x8d, + 0x70, 0xf6, 0xd7, 0x8e, 0x46, 0xad, 0xcb, 0x25, 0xcc, 0xd1, 0xbd, 0xc5, 0x12, 0xdc, 0xc0, 0x0c, + 0x46, 0x36, 0x8c, 0x84, 0xff, 0x12, 0xe6, 0x4b, 0x13, 0xb8, 0x87, 0xa9, 0x4c, 0x5d, 0xe0, 0x1e, + 0xa6, 0xc6, 0x7b, 0x98, 0xe3, 0x1d, 0x2d, 0x6e, 0x9f, 0x99, 0xb4, 0x24, 0x66, 0xa4, 0xa9, 0xc1, + 0x48, 0x03, 0x23, 0x8d, 0x09, 0x46, 0x1a, 0xd1, 0x84, 0x69, 0xbc, 0x19, 0x01, 0x16, 0x6e, 0x3a, + 0xae, 0x0c, 0x01, 0x92, 0x8f, 0xa1, 0xb4, 0xe3, 0x28, 0xf3, 0x58, 0x4a, 0x3f, 0x9e, 0x3a, 0x88, + 0x11, 0xf2, 0x20, 0x16, 0x62, 0x99, 0x92, 0x97, 0x07, 0xd1, 0x53, 0x90, 0x05, 0x51, 0x5a, 0x8a, + 0x3c, 0xc9, 0xc5, 0x95, 0x90, 0x6b, 0x10, 0xb9, 0x06, 0x75, 0x89, 0x07, 0x39, 0x62, 0x42, 0x92, + 0xb8, 0x98, 0x0c, 0x54, 0x7a, 0x31, 0x24, 0xd5, 0x75, 0x86, 0x55, 0xd4, 0x11, 0x56, 0x56, 0x27, + 0x18, 0x75, 0x80, 0x57, 0xa0, 0x0e, 0xf0, 0x8d, 0xcc, 0x8d, 0xa6, 0xb2, 0x8e, 0x2f, 0xea, 0xf4, + 0xae, 0x44, 0x9d, 0xde, 0x9b, 0xb5, 0xa8, 0x28, 0x25, 0xdd, 0x96, 0x2d, 0x5f, 0xcf, 0xca, 0x70, + 0x16, 0xfb, 0x5e, 0xf0, 0xc3, 0xf6, 0xc9, 0x13, 0x8d, 0x27, 0xba, 0x50, 0x3a, 0xba, 0x9e, 0xf3, + 0x0e, 0xa0, 0x6d, 0xa0, 0x6d, 0xa0, 0xed, 0xd2, 0xa1, 0xed, 0x13, 0x12, 0xb8, 0x84, 0x85, 0xf1, + 0x93, 0xc4, 0x74, 0xf9, 0xea, 0x10, 0x7c, 0x74, 0xff, 0x94, 0x00, 0xc1, 0x4f, 0xeb, 0xfc, 0xb7, + 0x50, 0xa2, 0xfe, 0xbc, 0xf1, 0x7f, 0x36, 0xfe, 0xef, 0x7a, 0x42, 0xcd, 0xf7, 0xe7, 0x05, 0x98, + 0x68, 0x05, 0x31, 0x11, 0xea, 0xc5, 0xcd, 0x8f, 0x17, 0x98, 0xb8, 0xd8, 0x27, 0xbf, 0x71, 0x85, + 0x10, 0xc8, 0x9b, 0x6f, 0x81, 0xb9, 0x96, 0x61, 0x03, 0x96, 0x67, 0xfb, 0x95, 0x84, 0x42, 0xe1, + 0xda, 0x29, 0x15, 0xba, 0x84, 0x6b, 0x47, 0x3f, 0xc2, 0x53, 0x50, 0xa0, 0x5e, 0x66, 0x41, 0xfa, + 0x39, 0x05, 0xe8, 0xbd, 0xc8, 0x44, 0xf1, 0x99, 0x30, 0xc2, 0xa8, 0x3c, 0x09, 0x3a, 0x6c, 0xae, + 0x64, 0xfe, 0xf1, 0x3a, 0x84, 0x28, 0x84, 0xa8, 0x41, 0x42, 0x14, 0xfe, 0x71, 0x58, 0xec, 0x60, + 0xb1, 0x83, 0xc5, 0xae, 0x34, 0xd6, 0x35, 0xf8, 0xc7, 0xe1, 0x1f, 0x87, 0x7f, 0x5c, 0xb3, 0xd1, + 0x12, 0xdb, 0x0d, 0xfe, 0x71, 0x69, 0xa6, 0x50, 0x09, 0x44, 0xc3, 0x4b, 0xec, 0xcc, 0x92, 0x18, + 0x2b, 0xc0, 0x94, 0x93, 0xa6, 0x01, 0x2d, 0x01, 0x2d, 0x01, 0x2d, 0xd7, 0x08, 0x5a, 0x8a, 0xe7, + 0xa1, 0x5d, 0x88, 0x2a, 0x6b, 0x88, 0xcd, 0xc9, 0x67, 0x69, 0x45, 0x6c, 0x0e, 0xc4, 0x31, 0xc4, + 0xb1, 0x01, 0xe2, 0x18, 0xb1, 0x39, 0x88, 0xcd, 0x59, 0x15, 0x9a, 0x6b, 0x62, 0x6c, 0x4e, 0x29, + 0x20, 0xc1, 0x38, 0x76, 0xc3, 0x96, 0xe3, 0xc2, 0x9b, 0x39, 0xb6, 0x6f, 0xda, 0x07, 0x14, 0x00, + 0x14, 0x00, 0x14, 0x58, 0x23, 0x66, 0x26, 0x27, 0x39, 0xfc, 0x42, 0xad, 0xdd, 0x90, 0xd8, 0xa6, + 0x94, 0xe4, 0xf1, 0xb3, 0x53, 0x2b, 0x33, 0x99, 0xfc, 0x4c, 0xeb, 0x59, 0x72, 0xf9, 0xce, 0xe9, + 0xfe, 0xd9, 0xc9, 0xf9, 0xf1, 0xe1, 0xd5, 0xa1, 0xe4, 0x13, 0x66, 0x4d, 0x52, 0xce, 0x5f, 0x1c, + 0xb6, 0xf7, 0xff, 0x6c, 0x7f, 0x39, 0x56, 0xf2, 0x86, 0x2c, 0x0b, 0xfd, 0xe5, 0x55, 0x5b, 0x4d, + 0xeb, 0x59, 0x42, 0xfa, 0x83, 0xc3, 0xe3, 0xf6, 0x7f, 0x54, 0xb4, 0xde, 0x48, 0x5b, 0x3f, 0xbf, + 0x38, 0xfb, 0x72, 0x58, 0x91, 0xda, 0xf8, 0xf3, 0x27, 0xd9, 0xdb, 0x50, 0x56, 0x3e, 0xfc, 0x99, + 0xa6, 0x87, 0x73, 0x2b, 0x25, 0x41, 0xfe, 0x4c, 0xdb, 0x53, 0x5b, 0x5b, 0x9a, 0x76, 0x7e, 0xad, + 0xa9, 0xb3, 0xa5, 0x6b, 0x59, 0x0d, 0x05, 0x6d, 0xbf, 0x1c, 0x1a, 0x69, 0x04, 0xeb, 0xb5, 0xe2, + 0xce, 0x8e, 0x4c, 0xcb, 0xaa, 0xcb, 0xdd, 0x79, 0x2b, 0xaa, 0xe3, 0x24, 0xe6, 0xa3, 0x9c, 0x69, + 0x5b, 0x5e, 0x7e, 0xca, 0xb7, 0x3f, 0x0a, 0xce, 0xeb, 0x9b, 0xaa, 0x9e, 0xb5, 0xd6, 0x4b, 0xd2, + 0xf8, 0x03, 0x2f, 0x71, 0xc2, 0x07, 0x1a, 0x3f, 0x59, 0xdd, 0x30, 0xb6, 0x3a, 0xe7, 0xd6, 0xc3, + 0x9b, 0x14, 0x89, 0xc3, 0xa4, 0x88, 0xe3, 0x7c, 0x88, 0x3b, 0x9f, 0xb7, 0x3e, 0xd7, 0x55, 0x48, + 0x55, 0x45, 0x90, 0x74, 0x1e, 0x34, 0x95, 0x9d, 0xd7, 0x52, 0x3b, 0x4a, 0x9d, 0x8b, 0x56, 0x65, + 0xad, 0xad, 0xf4, 0x9e, 0x3e, 0x97, 0x54, 0x56, 0xad, 0x12, 0xa7, 0x0f, 0x63, 0xaf, 0x27, 0x33, + 0x81, 0xf6, 0x84, 0x79, 0x0e, 0xdb, 0x05, 0x87, 0x07, 0x87, 0x07, 0x87, 0x5f, 0x23, 0x0e, 0x3f, + 0xb1, 0xe1, 0x49, 0x15, 0x00, 0xe0, 0xf1, 0x6f, 0x79, 0xfc, 0xd9, 0xd5, 0x9f, 0x87, 0x17, 0xca, + 0x28, 0xfc, 0xe5, 0x55, 0xfb, 0xaa, 0xb3, 0xaf, 0x8c, 0xbf, 0x1f, 0xfc, 0xe7, 0xb4, 0x7d, 0xd2, + 0xd9, 0x5f, 0x5f, 0x16, 0x3c, 0x1a, 0xbf, 0x94, 0x52, 0x6c, 0x33, 0xad, 0x0f, 0xb7, 0x86, 0x1a, + 0x0a, 0x3c, 0xda, 0x18, 0x2d, 0xab, 0xb6, 0xda, 0x3c, 0x12, 0x57, 0x81, 0x5f, 0xb5, 0xa7, 0xf6, + 0x2a, 0xf0, 0xd0, 0xdd, 0xb3, 0x16, 0x95, 0x04, 0xff, 0x45, 0x9f, 0x84, 0xae, 0xb4, 0x54, 0x8e, + 0xbd, 0x84, 0xb5, 0x19, 0x13, 0xcc, 0x52, 0x7b, 0xe2, 0x05, 0x87, 0xfe, 0xa8, 0xda, 0x9b, 0x90, + 0xa0, 0xa8, 0x9c, 0x90, 0xc7, 0xa9, 0x96, 0x6a, 0xbb, 0x8d, 0x46, 0x73, 0xa7, 0xd1, 0xa8, 0xee, + 0x6c, 0xed, 0x54, 0xf7, 0xb6, 0xb7, 0x6b, 0xcd, 0x9a, 0x40, 0xc9, 0x96, 0xca, 0x59, 0xec, 0xd2, + 0x98, 0xba, 0x5f, 0xd2, 0x39, 0x0b, 0x06, 0xbe, 0x2f, 0xa3, 0xa9, 0xaf, 0x49, 0x16, 0x4f, 0xca, + 0x5f, 0x9d, 0xa5, 0xe8, 0x3a, 0x07, 0x4a, 0xcf, 0x62, 0x45, 0xe8, 0x62, 0x67, 0x3c, 0x70, 0x58, + 0x30, 0x02, 0x82, 0x9d, 0xf1, 0x6b, 0x6f, 0xb3, 0x0a, 0x85, 0xee, 0x37, 0x9f, 0x04, 0xb7, 0x9d, + 0xe8, 0xa1, 0x79, 0x3b, 0xb6, 0x32, 0x54, 0x50, 0x95, 0x41, 0xd1, 0x72, 0x96, 0xa1, 0x30, 0xc3, + 0x30, 0xbc, 0xda, 0x26, 0xd3, 0xa5, 0x25, 0xf9, 0x6b, 0x34, 0xcc, 0x6d, 0x0d, 0xe5, 0x1a, 0x94, + 0x91, 0x7c, 0x94, 0x6b, 0xd0, 0x58, 0xae, 0x41, 0x30, 0x67, 0xbc, 0x9c, 0x5c, 0xf1, 0x28, 0xd5, + 0xa0, 0xc0, 0x46, 0x86, 0x52, 0x0d, 0xea, 0xf0, 0x94, 0x70, 0xa9, 0x06, 0x1a, 0x48, 0x71, 0xee, + 0x4d, 0x85, 0xaf, 0x64, 0xed, 0x89, 0x5e, 0xc5, 0xa7, 0x5d, 0x32, 0xf0, 0x99, 0x14, 0xe7, 0x60, + 0x25, 0xdd, 0x1f, 0x62, 0xc4, 0xea, 0x06, 0xe9, 0x89, 0x94, 0x4b, 0x1b, 0xd9, 0x52, 0x47, 0x99, + 0xf4, 0x51, 0x26, 0x85, 0x54, 0x48, 0xa3, 0x72, 0x58, 0x62, 0xe4, 0xa7, 0x27, 0x92, 0x77, 0x7f, + 0x49, 0xd2, 0xbd, 0xa5, 0xb2, 0x19, 0xab, 0x94, 0x25, 0x0a, 0x2c, 0x28, 0xdd, 0x5c, 0x4a, 0xf8, + 0x1e, 0x88, 0x2f, 0x31, 0xe9, 0xdc, 0xb8, 0x45, 0xc8, 0x76, 0xc8, 0x76, 0xc8, 0xf6, 0x12, 0xc9, + 0x76, 0xe1, 0xca, 0xee, 0x6f, 0xcf, 0xa6, 0x8c, 0xc4, 0x73, 0x72, 0x2a, 0xbd, 0x8f, 0x7f, 0x24, + 0xfa, 0x9c, 0x65, 0x56, 0x7e, 0x9f, 0x34, 0x3a, 0xae, 0x39, 0x2e, 0xd9, 0x7b, 0xa6, 0xac, 0xe4, + 0xf8, 0xcb, 0x1e, 0x92, 0x5d, 0x7a, 0x5c, 0xd2, 0x31, 0x79, 0xbd, 0x64, 0xe4, 0x51, 0xdd, 0x92, + 0xc9, 0x2e, 0x13, 0xbf, 0x0a, 0x6b, 0x57, 0x12, 0x77, 0xe8, 0x0d, 0x10, 0x66, 0x79, 0x11, 0xa6, + 0xef, 0x75, 0x29, 0xf3, 0xfa, 0x12, 0x4d, 0x21, 0x93, 0x16, 0x81, 0x30, 0x81, 0x30, 0x81, 0x30, + 0x81, 0x30, 0x81, 0x30, 0x81, 0x30, 0x81, 0x30, 0x81, 0x30, 0x81, 0x30, 0xd7, 0x12, 0x61, 0xf6, + 0x49, 0x40, 0x7a, 0xd4, 0x95, 0x07, 0x30, 0xc7, 0x0d, 0x96, 0xc9, 0xd9, 0x96, 0x9d, 0x2b, 0x78, + 0xdb, 0x80, 0x97, 0x81, 0x97, 0x57, 0x07, 0x2f, 0xaf, 0x9c, 0xb7, 0x4d, 0xc1, 0xd5, 0x66, 0x05, + 0x57, 0x9a, 0x15, 0xdc, 0x4c, 0xba, 0x38, 0xda, 0x7f, 0xe7, 0x96, 0xeb, 0x43, 0xf3, 0x93, 0x95, + 0x8c, 0xae, 0xb4, 0x36, 0xa4, 0x5e, 0x56, 0xd6, 0x71, 0xe7, 0x4e, 0xd5, 0xe5, 0x64, 0xbd, 0xd7, + 0xee, 0xf2, 0xaf, 0x12, 0x90, 0x2c, 0x90, 0xac, 0x46, 0x24, 0x1b, 0xba, 0x12, 0xed, 0xa4, 0x59, + 0x6b, 0x65, 0xc2, 0xb0, 0xed, 0xe3, 0x63, 0x20, 0x58, 0x20, 0x58, 0x20, 0xd8, 0xd5, 0x41, 0xb0, + 0x72, 0xb3, 0xaa, 0xc9, 0xbc, 0x85, 0x2d, 0xf7, 0xf6, 0xb5, 0x9a, 0x5b, 0xd7, 0xc3, 0xdb, 0xd6, + 0xa9, 0x58, 0x94, 0x88, 0x06, 0xb3, 0x3b, 0xd6, 0x07, 0x9d, 0xcb, 0xf6, 0x97, 0xe3, 0xc3, 0xdb, + 0xaf, 0xa7, 0x97, 0x67, 0xc7, 0x9d, 0xfd, 0xce, 0xd5, 0xe1, 0xc1, 0xed, 0x45, 0xbb, 0x52, 0xae, + 0x3c, 0x01, 0xd2, 0xef, 0x40, 0x67, 0x53, 0x29, 0xd5, 0xbc, 0xb9, 0x68, 0x22, 0x65, 0xdd, 0x51, + 0x36, 0xfd, 0x2e, 0x30, 0x08, 0xdf, 0xf2, 0x69, 0x8d, 0x40, 0xf9, 0x4a, 0x49, 0xf9, 0x66, 0xd7, + 0x09, 0xa4, 0x0f, 0xa4, 0x4f, 0x1f, 0xe9, 0x0b, 0xd9, 0x3d, 0x8d, 0x6d, 0xc1, 0x6b, 0x7a, 0xb3, + 0x34, 0x60, 0xba, 0x55, 0x38, 0x32, 0x40, 0x03, 0x41, 0x03, 0x41, 0x03, 0x95, 0xd1, 0x40, 0x38, + 0x32, 0xd6, 0x07, 0xd7, 0xc2, 0x91, 0x61, 0x02, 0xaa, 0x85, 0x23, 0x03, 0x98, 0xb6, 0x38, 0x4c, + 0x9b, 0x0c, 0xa2, 0x48, 0x4a, 0x55, 0xb7, 0x89, 0x5c, 0x9a, 0xb4, 0x08, 0x2c, 0x0b, 0x2c, 0x0b, + 0x2c, 0x0b, 0x2c, 0x0b, 0x2c, 0x5b, 0x24, 0x96, 0x4d, 0x18, 0x61, 0x83, 0xa4, 0xcc, 0x40, 0xd6, + 0xa5, 0x51, 0x4c, 0x1d, 0xc2, 0x84, 0xe3, 0x38, 0x75, 0x23, 0xd4, 0xd1, 0xd4, 0x9a, 0x0c, 0x4f, + 0xa7, 0xe6, 0x1e, 0xb8, 0x13, 0xb8, 0x53, 0xc7, 0x93, 0x2b, 0x94, 0x38, 0x73, 0x5e, 0x3a, 0xc2, + 0xcd, 0x91, 0x25, 0x57, 0x57, 0x56, 0x4b, 0x8e, 0xa4, 0x80, 0x43, 0x04, 0x44, 0x13, 0xf1, 0x54, + 0x73, 0x93, 0x96, 0x90, 0x6c, 0x0e, 0xc9, 0xe6, 0x0a, 0xc1, 0xb6, 0x86, 0x25, 0x9b, 0x8b, 0xe4, + 0x90, 0xae, 0x37, 0x07, 0x50, 0xd2, 0xfd, 0xea, 0x1a, 0xa8, 0x29, 0xa8, 0xe9, 0x3a, 0x52, 0x53, + 0xd1, 0x63, 0x3d, 0x69, 0x48, 0x92, 0x6f, 0x78, 0x66, 0xf3, 0x4a, 0xf1, 0x0e, 0x4b, 0x3e, 0xee, + 0xd2, 0x8f, 0xbd, 0x8a, 0xe3, 0xaf, 0x4c, 0x0c, 0xe8, 0xe4, 0x99, 0x28, 0xa3, 0xa4, 0x88, 0x62, + 0x4a, 0xda, 0xaf, 0xb2, 0xc4, 0xc7, 0xa4, 0x41, 0xd7, 0x4b, 0xc8, 0x9d, 0x4f, 0x05, 0xb3, 0xa6, + 0x2f, 0x6f, 0x80, 0x99, 0xfb, 0x3a, 0xc9, 0xbb, 0x41, 0x6e, 0xed, 0x36, 0x65, 0xc2, 0x47, 0xa5, + 0x10, 0x52, 0x2e, 0x8c, 0x54, 0x0b, 0x25, 0x6d, 0xc2, 0x49, 0x9b, 0x90, 0xd2, 0x21, 0xac, 0xe4, + 0x0a, 0x2d, 0xc9, 0xc2, 0x6b, 0x32, 0x01, 0xd2, 0x6b, 0xc1, 0xcd, 0xec, 0x76, 0x79, 0xe6, 0xfa, + 0x85, 0x88, 0xa6, 0x56, 0xea, 0x29, 0x96, 0x6c, 0x12, 0xd4, 0x67, 0x22, 0x54, 0xb7, 0x93, 0x65, + 0xa6, 0x7c, 0x99, 0xa8, 0xb1, 0x01, 0x0b, 0x87, 0x80, 0x79, 0x10, 0xab, 0x99, 0xed, 0x59, 0xcd, + 0x39, 0xf3, 0x4a, 0x68, 0x4f, 0x68, 0x4f, 0x68, 0x4f, 0x68, 0x4f, 0x68, 0x4f, 0x59, 0xbd, 0x54, + 0x58, 0x8c, 0x7f, 0xf2, 0x0e, 0x75, 0x45, 0xf9, 0xc7, 0x3f, 0x6a, 0x44, 0x8a, 0x25, 0x12, 0x18, + 0xda, 0xfc, 0x5c, 0x53, 0x24, 0x80, 0x74, 0x48, 0xd3, 0x79, 0x52, 0x55, 0x75, 0x81, 0x7e, 0xed, + 0x02, 0x76, 0xae, 0xa0, 0xe5, 0x59, 0x67, 0x65, 0xbd, 0x7b, 0xfe, 0x60, 0x46, 0xab, 0x37, 0x60, + 0x08, 0xeb, 0xcb, 0x10, 0x86, 0xa5, 0x99, 0xec, 0x30, 0xf0, 0xbd, 0xe0, 0x87, 0x3a, 0x56, 0xf0, + 0xfa, 0x35, 0x60, 0x02, 0x60, 0x02, 0x60, 0x02, 0x60, 0x02, 0x60, 0x02, 0x60, 0x02, 0x60, 0x02, + 0x60, 0x02, 0x60, 0x02, 0x60, 0x02, 0x60, 0x02, 0x05, 0x33, 0x81, 0x28, 0x13, 0x0c, 0x71, 0x3a, + 0x6a, 0x59, 0x55, 0x4f, 0x16, 0x4a, 0xe1, 0x39, 0xef, 0x02, 0x27, 0x00, 0x27, 0x00, 0x27, 0x00, + 0x27, 0x90, 0xb6, 0xdb, 0xa5, 0xd5, 0x73, 0x59, 0x24, 0x5b, 0x76, 0x14, 0x34, 0x2d, 0xb7, 0xde, + 0x8b, 0x46, 0x7c, 0xad, 0xa2, 0x1e, 0xcc, 0xcc, 0x4b, 0x14, 0xd5, 0x87, 0x99, 0x79, 0x8f, 0xea, + 0x9a, 0x23, 0xb3, 0x7b, 0x56, 0x55, 0x0d, 0x12, 0xc5, 0xc7, 0xf8, 0xf5, 0x16, 0x20, 0x8f, 0xfa, + 0xb6, 0x80, 0xaa, 0x7a, 0x33, 0xeb, 0xb4, 0x17, 0xc0, 0x4a, 0x60, 0x79, 0x29, 0xb3, 0xe5, 0xa5, + 0x0e, 0xcb, 0xcb, 0x5a, 0x58, 0x5e, 0xea, 0xb0, 0xbc, 0xc0, 0xf2, 0xb2, 0xe6, 0x96, 0x17, 0x05, + 0xdc, 0x5f, 0xee, 0x8d, 0x48, 0x58, 0x58, 0x60, 0x61, 0x81, 0x85, 0x05, 0x16, 0x96, 0xa9, 0xdd, + 0xee, 0x45, 0x0f, 0x4d, 0x5b, 0xd9, 0x76, 0x99, 0x78, 0x5e, 0x77, 0x15, 0xb4, 0x7d, 0x4e, 0x18, + 0xa3, 0x71, 0xa0, 0x0c, 0x4f, 0x57, 0x3e, 0x7e, 0xfc, 0x5e, 0xb5, 0xf7, 0x88, 0xdd, 0x6d, 0xdb, + 0x47, 0x37, 0xbf, 0x6a, 0x9f, 0x1a, 0xcf, 0xad, 0x8d, 0x5f, 0x3b, 0xcf, 0x6f, 0x3f, 0xfc, 0x3d, + 0xef, 0x6b, 0xb5, 0x4f, 0x3b, 0xcf, 0xad, 0x05, 0xff, 0xd2, 0x7c, 0x6e, 0x2d, 0xd9, 0xc6, 0xf6, + 0xf3, 0xc7, 0x99, 0xaf, 0xa6, 0x9f, 0xd7, 0x17, 0x3d, 0xd0, 0x58, 0xf0, 0xc0, 0xd6, 0xa2, 0x07, + 0xb6, 0x16, 0x3c, 0xb0, 0xb0, 0x4b, 0xf5, 0x05, 0x0f, 0x6c, 0x3f, 0xff, 0x9e, 0xf9, 0xfe, 0xc7, + 0xf9, 0x5f, 0x6d, 0x3e, 0x6f, 0xfc, 0x5e, 0xf4, 0x6f, 0x3b, 0xcf, 0xbf, 0x5b, 0x1b, 0x1b, 0x9b, + 0x1f, 0x6b, 0xf5, 0xef, 0x55, 0x7b, 0xf7, 0xe6, 0x77, 0xed, 0x7b, 0xd5, 0xae, 0xdd, 0xa4, 0xdf, + 0xbc, 0xf9, 0xfd, 0xbd, 0x66, 0xef, 0x8d, 0x7f, 0x4d, 0xff, 0xbb, 0x21, 0x5f, 0x1c, 0xdc, 0xa8, + 0xd8, 0xa7, 0x67, 0x97, 0x9d, 0xbf, 0x94, 0x6f, 0xd6, 0xff, 0x62, 0xb7, 0x96, 0x7c, 0xb7, 0xfe, + 0xa3, 0x02, 0xca, 0x01, 0xca, 0x21, 0x8f, 0x72, 0x3c, 0x10, 0xdf, 0xd3, 0xe1, 0xe8, 0x7d, 0xf3, + 0x1e, 0x50, 0x10, 0x50, 0x10, 0x50, 0x10, 0x50, 0x10, 0x69, 0xbb, 0x1d, 0x4e, 0xde, 0x99, 0x1f, + 0x38, 0x79, 0x97, 0x7b, 0x0f, 0x9c, 0xbc, 0x5c, 0x5b, 0x00, 0x4e, 0x5e, 0xb3, 0xf6, 0x02, 0x1c, + 0x20, 0x12, 0x96, 0x0b, 0x4e, 0xde, 0x25, 0xf5, 0x31, 0x9c, 0xbc, 0x70, 0xf2, 0xc2, 0xc9, 0x0b, + 0x8b, 0xcb, 0x8a, 0x58, 0x5c, 0x4a, 0x95, 0x53, 0x4f, 0xd1, 0x02, 0x29, 0xcf, 0xfe, 0x3d, 0xce, + 0x88, 0x3d, 0xfa, 0x45, 0x28, 0x1b, 0xb8, 0xfc, 0x15, 0x92, 0xb0, 0x3a, 0xb2, 0x1d, 0xf8, 0x6a, + 0x1c, 0xf7, 0x92, 0xad, 0x65, 0xc8, 0x71, 0x8a, 0x1c, 0xa7, 0xba, 0xad, 0x5e, 0xe5, 0x92, 0xc7, + 0xd2, 0xad, 0x5b, 0x93, 0xdd, 0x9a, 0xea, 0xc5, 0x98, 0x76, 0x65, 0xee, 0xd7, 0xb1, 0x33, 0x5d, + 0xa2, 0x3d, 0xab, 0x72, 0x3e, 0x52, 0x19, 0x9f, 0x3f, 0x8f, 0x64, 0xfa, 0x48, 0xc2, 0xaf, 0x92, + 0x68, 0x4f, 0x18, 0x61, 0x54, 0xbe, 0x64, 0x1f, 0x36, 0x5b, 0xf2, 0xe4, 0xd5, 0x75, 0x08, 0x76, + 0x08, 0xf6, 0x35, 0x14, 0xec, 0x48, 0x5e, 0xad, 0x1d, 0x4d, 0x2a, 0x43, 0x95, 0x2a, 0x85, 0x90, + 0x72, 0x61, 0xa4, 0xcb, 0x8e, 0x05, 0xdf, 0x6b, 0xf1, 0x06, 0x22, 0x24, 0xdd, 0x99, 0x83, 0x68, + 0x6a, 0xc8, 0xd1, 0xac, 0x54, 0x41, 0x20, 0x47, 0x33, 0x94, 0x04, 0x94, 0x04, 0x94, 0x04, 0x94, + 0x84, 0xb2, 0x29, 0x86, 0xeb, 0x78, 0xc9, 0x9d, 0x82, 0xcc, 0x6c, 0x70, 0x1d, 0x23, 0x33, 0xdb, + 0x82, 0x9f, 0x1b, 0xa4, 0x22, 0x96, 0x25, 0x67, 0x90, 0x8a, 0x18, 0x80, 0x17, 0x80, 0x17, 0x80, + 0x17, 0x80, 0x17, 0x80, 0x17, 0x80, 0x17, 0x80, 0x17, 0x80, 0x17, 0x80, 0xb7, 0x18, 0xc0, 0x8b, + 0x8c, 0xbb, 0x80, 0xbe, 0x80, 0xbe, 0x80, 0xbe, 0xab, 0x02, 0x7d, 0x71, 0x19, 0x53, 0x27, 0x8c, + 0xc4, 0x65, 0x4c, 0xa1, 0x3d, 0x8b, 0xcb, 0x98, 0x39, 0xb7, 0x00, 0x2e, 0x63, 0x02, 0x7c, 0xc3, + 0xc0, 0xb0, 0xda, 0x06, 0x06, 0x5c, 0xc6, 0x5c, 0x0f, 0x03, 0x03, 0x2e, 0x63, 0xae, 0x8d, 0x81, + 0x01, 0x89, 0x65, 0x61, 0x48, 0x80, 0x21, 0x01, 0x86, 0x04, 0x93, 0x0c, 0x09, 0x48, 0x2c, 0xbb, + 0xf8, 0x05, 0x48, 0xd5, 0x89, 0xc4, 0xb2, 0x32, 0xf6, 0x29, 0x12, 0xcb, 0x62, 0xb7, 0x1a, 0x91, + 0x58, 0x16, 0xf9, 0x53, 0xe1, 0xb2, 0x03, 0xd2, 0x06, 0xd2, 0x06, 0xd2, 0x56, 0xb0, 0xdb, 0xe1, + 0xb2, 0xd3, 0x69, 0x98, 0x85, 0xcb, 0x4e, 0x68, 0xcf, 0xc2, 0x65, 0x97, 0x73, 0x0b, 0xc0, 0x65, + 0x57, 0x32, 0x05, 0xa1, 0xae, 0x55, 0xb8, 0xec, 0xe0, 0xb2, 0xb3, 0x4c, 0xc3, 0xac, 0xf3, 0xb0, + 0x2b, 0x5c, 0x76, 0x70, 0xd9, 0x99, 0x66, 0x58, 0x40, 0x9a, 0x50, 0x05, 0x69, 0x42, 0x87, 0x29, + 0xd2, 0xca, 0x92, 0x4a, 0xee, 0x43, 0x81, 0x4b, 0x9b, 0x8a, 0x47, 0x69, 0xb4, 0xbe, 0x72, 0xec, + 0x25, 0xac, 0xcd, 0x98, 0x9c, 0x14, 0x57, 0x29, 0xa5, 0x39, 0xf4, 0xb3, 0x05, 0x94, 0x04, 0xfb, + 0x52, 0x84, 0x3c, 0xd5, 0x62, 0x6d, 0xb7, 0xd1, 0x68, 0xee, 0x34, 0x1a, 0xd5, 0x9d, 0xad, 0x9d, + 0xea, 0xde, 0xf6, 0x76, 0xad, 0x59, 0x93, 0x00, 0x66, 0x2b, 0x67, 0xb1, 0x4b, 0x63, 0xea, 0x7e, + 0x49, 0xe7, 0x35, 0x18, 0xf8, 0xbe, 0xcc, 0x26, 0xbf, 0x26, 0x34, 0x96, 0x82, 0x4b, 0x45, 0xb7, + 0x8d, 0x64, 0x49, 0xa0, 0x5b, 0x02, 0x54, 0xa4, 0xa4, 0x6f, 0x8c, 0x07, 0x0e, 0x0b, 0x46, 0xe8, + 0xaa, 0x33, 0xee, 0xd0, 0xed, 0x45, 0xd6, 0xa1, 0x6f, 0x3e, 0x09, 0x6e, 0x3b, 0xd1, 0x43, 0x73, + 0xf8, 0x77, 0xdc, 0x9e, 0xee, 0xce, 0xed, 0xb9, 0x84, 0x64, 0x96, 0xfc, 0x72, 0x83, 0xef, 0x49, + 0xce, 0x2d, 0x23, 0x6b, 0xab, 0x68, 0xdb, 0x22, 0x7c, 0xab, 0x92, 0x7f, 0x4e, 0x39, 0xe6, 0x53, + 0x30, 0x65, 0xa8, 0x94, 0x14, 0xa1, 0x82, 0x29, 0x41, 0x85, 0x53, 0x80, 0xca, 0xb0, 0xd4, 0x4b, + 0xb3, 0xc8, 0xcb, 0x62, 0x31, 0xd2, 0x2d, 0xec, 0xd2, 0x29, 0x88, 0x4c, 0x8b, 0xb9, 0x5e, 0xf9, + 0x23, 0x9a, 0x72, 0x73, 0x94, 0xd5, 0x41, 0x7c, 0x8d, 0x5f, 0x67, 0x89, 0x10, 0x5d, 0xe0, 0x03, + 0xda, 0x25, 0x03, 0x9f, 0x49, 0xb1, 0x48, 0x54, 0xd2, 0xfd, 0x21, 0xa6, 0x8d, 0x6e, 0x44, 0x71, + 0xa8, 0x14, 0x7f, 0xa1, 0x34, 0xff, 0xa0, 0x4c, 0x7f, 0xa0, 0x74, 0xff, 0x9f, 0x6c, 0xdb, 0x89, + 0x32, 0xff, 0x9e, 0x32, 0x43, 0x88, 0x0a, 0xff, 0x5d, 0xb1, 0x3c, 0x4c, 0x9a, 0x3f, 0x4e, 0x41, + 0xb6, 0x08, 0x49, 0xd9, 0x21, 0x04, 0x00, 0xab, 0x80, 0x86, 0xce, 0x60, 0xe0, 0x03, 0xf1, 0xe5, + 0xc9, 0xef, 0x49, 0x8b, 0x10, 0x79, 0x10, 0x79, 0x10, 0x79, 0x25, 0x12, 0x79, 0xd2, 0x42, 0x0e, + 0x24, 0x86, 0x18, 0x48, 0x0e, 0x29, 0x90, 0x68, 0x75, 0x55, 0x11, 0x32, 0xa0, 0x2a, 0x44, 0x40, + 0xb9, 0x1b, 0x58, 0x9d, 0xdb, 0x57, 0x66, 0x6c, 0xa0, 0x0a, 0x17, 0xbf, 0x72, 0x97, 0xbe, 0xc9, + 0x6b, 0x57, 0x12, 0x1f, 0xc1, 0x8d, 0x81, 0xc0, 0x4b, 0x5a, 0x04, 0xeb, 0x4b, 0xed, 0x22, 0x39, + 0xb1, 0xaa, 0x00, 0x5e, 0x00, 0x5e, 0x00, 0x5e, 0x00, 0x5e, 0x00, 0x5e, 0x00, 0x5e, 0x00, 0x5e, + 0x00, 0x5e, 0xab, 0x06, 0xbc, 0xfa, 0x24, 0x20, 0x3d, 0xea, 0xca, 0xc3, 0x5d, 0xe3, 0x06, 0xcb, + 0xe4, 0xb1, 0xc8, 0xb6, 0x1b, 0x5c, 0x16, 0x80, 0x91, 0x80, 0x91, 0xab, 0x03, 0x23, 0xcb, 0xe7, + 0xb2, 0x10, 0x9c, 0x22, 0x05, 0xc1, 0xe9, 0x0a, 0x82, 0xd1, 0x15, 0xd4, 0x4e, 0xcd, 0x1b, 0x84, + 0x5c, 0x37, 0xac, 0xce, 0xaa, 0xaa, 0x50, 0x72, 0xbd, 0xa5, 0x56, 0xf3, 0xaf, 0x12, 0x00, 0x5e, + 0x19, 0x00, 0x5e, 0xe8, 0x4a, 0xb4, 0xaa, 0x65, 0xad, 0x95, 0x09, 0xda, 0xb5, 0x8f, 0x8f, 0x01, + 0xec, 0x00, 0xec, 0x00, 0xec, 0x56, 0x07, 0xd8, 0xd1, 0x60, 0xd0, 0xa7, 0xd2, 0xea, 0x80, 0x4e, + 0xc0, 0x5d, 0x43, 0x42, 0x5b, 0x87, 0xc1, 0xa0, 0x2f, 0x6f, 0xf7, 0x5e, 0x85, 0x97, 0x2c, 0xf6, + 0x82, 0x9e, 0xdc, 0xfb, 0x31, 0xd5, 0x74, 0x0e, 0x53, 0xb1, 0x28, 0x11, 0x24, 0xd5, 0xd2, 0x36, + 0x0f, 0x3a, 0x97, 0xed, 0x2f, 0xc7, 0x87, 0xb7, 0x5f, 0x4f, 0x2f, 0xcf, 0x8e, 0x3b, 0xfb, 0x9d, + 0xab, 0xc3, 0x83, 0xdb, 0x8b, 0x76, 0xa5, 0x54, 0x97, 0x8e, 0xae, 0xc2, 0x8e, 0xe4, 0x8a, 0xe6, + 0xd9, 0x54, 0x4a, 0x35, 0x86, 0x2d, 0x9a, 0xc8, 0x96, 0x55, 0xc3, 0x2d, 0x23, 0xf0, 0xa0, 0xbf, + 0x43, 0xd8, 0xd6, 0x03, 0x8d, 0x93, 0x14, 0x5e, 0x37, 0xad, 0x8f, 0x29, 0xde, 0xde, 0x00, 0x13, + 0x2a, 0x25, 0x13, 0x9a, 0x5d, 0x27, 0x70, 0xa1, 0x12, 0x70, 0xa1, 0x90, 0xdd, 0xd3, 0xd8, 0x76, + 0xc6, 0x50, 0x5b, 0x12, 0x27, 0x7a, 0xd5, 0x2a, 0xcc, 0xde, 0x60, 0x47, 0x60, 0x47, 0x60, 0x47, + 0xca, 0xd8, 0x11, 0xcc, 0xde, 0xeb, 0x03, 0xf7, 0x60, 0xf6, 0x36, 0x01, 0xec, 0xc1, 0xec, 0x5d, + 0x42, 0xa8, 0x97, 0x0c, 0xa2, 0x28, 0xa6, 0x49, 0x22, 0x0f, 0xe6, 0x4d, 0x5a, 0x04, 0xc4, 0x03, + 0xc4, 0x03, 0xc4, 0x03, 0xc4, 0x03, 0xc4, 0x2b, 0x12, 0xe2, 0x25, 0x8c, 0xb0, 0x41, 0x52, 0x66, + 0x7c, 0xe7, 0xd2, 0x28, 0xa6, 0x0e, 0x61, 0xc2, 0xc1, 0x70, 0xba, 0x81, 0xdb, 0x68, 0x6a, 0x4d, + 0x46, 0x6d, 0x53, 0x73, 0x0f, 0x38, 0x26, 0x0b, 0x8e, 0x21, 0x13, 0xd0, 0x9c, 0x4c, 0x40, 0x02, + 0xe9, 0xe1, 0x38, 0xd2, 0x00, 0x7d, 0x50, 0x38, 0xf5, 0xa2, 0x53, 0xae, 0x7a, 0xaa, 0x2b, 0x5c, + 0x39, 0x90, 0xb8, 0xf3, 0x6e, 0xe5, 0x5b, 0xd3, 0xe5, 0x57, 0x26, 0xc7, 0xaa, 0x70, 0xa6, 0x70, + 0x12, 0x4a, 0xdd, 0xc4, 0x99, 0xb2, 0x89, 0x3b, 0x55, 0x93, 0x08, 0x5e, 0x17, 0xc6, 0xe7, 0xa2, + 0xda, 0x54, 0x1a, 0xfe, 0x96, 0xa6, 0x1d, 0x65, 0xe0, 0x6b, 0xb5, 0x52, 0x86, 0x37, 0xc5, 0x52, + 0xc5, 0x09, 0x07, 0xe9, 0xf9, 0x4d, 0xc4, 0x53, 0x9a, 0x4d, 0x5a, 0x2a, 0x38, 0xab, 0x59, 0x15, + 0x59, 0xcd, 0xd4, 0x51, 0x59, 0x64, 0x35, 0x13, 0x3e, 0x72, 0x93, 0x06, 0xbc, 0xc0, 0x76, 0xbd, + 0xc4, 0x21, 0xb1, 0x4b, 0x5d, 0x3b, 0xfa, 0xc1, 0x12, 0x99, 0x09, 0x72, 0xde, 0x36, 0x0d, 0x7b, + 0x14, 0xec, 0x51, 0xb0, 0x47, 0x95, 0xc8, 0x1e, 0x35, 0x52, 0x97, 0xcd, 0x86, 0x44, 0x8b, 0xd4, + 0x2e, 0xee, 0x6c, 0xe7, 0x6c, 0x14, 0x77, 0xb6, 0x25, 0x9f, 0x94, 0xd7, 0x4b, 0xa6, 0xf2, 0xce, + 0xb6, 0x9a, 0xe4, 0xe1, 0xab, 0xb2, 0x8a, 0xab, 0x61, 0x56, 0x43, 0x14, 0x04, 0x9f, 0x72, 0xb9, + 0x38, 0xda, 0xb7, 0x1a, 0xf5, 0xbd, 0x2d, 0xcb, 0xb6, 0x4e, 0xb2, 0xab, 0xe3, 0xa9, 0x32, 0xb6, + 0x3a, 0x41, 0x37, 0x8c, 0xfb, 0x99, 0x2d, 0xca, 0xfa, 0x42, 0x12, 0x9a, 0xb9, 0xda, 0xd9, 0x3d, + 0xbd, 0x0e, 0x32, 0x1b, 0x4e, 0x40, 0x99, 0x75, 0x1e, 0x87, 0x2c, 0x74, 0x42, 0xdf, 0xfa, 0xd8, + 0x39, 0x47, 0x1c, 0xac, 0x62, 0x98, 0x34, 0x17, 0x2e, 0x49, 0x5a, 0x3a, 0x48, 0x12, 0x49, 0xef, + 0x17, 0xcb, 0x7c, 0x6a, 0xd3, 0x38, 0x0e, 0x63, 0xf9, 0xec, 0x6e, 0xaa, 0x59, 0x30, 0x3b, 0x30, + 0x3b, 0x30, 0x3b, 0x30, 0x3b, 0x30, 0x3b, 0x30, 0x3b, 0x30, 0x3b, 0x30, 0x3b, 0x30, 0x3b, 0x30, + 0x3b, 0x30, 0x3b, 0x30, 0x3b, 0x30, 0x3b, 0xb5, 0xcc, 0xae, 0x1b, 0xc6, 0x3f, 0x87, 0x0e, 0xb6, + 0xd0, 0x61, 0x54, 0x32, 0xbf, 0x9b, 0x69, 0x1c, 0x2c, 0x0f, 0x2c, 0x0f, 0x2c, 0x0f, 0x2c, 0x0f, + 0x2c, 0x0f, 0x2c, 0x0f, 0x2c, 0x0f, 0x2c, 0x0f, 0x2c, 0x0f, 0x2c, 0x0f, 0x2c, 0x0f, 0x2c, 0x0f, + 0x2c, 0x4f, 0x17, 0xcb, 0x93, 0xee, 0xc3, 0x7b, 0xd3, 0x34, 0x18, 0x1e, 0x18, 0x1e, 0x18, 0x1e, + 0x18, 0x1e, 0x18, 0x1e, 0x18, 0x1e, 0x18, 0x1e, 0x18, 0x1e, 0x18, 0x1e, 0x18, 0x1e, 0x18, 0x1e, + 0x18, 0x1e, 0x18, 0x9e, 0x5a, 0x86, 0xd7, 0x1f, 0xf8, 0xcc, 0x73, 0x48, 0xc2, 0x54, 0xf8, 0xf1, + 0x66, 0x1a, 0x07, 0xcb, 0x03, 0xcb, 0x03, 0xcb, 0x03, 0xcb, 0x03, 0xcb, 0x03, 0xcb, 0x03, 0xcb, + 0x03, 0xcb, 0x03, 0xcb, 0x5b, 0x07, 0x96, 0xd7, 0x5a, 0x86, 0x29, 0x58, 0x63, 0xa2, 0x70, 0x1d, + 0xbc, 0x62, 0x0a, 0x96, 0x6d, 0x79, 0xd1, 0xe5, 0x53, 0xc2, 0x68, 0xff, 0x92, 0x11, 0x96, 0xfc, + 0xb9, 0xdf, 0x09, 0x4e, 0x52, 0x4c, 0x79, 0x26, 0x03, 0x52, 0x82, 0x03, 0x8a, 0x70, 0x40, 0xa5, + 0x0b, 0x0b, 0x29, 0x54, 0x36, 0x86, 0x28, 0xdd, 0x07, 0xf8, 0xa6, 0x69, 0xb0, 0x43, 0xb0, 0x43, + 0xb0, 0x43, 0xb0, 0x43, 0xb0, 0x43, 0xb0, 0x43, 0xb0, 0x43, 0xb0, 0x43, 0xb0, 0x43, 0xb0, 0x43, + 0x5e, 0x12, 0x71, 0xfe, 0x03, 0xdc, 0x70, 0x05, 0xb9, 0x61, 0xb6, 0xac, 0x90, 0x40, 0xe5, 0x60, + 0x86, 0x0a, 0x3c, 0x86, 0xf0, 0x13, 0x82, 0x09, 0x82, 0x09, 0x82, 0x09, 0x82, 0x09, 0x82, 0x09, + 0x82, 0x09, 0x82, 0x09, 0x82, 0x09, 0xae, 0x11, 0x13, 0x44, 0x34, 0xa8, 0xb1, 0x6c, 0x0f, 0xd1, + 0xa0, 0x2b, 0xc1, 0xe8, 0xa4, 0x7b, 0xf8, 0xe0, 0xd7, 0x03, 0x9b, 0x03, 0x9b, 0x03, 0x9b, 0x03, + 0x9b, 0x03, 0x9b, 0x03, 0x9b, 0x03, 0x9b, 0x03, 0x9b, 0x03, 0x9b, 0x03, 0x9b, 0x03, 0x9b, 0x03, + 0x9b, 0x53, 0xcd, 0xe6, 0xc2, 0x01, 0x53, 0x56, 0x60, 0x6f, 0x4e, 0xdb, 0xe0, 0x78, 0xe0, 0x78, + 0xe0, 0x78, 0xe0, 0x78, 0xe0, 0x78, 0xe0, 0x78, 0xe0, 0x78, 0xe0, 0x78, 0xe0, 0x78, 0xe0, 0x78, + 0xe0, 0x78, 0xe0, 0x78, 0xe0, 0x78, 0x8a, 0x39, 0x9e, 0x8a, 0x12, 0x7b, 0x6f, 0xda, 0x05, 0xb7, + 0x03, 0xb7, 0x03, 0xb7, 0x03, 0xb7, 0x03, 0xb7, 0x03, 0xb7, 0x03, 0xb7, 0x03, 0xb7, 0x03, 0xb7, + 0x03, 0xb7, 0x03, 0xb7, 0x03, 0xb7, 0x03, 0xb7, 0x53, 0xcc, 0xed, 0xd4, 0x15, 0xd9, 0x9b, 0xdb, + 0x3a, 0x78, 0x1e, 0x78, 0x1e, 0x78, 0x1e, 0x78, 0x1e, 0x78, 0x1e, 0x78, 0x1e, 0x78, 0x1e, 0x78, + 0x1e, 0x78, 0x1e, 0x78, 0x1e, 0x78, 0x1e, 0x78, 0x1e, 0x78, 0x9e, 0x36, 0x9e, 0x27, 0xdf, 0x8f, + 0x87, 0x3a, 0x7b, 0xe0, 0x78, 0xe0, 0x78, 0xe0, 0x78, 0xe0, 0x78, 0xe0, 0x78, 0xe0, 0x78, 0xe0, + 0x78, 0xe0, 0x78, 0xe0, 0x78, 0xe0, 0x78, 0xe0, 0x78, 0xe0, 0x78, 0x7a, 0x39, 0x9e, 0xba, 0x42, + 0x7b, 0x73, 0x5b, 0x07, 0xcf, 0x03, 0xcf, 0x03, 0xcf, 0x03, 0xcf, 0x03, 0xcf, 0x03, 0xcf, 0x03, + 0xcf, 0x03, 0xcf, 0x03, 0xcf, 0x03, 0xcf, 0x03, 0xcf, 0x03, 0xcf, 0x03, 0xcf, 0xd3, 0xc6, 0xf3, + 0xe4, 0xfb, 0xf2, 0x50, 0x2f, 0x0f, 0x1c, 0x0f, 0x1c, 0x0f, 0x1c, 0x0f, 0x1c, 0x0f, 0x1c, 0x0f, + 0x1c, 0x0f, 0x1c, 0x0f, 0x1c, 0x0f, 0x1c, 0x2f, 0x27, 0x51, 0xb8, 0x0e, 0x66, 0x6b, 0xab, 0x9d, + 0x0d, 0x18, 0x6a, 0xe6, 0x99, 0xcf, 0x01, 0xdf, 0x5d, 0x5a, 0x48, 0xa2, 0x92, 0x70, 0x44, 0x15, + 0x1e, 0x40, 0xf8, 0xfd, 0xc0, 0x09, 0xc1, 0x09, 0xc1, 0x09, 0xc1, 0x09, 0xc1, 0x09, 0xc1, 0x09, + 0xc1, 0x09, 0xc1, 0x09, 0xc1, 0x09, 0xe1, 0xf7, 0x5b, 0x75, 0xce, 0x07, 0x4e, 0x57, 0x16, 0x4e, + 0x27, 0xdf, 0xdb, 0x07, 0x1f, 0x1f, 0xf8, 0x1c, 0xf8, 0x1c, 0xf8, 0x1c, 0xf8, 0x1c, 0xf8, 0x1c, + 0xf8, 0x1c, 0xf8, 0x1c, 0xf8, 0x1c, 0xf8, 0x1c, 0xf8, 0x1c, 0xf8, 0x1c, 0xf8, 0x9c, 0xba, 0x27, + 0x39, 0x25, 0x57, 0xa5, 0x1d, 0x04, 0x21, 0xcb, 0x96, 0x59, 0xe8, 0xa8, 0x54, 0x12, 0xe7, 0x9e, + 0xf6, 0x49, 0x44, 0xd8, 0x7d, 0xba, 0xa7, 0x36, 0xc3, 0x88, 0x06, 0x4e, 0xc6, 0xbd, 0x6c, 0x2f, + 0xdd, 0x2f, 0x5d, 0xe2, 0xd0, 0x64, 0x73, 0xde, 0xaf, 0x9b, 0x71, 0x38, 0x60, 0xd4, 0xb5, 0x1f, + 0x7c, 0x12, 0x6c, 0x7a, 0xd1, 0x43, 0x73, 0x33, 0x61, 0x84, 0xd1, 0xcd, 0x11, 0x5c, 0x15, 0x21, + 0x92, 0x95, 0x84, 0xc5, 0x03, 0x87, 0x05, 0x23, 0x19, 0xd5, 0x19, 0xbf, 0xf2, 0xf6, 0x22, 0x7b, + 0xe5, 0x37, 0x9f, 0x04, 0xb7, 0x9d, 0xe8, 0xa1, 0x79, 0xbb, 0x3f, 0x7e, 0xd7, 0x07, 0x3d, 0x0b, + 0xc6, 0xb1, 0x58, 0x15, 0xf7, 0xde, 0x89, 0x6c, 0xc7, 0xf7, 0x86, 0xa7, 0x96, 0x6f, 0xa5, 0x26, + 0xe2, 0x7a, 0xba, 0x31, 0xce, 0x8d, 0x73, 0x40, 0xbb, 0x64, 0xe0, 0x33, 0x21, 0xa5, 0x54, 0xc9, + 0x30, 0x08, 0xdf, 0xac, 0xdf, 0x70, 0xf6, 0x5b, 0xcc, 0xb0, 0x20, 0x6c, 0x50, 0x90, 0x61, 0x48, + 0x90, 0x66, 0x40, 0x90, 0xa5, 0x24, 0xa5, 0x1b, 0x0c, 0xa4, 0x6b, 0x40, 0x99, 0x06, 0x02, 0xbd, + 0x02, 0x5a, 0xd8, 0x10, 0x30, 0xd9, 0x2d, 0x77, 0x61, 0xe8, 0x53, 0x12, 0x88, 0xec, 0x97, 0xd1, + 0xe1, 0xa9, 0xd5, 0xca, 0x2c, 0x28, 0x07, 0x91, 0x4d, 0x5c, 0x37, 0xb6, 0x5d, 0xca, 0xa8, 0xc3, + 0x6c, 0x16, 0x93, 0x20, 0xe9, 0x7b, 0x02, 0x46, 0xce, 0x17, 0xb1, 0xb9, 0xb0, 0xe9, 0x22, 0x85, + 0x68, 0x0d, 0x02, 0x14, 0x02, 0x14, 0x02, 0x54, 0xbd, 0x00, 0x1d, 0x78, 0x01, 0xdb, 0xaa, 0x4b, + 0x90, 0x9f, 0x3b, 0x02, 0x4d, 0xc8, 0x31, 0x97, 0x4a, 0xb0, 0x4b, 0xc8, 0x34, 0x8f, 0xca, 0x36, + 0x8b, 0x2a, 0x33, 0xa4, 0xc9, 0x37, 0xa0, 0x49, 0x30, 0x7f, 0x4a, 0x35, 0x7b, 0x4e, 0x96, 0xa2, + 0x51, 0xdf, 0x6b, 0xec, 0x35, 0x77, 0xea, 0x7b, 0xdb, 0xeb, 0xb7, 0x26, 0x05, 0x51, 0xff, 0x1b, + 0xad, 0x82, 0x51, 0xa2, 0xb1, 0x52, 0xa2, 0x91, 0x52, 0xa2, 0xc7, 0x2b, 0xb3, 0x6c, 0xfd, 0xff, + 0xec, 0x7d, 0xff, 0x4f, 0xdb, 0x4a, 0xf3, 0xee, 0xef, 0xfd, 0x2b, 0xac, 0xe8, 0x95, 0x2e, 0x5c, + 0xd5, 0x25, 0x09, 0x21, 0x40, 0xa4, 0x8f, 0xae, 0x52, 0xa0, 0x3d, 0xd1, 0xcb, 0x97, 0x08, 0x68, + 0xdf, 0x73, 0xd4, 0xe6, 0x45, 0xc6, 0xde, 0x80, 0x55, 0xc7, 0xf6, 0xc7, 0x5e, 0xd3, 0xa2, 0x36, + 0xff, 0xfb, 0x95, 0x9d, 0xc4, 0x04, 0x42, 0xda, 0xc4, 0x9e, 0x5d, 0x7b, 0x9d, 0x87, 0x1f, 0xce, + 0x01, 0x4a, 0xf6, 0xfb, 0xce, 0x3c, 0xcf, 0xcc, 0xec, 0xcc, 0x41, 0xbb, 0xd9, 0xd1, 0x7a, 0xfd, + 0x87, 0xb6, 0x76, 0xc5, 0x0d, 0xce, 0x1c, 0x16, 0x86, 0x5a, 0xd7, 0xb2, 0x82, 0xe4, 0xff, 0x11, + 0xf7, 0x26, 0x56, 0x8a, 0x28, 0x98, 0xd8, 0x40, 0xca, 0xed, 0x8c, 0xa5, 0x36, 0x38, 0xca, 0xf1, + 0xc7, 0x66, 0xd8, 0x86, 0x4d, 0xbb, 0xc1, 0x52, 0x88, 0x11, 0x73, 0xe3, 0x7b, 0x6e, 0xe5, 0xa7, + 0x41, 0xb3, 0x86, 0x8a, 0x24, 0x3d, 0xf1, 0x59, 0x05, 0xef, 0x01, 0xef, 0x01, 0xef, 0x81, 0xe1, + 0x88, 0x48, 0x3e, 0x3a, 0xcc, 0x08, 0xdc, 0x18, 0x0f, 0x79, 0x8e, 0x6d, 0xda, 0x9c, 0x42, 0x52, + 0x2e, 0x36, 0x59, 0xa4, 0xcc, 0x3c, 0xbf, 0x38, 0x3f, 0x81, 0xcc, 0x84, 0xcc, 0x84, 0xcc, 0x14, + 0x2f, 0x33, 0x99, 0x1b, 0x8d, 0x58, 0x6e, 0x52, 0x91, 0xca, 0xcd, 0x56, 0x8e, 0x36, 0x4e, 0xdc, + 0x68, 0x94, 0xff, 0xd4, 0x5d, 0x7b, 0x57, 0x3c, 0xb0, 0xdd, 0x3b, 0x9a, 0xa0, 0x96, 0x7a, 0xbc, + 0x46, 0x89, 0x3c, 0x22, 0x60, 0x5c, 0x8d, 0xb8, 0xb1, 0x8f, 0xa7, 0x17, 0xef, 0xbb, 0xa7, 0x14, + 0xcd, 0x35, 0xe3, 0xe6, 0x4e, 0x7b, 0xe7, 0xff, 0xbe, 0x39, 0xbd, 0x38, 0xa2, 0x69, 0x72, 0x37, + 0x6e, 0xf2, 0xfd, 0xc5, 0xf5, 0x5f, 0xb5, 0x62, 0x83, 0x4a, 0xbd, 0x5e, 0x0e, 0xef, 0xf1, 0xb3, + 0xa6, 0x92, 0xc9, 0x74, 0xb4, 0x5d, 0x82, 0xc5, 0x99, 0xee, 0x5c, 0x47, 0x6b, 0x10, 0x34, 0x36, + 0xb7, 0x6f, 0x1d, 0xad, 0x49, 0xd0, 0x60, 0x72, 0x48, 0x3b, 0x5a, 0x7d, 0x23, 0xa2, 0x41, 0x36, + 0xc2, 0x24, 0x74, 0xd8, 0xd8, 0x6d, 0x74, 0xb4, 0x24, 0x06, 0x24, 0x08, 0xb5, 0xa3, 0x80, 0x19, + 0xdc, 0x76, 0xef, 0xb4, 0x23, 0xc3, 0xbc, 0x67, 0xda, 0x89, 0xcb, 0x03, 0x9b, 0x85, 0x5a, 0xe4, + 0x7b, 0xee, 0x57, 0xf7, 0x92, 0x99, 0xcc, 0x7e, 0x88, 0xff, 0xf5, 0xd3, 0x13, 0x86, 0xd3, 0xce, + 0x99, 0x7d, 0x77, 0x7f, 0xeb, 0x05, 0x5a, 0xd7, 0x7a, 0x60, 0x01, 0xb7, 0xc3, 0x24, 0x64, 0x2a, + 0x84, 0xf1, 0x48, 0x90, 0xf1, 0x48, 0xd8, 0x86, 0xc1, 0xcc, 0x24, 0x80, 0x46, 0x8d, 0x78, 0x94, + 0x9f, 0x38, 0xc5, 0x8d, 0x80, 0x73, 0x80, 0x73, 0x80, 0x73, 0xac, 0x71, 0x5a, 0xe0, 0x9f, 0x9e, + 0x1f, 0x88, 0x10, 0xff, 0x74, 0xa3, 0x79, 0x00, 0x17, 0x75, 0xa6, 0xdd, 0x80, 0x8b, 0x1a, 0x2e, + 0x6a, 0xf0, 0x91, 0xd7, 0xf8, 0x48, 0xb3, 0xd5, 0xae, 0x77, 0xb4, 0x85, 0x67, 0x15, 0x6f, 0xb5, + 0xcf, 0x2c, 0x08, 0x6d, 0xcf, 0xd5, 0xda, 0xda, 0x56, 0xaf, 0xff, 0xd0, 0xde, 0xd6, 0xae, 0x7c, + 0x66, 0xda, 0x43, 0xdb, 0x4c, 0xcc, 0x4a, 0x5f, 0xdd, 0xb4, 0xb9, 0x2b, 0x96, 0x9c, 0x5a, 0x6d, + 0x0f, 0x14, 0x44, 0x10, 0x05, 0xa1, 0xdc, 0x23, 0xb0, 0x0e, 0xd2, 0x4f, 0xac, 0x29, 0x5b, 0xf2, + 0xbe, 0x78, 0x21, 0x7f, 0xe9, 0xb2, 0xde, 0x79, 0x58, 0x7d, 0x6d, 0xd6, 0x58, 0x97, 0x5a, 0xe4, + 0xba, 0xd1, 0xe8, 0x96, 0x05, 0x19, 0x7c, 0x5e, 0x4f, 0xe8, 0xf3, 0xa9, 0x8d, 0x35, 0x77, 0x64, + 0x66, 0xe4, 0x5e, 0xf3, 0x63, 0x59, 0x99, 0x5a, 0x1e, 0x86, 0xf6, 0x8c, 0x99, 0x0d, 0x33, 0x88, + 0xb1, 0xbc, 0xe2, 0x95, 0x8c, 0x89, 0x91, 0xc9, 0xce, 0x05, 0xe6, 0x35, 0xac, 0x95, 0xec, 0xc6, + 0x1f, 0xdb, 0x41, 0xb6, 0xcd, 0x36, 0x67, 0x27, 0x2c, 0xa7, 0x35, 0x63, 0xda, 0x4e, 0x3e, 0x83, + 0x46, 0xa3, 0x2a, 0x06, 0x8d, 0x21, 0x0c, 0x1a, 0x92, 0xae, 0x55, 0x31, 0x06, 0x8d, 0xac, 0xd7, + 0xed, 0x09, 0xf5, 0xe7, 0x0c, 0x54, 0x5b, 0x38, 0x75, 0xf9, 0x02, 0xd6, 0x9e, 0x26, 0x46, 0x10, + 0x84, 0x91, 0x36, 0x96, 0xe3, 0xe9, 0x63, 0x8a, 0xc7, 0x90, 0x63, 0x49, 0xb8, 0xc0, 0x91, 0x41, + 0x8b, 0x14, 0xcd, 0xb1, 0x34, 0x44, 0x8e, 0xa5, 0x97, 0xa7, 0x2d, 0x7f, 0xa4, 0xdc, 0x82, 0xd6, + 0x6f, 0x14, 0xba, 0x44, 0x44, 0xe9, 0x01, 0xd2, 0xf6, 0x1e, 0xef, 0x3c, 0xae, 0x7b, 0xa6, 0x6e, + 0x7a, 0x23, 0x3f, 0x60, 0x61, 0xc8, 0x2c, 0xdd, 0x61, 0xc6, 0x30, 0x6e, 0x7c, 0xbc, 0x11, 0x1e, + 0xf6, 0x93, 0x1f, 0x89, 0x5d, 0x31, 0xbb, 0x02, 0xa1, 0xc3, 0x3d, 0x9e, 0xa9, 0xb3, 0x1f, 0xbc, + 0xc3, 0x99, 0xc3, 0x46, 0x8c, 0x07, 0x8f, 0xba, 0xe7, 0xea, 0xe6, 0x7d, 0x62, 0xbe, 0x27, 0xc5, + 0x42, 0x89, 0xa6, 0x23, 0x04, 0x43, 0xb2, 0x71, 0xd0, 0xa0, 0x3a, 0xa9, 0x35, 0x9e, 0x38, 0xfa, + 0xce, 0x94, 0x93, 0x94, 0xd8, 0x91, 0x9c, 0xce, 0x43, 0x0f, 0xd8, 0x30, 0x3f, 0x09, 0x7b, 0xde, + 0x1c, 0xb8, 0x18, 0xb8, 0x18, 0xb8, 0x98, 0x70, 0x13, 0x08, 0xad, 0x29, 0x84, 0xe8, 0x1a, 0x82, + 0xb9, 0x80, 0xb9, 0xa8, 0xcd, 0x5c, 0xf2, 0x5e, 0xeb, 0x45, 0x1d, 0x4b, 0x77, 0x3c, 0x16, 0xf4, + 0x2d, 0xd5, 0xf1, 0xa0, 0x31, 0x57, 0x90, 0x5f, 0x7e, 0x11, 0x42, 0x40, 0x98, 0x30, 0x10, 0x25, + 0x14, 0x84, 0x0b, 0x07, 0xe1, 0x42, 0x42, 0xa4, 0xb0, 0xa0, 0x11, 0x1a, 0x44, 0xc2, 0x83, 0xde, + 0xfc, 0xb1, 0x70, 0x5a, 0x63, 0x4a, 0x9f, 0x1d, 0x64, 0xff, 0x56, 0xe3, 0xef, 0x13, 0xb6, 0xd9, + 0x4f, 0x29, 0x55, 0xbc, 0xcd, 0x9d, 0x39, 0x0a, 0xf5, 0xe2, 0x17, 0xd3, 0x9f, 0x93, 0x44, 0x82, + 0xa5, 0xda, 0x42, 0x62, 0xf3, 0x8c, 0x78, 0x33, 0x0d, 0xdd, 0x4d, 0xa0, 0x08, 0x4a, 0x0b, 0xa3, + 0x5b, 0x81, 0x0a, 0xf0, 0x59, 0xeb, 0xd0, 0x81, 0xd0, 0x81, 0xd0, 0x81, 0xd0, 0x81, 0xca, 0xea, + 0xc0, 0x2f, 0x4f, 0x3a, 0xf0, 0x7f, 0xcc, 0x28, 0x08, 0x98, 0xcb, 0xb7, 0xb6, 0x77, 0xde, 0xbd, + 0x7b, 0x32, 0x37, 0x0e, 0xa6, 0x1f, 0x99, 0x97, 0x7b, 0xe1, 0x2b, 0xbf, 0x4b, 0x5b, 0xb6, 0xd8, + 0x0f, 0xa8, 0xd3, 0xb2, 0xa8, 0xd3, 0x42, 0xf9, 0x6c, 0x6e, 0xaf, 0xc8, 0xec, 0x8b, 0xde, 0xc4, + 0x21, 0xcc, 0x4b, 0xb2, 0x44, 0x9a, 0x13, 0x78, 0x4b, 0x5e, 0x15, 0xe3, 0x45, 0x9b, 0x3c, 0x06, + 0x25, 0xf3, 0x44, 0x8a, 0xf1, 0xaa, 0x3c, 0x73, 0x32, 0xe4, 0xf2, 0xb1, 0xe4, 0x5f, 0xf5, 0x71, + 0xae, 0xcc, 0xe9, 0x06, 0x67, 0x74, 0x56, 0xdf, 0x49, 0x73, 0x25, 0x33, 0xfa, 0x36, 0x61, 0xf4, + 0x2d, 0x1e, 0xd3, 0xc2, 0xe8, 0xbb, 0xf2, 0x84, 0x60, 0xf4, 0x05, 0xe1, 0x05, 0xe1, 0x05, 0xe1, + 0x05, 0xe1, 0x95, 0x42, 0x78, 0xe9, 0x8d, 0xbe, 0xb0, 0x79, 0x42, 0x05, 0x40, 0x05, 0x40, 0x05, + 0x40, 0x05, 0x28, 0xa2, 0x02, 0x4a, 0x6d, 0xf3, 0x54, 0x9c, 0xcd, 0xa8, 0x68, 0xcf, 0xc9, 0xf0, + 0x5e, 0x97, 0xd0, 0x9c, 0xb3, 0xe9, 0x75, 0x01, 0x97, 0x6d, 0x8b, 0x8c, 0x0a, 0x81, 0x9f, 0xd2, + 0xbe, 0x6f, 0xd2, 0x3f, 0xba, 0x64, 0xc3, 0x32, 0x87, 0x4f, 0xe7, 0x33, 0xe1, 0x91, 0x98, 0xee, + 0xc8, 0xc2, 0xa5, 0x9b, 0x08, 0x97, 0x16, 0x07, 0xb5, 0x10, 0x2e, 0x4d, 0x66, 0x62, 0xc3, 0xd3, + 0xd5, 0x15, 0xbf, 0xf0, 0x74, 0x55, 0x1e, 0xf7, 0x83, 0x2f, 0x00, 0x4f, 0x57, 0xff, 0x7c, 0xda, + 0xca, 0xf7, 0x74, 0x15, 0x48, 0x99, 0x00, 0x29, 0xe7, 0xa0, 0x2c, 0x48, 0xdc, 0xb4, 0xc2, 0x02, + 0xd7, 0x32, 0x21, 0xf3, 0x75, 0x49, 0x87, 0xb0, 0x1c, 0x51, 0x6f, 0x08, 0x37, 0x2a, 0xeb, 0x06, + 0x11, 0x6e, 0xcc, 0x1a, 0xbb, 0xb1, 0xea, 0x2e, 0xac, 0xb6, 0xf4, 0x7f, 0x5e, 0xc8, 0x15, 0x16, + 0x71, 0x4d, 0xca, 0x96, 0x89, 0xa2, 0xad, 0x49, 0xc9, 0xd6, 0xa6, 0x60, 0x59, 0x90, 0xd0, 0x3c, + 0xe2, 0x89, 0xb7, 0x72, 0x9d, 0x5d, 0xcc, 0x88, 0x6d, 0x72, 0x63, 0x98, 0xdc, 0x58, 0xe5, 0x25, + 0x26, 0x49, 0x26, 0x5e, 0xd0, 0xc5, 0x5d, 0x97, 0xf6, 0xd4, 0x92, 0xc1, 0x66, 0xce, 0x14, 0xb7, + 0xe6, 0x1e, 0xe7, 0x00, 0xfc, 0x85, 0xe7, 0x88, 0xcb, 0x30, 0x55, 0x6d, 0x23, 0xb2, 0xc4, 0xad, + 0x77, 0xdc, 0xe5, 0x00, 0x8c, 0xcc, 0xa0, 0x7a, 0x2e, 0x07, 0x62, 0xb6, 0x7a, 0x3f, 0xa9, 0x54, + 0x3e, 0xcc, 0xf0, 0xd9, 0xe9, 0xb0, 0xb3, 0x11, 0x7b, 0xa2, 0xb4, 0xe3, 0x8d, 0x36, 0x41, 0xda, + 0xf1, 0x36, 0xd2, 0x8e, 0xbf, 0x68, 0x0c, 0x65, 0xb1, 0x73, 0x6d, 0x85, 0x88, 0x9c, 0xe3, 0xed, + 0xbd, 0xbd, 0x5d, 0xa4, 0x1b, 0x97, 0xf5, 0x69, 0xa9, 0xe9, 0xc6, 0x09, 0x64, 0x61, 0x38, 0xa9, + 0x91, 0x46, 0x50, 0xf1, 0xed, 0x40, 0x12, 0x67, 0x1f, 0x80, 0x5a, 0xfe, 0x91, 0x5a, 0xae, 0x61, + 0x44, 0x59, 0x81, 0x08, 0xbe, 0xc9, 0xb1, 0x20, 0xb5, 0x6e, 0x74, 0x17, 0xa3, 0xa8, 0xc4, 0xc5, + 0xf0, 0x67, 0x5d, 0xb7, 0x26, 0x91, 0x5c, 0x29, 0x26, 0x2e, 0x5e, 0x91, 0xce, 0xdc, 0xea, 0xac, + 0x4a, 0x3c, 0x8f, 0x59, 0x68, 0x06, 0xb6, 0x3f, 0xdd, 0xc3, 0x5a, 0xaf, 0xff, 0xd0, 0xd2, 0x8c, + 0x69, 0x05, 0xf0, 0xa1, 0x31, 0xb2, 0x9d, 0x47, 0xed, 0x59, 0x11, 0x70, 0x6d, 0xe8, 0x05, 0x5f, + 0xdd, 0xa7, 0xb1, 0x88, 0x26, 0xb8, 0x75, 0x39, 0x04, 0x77, 0xad, 0x7a, 0x3e, 0xd5, 0xa1, 0xb7, + 0xeb, 0xd4, 0xe3, 0x29, 0x98, 0xdc, 0xda, 0xfe, 0x43, 0x2b, 0x3b, 0xb9, 0x4d, 0x3e, 0xbd, 0x6e, + 0x82, 0xea, 0xe7, 0x57, 0xa3, 0x6f, 0x04, 0xc6, 0x88, 0x25, 0xc5, 0xce, 0x86, 0x5e, 0xa0, 0xf1, + 0x7b, 0xa6, 0xbd, 0x72, 0x5b, 0xde, 0x6d, 0x4a, 0x9a, 0x75, 0x1f, 0x04, 0x9a, 0xa8, 0xc0, 0xd5, + 0xb8, 0x58, 0x5d, 0x4f, 0x61, 0x23, 0x2d, 0xb7, 0x46, 0x6b, 0x43, 0xa3, 0x41, 0xa3, 0x95, 0x52, + 0xa3, 0xb5, 0x73, 0x69, 0xb4, 0xb6, 0x10, 0x8d, 0xd6, 0x86, 0x46, 0x83, 0x46, 0xab, 0xb8, 0x46, + 0xfb, 0xed, 0x5f, 0xfc, 0x21, 0x0a, 0x2a, 0x4b, 0xf9, 0xb3, 0xda, 0xf7, 0x7b, 0xe6, 0xae, 0x6c, + 0x07, 0xcd, 0x20, 0xf0, 0x9f, 0xe2, 0xe0, 0x27, 0x9a, 0x74, 0xa2, 0xe1, 0xa6, 0x3f, 0xf0, 0x47, + 0x9f, 0x69, 0xff, 0xa3, 0xfd, 0x1f, 0xdb, 0x70, 0x0d, 0x7b, 0xc8, 0x3b, 0xce, 0xae, 0xed, 0xc7, + 0x1a, 0xf5, 0xff, 0x48, 0xd6, 0x10, 0xc9, 0x22, 0x14, 0xa9, 0x1f, 0x32, 0xae, 0x92, 0x90, 0xe2, + 0x4e, 0xcf, 0x65, 0x71, 0x46, 0x25, 0xd0, 0x35, 0xb9, 0xfd, 0xc0, 0xb4, 0x78, 0x61, 0x13, 0xf1, + 0x9d, 0xa2, 0x18, 0xcd, 0x0e, 0x35, 0x43, 0x73, 0xbc, 0x3b, 0xdb, 0x34, 0x9c, 0xb9, 0x5f, 0xfb, + 0x81, 0xf7, 0x60, 0x5b, 0xb6, 0x7b, 0xf7, 0xd5, 0x3d, 0xdd, 0xd5, 0x62, 0x74, 0x65, 0xbb, 0x77, + 0x89, 0xf4, 0xff, 0x7c, 0xda, 0x3d, 0x5f, 0xb7, 0x58, 0x76, 0x1e, 0xe9, 0x37, 0x7f, 0x30, 0xac, + 0xb9, 0xb5, 0xc8, 0x20, 0x83, 0x29, 0x44, 0xdf, 0xb3, 0x73, 0x42, 0xbe, 0xac, 0x25, 0x97, 0x87, + 0x83, 0x7c, 0xc6, 0xaf, 0xf5, 0xac, 0x80, 0x34, 0xd6, 0xbf, 0xda, 0x4a, 0x81, 0x1b, 0x7f, 0x8a, + 0x25, 0xf9, 0xfd, 0xc6, 0x2c, 0x5f, 0xb8, 0xdf, 0x2c, 0xc9, 0x8a, 0xe1, 0x22, 0x6b, 0x85, 0x89, + 0xac, 0x08, 0xa9, 0x56, 0x0e, 0x0b, 0x59, 0x07, 0x32, 0xad, 0x1d, 0xf8, 0xba, 0xae, 0x50, 0xc8, + 0x0c, 0x81, 0x32, 0xdf, 0xfb, 0x2c, 0x81, 0xa7, 0xf9, 0xec, 0xc3, 0xab, 0x72, 0x83, 0x9a, 0x61, + 0x8d, 0x6c, 0x57, 0x8f, 0xcf, 0x44, 0x14, 0xae, 0x1f, 0x72, 0xf4, 0xec, 0xd3, 0xeb, 0xd1, 0xd8, + 0x7a, 0x59, 0x69, 0xec, 0x70, 0x33, 0x69, 0xec, 0xb0, 0x28, 0x1a, 0x7b, 0x66, 0xb8, 0x96, 0xc1, + 0xbd, 0xe0, 0x71, 0x0d, 0xdb, 0xc6, 0xda, 0x21, 0x1a, 0x73, 0x0f, 0x29, 0xa2, 0x11, 0x9b, 0xd8, + 0x61, 0xd6, 0xd9, 0xe7, 0x99, 0x3c, 0x6c, 0xad, 0xf1, 0x99, 0x13, 0x37, 0x1a, 0xad, 0x7f, 0x32, + 0xae, 0xbd, 0xab, 0x89, 0xf3, 0x30, 0x13, 0xc6, 0xa9, 0xc7, 0x73, 0xfc, 0xd4, 0xcf, 0x02, 0x6a, + 0x1a, 0xf1, 0x47, 0x8f, 0x2f, 0xfe, 0x73, 0x9e, 0xe5, 0xc3, 0xcd, 0xf8, 0xc3, 0xd7, 0x27, 0x57, + 0xd7, 0xbd, 0xf3, 0x8f, 0x35, 0xb1, 0xd1, 0x39, 0x5e, 0x2f, 0x39, 0xb4, 0x19, 0x16, 0x27, 0x99, + 0x5c, 0xa6, 0x67, 0x68, 0xe9, 0xd4, 0x32, 0xbd, 0x41, 0x8b, 0x37, 0xa4, 0xa3, 0xd5, 0x95, 0xf0, + 0xb0, 0xae, 0x9d, 0x82, 0x2f, 0xbb, 0xe0, 0x23, 0x4b, 0xa9, 0x97, 0x3f, 0x75, 0x5e, 0xc6, 0x14, + 0x79, 0x6b, 0x9c, 0xdd, 0xdc, 0xcb, 0xe4, 0xf9, 0x53, 0xb1, 0x65, 0x38, 0xca, 0x2c, 0xcf, 0x4a, + 0x7f, 0xb9, 0xe2, 0x1b, 0xb0, 0x3c, 0x45, 0xe0, 0x73, 0x14, 0x7d, 0xcf, 0x61, 0xe2, 0x4b, 0x0a, + 0x86, 0x1f, 0xb4, 0x77, 0x3b, 0xda, 0xf5, 0x3d, 0xd3, 0x52, 0x36, 0x10, 0x6a, 0x1f, 0x03, 0x2f, + 0xf2, 0xb5, 0xb3, 0xde, 0x7b, 0x4d, 0xd7, 0xec, 0x61, 0x37, 0xc6, 0x50, 0x57, 0xeb, 0x40, 0x28, + 0x51, 0xf6, 0xc0, 0xbc, 0x75, 0xd9, 0xc5, 0x98, 0x04, 0x33, 0x2c, 0x63, 0x69, 0xec, 0x87, 0x03, + 0x89, 0xaf, 0x06, 0x4c, 0x2f, 0x8a, 0xd7, 0x26, 0x03, 0x8a, 0x4f, 0x3f, 0x59, 0x11, 0x47, 0x14, + 0x10, 0xbc, 0x5c, 0xcc, 0xb0, 0xb6, 0x23, 0xca, 0x34, 0x82, 0xc0, 0x66, 0x81, 0xce, 0x03, 0xc3, + 0x0d, 0xed, 0x58, 0xa9, 0x85, 0xd9, 0x4d, 0x92, 0xaf, 0x35, 0xb6, 0x19, 0xaf, 0x0a, 0x50, 0x79, + 0x3e, 0xf7, 0x45, 0xc8, 0xa8, 0x00, 0xa4, 0xbf, 0x28, 0x98, 0x8a, 0xe8, 0x76, 0x2b, 0xc7, 0xab, + 0x82, 0x83, 0x0c, 0x1f, 0xcd, 0x17, 0x4f, 0x9f, 0x23, 0x92, 0x96, 0x22, 0x7e, 0x9e, 0x2a, 0x6e, + 0x9e, 0x3c, 0x40, 0x9b, 0x2e, 0x30, 0x3b, 0x4f, 0x72, 0x67, 0x8a, 0xb8, 0xf8, 0x74, 0x89, 0x1b, + 0x07, 0xad, 0x56, 0x7b, 0xbf, 0xd5, 0xaa, 0xef, 0xef, 0xee, 0xd7, 0x0f, 0xf7, 0xf6, 0x1a, 0xed, + 0xc6, 0x5e, 0x75, 0x57, 0xbd, 0x9c, 0x41, 0xd9, 0x6b, 0x4a, 0xa5, 0xcc, 0xd9, 0xf6, 0xf3, 0x2b, + 0x0e, 0xf2, 0x6c, 0xfa, 0x74, 0xd9, 0xf3, 0x73, 0x66, 0xcb, 0xcf, 0x70, 0x21, 0xc9, 0x96, 0x33, + 0xbb, 0x89, 0xa0, 0x7c, 0xcb, 0xf8, 0x46, 0xcc, 0x3d, 0x59, 0xc7, 0x61, 0x6e, 0xbb, 0xfa, 0x6d, + 0xe0, 0x19, 0x96, 0x69, 0x84, 0x5c, 0xf7, 0xbf, 0xf1, 0x1c, 0x18, 0x75, 0xb1, 0x29, 0x20, 0x54, + 0x20, 0x54, 0x20, 0x54, 0x20, 0x54, 0x20, 0x54, 0x20, 0x54, 0x20, 0xd4, 0x25, 0xcb, 0x91, 0xc3, + 0xe4, 0x9f, 0xb6, 0x91, 0xdd, 0xf4, 0x4f, 0x20, 0x23, 0xd6, 0x74, 0x05, 0xfc, 0x75, 0xd4, 0x73, + 0xdf, 0xcf, 0x70, 0x42, 0xff, 0x1b, 0x0f, 0xdf, 0x7d, 0x75, 0xe3, 0x8f, 0xb6, 0x9a, 0x87, 0xbb, + 0x1d, 0xed, 0xcc, 0x70, 0x8d, 0x3b, 0x16, 0xab, 0x11, 0xad, 0xe7, 0x0e, 0xbd, 0x60, 0x34, 0x79, + 0x4d, 0xf0, 0xde, 0x08, 0xd9, 0x2c, 0x9c, 0xfa, 0xab, 0x9b, 0xb4, 0xed, 0x32, 0xae, 0xf5, 0x03, + 0x8f, 0x7b, 0xa6, 0xe7, 0x68, 0x5b, 0xbd, 0xfe, 0xf6, 0xbb, 0x92, 0x25, 0xac, 0xcc, 0xeb, 0x69, + 0x20, 0xd7, 0xd0, 0xaf, 0x6a, 0xea, 0xe2, 0x77, 0xad, 0x6a, 0xf7, 0x5f, 0x14, 0x4e, 0xb7, 0xec, + 0xd0, 0x34, 0x02, 0x2b, 0x1f, 0x42, 0x4f, 0x1b, 0x01, 0x36, 0x07, 0x36, 0x07, 0x36, 0x07, 0x36, + 0x07, 0x36, 0x07, 0x36, 0x07, 0x36, 0x07, 0x36, 0x4f, 0x50, 0x5e, 0xcf, 0x3d, 0x9e, 0xe2, 0x03, + 0x80, 0x72, 0x05, 0x40, 0xb9, 0x88, 0xed, 0x02, 0x1a, 0x5f, 0x0d, 0x8d, 0xb3, 0x20, 0xf0, 0x82, + 0x7c, 0x58, 0x7c, 0xda, 0x04, 0x90, 0x38, 0x90, 0x38, 0x90, 0x38, 0x90, 0x38, 0x90, 0x38, 0x90, + 0x38, 0x90, 0x38, 0x90, 0xf8, 0x14, 0xda, 0x9d, 0x24, 0xe8, 0x00, 0x38, 0x5c, 0x09, 0x1c, 0x4e, + 0xbd, 0x59, 0x40, 0xe1, 0xab, 0xa1, 0xf0, 0xa1, 0x19, 0x52, 0x20, 0xf1, 0xb9, 0x66, 0x80, 0xc6, + 0x81, 0xc6, 0x81, 0xc6, 0x81, 0xc6, 0x81, 0xc6, 0x81, 0xc6, 0x81, 0xc6, 0x97, 0x2c, 0x47, 0xf1, + 0x51, 0xd5, 0x08, 0x03, 0xa6, 0x86, 0x52, 0xa3, 0xc8, 0xe1, 0x36, 0x4d, 0x18, 0xf0, 0x8b, 0xa6, + 0x00, 0xa9, 0x00, 0xa9, 0x00, 0xa9, 0x00, 0xa9, 0x00, 0xa9, 0x00, 0xa9, 0x00, 0xa9, 0x60, 0xe0, + 0x4c, 0x03, 0x4a, 0xcf, 0x66, 0x38, 0x01, 0x61, 0xc0, 0x8a, 0x58, 0x3a, 0x05, 0xee, 0x1a, 0x4c, + 0x9e, 0xab, 0xe1, 0x74, 0xcf, 0xe4, 0x2c, 0x27, 0x3e, 0x9f, 0x36, 0x01, 0x5c, 0x0e, 0x5c, 0x0e, + 0x5c, 0x0e, 0x5c, 0x0e, 0x5c, 0x0e, 0x5c, 0x0e, 0x5c, 0x0e, 0x5c, 0x9e, 0x22, 0xbc, 0x8b, 0x04, + 0x1f, 0x00, 0x90, 0x2b, 0x02, 0xc8, 0xa9, 0xb7, 0x0b, 0x48, 0x7c, 0x35, 0x24, 0x9e, 0xdb, 0x4e, + 0x0e, 0xeb, 0x38, 0x50, 0x38, 0x50, 0x38, 0x50, 0x38, 0x50, 0x38, 0x50, 0x38, 0x50, 0xf8, 0x06, + 0xa1, 0xf0, 0xc6, 0x61, 0x47, 0xbb, 0x64, 0x23, 0x8f, 0x33, 0xed, 0x9c, 0xf1, 0xef, 0x5e, 0xf0, + 0x4d, 0x3b, 0xf3, 0x5c, 0x9b, 0x7b, 0x81, 0xed, 0xde, 0xfd, 0x0e, 0xbc, 0x01, 0x93, 0x17, 0x8f, + 0xc9, 0x4b, 0xb0, 0x79, 0x40, 0xe8, 0xab, 0x21, 0xf4, 0xc8, 0x25, 0x8a, 0x68, 0x79, 0xd6, 0x10, + 0x10, 0x3b, 0x10, 0x3b, 0x10, 0x3b, 0x10, 0x3b, 0x10, 0x3b, 0x10, 0x3b, 0x10, 0xfb, 0x66, 0x20, + 0xf6, 0x95, 0x0c, 0xb1, 0x9f, 0x10, 0xcb, 0x52, 0x1e, 0x98, 0x5e, 0xd4, 0x8e, 0x01, 0x9b, 0xaf, + 0x8a, 0xcd, 0xbf, 0xb9, 0xde, 0x77, 0x57, 0xf7, 0xe3, 0xe5, 0xcb, 0x8b, 0xce, 0x9f, 0x35, 0x05, + 0x7c, 0x0e, 0x7c, 0x0e, 0x7c, 0x0e, 0x7c, 0x0e, 0x7c, 0x0e, 0x7c, 0x0e, 0x7c, 0xbe, 0x64, 0x39, + 0xf0, 0x84, 0x6f, 0xa9, 0x16, 0x11, 0xfe, 0x84, 0x0f, 0x54, 0xea, 0x0f, 0xe9, 0x34, 0x3e, 0x4d, + 0x00, 0x5d, 0x3f, 0x0b, 0x9e, 0x03, 0x07, 0xca, 0xb1, 0xd4, 0x20, 0x2f, 0x2b, 0xac, 0xb3, 0x63, + 0x84, 0x5c, 0x37, 0x1d, 0x66, 0x04, 0xd9, 0x59, 0xcb, 0x5c, 0x1b, 0xa0, 0x2b, 0xa0, 0x2b, 0x95, + 0xa2, 0x2b, 0xdc, 0x1e, 0x31, 0x6e, 0x9b, 0xdf, 0x42, 0xe9, 0x84, 0xe5, 0x93, 0x3b, 0xc1, 0x8a, + 0x35, 0xd7, 0x70, 0xbd, 0x90, 0x99, 0x9e, 0x6b, 0x65, 0xaa, 0x37, 0x0d, 0xe2, 0x03, 0xe2, 0x03, + 0xe2, 0x03, 0xe2, 0x23, 0x86, 0xf8, 0x54, 0xb1, 0x22, 0x64, 0x09, 0x72, 0x98, 0x78, 0x11, 0x27, + 0xab, 0x65, 0xf8, 0x4a, 0x5b, 0x80, 0x69, 0x80, 0x69, 0x95, 0x82, 0x69, 0xb0, 0x2a, 0x03, 0x5c, + 0x01, 0x5c, 0x01, 0x5c, 0x51, 0x4a, 0xa5, 0xcd, 0x8b, 0xfa, 0xb8, 0x88, 0x38, 0xaa, 0x19, 0xaa, + 0x66, 0xf6, 0x14, 0xb9, 0x6d, 0x30, 0xa1, 0xae, 0x88, 0xd5, 0xf3, 0xd7, 0x33, 0x7c, 0xd6, 0x0a, + 0xf0, 0x39, 0xf0, 0x39, 0xf0, 0x39, 0xf0, 0x39, 0xf0, 0x39, 0xf0, 0x39, 0xf0, 0x39, 0xf0, 0x79, + 0x02, 0xf4, 0x2e, 0x22, 0x8e, 0x8a, 0x86, 0x0a, 0x01, 0x73, 0x21, 0xfb, 0x05, 0x44, 0xbe, 0x22, + 0x22, 0xcf, 0x5b, 0x49, 0x65, 0xae, 0x0d, 0xa0, 0x71, 0xa0, 0x71, 0xa0, 0x71, 0xa0, 0x71, 0xa0, + 0x71, 0xa0, 0x71, 0xa0, 0x71, 0xa0, 0xf1, 0x19, 0xba, 0x43, 0x55, 0x43, 0x95, 0xb0, 0x38, 0xca, + 0x1a, 0x16, 0x84, 0xc4, 0xa9, 0x8a, 0xf1, 0xbc, 0xd2, 0x16, 0x90, 0x39, 0x90, 0x39, 0x90, 0x39, + 0x90, 0x39, 0x90, 0x39, 0x90, 0x39, 0x90, 0x39, 0x90, 0xf9, 0x53, 0x40, 0x04, 0xca, 0xf1, 0xa8, + 0x06, 0xd1, 0x45, 0x6e, 0x1b, 0xb0, 0xfa, 0x8a, 0x58, 0x3d, 0x6f, 0x41, 0x9e, 0xb9, 0x36, 0x80, + 0xcd, 0x81, 0xcd, 0x81, 0xcd, 0x81, 0xcd, 0x81, 0xcd, 0x81, 0xcd, 0x81, 0xcd, 0x81, 0xcd, 0x9f, + 0x40, 0x1e, 0x4a, 0xf2, 0xa8, 0x05, 0xca, 0x51, 0x93, 0xa7, 0x20, 0x34, 0x9e, 0xdf, 0x5e, 0x0e, + 0x2b, 0x39, 0x90, 0x38, 0x90, 0x38, 0x90, 0x38, 0x90, 0x38, 0x90, 0x38, 0x90, 0xf8, 0x06, 0x21, + 0x71, 0x54, 0xe5, 0x41, 0x55, 0x1e, 0x60, 0x74, 0x09, 0x18, 0x9d, 0xa6, 0x2c, 0xcf, 0x42, 0x4b, + 0xc0, 0xec, 0xc0, 0xec, 0xc0, 0xec, 0xc0, 0xec, 0xc0, 0xec, 0xc0, 0xec, 0xc0, 0xec, 0x9b, 0x81, + 0xd9, 0x57, 0xb3, 0xc6, 0xa2, 0x30, 0x4f, 0x89, 0x90, 0x7a, 0x61, 0x5b, 0x06, 0x7c, 0xbe, 0xd2, + 0xdd, 0x0e, 0x73, 0x45, 0xb3, 0x4c, 0x3f, 0x0f, 0x2c, 0x0e, 0x2c, 0x0e, 0x2c, 0x0e, 0x2c, 0x0e, + 0x2c, 0x0e, 0x2c, 0x0e, 0x2c, 0xbe, 0x64, 0x39, 0x90, 0x8a, 0xfa, 0x8f, 0xda, 0x24, 0x83, 0x22, + 0x79, 0x8b, 0x92, 0x46, 0x5a, 0x89, 0x33, 0x7a, 0xbf, 0x21, 0xdc, 0xc4, 0x5a, 0xd7, 0x75, 0x3d, + 0x9e, 0xac, 0xf8, 0x5a, 0x82, 0xb4, 0x16, 0x9a, 0xf7, 0x6c, 0x64, 0xf8, 0x06, 0xbf, 0x8f, 0x57, + 0x67, 0xc7, 0xf3, 0x99, 0x6b, 0x26, 0x58, 0x52, 0xb7, 0x53, 0x56, 0xb2, 0xf3, 0xda, 0xb7, 0x3b, + 0x21, 0x37, 0x38, 0xdb, 0x99, 0xa2, 0x81, 0x75, 0x70, 0x6e, 0x2d, 0xe4, 0x41, 0x64, 0x72, 0x77, + 0x8a, 0x27, 0x52, 0xf6, 0x73, 0x73, 0x34, 0x6b, 0xeb, 0x0d, 0xcd, 0xfa, 0xad, 0xb0, 0x76, 0x35, + 0xd3, 0x8f, 0x56, 0x5e, 0xb0, 0x27, 0x08, 0xe4, 0x47, 0x2b, 0xce, 0x77, 0x4d, 0x3c, 0xbf, 0x36, + 0x8e, 0xcf, 0x82, 0xdf, 0x33, 0xe3, 0xf6, 0xac, 0x78, 0x3d, 0x37, 0x4e, 0xcf, 0x8d, 0xcf, 0xf3, + 0xe0, 0x72, 0xda, 0x7b, 0xba, 0x36, 0xfe, 0x4e, 0x77, 0xeb, 0xd6, 0xf3, 0x1c, 0x66, 0xb8, 0xeb, + 0xec, 0xd7, 0xf4, 0xf0, 0x35, 0x1a, 0xa4, 0x53, 0x58, 0x5b, 0x59, 0x67, 0x3f, 0x2d, 0x64, 0xca, + 0x39, 0xbf, 0x36, 0xc9, 0xa8, 0x45, 0xd6, 0x50, 0xc2, 0xb9, 0x97, 0x29, 0xbb, 0xd2, 0x2d, 0x6e, + 0x79, 0xde, 0xd0, 0x28, 0xd5, 0x55, 0x44, 0xbd, 0xc5, 0x42, 0x33, 0xb0, 0xfd, 0xb5, 0x74, 0x64, + 0x7a, 0xfb, 0xe6, 0x3f, 0x0c, 0xd1, 0x0f, 0xd1, 0x2f, 0x55, 0xf4, 0x87, 0x3c, 0xb0, 0xdd, 0xbb, + 0x2c, 0x92, 0xff, 0x80, 0x74, 0x06, 0x39, 0x5c, 0x26, 0x39, 0x5c, 0x25, 0x39, 0x6c, 0x55, 0x2b, + 0xda, 0xd9, 0xbb, 0x8e, 0x6d, 0x84, 0x05, 0x1b, 0x30, 0xf3, 0x3a, 0x2e, 0xc4, 0xd8, 0x30, 0xd7, + 0x5a, 0x40, 0xd1, 0xa6, 0xce, 0x37, 0xb4, 0x24, 0x8c, 0x86, 0x40, 0x30, 0x37, 0xbe, 0x0b, 0xd6, + 0xfa, 0x1a, 0x65, 0xf6, 0xc1, 0x15, 0xef, 0xde, 0x31, 0x1b, 0x1a, 0x91, 0xc3, 0xd7, 0xba, 0x3d, + 0xb5, 0xf8, 0x14, 0xac, 0xb6, 0x2d, 0x03, 0x28, 0x35, 0x28, 0xb5, 0xcd, 0xe4, 0x33, 0x95, 0xd5, + 0x6a, 0xd6, 0xc8, 0x76, 0xaf, 0xb8, 0xc1, 0x23, 0xe8, 0xb6, 0x3c, 0xba, 0x6d, 0x6e, 0x19, 0x37, + 0x52, 0xc3, 0xd9, 0x43, 0xdb, 0xb5, 0xd8, 0x8f, 0xf5, 0x35, 0xdc, 0xec, 0x83, 0x50, 0x2d, 0x50, + 0x2d, 0x52, 0x55, 0x4b, 0x64, 0xbb, 0x7c, 0xb7, 0x99, 0x41, 0xb3, 0xec, 0xaf, 0xf1, 0x91, 0x6c, + 0xfe, 0xe8, 0x0c, 0x62, 0x3f, 0x8f, 0xff, 0x39, 0xaf, 0xdf, 0x99, 0xcc, 0xf3, 0x99, 0xdf, 0xe3, + 0x99, 0xc1, 0x9d, 0x95, 0xcb, 0xaf, 0x9c, 0x2e, 0x5d, 0xab, 0x79, 0xd8, 0x3a, 0x6c, 0xef, 0x37, + 0x0f, 0xf7, 0xd4, 0x5f, 0xc3, 0x62, 0xd5, 0x11, 0x0c, 0xcc, 0x30, 0x30, 0x97, 0xd3, 0xc0, 0x5c, + 0x75, 0xaa, 0xa0, 0xe9, 0x4b, 0x41, 0x2e, 0xb8, 0xc1, 0x6f, 0xb8, 0xc1, 0xef, 0xd6, 0x6d, 0x23, + 0xc9, 0x80, 0x63, 0x84, 0x7c, 0x26, 0x21, 0xd7, 0x26, 0x04, 0xf3, 0x1f, 0x06, 0x29, 0x00, 0x29, + 0x90, 0x4a, 0x0a, 0xb8, 0x3d, 0x62, 0xdc, 0x36, 0xbf, 0x85, 0x6b, 0x45, 0xae, 0x66, 0x88, 0x58, + 0xad, 0x7d, 0x72, 0x27, 0x30, 0xaf, 0xe6, 0x1a, 0xae, 0x17, 0x32, 0xd3, 0x73, 0xd7, 0xaa, 0xca, + 0x09, 0x66, 0xb1, 0x29, 0xcc, 0x82, 0x2e, 0x52, 0x15, 0x1c, 0x03, 0x1c, 0x03, 0x1c, 0x63, 0x03, + 0x82, 0x58, 0x1c, 0xef, 0xce, 0x36, 0x0d, 0x27, 0x03, 0xf6, 0x9a, 0x7e, 0x10, 0xb8, 0x0b, 0xb8, + 0x4b, 0x2a, 0xee, 0x42, 0xdc, 0x22, 0x44, 0x3e, 0x44, 0x7e, 0x2e, 0x91, 0xef, 0xf9, 0xb7, 0x86, + 0xf9, 0x4d, 0x1f, 0x79, 0x56, 0x16, 0xd2, 0xfd, 0xec, 0xe3, 0x10, 0xff, 0x10, 0xff, 0x52, 0xc5, + 0xff, 0xb3, 0xe3, 0xa7, 0xf3, 0xb8, 0x9d, 0x0c, 0x9a, 0xa0, 0xb5, 0xc6, 0x67, 0x4e, 0xdc, 0x68, + 0xb4, 0xfe, 0x66, 0x5f, 0x7b, 0x57, 0x93, 0x28, 0xcb, 0x4c, 0x8f, 0x63, 0xeb, 0xf1, 0x54, 0xcf, + 0x2f, 0xce, 0x4f, 0xb2, 0x58, 0x53, 0x1b, 0xf1, 0x87, 0x3f, 0x74, 0x8f, 0x7a, 0xa7, 0xbd, 0xeb, + 0x7f, 0xb2, 0x34, 0xd0, 0x8c, 0x1b, 0xb8, 0x3e, 0xb9, 0x3c, 0xeb, 0x9d, 0x77, 0x4f, 0xb3, 0x34, + 0xb0, 0x1b, 0x37, 0xd0, 0xbd, 0xea, 0x1d, 0xdd, 0xf4, 0xff, 0xfa, 0xe7, 0xe6, 0xf4, 0xe2, 0x28, + 0x5b, 0x33, 0xad, 0x67, 0xcd, 0x5c, 0x9e, 0x9c, 0x5d, 0x5c, 0x67, 0x5a, 0x90, 0xbd, 0xb4, 0x9d, + 0xb3, 0xee, 0x51, 0xf6, 0xe1, 0xb4, 0x9f, 0x35, 0x33, 0x1d, 0x8e, 0xd8, 0xd7, 0xd5, 0x5e, 0x2f, + 0xb9, 0xac, 0x19, 0x4e, 0xd0, 0x8b, 0xe9, 0x76, 0xb4, 0x0c, 0x96, 0x80, 0x85, 0xc9, 0x76, 0xb4, + 0x76, 0xd6, 0x56, 0x9e, 0x0e, 0x42, 0x47, 0xdb, 0xcd, 0xd3, 0x48, 0x3a, 0x94, 0x56, 0x86, 0x56, + 0xd2, 0x5b, 0xd1, 0xd1, 0x1a, 0x19, 0x3e, 0x9e, 0xdc, 0xc8, 0x4c, 0xb6, 0x90, 0xa7, 0xeb, 0xd4, + 0xd1, 0x9a, 0x25, 0xc8, 0x46, 0xf1, 0x14, 0xfe, 0xb9, 0xae, 0x98, 0x89, 0xb5, 0xd0, 0xd3, 0xa7, + 0x63, 0x25, 0x24, 0xd1, 0x5d, 0x30, 0x4a, 0xd3, 0x94, 0xac, 0x0f, 0x5c, 0xe6, 0x3e, 0x0b, 0xd4, + 0x02, 0xd4, 0x02, 0xd2, 0x0a, 0xd2, 0x0a, 0xd2, 0xaa, 0x0a, 0x69, 0x1d, 0xf1, 0x0c, 0xef, 0xaa, + 0xe3, 0x0f, 0x41, 0xd4, 0x43, 0xd4, 0x4b, 0x15, 0xf5, 0x91, 0xed, 0xf2, 0x46, 0x3b, 0x83, 0xa4, + 0x6f, 0xc3, 0xa5, 0xfb, 0x12, 0xad, 0xc3, 0xa5, 0xdb, 0xde, 0xdb, 0xdb, 0x85, 0x0f, 0x37, 0xbb, + 0x6e, 0xa1, 0xa3, 0x1e, 0xd3, 0xfc, 0x22, 0x6b, 0xaa, 0xa0, 0xe4, 0x53, 0xd0, 0x41, 0xd0, 0x41, + 0x52, 0x75, 0x90, 0xf0, 0x07, 0xde, 0x24, 0x37, 0x2a, 0x86, 0xbc, 0x7a, 0x38, 0x79, 0x09, 0xb5, + 0xf6, 0xc5, 0x9a, 0xff, 0x30, 0xee, 0x17, 0xee, 0x57, 0x86, 0xfb, 0x75, 0x66, 0xb8, 0x96, 0xc1, + 0xbd, 0xe0, 0x71, 0x75, 0x6b, 0x60, 0x8e, 0x3b, 0xc9, 0xdc, 0x68, 0x34, 0xa5, 0x78, 0x55, 0xf4, + 0x58, 0x24, 0x4e, 0x87, 0x4f, 0xfd, 0xcc, 0xee, 0x86, 0xe3, 0x8b, 0xff, 0x9c, 0x67, 0x76, 0x35, + 0x5c, 0x9f, 0x5c, 0x5d, 0xf7, 0xce, 0x3f, 0x66, 0xf6, 0x31, 0x7c, 0x3a, 0xff, 0xf7, 0x79, 0xc6, + 0xfe, 0xf7, 0x26, 0x83, 0xbf, 0x3c, 0xeb, 0x9e, 0x5f, 0x67, 0x76, 0x2a, 0x9c, 0x5f, 0x5c, 0xdf, + 0xf4, 0x2f, 0x4f, 0xae, 0x4e, 0xb2, 0xb5, 0xb1, 0x1f, 0xb7, 0x71, 0x7a, 0xf1, 0x9f, 0x93, 0xcb, + 0x9b, 0xd3, 0xee, 0x3f, 0x27, 0x97, 0x37, 0xc9, 0x62, 0x96, 0xd5, 0x33, 0x31, 0x5b, 0xac, 0x6c, + 0x2e, 0x89, 0x64, 0x6a, 0x1d, 0xad, 0x99, 0xe1, 0xa3, 0x0b, 0x2b, 0xb4, 0xd6, 0x03, 0xbd, 0xa7, + 0x0b, 0x3d, 0xb7, 0x59, 0xd9, 0x1c, 0x22, 0xb3, 0xe3, 0x9a, 0xcd, 0x13, 0x32, 0x3b, 0xac, 0xd9, + 0x3c, 0x20, 0x9f, 0xfa, 0xb1, 0x34, 0x11, 0xe5, 0x81, 0x80, 0xad, 0x12, 0xb6, 0x4a, 0x95, 0x6d, + 0x95, 0x1b, 0x9e, 0xe2, 0xe1, 0xc2, 0x67, 0x01, 0x32, 0x3c, 0x2c, 0x3d, 0x6e, 0xeb, 0xaf, 0xe2, + 0x46, 0x5a, 0x4a, 0xb8, 0x6f, 0x67, 0xc8, 0x5f, 0x94, 0x7c, 0x4a, 0x64, 0xf2, 0x22, 0xcf, 0xd4, + 0x1f, 0x1c, 0xc3, 0x4d, 0x62, 0x86, 0xc2, 0xce, 0x75, 0xbf, 0x77, 0x7c, 0x53, 0xff, 0xfb, 0xa0, + 0x51, 0xaf, 0x6f, 0x54, 0x46, 0xa3, 0x78, 0x09, 0x36, 0x92, 0x67, 0x26, 0x13, 0x57, 0xce, 0x92, + 0x63, 0x5b, 0xcc, 0xe5, 0x36, 0x7f, 0x0c, 0xd8, 0x30, 0x0b, 0x6b, 0x5c, 0x03, 0x61, 0xd7, 0x7a, + 0xd3, 0xae, 0xde, 0x1b, 0x21, 0xcb, 0x5e, 0xa6, 0x24, 0xb9, 0x57, 0xd7, 0xff, 0xf4, 0x4f, 0xae, + 0xd6, 0xdd, 0xf0, 0xc4, 0xe4, 0x2d, 0x35, 0x6d, 0xfb, 0xb3, 0x31, 0xaf, 0x23, 0x0b, 0x72, 0x30, + 0x27, 0xc2, 0xe1, 0x1e, 0x74, 0x0f, 0x14, 0x1a, 0xee, 0xa1, 0x5a, 0xab, 0x7b, 0xd8, 0x54, 0x68, + 0xb8, 0xdd, 0xf3, 0x7f, 0x94, 0x4b, 0x44, 0x4f, 0x03, 0x35, 0xd6, 0x11, 0xac, 0x4f, 0x50, 0x63, + 0xf5, 0xa8, 0x61, 0x18, 0x8d, 0x61, 0x34, 0x2e, 0xd0, 0x68, 0xac, 0x9c, 0xfa, 0x4f, 0xeb, 0x39, + 0xac, 0x1b, 0x9a, 0x5f, 0x30, 0x04, 0x30, 0x1a, 0xcd, 0x33, 0xdf, 0xbf, 0xfa, 0x6e, 0x73, 0xf3, + 0x5e, 0x05, 0xb1, 0x6f, 0x18, 0x4e, 0x53, 0x91, 0x71, 0xee, 0x29, 0x31, 0x4e, 0x93, 0x33, 0xc7, + 0x0e, 0xcf, 0x18, 0x37, 0x4e, 0x2f, 0x2e, 0xfa, 0x4a, 0x0c, 0xd9, 0x0a, 0x1d, 0x55, 0xc6, 0xd9, + 0x54, 0x66, 0xa0, 0xbe, 0x93, 0xc9, 0x6c, 0x23, 0x7f, 0xb0, 0x43, 0xc7, 0x70, 0xd9, 0x41, 0xbd, + 0xb9, 0xab, 0xd4, 0x68, 0xd5, 0x10, 0x06, 0x4e, 0x74, 0x72, 0xda, 0x57, 0x65, 0xa4, 0xbe, 0xe7, + 0x2a, 0x34, 0xd4, 0xd3, 0x49, 0xde, 0x80, 0x53, 0xdb, 0xfd, 0xa6, 0xd0, 0xa8, 0x2f, 0xdc, 0x48, + 0xa1, 0xd1, 0xf6, 0xef, 0x1f, 0xc3, 0x78, 0x91, 0x3f, 0xb9, 0xb6, 0x22, 0xa3, 0xfe, 0xa8, 0xd4, + 0x1a, 0x7f, 0x54, 0x70, 0x8d, 0x03, 0xc3, 0x57, 0x63, 0x9c, 0xa6, 0xcb, 0xb8, 0x3a, 0x23, 0xed, + 0xab, 0x02, 0x17, 0xc2, 0x47, 0xd7, 0x54, 0x62, 0xa0, 0x7c, 0xa4, 0xc8, 0x30, 0x8f, 0x7f, 0xd8, + 0x8a, 0x8c, 0xf4, 0x43, 0xe4, 0xaa, 0x32, 0xd4, 0xde, 0xc8, 0x50, 0x64, 0xa4, 0x53, 0x20, 0xa3, + 0xc8, 0x68, 0x2f, 0x0d, 0xcb, 0xf6, 0x14, 0x19, 0xeb, 0x55, 0x74, 0x9b, 0xfa, 0xd6, 0x15, 0x19, + 0xf2, 0x67, 0xd3, 0x3e, 0x71, 0xad, 0x3e, 0x57, 0x65, 0xb8, 0x76, 0xc0, 0x23, 0x65, 0xce, 0xee, + 0xad, 0xe7, 0x5a, 0x4a, 0x0c, 0xf5, 0xc1, 0x36, 0xed, 0x0b, 0x9f, 0xc7, 0x62, 0xe1, 0x84, 0xdf, + 0xb3, 0x40, 0x85, 0x41, 0xdf, 0x1a, 0xa1, 0x6d, 0xf6, 0xae, 0x8e, 0xcf, 0x95, 0x18, 0xec, 0x9d, + 0xef, 0x7b, 0x8e, 0x6d, 0x3e, 0x1a, 0x66, 0x52, 0x28, 0xd8, 0x76, 0xef, 0x94, 0x18, 0xb6, 0xcd, + 0x95, 0x00, 0x89, 0xb7, 0x81, 0x6d, 0xdd, 0x29, 0x21, 0x72, 0x6f, 0x43, 0x25, 0xc0, 0xac, 0x69, + 0xdc, 0x3a, 0xec, 0xd8, 0xfb, 0xee, 0x86, 0x3c, 0x60, 0xc6, 0xe8, 0x72, 0xd8, 0xf7, 0x02, 0xae, + 0xc6, 0xc0, 0xfd, 0xef, 0x86, 0x7f, 0xec, 0xf1, 0x46, 0xe3, 0x7d, 0x18, 0x2a, 0x36, 0xe2, 0x7e, + 0xe0, 0x0d, 0x6d, 0x87, 0xa9, 0x33, 0xea, 0xff, 0x70, 0x7f, 0xaa, 0x91, 0x95, 0x81, 0x69, 0xe6, + 0xad, 0xf3, 0x99, 0x99, 0xdc, 0xb8, 0xe2, 0x86, 0x12, 0x6a, 0xce, 0x34, 0xf9, 0xc9, 0x28, 0x52, + 0x02, 0xf1, 0x98, 0x4c, 0x8d, 0x0b, 0x77, 0x6f, 0xb8, 0x2e, 0x53, 0x63, 0x45, 0xed, 0xd0, 0xf4, + 0x7a, 0x57, 0xa7, 0xeb, 0x85, 0x00, 0x16, 0x38, 0x5e, 0x57, 0x8d, 0x3b, 0xe5, 0x0d, 0x87, 0x4c, + 0x0d, 0x31, 0xeb, 0x8d, 0x7c, 0x2f, 0xb4, 0x39, 0x53, 0xc5, 0xed, 0x60, 0x99, 0x4a, 0x1c, 0x54, + 0xcb, 0x72, 0xff, 0x56, 0xc3, 0xa5, 0x67, 0xd9, 0x77, 0x36, 0x37, 0x9c, 0xbe, 0xf7, 0x9d, 0x05, + 0x8e, 0xed, 0x32, 0x85, 0xc6, 0xfc, 0x9f, 0xc0, 0xf0, 0x7d, 0x16, 0x5c, 0x3c, 0xb0, 0xe0, 0x9e, + 0x19, 0xd6, 0x91, 0x3a, 0x72, 0xd7, 0x72, 0xc2, 0xef, 0x4a, 0x8c, 0xd3, 0x33, 0xc3, 0xa3, 0xe7, + 0x50, 0x5d, 0xa9, 0x61, 0x9f, 0x1d, 0x8d, 0x78, 0xa8, 0xea, 0xd8, 0x0d, 0xd3, 0x31, 0x1e, 0xd5, + 0xb0, 0x95, 0xa4, 0x83, 0x3e, 0xb7, 0x86, 0x8a, 0x8d, 0x57, 0xad, 0xf5, 0xbd, 0x32, 0x39, 0xdb, + 0xdb, 0xb3, 0x1a, 0x1f, 0xbe, 0x5b, 0x17, 0xde, 0xad, 0x92, 0x43, 0xbf, 0x64, 0x5c, 0xd1, 0xa1, + 0x37, 0x8f, 0x43, 0x55, 0x47, 0xfe, 0x49, 0xb9, 0x91, 0x7f, 0xf2, 0x15, 0x94, 0xd9, 0xb3, 0x41, + 0xab, 0x04, 0x45, 0x5e, 0x8e, 0x5d, 0x1d, 0x5b, 0x5c, 0x3c, 0xf4, 0x8b, 0xa1, 0x35, 0x52, 0x4f, + 0xc1, 0xc7, 0xa3, 0x36, 0x94, 0x3a, 0xe1, 0x61, 0x5d, 0x91, 0x61, 0xbe, 0x8f, 0x5c, 0x4b, 0x0d, + 0x13, 0xa7, 0x15, 0x36, 0x14, 0x19, 0xe6, 0x87, 0xe3, 0x53, 0x35, 0x46, 0xaa, 0x44, 0xc8, 0xaf, + 0xa5, 0x46, 0x20, 0x8f, 0xf5, 0x70, 0xdb, 0x0d, 0xed, 0x9e, 0xab, 0xce, 0x58, 0x2f, 0x22, 0xae, + 0xc8, 0x60, 0x2f, 0x4d, 0x53, 0x31, 0xa5, 0x95, 0x8c, 0xf9, 0xcc, 0x30, 0x4f, 0x95, 0xa1, 0xa4, + 0xc9, 0x88, 0x95, 0xd2, 0xb1, 0xf1, 0x88, 0x43, 0xe5, 0xd6, 0x38, 0xbc, 0xb6, 0xd4, 0x08, 0x4d, + 0xb3, 0x1e, 0x6e, 0xaf, 0x2d, 0x25, 0x4e, 0x02, 0x53, 0x02, 0x18, 0x30, 0xd3, 0x53, 0x24, 0x22, + 0x99, 0xa9, 0xf1, 0x10, 0x84, 0xf9, 0x4e, 0xa0, 0x84, 0x87, 0x93, 0x85, 0xa6, 0x22, 0x2b, 0xca, + 0xef, 0x59, 0xe0, 0x32, 0xbe, 0x7b, 0x76, 0x6b, 0x73, 0x95, 0x06, 0x7c, 0x14, 0x8e, 0x0c, 0x53, + 0x89, 0xd8, 0xbe, 0xa1, 0x11, 0x72, 0x55, 0xc6, 0xa9, 0x4c, 0xec, 0x61, 0x3a, 0xd8, 0x0f, 0x7f, + 0xab, 0x32, 0x5c, 0x45, 0xde, 0xdc, 0x0e, 0x4d, 0xdb, 0x57, 0xc5, 0xd7, 0x3d, 0xb4, 0x2c, 0x25, + 0x5e, 0x27, 0x0c, 0xed, 0xdb, 0x80, 0x29, 0x64, 0xf2, 0x1c, 0x06, 0xc7, 0x8e, 0x42, 0x61, 0xe9, + 0xc3, 0xe0, 0x83, 0x17, 0x7c, 0x37, 0x02, 0x35, 0xd4, 0x41, 0x60, 0x8c, 0xd8, 0x25, 0x73, 0x8c, + 0x47, 0xb5, 0x46, 0x9b, 0xbc, 0xab, 0x30, 0x3d, 0xd7, 0x65, 0x26, 0x57, 0x6b, 0xe4, 0x67, 0xfd, + 0x9e, 0x5a, 0x03, 0xbe, 0x62, 0xc1, 0x83, 0xad, 0xc6, 0x03, 0x96, 0x61, 0x30, 0x6c, 0xb4, 0xcf, + 0x86, 0x81, 0x3a, 0x46, 0xe5, 0xbb, 0xfd, 0xfa, 0xae, 0xc1, 0x9b, 0xa3, 0x5b, 0x75, 0x06, 0xdb, + 0x6e, 0x29, 0xa1, 0x8d, 0xef, 0x0e, 0x0f, 0x0f, 0x1a, 0xaa, 0x0c, 0xb4, 0xa9, 0xca, 0x40, 0x95, + 0xb0, 0xd8, 0xdf, 0xa9, 0x42, 0x72, 0xee, 0x86, 0x4a, 0xbc, 0x65, 0xbf, 0xb3, 0xef, 0x8c, 0x5b, + 0x7b, 0xc2, 0x70, 0x14, 0x31, 0x21, 0xdd, 0x29, 0x92, 0x4c, 0xe4, 0x2e, 0xd8, 0xad, 0xef, 0xf6, + 0x8e, 0xaf, 0x95, 0x19, 0xeb, 0xa5, 0x22, 0x63, 0xe5, 0x4a, 0xdc, 0xac, 0xfb, 0xdd, 0xe6, 0xee, + 0x47, 0x83, 0xb3, 0x6f, 0x8c, 0xf9, 0x6a, 0x98, 0x3a, 0xe2, 0x11, 0xf7, 0x03, 0xef, 0x87, 0x12, + 0x7c, 0xe1, 0xde, 0xba, 0x6f, 0x1c, 0x34, 0x9b, 0x6a, 0x0c, 0xd5, 0x31, 0xd5, 0x18, 0xa7, 0x22, + 0x49, 0xd0, 0xee, 0x6d, 0x9f, 0x05, 0x8e, 0xe1, 0xaa, 0x32, 0x58, 0xdf, 0x56, 0x66, 0xa0, 0x4a, + 0x25, 0x35, 0xb8, 0xf7, 0x46, 0xcc, 0x77, 0x0d, 0x35, 0x86, 0x1a, 0xf2, 0xbe, 0xa1, 0x84, 0xdd, + 0xe8, 0x3e, 0x0c, 0xd5, 0x38, 0xaf, 0x8f, 0x3e, 0x0b, 0x14, 0x7a, 0xe1, 0x67, 0x1b, 0xae, 0xa1, + 0xe7, 0xca, 0x3d, 0x9b, 0x36, 0x99, 0x23, 0x07, 0x6d, 0xbe, 0xc9, 0x2c, 0x4c, 0x2a, 0x5f, 0x4e, + 0xda, 0x1c, 0x9b, 0x41, 0x3d, 0x8f, 0x4c, 0xb9, 0x6a, 0x4b, 0x35, 0xfe, 0x3d, 0xa5, 0xc7, 0x9f, + 0x37, 0xb7, 0x6d, 0x89, 0xa6, 0x92, 0xc9, 0xff, 0x56, 0xae, 0xf1, 0x37, 0x95, 0x9f, 0x40, 0xb6, + 0x1c, 0xb9, 0x25, 0x9a, 0x44, 0x8e, 0xdc, 0xb9, 0x25, 0x9c, 0x85, 0xda, 0xc2, 0x29, 0x63, 0xae, + 0xdd, 0x72, 0xcd, 0x20, 0x93, 0xd9, 0xac, 0x74, 0x53, 0xc8, 0x95, 0x9b, 0xb7, 0x74, 0xb3, 0xc9, + 0x94, 0x4f, 0xb6, 0x74, 0xb3, 0xc8, 0x95, 0x67, 0xb6, 0x54, 0xb3, 0xf9, 0x58, 0x89, 0x3d, 0xf9, + 0x58, 0xa1, 0x3d, 0xc9, 0x94, 0x13, 0xb8, 0x4c, 0xe3, 0xcf, 0x96, 0x2b, 0xb8, 0x6c, 0x33, 0xe8, + 0xab, 0x0e, 0xa7, 0xb2, 0xe5, 0x16, 0x2e, 0xd1, 0x04, 0xb2, 0x3c, 0x55, 0x2a, 0xd5, 0xf0, 0x33, + 0xe5, 0x22, 0x2e, 0xd5, 0x0c, 0xb2, 0xe5, 0x28, 0x2e, 0xd5, 0x14, 0x32, 0xe5, 0x2e, 0x2e, 0xd5, + 0x0c, 0x32, 0xe7, 0x34, 0x2e, 0xd5, 0x2c, 0x32, 0x26, 0xd1, 0x2b, 0xd5, 0x1c, 0xf2, 0xe5, 0x40, + 0x2e, 0xd5, 0x54, 0xb2, 0xe7, 0x46, 0x2e, 0xd7, 0x34, 0xb2, 0xe6, 0x4c, 0x2e, 0xd5, 0x2c, 0xb2, + 0xe5, 0x52, 0x2e, 0xd1, 0x14, 0xf2, 0xe7, 0x58, 0x2e, 0xcf, 0x64, 0x72, 0xe4, 0x5e, 0x2e, 0xd1, + 0x24, 0x28, 0x72, 0x32, 0x97, 0x68, 0x3a, 0x99, 0x72, 0x35, 0x97, 0x68, 0xfc, 0x19, 0x73, 0x38, + 0x97, 0x68, 0x06, 0xa1, 0xd2, 0x64, 0x82, 0x28, 0xe7, 0x73, 0x99, 0x26, 0x94, 0x2f, 0x17, 0x74, + 0x29, 0x67, 0x92, 0x39, 0x47, 0x74, 0xd9, 0x66, 0x93, 0x3b, 0x77, 0x74, 0x89, 0x26, 0x94, 0x2b, + 0xa7, 0x74, 0x89, 0xe6, 0x91, 0x35, 0xd7, 0x74, 0x89, 0xa6, 0xc0, 0xd4, 0xbe, 0xe8, 0x59, 0x23, + 0x57, 0x4a, 0x34, 0x85, 0x5c, 0x39, 0xab, 0x4b, 0x34, 0x0f, 0x57, 0xed, 0xbb, 0x9c, 0x31, 0xc7, + 0x75, 0x99, 0x66, 0x90, 0x2b, 0xf7, 0x75, 0x79, 0x26, 0x92, 0x29, 0x27, 0x76, 0x89, 0x86, 0x9f, + 0x31, 0x57, 0x76, 0x89, 0x66, 0x90, 0x3b, 0x87, 0x76, 0xe9, 0xe6, 0x42, 0x95, 0x5b, 0xbb, 0x44, + 0x13, 0xcb, 0x94, 0x73, 0xbb, 0x44, 0xe3, 0xa7, 0xc8, 0xc5, 0x5d, 0xc2, 0xe9, 0xe4, 0xce, 0xd1, + 0x5d, 0xc6, 0x39, 0x65, 0xce, 0xdd, 0x5d, 0xc2, 0xc9, 0x64, 0xca, 0xe9, 0x5d, 0xca, 0x79, 0x54, + 0x63, 0x3f, 0xf2, 0xe6, 0x00, 0x2f, 0xf1, 0x94, 0xb2, 0xe6, 0x06, 0x2f, 0xef, 0x94, 0xb2, 0xe6, + 0x0c, 0x2f, 0xf1, 0x8c, 0x3e, 0x55, 0x66, 0x46, 0xd9, 0xb3, 0x43, 0x96, 0x78, 0x32, 0x55, 0x80, + 0x6a, 0x54, 0x39, 0xc9, 0xcb, 0x35, 0xa5, 0xbc, 0xb9, 0xca, 0xcb, 0x37, 0x1b, 0xa3, 0x12, 0x37, + 0x28, 0x4b, 0x6e, 0xf3, 0x52, 0x0d, 0x3f, 0x6b, 0x7a, 0x9a, 0x32, 0x4d, 0xa2, 0xa1, 0xf8, 0xf0, + 0x33, 0xe5, 0x48, 0x2f, 0xd3, 0x0c, 0x94, 0x7e, 0xf2, 0x61, 0xa9, 0x1d, 0xa8, 0x98, 0x3d, 0xd7, + 0x7a, 0xd9, 0xe6, 0x90, 0x29, 0x07, 0x7b, 0xa9, 0x26, 0x91, 0x33, 0x37, 0x7b, 0xd9, 0xe6, 0x92, + 0x3d, 0x9f, 0x78, 0xd9, 0x66, 0x52, 0x09, 0xac, 0x91, 0x33, 0xc7, 0x7b, 0xd9, 0x66, 0x92, 0x2d, + 0xf7, 0x7b, 0xa9, 0x66, 0x91, 0x29, 0x27, 0x7c, 0x79, 0x66, 0xc0, 0x94, 0x06, 0x4e, 0x59, 0x73, + 0xc8, 0x97, 0x68, 0x06, 0x6a, 0x3f, 0x70, 0xcc, 0x98, 0x73, 0xbe, 0x44, 0x13, 0xc8, 0x96, 0x8b, + 0xbe, 0x44, 0x13, 0xc8, 0x97, 0xa3, 0xbe, 0x7c, 0x13, 0xc9, 0x9a, 0xbb, 0xbe, 0x3c, 0x33, 0xc9, + 0x96, 0xee, 0xb1, 0x5c, 0xe3, 0x57, 0x3e, 0x06, 0x3c, 0x57, 0x0e, 0xfc, 0x72, 0x4d, 0x43, 0xf1, + 0xdc, 0x1c, 0xd9, 0x73, 0xe6, 0x97, 0x68, 0x0e, 0x99, 0x72, 0xe9, 0x97, 0x68, 0xfc, 0xb9, 0x72, + 0xec, 0x97, 0x68, 0x1e, 0x79, 0x72, 0xef, 0x97, 0x69, 0x1a, 0x99, 0x73, 0xf2, 0x97, 0x69, 0x12, + 0xd9, 0x73, 0xf5, 0x97, 0x71, 0x16, 0xf9, 0x72, 0xf8, 0x97, 0x71, 0x46, 0x99, 0x72, 0xfb, 0x97, + 0x71, 0x22, 0x99, 0x73, 0xfe, 0x97, 0x69, 0x32, 0xf9, 0x6a, 0x01, 0x94, 0x67, 0x26, 0x39, 0x6a, + 0x04, 0x94, 0x6d, 0x12, 0x99, 0x6a, 0x07, 0x94, 0x68, 0x12, 0xd9, 0x6a, 0x0a, 0x94, 0x6b, 0x02, + 0x4d, 0xd5, 0x27, 0xa0, 0xb4, 0xe7, 0xeb, 0x4e, 0x75, 0xb2, 0x9a, 0xa9, 0x66, 0x41, 0x89, 0x86, + 0x9f, 0xb7, 0x96, 0x41, 0x89, 0xa6, 0xa2, 0x78, 0xb2, 0xb6, 0xec, 0xb5, 0x0f, 0x4a, 0x36, 0x87, + 0x4b, 0xc5, 0xe7, 0xc0, 0x95, 0xbe, 0xd1, 0x79, 0x6b, 0x28, 0x94, 0x6b, 0x26, 0x19, 0x6b, 0x2b, + 0x94, 0x68, 0x12, 0x59, 0x6b, 0x2e, 0x94, 0x69, 0x0a, 0x8e, 0xa9, 0xf6, 0xf8, 0x15, 0x4f, 0xce, + 0x9b, 0xa3, 0x76, 0x43, 0xa9, 0x26, 0xe1, 0xdb, 0xca, 0x4f, 0xa0, 0x12, 0xc9, 0x9b, 0x32, 0xd7, + 0x80, 0x28, 0xd3, 0x14, 0x32, 0xd6, 0x86, 0x28, 0xd1, 0x14, 0x32, 0xd5, 0x8c, 0x28, 0xd1, 0xf8, + 0x73, 0xd5, 0x92, 0x28, 0xcf, 0x3c, 0xec, 0xdb, 0xd1, 0xee, 0x7e, 0xdd, 0x37, 0x82, 0xa3, 0x7b, + 0xb5, 0x9f, 0xe4, 0xdb, 0x8a, 0x3b, 0xea, 0x6c, 0xc6, 0x58, 0x63, 0xf7, 0xb0, 0xa5, 0xfa, 0x1c, + 0x0e, 0xea, 0xcd, 0x46, 0xa3, 0x0a, 0x93, 0x68, 0x56, 0x61, 0x12, 0x7b, 0x95, 0x38, 0x4f, 0xed, + 0xff, 0x9c, 0x75, 0xcf, 0x2b, 0x30, 0x91, 0x5d, 0xc3, 0x3a, 0x35, 0x94, 0x4e, 0x24, 0x67, 0x0f, + 0xf5, 0xbb, 0x50, 0x6d, 0x3d, 0x31, 0xec, 0x7f, 0xbf, 0x7e, 0xf4, 0x99, 0xda, 0x73, 0xf8, 0x3c, + 0xb4, 0x95, 0x9f, 0x84, 0xe2, 0x39, 0x80, 0xec, 0x91, 0xd2, 0x06, 0x63, 0xdb, 0x1d, 0xda, 0xae, + 0x7d, 0x6b, 0xa8, 0x9d, 0x39, 0x35, 0xa9, 0x8e, 0xe6, 0x30, 0xe3, 0x41, 0xed, 0xab, 0xe0, 0xab, + 0x3d, 0xfa, 0x0a, 0xc4, 0xd3, 0xd8, 0xfe, 0xc5, 0x03, 0x0b, 0xba, 0x6a, 0x3f, 0x45, 0x9b, 0x4c, + 0xe2, 0x48, 0x71, 0x8b, 0xe5, 0x74, 0x16, 0x8e, 0xf1, 0x5d, 0xed, 0x59, 0xa8, 0x5f, 0xe3, 0xd0, + 0x0e, 0x2d, 0x57, 0xf5, 0xf1, 0x87, 0xaa, 0x4f, 0x20, 0x52, 0x7b, 0x02, 0xde, 0xc1, 0x41, 0xbd, + 0xd9, 0x74, 0x14, 0x17, 0x49, 0x93, 0x69, 0xec, 0xaa, 0xff, 0x3c, 0x62, 0x3a, 0x93, 0xd6, 0xb5, + 0xf7, 0x8d, 0xb9, 0xef, 0xa3, 0xb0, 0x02, 0x73, 0xd9, 0x3b, 0xba, 0xfc, 0xd0, 0xef, 0xb9, 0xbc, + 0x0a, 0x53, 0x39, 0xe6, 0x41, 0x15, 0xa6, 0xf1, 0xc1, 0xbe, 0x65, 0x95, 0x98, 0x48, 0x72, 0x4d, + 0x2e, 0x15, 0xcf, 0xfe, 0x3f, 0x9d, 0x4c, 0xfb, 0x4c, 0x71, 0xc2, 0x1d, 0x46, 0x4a, 0xf3, 0x24, + 0xa7, 0xa9, 0x7a, 0xda, 0x63, 0x67, 0xd7, 0xf6, 0xab, 0x30, 0x87, 0x1f, 0xca, 0x4f, 0xc2, 0xf0, + 0x6f, 0x15, 0x1f, 0xbf, 0xa5, 0xf8, 0xf8, 0x95, 0xce, 0xab, 0xe9, 0xd8, 0x2e, 0xbb, 0x0b, 0x3c, + 0xc5, 0xe5, 0xe9, 0x48, 0xed, 0xe1, 0x7b, 0xa6, 0xe1, 0x5c, 0x1b, 0x8e, 0xd2, 0x8f, 0x20, 0x46, + 0x86, 0x79, 0xc5, 0xcc, 0x23, 0xcf, 0xe5, 0x81, 0xe7, 0x38, 0xcc, 0xea, 0x7d, 0x50, 0x7f, 0x36, + 0x9f, 0x5c, 0xb3, 0x2a, 0xf3, 0x61, 0x96, 0x6d, 0x9c, 0x19, 0xb6, 0x73, 0xf1, 0xc0, 0x82, 0x9e, + 0xd2, 0xb7, 0x65, 0x34, 0xbc, 0xb2, 0xef, 0x54, 0x7f, 0xc8, 0x3c, 0xb2, 0xbd, 0x1f, 0x6a, 0x67, + 0xcb, 0x1f, 0x79, 0xa6, 0xf1, 0x99, 0x05, 0xa1, 0xed, 0xb9, 0x0d, 0xb5, 0xe7, 0x61, 0x31, 0xa5, + 0x4d, 0xfd, 0x23, 0xdf, 0x54, 0x7b, 0xf8, 0xec, 0xee, 0x3a, 0x30, 0xdc, 0xd0, 0x57, 0x3c, 0x37, + 0xec, 0xc8, 0x77, 0x42, 0xd5, 0xc7, 0x7f, 0x1d, 0xa9, 0x1e, 0xc5, 0x38, 0x0a, 0x15, 0x8f, 0xfe, + 0x1b, 0x3d, 0xa8, 0x3d, 0xfc, 0xc7, 0xc0, 0x56, 0xfc, 0x01, 0x9d, 0x3b, 0x34, 0x94, 0xbe, 0xc8, + 0x6e, 0xa8, 0x76, 0x14, 0x81, 0x37, 0x29, 0x7f, 0x5b, 0x81, 0x34, 0x29, 0xcf, 0x67, 0xf2, 0x51, + 0x75, 0x9a, 0x3d, 0x9d, 0x4e, 0x25, 0xb4, 0xb5, 0xa7, 0x7a, 0x62, 0x2d, 0x8f, 0xbb, 0x17, 0x56, + 0xa4, 0xfa, 0x0c, 0xb8, 0xd2, 0x33, 0xf0, 0x8d, 0x40, 0xe9, 0xd7, 0x43, 0xbe, 0xe5, 0x26, 0x2f, + 0xde, 0x4f, 0x3d, 0xcf, 0x6f, 0x54, 0x65, 0x22, 0x4a, 0x47, 0xeb, 0xfb, 0x6a, 0xab, 0x6e, 0x5f, + 0xed, 0xe0, 0x0e, 0xdf, 0x73, 0x1b, 0x7b, 0x7b, 0x8a, 0xcf, 0xa0, 0xad, 0xf6, 0x2b, 0x6b, 0xdf, + 0x53, 0x1a, 0x7c, 0xfb, 0xbe, 0xaf, 0xf8, 0xf0, 0xcf, 0x22, 0x87, 0xdb, 0x8e, 0xed, 0x7e, 0x53, + 0x3f, 0x45, 0x96, 0x1f, 0xd8, 0x23, 0x23, 0x78, 0xec, 0x5d, 0x1d, 0x9f, 0xab, 0x3d, 0x0d, 0xcf, + 0x57, 0x3c, 0x1e, 0x39, 0x9e, 0xc2, 0xfb, 0xff, 0x74, 0xfd, 0xe6, 0x99, 0xaf, 0xfa, 0x34, 0x8e, + 0x5c, 0xb5, 0xed, 0x7c, 0xf1, 0x1c, 0x8e, 0x3d, 0x33, 0xfc, 0x8f, 0x1d, 0x30, 0x87, 0x85, 0x15, + 0x29, 0xda, 0xf9, 0x72, 0x56, 0x55, 0xa8, 0xdd, 0xf9, 0x72, 0x4e, 0x55, 0x28, 0x9d, 0x11, 0xcf, + 0x29, 0xd1, 0x30, 0xbe, 0xc3, 0x7e, 0x78, 0xca, 0x6f, 0x4f, 0xdf, 0xb3, 0x5d, 0x7e, 0xed, 0x25, + 0xff, 0xbb, 0x62, 0x81, 0x6d, 0x38, 0xaa, 0xcf, 0xe8, 0xb3, 0x1d, 0xf0, 0x48, 0xfd, 0x69, 0xcc, + 0xee, 0x4c, 0xbf, 0xd9, 0x57, 0x7c, 0x2a, 0x9c, 0x79, 0x6e, 0xa3, 0xae, 0x7a, 0x59, 0x81, 0xe9, + 0x44, 0x0e, 0xd4, 0x9f, 0x88, 0xda, 0x40, 0xec, 0x7f, 0x9b, 0x87, 0xbb, 0x4a, 0x9b, 0x7a, 0xfe, + 0x57, 0x6d, 0xfd, 0xf7, 0xbf, 0x8a, 0xbf, 0x7f, 0x09, 0x0c, 0xcb, 0xf6, 0xce, 0xba, 0x47, 0x8a, + 0xcf, 0x41, 0x6d, 0x1f, 0x71, 0xc0, 0x0c, 0xf3, 0xfe, 0xf8, 0xea, 0x54, 0xed, 0x39, 0xdc, 0x45, + 0x8e, 0x11, 0xa8, 0x9e, 0x14, 0x30, 0x18, 0x9a, 0x8d, 0x96, 0xda, 0xb9, 0x87, 0x83, 0xa1, 0x79, + 0xb0, 0xbf, 0xaf, 0x78, 0x38, 0x5a, 0xe0, 0x2b, 0xcd, 0x25, 0x82, 0xb0, 0xb9, 0xab, 0xf6, 0x3d, + 0x08, 0x03, 0xa5, 0xdf, 0x21, 0x84, 0x96, 0x69, 0xab, 0x3d, 0x7e, 0xb5, 0x71, 0x85, 0xea, 0x61, + 0x5b, 0xe1, 0xbd, 0xea, 0x13, 0x50, 0xdb, 0xf3, 0x18, 0xda, 0xfe, 0x95, 0x7d, 0xa7, 0xf8, 0x0c, + 0xae, 0x15, 0x9f, 0xc0, 0x8f, 0x6b, 0xef, 0x83, 0x17, 0x29, 0xad, 0x88, 0x43, 0x47, 0xf1, 0x7b, + 0x30, 0xb2, 0xc2, 0xe3, 0x1f, 0xb6, 0xea, 0x53, 0xe8, 0x99, 0x8a, 0x6f, 0x83, 0x37, 0xe4, 0xdf, + 0x8d, 0x80, 0x9d, 0x7a, 0x9e, 0x7f, 0x6b, 0x98, 0xdf, 0xd4, 0x9e, 0x8b, 0xe2, 0x01, 0xbd, 0xc9, + 0x04, 0x2e, 0x1e, 0x58, 0x70, 0xcf, 0x0c, 0xab, 0x02, 0x61, 0xa5, 0xc9, 0x7c, 0xfa, 0x06, 0xbf, + 0x57, 0x7e, 0x12, 0x9f, 0x95, 0xae, 0x90, 0x11, 0x06, 0x6a, 0xcb, 0xa8, 0x70, 0xbf, 0x02, 0x2f, + 0xe9, 0x42, 0x6e, 0x98, 0xdf, 0xae, 0xbd, 0x2b, 0xae, 0xba, 0x94, 0xe5, 0x46, 0x70, 0xaa, 0x76, + 0x2e, 0x02, 0xae, 0x38, 0x07, 0xe5, 0x4c, 0xf5, 0xcb, 0xc0, 0x59, 0x30, 0x52, 0xbc, 0x1c, 0x00, + 0x0f, 0xea, 0xf5, 0x03, 0xb5, 0x27, 0x60, 0xb8, 0xa1, 0xff, 0x97, 0xea, 0x77, 0x41, 0xf9, 0x97, + 0x80, 0x91, 0xc3, 0xd5, 0x8e, 0xce, 0x8f, 0x42, 0xa5, 0x2d, 0xaa, 0x0f, 0x6a, 0x27, 0xff, 0x7f, + 0xd8, 0xdd, 0x53, 0x7b, 0xf8, 0x6d, 0xb5, 0x87, 0xbf, 0xaf, 0xf4, 0xf0, 0x15, 0x37, 0x06, 0x3f, + 0xa8, 0x5e, 0x2a, 0xec, 0x61, 0x12, 0xc5, 0xd6, 0xf3, 0xbb, 0x96, 0x15, 0xb0, 0x30, 0xac, 0xc0, + 0x5c, 0xd4, 0x36, 0x0e, 0x3f, 0x8c, 0xbe, 0x1b, 0x01, 0x3b, 0xb7, 0xcd, 0x6b, 0xc5, 0x03, 0x58, + 0x27, 0x13, 0x99, 0x46, 0x49, 0x9e, 0xdb, 0x4a, 0x83, 0xbc, 0x07, 0xcf, 0x36, 0xd9, 0x71, 0xef, + 0x58, 0xf9, 0x39, 0x9c, 0xbc, 0xbf, 0x52, 0x7f, 0x0e, 0x67, 0x15, 0x98, 0xc2, 0x87, 0x8f, 0x15, + 0x38, 0x4c, 0xae, 0x69, 0xf8, 0xca, 0xcf, 0xe2, 0xc3, 0xc7, 0xe3, 0x93, 0xee, 0x79, 0xb7, 0x0a, + 0xf3, 0xb8, 0x50, 0xff, 0x72, 0x7f, 0xf8, 0xfb, 0xa2, 0x02, 0x73, 0x50, 0x7f, 0x1f, 0x2a, 0x50, + 0xda, 0x23, 0x9d, 0xc7, 0x91, 0x71, 0xab, 0xf6, 0xf3, 0xcc, 0x74, 0x26, 0x1f, 0x02, 0x63, 0xc4, + 0x2e, 0x99, 0x63, 0x3c, 0x56, 0x62, 0x3a, 0x6a, 0xe7, 0x57, 0xfc, 0xfe, 0xdd, 0x70, 0xfb, 0x7d, + 0xf5, 0x67, 0xa0, 0x34, 0x7f, 0xfd, 0xd1, 0x6c, 0xec, 0xaa, 0x3d, 0xfe, 0xbd, 0xfb, 0xc8, 0xe5, + 0xca, 0xa7, 0x3c, 0xfa, 0xd1, 0xdc, 0x1b, 0x39, 0xaa, 0xcf, 0xc0, 0x57, 0x5b, 0x4d, 0xfc, 0x38, + 0x68, 0x9f, 0x1a, 0xbe, 0xd2, 0x26, 0x9c, 0x1f, 0xb7, 0xde, 0x8f, 0xd9, 0x8b, 0xc4, 0x1c, 0xf3, + 0xc8, 0xf4, 0xc9, 0xc1, 0x1b, 0x09, 0xeb, 0x95, 0x6d, 0x9d, 0xa8, 0x6a, 0x4f, 0x17, 0x30, 0xe0, + 0x4c, 0x06, 0xde, 0x02, 0xc6, 0x99, 0xb9, 0x96, 0x74, 0x31, 0x63, 0xcd, 0x58, 0x33, 0xba, 0xb8, + 0xc1, 0x36, 0x55, 0x1a, 0xec, 0x9e, 0x52, 0xe7, 0x20, 0x63, 0xad, 0xe7, 0xc2, 0x06, 0x9c, 0xb5, + 0xa6, 0x73, 0x01, 0x03, 0xce, 0x58, 0xbb, 0xb9, 0x88, 0x91, 0x66, 0xad, 0xd1, 0x5c, 0xc4, 0x58, + 0x33, 0xd7, 0x62, 0x2e, 0x60, 0xb0, 0x8e, 0x22, 0x8a, 0x36, 0x4b, 0x6d, 0xe5, 0x02, 0x86, 0x99, + 0xa3, 0x86, 0x72, 0x11, 0xa3, 0xcd, 0x5e, 0x2b, 0xb9, 0x80, 0xd1, 0xfa, 0x6a, 0x8c, 0x32, 0x73, + 0xed, 0xe3, 0x22, 0x06, 0x9b, 0xd9, 0x10, 0x5a, 0xd4, 0x60, 0xb3, 0xd5, 0x32, 0x2e, 0x6c, 0xb4, + 0x99, 0x6a, 0x16, 0x17, 0x31, 0xda, 0xac, 0xb5, 0x89, 0x0b, 0x18, 0x6b, 0xa6, 0x1a, 0xc4, 0xc5, + 0x8c, 0x33, 0x54, 0x65, 0xa0, 0x91, 0x1a, 0x03, 0xcd, 0x51, 0x3b, 0xb8, 0xb0, 0xe1, 0x66, 0xae, + 0x11, 0x5c, 0xd8, 0x88, 0x73, 0xd4, 0x02, 0x2e, 0x6c, 0xcc, 0xd9, 0x6b, 0xfe, 0x16, 0x37, 0xe4, + 0x4c, 0xb5, 0x7d, 0x8b, 0x1b, 0x6e, 0xc6, 0x1a, 0xbe, 0xc5, 0x0d, 0x38, 0x47, 0xad, 0xde, 0xc2, + 0x06, 0x9d, 0xad, 0x26, 0x6f, 0x11, 0xc3, 0x8d, 0x94, 0xc0, 0xe3, 0x59, 0x6b, 0xec, 0x16, 0x30, + 0xd2, 0xcc, 0xb5, 0x74, 0x8b, 0x19, 0xeb, 0x0f, 0x65, 0x06, 0x9b, 0xa9, 0x36, 0x6e, 0x21, 0xe3, + 0xb4, 0x14, 0x19, 0xe7, 0x50, 0x89, 0x71, 0x66, 0xaf, 0x69, 0x5b, 0xc0, 0x60, 0x47, 0x6a, 0x0c, + 0x33, 0x7b, 0x8d, 0x5a, 0xf9, 0x83, 0xa5, 0xa8, 0x45, 0x5b, 0xd4, 0xa8, 0xf3, 0xd6, 0x9c, 0x2d, + 0x60, 0xdc, 0x79, 0x6b, 0xcb, 0x16, 0x30, 0xe4, 0xec, 0x35, 0x64, 0x0b, 0x18, 0x6c, 0xc6, 0x5a, + 0xb1, 0x05, 0x8c, 0x34, 0x57, 0x4d, 0xd8, 0x22, 0xc6, 0x9b, 0xa9, 0xf6, 0x6b, 0x01, 0x03, 0xf5, + 0x4d, 0x35, 0x86, 0x99, 0xab, 0x96, 0x6b, 0x11, 0x03, 0x76, 0x42, 0x55, 0xc6, 0x99, 0xb5, 0x36, + 0x6b, 0x01, 0xa3, 0x0d, 0x15, 0x89, 0x8e, 0xc9, 0x54, 0x6b, 0xb5, 0x80, 0x61, 0x66, 0xad, 0xa9, + 0x2a, 0x7f, 0xa8, 0xd9, 0x6a, 0xa7, 0x16, 0x30, 0xce, 0x50, 0x0d, 0xaf, 0x62, 0xde, 0x5a, 0xa8, + 0x45, 0x8f, 0xf8, 0xa3, 0x2a, 0x34, 0x2c, 0x7f, 0x6d, 0xd3, 0x02, 0xc6, 0x9c, 0xad, 0x86, 0x69, + 0x11, 0x03, 0xcd, 0x56, 0xab, 0xb4, 0x98, 0x91, 0x72, 0x25, 0x46, 0x9a, 0xad, 0xf6, 0x68, 0x01, + 0xe3, 0xcc, 0x57, 0x63, 0xb4, 0xd8, 0x01, 0x2b, 0x11, 0xdd, 0xe9, 0xab, 0xa1, 0xca, 0x7c, 0x35, + 0x9c, 0xb7, 0x59, 0x6b, 0x80, 0x16, 0x32, 0xd2, 0x4c, 0xb5, 0x3e, 0x8b, 0x18, 0xa9, 0x12, 0xa0, + 0x30, 0x53, 0xed, 0xce, 0x42, 0x86, 0x99, 0xbb, 0x46, 0x67, 0x01, 0xa3, 0xce, 0x53, 0x8b, 0xb3, + 0x88, 0xe1, 0x66, 0xac, 0xb9, 0x59, 0xcc, 0x50, 0x33, 0xd7, 0xd6, 0x2c, 0x66, 0xb8, 0xd9, 0x6a, + 0x68, 0x16, 0x33, 0x56, 0xaa, 0x5a, 0x99, 0xc5, 0x8f, 0x3e, 0x7b, 0x4d, 0xcc, 0xe2, 0xc7, 0x9e, + 0xbd, 0xf6, 0x65, 0x31, 0x63, 0xcf, 0x55, 0xe3, 0xb2, 0x98, 0x21, 0x53, 0xd4, 0xb2, 0x2c, 0x66, + 0xe4, 0x99, 0x6b, 0x56, 0x16, 0x33, 0xdc, 0x5c, 0xb5, 0x29, 0x0b, 0x19, 0x72, 0x9e, 0x1a, 0x94, + 0x85, 0x0d, 0xf8, 0x40, 0x9d, 0x01, 0xab, 0x01, 0x34, 0x32, 0xd6, 0x8e, 0x2c, 0x60, 0xa0, 0x6a, + 0xe8, 0x89, 0xff, 0x55, 0x24, 0x9e, 0x39, 0x7b, 0xcd, 0xc7, 0x42, 0xc6, 0xaa, 0x86, 0xef, 0x29, + 0x7b, 0x0d, 0xc7, 0x22, 0xc6, 0x9a, 0xa3, 0x56, 0x63, 0x01, 0xc3, 0xcd, 0x5a, 0x93, 0xb1, 0x90, + 0xa1, 0x66, 0xad, 0xbd, 0x58, 0xc0, 0x60, 0x7d, 0x25, 0xb0, 0x6c, 0xc6, 0x5a, 0x8a, 0x45, 0x0c, + 0x34, 0x50, 0x22, 0x3e, 0x35, 0x5b, 0x6d, 0xc4, 0x22, 0xc6, 0xa9, 0x86, 0x3e, 0x55, 0x25, 0x3c, + 0x22, 0x63, 0x4d, 0xc3, 0x02, 0x06, 0xaa, 0x86, 0x07, 0x24, 0x6b, 0x8d, 0xc2, 0x42, 0x46, 0x7a, + 0xad, 0xc8, 0x40, 0x33, 0xd7, 0x1c, 0x2c, 0x60, 0xb0, 0x8e, 0x22, 0xe7, 0x34, 0x6b, 0x0d, 0xc1, + 0x62, 0x86, 0x9a, 0xad, 0x56, 0x60, 0x01, 0x63, 0xcd, 0x5d, 0x13, 0xb0, 0x88, 0x31, 0x2b, 0x12, + 0x78, 0x46, 0x53, 0xe3, 0xaf, 0xa0, 0x71, 0x67, 0xab, 0xe5, 0x57, 0xd0, 0x60, 0xb3, 0xd4, 0xec, + 0x2b, 0x60, 0xa8, 0x81, 0x1a, 0x32, 0x21, 0x47, 0x0d, 0xbe, 0x02, 0x46, 0x9b, 0xab, 0xd6, 0x5e, + 0x21, 0xe3, 0xcd, 0x56, 0x53, 0x4f, 0xfe, 0x50, 0xb9, 0x22, 0xdc, 0x25, 0x6b, 0x8d, 0xbc, 0x22, + 0x46, 0x9a, 0xb1, 0x16, 0x5e, 0x01, 0x43, 0xcd, 0x56, 0xf3, 0xae, 0x88, 0x81, 0x66, 0xaf, 0x6d, + 0x57, 0xc0, 0x68, 0x95, 0x79, 0x31, 0x91, 0xb1, 0x56, 0x5d, 0x01, 0x03, 0x0d, 0x95, 0xb0, 0x58, + 0x3d, 0xa8, 0x91, 0x44, 0x34, 0x53, 0x8d, 0xb9, 0x22, 0x86, 0xd9, 0x56, 0x63, 0x98, 0xfb, 0x4a, + 0x0c, 0x53, 0x11, 0xa3, 0x5a, 0xc6, 0x1a, 0x70, 0x05, 0x0c, 0x34, 0x77, 0xad, 0xb7, 0xc2, 0xc6, + 0xac, 0x86, 0x91, 0x2d, 0x67, 0xed, 0xb6, 0xa2, 0x06, 0x9c, 0xa7, 0x46, 0x5b, 0x01, 0x63, 0xce, + 0x5c, 0x8b, 0xad, 0xa0, 0xb1, 0x66, 0xaa, 0xb9, 0x56, 0xd4, 0x58, 0xcf, 0x14, 0x1a, 0x6a, 0xa6, + 0x1a, 0x6a, 0x45, 0x8d, 0x36, 0x5b, 0xad, 0xb4, 0x82, 0x46, 0x9b, 0xb9, 0x26, 0x5a, 0x71, 0xe3, + 0xbd, 0x50, 0xe7, 0x92, 0x65, 0xaa, 0x71, 0x56, 0xd8, 0x58, 0xd5, 0x59, 0x57, 0x85, 0x52, 0xf5, + 0xe6, 0xad, 0x4d, 0x56, 0xe0, 0x88, 0xf3, 0xd4, 0x20, 0x2b, 0x70, 0xd8, 0x6a, 0xe4, 0xdb, 0xc9, + 0x5a, 0x53, 0xac, 0xa8, 0x91, 0x2a, 0xc1, 0x7b, 0xb2, 0xd5, 0x08, 0x2b, 0x62, 0x9c, 0x79, 0x6a, + 0x81, 0x15, 0x32, 0xde, 0x4c, 0x35, 0xbf, 0x0a, 0x19, 0xa9, 0xaf, 0x86, 0x98, 0xcd, 0x5c, 0xc3, + 0xab, 0x80, 0xa1, 0xe6, 0xaa, 0xd5, 0xb5, 0x5e, 0x8d, 0xae, 0xd5, 0x6b, 0x73, 0xad, 0xd6, 0xee, + 0x8a, 0xab, 0x55, 0x63, 0x3f, 0x78, 0x60, 0xe8, 0x91, 0x1b, 0xf2, 0x44, 0x4f, 0x77, 0xd6, 0x58, + 0xb3, 0x5a, 0xc0, 0x86, 0x2c, 0x60, 0xae, 0x19, 0x7f, 0xec, 0xcb, 0x1b, 0xb1, 0x1b, 0x93, 0x6e, + 0xca, 0xe5, 0x87, 0x23, 0xad, 0x79, 0xd0, 0xde, 0xed, 0x68, 0xd7, 0xf7, 0x4c, 0xeb, 0xb9, 0x9c, + 0x05, 0x43, 0xc3, 0x64, 0xa1, 0x96, 0x48, 0x15, 0xed, 0xac, 0xf7, 0x5e, 0xd3, 0x35, 0x7b, 0x98, + 0x54, 0x5f, 0x59, 0xff, 0xc4, 0xd4, 0xae, 0xbc, 0x28, 0x30, 0xd7, 0x5b, 0x87, 0x67, 0x9f, 0xff, + 0x37, 0x7b, 0xfc, 0xee, 0x05, 0xd6, 0x24, 0x56, 0x7a, 0xb6, 0x3c, 0xd9, 0xaa, 0xce, 0xd5, 0xfe, + 0x32, 0xc2, 0x6e, 0x70, 0x17, 0x8d, 0x98, 0xcb, 0x6b, 0x1d, 0x8d, 0x07, 0x11, 0xcb, 0xd8, 0xd0, + 0x5c, 0x2b, 0x6b, 0xad, 0x9f, 0xe0, 0x33, 0xbf, 0xfa, 0x5f, 0xaf, 0x76, 0x3b, 0xfe, 0xdc, 0xde, + 0xef, 0xff, 0xe2, 0x0f, 0x77, 0xa6, 0xd6, 0x8d, 0xee, 0xe2, 0x55, 0x64, 0xd6, 0x4a, 0xe7, 0x7d, + 0xb5, 0x03, 0x94, 0x9e, 0xeb, 0x1d, 0xcf, 0xd4, 0xed, 0x61, 0xc7, 0x4e, 0x37, 0xe4, 0xe5, 0x2f, + 0xa6, 0x3f, 0x87, 0xdc, 0xe0, 0xab, 0x9e, 0xa8, 0xda, 0x31, 0x0b, 0xcd, 0xc0, 0xf6, 0xb9, 0xed, + 0xb9, 0x71, 0x1f, 0x5d, 0xcb, 0x0a, 0xb5, 0xeb, 0x7e, 0xef, 0x58, 0xdb, 0xd1, 0x18, 0xbf, 0x67, + 0x01, 0x7f, 0xf4, 0x99, 0xe6, 0xf9, 0x49, 0x9b, 0xda, 0xd0, 0x0b, 0x34, 0x7e, 0xcf, 0xb4, 0x5b, + 0x23, 0x64, 0x5a, 0xda, 0xed, 0xaa, 0x5d, 0xfd, 0xdb, 0x76, 0xe3, 0x75, 0x69, 0xac, 0xf8, 0xe7, + 0x47, 0x9e, 0x3b, 0xb4, 0xef, 0x6a, 0x1d, 0xad, 0xbe, 0xe2, 0x07, 0xfa, 0x01, 0x1b, 0xda, 0x3f, + 0xd6, 0x13, 0x50, 0x69, 0x2e, 0x17, 0x53, 0x4f, 0x32, 0x15, 0xaf, 0x7e, 0x7d, 0xb2, 0xca, 0x81, + 0xf9, 0xfb, 0xef, 0x4f, 0x46, 0xbc, 0xde, 0x9d, 0xcd, 0x7d, 0xe9, 0x9f, 0x5d, 0xf6, 0xd9, 0xc4, + 0x0b, 0x52, 0x2e, 0xc7, 0x76, 0xb0, 0xde, 0x86, 0x71, 0xdf, 0xb6, 0xd6, 0x5f, 0xf3, 0xd4, 0xcb, + 0x1b, 0x7f, 0x7a, 0xcd, 0xd5, 0x7a, 0x71, 0x43, 0x2e, 0x92, 0xef, 0x0c, 0xc7, 0x79, 0xd4, 0x42, + 0xc6, 0x93, 0xeb, 0xc0, 0x8d, 0x3b, 0xcd, 0x0f, 0x3c, 0xee, 0x99, 0x9e, 0xa3, 0xd9, 0x16, 0x73, + 0xb9, 0x3d, 0xb4, 0x59, 0xa0, 0x0d, 0x6d, 0xe6, 0x58, 0xda, 0x56, 0x7c, 0x9d, 0xb6, 0x35, 0x7e, + 0x6f, 0xf0, 0xaf, 0xae, 0x1d, 0x6a, 0x86, 0x69, 0x32, 0x9f, 0x33, 0x4b, 0xf3, 0xdc, 0xe4, 0xd3, + 0x9f, 0x4f, 0xbb, 0xe7, 0xeb, 0x8f, 0x69, 0x68, 0x44, 0x0e, 0x5f, 0x5b, 0xab, 0x26, 0x1f, 0x9e, + 0x6e, 0xb9, 0x1e, 0x5f, 0xed, 0xb0, 0x13, 0x8f, 0xee, 0xa6, 0xfe, 0xf7, 0x41, 0xa3, 0x5e, 0x5f, + 0x4f, 0x9a, 0x0f, 0xd6, 0x1c, 0xf3, 0xf4, 0xfa, 0xd7, 0xd7, 0xfc, 0xd8, 0xba, 0x62, 0x20, 0x8f, + 0x38, 0x20, 0x10, 0x0b, 0x22, 0x60, 0x42, 0x26, 0x31, 0x21, 0x16, 0x23, 0xac, 0x2d, 0x36, 0x32, + 0xea, 0xff, 0x35, 0xf7, 0x3c, 0xc1, 0x24, 0xb9, 0x76, 0x7c, 0x72, 0x7d, 0xf9, 0x63, 0xc0, 0x86, + 0x59, 0x76, 0x7d, 0xa6, 0xe3, 0xf6, 0x32, 0x7c, 0xb6, 0x37, 0xed, 0xfa, 0xbd, 0x11, 0xe6, 0x38, + 0x37, 0xb3, 0x89, 0x24, 0xf7, 0xfa, 0xfa, 0x9f, 0xfe, 0xc9, 0x55, 0xd6, 0x83, 0xf3, 0xd9, 0x70, + 0x22, 0x16, 0x66, 0x92, 0x31, 0xf9, 0xe8, 0xd5, 0xeb, 0x73, 0xc9, 0x22, 0xa3, 0x72, 0xb2, 0x43, + 0x41, 0xd3, 0x38, 0xe8, 0x1e, 0x54, 0x60, 0x1a, 0x87, 0xd5, 0xd8, 0x8d, 0xc3, 0x66, 0x05, 0xa6, + 0xd1, 0x3d, 0xff, 0x47, 0x81, 0x52, 0xe1, 0x82, 0xa8, 0xdf, 0x58, 0x0a, 0xf5, 0x1b, 0xfc, 0x89, + 0xfa, 0xb9, 0xae, 0xc7, 0x8d, 0x29, 0x4a, 0xfc, 0xf3, 0xde, 0xd6, 0x42, 0xf3, 0x9e, 0x8d, 0x0c, + 0xdf, 0xe0, 0xf7, 0x13, 0x6e, 0xe7, 0x33, 0xd7, 0x4c, 0xa0, 0x8e, 0x3e, 0x47, 0xf0, 0x5e, 0xfb, + 0x76, 0x67, 0xc2, 0xef, 0xde, 0x64, 0x9b, 0xca, 0x6f, 0x0e, 0x6c, 0x2d, 0x8c, 0x6e, 0x9f, 0x3a, + 0xfc, 0xe3, 0x2c, 0x9e, 0x22, 0xa7, 0x9f, 0x7d, 0xec, 0x0f, 0xcb, 0xb4, 0x1a, 0x09, 0x5c, 0x19, + 0xf5, 0xad, 0x83, 0xf2, 0xe6, 0x51, 0x9d, 0xbd, 0x8a, 0x76, 0x5f, 0x17, 0xc3, 0x65, 0xc6, 0x6c, + 0x99, 0x31, 0xda, 0x4b, 0x4c, 0x66, 0xaf, 0x50, 0x73, 0x25, 0x9f, 0x85, 0x63, 0x55, 0xc2, 0xf6, + 0xec, 0x54, 0xac, 0xbe, 0x82, 0xaf, 0x9d, 0xa9, 0x8a, 0xd8, 0x17, 0xec, 0xe1, 0x46, 0x5a, 0x17, + 0xec, 0xa1, 0x32, 0xb6, 0x05, 0x73, 0x76, 0x22, 0x32, 0x5a, 0x17, 0xa6, 0x9f, 0xcf, 0xc6, 0x8b, + 0x1b, 0x8a, 0xf1, 0x62, 0x7b, 0x08, 0x56, 0x9c, 0xf3, 0xb8, 0xcb, 0xe1, 0xc4, 0xeb, 0x5e, 0x83, + 0xf4, 0x83, 0xd6, 0x33, 0xc3, 0x57, 0x4e, 0x3a, 0x3a, 0xdf, 0x58, 0xc6, 0x95, 0xce, 0x66, 0x40, + 0xca, 0x7d, 0x61, 0x28, 0x2e, 0x0e, 0xd9, 0x05, 0xa2, 0xba, 0x48, 0xe4, 0x17, 0x8a, 0xfc, 0x62, + 0x51, 0x5e, 0xb0, 0x7c, 0x4c, 0x27, 0x23, 0xc7, 0xcb, 0x6e, 0x8c, 0x5a, 0x44, 0x43, 0x3c, 0xb0, + 0xdd, 0xbb, 0x3c, 0xc7, 0x65, 0xa6, 0x64, 0x0e, 0xa4, 0xae, 0x40, 0x0e, 0xd7, 0xf1, 0x42, 0x5b, + 0xd9, 0x5d, 0xc9, 0xb4, 0xc4, 0x5b, 0xcb, 0xe0, 0x6a, 0xee, 0x3a, 0xb6, 0x11, 0xe6, 0xbc, 0x58, + 0x94, 0xb7, 0xfe, 0xb5, 0xdb, 0x9f, 0xd7, 0x17, 0x2d, 0x5c, 0x10, 0xbc, 0x2a, 0x10, 0xd6, 0xda, + 0x80, 0xdc, 0xdd, 0x8f, 0xdf, 0x14, 0xf3, 0xe9, 0x81, 0xd4, 0x5b, 0xbb, 0xa6, 0x25, 0x63, 0x69, + 0x3b, 0x8f, 0x77, 0x1e, 0xd7, 0x3d, 0x53, 0x37, 0xbd, 0x91, 0x1f, 0xb0, 0x30, 0x64, 0x96, 0xee, + 0x30, 0x63, 0x18, 0x37, 0x9a, 0x51, 0x10, 0xcb, 0x88, 0x08, 0xaa, 0x31, 0x37, 0x16, 0x56, 0x56, + 0x7e, 0xc8, 0x33, 0x6b, 0x28, 0xe3, 0x36, 0xe4, 0xf1, 0xf1, 0xa5, 0x8d, 0xc4, 0xd7, 0x2e, 0xdb, + 0xb9, 0x1f, 0x00, 0xa5, 0x01, 0xa5, 0x01, 0xa5, 0xad, 0x71, 0x5a, 0x6e, 0x3d, 0xcf, 0x61, 0x86, + 0x4b, 0x01, 0xd3, 0x1a, 0x80, 0x69, 0x45, 0xc0, 0x34, 0x6b, 0x64, 0xbb, 0x57, 0xdc, 0xe0, 0x11, + 0xc0, 0x5a, 0x91, 0x60, 0x6d, 0x6e, 0x1b, 0x00, 0xd9, 0x00, 0xd9, 0xfe, 0x3c, 0x6c, 0xdb, 0xb5, + 0xd8, 0x8f, 0xfc, 0x80, 0x6d, 0xd2, 0x4c, 0x91, 0x70, 0xad, 0x0e, 0xac, 0x06, 0xac, 0x06, 0xac, + 0x26, 0x1e, 0xab, 0x45, 0xb6, 0xcb, 0x77, 0x9b, 0x04, 0x50, 0x6d, 0x3f, 0x47, 0x13, 0x97, 0x86, + 0x7b, 0x57, 0x0a, 0x9c, 0x74, 0x66, 0xbb, 0x74, 0x30, 0x25, 0x09, 0x1b, 0xcb, 0x2e, 0x14, 0x16, + 0xda, 0xfb, 0x10, 0x18, 0x66, 0xac, 0xd9, 0x8e, 0xed, 0x3b, 0x9b, 0x87, 0x84, 0x0d, 0x9f, 0xb3, + 0x3b, 0x83, 0xdb, 0x0f, 0xf1, 0x58, 0x87, 0x86, 0x13, 0xb2, 0xfc, 0x58, 0x83, 0x00, 0x34, 0x9e, + 0x19, 0x3f, 0xe8, 0xb7, 0xa2, 0xd5, 0x3c, 0x6c, 0x1d, 0xb6, 0xf7, 0x9b, 0x87, 0x7b, 0x9b, 0xb7, + 0x27, 0xc0, 0x7f, 0x8a, 0xe1, 0x3f, 0xa1, 0xce, 0xd0, 0x93, 0x1f, 0x3c, 0x5b, 0x44, 0x6b, 0x7e, + 0x7f, 0xb5, 0x67, 0xea, 0xec, 0x07, 0xef, 0x70, 0xe6, 0xb0, 0x11, 0xe3, 0xc1, 0xa3, 0xee, 0xb9, + 0xba, 0x79, 0x9f, 0xa8, 0x00, 0x12, 0x1f, 0x76, 0x72, 0x5f, 0x08, 0x9c, 0xd8, 0xc2, 0xdf, 0x31, + 0xae, 0x1b, 0x4f, 0x92, 0xef, 0x6c, 0xe7, 0x09, 0xb4, 0x9b, 0x0f, 0x6c, 0x7b, 0xf6, 0xd3, 0xce, + 0x34, 0xd4, 0x43, 0x54, 0x44, 0xe3, 0x1a, 0x81, 0x42, 0xd9, 0xb8, 0x4f, 0x2e, 0xce, 0xa3, 0xea, + 0x53, 0x0e, 0x84, 0xac, 0x90, 0xe1, 0xff, 0xb2, 0x3f, 0xe3, 0x88, 0xb5, 0x56, 0xce, 0x27, 0x1c, + 0x19, 0x90, 0x7d, 0xad, 0x3f, 0x95, 0x32, 0xef, 0xde, 0x4d, 0x25, 0xc4, 0xce, 0xe4, 0x7e, 0x95, + 0x41, 0x4e, 0xf8, 0x0f, 0xad, 0x1c, 0x62, 0x22, 0xfe, 0xf4, 0x86, 0x04, 0xb6, 0xf9, 0x90, 0x12, + 0xaf, 0x49, 0x09, 0xbf, 0x32, 0x81, 0x6d, 0xc6, 0x24, 0xf7, 0xe3, 0x0a, 0x31, 0xee, 0x7f, 0x3c, + 0x2f, 0x4f, 0x4d, 0xe5, 0x33, 0xc1, 0x35, 0xaa, 0x62, 0x82, 0xf3, 0x61, 0x82, 0x93, 0x74, 0xb9, + 0x8a, 0x31, 0xc1, 0x65, 0xbd, 0x74, 0x2f, 0x2f, 0x5f, 0xfe, 0x4d, 0x7e, 0x71, 0x05, 0xf3, 0x6e, + 0x71, 0xbe, 0x8b, 0x48, 0x76, 0x21, 0x29, 0x2f, 0x26, 0xf9, 0x05, 0xa5, 0xbe, 0xa8, 0xc2, 0x2e, + 0xac, 0xb0, 0x8b, 0x2b, 0xe2, 0x02, 0x13, 0x99, 0xaa, 0x72, 0x9e, 0xb7, 0xbc, 0x17, 0x3b, 0x6d, + 0x28, 0xe3, 0x2b, 0x8a, 0x3f, 0x1e, 0xde, 0x4c, 0xaf, 0x2b, 0x04, 0x5f, 0x77, 0xf2, 0x6b, 0x2f, + 0xe2, 0xfa, 0x0b, 0x13, 0x03, 0xa2, 0xc4, 0x81, 0x70, 0xb1, 0x20, 0x5c, 0x3c, 0x88, 0x14, 0x13, + 0x34, 0xe2, 0x82, 0x48, 0x6c, 0x90, 0x8b, 0x8f, 0x39, 0xbe, 0x4a, 0x7f, 0x9e, 0x9e, 0xd8, 0x2c, + 0xf5, 0x41, 0xca, 0xe7, 0x49, 0x97, 0x26, 0x56, 0x44, 0x8a, 0x17, 0xe1, 0x62, 0x46, 0xb4, 0xb8, + 0x91, 0x26, 0x76, 0xa4, 0x89, 0x1f, 0x19, 0x62, 0x88, 0x56, 0x1c, 0x11, 0x8b, 0xa5, 0xfc, 0x16, + 0xc5, 0xb5, 0x2c, 0x64, 0x3a, 0x0d, 0x17, 0xf9, 0x2d, 0x60, 0x39, 0x10, 0xd0, 0x76, 0xdf, 0xe0, + 0x9c, 0x05, 0x6e, 0xee, 0x50, 0x84, 0xa5, 0x1d, 0x6c, 0x7d, 0xa9, 0xeb, 0x87, 0x83, 0x5f, 0x5f, + 0x1a, 0xfa, 0xe1, 0x60, 0xf2, 0x6d, 0x23, 0xf9, 0xdf, 0xcf, 0xe6, 0xf8, 0x57, 0xf3, 0x4b, 0x5d, + 0x6f, 0x4d, 0x7f, 0xdb, 0xdc, 0xfb, 0x52, 0xd7, 0xf7, 0x06, 0xdb, 0x5b, 0x5f, 0xbf, 0xbe, 0x5b, + 0xf7, 0x33, 0xdb, 0x3f, 0x77, 0xc7, 0xf4, 0xc7, 0x7a, 0x20, 0x62, 0xb9, 0x2f, 0xae, 0x7a, 0x7f, + 0x0b, 0x5f, 0xf3, 0xff, 0x6e, 0xc9, 0x5a, 0xf5, 0xed, 0x7f, 0x09, 0x58, 0xf7, 0x52, 0x8b, 0x13, + 0x22, 0x7f, 0xfb, 0xd2, 0xf6, 0xc9, 0xfd, 0xf0, 0xe2, 0xa5, 0x36, 0xe1, 0x12, 0x4f, 0xb5, 0xae, + 0xee, 0x30, 0xf7, 0x2e, 0xf1, 0xa7, 0x08, 0x82, 0x81, 0xcf, 0xbb, 0x01, 0x22, 0x04, 0x22, 0x04, + 0x22, 0x04, 0x22, 0x24, 0x3b, 0xed, 0x91, 0xed, 0xf2, 0x03, 0x81, 0x50, 0x70, 0x4f, 0x40, 0xd3, + 0x34, 0x21, 0xa9, 0xcb, 0xbe, 0xc4, 0xdc, 0x4e, 0x8d, 0x3a, 0x84, 0x75, 0x69, 0x27, 0xc4, 0xa1, + 0xad, 0x4b, 0xfb, 0x11, 0x15, 0x5e, 0xb9, 0xfc, 0xc8, 0x52, 0x87, 0x5d, 0x4a, 0xba, 0xc5, 0xcf, + 0x8f, 0x80, 0xf1, 0x43, 0xde, 0x11, 0xd8, 0x6d, 0xe2, 0x0c, 0x94, 0x42, 0x2f, 0x88, 0x6b, 0x15, + 0x14, 0x64, 0x83, 0x29, 0x08, 0x17, 0x01, 0x0f, 0x9e, 0xf2, 0x90, 0x67, 0xab, 0x3d, 0xf1, 0xdb, + 0xb6, 0x29, 0x1e, 0xa0, 0x2d, 0x67, 0x07, 0x97, 0xbd, 0xb3, 0xee, 0xe5, 0x3f, 0xb4, 0x20, 0x71, + 0x00, 0xca, 0x05, 0xca, 0x05, 0xca, 0x05, 0xca, 0x45, 0x76, 0xda, 0xe7, 0x8d, 0xf0, 0xba, 0x00, + 0x21, 0x3b, 0x2f, 0x66, 0x1a, 0x2d, 0x01, 0x6d, 0x9f, 0xb8, 0xd1, 0x48, 0xdc, 0x9d, 0xba, 0xf6, + 0xae, 0x26, 0x99, 0xc4, 0x44, 0xc2, 0xe4, 0x5a, 0x3d, 0xde, 0x89, 0x99, 0xc2, 0x10, 0x88, 0xf7, + 0x1b, 0x71, 0x3f, 0x57, 0x27, 0x47, 0x17, 0xe7, 0xc7, 0xe4, 0xaa, 0x49, 0x30, 0x5f, 0xa9, 0x5d, + 0x7b, 0xbd, 0x44, 0x10, 0x08, 0xdc, 0x86, 0xd9, 0x0e, 0x08, 0x65, 0x0e, 0x73, 0xeb, 0xdf, 0xd1, + 0x1a, 0x8a, 0x00, 0xfb, 0x31, 0x80, 0xbd, 0x62, 0xc0, 0xbe, 0x54, 0xa1, 0x2e, 0x82, 0x36, 0x48, + 0xcc, 0x43, 0xb5, 0x58, 0x23, 0xee, 0xa4, 0x51, 0xea, 0xb3, 0xef, 0x32, 0xbd, 0x5f, 0x13, 0xb7, + 0x3b, 0x14, 0x0f, 0xa7, 0x09, 0xe3, 0x85, 0xe8, 0xe3, 0x84, 0x88, 0xa9, 0x09, 0xc2, 0x0d, 0x11, + 0x6e, 0x28, 0x9b, 0x62, 0x94, 0x4b, 0x06, 0x93, 0x53, 0x09, 0x82, 0x97, 0x83, 0x7f, 0x24, 0x0c, + 0xfb, 0x84, 0x6d, 0xbe, 0xf2, 0xd2, 0xd0, 0xaf, 0x92, 0x38, 0x9f, 0x14, 0x39, 0x21, 0x97, 0xe8, + 0xeb, 0xd4, 0xc6, 0x5c, 0x79, 0x5f, 0xa9, 0x85, 0x7a, 0x13, 0x42, 0x1d, 0x42, 0x7d, 0x03, 0x85, + 0x3a, 0x62, 0xc8, 0x61, 0xbe, 0x16, 0x2c, 0x66, 0x44, 0x8b, 0x1b, 0x69, 0x62, 0x47, 0x9a, 0xf8, + 0x91, 0x21, 0x86, 0xd4, 0x30, 0xcc, 0x20, 0x86, 0xfc, 0x0f, 0x80, 0x14, 0x31, 0xe4, 0xaf, 0x7f, + 0x21, 0x86, 0xbc, 0x12, 0x31, 0xe4, 0xa5, 0x8c, 0x53, 0xf0, 0x02, 0xfb, 0x4e, 0x40, 0xe8, 0xdb, + 0x93, 0x02, 0x9e, 0xb4, 0x0f, 0xa8, 0x03, 0xa8, 0x03, 0xa8, 0x03, 0xa8, 0x43, 0x08, 0x75, 0x52, + 0x3f, 0xbd, 0x10, 0x11, 0xa3, 0xc1, 0x53, 0xff, 0xe7, 0x5e, 0x12, 0x4f, 0xfd, 0xc5, 0xf5, 0x5f, + 0x27, 0x97, 0xe2, 0xfd, 0xf4, 0xd7, 0xdd, 0xeb, 0xde, 0x91, 0xc8, 0x6e, 0x9a, 0x71, 0x37, 0xc7, + 0x7f, 0x1d, 0xf5, 0x45, 0x76, 0xb2, 0x1b, 0x77, 0x72, 0xda, 0x3b, 0xff, 0xf7, 0xcd, 0x69, 0xf7, + 0x1f, 0xb1, 0xcb, 0xd6, 0x4a, 0x4a, 0x26, 0x74, 0xcf, 0x8f, 0x2f, 0xce, 0x10, 0xdb, 0xf0, 0xd2, + 0x52, 0x14, 0x6f, 0x33, 0x99, 0xa1, 0xf4, 0xd5, 0x2e, 0xe6, 0x36, 0xb9, 0xa3, 0xed, 0x0a, 0xec, + 0x68, 0x72, 0xff, 0xc4, 0x46, 0x69, 0x4c, 0x8f, 0x51, 0x47, 0x6b, 0x89, 0x0c, 0x05, 0x99, 0x5c, + 0xf1, 0x8d, 0x8d, 0x03, 0xc1, 0x53, 0x4a, 0x3c, 0xa5, 0x04, 0x5b, 0x00, 0x5b, 0x00, 0x5b, 0x20, + 0x3f, 0xed, 0x78, 0x4a, 0xf9, 0xf2, 0x0b, 0x4f, 0x29, 0x57, 0xeb, 0x07, 0x4f, 0x29, 0x33, 0x1d, + 0x01, 0x3c, 0xa5, 0x54, 0xe3, 0x0c, 0x6c, 0xe6, 0x53, 0x4a, 0xbc, 0x18, 0xa4, 0x61, 0xd1, 0x78, + 0x31, 0x08, 0x66, 0x01, 0x66, 0x01, 0x66, 0xb1, 0xc1, 0xcc, 0x02, 0x2f, 0x06, 0x7f, 0xbf, 0x01, + 0x78, 0x31, 0x58, 0x0e, 0x58, 0x8e, 0x17, 0x83, 0x45, 0xe2, 0x57, 0x3c, 0x8c, 0x5b, 0x49, 0x5d, + 0x55, 0xe0, 0x61, 0xdc, 0xe4, 0x81, 0x40, 0x85, 0x1e, 0x52, 0x3c, 0x04, 0x81, 0x80, 0x97, 0x71, + 0x49, 0xab, 0x48, 0xc5, 0x5f, 0x3a, 0xb0, 0x8d, 0x67, 0x14, 0x45, 0x80, 0xe9, 0x8a, 0x3f, 0xa3, + 0x88, 0x2f, 0xbb, 0x7e, 0x17, 0x78, 0x91, 0xc0, 0xe7, 0x14, 0x73, 0x7d, 0x88, 0xe1, 0xf8, 0x0d, + 0x70, 0x7c, 0x70, 0x7c, 0x70, 0xfc, 0xf2, 0x71, 0x7c, 0x6a, 0x71, 0x95, 0x36, 0x4c, 0x5c, 0x88, + 0x68, 0xe9, 0x65, 0x22, 0x2d, 0x4c, 0x24, 0x49, 0x7c, 0x09, 0x17, 0x63, 0x32, 0xc4, 0x99, 0x34, + 0xb1, 0x26, 0x4b, 0xbc, 0x49, 0x17, 0x73, 0xd2, 0xc5, 0x9d, 0x4c, 0xb1, 0x27, 0xce, 0x1c, 0x20, + 0xd2, 0xce, 0x23, 0x4a, 0x1c, 0xa6, 0x1d, 0x18, 0xa6, 0xc9, 0x7c, 0xae, 0x8f, 0x3c, 0x4b, 0xc2, + 0x41, 0x4e, 0x8b, 0x34, 0xce, 0x75, 0x2a, 0xf8, 0x64, 0x89, 0xf4, 0x6a, 0x2d, 0x74, 0x96, 0xb8, + 0x77, 0x6b, 0x42, 0xfb, 0x19, 0x08, 0x5e, 0x2f, 0x31, 0x3e, 0x30, 0xe9, 0x8a, 0x46, 0xa6, 0xc2, + 0x91, 0xae, 0x78, 0x64, 0x2b, 0xa0, 0xc2, 0x14, 0x51, 0x61, 0x0a, 0xa9, 0x08, 0xc5, 0x24, 0x56, + 0x41, 0x09, 0x56, 0x54, 0xe9, 0x82, 0x09, 0xf3, 0xd1, 0x2d, 0xbd, 0x6d, 0xb7, 0x9e, 0xe7, 0x30, + 0xc3, 0x95, 0x71, 0xdf, 0x66, 0xe8, 0xbb, 0xa1, 0xf4, 0x16, 0x09, 0x4e, 0x29, 0xb8, 0xd0, 0x9f, + 0xb4, 0x14, 0x83, 0xf2, 0x6e, 0x92, 0xc8, 0x68, 0x3b, 0xc3, 0x7a, 0x60, 0x01, 0xb7, 0x43, 0x16, + 0xcb, 0x9d, 0x89, 0x4f, 0xe3, 0xc1, 0x70, 0x24, 0x82, 0xb3, 0xd7, 0xfb, 0xaf, 0x12, 0x4e, 0x6b, + 0xd4, 0xeb, 0x40, 0x69, 0x40, 0x69, 0x40, 0x69, 0x40, 0x69, 0x40, 0x69, 0x72, 0x6e, 0x5b, 0x64, + 0xbb, 0xbc, 0xd1, 0x96, 0x08, 0xd2, 0xda, 0x12, 0xba, 0x12, 0xfb, 0xa8, 0xe3, 0xe5, 0x97, 0x1c, + 0xf1, 0xa1, 0xc9, 0x7a, 0xf4, 0xb1, 0xd0, 0xe9, 0xec, 0x05, 0x40, 0xe3, 0xad, 0xdc, 0x7e, 0x65, + 0x3f, 0x08, 0x58, 0xbc, 0x23, 0xb2, 0x1e, 0x08, 0x48, 0x16, 0x33, 0xcf, 0x8f, 0x94, 0xf1, 0xa3, + 0xb8, 0x23, 0xd5, 0xaa, 0x1f, 0xee, 0xe1, 0x54, 0xc9, 0x3a, 0x55, 0x6f, 0xaa, 0xd1, 0xcb, 0x00, + 0x2c, 0x1f, 0x2c, 0x5f, 0xd4, 0x72, 0xf9, 0x01, 0x63, 0x23, 0x9f, 0xcb, 0xa3, 0xf5, 0xb3, 0x0e, + 0xab, 0xc4, 0xe3, 0x63, 0x8a, 0x01, 0x22, 0x0f, 0x22, 0x0f, 0x22, 0x0f, 0x22, 0x0f, 0x22, 0x2f, + 0xe7, 0xb6, 0xc1, 0xdd, 0x02, 0x20, 0x56, 0x41, 0x20, 0xa6, 0x5b, 0xcc, 0x31, 0x1e, 0xa5, 0xc3, + 0xb1, 0x69, 0xb7, 0x55, 0x02, 0x65, 0x70, 0xad, 0x00, 0x91, 0x01, 0x91, 0x01, 0x91, 0x01, 0x91, + 0x49, 0xba, 0x6d, 0x70, 0xad, 0xe4, 0xfe, 0xda, 0x14, 0xd7, 0x4a, 0x1d, 0x46, 0x70, 0x49, 0x5f, + 0x1b, 0xe3, 0x5a, 0xd9, 0x6d, 0xd7, 0x71, 0xaa, 0xa4, 0x9d, 0x2a, 0xb8, 0x56, 0xc0, 0xe8, 0xc1, + 0xe8, 0xff, 0xc4, 0xe8, 0x6d, 0x2f, 0xb0, 0xb9, 0x54, 0x32, 0x3f, 0xed, 0x11, 0x41, 0x92, 0x60, + 0xf2, 0x60, 0xf2, 0x60, 0xf2, 0x60, 0xf2, 0x60, 0xf2, 0x19, 0x99, 0xfc, 0x81, 0x44, 0x22, 0xbf, + 0x07, 0x22, 0xaf, 0x28, 0x91, 0x47, 0x8c, 0x24, 0x88, 0x3c, 0xf1, 0x91, 0x6a, 0xee, 0xb5, 0x70, + 0xa8, 0xc0, 0xe3, 0xc1, 0xe3, 0xc1, 0xe3, 0xcb, 0xc1, 0xe3, 0x1f, 0xec, 0x80, 0x47, 0x86, 0x93, + 0x96, 0x40, 0x96, 0x46, 0xe7, 0x5f, 0x76, 0x0c, 0x9e, 0x0a, 0x9e, 0x0a, 0x9e, 0x0a, 0x9e, 0x0a, + 0x9e, 0xba, 0x50, 0xae, 0x55, 0x66, 0x18, 0xe0, 0xa1, 0x84, 0xbe, 0xa6, 0x6b, 0x59, 0x39, 0xb2, + 0xfa, 0x5a, 0x82, 0xfb, 0x9a, 0x44, 0x66, 0x33, 0xdb, 0xc3, 0x03, 0x89, 0x7d, 0x8a, 0xae, 0x87, + 0xbf, 0xb4, 0x63, 0x59, 0x55, 0xf2, 0x6b, 0xd2, 0xa6, 0x35, 0x90, 0xb9, 0x6d, 0x17, 0x57, 0xbd, + 0xbf, 0x0b, 0xdb, 0xbb, 0xff, 0x6e, 0xc9, 0xda, 0xbd, 0xed, 0x7f, 0x49, 0xdc, 0xbf, 0x37, 0x15, + 0x32, 0x95, 0x14, 0x23, 0x36, 0xdb, 0x10, 0x9b, 0xa2, 0xc5, 0x66, 0x72, 0x8b, 0x0c, 0x7d, 0xd8, + 0xd5, 0x3f, 0x0c, 0x7e, 0x36, 0xde, 0xb6, 0xc6, 0x9d, 0xed, 0x9f, 0xfb, 0xe3, 0x97, 0xbf, 0xfc, + 0xf5, 0xda, 0x9f, 0x35, 0xde, 0xee, 0x8f, 0x3b, 0x4b, 0xfe, 0xa5, 0x3d, 0xee, 0xac, 0xd8, 0xc6, + 0xde, 0x78, 0x6b, 0xe1, 0x4f, 0xe3, 0xdf, 0x37, 0x97, 0x7d, 0xa0, 0xb5, 0xe4, 0x03, 0xbb, 0xcb, + 0x3e, 0xb0, 0xbb, 0xe4, 0x03, 0x4b, 0x87, 0xd4, 0x5c, 0xf2, 0x81, 0xbd, 0xf1, 0xaf, 0x85, 0xbf, + 0xdf, 0x7a, 0xfd, 0x4f, 0xdb, 0xe3, 0xed, 0x5f, 0xcb, 0xfe, 0x6d, 0x7f, 0xfc, 0xab, 0xb3, 0xbd, + 0x0d, 0x45, 0x22, 0x4c, 0x91, 0xe0, 0x38, 0xcb, 0x3f, 0xce, 0xd5, 0x53, 0xac, 0x30, 0xe4, 0xfe, + 0xf6, 0xae, 0x9d, 0xda, 0x21, 0xef, 0x72, 0x1e, 0xc8, 0x61, 0xc1, 0x67, 0xb6, 0x7b, 0xe2, 0x24, + 0xd9, 0xd1, 0x24, 0xf9, 0x2c, 0x6a, 0x67, 0xc6, 0x8f, 0xb9, 0x1e, 0x1b, 0x07, 0xad, 0x56, 0x7b, + 0xbf, 0xd5, 0xaa, 0xef, 0xef, 0xee, 0xd7, 0x0f, 0xf7, 0xf6, 0x1a, 0xed, 0x86, 0x0c, 0x47, 0xee, + 0x45, 0x60, 0xb1, 0x80, 0x59, 0xef, 0x1f, 0x6b, 0x1d, 0xcd, 0x8d, 0x1c, 0x47, 0x66, 0x97, 0x9f, + 0x42, 0x16, 0x48, 0x71, 0xd2, 0xc0, 0xe5, 0x50, 0x7a, 0x91, 0x25, 0xc3, 0xe5, 0x10, 0x78, 0x11, + 0x67, 0x81, 0x6e, 0x5b, 0xf2, 0x9d, 0x0e, 0x4f, 0x5d, 0xc3, 0xed, 0xb0, 0x1e, 0xdc, 0x83, 0xdb, + 0x81, 0xf0, 0x70, 0xc0, 0xed, 0x00, 0xb7, 0xc3, 0xef, 0x17, 0x0c, 0xe1, 0x71, 0x14, 0x5d, 0x21, + 0x3c, 0x8e, 0xb2, 0x53, 0x84, 0xc7, 0x21, 0x3c, 0x4e, 0xd0, 0x91, 0x6a, 0xee, 0x21, 0x83, 0xa0, + 0xb4, 0x43, 0x05, 0xab, 0x0a, 0xb8, 0x6a, 0x25, 0xb8, 0xaa, 0x52, 0xc5, 0xa6, 0x24, 0x6d, 0xb8, + 0xd4, 0x0a, 0xce, 0x0f, 0x41, 0xe0, 0xef, 0x3c, 0x95, 0x13, 0xdd, 0x99, 0x96, 0xe7, 0x53, 0xa5, + 0xd2, 0xb8, 0x80, 0xa2, 0x9c, 0xe9, 0x92, 0xe9, 0x3c, 0x30, 0xcc, 0x6f, 0x22, 0xcb, 0xf9, 0x3f, + 0xf9, 0x4f, 0x17, 0xfb, 0x44, 0x81, 0xc4, 0xa2, 0xac, 0x18, 0x28, 0x90, 0xa8, 0x9c, 0x95, 0x02, + 0x05, 0x12, 0x97, 0x2d, 0x8c, 0xf0, 0x02, 0x89, 0x82, 0xeb, 0xc6, 0x2e, 0x5c, 0x4a, 0xa1, 0xf5, + 0x63, 0x25, 0x89, 0x49, 0x69, 0xe2, 0x52, 0xa6, 0xd8, 0x94, 0x2e, 0x3e, 0x65, 0x8b, 0xd1, 0xc2, + 0xc4, 0x69, 0x61, 0x62, 0xb5, 0x08, 0xf1, 0x2a, 0x87, 0x7d, 0x8a, 0xe6, 0x86, 0xa2, 0xc5, 0x6e, + 0xda, 0xd1, 0x2c, 0xb5, 0x86, 0x6e, 0x31, 0x33, 0x60, 0xd3, 0x3d, 0x92, 0x74, 0x0f, 0x5e, 0xa6, + 0xf7, 0x98, 0x1b, 0x83, 0xa4, 0x73, 0x29, 0x33, 0xe1, 0x47, 0xda, 0x69, 0x5d, 0x4e, 0xf8, 0x8c, + 0xa4, 0x50, 0x30, 0x49, 0x7e, 0x4e, 0xe9, 0x2a, 0xaf, 0x08, 0xd5, 0x57, 0x98, 0x0a, 0x2c, 0x4a, + 0x15, 0x16, 0xae, 0x12, 0x0b, 0x57, 0x8d, 0x45, 0xaa, 0x48, 0x39, 0xaa, 0x52, 0x92, 0xca, 0x4c, + 0x17, 0x52, 0x9a, 0xdf, 0x74, 0xe1, 0xb6, 0xca, 0xf2, 0x9f, 0xbe, 0x14, 0xbd, 0x12, 0x1d, 0x27, + 0x92, 0xfd, 0xa9, 0xb3, 0x2f, 0xb9, 0xd2, 0x48, 0x2b, 0xca, 0xbf, 0x9a, 0x76, 0x5e, 0x50, 0x3e, + 0xd1, 0xb4, 0xff, 0xa2, 0x5d, 0x63, 0x4f, 0x57, 0xab, 0x28, 0x17, 0x99, 0x64, 0xa9, 0xf5, 0xfc, + 0xe8, 0x15, 0xe0, 0x87, 0x5d, 0x38, 0x7a, 0xd2, 0xd3, 0x95, 0xe0, 0xf0, 0x15, 0xa4, 0x98, 0xe5, + 0xf7, 0x56, 0xa9, 0xe7, 0x72, 0xb2, 0xfd, 0xb8, 0x69, 0xbf, 0x85, 0xf9, 0x73, 0xe5, 0x1d, 0x18, + 0x09, 0x5b, 0x58, 0x4b, 0x3c, 0x66, 0x4f, 0x9e, 0x51, 0xf9, 0xe6, 0x8f, 0x97, 0x03, 0x00, 0x6f, + 0x07, 0x6f, 0x07, 0x6f, 0x07, 0x6f, 0x07, 0x6f, 0x97, 0x74, 0x5b, 0x63, 0xad, 0x19, 0xb0, 0x61, + 0x11, 0x0f, 0xcf, 0xf7, 0xe5, 0x3e, 0x3c, 0x9f, 0x06, 0x04, 0x99, 0xba, 0x3d, 0xec, 0xcc, 0x05, + 0xfa, 0xbc, 0xf8, 0xc5, 0xf4, 0x67, 0x37, 0x5e, 0x9e, 0x4a, 0x1d, 0x31, 0xa9, 0xef, 0x18, 0xe7, + 0x2d, 0x09, 0x72, 0xdf, 0x33, 0xce, 0x13, 0xc9, 0xc2, 0xdf, 0x35, 0xa6, 0x83, 0x91, 0xff, 0xbe, + 0x71, 0xb1, 0x6b, 0x69, 0xef, 0x1c, 0xc1, 0x41, 0xaa, 0xc3, 0x41, 0x10, 0x64, 0xbc, 0x46, 0x7f, + 0x45, 0xc6, 0x9e, 0x2e, 0x46, 0x41, 0x0a, 0x0d, 0x47, 0x15, 0x7f, 0x40, 0x44, 0x3e, 0xc5, 0x0d, + 0xb9, 0xc1, 0x99, 0xbc, 0xb0, 0xab, 0x49, 0x77, 0x15, 0x8b, 0xba, 0x6a, 0x22, 0xea, 0x4a, 0x19, + 0xca, 0x8a, 0xa8, 0x2b, 0x44, 0x5d, 0xfd, 0x69, 0xc1, 0x10, 0x75, 0x25, 0x65, 0x04, 0x88, 0xba, + 0x22, 0x53, 0x75, 0xb0, 0xde, 0x2a, 0xac, 0x02, 0x8b, 0x52, 0x85, 0x85, 0xab, 0xc4, 0xc2, 0x55, + 0x63, 0x91, 0x2a, 0x52, 0x1e, 0x73, 0xd5, 0x10, 0x75, 0x25, 0x50, 0xf4, 0x22, 0xea, 0x4a, 0xc0, + 0x44, 0x11, 0x75, 0x85, 0xc0, 0x17, 0x44, 0x5d, 0xe1, 0xf0, 0x21, 0xea, 0x4a, 0x00, 0x35, 0x41, + 0x50, 0xd0, 0xca, 0x87, 0x10, 0x41, 0x41, 0xa0, 0x95, 0xa0, 0x95, 0xa0, 0x95, 0xa0, 0x95, 0x9b, + 0x4a, 0x2b, 0x11, 0x14, 0x84, 0xa0, 0x20, 0xb1, 0x44, 0x17, 0x41, 0x41, 0x9b, 0x1a, 0x14, 0x04, + 0x37, 0xdc, 0xef, 0xb5, 0xe7, 0x66, 0xc7, 0xac, 0x4c, 0x42, 0x25, 0x90, 0x91, 0x4f, 0xfc, 0x89, + 0xdb, 0x88, 0x8c, 0x7c, 0xd2, 0x72, 0xc3, 0x4d, 0x66, 0xca, 0x83, 0xc8, 0xe4, 0xee, 0x14, 0x44, + 0xf5, 0x66, 0x7d, 0xdf, 0x5c, 0xcd, 0x8d, 0xfc, 0xa6, 0xe7, 0x3f, 0xb4, 0x6e, 0xba, 0x93, 0xf1, + 0xde, 0x7c, 0x0e, 0x02, 0xff, 0x63, 0x3c, 0xd2, 0x9b, 0xf4, 0xaf, 0xaf, 0x67, 0x03, 0xdd, 0xe0, + 0x34, 0x82, 0x62, 0xe3, 0xb3, 0xa4, 0xc4, 0x65, 0x49, 0x4b, 0x16, 0xd8, 0x44, 0xb2, 0xc0, 0xd2, + 0x58, 0x03, 0x90, 0x2c, 0x70, 0x73, 0xd5, 0xa9, 0xf0, 0x64, 0x81, 0x86, 0x69, 0x32, 0x9f, 0xeb, + 0x23, 0xcf, 0x92, 0x18, 0xba, 0x3a, 0xdf, 0xa9, 0xe8, 0x00, 0x34, 0x89, 0x91, 0x51, 0xb5, 0x84, + 0xf0, 0x88, 0xc5, 0x99, 0x03, 0xd4, 0xd8, 0x29, 0x9b, 0xc2, 0x91, 0xae, 0x78, 0x64, 0x2b, 0xa0, + 0xc2, 0x14, 0x51, 0x61, 0x0a, 0xa9, 0x08, 0xc5, 0x54, 0x0d, 0x4b, 0x83, 0xfc, 0x1a, 0x3b, 0xb7, + 0x9e, 0xe7, 0x30, 0xc3, 0x95, 0x59, 0xd7, 0xbf, 0x81, 0xd7, 0x2f, 0x8b, 0x40, 0xc2, 0x7a, 0x60, + 0x01, 0xb7, 0xc3, 0xc4, 0x0e, 0x3a, 0x21, 0xe1, 0x0f, 0x86, 0x23, 0x11, 0x53, 0xbc, 0xde, 0x7f, + 0x95, 0xe0, 0x45, 0xa3, 0x5e, 0x07, 0xb8, 0x00, 0xb8, 0x00, 0xb8, 0x00, 0xb8, 0x00, 0xb8, 0x90, + 0x73, 0xdb, 0x22, 0xdb, 0xe5, 0x8d, 0xb6, 0x44, 0x6c, 0xd1, 0x46, 0x05, 0xbf, 0xec, 0x13, 0x43, + 0x05, 0x3f, 0x99, 0x03, 0x40, 0x05, 0x3f, 0xd1, 0x47, 0xaa, 0x55, 0x3f, 0x44, 0x09, 0x3f, 0x69, + 0xa7, 0x0a, 0x25, 0xfc, 0x2a, 0x4b, 0x4e, 0xcd, 0x28, 0x08, 0x62, 0x5a, 0x38, 0x7b, 0xa1, 0x2b, + 0xb1, 0x38, 0xce, 0xcb, 0x9e, 0x41, 0xb1, 0x40, 0xb1, 0x40, 0xb1, 0x40, 0xb1, 0x40, 0xb1, 0x50, + 0x23, 0x1d, 0x0c, 0x6b, 0x2d, 0x38, 0x5c, 0x07, 0x16, 0x06, 0xc3, 0xa2, 0x3d, 0x52, 0xa8, 0x91, + 0x0e, 0x82, 0x05, 0x82, 0x95, 0xff, 0x50, 0xf9, 0x01, 0x63, 0x23, 0x9f, 0xcb, 0xe3, 0x55, 0xb3, + 0x0e, 0xab, 0xe4, 0xdf, 0x8b, 0x71, 0x31, 0x1c, 0x7c, 0x60, 0x9f, 0x60, 0x9f, 0x60, 0x9f, 0x60, + 0x9f, 0x72, 0x6e, 0x1b, 0xa2, 0x87, 0xca, 0x84, 0x1f, 0x74, 0x8b, 0x39, 0xc6, 0xa3, 0x74, 0x14, + 0x31, 0xed, 0xb6, 0x4a, 0x58, 0x02, 0x91, 0x42, 0x00, 0x12, 0x00, 0x12, 0x00, 0x12, 0x00, 0x12, + 0x92, 0x6e, 0x1b, 0x22, 0x85, 0x72, 0x7f, 0xc1, 0x8e, 0x2d, 0xa6, 0x5f, 0xd8, 0xb1, 0xa5, 0x1c, + 0xa9, 0x22, 0xed, 0xd8, 0xbb, 0xed, 0x3a, 0x4e, 0x95, 0xb4, 0x53, 0x05, 0x43, 0x76, 0x85, 0x89, + 0xa8, 0xec, 0x08, 0x21, 0x59, 0x91, 0x41, 0x78, 0xaa, 0x02, 0x02, 0x0a, 0x02, 0x0a, 0x02, 0x0a, + 0x02, 0xaa, 0x21, 0x8e, 0x8a, 0x40, 0x34, 0x22, 0x8e, 0x4a, 0x55, 0xfe, 0x89, 0x97, 0x2a, 0xe0, + 0x9f, 0xc4, 0x47, 0x4a, 0x7a, 0x96, 0x7d, 0xd0, 0x4f, 0xd0, 0xcf, 0x0a, 0xd2, 0xcf, 0x07, 0x3b, + 0xe0, 0x91, 0xe1, 0xe8, 0xd3, 0xd4, 0x83, 0xf2, 0x58, 0xe8, 0xcb, 0x8e, 0x41, 0xaf, 0x40, 0xaf, + 0x40, 0xaf, 0x40, 0xaf, 0x40, 0xaf, 0xa6, 0xb7, 0xcd, 0xf6, 0x25, 0xc9, 0xc6, 0x79, 0xf9, 0xd8, + 0x38, 0x94, 0xd0, 0xd7, 0x74, 0x2d, 0x2b, 0xc7, 0xb1, 0x9e, 0x76, 0xee, 0xa1, 0x25, 0x71, 0xef, + 0x16, 0xf6, 0xf0, 0x40, 0x6e, 0xf1, 0x01, 0xce, 0x02, 0x57, 0x7a, 0x61, 0xbb, 0xda, 0xd6, 0x97, + 0xba, 0x7e, 0x38, 0xf8, 0xf5, 0xa5, 0xa1, 0x1f, 0x0e, 0x26, 0xdf, 0x36, 0x92, 0xff, 0xfd, 0x6c, + 0x8e, 0x7f, 0x35, 0xbf, 0xd4, 0xf5, 0xd6, 0xf4, 0xb7, 0xcd, 0xbd, 0x2f, 0x75, 0x7d, 0x6f, 0xb0, + 0xbd, 0xf5, 0xf5, 0xeb, 0xbb, 0x75, 0x3f, 0xb3, 0xfd, 0x73, 0x77, 0x2c, 0xaf, 0xec, 0xc7, 0x40, + 0xe6, 0xb6, 0x5d, 0x5c, 0xf5, 0xfe, 0x2e, 0x6c, 0xef, 0xfe, 0xbb, 0x25, 0x6b, 0xf7, 0xb6, 0xff, + 0x55, 0xab, 0x5a, 0x71, 0xae, 0xb7, 0x15, 0x16, 0x9b, 0x6d, 0x88, 0x4d, 0xd1, 0x62, 0x33, 0xb9, + 0x45, 0x86, 0x3e, 0xec, 0xea, 0x1f, 0x06, 0x3f, 0x1b, 0x6f, 0x5b, 0xe3, 0xce, 0xf6, 0xcf, 0xfd, + 0xf1, 0xcb, 0x5f, 0xfe, 0x7a, 0xed, 0xcf, 0x1a, 0x6f, 0xf7, 0xc7, 0x9d, 0x25, 0xff, 0xd2, 0x1e, + 0x77, 0x56, 0x6c, 0x63, 0x6f, 0xbc, 0xb5, 0xf0, 0xa7, 0xf1, 0xef, 0x9b, 0xcb, 0x3e, 0xd0, 0x5a, + 0xf2, 0x81, 0xdd, 0x65, 0x1f, 0xd8, 0x5d, 0xf2, 0x81, 0xa5, 0x43, 0x6a, 0x2e, 0xf9, 0xc0, 0xde, + 0xf8, 0xd7, 0xc2, 0xdf, 0x6f, 0xbd, 0xfe, 0xa7, 0xed, 0xf1, 0xf6, 0xaf, 0x65, 0xff, 0xb6, 0x3f, + 0xfe, 0xd5, 0xd9, 0xde, 0x86, 0x22, 0x11, 0xa6, 0x48, 0x70, 0x9c, 0xe5, 0x1f, 0xe7, 0xea, 0x29, + 0x56, 0xd5, 0xed, 0x8f, 0x82, 0x19, 0xb0, 0xd4, 0x22, 0x5b, 0xf2, 0x8b, 0x6b, 0x95, 0xa2, 0xa8, + 0x56, 0x01, 0xc5, 0xb4, 0x0a, 0x28, 0xa2, 0xa5, 0xb6, 0xa5, 0x3c, 0xf0, 0x22, 0xce, 0x02, 0xdd, + 0xb6, 0xe4, 0xdb, 0xca, 0x9f, 0xba, 0x86, 0xb5, 0x7c, 0x3d, 0x94, 0x02, 0x6b, 0x39, 0xe1, 0xe1, + 0x80, 0xb5, 0x1c, 0xd6, 0xf2, 0x95, 0x2c, 0xbc, 0x08, 0x46, 0xca, 0xd5, 0x15, 0x82, 0x91, 0x28, + 0x3b, 0x45, 0x30, 0x12, 0x82, 0x91, 0x04, 0x1d, 0x29, 0x24, 0x75, 0x42, 0x30, 0x52, 0xc9, 0x8c, + 0x01, 0x28, 0x67, 0xa7, 0x6d, 0x4a, 0x75, 0x58, 0x81, 0xc5, 0x86, 0xd5, 0xa8, 0xb3, 0x2a, 0x8f, + 0x99, 0x4b, 0x67, 0xe4, 0x82, 0x99, 0xb8, 0x70, 0x06, 0x8e, 0xfa, 0xab, 0x2a, 0x30, 0x6c, 0xd4, + 0x5f, 0x2d, 0x8d, 0xc2, 0x12, 0xce, 0x9c, 0xd3, 0xdb, 0xe2, 0x30, 0x63, 0x18, 0xb0, 0xa1, 0xc8, + 0xfb, 0x32, 0xf3, 0xac, 0xef, 0x0b, 0xec, 0xa3, 0x3f, 0xd5, 0xb9, 0xef, 0xde, 0xed, 0x4c, 0x34, + 0xee, 0xce, 0xa2, 0x6c, 0x56, 0x45, 0x37, 0xbe, 0x29, 0xf1, 0x09, 0x8d, 0x85, 0x92, 0x0c, 0xcd, + 0x27, 0xd6, 0xcf, 0x24, 0xde, 0xaf, 0x54, 0x88, 0x1f, 0x49, 0x82, 0xdf, 0x48, 0x82, 0x9f, 0x88, + 0xfa, 0xc4, 0x0a, 0x06, 0xff, 0x45, 0x82, 0x7e, 0x01, 0x52, 0xbb, 0x16, 0xf2, 0x20, 0x32, 0xb9, + 0x3b, 0x55, 0x0f, 0xbd, 0xd9, 0x88, 0x6e, 0xae, 0xe6, 0x86, 0x77, 0xd3, 0xf3, 0x1f, 0x5a, 0x37, + 0xdd, 0xc9, 0xa0, 0x6e, 0x3e, 0x07, 0x81, 0xff, 0x31, 0x19, 0xce, 0x9b, 0x72, 0xca, 0x41, 0x9a, + 0x96, 0x88, 0xce, 0x65, 0x8d, 0xfd, 0xe0, 0x81, 0xa1, 0x47, 0x6e, 0xc8, 0x8d, 0x5b, 0x87, 0x56, + 0xcb, 0xd7, 0x02, 0x36, 0x64, 0x01, 0x73, 0x4d, 0x7a, 0x7b, 0xb1, 0x80, 0x8b, 0x33, 0x83, 0x20, + 0x97, 0x1f, 0x8e, 0xb4, 0xbd, 0xfd, 0xc3, 0x03, 0x4d, 0xd7, 0x3e, 0x4f, 0xd4, 0x8a, 0x76, 0x99, + 0xa8, 0x15, 0xed, 0x92, 0x59, 0x91, 0x6b, 0x19, 0xae, 0xf9, 0xa8, 0xf5, 0x03, 0x8f, 0x7b, 0xa6, + 0xe7, 0x7c, 0x75, 0xb7, 0x3e, 0x5f, 0x5e, 0xf6, 0xb7, 0xb5, 0xcf, 0x2c, 0x08, 0x6d, 0xcf, 0xd5, + 0x76, 0xb5, 0xa1, 0x17, 0x68, 0xbd, 0xfe, 0x43, 0x4b, 0x33, 0x5c, 0x2b, 0xfe, 0x46, 0x44, 0x36, + 0x2c, 0xd1, 0xa0, 0x7f, 0x1e, 0xec, 0x3f, 0x6d, 0xa2, 0x20, 0x74, 0x29, 0x0b, 0xe7, 0x3f, 0xc3, + 0xf7, 0xf4, 0xbb, 0x5c, 0x76, 0xe4, 0xf5, 0xa6, 0x5c, 0x46, 0x42, 0x2a, 0xf9, 0x25, 0x48, 0x9f, + 0x4a, 0xd7, 0xa3, 0x34, 0xe7, 0x27, 0xff, 0x2e, 0xe7, 0x6b, 0x21, 0xe7, 0xae, 0xce, 0xf0, 0x7c, + 0x6e, 0x8b, 0x09, 0x2d, 0x60, 0xa7, 0x07, 0xe8, 0x52, 0x00, 0xb9, 0x00, 0x00, 0x2e, 0x00, 0x70, + 0xe7, 0x3d, 0x32, 0xdd, 0xe8, 0x2e, 0x5e, 0x46, 0x66, 0x91, 0x80, 0x0c, 0x1a, 0x09, 0x92, 0x82, + 0x89, 0x1d, 0xcf, 0xd4, 0xed, 0x61, 0x67, 0x4e, 0x1e, 0xbc, 0xf8, 0xc5, 0xf4, 0xe7, 0xe7, 0x32, + 0x63, 0xf1, 0x77, 0xc9, 0xaf, 0xfc, 0x4e, 0x22, 0x3f, 0x26, 0xdf, 0x3e, 0x49, 0x91, 0x67, 0x3f, + 0x13, 0x29, 0xe9, 0xda, 0x31, 0x0b, 0xcd, 0xc0, 0xf6, 0xa7, 0x72, 0xb5, 0xd6, 0xb5, 0x2c, 0x3b, + 0xfe, 0xde, 0x70, 0xb4, 0x5e, 0x5f, 0x8b, 0xfb, 0xd2, 0x86, 0xc6, 0xc8, 0x76, 0x1e, 0xb5, 0x89, + 0x50, 0x8c, 0x82, 0x44, 0x04, 0xc7, 0x6a, 0xf1, 0xab, 0xfb, 0x34, 0x13, 0xaa, 0xd1, 0xcc, 0x6c, + 0x36, 0x44, 0xcd, 0x51, 0x1b, 0x98, 0x45, 0x18, 0x94, 0x85, 0x19, 0x90, 0x45, 0x61, 0x47, 0xe1, + 0x06, 0x62, 0xe1, 0x40, 0x51, 0xa4, 0x01, 0xb8, 0x5c, 0xa4, 0xef, 0xd8, 0xa6, 0xb5, 0x64, 0xd5, + 0x12, 0x04, 0x43, 0x7e, 0xa2, 0x52, 0xc7, 0x56, 0xdc, 0x3a, 0xf1, 0x5e, 0xbf, 0x10, 0x70, 0x27, + 0xae, 0xe9, 0x78, 0xa1, 0xed, 0xde, 0xc5, 0x02, 0x8d, 0x1b, 0xb6, 0xcb, 0x82, 0x04, 0xe3, 0xc7, + 0xb8, 0x5f, 0x4b, 0xac, 0x1b, 0xa1, 0x76, 0x6f, 0xb8, 0x96, 0xc3, 0x2c, 0xed, 0xf6, 0x51, 0xe3, + 0xf7, 0x76, 0xf8, 0xd5, 0xed, 0xf5, 0xb5, 0x54, 0xd6, 0x51, 0x8f, 0x8f, 0x56, 0xe4, 0x09, 0x13, + 0x7d, 0x22, 0x45, 0xa0, 0x70, 0x51, 0x58, 0x04, 0x9d, 0x16, 0xea, 0x3b, 0x2b, 0x86, 0x4b, 0x0b, + 0xf2, 0x95, 0x95, 0xdb, 0xf3, 0x20, 0xd0, 0x6e, 0x26, 0xc1, 0x7e, 0x26, 0xce, 0x8e, 0xa6, 0xa4, + 0x3d, 0x4d, 0x96, 0x20, 0x28, 0xc2, 0xbe, 0x26, 0x5d, 0x36, 0xa8, 0x6a, 0x6f, 0x13, 0x23, 0x77, + 0xc4, 0xb5, 0x3a, 0xa8, 0xb6, 0x7f, 0xa3, 0x60, 0x4b, 0xd6, 0x20, 0xaf, 0x59, 0x82, 0xd6, 0x2e, + 0x29, 0xd3, 0x1e, 0x49, 0x20, 0x88, 0xd6, 0xf7, 0xdb, 0xe5, 0xbb, 0xcf, 0xd9, 0xf7, 0x3a, 0xdb, + 0x27, 0x33, 0xa2, 0x09, 0xaa, 0x53, 0x21, 0xe3, 0x34, 0x64, 0xdb, 0x90, 0xf5, 0x97, 0x33, 0xc3, + 0x52, 0xd6, 0xcc, 0x19, 0x8b, 0xc9, 0xb6, 0x84, 0x29, 0x36, 0x99, 0xb6, 0x93, 0x71, 0x33, 0xf3, + 0x51, 0xb4, 0xdc, 0x54, 0x8c, 0x82, 0x72, 0x91, 0x51, 0x2b, 0x2a, 0xe4, 0x44, 0x4e, 0x95, 0xc8, + 0x61, 0x0f, 0x25, 0xf5, 0x91, 0x2b, 0x7c, 0xf2, 0x5a, 0x7d, 0x6a, 0xd6, 0xbd, 0xe9, 0xeb, 0xa6, + 0x63, 0x4f, 0x26, 0x9f, 0x73, 0xa3, 0x67, 0x27, 0x6f, 0xbe, 0xd1, 0x9c, 0x3b, 0x43, 0x59, 0xdc, + 0xa1, 0x96, 0x78, 0x36, 0x6a, 0x85, 0x62, 0x08, 0x9a, 0x38, 0x6b, 0x32, 0x9b, 0x0f, 0xa5, 0x8d, + 0x87, 0xdc, 0xa6, 0x43, 0x4d, 0xdd, 0x84, 0xd9, 0x6c, 0x84, 0xf1, 0x30, 0x11, 0x36, 0x99, 0x62, + 0xbd, 0xc1, 0x64, 0x71, 0xc7, 0x02, 0x0a, 0xdd, 0x12, 0x15, 0xb2, 0x1d, 0x97, 0x8c, 0x66, 0x3c, + 0xde, 0x79, 0x5c, 0xf7, 0x4c, 0xdd, 0xf4, 0x46, 0x7e, 0x82, 0x03, 0x2d, 0xdd, 0x61, 0xc6, 0x30, + 0x6e, 0x7c, 0x5c, 0x14, 0x42, 0xcf, 0x81, 0x4a, 0x98, 0x6b, 0xdc, 0x3a, 0xcc, 0xa2, 0xd3, 0x56, + 0xb3, 0x06, 0xcb, 0xa4, 0xa9, 0xf2, 0x57, 0xcc, 0x87, 0xa2, 0x82, 0xa2, 0x82, 0xa2, 0x82, 0xa2, + 0x82, 0xa2, 0x2a, 0x4a, 0x51, 0xdd, 0x05, 0x06, 0x8f, 0x6c, 0xee, 0x45, 0xa1, 0x6e, 0x04, 0xbe, + 0x6e, 0x98, 0x26, 0xf3, 0x39, 0xa5, 0xe2, 0x5a, 0xd6, 0x01, 0x24, 0x3f, 0x24, 0x3f, 0x24, 0x3f, + 0x24, 0xbf, 0xb8, 0x25, 0x12, 0xe0, 0x29, 0x17, 0xe0, 0x19, 0x17, 0x10, 0xb9, 0x77, 0xf9, 0xe1, + 0x48, 0x3b, 0x68, 0xb6, 0x3b, 0x5a, 0xd7, 0xd5, 0x4e, 0xf8, 0x3d, 0x0b, 0x5c, 0xc6, 0xb5, 0xa9, + 0xbb, 0x43, 0xbb, 0x64, 0xa1, 0xe7, 0x44, 0x49, 0xd0, 0xe4, 0xcc, 0xed, 0xa9, 0x58, 0x90, 0x9f, + 0x28, 0xc7, 0xb5, 0xdc, 0x38, 0xbf, 0xb5, 0x37, 0xa9, 0x72, 0x7e, 0xd2, 0x01, 0x70, 0x61, 0x79, + 0x71, 0xe1, 0x88, 0x47, 0x74, 0x18, 0x30, 0x6e, 0x0c, 0x78, 0x0f, 0x78, 0x0f, 0x78, 0xaf, 0x44, + 0x78, 0x2f, 0xb2, 0x5d, 0xde, 0x68, 0x13, 0xc2, 0xbd, 0x36, 0x41, 0x53, 0xb4, 0x59, 0x1e, 0x09, + 0xb1, 0x95, 0x88, 0x2c, 0x8d, 0x69, 0xca, 0xbc, 0x36, 0x71, 0xb5, 0x0d, 0xe1, 0x19, 0xf1, 0xc4, + 0x65, 0xbc, 0x23, 0x0c, 0x97, 0x15, 0x92, 0x06, 0xf1, 0x69, 0xcf, 0xf6, 0xf6, 0x76, 0xf7, 0xb0, + 0x6d, 0xc0, 0x94, 0x60, 0x9c, 0x13, 0x32, 0xb3, 0x7f, 0xd8, 0xe8, 0x68, 0x49, 0xc0, 0x5d, 0xcc, + 0x64, 0xc0, 0x2d, 0x0b, 0xe6, 0x96, 0x4b, 0xb6, 0x03, 0x37, 0x1e, 0x2c, 0x52, 0xc6, 0x27, 0xab, + 0x1b, 0xa8, 0x3a, 0x8d, 0xdd, 0x2c, 0x71, 0x94, 0xaa, 0xcb, 0xec, 0xbb, 0xfb, 0x5b, 0x2f, 0x08, + 0xf3, 0x07, 0xaa, 0x3e, 0x35, 0x85, 0x58, 0x55, 0xc4, 0xaa, 0x16, 0xc2, 0xbf, 0x15, 0x8b, 0x55, + 0x9d, 0xdd, 0x18, 0x3a, 0xeb, 0x59, 0xda, 0x22, 0x8d, 0x09, 0xad, 0x01, 0x13, 0x1a, 0x4c, 0x68, + 0x9b, 0x68, 0x42, 0xa3, 0x4a, 0x3e, 0x90, 0xf7, 0x15, 0xc8, 0xd2, 0xc3, 0x9b, 0xeb, 0x55, 0x88, + 0xa0, 0xeb, 0x4e, 0x7e, 0xed, 0x45, 0x5c, 0x7f, 0x61, 0x62, 0x40, 0x26, 0xf5, 0x44, 0xee, 0x12, + 0x41, 0x14, 0xb3, 0xac, 0xb9, 0x4b, 0x6c, 0x81, 0x99, 0x4b, 0xc8, 0xd3, 0x55, 0x08, 0xca, 0xbd, + 0x8f, 0xbc, 0x20, 0x32, 0xc5, 0x8d, 0x34, 0xb1, 0x23, 0x4d, 0xfc, 0xc8, 0x10, 0x43, 0xb4, 0xe2, + 0x88, 0x58, 0x2c, 0xa5, 0x0b, 0x20, 0x2c, 0x57, 0xfe, 0x7c, 0x49, 0xfa, 0x96, 0xc0, 0x92, 0xf4, + 0x22, 0x4b, 0xcf, 0x0b, 0x2f, 0x31, 0x5f, 0x4b, 0x8a, 0x4f, 0x0f, 0x7e, 0x7d, 0x69, 0xe8, 0x87, + 0x83, 0xc9, 0xb7, 0x8d, 0xe4, 0x7f, 0x3f, 0x9b, 0xe3, 0x5f, 0xcd, 0x2f, 0x75, 0xbd, 0x35, 0xfd, + 0x6d, 0x73, 0xef, 0x4b, 0x5d, 0xdf, 0x1b, 0x6c, 0x6f, 0x7d, 0xfd, 0xfa, 0x6e, 0xdd, 0xcf, 0x6c, + 0xff, 0xdc, 0x1d, 0xd3, 0x1f, 0xeb, 0x81, 0x88, 0xe5, 0x96, 0x51, 0x08, 0x7d, 0x56, 0xf0, 0x5c, + 0xc2, 0xaa, 0x8b, 0x28, 0xf0, 0x3d, 0xd8, 0xe8, 0x74, 0xf1, 0xc2, 0x0c, 0xdd, 0xe2, 0xa4, 0x36, + 0xa5, 0x6b, 0xda, 0xb1, 0xdd, 0x6f, 0xba, 0x63, 0x3c, 0xb2, 0x20, 0x95, 0xa8, 0xc2, 0xb0, 0xe0, + 0x2b, 0x7d, 0x01, 0x1b, 0x02, 0x1b, 0x02, 0x1b, 0x6e, 0x0c, 0x36, 0x3c, 0x33, 0x5c, 0xcb, 0xe0, + 0x5e, 0xf0, 0x28, 0x20, 0xb1, 0xa3, 0x78, 0xdc, 0xe9, 0xdf, 0x3f, 0x86, 0xc0, 0x9d, 0xbf, 0xc3, + 0x9d, 0x86, 0x3e, 0xec, 0xea, 0x1f, 0x62, 0x04, 0xb3, 0xd5, 0x79, 0xfe, 0xf3, 0xf6, 0xff, 0xdd, + 0xfe, 0x7f, 0x80, 0x8c, 0xf3, 0x90, 0xf1, 0xcf, 0xeb, 0x05, 0xac, 0x07, 0xac, 0x37, 0x46, 0xad, + 0x89, 0x5c, 0x41, 0x12, 0x69, 0xdc, 0x40, 0xfa, 0x5d, 0xae, 0xb8, 0x09, 0xfa, 0xed, 0x21, 0xd8, + 0x1a, 0x4a, 0x03, 0x2e, 0xbd, 0xe1, 0x96, 0x18, 0x94, 0xc3, 0xff, 0x03, 0xff, 0x8f, 0x6c, 0x70, + 0x5d, 0x2e, 0x21, 0x4c, 0x0e, 0x74, 0x05, 0x16, 0x1f, 0x15, 0x51, 0x6c, 0xf4, 0x95, 0xe2, 0xa2, + 0xb6, 0x5f, 0x25, 0x71, 0x3e, 0x29, 0x1d, 0x4e, 0x2e, 0xd1, 0x27, 0xcd, 0x96, 0xdc, 0xa9, 0xdf, + 0x84, 0x50, 0x87, 0x50, 0xdf, 0x40, 0xa1, 0x0e, 0xa7, 0x3e, 0x0c, 0xb7, 0x82, 0xc5, 0x8c, 0x68, + 0x71, 0x23, 0x4d, 0xec, 0x48, 0x13, 0x3f, 0x32, 0xc4, 0x10, 0xbd, 0xc9, 0x40, 0x83, 0x53, 0xff, + 0x37, 0x80, 0x05, 0x4e, 0x7d, 0x38, 0xf5, 0x57, 0xea, 0x05, 0x4e, 0x7d, 0x11, 0xc2, 0x09, 0xbe, + 0x6b, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0xf5, 0x20, 0x10, 0x7c, 0xd7, 0xd5, 0x86, 0x57, 0xf0, + 0x5d, 0xaf, 0x8e, 0x8c, 0xaa, 0xe0, 0xbb, 0x2e, 0x25, 0xa4, 0xf1, 0x02, 0xfb, 0x4e, 0x44, 0x82, + 0x9f, 0x54, 0xa1, 0x4e, 0xda, 0x07, 0x74, 0x01, 0x74, 0x01, 0x74, 0x81, 0xf5, 0x86, 0xec, 0xb4, + 0xcf, 0x82, 0x2b, 0x74, 0x21, 0x02, 0xe6, 0x19, 0xc2, 0x68, 0x09, 0x68, 0xfb, 0xc4, 0x8d, 0x46, + 0xe2, 0x6e, 0xd4, 0xb5, 0x77, 0xc5, 0x03, 0xdb, 0xbd, 0x13, 0x5a, 0x55, 0xb5, 0x56, 0x8f, 0xf7, + 0xe1, 0xe2, 0xfa, 0xaf, 0x93, 0x4b, 0x91, 0xf5, 0x61, 0x1b, 0x71, 0x2f, 0x57, 0xd7, 0xdd, 0xeb, + 0xde, 0x91, 0xc8, 0x6e, 0x9a, 0x71, 0x37, 0xc7, 0xff, 0x9c, 0x77, 0xcf, 0x7a, 0x47, 0x62, 0x0a, + 0x9d, 0x8e, 0xdf, 0x8a, 0xda, 0xec, 0x1e, 0x41, 0x71, 0xb0, 0xdf, 0x76, 0x31, 0x5b, 0x17, 0x32, + 0x6f, 0xe9, 0xab, 0xbd, 0x4c, 0x8e, 0x12, 0xb9, 0xf2, 0x7d, 0xae, 0xcb, 0x26, 0x07, 0xa9, 0xa3, + 0x35, 0x14, 0x29, 0x39, 0x8b, 0x30, 0xc1, 0x95, 0x14, 0x6e, 0x15, 0xc2, 0x04, 0x27, 0xe1, 0x12, + 0x95, 0x28, 0xe5, 0x9b, 0x37, 0x61, 0xc5, 0xbf, 0xd9, 0x23, 0x89, 0xdb, 0xb7, 0x76, 0x6a, 0x87, + 0xbc, 0xcb, 0x39, 0x51, 0xfa, 0x8b, 0x33, 0xdb, 0x3d, 0x71, 0x58, 0x8c, 0xec, 0x88, 0x52, 0x54, + 0xd6, 0xce, 0x8c, 0x1f, 0x73, 0x2d, 0x36, 0x0e, 0x5a, 0xad, 0xf6, 0x7e, 0xab, 0x55, 0xdf, 0xdf, + 0xdd, 0xaf, 0x1f, 0xee, 0xed, 0x35, 0xda, 0x0d, 0x82, 0x44, 0x9b, 0xb5, 0x8b, 0xc0, 0x62, 0x01, + 0xb3, 0xde, 0xc7, 0x6b, 0xea, 0x46, 0x8e, 0x43, 0xd9, 0xe4, 0xa7, 0x90, 0x05, 0x24, 0x39, 0x35, + 0x91, 0x81, 0x32, 0x23, 0x12, 0x46, 0xcd, 0x83, 0x72, 0xb2, 0x41, 0xd4, 0x3c, 0x20, 0x34, 0xa6, + 0x8d, 0x37, 0xa6, 0x36, 0xfc, 0x22, 0x30, 0x90, 0x5b, 0x1c, 0xfe, 0x7c, 0xd6, 0x2b, 0x92, 0x6e, + 0x96, 0xeb, 0x3c, 0x94, 0x39, 0xef, 0xa6, 0x1f, 0x78, 0x3f, 0x1e, 0x75, 0x23, 0xf0, 0xf3, 0xe7, + 0xdd, 0x7c, 0x6a, 0x0a, 0x79, 0x37, 0x91, 0x77, 0x33, 0x9b, 0xb6, 0xdd, 0xac, 0xbc, 0x9b, 0x44, + 0x49, 0xf9, 0x68, 0x93, 0xf1, 0x21, 0xe7, 0x66, 0x81, 0x38, 0x1a, 0x39, 0x37, 0xb5, 0xea, 0xe4, + 0xdc, 0x1c, 0x79, 0x96, 0x80, 0xb7, 0x39, 0x49, 0xab, 0x54, 0x4f, 0x09, 0x08, 0x4b, 0x6b, 0x3f, + 0x35, 0xda, 0xbb, 0xea, 0xbe, 0x3f, 0x3d, 0xa1, 0x21, 0x42, 0x03, 0xbc, 0x2c, 0x2d, 0x8d, 0xb0, + 0x93, 0x69, 0x3c, 0xc0, 0x23, 0x24, 0x41, 0xe6, 0x80, 0xd2, 0xbf, 0x2c, 0x65, 0x6e, 0x34, 0x62, + 0xc1, 0x84, 0xd9, 0x09, 0x78, 0x5d, 0x4a, 0xe8, 0x13, 0x16, 0xe3, 0x0b, 0x16, 0xeb, 0x03, 0x9e, + 0xf8, 0x7e, 0x67, 0x22, 0x5a, 0x80, 0x7f, 0x3c, 0xf1, 0xfa, 0x5e, 0x9e, 0x9c, 0x5d, 0x5c, 0x9f, + 0xdc, 0x5c, 0x9c, 0x9f, 0xfe, 0x23, 0xa2, 0x8f, 0xc4, 0xe5, 0xdb, 0x3d, 0x3d, 0xad, 0x95, 0x3b, + 0x94, 0x42, 0x98, 0x7b, 0x37, 0x99, 0xbb, 0x10, 0x97, 0x6e, 0x7a, 0x32, 0x84, 0x38, 0x73, 0x9f, + 0x9d, 0x0b, 0x6a, 0x4f, 0x6e, 0x55, 0x3d, 0xa4, 0x02, 0xdc, 0x23, 0x69, 0xdb, 0xf4, 0x6e, 0x92, + 0xd9, 0x97, 0xc0, 0x00, 0xa2, 0xcb, 0x0f, 0x47, 0x8d, 0x7a, 0x73, 0xbf, 0xa3, 0x7d, 0x0a, 0x6d, + 0xf7, 0x4e, 0xeb, 0x5e, 0xf6, 0x35, 0xee, 0x69, 0xbd, 0x91, 0x3f, 0x71, 0xc7, 0x69, 0xd7, 0x81, + 0xe1, 0x86, 0xbe, 0x11, 0xc4, 0xdf, 0x5f, 0x45, 0xb7, 0x2e, 0xe3, 0xda, 0x47, 0x83, 0xb3, 0xef, + 0xc6, 0x63, 0xa8, 0x78, 0x90, 0x9d, 0x28, 0x8f, 0x8a, 0x34, 0x7c, 0xf4, 0x2a, 0x4e, 0xca, 0xb3, + 0x9f, 0x1b, 0x13, 0xb5, 0x31, 0xd8, 0x88, 0xa8, 0x0d, 0xe1, 0x59, 0xb7, 0x54, 0x0f, 0xaf, 0x50, + 0xc7, 0x1b, 0x96, 0x7a, 0x03, 0x48, 0x92, 0x68, 0x15, 0x53, 0x50, 0x9c, 0x26, 0xbb, 0x0a, 0x69, + 0x56, 0x15, 0x72, 0xeb, 0x6c, 0x13, 0xd6, 0xd9, 0xe2, 0x0d, 0x14, 0xb0, 0xce, 0xae, 0x4e, 0x50, + 0x60, 0x9d, 0x25, 0x21, 0x78, 0xb0, 0xce, 0x16, 0x23, 0xe4, 0x84, 0x09, 0x3b, 0xd1, 0x84, 0x04, + 0xd6, 0x59, 0x75, 0x6c, 0x06, 0xb0, 0xce, 0xc2, 0x3a, 0xfb, 0x6a, 0xfb, 0xb0, 0xce, 0x3e, 0xed, + 0x23, 0xac, 0xb3, 0x2f, 0x5a, 0x87, 0x75, 0x76, 0xfd, 0x35, 0x83, 0x75, 0xf6, 0x85, 0x82, 0x80, + 0x75, 0x16, 0xd6, 0x59, 0x58, 0x67, 0x0b, 0x1a, 0x0f, 0x8c, 0x93, 0xeb, 0x1a, 0x27, 0x09, 0x9e, + 0xee, 0x21, 0x62, 0x9e, 0x7c, 0x5b, 0x6a, 0xb9, 0x8c, 0xb6, 0xab, 0x3e, 0x98, 0xe8, 0xc7, 0xdd, + 0x75, 0x03, 0xbf, 0xcc, 0xf1, 0xf9, 0xf9, 0x4c, 0xd0, 0x24, 0xa6, 0x67, 0xb2, 0xb8, 0xfc, 0x26, + 0xe2, 0xf2, 0xc5, 0x59, 0x53, 0x10, 0x97, 0xff, 0xc4, 0x92, 0xf2, 0xc7, 0xe5, 0x47, 0xb1, 0xa4, + 0x08, 0x29, 0x23, 0xf3, 0xa7, 0x2d, 0x22, 0x36, 0x5f, 0xf8, 0x15, 0x15, 0x85, 0xfd, 0xe1, 0xfd, + 0xd1, 0xaa, 0xe3, 0xfd, 0xb1, 0x5d, 0xdd, 0xb2, 0x43, 0xd3, 0x08, 0x2c, 0x66, 0xe9, 0xfe, 0x37, + 0x1e, 0x0a, 0x28, 0x8b, 0xb4, 0xd0, 0x05, 0xbc, 0x25, 0xa5, 0x11, 0x0e, 0xa2, 0x0d, 0x04, 0xf0, + 0x96, 0xa8, 0x63, 0xc3, 0x13, 0xe7, 0x2d, 0x99, 0xaa, 0xfd, 0x76, 0x4b, 0x80, 0xaf, 0x84, 0x30, + 0x7d, 0x6a, 0xed, 0xd2, 0x70, 0xef, 0x94, 0xb0, 0x32, 0x9e, 0xd9, 0xae, 0x38, 0x5b, 0xde, 0x67, + 0xc3, 0x89, 0x98, 0xb8, 0x34, 0x56, 0xb5, 0x0f, 0x81, 0x61, 0xc6, 0xf4, 0xfb, 0xd8, 0xbe, 0xb3, + 0xa9, 0xf2, 0xd0, 0xbc, 0x7e, 0xfc, 0xd8, 0x9d, 0xc1, 0xed, 0x07, 0x46, 0x92, 0xde, 0x45, 0xe0, + 0xcd, 0x7b, 0xbe, 0xb5, 0xc6, 0x0f, 0xf1, 0x5b, 0x2b, 0x26, 0x4f, 0x4f, 0xd5, 0x77, 0x1b, 0x31, + 0xb1, 0x2b, 0x6c, 0x03, 0x3c, 0x41, 0x2f, 0x94, 0xdf, 0xe5, 0x87, 0x23, 0xad, 0xd5, 0x3c, 0xdc, + 0xd5, 0x74, 0xed, 0xcc, 0x70, 0x8d, 0xbb, 0x89, 0xbf, 0xa0, 0xe7, 0x0e, 0xbd, 0x60, 0x94, 0x98, + 0x21, 0xb5, 0xf7, 0x46, 0xc8, 0xb4, 0xa1, 0x17, 0x68, 0xfc, 0x9e, 0x7d, 0x75, 0x13, 0x53, 0x9d, + 0xcb, 0x78, 0x9a, 0x4a, 0x47, 0xdb, 0xea, 0xf5, 0xb7, 0xe1, 0x14, 0x2a, 0x16, 0x06, 0xbe, 0x0a, + 0x07, 0x89, 0xb6, 0x16, 0x92, 0x4a, 0xf2, 0x78, 0x48, 0x2a, 0x08, 0xbb, 0x3a, 0x0b, 0x02, 0x2f, + 0x10, 0xc7, 0x9a, 0xe7, 0x9a, 0x07, 0x63, 0x06, 0x63, 0x06, 0x63, 0x06, 0x63, 0x06, 0x63, 0x06, + 0x63, 0x06, 0x63, 0x06, 0x63, 0x06, 0x63, 0x06, 0x63, 0x06, 0x63, 0x06, 0x63, 0x06, 0x63, 0x86, + 0xa4, 0x52, 0x89, 0x31, 0x0f, 0xbd, 0xe0, 0xfb, 0xc4, 0x11, 0xec, 0x99, 0x9c, 0x09, 0xe2, 0xcd, + 0x0b, 0x9d, 0x80, 0x3d, 0x83, 0x3d, 0x83, 0x3d, 0x83, 0x3d, 0x83, 0x3d, 0x83, 0x3d, 0x83, 0x3d, + 0x83, 0x3d, 0x83, 0x3d, 0x83, 0x3d, 0x83, 0x3d, 0x83, 0x3d, 0x83, 0x3d, 0x43, 0x52, 0xa9, 0xc9, + 0x9e, 0x85, 0xf9, 0x9c, 0x5f, 0x74, 0x01, 0xe6, 0x0c, 0xe6, 0x0c, 0xe6, 0x0c, 0xe6, 0x0c, 0xe6, + 0x0c, 0xe6, 0x0c, 0xe6, 0x0c, 0xe6, 0x0c, 0xe6, 0x0c, 0xe6, 0x0c, 0xe6, 0x0c, 0xe6, 0x0c, 0xe6, + 0x0c, 0x49, 0xa5, 0x12, 0x73, 0x1e, 0x45, 0x0e, 0xb7, 0x4d, 0x23, 0xe4, 0x22, 0xfd, 0xce, 0x0b, + 0x9d, 0x80, 0x3d, 0x83, 0x3d, 0x83, 0x3d, 0x83, 0x3d, 0x83, 0x3d, 0x83, 0x3d, 0x83, 0x3d, 0x83, + 0x3d, 0x83, 0x3d, 0x83, 0x3d, 0x57, 0x9f, 0x3d, 0x77, 0x56, 0x61, 0x58, 0xda, 0x8c, 0x60, 0x7d, + 0x75, 0x9f, 0x31, 0x2c, 0x4d, 0xd7, 0x6c, 0xff, 0xea, 0x31, 0xe4, 0x6c, 0x74, 0xc5, 0x0d, 0x1e, + 0xfe, 0x75, 0xd4, 0x73, 0xcf, 0x62, 0x4c, 0x7d, 0x41, 0x09, 0xa9, 0xc1, 0xad, 0x45, 0x70, 0x6b, + 0xa1, 0x1b, 0x0f, 0x29, 0xa7, 0x3a, 0xf3, 0x16, 0xe6, 0xb3, 0x7e, 0xd1, 0x05, 0x58, 0x37, 0x58, + 0x37, 0x58, 0x37, 0x58, 0x37, 0x58, 0x37, 0x58, 0x37, 0x58, 0x37, 0x58, 0x37, 0x58, 0x37, 0x58, + 0x37, 0x58, 0x77, 0x36, 0xf2, 0xd5, 0xff, 0x06, 0xce, 0xbd, 0x81, 0x9c, 0x3b, 0xd9, 0x76, 0x48, + 0x38, 0x35, 0x19, 0xb7, 0x40, 0x0f, 0x37, 0xfc, 0xda, 0x60, 0xd8, 0x60, 0xd8, 0x60, 0xd8, 0x60, + 0xd8, 0x60, 0xd8, 0x60, 0xd8, 0x60, 0xd8, 0x60, 0xd8, 0x60, 0xd8, 0x1b, 0xc3, 0xb0, 0x11, 0x15, + 0x8e, 0xa8, 0x70, 0x44, 0x85, 0x57, 0x89, 0x29, 0x0b, 0xf3, 0x48, 0xc3, 0x0f, 0x0d, 0x96, 0x0c, + 0x96, 0x0c, 0x96, 0x0c, 0x96, 0x0c, 0x96, 0x0c, 0x96, 0x0c, 0x96, 0x0c, 0x96, 0x0c, 0x96, 0x0c, + 0x96, 0x0c, 0x96, 0x0c, 0x96, 0x0c, 0x49, 0xa5, 0x16, 0x4b, 0xf6, 0x22, 0x2e, 0xbc, 0x40, 0xf4, + 0x2b, 0x7d, 0x80, 0x3b, 0x83, 0x3b, 0x83, 0x3b, 0x83, 0x3b, 0x83, 0x3b, 0x83, 0x3b, 0x83, 0x3b, + 0x83, 0x3b, 0x83, 0x3b, 0x83, 0x3b, 0x83, 0x3b, 0x83, 0x3b, 0x83, 0x3b, 0x43, 0x52, 0x29, 0xc5, + 0x9d, 0x45, 0x96, 0x88, 0x7e, 0xd1, 0x3e, 0x38, 0x33, 0x38, 0x33, 0x38, 0x33, 0x38, 0x33, 0x38, + 0x33, 0x38, 0x33, 0x38, 0x33, 0x38, 0x33, 0x38, 0x33, 0x38, 0x33, 0x38, 0x33, 0x38, 0x33, 0x38, + 0x33, 0x24, 0x95, 0x52, 0x9c, 0x59, 0x7c, 0x91, 0xe8, 0x57, 0x7b, 0x01, 0x7f, 0x06, 0x7f, 0x06, + 0x7f, 0x06, 0x7f, 0x06, 0x7f, 0x06, 0x7f, 0x06, 0x7f, 0x06, 0x7f, 0x06, 0x7f, 0x06, 0x7f, 0x06, + 0x7f, 0x06, 0x7f, 0x06, 0x7f, 0x86, 0xa4, 0x52, 0x94, 0x3f, 0x8b, 0xf3, 0x3b, 0xa3, 0x4e, 0x34, + 0xb8, 0x33, 0xb8, 0x33, 0xb8, 0x33, 0xb8, 0x33, 0xb8, 0x33, 0xb8, 0x33, 0xb8, 0x33, 0xb8, 0x33, + 0xb8, 0x33, 0xb8, 0x33, 0xb8, 0x33, 0xb8, 0x33, 0xb8, 0xb3, 0xca, 0xdc, 0x59, 0x7c, 0xa1, 0xe8, + 0x57, 0x7b, 0x01, 0x7f, 0x06, 0x7f, 0x06, 0x7f, 0x06, 0x7f, 0x06, 0x7f, 0x06, 0x7f, 0x06, 0x7f, + 0x06, 0x7f, 0x06, 0x7f, 0x06, 0x7f, 0x06, 0x7f, 0x06, 0x7f, 0x06, 0x7f, 0x86, 0xa4, 0x52, 0x94, + 0x3f, 0x8b, 0xf3, 0x3d, 0xa3, 0xde, 0x33, 0xb8, 0x33, 0xb8, 0x33, 0xb8, 0x33, 0xb8, 0x33, 0xb8, + 0x33, 0xb8, 0x33, 0xb8, 0x33, 0xb8, 0x33, 0xb8, 0x33, 0xb8, 0xf3, 0x5a, 0x04, 0xeb, 0xab, 0xbb, + 0x58, 0xfb, 0xf7, 0x22, 0xe2, 0xa8, 0xf9, 0x5c, 0x7d, 0x6e, 0xfd, 0xc7, 0xad, 0x87, 0xa4, 0x53, + 0x94, 0x7b, 0x8b, 0xf4, 0x58, 0xc3, 0x4f, 0x0d, 0xae, 0x0d, 0xae, 0x0d, 0xae, 0x0d, 0xae, 0x0d, + 0xae, 0x0d, 0xae, 0x0d, 0xae, 0x0d, 0xae, 0x0d, 0xae, 0x0d, 0xae, 0x0d, 0x3f, 0xf5, 0x66, 0x73, + 0x69, 0x70, 0x65, 0x55, 0xb9, 0xb2, 0x38, 0xef, 0x34, 0x7c, 0xd2, 0xe0, 0xc9, 0xe0, 0xc9, 0xe0, + 0xc9, 0xe0, 0xc9, 0xe0, 0xc9, 0xe0, 0xc9, 0xe0, 0xc9, 0xe0, 0xc9, 0xe0, 0xc9, 0xe0, 0xc9, 0xe0, + 0xc9, 0xe0, 0xc9, 0x90, 0x54, 0x12, 0x79, 0xf2, 0x9b, 0x02, 0x25, 0x65, 0xad, 0xeb, 0xba, 0x1e, + 0x4f, 0x8e, 0x07, 0xc9, 0xd5, 0xab, 0x85, 0xe6, 0x3d, 0x1b, 0x19, 0xbe, 0xc1, 0xef, 0xe3, 0x33, + 0xb9, 0xe3, 0xf9, 0xcc, 0x35, 0x13, 0x2e, 0xab, 0xdb, 0xf1, 0x79, 0x1b, 0x1a, 0x26, 0x0b, 0x77, + 0x5e, 0xfb, 0x76, 0x27, 0x8c, 0x6e, 0xe7, 0x7e, 0x3f, 0xff, 0xd3, 0x8e, 0xed, 0x3f, 0xb4, 0x76, + 0x42, 0x6e, 0x70, 0xb6, 0x33, 0x45, 0xef, 0x14, 0xbc, 0xbd, 0x16, 0xf2, 0x20, 0x32, 0xb9, 0x3b, + 0x15, 0x8d, 0xbd, 0x59, 0x77, 0x37, 0x57, 0x73, 0x7d, 0xdf, 0xf4, 0xfc, 0x87, 0xd6, 0xcd, 0xd1, + 0xac, 0xd7, 0x37, 0xc5, 0xec, 0x74, 0x8e, 0x5d, 0xae, 0x59, 0xf7, 0xa6, 0xaf, 0x9b, 0x8e, 0x3d, + 0x11, 0x13, 0xf9, 0xb6, 0x38, 0xd5, 0x23, 0xf3, 0x8d, 0xe6, 0x3c, 0x81, 0xc7, 0x6c, 0x68, 0x44, + 0x0e, 0x27, 0xd1, 0xa2, 0xb5, 0x04, 0x6c, 0xe5, 0xdb, 0xa5, 0x41, 0xce, 0xf9, 0xd0, 0x58, 0x82, + 0xc8, 0x2c, 0x40, 0x94, 0x96, 0x1f, 0x72, 0x8b, 0x0f, 0xb5, 0xd6, 0x17, 0x66, 0xe1, 0x11, 0xa6, + 0xd2, 0x45, 0x58, 0x74, 0x8a, 0xd5, 0x28, 0x64, 0x96, 0x9b, 0xf4, 0xb4, 0xdd, 0x7a, 0x9e, 0xc3, + 0x0c, 0x97, 0xe2, 0xbc, 0x4d, 0x2f, 0x67, 0xa3, 0xa1, 0xa0, 0x20, 0x67, 0x6e, 0x4c, 0x62, 0x2c, + 0x3a, 0x21, 0x3e, 0x6b, 0xb0, 0x4c, 0x02, 0x3c, 0xbe, 0x59, 0x90, 0xdf, 0x90, 0xdf, 0x90, 0xdf, + 0x90, 0xdf, 0x15, 0x93, 0xdf, 0x77, 0x81, 0xc1, 0x23, 0x9b, 0x7b, 0x51, 0xa8, 0x1b, 0x81, 0xaf, + 0x1b, 0xa6, 0xc9, 0x7c, 0x4e, 0x29, 0xcf, 0x97, 0x75, 0x00, 0x81, 0x08, 0x81, 0x08, 0x81, 0x08, + 0x81, 0x28, 0x6e, 0x89, 0x04, 0xd8, 0xd9, 0x05, 0xd8, 0xd7, 0x05, 0x38, 0x93, 0x2f, 0x3f, 0x1c, + 0x69, 0x07, 0xcd, 0x76, 0x47, 0xeb, 0xba, 0xda, 0x09, 0xbf, 0x9f, 0x18, 0x54, 0xbb, 0x96, 0x15, + 0xb0, 0x30, 0xd4, 0x2e, 0x59, 0xe8, 0x39, 0x51, 0x62, 0x7a, 0x9d, 0xd9, 0x58, 0x15, 0x8b, 0x92, + 0x10, 0x65, 0x29, 0x97, 0x1b, 0x28, 0xb1, 0xf6, 0x26, 0x95, 0x2d, 0xa6, 0x22, 0x77, 0x2b, 0x03, + 0x05, 0xe1, 0xd2, 0x88, 0x47, 0x74, 0xd0, 0x28, 0x6e, 0x0c, 0x30, 0x08, 0x30, 0x08, 0x30, 0xa8, + 0x44, 0x30, 0x28, 0xb2, 0x5d, 0xde, 0x68, 0x13, 0xa2, 0xa0, 0x36, 0x41, 0x53, 0xb4, 0x61, 0x57, + 0x84, 0x90, 0x43, 0x44, 0x98, 0x55, 0x1a, 0x83, 0xd3, 0x3e, 0x20, 0xd6, 0xbf, 0xa2, 0x23, 0x6d, + 0xc4, 0x45, 0xd8, 0x10, 0xc6, 0x51, 0x09, 0x89, 0x9f, 0x7a, 0xda, 0xb3, 0xbd, 0xbd, 0xdd, 0x3d, + 0x6c, 0x5b, 0xb5, 0xa0, 0x16, 0x88, 0x58, 0x76, 0x22, 0xb6, 0x7f, 0xd8, 0xe8, 0x68, 0x0b, 0x61, + 0x2d, 0xa0, 0x5c, 0x05, 0x51, 0xae, 0x25, 0xdb, 0x81, 0x1b, 0x4f, 0x45, 0xae, 0xde, 0x48, 0x94, + 0x30, 0x54, 0x81, 0x42, 0xa2, 0x03, 0x84, 0xb2, 0x1d, 0xaf, 0xf5, 0x97, 0x32, 0xc3, 0x32, 0xd6, + 0x22, 0xd7, 0x8d, 0x46, 0xb7, 0x2c, 0xc8, 0x61, 0xf3, 0x7f, 0xc2, 0xce, 0x4f, 0x6d, 0x65, 0xdc, + 0xd0, 0x99, 0xe5, 0x30, 0xe3, 0xc7, 0xf3, 0xf2, 0x58, 0x0a, 0xfe, 0xfa, 0x8c, 0xb7, 0x0e, 0x73, + 0x08, 0x4c, 0x2a, 0xc1, 0x4e, 0xce, 0x53, 0xc9, 0xa5, 0xf6, 0x02, 0x2f, 0x1d, 0xd6, 0x14, 0x11, + 0x40, 0xc7, 0x76, 0x90, 0xef, 0xb0, 0x98, 0xb3, 0x13, 0x4b, 0x64, 0x53, 0x9a, 0xb6, 0x47, 0x63, + 0x56, 0x6a, 0x54, 0xdd, 0xac, 0x34, 0x84, 0x59, 0x49, 0x84, 0x59, 0x69, 0xa8, 0xba, 0x59, 0x29, + 0xef, 0xb5, 0x7e, 0xa2, 0x3e, 0x44, 0xe1, 0x51, 0x0b, 0xa7, 0x97, 0x26, 0x4c, 0xea, 0x69, 0xc2, + 0x84, 0xe1, 0x52, 0x69, 0xa3, 0x04, 0x71, 0xaf, 0x29, 0x9c, 0xc5, 0x8b, 0xe8, 0xd2, 0x08, 0x3c, + 0x99, 0xc4, 0xb3, 0x22, 0x2f, 0xa2, 0x87, 0x78, 0x11, 0xbd, 0xee, 0x69, 0xa5, 0x0b, 0x47, 0x58, + 0x40, 0x35, 0x8d, 0x52, 0x2d, 0x21, 0xf1, 0x63, 0x97, 0xb4, 0xdd, 0xc7, 0x3b, 0x8f, 0xeb, 0x9e, + 0xa9, 0x9b, 0xde, 0xc8, 0x0f, 0x58, 0x18, 0x32, 0x4b, 0x77, 0x98, 0x31, 0x8c, 0x3b, 0x19, 0xe3, + 0x95, 0x91, 0xa6, 0xd5, 0x4e, 0x7e, 0x24, 0xc6, 0xe4, 0xfc, 0x0a, 0x8f, 0x1e, 0xf7, 0x79, 0xa6, + 0xce, 0x7e, 0xf0, 0x0e, 0x67, 0x0e, 0x1b, 0x31, 0x1e, 0x3c, 0xea, 0x9e, 0xab, 0x9b, 0xf7, 0x89, + 0x13, 0x48, 0x08, 0x16, 0x4c, 0x34, 0xb5, 0x00, 0x30, 0x58, 0x34, 0x0e, 0x1c, 0x6c, 0xcc, 0x43, + 0xb4, 0x27, 0xd3, 0xcb, 0xce, 0x94, 0x02, 0x2a, 0x18, 0x5d, 0x91, 0xce, 0x49, 0x0f, 0xd8, 0x90, + 0x8e, 0x13, 0x3f, 0x6f, 0x16, 0xd4, 0x18, 0xd4, 0x18, 0xd4, 0xb8, 0x78, 0x6a, 0x4c, 0x64, 0xf9, + 0x12, 0x63, 0x01, 0x23, 0xbe, 0xee, 0x20, 0x8c, 0x20, 0x8c, 0x20, 0x8c, 0x94, 0xe2, 0x63, 0x11, + 0x33, 0xd0, 0x1f, 0xab, 0x05, 0xfc, 0x40, 0x7d, 0xac, 0x68, 0xad, 0x51, 0xc2, 0x84, 0x8c, 0x48, + 0x61, 0x23, 0x5c, 0xe8, 0x88, 0x16, 0x3e, 0xd2, 0x84, 0x90, 0x34, 0x61, 0x24, 0x43, 0x28, 0xd1, + 0x0a, 0x27, 0x62, 0x21, 0x25, 0xce, 0xba, 0xb5, 0x70, 0xda, 0x1d, 0x66, 0x0c, 0xf3, 0x93, 0x92, + 0xdf, 0x22, 0x97, 0x7d, 0x01, 0x6d, 0xf7, 0x53, 0x06, 0x1b, 0x1f, 0x8b, 0xce, 0x1c, 0x33, 0x7d, + 0xf1, 0x8b, 0xe9, 0xcf, 0x49, 0x3a, 0x93, 0x52, 0x6f, 0xb5, 0x20, 0x2b, 0x9c, 0x3c, 0x6b, 0x1c, + 0xfd, 0x8d, 0xa2, 0x8c, 0x39, 0x9d, 0x37, 0x58, 0x88, 0x53, 0xd4, 0xcf, 0x7a, 0x81, 0xae, 0x86, + 0xae, 0x86, 0xae, 0x86, 0xae, 0x86, 0xae, 0x5e, 0x51, 0x57, 0x7f, 0x79, 0xd2, 0xd5, 0xff, 0x63, + 0x46, 0x41, 0xc0, 0x5c, 0xbe, 0xb5, 0xbd, 0xf3, 0xee, 0xdd, 0x93, 0x15, 0x7a, 0x30, 0xfd, 0xc8, + 0x73, 0x63, 0xf4, 0xe2, 0xef, 0xd2, 0x96, 0x2d, 0xf6, 0x03, 0x6a, 0x5f, 0x35, 0xb5, 0x5f, 0x2a, + 0x7b, 0x01, 0x99, 0x93, 0x6e, 0xf6, 0x25, 0xce, 0xf4, 0x24, 0xdc, 0x69, 0xb7, 0x44, 0xab, 0x10, + 0x3a, 0xef, 0x5e, 0x55, 0x27, 0x65, 0x33, 0x45, 0x0d, 0x4a, 0xee, 0x78, 0x97, 0xe2, 0xe4, 0x7b, + 0xe6, 0xd3, 0x22, 0x71, 0xf9, 0xd1, 0x6d, 0xd2, 0x98, 0x24, 0x0d, 0xa6, 0xc1, 0x19, 0xbd, 0x73, + 0x60, 0xd2, 0x6c, 0xc9, 0x7d, 0x03, 0x4d, 0xf8, 0x06, 0xd4, 0x81, 0xfa, 0xf0, 0x0d, 0xc0, 0x37, + 0x00, 0x7b, 0x03, 0xec, 0x0d, 0xb0, 0x37, 0xc0, 0xde, 0x00, 0x7b, 0x43, 0x39, 0x7c, 0x03, 0x30, + 0x81, 0x43, 0x25, 0x41, 0x25, 0x41, 0x25, 0x41, 0x25, 0x41, 0x25, 0x55, 0xcf, 0x04, 0x5e, 0x51, + 0xf6, 0x57, 0x21, 0x73, 0x5c, 0x8e, 0xa4, 0x0f, 0x02, 0xac, 0x71, 0x28, 0xe5, 0x93, 0x6b, 0x37, + 0xe5, 0x16, 0xf5, 0xf9, 0x94, 0x8e, 0xe2, 0x26, 0xfd, 0xb3, 0x4b, 0x36, 0x54, 0xf1, 0x35, 0x07, + 0x8d, 0x09, 0x97, 0xd4, 0x74, 0x4b, 0xfe, 0x7a, 0xa3, 0x89, 0xd7, 0x1b, 0xc5, 0x43, 0x4e, 0xbc, + 0xde, 0x58, 0x79, 0x42, 0x48, 0x6c, 0x40, 0xd1, 0x28, 0x12, 0x1b, 0x94, 0x81, 0x8b, 0xc3, 0x17, + 0x25, 0x9d, 0x6b, 0x23, 0xb1, 0x41, 0xfe, 0xd3, 0x5a, 0xfe, 0xc4, 0x06, 0xa0, 0x1c, 0xf2, 0x29, + 0x07, 0x01, 0x65, 0x44, 0xd2, 0x46, 0xfa, 0x7d, 0xa9, 0xe5, 0xe2, 0x3f, 0xeb, 0x93, 0x3e, 0x69, + 0x99, 0x22, 0xdf, 0x08, 0xdc, 0xe9, 0xbc, 0x3b, 0x2c, 0x6e, 0x67, 0x33, 0x6c, 0xe7, 0xea, 0xdb, + 0xb8, 0xde, 0xde, 0xad, 0xbe, 0x03, 0x6b, 0xac, 0x7e, 0xcd, 0xf6, 0x1f, 0xda, 0x6b, 0xaf, 0xf9, + 0x53, 0x30, 0x43, 0xfc, 0xe9, 0x35, 0xf7, 0x3a, 0x1b, 0xa3, 0xce, 0x0c, 0x30, 0xf3, 0x00, 0xc9, + 0xdc, 0x15, 0x25, 0xf2, 0x02, 0x43, 0x32, 0x00, 0x48, 0x06, 0xf4, 0x28, 0x2a, 0x42, 0x88, 0x95, + 0x25, 0x59, 0x19, 0x6b, 0xcd, 0x98, 0xd4, 0xd2, 0x61, 0x61, 0xfe, 0xbc, 0xb6, 0x4f, 0x4d, 0x21, + 0xad, 0x6d, 0xee, 0x72, 0x2c, 0x1b, 0x9c, 0xd6, 0xd6, 0xdf, 0x98, 0xb4, 0xb6, 0xd3, 0x1b, 0x43, + 0x67, 0xfd, 0x9d, 0x35, 0x88, 0xec, 0x3d, 0xc2, 0x2f, 0xa8, 0x28, 0x33, 0x08, 0xea, 0x25, 0x69, + 0xc8, 0xde, 0xf3, 0xa7, 0xc3, 0x8b, 0xec, 0x3d, 0x65, 0x13, 0x03, 0xb0, 0x8a, 0x16, 0x21, 0x26, + 0xca, 0x69, 0x15, 0xa5, 0x8f, 0xd0, 0xf7, 0x05, 0x86, 0xe6, 0xfb, 0x08, 0x80, 0x94, 0x13, 0x00, + 0xe9, 0x23, 0x00, 0xb2, 0x40, 0xf1, 0x23, 0x43, 0x0c, 0xd1, 0x8a, 0x23, 0x62, 0xb1, 0x94, 0x2e, + 0x80, 0xf8, 0x00, 0x48, 0xdb, 0x7f, 0x68, 0xeb, 0x34, 0x5c, 0xe4, 0xb7, 0x80, 0xe5, 0x40, 0x4c, + 0x14, 0x24, 0x67, 0x81, 0x4b, 0xea, 0x0a, 0x7f, 0xd6, 0xc1, 0xd6, 0xd6, 0x97, 0xba, 0x7e, 0x68, + 0xe8, 0xc3, 0xae, 0xfe, 0x61, 0xf0, 0xb3, 0xf1, 0xb6, 0x35, 0xee, 0x6c, 0xff, 0xdc, 0x1f, 0xbf, + 0xfc, 0xe5, 0xaf, 0xd7, 0xfe, 0xac, 0xf1, 0x76, 0x7f, 0xdc, 0x59, 0xf2, 0x2f, 0xed, 0x71, 0x67, + 0xc5, 0x36, 0xf6, 0xc6, 0x5b, 0x0b, 0x7f, 0x1a, 0xff, 0xbe, 0xb9, 0xec, 0x03, 0xad, 0x25, 0x1f, + 0xd8, 0x5d, 0xf6, 0x81, 0xdd, 0x25, 0x1f, 0x58, 0x3a, 0xa4, 0xe6, 0x92, 0x0f, 0xec, 0x8d, 0x7f, + 0x2d, 0xfc, 0xfd, 0xd6, 0xeb, 0x7f, 0xda, 0x1e, 0x6f, 0xff, 0x5a, 0xf6, 0x6f, 0xfb, 0xe3, 0x5f, + 0x9d, 0xed, 0x6d, 0xfa, 0x8b, 0x3e, 0x10, 0x71, 0x00, 0x2f, 0xae, 0x7a, 0x7f, 0x0b, 0x3f, 0x85, + 0xff, 0xc5, 0x31, 0x2c, 0xea, 0x18, 0xfe, 0x4b, 0xc0, 0x39, 0x44, 0xfa, 0x90, 0xcd, 0xcd, 0x1a, + 0x36, 0xc1, 0x65, 0xba, 0xc3, 0xdc, 0xbb, 0xc4, 0x15, 0x28, 0x88, 0x28, 0x3c, 0xef, 0x06, 0x9c, + 0x01, 0x9c, 0x01, 0x9c, 0x61, 0x63, 0x38, 0xc3, 0x99, 0xe1, 0x5a, 0x06, 0xf7, 0x82, 0x47, 0x3a, + 0x3b, 0xa1, 0x44, 0x3e, 0x12, 0xd9, 0x2e, 0x3f, 0x10, 0x48, 0x44, 0xf6, 0x04, 0x34, 0x4d, 0x5b, + 0xcc, 0xfe, 0xe5, 0x97, 0x98, 0x9b, 0xaf, 0x89, 0x2a, 0x76, 0xbf, 0xd0, 0xc9, 0xac, 0x90, 0x7a, + 0xfd, 0xad, 0xd8, 0x7e, 0x44, 0x17, 0x55, 0x5f, 0x3c, 0xb2, 0xa2, 0x8a, 0xac, 0x0b, 0x96, 0x10, + 0x2f, 0xa4, 0xc5, 0x0f, 0x79, 0x47, 0xa0, 0xd1, 0x3c, 0xc0, 0x21, 0x28, 0x85, 0xd2, 0x11, 0xd7, + 0x2a, 0xf8, 0xcd, 0x06, 0xf3, 0x1b, 0x2e, 0x02, 0x1f, 0xa4, 0xd8, 0x20, 0x69, 0x9d, 0xf8, 0x40, + 0x88, 0x78, 0x4e, 0x93, 0x36, 0xfe, 0xf1, 0xf4, 0xe2, 0x7d, 0xf7, 0xf4, 0xe6, 0xd3, 0x79, 0xef, + 0xa8, 0x7b, 0x75, 0x4d, 0x0b, 0x44, 0x07, 0xa0, 0x75, 0xa0, 0x75, 0xa0, 0x75, 0x1b, 0x43, 0xeb, + 0xe4, 0xba, 0x82, 0x74, 0x01, 0xb2, 0x76, 0x5e, 0xcc, 0x34, 0x5a, 0x02, 0xda, 0x3e, 0x71, 0xa3, + 0x91, 0xb8, 0x3b, 0x75, 0xed, 0x5d, 0xf1, 0xc0, 0x76, 0xef, 0x84, 0xc2, 0xe5, 0x5a, 0x3d, 0xde, + 0x89, 0x17, 0x7a, 0x43, 0x20, 0xfc, 0x6f, 0xc4, 0xdd, 0x9d, 0xf6, 0xce, 0xff, 0x7d, 0x73, 0x7a, + 0x71, 0x24, 0x4a, 0x55, 0x09, 0xe6, 0x31, 0xb5, 0x6b, 0xaf, 0x97, 0x08, 0x06, 0x81, 0xdb, 0xf2, + 0x62, 0x47, 0x84, 0xf2, 0x8a, 0xd7, 0xf6, 0xa3, 0xa3, 0x35, 0x14, 0xc1, 0xff, 0x63, 0xe0, 0x7f, + 0xa4, 0x47, 0x2f, 0xdd, 0x06, 0x09, 0x7b, 0x81, 0xd5, 0xde, 0x49, 0xdf, 0x52, 0xcc, 0xbe, 0xab, + 0x60, 0xf2, 0x6a, 0xc2, 0xa8, 0x36, 0xfa, 0x68, 0xb6, 0x8d, 0x4f, 0x15, 0x80, 0xa0, 0x58, 0x04, + 0xc5, 0x6a, 0x4a, 0xa4, 0x0a, 0xa0, 0x4f, 0xb7, 0x27, 0x22, 0xcd, 0x5e, 0x9a, 0x5e, 0xef, 0xdd, + 0xbb, 0xa9, 0x2c, 0xdf, 0xa1, 0xda, 0x6c, 0xd4, 0x22, 0x58, 0x77, 0x5f, 0x37, 0xb5, 0x16, 0x01, + 0x84, 0x3a, 0x84, 0xba, 0x86, 0x97, 0x0e, 0xc4, 0x6a, 0x02, 0xe6, 0x6d, 0x98, 0xb7, 0x4b, 0x24, + 0x7e, 0x64, 0x88, 0x21, 0x35, 0x0c, 0x33, 0x78, 0xe9, 0xf0, 0x07, 0x40, 0x8a, 0x97, 0x0e, 0x78, + 0xe9, 0xb0, 0xda, 0x17, 0x5e, 0x3a, 0xe0, 0x18, 0x56, 0xf0, 0xa5, 0x43, 0x29, 0x03, 0x5e, 0xbc, + 0xc0, 0xbe, 0x13, 0x10, 0x44, 0xf9, 0x04, 0xd1, 0x26, 0xed, 0x03, 0x0c, 0x03, 0x0c, 0x03, 0x0c, + 0x03, 0x0c, 0x13, 0x82, 0xe1, 0x34, 0xd2, 0x43, 0x88, 0x88, 0xd1, 0x10, 0xeb, 0xf1, 0xe7, 0x5e, + 0x92, 0x58, 0x8f, 0x8b, 0xeb, 0xbf, 0x4e, 0x2e, 0x85, 0x87, 0x78, 0x5c, 0x5d, 0x77, 0xaf, 0x7b, + 0x47, 0x22, 0xbb, 0x69, 0xc6, 0xdd, 0x1c, 0xff, 0x75, 0xd4, 0x17, 0xd9, 0xc9, 0xee, 0x53, 0xb8, + 0x4a, 0xf7, 0x1f, 0xb1, 0xcb, 0xd6, 0x8a, 0xbb, 0xba, 0xec, 0x9e, 0x1f, 0x5f, 0x9c, 0x21, 0x1a, + 0xe6, 0xa5, 0x2d, 0x31, 0xde, 0x66, 0x32, 0x53, 0xfa, 0xab, 0x5d, 0xcc, 0x6d, 0x72, 0x47, 0xdb, + 0x15, 0xd8, 0xd1, 0xe4, 0xfe, 0x89, 0x0d, 0xe8, 0x99, 0x1e, 0xa3, 0x8e, 0xd6, 0x12, 0xd8, 0xc9, + 0xf4, 0x8a, 0x6f, 0x6c, 0xa4, 0x10, 0x1e, 0xfc, 0xe2, 0xc1, 0x2f, 0xd8, 0x02, 0xd8, 0x02, 0x1e, + 0xfc, 0x2a, 0xc5, 0x44, 0xf0, 0xe0, 0xf7, 0xe5, 0x17, 0x1e, 0xfc, 0xae, 0xd6, 0x0f, 0x1e, 0xfc, + 0x66, 0x93, 0x16, 0x78, 0xf0, 0xab, 0xc6, 0x21, 0xd8, 0xcc, 0x07, 0xbf, 0xe5, 0x2c, 0x75, 0xce, + 0x0d, 0x1e, 0x85, 0x02, 0x8b, 0x9c, 0x4f, 0xda, 0x07, 0x70, 0x07, 0x70, 0x07, 0x70, 0xdf, 0x18, + 0xe0, 0x2e, 0x1e, 0x5c, 0x33, 0x37, 0x1a, 0xb1, 0x60, 0xf2, 0x9c, 0x06, 0x06, 0xfe, 0xf9, 0xa5, + 0x97, 0x67, 0xe0, 0xef, 0x5f, 0x9e, 0x7c, 0x38, 0xb9, 0xbc, 0x3c, 0x39, 0x16, 0x6e, 0xe4, 0x3f, + 0x3e, 0xe9, 0x5f, 0x9e, 0x1c, 0x75, 0xaf, 0xc5, 0x76, 0x95, 0x18, 0xfa, 0x7b, 0xe7, 0x9f, 0xbb, + 0xa7, 0xbd, 0x63, 0xe1, 0xb6, 0xfe, 0xde, 0x79, 0xf7, 0xe8, 0xe8, 0xe4, 0xea, 0xaa, 0xf7, 0xfe, + 0xf4, 0x44, 0xb8, 0xb5, 0xff, 0xd3, 0xf9, 0xbf, 0xcf, 0x2f, 0xfe, 0x73, 0x2e, 0xb2, 0x9f, 0xbd, + 0xb8, 0x9f, 0xeb, 0x93, 0xf3, 0xeb, 0xee, 0x75, 0xef, 0xb3, 0xd0, 0x19, 0xb5, 0x93, 0x13, 0xf1, + 0xa9, 0x7f, 0xda, 0x8b, 0x4f, 0x84, 0xc8, 0x9e, 0xf6, 0x13, 0x37, 0x56, 0xff, 0xba, 0x77, 0xd6, + 0xbb, 0xba, 0xee, 0x1d, 0xc1, 0x5b, 0xf2, 0xa2, 0x8b, 0xb9, 0x6b, 0x49, 0x6e, 0xa0, 0x79, 0xde, + 0x51, 0xba, 0xdb, 0x1d, 0xad, 0x2d, 0xb0, 0x9f, 0x67, 0x97, 0x52, 0xac, 0x77, 0x66, 0x26, 0x67, + 0xc4, 0x3a, 0x9b, 0xe6, 0x0e, 0x6f, 0x47, 0xdb, 0x17, 0xd8, 0xd1, 0x93, 0x2e, 0x10, 0xeb, 0x70, + 0x7a, 0x92, 0x30, 0x42, 0x0c, 0x60, 0x69, 0x3f, 0x33, 0x89, 0xd9, 0xd1, 0x5a, 0x78, 0x9e, 0x4e, + 0xb0, 0x9e, 0xec, 0x07, 0x0f, 0x0c, 0x3d, 0x72, 0x43, 0x6e, 0xdc, 0x3a, 0x82, 0xb0, 0x61, 0xc0, + 0x86, 0x2c, 0x60, 0xae, 0xa9, 0xa4, 0x01, 0x73, 0x06, 0x6c, 0x2f, 0x3f, 0x1c, 0x69, 0xad, 0xe6, + 0xe1, 0x6e, 0x47, 0x3b, 0x33, 0x5c, 0xe3, 0x8e, 0xc5, 0x3c, 0x42, 0xeb, 0xb9, 0x43, 0x2f, 0x18, + 0x25, 0x68, 0x57, 0x7b, 0x6f, 0x84, 0x4c, 0x1b, 0x7a, 0x81, 0xc6, 0xef, 0xd9, 0x57, 0x77, 0xae, + 0x89, 0xa4, 0xde, 0xa5, 0xcb, 0xb8, 0xd6, 0x0f, 0x3c, 0xee, 0x99, 0x9e, 0xa3, 0x6d, 0xf5, 0xfa, + 0xdb, 0xcf, 0xfe, 0x44, 0xd7, 0x7a, 0x7e, 0x77, 0x12, 0x1d, 0x73, 0x95, 0x10, 0xf3, 0xeb, 0xa3, + 0xaf, 0xae, 0x96, 0x74, 0x79, 0xd0, 0x6e, 0x76, 0xb4, 0x5e, 0xff, 0xa1, 0xad, 0xc5, 0xff, 0xc2, + 0x1c, 0x16, 0x86, 0xda, 0xf4, 0x4f, 0xb5, 0x6e, 0x14, 0xb7, 0x17, 0x73, 0xe3, 0x48, 0x18, 0xe4, + 0x96, 0x45, 0x37, 0x5f, 0xa3, 0x9d, 0x4f, 0x07, 0x47, 0xb0, 0x89, 0x4d, 0x16, 0x03, 0x7d, 0x95, + 0x89, 0xaa, 0x71, 0xb2, 0x60, 0x75, 0x44, 0x36, 0xbd, 0x9c, 0x22, 0x14, 0xd9, 0xf4, 0xe6, 0x8f, + 0x13, 0x4c, 0xaf, 0x30, 0xbd, 0xae, 0xa0, 0x03, 0x61, 0x7a, 0xad, 0x06, 0xd0, 0x46, 0x36, 0xbd, + 0x3f, 0xb6, 0x8d, 0x6c, 0x7a, 0x6b, 0x77, 0x87, 0x6c, 0x7a, 0x99, 0x34, 0x39, 0xb2, 0xe9, 0xc9, + 0x92, 0xa2, 0x48, 0x1a, 0xb7, 0x56, 0xbb, 0x32, 0x93, 0xc6, 0x4d, 0x92, 0xe7, 0x54, 0x28, 0xc9, + 0xd0, 0x43, 0x10, 0x08, 0xc8, 0x1a, 0x97, 0xb4, 0x8a, 0x62, 0xca, 0xa5, 0x03, 0xe3, 0x48, 0x31, + 0x54, 0x04, 0xd8, 0xae, 0x78, 0x8a, 0xa1, 0xf8, 0xb2, 0xeb, 0x77, 0x81, 0x17, 0x09, 0x4c, 0x35, + 0x34, 0xd7, 0x87, 0x18, 0x1b, 0x40, 0x03, 0x36, 0x00, 0xd8, 0x00, 0x60, 0x03, 0x28, 0x9f, 0x0d, + 0x80, 0x5a, 0x5c, 0xa5, 0x0d, 0x9b, 0xb3, 0x1b, 0x2a, 0xe8, 0x2c, 0xce, 0x2e, 0xd3, 0xb4, 0x1f, + 0x41, 0xe7, 0x43, 0x8c, 0xf8, 0x12, 0x2e, 0xc6, 0x64, 0x88, 0x33, 0x69, 0x62, 0x4d, 0x96, 0x78, + 0x93, 0x2e, 0xe6, 0xa4, 0x8b, 0x3b, 0x99, 0x62, 0x4f, 0x9c, 0x39, 0x40, 0xa4, 0xdd, 0x47, 0x94, + 0x38, 0x4c, 0x3b, 0x30, 0x4c, 0x93, 0xf9, 0x5c, 0x1f, 0x79, 0x96, 0x84, 0x83, 0x3c, 0xbb, 0x99, + 0xf3, 0x9d, 0x0a, 0x3e, 0x59, 0x22, 0x9d, 0x5f, 0x0b, 0x9d, 0x25, 0x6f, 0x4f, 0x6a, 0x42, 0xfb, + 0x19, 0x08, 0x5e, 0x2f, 0x31, 0x3e, 0x32, 0xe9, 0x8a, 0x46, 0xa6, 0xc2, 0x91, 0xae, 0x78, 0x64, + 0x2b, 0xa0, 0xc2, 0x14, 0x51, 0x61, 0x0a, 0xa9, 0x08, 0xc5, 0x24, 0x56, 0x41, 0x09, 0x56, 0x54, + 0xe9, 0x82, 0x09, 0xf3, 0xe1, 0x2d, 0xbd, 0x6d, 0xb7, 0x9e, 0xe7, 0x30, 0xc3, 0x95, 0x71, 0xdf, + 0x66, 0xe8, 0xbb, 0xa1, 0xf4, 0x16, 0x09, 0x2e, 0xb7, 0xb3, 0xd0, 0x9f, 0xb4, 0xf2, 0x3b, 0xf2, + 0x6e, 0x92, 0xc8, 0xb7, 0xc0, 0x86, 0xf5, 0xc0, 0x02, 0x6e, 0x87, 0x49, 0x90, 0xdb, 0xc4, 0xa7, + 0xf1, 0x60, 0x38, 0x12, 0xc1, 0xd9, 0xeb, 0xfd, 0x57, 0x09, 0xa7, 0x35, 0xea, 0x75, 0xa0, 0x34, + 0xa0, 0x34, 0xa0, 0x34, 0xa0, 0x34, 0xa0, 0x34, 0x39, 0xb7, 0x2d, 0xb2, 0x5d, 0xde, 0x68, 0x4b, + 0x04, 0x69, 0x6d, 0x09, 0x5d, 0x89, 0x4d, 0x39, 0xf3, 0xf2, 0x4b, 0x8e, 0xf8, 0xd0, 0x64, 0xa5, + 0xa4, 0x59, 0xe8, 0x34, 0xcd, 0x4f, 0xf2, 0x56, 0x6e, 0xbf, 0xb2, 0xb3, 0x95, 0x2c, 0xde, 0x11, + 0x59, 0xd9, 0x4b, 0x24, 0x8b, 0x99, 0xe7, 0x47, 0xca, 0xf8, 0x51, 0xdc, 0x91, 0x6a, 0xd5, 0x0f, + 0xf7, 0x70, 0xaa, 0x64, 0x9d, 0xaa, 0x37, 0xd5, 0xe8, 0x65, 0x00, 0x96, 0x0f, 0x96, 0x2f, 0x6a, + 0xb9, 0xfc, 0x80, 0xb1, 0x91, 0xcf, 0xe5, 0xd1, 0xfa, 0x59, 0x87, 0x55, 0xe2, 0xf1, 0x31, 0xc5, + 0x00, 0x91, 0x07, 0x91, 0x07, 0x91, 0x07, 0x91, 0x07, 0x91, 0x97, 0x73, 0xdb, 0xe0, 0x6e, 0x01, + 0x10, 0xab, 0x20, 0x10, 0xd3, 0x2d, 0xe6, 0x18, 0x8f, 0xd2, 0xe1, 0xd8, 0xb4, 0xdb, 0x2a, 0x81, + 0x32, 0xb8, 0x56, 0x80, 0xc8, 0x80, 0xc8, 0x80, 0xc8, 0x80, 0xc8, 0x24, 0xdd, 0x36, 0xb8, 0x56, + 0x72, 0x7f, 0x6d, 0x8a, 0x6b, 0xa5, 0x0e, 0x23, 0xb8, 0xa4, 0xaf, 0x8d, 0x71, 0xad, 0xec, 0xb6, + 0xeb, 0x38, 0x55, 0xd2, 0x4e, 0x15, 0x5c, 0x2b, 0x60, 0xf4, 0x60, 0xf4, 0x7f, 0x62, 0xf4, 0xb6, + 0x17, 0xd8, 0x5c, 0x2a, 0x99, 0x9f, 0xf6, 0x88, 0x20, 0x49, 0x30, 0x79, 0x30, 0x79, 0x30, 0x79, + 0x30, 0x79, 0x30, 0xf9, 0x8c, 0x4c, 0xfe, 0x40, 0x22, 0x91, 0xdf, 0x03, 0x91, 0x57, 0x94, 0xc8, + 0x23, 0x46, 0x12, 0x44, 0x9e, 0xf8, 0x48, 0x35, 0xf7, 0x5a, 0x38, 0x54, 0xe0, 0xf1, 0xe0, 0xf1, + 0xe0, 0xf1, 0xe5, 0xe0, 0xf1, 0x0f, 0x76, 0xc0, 0x23, 0xc3, 0x99, 0xe5, 0xeb, 0x95, 0x47, 0xe7, + 0x5f, 0x76, 0x0c, 0x9e, 0x0a, 0x9e, 0x0a, 0x9e, 0x0a, 0x9e, 0x0a, 0x9e, 0x9a, 0xa6, 0x51, 0x97, + 0x24, 0x1b, 0xe7, 0xe5, 0x63, 0xe3, 0x50, 0x42, 0x5f, 0xd3, 0xb5, 0xac, 0x1c, 0x59, 0x9d, 0x4b, + 0x80, 0xdf, 0x92, 0xb8, 0x77, 0x0b, 0x7b, 0x78, 0x20, 0xb1, 0xcf, 0xbe, 0xc1, 0x39, 0x0b, 0x5c, + 0x69, 0xdb, 0x99, 0x76, 0xbc, 0xf5, 0xa5, 0xae, 0x1f, 0x0e, 0x7e, 0x7d, 0x69, 0xe8, 0x87, 0x83, + 0xc9, 0xb7, 0x8d, 0xe4, 0x7f, 0x3f, 0x9b, 0xe3, 0x5f, 0xcd, 0x2f, 0x75, 0xbd, 0x35, 0xfd, 0x6d, + 0x73, 0xef, 0x4b, 0x5d, 0xdf, 0x1b, 0x6c, 0x6f, 0x7d, 0xfd, 0xfa, 0x6e, 0xdd, 0xcf, 0x6c, 0xff, + 0xdc, 0x1d, 0xd7, 0xa4, 0x4d, 0x6b, 0x20, 0x73, 0xdb, 0x2e, 0xae, 0x7a, 0x7f, 0x17, 0xb6, 0x77, + 0xff, 0xdd, 0x92, 0xb5, 0x7b, 0xdb, 0xff, 0x92, 0xb8, 0x7f, 0x6f, 0x2a, 0x64, 0x2a, 0x29, 0x46, + 0x6c, 0xb6, 0x21, 0x36, 0x45, 0x8b, 0xcd, 0xe4, 0x16, 0x19, 0xfa, 0xb0, 0xab, 0x7f, 0x18, 0xfc, + 0x6c, 0xbc, 0x6d, 0x8d, 0x3b, 0xdb, 0x3f, 0xf7, 0xc7, 0x2f, 0x7f, 0xf9, 0xeb, 0xb5, 0x3f, 0x6b, + 0xbc, 0xdd, 0x1f, 0x77, 0x96, 0xfc, 0x4b, 0x7b, 0xdc, 0x59, 0xb1, 0x8d, 0xbd, 0xf1, 0xd6, 0xc2, + 0x9f, 0xc6, 0xbf, 0x6f, 0x2e, 0xfb, 0x40, 0x6b, 0xc9, 0x07, 0x76, 0x97, 0x7d, 0x60, 0x77, 0xc9, + 0x07, 0x96, 0x0e, 0xa9, 0xb9, 0xe4, 0x03, 0x7b, 0xe3, 0x5f, 0x0b, 0x7f, 0xbf, 0xf5, 0xfa, 0x9f, + 0xb6, 0xc7, 0xdb, 0xbf, 0x96, 0xfd, 0xdb, 0xfe, 0xf8, 0x57, 0x67, 0x7b, 0x1b, 0x8a, 0x44, 0x98, + 0x22, 0xc1, 0x71, 0x96, 0x7f, 0x9c, 0xab, 0xa7, 0x58, 0x61, 0xc8, 0xfd, 0xed, 0x5d, 0x3b, 0xb5, + 0x43, 0xde, 0xe5, 0x3c, 0x90, 0xc3, 0x82, 0xcf, 0x6c, 0xf7, 0xc4, 0x49, 0xb2, 0xa3, 0x49, 0xf2, + 0x59, 0xd4, 0xce, 0x8c, 0x1f, 0x73, 0x3d, 0x36, 0x0e, 0x5a, 0xad, 0xf6, 0x7e, 0xab, 0x55, 0xdf, + 0xdf, 0xdd, 0xaf, 0x1f, 0xee, 0xed, 0x35, 0xda, 0x0d, 0x19, 0x8e, 0xdc, 0x8b, 0xc0, 0x62, 0x01, + 0xb3, 0xde, 0x3f, 0xd6, 0x3a, 0x9a, 0x1b, 0x39, 0x8e, 0xcc, 0x2e, 0x3f, 0x85, 0x2c, 0x90, 0xe2, + 0xa4, 0x81, 0xcb, 0xa1, 0xf4, 0x22, 0x4b, 0x86, 0xcb, 0xc1, 0xb1, 0xdd, 0x6f, 0xba, 0xe3, 0x99, + 0x32, 0xf3, 0x2e, 0xbe, 0xd2, 0x37, 0x1c, 0x0f, 0xeb, 0x01, 0x3e, 0x38, 0x1e, 0x08, 0x0f, 0x07, + 0x1c, 0x0f, 0x70, 0x3c, 0xfc, 0x7e, 0xc1, 0xe0, 0x78, 0x20, 0x5f, 0x4b, 0x38, 0x1e, 0x60, 0x41, + 0xcb, 0x61, 0x41, 0x83, 0xe3, 0x41, 0x75, 0x7b, 0x11, 0x1c, 0x0f, 0xe5, 0x53, 0x74, 0xc5, 0x8a, + 0x4d, 0x38, 0x1e, 0x84, 0x8b, 0x4d, 0x58, 0x6a, 0xe1, 0x78, 0xa8, 0x9a, 0x22, 0xc1, 0x71, 0x86, + 0xe3, 0xa1, 0xe4, 0xfc, 0x54, 0x43, 0x04, 0x39, 0xcc, 0xb9, 0x32, 0xcc, 0xb9, 0x81, 0x17, 0x71, + 0x16, 0xe8, 0xb6, 0x25, 0xdf, 0x9a, 0xfb, 0xd4, 0x35, 0x8c, 0xb9, 0x30, 0xe6, 0xc2, 0x98, 0x0b, + 0x63, 0x2e, 0x8c, 0xb9, 0x78, 0xed, 0xac, 0x9e, 0x41, 0x02, 0xaf, 0x9d, 0x65, 0x0e, 0x00, 0xaf, + 0x9d, 0x45, 0x1f, 0xa9, 0xe6, 0x1e, 0x0a, 0xc2, 0x48, 0x3b, 0x54, 0xe0, 0xaa, 0xe0, 0xaa, 0x95, + 0xe0, 0xaa, 0x6f, 0x14, 0xda, 0xf8, 0x5a, 0x37, 0xba, 0x8b, 0x11, 0x30, 0xb3, 0x84, 0xe2, 0x11, + 0x49, 0x7c, 0x7a, 0x27, 0x06, 0xf1, 0xc3, 0x4e, 0x52, 0x8e, 0x76, 0x68, 0x98, 0x2c, 0x7c, 0xf9, + 0x8b, 0xe9, 0xcf, 0x61, 0x74, 0xbb, 0xf0, 0x37, 0xf3, 0xbf, 0x4b, 0x7e, 0xe5, 0x77, 0x6c, 0xff, + 0xa1, 0x3d, 0xfd, 0x76, 0xea, 0x5d, 0x99, 0xfe, 0x75, 0xfa, 0xf3, 0xce, 0x43, 0x10, 0xf8, 0xc9, + 0x7f, 0xf4, 0xbb, 0xc0, 0x8b, 0xfc, 0x1d, 0x73, 0xc2, 0x7c, 0x85, 0xa7, 0x78, 0x0b, 0xcd, 0xc0, + 0xf6, 0xa7, 0xd7, 0xb4, 0xd6, 0xb5, 0x2c, 0x3b, 0xfe, 0xde, 0x70, 0xb4, 0xcf, 0x97, 0x97, 0x7d, + 0xcd, 0x32, 0xb8, 0xa1, 0x0d, 0xbd, 0x40, 0xeb, 0xf5, 0x1f, 0xda, 0xda, 0xd3, 0x4c, 0x25, 0x59, + 0x17, 0x1a, 0xb0, 0x2e, 0xc0, 0xba, 0x00, 0xeb, 0x02, 0xac, 0x0b, 0x6b, 0x8b, 0x35, 0x5b, 0x52, + 0x70, 0x7e, 0x01, 0x11, 0xbc, 0x0b, 0x17, 0x5d, 0x7a, 0x24, 0xef, 0x32, 0xed, 0xf1, 0xc1, 0x0b, + 0x26, 0x6a, 0xc3, 0x73, 0x5f, 0x2a, 0x8c, 0xb7, 0x5a, 0xc8, 0x78, 0xa8, 0xf1, 0x7b, 0xa6, 0x4d, + 0x87, 0xab, 0xc5, 0xc3, 0xd5, 0x92, 0xe1, 0x7e, 0x75, 0xe5, 0x86, 0x1c, 0x48, 0x32, 0x5e, 0x4b, + 0x57, 0x33, 0x45, 0xa8, 0x9b, 0xc2, 0xd4, 0x4e, 0x51, 0xea, 0xa7, 0x70, 0x35, 0x54, 0xb8, 0x3a, + 0x2a, 0x52, 0x2d, 0x49, 0xe6, 0xf8, 0x92, 0xee, 0xab, 0x34, 0x63, 0xf8, 0xc2, 0x6d, 0x95, 0x1a, + 0xe1, 0xbc, 0x00, 0xef, 0x0f, 0x25, 0xf6, 0x29, 0x35, 0xe2, 0x59, 0x0e, 0x5b, 0xfd, 0xc3, 0xce, + 0x16, 0x12, 0x01, 0xbd, 0xb0, 0xc7, 0x07, 0x05, 0xf4, 0x5d, 0x54, 0x30, 0x54, 0x3a, 0x80, 0xea, + 0x45, 0x46, 0xcf, 0xbe, 0x06, 0x45, 0x6c, 0x67, 0x91, 0x01, 0x6e, 0xe9, 0x28, 0xaa, 0x19, 0x31, + 0x9d, 0xee, 0xab, 0xd4, 0x1e, 0xc7, 0x6f, 0x37, 0x48, 0x0c, 0xb7, 0x21, 0x86, 0x8b, 0x12, 0xc3, + 0x08, 0x4d, 0xad, 0x7c, 0xa4, 0x35, 0x14, 0x13, 0x22, 0xb0, 0x37, 0x21, 0x02, 0xbb, 0x20, 0x45, + 0x8d, 0x08, 0xf3, 0x52, 0xf5, 0xa0, 0x9a, 0xb3, 0x79, 0x20, 0xca, 0xd9, 0x2c, 0x27, 0xba, 0xa0, + 0x16, 0x9a, 0xf7, 0x6c, 0x64, 0xf8, 0x06, 0xbf, 0x9f, 0x78, 0x85, 0x7d, 0xe6, 0x4e, 0x1c, 0xb3, + 0xfa, 0x9c, 0xdb, 0xf7, 0xb5, 0x6f, 0x77, 0x9e, 0x7b, 0x86, 0x9f, 0xf9, 0x84, 0x13, 0x6f, 0xf0, + 0x93, 0x1f, 0xf8, 0x0f, 0x1e, 0xe0, 0x37, 0x6a, 0xec, 0xb6, 0x00, 0x48, 0x5f, 0x4b, 0x97, 0x4c, + 0xe7, 0x81, 0x61, 0x7e, 0xb3, 0xdd, 0x3b, 0x61, 0xbb, 0xfd, 0x04, 0xd8, 0x17, 0xfb, 0x14, 0x74, + 0x86, 0xc5, 0x3a, 0xb9, 0x85, 0x7b, 0x1d, 0x64, 0x78, 0x19, 0xa4, 0x79, 0x15, 0x64, 0x79, 0x11, + 0xa4, 0x7b, 0x0d, 0xa4, 0x7b, 0x09, 0x64, 0x7a, 0x05, 0xd4, 0x0a, 0x90, 0x12, 0xed, 0x94, 0xae, + 0x99, 0xb3, 0x1b, 0x2f, 0x29, 0x48, 0x4a, 0x4e, 0x88, 0x12, 0x62, 0x81, 0xca, 0x2f, 0x3e, 0x65, + 0x8b, 0xd1, 0xc2, 0xc4, 0x69, 0x61, 0x62, 0xb5, 0x08, 0xf1, 0x2a, 0x89, 0xd2, 0x54, 0x25, 0x16, + 0x68, 0x56, 0x96, 0x57, 0xb7, 0x98, 0x19, 0xb0, 0xe9, 0x1e, 0x49, 0x8e, 0x05, 0x7a, 0x65, 0x0c, + 0xd2, 0x62, 0x81, 0xe4, 0x15, 0x0b, 0x4e, 0x3b, 0xad, 0xcb, 0xb1, 0xbf, 0x0c, 0x10, 0x97, 0xa4, + 0x9a, 0xea, 0x2b, 0x4c, 0x05, 0x16, 0xa5, 0x0a, 0x0b, 0x57, 0x89, 0x85, 0xab, 0xc6, 0x22, 0x55, + 0xa4, 0x1c, 0x55, 0x29, 0x49, 0x65, 0xa6, 0x0b, 0x59, 0x5c, 0x5c, 0x92, 0xac, 0xc7, 0xba, 0x2f, + 0x45, 0xaf, 0xc4, 0x57, 0x7a, 0x92, 0x1f, 0xef, 0xce, 0xbe, 0x0a, 0xf0, 0x85, 0x17, 0xf1, 0x98, + 0x37, 0xed, 0x7c, 0xf6, 0x02, 0xb3, 0xfe, 0xb6, 0x98, 0xfe, 0x8b, 0x7e, 0x87, 0xf9, 0x74, 0xb5, + 0x8a, 0x7a, 0x8f, 0x29, 0x59, 0x6a, 0x3d, 0x3f, 0x7a, 0x05, 0x3c, 0xfa, 0x5d, 0x38, 0x7a, 0xd2, + 0x4b, 0x1d, 0xe3, 0xf0, 0x15, 0xa4, 0x98, 0xe5, 0xf7, 0x56, 0xa9, 0x8c, 0x97, 0xb2, 0x1f, 0x0d, + 0xa7, 0xfd, 0x16, 0xf6, 0x78, 0x58, 0xde, 0x81, 0x91, 0xb0, 0x85, 0xb5, 0xc4, 0x63, 0xf6, 0xe4, + 0x19, 0x95, 0x6f, 0xfe, 0x78, 0x39, 0x00, 0xf0, 0x76, 0xf0, 0x76, 0xf0, 0x76, 0xf0, 0x76, 0xf0, + 0x76, 0x49, 0xb7, 0x35, 0xd6, 0x9a, 0x01, 0x1b, 0x16, 0xf1, 0x98, 0x68, 0x5f, 0x6e, 0xee, 0xe8, + 0xfb, 0x75, 0xd2, 0x44, 0xb8, 0xf1, 0xf2, 0x54, 0xea, 0x88, 0x49, 0xad, 0x81, 0x36, 0x6f, 0x49, + 0x90, 0x5b, 0x0b, 0x6d, 0x9e, 0x48, 0x16, 0x5e, 0x13, 0x2d, 0x1d, 0x8c, 0xfc, 0xda, 0x68, 0x8b, + 0x5d, 0x4b, 0xab, 0x91, 0x06, 0x0e, 0x52, 0x1d, 0x0e, 0x82, 0x8c, 0x56, 0x6b, 0xf4, 0x57, 0x64, + 0xec, 0xe9, 0x62, 0x14, 0xa4, 0xd0, 0x70, 0x54, 0xf1, 0x07, 0x44, 0x64, 0xde, 0xe7, 0x90, 0x1b, + 0x9c, 0xc9, 0x0b, 0xbb, 0x9a, 0x74, 0x57, 0xb1, 0xa8, 0xab, 0x26, 0xa2, 0xae, 0x94, 0xa1, 0xac, + 0x88, 0xba, 0x42, 0xd4, 0xd5, 0x9f, 0x16, 0x0c, 0x51, 0x57, 0x52, 0x46, 0x80, 0xa8, 0x2b, 0x32, + 0x55, 0x07, 0xeb, 0xad, 0xc2, 0x2a, 0xb0, 0x28, 0x55, 0x58, 0xb8, 0x4a, 0x2c, 0x5c, 0x35, 0x16, + 0xa9, 0x22, 0xe5, 0x31, 0x57, 0x0d, 0x51, 0x57, 0x02, 0x45, 0x2f, 0xa2, 0xae, 0x04, 0x4c, 0x14, + 0x51, 0x57, 0x08, 0x7c, 0x41, 0xd4, 0x15, 0x0e, 0x1f, 0xa2, 0xae, 0x04, 0x50, 0x13, 0x04, 0x05, + 0xad, 0x7c, 0x08, 0x11, 0x14, 0x04, 0x5a, 0x09, 0x5a, 0x09, 0x5a, 0x09, 0x5a, 0xb9, 0xa9, 0xb4, + 0x12, 0x41, 0x41, 0x08, 0x0a, 0x12, 0x4b, 0x74, 0x11, 0x14, 0xb4, 0xa9, 0x41, 0x41, 0x70, 0xc3, + 0xfd, 0x5e, 0x7b, 0x6e, 0x76, 0xcc, 0xca, 0x24, 0x54, 0x02, 0x19, 0xf9, 0xc4, 0x9f, 0xb8, 0x8d, + 0xc8, 0xc8, 0x27, 0x2d, 0x37, 0xdc, 0x64, 0xa6, 0x3c, 0x88, 0x4c, 0xee, 0x4e, 0x41, 0x54, 0x6f, + 0xd6, 0xf7, 0xcd, 0xd5, 0xdc, 0xc8, 0x6f, 0x7a, 0xfe, 0x43, 0xfb, 0xa6, 0x3b, 0x19, 0xef, 0xcd, + 0xe7, 0x20, 0xf0, 0x3f, 0xc6, 0x23, 0xbd, 0x49, 0xff, 0xfa, 0x7a, 0x36, 0xd0, 0x0d, 0x4e, 0x23, + 0x28, 0x36, 0x3e, 0x4b, 0x4a, 0x5c, 0x96, 0xb4, 0x64, 0x81, 0x4d, 0x24, 0x0b, 0x2c, 0x8d, 0x35, + 0x00, 0xc9, 0x02, 0x37, 0x57, 0x9d, 0x0a, 0x4f, 0x16, 0x68, 0x98, 0x26, 0xf3, 0xb9, 0x3e, 0xf2, + 0x2c, 0x89, 0xa1, 0xab, 0xf3, 0x9d, 0x0a, 0xaf, 0x6c, 0x2a, 0x2f, 0x32, 0xaa, 0x96, 0x10, 0x1e, + 0xb1, 0x38, 0x73, 0x20, 0x27, 0xe0, 0xb7, 0x8e, 0x34, 0x8b, 0xe5, 0x55, 0x3c, 0xb2, 0x15, 0x50, + 0x61, 0x8a, 0xa8, 0x30, 0x85, 0x54, 0x84, 0x62, 0xaa, 0x86, 0xa5, 0x41, 0x9a, 0x79, 0x39, 0xbd, + 0x6d, 0xb7, 0x9e, 0xe7, 0x30, 0xc3, 0x95, 0x71, 0xdf, 0x66, 0xe8, 0xbb, 0x81, 0xd7, 0x2f, 0x8b, + 0x40, 0xc2, 0x7a, 0x60, 0x01, 0xb7, 0xc3, 0xc4, 0x0e, 0x3a, 0x21, 0xe1, 0x0f, 0x12, 0xca, 0xe0, + 0x3e, 0x61, 0x8a, 0xd7, 0xfb, 0xaf, 0x12, 0xbc, 0x68, 0xd4, 0xeb, 0x00, 0x17, 0x00, 0x17, 0x00, + 0x17, 0x00, 0x17, 0x00, 0x17, 0x72, 0x6e, 0x5b, 0x64, 0xbb, 0xbc, 0xd1, 0x96, 0x88, 0x2d, 0xda, + 0x12, 0xba, 0x92, 0x1b, 0xfb, 0x2c, 0xd7, 0x05, 0x2c, 0x3f, 0x36, 0x67, 0x16, 0x68, 0xda, 0x90, + 0x1c, 0x11, 0x53, 0x74, 0x78, 0x69, 0x71, 0x61, 0xa5, 0x63, 0xb9, 0xbe, 0xfd, 0xe2, 0x8e, 0x54, + 0xab, 0x7e, 0xb8, 0x87, 0x53, 0x25, 0xeb, 0x54, 0x55, 0x24, 0x52, 0x61, 0x00, 0x72, 0xba, 0x70, + 0xa8, 0xcc, 0x28, 0x08, 0x62, 0x5a, 0x38, 0x7b, 0xa1, 0x2b, 0xb1, 0x38, 0xce, 0xcb, 0x9e, 0x41, + 0xb1, 0x40, 0xb1, 0x40, 0xb1, 0x40, 0xb1, 0x40, 0xb1, 0x24, 0xbf, 0x36, 0x95, 0xf8, 0xca, 0x14, + 0x0c, 0x4b, 0x08, 0x1c, 0xae, 0x03, 0x0b, 0x83, 0x61, 0xd1, 0x1e, 0xa9, 0xe6, 0x1e, 0x08, 0x16, + 0x08, 0x16, 0x08, 0x56, 0xde, 0x43, 0xe5, 0x07, 0x8c, 0x8d, 0x7c, 0x2e, 0x8f, 0x57, 0xcd, 0x3a, + 0xac, 0x92, 0x7f, 0x2f, 0xc6, 0xc5, 0x70, 0xf0, 0x81, 0x7d, 0x82, 0x7d, 0x82, 0x7d, 0x82, 0x7d, + 0xca, 0xb9, 0x6d, 0x88, 0x1e, 0x2a, 0x13, 0x7e, 0xd0, 0x2d, 0xe6, 0x18, 0x8f, 0xd2, 0x51, 0xc4, + 0xb4, 0xdb, 0x2a, 0x61, 0x09, 0x44, 0x0a, 0x01, 0x48, 0x00, 0x48, 0x00, 0x48, 0x00, 0x48, 0x48, + 0xba, 0x6d, 0x88, 0x14, 0xca, 0xfd, 0x05, 0x3b, 0xb6, 0x98, 0x7e, 0x61, 0xc7, 0x96, 0x72, 0xa4, + 0x8a, 0xb4, 0x63, 0xef, 0xb6, 0xeb, 0x38, 0x55, 0xd2, 0x4e, 0x15, 0x0c, 0xd9, 0x15, 0x26, 0xa2, + 0xb2, 0x23, 0x84, 0x64, 0x45, 0x06, 0xe1, 0xa9, 0x0a, 0x08, 0x28, 0x08, 0x28, 0x08, 0x28, 0x08, + 0xa8, 0x86, 0x38, 0x2a, 0x02, 0xd1, 0x88, 0x38, 0x2a, 0x55, 0xf9, 0x27, 0x5e, 0xaa, 0x80, 0x7f, + 0x12, 0x1f, 0x29, 0xe9, 0x59, 0xf6, 0x41, 0x3f, 0x41, 0x3f, 0x2b, 0x48, 0x3f, 0x1f, 0xec, 0x80, + 0x47, 0x86, 0xa3, 0x4f, 0x53, 0x0f, 0xca, 0x63, 0xa1, 0x2f, 0x3b, 0x06, 0xbd, 0x02, 0xbd, 0x02, + 0xbd, 0x02, 0xbd, 0x02, 0xbd, 0x9a, 0xde, 0x36, 0xdb, 0x97, 0x24, 0x1b, 0xe7, 0xe5, 0x63, 0xe3, + 0x50, 0x42, 0x5f, 0xd3, 0xb5, 0xac, 0x1c, 0xc7, 0x7a, 0xda, 0xb9, 0x87, 0x96, 0xc4, 0xbd, 0x5b, + 0xd8, 0xc3, 0x03, 0xb9, 0xc5, 0x07, 0x38, 0x0b, 0x5c, 0xe9, 0x85, 0xed, 0x6a, 0x5b, 0x5f, 0xea, + 0xfa, 0xe1, 0xe0, 0xd7, 0x97, 0x86, 0x7e, 0x38, 0x98, 0x7c, 0xdb, 0x48, 0xfe, 0xf7, 0xb3, 0x39, + 0xfe, 0xd5, 0xfc, 0x52, 0xd7, 0x5b, 0xd3, 0xdf, 0x36, 0xf7, 0xbe, 0xd4, 0xf5, 0xbd, 0xc1, 0xf6, + 0xd6, 0xd7, 0xaf, 0xef, 0xd6, 0xfd, 0xcc, 0xf6, 0xcf, 0xdd, 0xb1, 0xbc, 0xb2, 0x1f, 0x03, 0x99, + 0xdb, 0x76, 0x71, 0xd5, 0xfb, 0xbb, 0xb0, 0xbd, 0xfb, 0xef, 0x96, 0xac, 0xdd, 0xdb, 0xfe, 0x57, + 0xad, 0x6a, 0xc5, 0xb9, 0xde, 0x56, 0x58, 0x6c, 0xb6, 0x21, 0x36, 0x45, 0x8b, 0xcd, 0xe4, 0x16, + 0x19, 0xfa, 0xb0, 0xab, 0x7f, 0x18, 0xfc, 0x6c, 0xbc, 0x6d, 0x8d, 0x3b, 0xdb, 0x3f, 0xf7, 0xc7, + 0x2f, 0x7f, 0xf9, 0xeb, 0xb5, 0x3f, 0x6b, 0xbc, 0xdd, 0x1f, 0x77, 0x96, 0xfc, 0x4b, 0x7b, 0xdc, + 0x59, 0xb1, 0x8d, 0xbd, 0xf1, 0xd6, 0xc2, 0x9f, 0xc6, 0xbf, 0x6f, 0x2e, 0xfb, 0x40, 0x6b, 0xc9, + 0x07, 0x76, 0x97, 0x7d, 0x60, 0x77, 0xc9, 0x07, 0x96, 0x0e, 0xa9, 0xb9, 0xe4, 0x03, 0x7b, 0xe3, + 0x5f, 0x0b, 0x7f, 0xbf, 0xf5, 0xfa, 0x9f, 0xb6, 0xc7, 0xdb, 0xbf, 0x96, 0xfd, 0xdb, 0xfe, 0xf8, + 0x57, 0x67, 0x7b, 0x1b, 0x8a, 0x44, 0x98, 0x22, 0xc1, 0x71, 0x96, 0x7f, 0x9c, 0xab, 0xa7, 0x58, + 0x55, 0xb7, 0x3f, 0x0a, 0x66, 0xc0, 0x52, 0x8b, 0x6c, 0xc9, 0x2f, 0xae, 0x55, 0x8a, 0xa2, 0x5a, + 0x05, 0x14, 0xd3, 0x2a, 0xa0, 0x88, 0x96, 0xda, 0x96, 0x72, 0xc7, 0x76, 0xbf, 0xe9, 0x8e, 0x67, + 0xca, 0xcc, 0x35, 0xfc, 0x4a, 0xdf, 0xb0, 0x97, 0xaf, 0x87, 0x53, 0x60, 0x2f, 0x27, 0x3c, 0x1c, + 0xb0, 0x97, 0xc3, 0x5e, 0xbe, 0x92, 0x8d, 0x17, 0xf6, 0x72, 0xba, 0xb5, 0x84, 0xbd, 0x1c, 0x86, + 0x9f, 0x1c, 0x86, 0x1f, 0xd8, 0xcb, 0x55, 0x37, 0x73, 0xc0, 0x5e, 0x5e, 0x3e, 0x45, 0x57, 0xac, + 0xd8, 0x84, 0xbd, 0x5c, 0xb8, 0xd8, 0x84, 0x81, 0x11, 0xf6, 0xf2, 0xaa, 0x29, 0x12, 0x1c, 0x67, + 0xd8, 0xcb, 0x4b, 0xce, 0x4f, 0x35, 0xc4, 0xeb, 0xfe, 0xd6, 0x0a, 0x19, 0x78, 0x11, 0x67, 0x81, + 0x6e, 0x5b, 0xf2, 0x8d, 0x90, 0x4f, 0x5d, 0xc3, 0x06, 0x09, 0x1b, 0x24, 0x6c, 0x90, 0xb0, 0x41, + 0xc2, 0x06, 0x89, 0x27, 0x91, 0xea, 0xf1, 0x68, 0x3c, 0x89, 0x94, 0x39, 0x00, 0x3c, 0x89, 0x14, + 0x7d, 0xa4, 0x90, 0x5a, 0x1e, 0x4f, 0x22, 0x37, 0x86, 0x62, 0xbd, 0x51, 0x48, 0x54, 0xd4, 0xba, + 0xd1, 0x5d, 0x0c, 0xdc, 0x98, 0x25, 0x54, 0x8d, 0x4a, 0xa2, 0x81, 0x3b, 0x31, 0xf6, 0x1c, 0x76, + 0x92, 0x82, 0xd7, 0x43, 0xc3, 0x64, 0xe1, 0xcb, 0x5f, 0x4c, 0x7f, 0x0e, 0xa3, 0xdb, 0x85, 0xbf, + 0x99, 0xff, 0x5d, 0xf2, 0x2b, 0xbf, 0x63, 0xfb, 0x0f, 0xed, 0xe9, 0xb7, 0x53, 0x5b, 0xf6, 0xf4, + 0xaf, 0xd3, 0x9f, 0x77, 0x1e, 0x82, 0xc0, 0x4f, 0xfe, 0xa3, 0xdf, 0x05, 0x5e, 0xe4, 0xef, 0x84, + 0xdc, 0xe0, 0x4c, 0x7c, 0xf6, 0xa2, 0xd0, 0x0c, 0x6c, 0x3f, 0x16, 0x6f, 0xf1, 0xac, 0xbb, 0x96, + 0x65, 0xc7, 0xdf, 0x1b, 0x8e, 0xf6, 0xf9, 0xf2, 0xb2, 0xaf, 0x59, 0x06, 0x37, 0xb4, 0xa1, 0x17, + 0x68, 0xbd, 0xfe, 0x43, 0x5b, 0x7b, 0x9a, 0xa8, 0x24, 0x4e, 0xdc, 0x00, 0x27, 0x06, 0x27, 0x06, + 0x27, 0x06, 0x27, 0x5e, 0x5b, 0xac, 0xd9, 0x92, 0x02, 0x78, 0x0b, 0x08, 0x97, 0x5c, 0xb8, 0xe8, + 0xd2, 0xc3, 0x26, 0x97, 0x69, 0x8f, 0x0f, 0x5e, 0x30, 0x51, 0x1b, 0x9e, 0xfb, 0x52, 0x61, 0xbc, + 0xd5, 0x42, 0xc6, 0x43, 0x8d, 0xdf, 0x33, 0x6d, 0x3a, 0x5c, 0x2d, 0x1e, 0xae, 0x96, 0x0c, 0xf7, + 0xab, 0x2b, 0xd7, 0xbf, 0x2b, 0xc9, 0xe4, 0x2a, 0x5d, 0xcd, 0x14, 0xa1, 0x6e, 0x0a, 0x53, 0x3b, + 0x45, 0xa9, 0x9f, 0xc2, 0xd5, 0x50, 0xe1, 0xea, 0xa8, 0x48, 0xb5, 0x24, 0x99, 0x99, 0x4a, 0xba, + 0xaf, 0xd2, 0x4c, 0xb8, 0x0b, 0xb7, 0x55, 0x6a, 0x38, 0xe9, 0x02, 0xbc, 0x3f, 0x94, 0xd8, 0xa7, + 0xd4, 0xf0, 0x52, 0x39, 0x64, 0xf5, 0x0f, 0x3b, 0x5b, 0x48, 0xb8, 0xe9, 0xc2, 0x1e, 0x1f, 0x14, + 0xd0, 0x77, 0x51, 0x91, 0x27, 0xe9, 0x00, 0xaa, 0x17, 0x86, 0x9a, 0x9a, 0xd2, 0x8a, 0xd8, 0xce, + 0x22, 0xa3, 0x89, 0xd2, 0x51, 0x54, 0x33, 0x3c, 0x35, 0xdd, 0x57, 0xa9, 0x3d, 0x8e, 0xdf, 0x6e, + 0x90, 0x18, 0x6e, 0x43, 0x0c, 0x17, 0x25, 0x86, 0x11, 0x07, 0x58, 0xf9, 0xb0, 0x56, 0x28, 0x26, + 0x84, 0xbb, 0x6e, 0x42, 0xb8, 0x6b, 0x41, 0x8a, 0x1a, 0xe1, 0xbc, 0xa5, 0xea, 0x41, 0x35, 0x5f, + 0xf3, 0x40, 0x94, 0xaf, 0xd9, 0x75, 0x3d, 0x6e, 0x4c, 0x0d, 0xcf, 0xe2, 0xe0, 0x5d, 0x2d, 0x34, + 0xef, 0xd9, 0xc8, 0xf0, 0x0d, 0x7e, 0x3f, 0x71, 0x0a, 0xfb, 0xcc, 0x35, 0x13, 0x6b, 0xae, 0x3e, + 0xe7, 0xf5, 0x7d, 0xed, 0xdb, 0x9d, 0xe7, 0x8e, 0xe1, 0x67, 0x2e, 0xe1, 0xc4, 0x19, 0xfc, 0xe4, + 0x06, 0xfe, 0xbd, 0x03, 0xf8, 0x8d, 0x1a, 0x9b, 0x2d, 0x00, 0xd1, 0x4b, 0x8c, 0x02, 0x97, 0x1e, + 0xfd, 0x2d, 0xd8, 0x05, 0x21, 0xdc, 0xe5, 0x20, 0xc3, 0xc5, 0x20, 0xcd, 0xa5, 0x20, 0xcb, 0x85, + 0x20, 0xdd, 0x65, 0x20, 0xdd, 0x45, 0x20, 0xd3, 0x25, 0xa0, 0x56, 0x70, 0x94, 0x70, 0x13, 0x7f, + 0x7a, 0x5b, 0x1c, 0x66, 0x0c, 0x03, 0x36, 0x14, 0x79, 0x5f, 0x66, 0x46, 0x85, 0x7d, 0x81, 0x7d, + 0xf4, 0xa7, 0x3a, 0xf7, 0xdd, 0xbb, 0x9d, 0x89, 0xc6, 0xdd, 0x59, 0x94, 0xcd, 0xaa, 0xe8, 0xc6, + 0x37, 0x25, 0x3e, 0xa1, 0xb1, 0x50, 0x92, 0xa1, 0xf9, 0xc4, 0x66, 0x56, 0x13, 0x9f, 0x49, 0xad, + 0x90, 0xcc, 0x69, 0x12, 0x32, 0xa5, 0x49, 0xc8, 0x8c, 0x46, 0x7d, 0x62, 0x05, 0x83, 0xff, 0x22, + 0x41, 0xbf, 0x00, 0xa9, 0x5d, 0x0b, 0x79, 0x10, 0x99, 0xdc, 0x9d, 0xaa, 0x87, 0xde, 0x6c, 0x44, + 0x37, 0x57, 0x73, 0xc3, 0xbb, 0xe9, 0xf9, 0x0f, 0xed, 0x9b, 0xee, 0x64, 0x50, 0x37, 0x9f, 0x83, + 0xc0, 0xff, 0x98, 0x0c, 0xe7, 0x4d, 0x39, 0xe5, 0x20, 0x4d, 0x4b, 0x44, 0xe7, 0xb2, 0xc6, 0x7e, + 0xf0, 0xc0, 0xd0, 0x23, 0x37, 0xe4, 0xc6, 0xad, 0x43, 0xab, 0xe5, 0x6b, 0x01, 0x1b, 0xb2, 0x80, + 0xb9, 0x26, 0xbd, 0xef, 0x5a, 0xc0, 0xc5, 0x99, 0x41, 0x90, 0xcb, 0x0f, 0x47, 0xda, 0xde, 0xfe, + 0xe1, 0x81, 0xa6, 0x6b, 0x9f, 0xa7, 0xd1, 0x5e, 0x97, 0x89, 0x5a, 0xd1, 0x2e, 0x99, 0x15, 0xb9, + 0x96, 0xe1, 0x9a, 0x8f, 0x5a, 0x3f, 0xf0, 0xb8, 0x67, 0x7a, 0xce, 0x57, 0x77, 0xeb, 0xf3, 0xe5, + 0x65, 0x7f, 0x5b, 0xfb, 0xcc, 0x82, 0xd0, 0xf6, 0x5c, 0x6d, 0x77, 0x16, 0x71, 0xdc, 0xd2, 0x0c, + 0xd7, 0x4a, 0x22, 0xc9, 0x44, 0x5c, 0x0b, 0xc1, 0xa0, 0x7f, 0x1e, 0xec, 0x3f, 0x6d, 0xa2, 0x20, + 0x74, 0x29, 0x0b, 0xe7, 0x3f, 0xc3, 0xf7, 0xf4, 0xbb, 0x5c, 0x76, 0xe4, 0x45, 0xd6, 0xda, 0xa0, + 0x54, 0xf2, 0x4b, 0x90, 0x3e, 0x95, 0xae, 0x47, 0x69, 0xce, 0x4f, 0xfe, 0x5d, 0xce, 0xd7, 0x42, + 0xce, 0x5d, 0x9d, 0xe1, 0xf9, 0xdc, 0x16, 0x13, 0x5a, 0xc0, 0x4e, 0x0f, 0xd0, 0xa5, 0x00, 0x72, + 0x01, 0x00, 0x5c, 0x00, 0xe0, 0xce, 0x7b, 0x64, 0x68, 0x5f, 0x6e, 0xd1, 0x48, 0x90, 0xe2, 0x5e, + 0x62, 0x11, 0x29, 0xe9, 0xdf, 0xbc, 0xad, 0xea, 0xf5, 0xb5, 0xb8, 0x2f, 0x6d, 0x68, 0x8c, 0x6c, + 0xe7, 0x51, 0x9b, 0x08, 0xc5, 0x28, 0x48, 0x44, 0x70, 0xac, 0x16, 0xbf, 0xba, 0xe4, 0x4f, 0xad, + 0x88, 0x9f, 0x54, 0x91, 0x1b, 0x98, 0x45, 0x18, 0x94, 0x85, 0x19, 0x90, 0x45, 0x61, 0x47, 0xe1, + 0x06, 0x62, 0xe1, 0x40, 0x51, 0xa4, 0x01, 0xb8, 0x5c, 0xa4, 0x8f, 0xfa, 0x89, 0x51, 0x2d, 0x41, + 0x30, 0xe4, 0x27, 0x2a, 0x75, 0x6c, 0xc5, 0xad, 0x13, 0xef, 0xf5, 0x0b, 0x01, 0x77, 0xe2, 0x9a, + 0x8e, 0x17, 0xda, 0xee, 0x5d, 0x2c, 0xd0, 0xb8, 0x61, 0xbb, 0x2c, 0x48, 0x30, 0x7e, 0xf2, 0x24, + 0x28, 0xb1, 0x6e, 0x84, 0xda, 0xbd, 0xe1, 0x5a, 0x0e, 0xb3, 0xb4, 0xdb, 0x47, 0x8d, 0xdf, 0xdb, + 0xe1, 0x57, 0xb7, 0xd7, 0x7f, 0x7a, 0x25, 0x44, 0x3d, 0x3e, 0x31, 0xaf, 0x48, 0x85, 0xf9, 0xd6, + 0x44, 0xfa, 0xd4, 0x84, 0xfb, 0xd2, 0x64, 0xd2, 0x69, 0xa1, 0xbe, 0xb3, 0x62, 0xb8, 0xb4, 0x20, + 0x5f, 0x59, 0xb9, 0x3d, 0x0f, 0x02, 0xed, 0x66, 0x12, 0xec, 0x67, 0xe2, 0xec, 0x68, 0x4a, 0xda, + 0xd3, 0x64, 0x09, 0x82, 0x22, 0xec, 0x6b, 0xd2, 0x65, 0x83, 0xaa, 0xf6, 0x36, 0x31, 0x72, 0x47, + 0x5c, 0xab, 0x83, 0x6a, 0xfb, 0x37, 0x0a, 0xb6, 0x64, 0x0d, 0xf2, 0x9a, 0x25, 0x68, 0xed, 0x92, + 0x32, 0xed, 0x91, 0x04, 0x82, 0x68, 0x7d, 0xbf, 0x5d, 0xbe, 0xfb, 0x9c, 0x7d, 0xaf, 0xb3, 0x7d, + 0x32, 0x23, 0x9a, 0xa0, 0x3a, 0x15, 0x32, 0x4e, 0x43, 0xb6, 0x0d, 0x59, 0x7f, 0x39, 0x33, 0x2c, + 0x65, 0xcd, 0x9c, 0xb1, 0x98, 0x6c, 0x4b, 0x98, 0x62, 0x93, 0x69, 0x3b, 0x19, 0x37, 0x33, 0x1f, + 0x45, 0xcb, 0x4d, 0xc5, 0x28, 0x28, 0x17, 0x19, 0xb5, 0xa2, 0x42, 0x4e, 0xe4, 0x54, 0x89, 0x1c, + 0xf6, 0x50, 0x52, 0x1f, 0xb9, 0xc2, 0x27, 0xaf, 0xd5, 0xa7, 0x66, 0xdd, 0x9b, 0xbe, 0x6e, 0x3a, + 0xf6, 0x64, 0xf2, 0x39, 0x37, 0x7a, 0x76, 0xf2, 0xe6, 0x1b, 0xcd, 0xb9, 0x33, 0xc7, 0x6c, 0x68, + 0x44, 0x0e, 0x27, 0x61, 0x4b, 0xb5, 0xc4, 0xb3, 0x51, 0x2b, 0x14, 0x43, 0xd0, 0xc4, 0x59, 0x93, + 0xd9, 0x7c, 0x28, 0x6d, 0x3c, 0xe4, 0x36, 0x1d, 0x6a, 0xea, 0x26, 0xcc, 0x66, 0x23, 0x8c, 0x87, + 0x89, 0xb0, 0xc9, 0x14, 0xeb, 0x0d, 0x26, 0x8b, 0x3b, 0x4e, 0x4f, 0xdb, 0xad, 0xe7, 0x39, 0xcc, + 0x70, 0x29, 0xce, 0xdb, 0x4c, 0xfb, 0x37, 0x8a, 0xf5, 0x7e, 0x12, 0xd3, 0x8c, 0xc7, 0x3b, 0x8f, + 0xeb, 0x9e, 0xa9, 0x9b, 0xde, 0xc8, 0x4f, 0x70, 0xa0, 0xa5, 0x3b, 0xcc, 0x18, 0xc6, 0x8d, 0x8f, + 0x8b, 0x42, 0xe8, 0x39, 0x50, 0x89, 0x15, 0x4d, 0x72, 0xc4, 0xe8, 0x16, 0xe3, 0xcc, 0xe4, 0x3a, + 0x0f, 0x0c, 0x37, 0x1c, 0x4d, 0x32, 0xe1, 0x52, 0xe9, 0xaf, 0xa5, 0x5d, 0x94, 0x49, 0x9b, 0x35, + 0xa0, 0xc9, 0xa0, 0xc9, 0xa0, 0xc9, 0xaa, 0xa3, 0xc9, 0x22, 0xdb, 0xe5, 0xbb, 0x4d, 0x42, 0x45, + 0x46, 0xf0, 0x1e, 0x86, 0xb8, 0x10, 0x01, 0xa1, 0x7f, 0x5a, 0x44, 0x21, 0x81, 0x34, 0xab, 0x3b, + 0xb5, 0x2b, 0x55, 0x74, 0xce, 0x76, 0x71, 0x39, 0xd9, 0x09, 0x9d, 0x6c, 0x42, 0x12, 0xf5, 0xa7, + 0x5b, 0xd6, 0x6a, 0x1e, 0xb6, 0x0e, 0xdb, 0xfb, 0xcd, 0xc3, 0x3d, 0xec, 0x1d, 0x89, 0x80, 0xa4, + 0x6b, 0x65, 0x50, 0xa8, 0xa0, 0x16, 0xe0, 0xd6, 0x15, 0xe0, 0xc6, 0x15, 0x10, 0x66, 0x76, 0xf9, + 0xe1, 0x48, 0x6b, 0x1d, 0xb4, 0x9b, 0x9d, 0x49, 0xf6, 0xdb, 0x2b, 0x6e, 0x70, 0xe6, 0xb0, 0x30, + 0xd4, 0xa6, 0xf6, 0x79, 0xad, 0x1b, 0x71, 0xef, 0x59, 0xb0, 0x9f, 0x62, 0x31, 0x69, 0xa2, 0xfc, + 0xac, 0x72, 0xc3, 0xd2, 0x32, 0x6c, 0x13, 0x24, 0x04, 0x18, 0xb7, 0x3c, 0xc6, 0xcd, 0xdc, 0x58, + 0x70, 0x5a, 0x74, 0xfc, 0x7a, 0xd6, 0x60, 0x99, 0xd8, 0x74, 0x7c, 0xc9, 0x41, 0xa8, 0x41, 0xa8, + 0x41, 0xa8, 0xab, 0x43, 0xa8, 0x61, 0x1a, 0xde, 0x2c, 0x45, 0xe5, 0x30, 0x23, 0x70, 0x63, 0xa4, + 0xef, 0x39, 0xb6, 0x69, 0x73, 0x4a, 0x95, 0xb5, 0xd8, 0x74, 0x99, 0x94, 0xd7, 0xf9, 0xc5, 0xf9, + 0x09, 0x94, 0x17, 0x94, 0x17, 0x94, 0x57, 0x75, 0x94, 0x17, 0x73, 0xa3, 0x11, 0x23, 0xa3, 0xe5, + 0xa9, 0x02, 0x6b, 0x11, 0xb4, 0x75, 0xe2, 0x46, 0x23, 0xba, 0xd3, 0x7b, 0xed, 0x5d, 0xf1, 0xc0, + 0x76, 0xef, 0x68, 0x9f, 0x2f, 0xd5, 0xe3, 0x35, 0x4c, 0xe4, 0x22, 0xa1, 0x4d, 0xa3, 0x11, 0x37, + 0xfa, 0xf1, 0xf4, 0xe2, 0x7d, 0xf7, 0x94, 0xb2, 0xd9, 0x66, 0xdc, 0xec, 0x69, 0xef, 0xfc, 0xdf, + 0x37, 0xa7, 0x17, 0x47, 0xb4, 0x4d, 0xef, 0xc6, 0x4d, 0xbf, 0xbf, 0xb8, 0xfe, 0xab, 0x56, 0xaa, + 0xd7, 0x6a, 0xd7, 0x5e, 0x8f, 0x20, 0xe0, 0xe8, 0x59, 0x93, 0xc9, 0x24, 0x3b, 0xda, 0x2e, 0xe1, + 0xe2, 0x4d, 0x77, 0x9a, 0xf4, 0xc9, 0xd6, 0xfc, 0x3e, 0x77, 0xb4, 0x26, 0x61, 0xc3, 0xc9, 0x61, + 0xef, 0x68, 0x75, 0x64, 0x1d, 0xd8, 0x74, 0xa3, 0xef, 0x61, 0x63, 0xb7, 0xd1, 0x99, 0x3e, 0xc6, + 0x08, 0xb5, 0xa3, 0x80, 0x19, 0xdc, 0x76, 0xef, 0xb4, 0x23, 0xc3, 0xbc, 0x67, 0xda, 0x89, 0xcb, + 0x03, 0x9b, 0x85, 0x5a, 0xe4, 0x7b, 0xee, 0x57, 0xf7, 0x92, 0x99, 0xcc, 0x7e, 0x88, 0xff, 0xf5, + 0xd3, 0x13, 0xb6, 0xd5, 0xce, 0x99, 0x7d, 0x77, 0x7f, 0xeb, 0x05, 0x5a, 0xd7, 0x7a, 0x60, 0x01, + 0xb7, 0xc3, 0x69, 0x5a, 0x03, 0x98, 0x87, 0xb5, 0x42, 0xcc, 0xc3, 0xc2, 0x36, 0x14, 0x86, 0x64, + 0xf0, 0x73, 0x79, 0xfc, 0x7c, 0xc4, 0x23, 0x3a, 0x46, 0x1e, 0x37, 0x06, 0xd2, 0x0a, 0xd2, 0x0a, + 0xd2, 0x5a, 0x22, 0xd2, 0x8a, 0x10, 0xa6, 0x75, 0x06, 0x26, 0x34, 0x84, 0xa9, 0xd1, 0x3c, 0x40, + 0x14, 0x13, 0x31, 0x6f, 0xd5, 0x10, 0xc5, 0x54, 0xc0, 0xde, 0x01, 0x5a, 0x6e, 0x3a, 0xa1, 0x6d, + 0xb6, 0xda, 0xf5, 0x8e, 0x96, 0x3c, 0x39, 0x76, 0x19, 0x4f, 0x93, 0x0a, 0xbc, 0x4d, 0xb3, 0x09, + 0xb4, 0xb5, 0xad, 0x5e, 0xff, 0xa1, 0xbd, 0xad, 0x5d, 0xf9, 0xcc, 0xb4, 0x87, 0xb6, 0x99, 0x80, + 0xf0, 0xaf, 0x6e, 0xda, 0xdc, 0x15, 0x4b, 0x4e, 0xbf, 0xb6, 0x07, 0x0e, 0x5b, 0x10, 0x87, 0xa5, + 0xdc, 0x43, 0xc8, 0x16, 0xd0, 0x56, 0x19, 0x9f, 0xac, 0x6e, 0x4e, 0x80, 0xe9, 0x33, 0xf9, 0x12, + 0x27, 0x04, 0x70, 0xa7, 0x26, 0xab, 0x30, 0x7f, 0x4e, 0x80, 0xa7, 0xa6, 0x90, 0x16, 0x00, 0x69, + 0x01, 0x0a, 0x21, 0xfc, 0x8a, 0xa5, 0x05, 0x98, 0xdd, 0x18, 0x3a, 0x73, 0x5d, 0xda, 0x22, 0x8d, + 0xcd, 0xae, 0x01, 0x9b, 0x1d, 0x6c, 0x76, 0x9b, 0x68, 0xb3, 0xa3, 0xca, 0xf3, 0x9a, 0x37, 0xe1, + 0xce, 0xd2, 0xc3, 0x9b, 0x2b, 0x01, 0x8f, 0xa0, 0xeb, 0x4e, 0x7e, 0xed, 0x45, 0x5c, 0x7f, 0x61, + 0x62, 0x40, 0x26, 0x5f, 0x45, 0x9a, 0x68, 0x41, 0x14, 0xb3, 0xac, 0x69, 0xa2, 0x6d, 0x81, 0x49, + 0xa2, 0xc9, 0x33, 0x03, 0x0b, 0x2a, 0x73, 0x8a, 0x14, 0xcc, 0x32, 0xc5, 0x8d, 0x34, 0xb1, 0x23, + 0x4d, 0xfc, 0xc8, 0x10, 0x43, 0xb4, 0xe2, 0x88, 0x58, 0x2c, 0xa5, 0x0b, 0x20, 0xac, 0x2c, 0xe9, + 0x9c, 0x4c, 0x79, 0x68, 0xeb, 0xb4, 0x95, 0x35, 0x5e, 0x05, 0x2c, 0x07, 0x02, 0xda, 0xee, 0x1b, + 0x9c, 0xb3, 0xc0, 0x15, 0x96, 0x3a, 0xba, 0xb6, 0xb5, 0xf5, 0xa5, 0xae, 0x1f, 0x1a, 0xfa, 0xb0, + 0xab, 0x7f, 0x18, 0xfc, 0x6c, 0xbc, 0x6d, 0x8d, 0x3b, 0xdb, 0x3f, 0xf7, 0xc7, 0x2f, 0x7f, 0xf9, + 0xeb, 0xb5, 0x3f, 0x6b, 0xbc, 0xdd, 0x1f, 0x77, 0x96, 0xfc, 0x4b, 0x7b, 0xdc, 0x59, 0xb1, 0x8d, + 0xbd, 0xf1, 0xd6, 0xc2, 0x9f, 0xc6, 0xbf, 0x6f, 0x2e, 0xfb, 0x40, 0x6b, 0xc9, 0x07, 0x76, 0x97, + 0x7d, 0x60, 0x77, 0xc9, 0x07, 0x96, 0x0e, 0xa9, 0xb9, 0xe4, 0x03, 0x7b, 0xe3, 0x5f, 0x0b, 0x7f, + 0xbf, 0xf5, 0xfa, 0x9f, 0xb6, 0xc7, 0xdb, 0xbf, 0x96, 0xfd, 0xdb, 0xfe, 0xf8, 0x57, 0x67, 0x7b, + 0x9b, 0xfe, 0xa2, 0x0f, 0x44, 0x1c, 0xc0, 0x8b, 0xab, 0xde, 0xdf, 0xc2, 0x4f, 0xe1, 0x7f, 0x71, + 0x0c, 0x8b, 0x3a, 0x86, 0xff, 0xaa, 0x95, 0x3d, 0xa7, 0xb5, 0x62, 0xb5, 0x5b, 0x85, 0xb9, 0x42, + 0xc4, 0xe9, 0x75, 0xca, 0x58, 0x09, 0xc7, 0x76, 0xbf, 0xe9, 0x8e, 0xf1, 0xc8, 0x82, 0x54, 0xe7, + 0x0a, 0x63, 0x0b, 0xaf, 0xf4, 0x05, 0xf6, 0x00, 0xf6, 0x00, 0xf6, 0xb0, 0x31, 0xec, 0xe1, 0xcc, + 0x70, 0x2d, 0x83, 0x7b, 0xc1, 0xa3, 0x80, 0x2a, 0x4b, 0xe2, 0x99, 0x89, 0x7f, 0xff, 0x18, 0x82, + 0x99, 0x2c, 0x63, 0x26, 0xf3, 0x98, 0xe5, 0x25, 0x14, 0x6a, 0x8e, 0xb7, 0xff, 0xef, 0xf6, 0xff, + 0x03, 0x84, 0x9e, 0x87, 0xd0, 0x7f, 0x5e, 0x2f, 0x60, 0x3d, 0x60, 0xbd, 0x31, 0x0a, 0x3f, 0xe7, + 0x0a, 0xa3, 0x49, 0x23, 0x4b, 0xd2, 0xef, 0x72, 0x45, 0xd6, 0xd0, 0x6f, 0x0f, 0xc1, 0xd6, 0x50, + 0x9a, 0xf8, 0xe9, 0x4d, 0xfb, 0xc4, 0xa0, 0x1c, 0x1e, 0x42, 0x78, 0x08, 0x65, 0x83, 0xeb, 0x72, + 0x09, 0x61, 0x72, 0xa0, 0x3b, 0x9f, 0x43, 0x67, 0x18, 0xb0, 0x21, 0xe5, 0x79, 0x9d, 0x61, 0xda, + 0x7d, 0xc2, 0x36, 0xfb, 0x53, 0x3d, 0xf1, 0xee, 0xdd, 0x54, 0x96, 0xef, 0xd8, 0x7e, 0x95, 0xc4, + 0x79, 0xc8, 0x0d, 0xce, 0xe8, 0x25, 0xfa, 0xa4, 0xd9, 0x92, 0x87, 0x7d, 0x34, 0x21, 0xd4, 0x21, + 0xd4, 0x37, 0x50, 0xa8, 0x23, 0xec, 0x03, 0x86, 0x5b, 0xc1, 0x62, 0x46, 0xb4, 0xb8, 0x91, 0x26, + 0x76, 0xa4, 0x89, 0x1f, 0x19, 0x62, 0x88, 0xde, 0x64, 0xa0, 0x21, 0xec, 0xe3, 0x37, 0x80, 0x05, + 0x61, 0x1f, 0xf0, 0xb7, 0x23, 0xec, 0x23, 0x53, 0x2f, 0x08, 0xfb, 0x40, 0xd8, 0x87, 0x78, 0xf5, + 0x45, 0x19, 0xdd, 0x60, 0x87, 0x7a, 0x90, 0xe4, 0xe4, 0x12, 0x88, 0x85, 0xd3, 0x2e, 0x00, 0x89, + 0x01, 0x89, 0x01, 0x89, 0x01, 0x89, 0xc9, 0x4e, 0x3b, 0x5d, 0x76, 0xfc, 0xa5, 0x68, 0xb8, 0x81, + 0x10, 0x37, 0xd2, 0x2d, 0x43, 0x88, 0x1b, 0xd4, 0x02, 0xd4, 0x02, 0x42, 0xdc, 0x10, 0xe2, 0x56, + 0x45, 0x2b, 0x0c, 0x42, 0xdc, 0xd6, 0x33, 0x17, 0x54, 0x21, 0xc4, 0xad, 0x94, 0x90, 0x66, 0x16, + 0xcb, 0xa4, 0xd3, 0xba, 0x8a, 0x17, 0xc4, 0xc1, 0x8b, 0x7e, 0x00, 0x65, 0x00, 0x65, 0x00, 0x65, + 0xc0, 0x70, 0xc9, 0x4e, 0x3b, 0x6d, 0x09, 0x9d, 0xa5, 0x68, 0xa3, 0x25, 0xa0, 0x6d, 0xd2, 0x12, + 0x3b, 0x8b, 0x4b, 0x2f, 0xa2, 0xe4, 0xce, 0x42, 0x2f, 0x49, 0x09, 0x9e, 0xde, 0xf9, 0xd1, 0xc5, + 0x59, 0xff, 0xf4, 0xe4, 0xfa, 0x44, 0xd0, 0x8d, 0xd5, 0xd2, 0xc2, 0x3c, 0x97, 0x27, 0xdd, 0xa3, + 0xbf, 0xba, 0xef, 0x4f, 0x85, 0xf6, 0x94, 0xd4, 0xea, 0xb9, 0xba, 0xee, 0x8a, 0xed, 0x25, 0x29, + 0xdb, 0x73, 0x7c, 0x72, 0xda, 0xfd, 0x47, 0x64, 0x2f, 0xad, 0xb8, 0x97, 0xfe, 0xe5, 0xc5, 0xfb, + 0x93, 0x9a, 0x90, 0x4e, 0xc6, 0x6f, 0x45, 0x1d, 0x5f, 0xea, 0xea, 0x41, 0x0b, 0x5d, 0x4c, 0xd6, + 0x9e, 0xb4, 0x9c, 0xd0, 0x42, 0x1f, 0x73, 0x57, 0x83, 0x1c, 0x4d, 0x3c, 0x47, 0x16, 0xc9, 0x16, + 0x77, 0xb4, 0x96, 0xc0, 0x3e, 0x9e, 0x2e, 0x1f, 0x39, 0x31, 0x7d, 0x0e, 0x34, 0x92, 0xab, 0xd7, + 0xd1, 0x9a, 0x62, 0x4e, 0xec, 0x86, 0xe9, 0x60, 0x01, 0x59, 0xa5, 0x17, 0xfa, 0xa0, 0xcf, 0x32, + 0xfd, 0xf2, 0x4b, 0xa0, 0x1c, 0x78, 0x51, 0x4b, 0xbf, 0xd1, 0x79, 0x2a, 0xa5, 0x73, 0x6c, 0x87, + 0xa6, 0xf7, 0xc0, 0x82, 0x47, 0x6d, 0xe8, 0x05, 0x5a, 0xaf, 0xaf, 0x3d, 0xbc, 0x48, 0x64, 0x3c, + 0x49, 0x5d, 0x3c, 0xcb, 0x5a, 0xbc, 0xff, 0x6e, 0xf7, 0x5d, 0x53, 0xa4, 0x34, 0x17, 0x0c, 0xc1, + 0x5f, 0x83, 0xe2, 0xa2, 0xb2, 0x53, 0x17, 0x86, 0xca, 0x5f, 0x45, 0xe7, 0x54, 0x7b, 0x2f, 0x6c, + 0xc4, 0x63, 0x45, 0x64, 0xe1, 0x26, 0xd8, 0x4e, 0xbc, 0xc0, 0xbe, 0x13, 0x51, 0xd6, 0x23, 0x65, + 0xf0, 0x93, 0xf6, 0x61, 0x2b, 0x81, 0xad, 0x04, 0xb6, 0x12, 0xd8, 0x4a, 0xc8, 0x4e, 0x7b, 0x6a, + 0x8b, 0x15, 0x22, 0x60, 0x60, 0x2f, 0x59, 0xd5, 0x5e, 0x72, 0x71, 0xfd, 0xd7, 0xc9, 0xa5, 0x70, + 0x53, 0xc9, 0xd5, 0x75, 0xf7, 0xba, 0x77, 0x24, 0xdc, 0x4e, 0x72, 0xfc, 0xcf, 0x79, 0xf7, 0xac, + 0x77, 0x04, 0xeb, 0xc2, 0x4b, 0xeb, 0xc2, 0x74, 0x5d, 0x48, 0x0b, 0x00, 0x2f, 0xf4, 0x32, 0x39, + 0x4a, 0x62, 0x4d, 0x0b, 0xd3, 0x83, 0xd4, 0xd1, 0x1a, 0x9b, 0xc9, 0xc7, 0x91, 0x89, 0x61, 0xad, + 0x76, 0xa5, 0x66, 0x62, 0x98, 0x78, 0x15, 0x51, 0x0e, 0x7b, 0x02, 0x09, 0x49, 0x5e, 0xd6, 0xd5, + 0x4e, 0xed, 0x90, 0x77, 0x39, 0x27, 0xca, 0x41, 0x7f, 0x66, 0xbb, 0x27, 0xce, 0xb4, 0x14, 0x31, + 0x89, 0x9c, 0xaa, 0x9d, 0x19, 0x3f, 0xe6, 0x5a, 0x6c, 0x1c, 0xb4, 0x5a, 0xed, 0xfd, 0x56, 0xab, + 0xbe, 0xbf, 0xbb, 0x5f, 0x3f, 0xdc, 0xdb, 0x6b, 0xb4, 0x1b, 0x04, 0x75, 0xf5, 0x6a, 0x17, 0x81, + 0xc5, 0x02, 0x66, 0xbd, 0x8f, 0xd7, 0xd4, 0x8d, 0x1c, 0x87, 0xb2, 0xc9, 0x4f, 0x61, 0x12, 0x4e, + 0x9e, 0xbf, 0x84, 0x5e, 0xd9, 0x8a, 0x42, 0xc9, 0xbc, 0xfa, 0x35, 0x92, 0x67, 0xf2, 0x41, 0x64, + 0x72, 0x77, 0x0a, 0x8f, 0x7b, 0xb3, 0x2e, 0x6f, 0xae, 0xe6, 0xfa, 0xbf, 0xe9, 0xf9, 0x0f, 0xed, + 0x9b, 0x99, 0x55, 0xa8, 0x86, 0xda, 0x56, 0xe5, 0x3a, 0x0f, 0x65, 0x2e, 0x6f, 0x35, 0x79, 0xd5, + 0xa1, 0x1b, 0xf3, 0xf5, 0xd8, 0xf3, 0x57, 0xba, 0x7a, 0xb5, 0x55, 0x14, 0xbd, 0x42, 0xd1, 0xab, + 0x42, 0x6c, 0x2d, 0x8a, 0x15, 0xbd, 0x22, 0xaa, 0x88, 0x43, 0x5b, 0x09, 0x07, 0x05, 0xaf, 0x0a, + 0xb8, 0xa6, 0xc2, 0xae, 0xab, 0xb0, 0x6b, 0x2b, 0xe2, 0xfa, 0x96, 0x83, 0xba, 0x90, 0x15, 0xbc, + 0x62, 0x2e, 0xa9, 0x8f, 0x7b, 0x2e, 0xca, 0x2c, 0x69, 0x97, 0x2a, 0x53, 0x0b, 0x1b, 0x1a, 0x91, + 0xc3, 0x49, 0x7d, 0xe5, 0xb5, 0xf8, 0x7c, 0xd1, 0x10, 0xe1, 0x01, 0xb2, 0xf6, 0x95, 0x46, 0xda, + 0x89, 0x92, 0x7a, 0xc2, 0xa5, 0x9f, 0x70, 0x29, 0x28, 0x52, 0x1a, 0x96, 0xd3, 0x60, 0x27, 0x2e, + 0x6b, 0x1f, 0xfd, 0x33, 0x51, 0xe2, 0xe7, 0xa1, 0x65, 0xb7, 0x79, 0x0a, 0x4f, 0x0b, 0x5c, 0x92, + 0x2c, 0xb1, 0x31, 0x09, 0x7f, 0x30, 0x1c, 0x01, 0xb9, 0x62, 0x67, 0x2d, 0x43, 0xf7, 0x40, 0xf7, + 0x40, 0xf7, 0x6c, 0x90, 0xee, 0x89, 0x6c, 0x97, 0xef, 0x36, 0x05, 0xa8, 0x1e, 0xca, 0x7c, 0xb1, + 0x97, 0x86, 0x7b, 0x47, 0x1f, 0xdb, 0x2a, 0x20, 0xd4, 0xe3, 0xcc, 0x76, 0xc5, 0x85, 0x48, 0x7c, + 0x36, 0x9c, 0x88, 0x89, 0x73, 0x36, 0xd7, 0x3e, 0x04, 0x46, 0x12, 0x4b, 0x79, 0x6c, 0xdf, 0xd9, + 0x54, 0xde, 0xa2, 0xd7, 0xcf, 0x1e, 0xbb, 0x33, 0xb8, 0xfd, 0xc0, 0x48, 0x9c, 0x30, 0x02, 0xaf, + 0xdd, 0xf3, 0xad, 0x35, 0x7e, 0x88, 0xdf, 0xda, 0x56, 0xf3, 0xb0, 0x75, 0xd8, 0xde, 0x6f, 0x1e, + 0xee, 0x61, 0x8f, 0xa5, 0x08, 0x68, 0xfa, 0xd6, 0x06, 0x40, 0xdc, 0xd5, 0x41, 0xdc, 0x8e, 0x3d, + 0x64, 0xdc, 0x1e, 0x09, 0x30, 0x69, 0xa5, 0x2d, 0x03, 0x71, 0x03, 0x71, 0x03, 0x71, 0x03, 0x71, + 0x03, 0x71, 0x03, 0x71, 0x03, 0x71, 0x03, 0x71, 0x03, 0x71, 0x03, 0x71, 0x6f, 0x30, 0xe2, 0x1e, + 0x19, 0xae, 0x71, 0xc7, 0x2c, 0x7a, 0xc0, 0x3d, 0x6b, 0xb8, 0xcc, 0x4e, 0xe4, 0xe4, 0xde, 0xc2, + 0x8b, 0x0c, 0x5e, 0x01, 0x5e, 0x01, 0x5e, 0xb1, 0xee, 0x69, 0xdd, 0x18, 0x2f, 0xb2, 0xc0, 0x8c, + 0x1a, 0x02, 0x33, 0x69, 0x08, 0x7c, 0x58, 0x7a, 0xf9, 0xe1, 0xe8, 0x0f, 0xc9, 0x13, 0x1e, 0xda, + 0x6f, 0xb5, 0x70, 0x9a, 0x29, 0xa1, 0x25, 0x24, 0x47, 0x86, 0xcc, 0x27, 0xd7, 0xa2, 0x73, 0x62, + 0x14, 0xf3, 0xea, 0x7a, 0xfd, 0x5d, 0x04, 0xc2, 0x07, 0xc2, 0x57, 0x10, 0xe1, 0x7b, 0x96, 0x00, + 0x7b, 0x7a, 0xd2, 0x6a, 0x99, 0xb1, 0x7d, 0xf7, 0xf4, 0x14, 0xc8, 0x1e, 0xc8, 0x1e, 0xc8, 0x1e, + 0xc8, 0x7e, 0xdd, 0xd3, 0x2a, 0x26, 0xc9, 0xaa, 0x88, 0x64, 0x21, 0x62, 0x92, 0x84, 0x88, 0x4d, + 0x0e, 0x32, 0x49, 0x0a, 0x12, 0x8b, 0x67, 0x01, 0xa8, 0x38, 0x49, 0x05, 0x72, 0xdc, 0xbb, 0xea, + 0xbe, 0x3f, 0x3d, 0xb9, 0xf9, 0x74, 0x7e, 0x75, 0x71, 0xda, 0x3b, 0xea, 0x5d, 0x9f, 0x1c, 0xdf, + 0x5c, 0x76, 0x6b, 0xe5, 0x4e, 0x87, 0x23, 0x2c, 0x45, 0x47, 0xb2, 0xd4, 0x42, 0xcc, 0xe0, 0xcb, + 0x16, 0x9a, 0x3a, 0x75, 0x46, 0x55, 0x53, 0x52, 0x80, 0x58, 0xaf, 0x4d, 0xac, 0x17, 0xb2, 0x12, + 0x82, 0x5a, 0x2b, 0x49, 0xad, 0x17, 0xf7, 0x11, 0xe4, 0x1a, 0xe4, 0x5a, 0x3d, 0x72, 0xed, 0xf1, + 0x7b, 0x16, 0xe8, 0x44, 0xcf, 0xac, 0x17, 0x69, 0xd3, 0x7c, 0xeb, 0x70, 0xa4, 0x81, 0x6e, 0x83, + 0x6e, 0x83, 0x6e, 0x57, 0x8e, 0x6e, 0xc3, 0x91, 0x06, 0xbc, 0x0f, 0x47, 0x5a, 0x95, 0xd1, 0x3e, + 0x1c, 0x69, 0xc0, 0xfa, 0xea, 0x63, 0xfd, 0x30, 0xf2, 0x7d, 0xd2, 0x62, 0xc8, 0xa9, 0x1c, 0x4c, + 0x5b, 0x06, 0xc6, 0x07, 0xc6, 0x07, 0xc6, 0x07, 0xc6, 0x07, 0xc6, 0x07, 0xc6, 0x7f, 0x45, 0x01, + 0x71, 0x83, 0x47, 0xa1, 0x4a, 0x00, 0xdf, 0x62, 0x7e, 0xc0, 0x4c, 0x83, 0x93, 0xc5, 0x81, 0x17, + 0x85, 0xdc, 0xa7, 0x4b, 0x5f, 0x25, 0xd8, 0x3e, 0xb7, 0x37, 0xc0, 0xe3, 0xc0, 0xe3, 0x92, 0xf1, + 0x38, 0x12, 0x81, 0xaf, 0x94, 0xf8, 0xf9, 0xb5, 0xec, 0xc7, 0x3b, 0x53, 0x87, 0x40, 0x51, 0xb9, + 0xb9, 0x73, 0xe4, 0x1c, 0x9e, 0x00, 0x40, 0x16, 0xd2, 0x65, 0xa4, 0x4d, 0x5b, 0x44, 0x4e, 0x5a, + 0x69, 0x94, 0x01, 0x39, 0x69, 0x91, 0x93, 0xf6, 0x0f, 0x57, 0x9c, 0xde, 0x46, 0x42, 0x7b, 0x30, + 0x68, 0xae, 0x3b, 0x2c, 0x07, 0xb0, 0x1c, 0xc0, 0x72, 0x40, 0x29, 0x3e, 0xd2, 0x06, 0x89, 0x43, + 0x2a, 0x16, 0x2e, 0x01, 0x69, 0x50, 0x85, 0x20, 0xb1, 0x22, 0x4c, 0xbc, 0x88, 0x14, 0x33, 0xc2, + 0xc5, 0x4d, 0x11, 0xf4, 0x1f, 0x45, 0x47, 0x0b, 0x62, 0xfe, 0xc4, 0xe7, 0x9d, 0x5a, 0x4c, 0xa5, + 0x0d, 0x5b, 0x76, 0x68, 0xdc, 0x3a, 0x8c, 0xa8, 0xf8, 0xcd, 0xea, 0xf6, 0xb5, 0x57, 0xbb, 0x15, + 0x74, 0x7a, 0xc4, 0x54, 0x54, 0x16, 0x2e, 0xe4, 0x64, 0x08, 0x3b, 0x69, 0x42, 0x4f, 0x96, 0xf0, + 0x93, 0x2e, 0x04, 0xa5, 0x0b, 0x43, 0x99, 0x42, 0x51, 0x8c, 0x70, 0x14, 0x24, 0x24, 0xd3, 0x85, + 0x11, 0x56, 0xa1, 0x79, 0xe1, 0xb6, 0xd0, 0x7b, 0x87, 0x96, 0x22, 0xb3, 0x86, 0x52, 0x5b, 0x20, + 0xc8, 0x42, 0xbc, 0xd0, 0x8f, 0x70, 0x8b, 0xb1, 0xf8, 0x9b, 0x20, 0x22, 0x23, 0x5a, 0xaa, 0x5e, + 0x23, 0xee, 0x4d, 0x08, 0x43, 0x14, 0x88, 0xdd, 0x8d, 0x45, 0xcd, 0xbe, 0xd0, 0x35, 0xb4, 0x3b, + 0xb4, 0x3b, 0xb4, 0x3b, 0xb4, 0x3b, 0xb4, 0xbb, 0xea, 0xda, 0x5d, 0x60, 0xac, 0xc8, 0x42, 0x5f, + 0xe2, 0xe2, 0xc3, 0x5f, 0x7e, 0x89, 0x15, 0x59, 0x5a, 0x9e, 0xf8, 0xf1, 0xf6, 0xbb, 0x86, 0x60, + 0x01, 0x27, 0x53, 0x7a, 0xbf, 0x26, 0xc5, 0x45, 0x47, 0x98, 0x17, 0x2e, 0xd0, 0x5f, 0x15, 0xec, + 0x59, 0xce, 0x81, 0xf0, 0x51, 0x8e, 0xdf, 0xa8, 0xd9, 0xfa, 0x00, 0x0c, 0x09, 0x0c, 0x69, 0x65, + 0x15, 0x96, 0x54, 0x0a, 0xd5, 0x3d, 0xd7, 0xb1, 0xdd, 0x6f, 0xe2, 0x59, 0xd1, 0xf3, 0xee, 0xc0, + 0x84, 0xc0, 0x84, 0xc0, 0x84, 0xc0, 0x84, 0xc0, 0x84, 0xc0, 0x84, 0xc0, 0x84, 0xc0, 0x84, 0xc0, + 0x84, 0xc0, 0x84, 0xc0, 0x84, 0xc0, 0x84, 0x0a, 0x61, 0x42, 0x7e, 0x22, 0x70, 0x82, 0x78, 0x35, + 0xa8, 0x8b, 0xd8, 0x2d, 0x95, 0xfa, 0xaf, 0xf4, 0x09, 0x4e, 0x04, 0x4e, 0x04, 0x4e, 0x04, 0x4e, + 0xa4, 0x0c, 0x27, 0x22, 0x2f, 0xcf, 0xb7, 0x4c, 0x76, 0xed, 0x0b, 0xec, 0x42, 0x4c, 0xf9, 0xbe, + 0x02, 0xf8, 0x84, 0xc8, 0xf2, 0x7e, 0x0b, 0x9d, 0x09, 0x2e, 0xf7, 0xb7, 0xd0, 0x9f, 0xac, 0xd2, + 0x70, 0x8b, 0x67, 0x5d, 0x74, 0xa9, 0x38, 0x49, 0x62, 0xe1, 0xf9, 0x51, 0x31, 0x7e, 0xc8, 0x3f, + 0x2a, 0xa2, 0xcb, 0x07, 0x6e, 0xf2, 0x99, 0x01, 0x4b, 0x83, 0xa5, 0xab, 0x8a, 0x96, 0xae, 0x26, + 0x2c, 0x5d, 0xb0, 0x74, 0x25, 0xe7, 0x00, 0x32, 0x14, 0x96, 0x2e, 0x58, 0xba, 0x28, 0x2c, 0x5d, + 0x02, 0x6d, 0x29, 0x62, 0x5e, 0x7c, 0xc3, 0xa2, 0x05, 0x8b, 0x16, 0x2c, 0x5a, 0xb0, 0x68, 0x49, + 0xb8, 0x2d, 0xb6, 0xff, 0xd0, 0xd6, 0x85, 0x1f, 0xaf, 0xd4, 0xd3, 0x7f, 0x20, 0xb0, 0x8f, 0xbe, + 0xc1, 0x39, 0x0b, 0x5c, 0xe1, 0xfc, 0xa1, 0xb6, 0xb5, 0xf5, 0xa5, 0xae, 0x1f, 0x1a, 0xfa, 0xb0, + 0xab, 0x7f, 0x18, 0xfc, 0x6c, 0xbc, 0x6d, 0x8d, 0x3b, 0xdb, 0x3f, 0xf7, 0xc7, 0x2f, 0x7f, 0xf9, + 0xeb, 0xb5, 0x3f, 0x6b, 0xbc, 0xdd, 0x1f, 0x77, 0x96, 0xfc, 0x4b, 0x7b, 0xdc, 0x59, 0xb1, 0x8d, + 0xbd, 0xf1, 0xd6, 0xc2, 0x9f, 0xc6, 0xbf, 0x6f, 0x2e, 0xfb, 0x40, 0x6b, 0xc9, 0x07, 0x76, 0x97, + 0x7d, 0x60, 0x77, 0xc9, 0x07, 0x96, 0x0e, 0xa9, 0xb9, 0xe4, 0x03, 0x7b, 0xe3, 0x5f, 0x0b, 0x7f, + 0xbf, 0xf5, 0xfa, 0x9f, 0xb6, 0xc7, 0xdb, 0xbf, 0x96, 0xfd, 0xdb, 0xfe, 0xf8, 0x57, 0x67, 0x7b, + 0x7b, 0x67, 0xab, 0xd1, 0xfc, 0x52, 0xd7, 0x0f, 0x06, 0xbf, 0x1a, 0x5f, 0xea, 0x7a, 0x63, 0x10, + 0xff, 0xe5, 0xe0, 0xd7, 0x97, 0x86, 0x7e, 0x38, 0xfb, 0x36, 0xfe, 0xef, 0xb6, 0x38, 0x31, 0x32, + 0x10, 0x79, 0x7e, 0x2f, 0xae, 0x7a, 0x7f, 0x4b, 0x3b, 0xc4, 0xff, 0xc5, 0x29, 0x2e, 0xf9, 0x29, + 0xfe, 0x57, 0x0d, 0x14, 0x0a, 0x14, 0xaa, 0x78, 0x0a, 0xf5, 0x60, 0x38, 0xb6, 0xcc, 0x40, 0x81, + 0x17, 0xfd, 0x81, 0x52, 0x81, 0x52, 0x81, 0x52, 0x81, 0x52, 0x29, 0x43, 0xa9, 0x10, 0x24, 0xb0, + 0xf2, 0x17, 0x82, 0x04, 0xf2, 0xf5, 0x87, 0x20, 0x01, 0xd2, 0xa3, 0x82, 0x20, 0x81, 0x6a, 0x9d, + 0x19, 0x38, 0xb8, 0x24, 0x28, 0x56, 0x04, 0x09, 0xe4, 0xc4, 0x0b, 0x08, 0x12, 0xd0, 0x10, 0x24, + 0x80, 0x20, 0x01, 0x58, 0xb8, 0x60, 0xe1, 0x92, 0xde, 0x22, 0x75, 0xce, 0x56, 0xc1, 0x1b, 0x29, + 0xbb, 0x78, 0xc7, 0xac, 0x60, 0xc5, 0xf4, 0x1b, 0x92, 0x62, 0x1e, 0xe2, 0x36, 0x94, 0x70, 0x33, + 0x45, 0xc5, 0x8d, 0x88, 0x8d, 0x17, 0x11, 0x64, 0xd4, 0x44, 0x4a, 0xef, 0x22, 0x00, 0x12, 0x52, + 0x7a, 0x57, 0x4f, 0x3d, 0x08, 0x33, 0x42, 0xa6, 0xa7, 0x3d, 0x56, 0xe7, 0x01, 0x1b, 0x8a, 0x38, + 0xef, 0xb3, 0x18, 0x0e, 0x01, 0x66, 0xc7, 0x5a, 0x7f, 0xaa, 0xd1, 0xde, 0xbd, 0x9b, 0xea, 0x98, + 0xa9, 0xc6, 0xd9, 0x04, 0x55, 0x13, 0x72, 0x83, 0x33, 0x71, 0x9a, 0x66, 0xd2, 0xbc, 0x62, 0xb5, + 0x23, 0x9a, 0x50, 0x34, 0x50, 0x34, 0x50, 0x34, 0x99, 0x17, 0x00, 0xb5, 0x23, 0x4a, 0x87, 0xa2, + 0x85, 0xa3, 0x69, 0x19, 0xc2, 0x4e, 0x9a, 0xd0, 0x93, 0x25, 0xfc, 0xa4, 0x0b, 0x41, 0xe9, 0xc2, + 0x50, 0xa6, 0x50, 0x14, 0x67, 0xf6, 0xd1, 0x90, 0x53, 0x6d, 0x3d, 0x64, 0xd6, 0x40, 0x29, 0x04, + 0x94, 0x42, 0x80, 0xb2, 0x82, 0xb2, 0x82, 0xb2, 0x82, 0xb2, 0xda, 0x50, 0x65, 0x85, 0x88, 0x87, + 0x35, 0xbe, 0x90, 0x00, 0x14, 0x11, 0x0f, 0x12, 0x3a, 0x46, 0x02, 0x50, 0x41, 0x5f, 0x03, 0x64, + 0xf6, 0x47, 0x66, 0x7f, 0x00, 0x7b, 0x00, 0x7b, 0x00, 0x7b, 0x00, 0x7b, 0x00, 0x7b, 0x00, 0x7b, + 0x00, 0x7b, 0x00, 0x7b, 0x00, 0x7b, 0x00, 0x7b, 0x95, 0x81, 0x3d, 0x12, 0xd5, 0x03, 0xe2, 0x03, + 0xe2, 0x03, 0xe2, 0x03, 0xe2, 0xaf, 0x77, 0x5b, 0xf0, 0x06, 0xbd, 0x4c, 0xf0, 0x18, 0x6f, 0xd0, + 0x85, 0x9c, 0x75, 0xbc, 0x41, 0x27, 0x3a, 0x2a, 0x78, 0x83, 0x0e, 0xd2, 0x21, 0x87, 0x74, 0xc0, + 0x70, 0x53, 0x15, 0xc3, 0x0d, 0xde, 0xa0, 0xc3, 0x70, 0x83, 0x37, 0xe8, 0x30, 0xdc, 0xfc, 0xc6, + 0x70, 0x83, 0xbc, 0xeb, 0x30, 0xd0, 0xc0, 0x40, 0x03, 0x03, 0x0d, 0x0c, 0x34, 0x8b, 0xb7, 0x05, + 0x79, 0xd7, 0xd7, 0xef, 0x08, 0x19, 0xab, 0x91, 0x77, 0x5d, 0xc4, 0xf9, 0x45, 0xde, 0x75, 0x9c, + 0x62, 0xa5, 0xf3, 0xae, 0x23, 0x8d, 0xf8, 0x2b, 0x1a, 0x16, 0x69, 0xc4, 0xc1, 0x10, 0xc0, 0x10, + 0xc0, 0x10, 0x54, 0x65, 0x08, 0x70, 0xe1, 0xae, 0xfc, 0x05, 0x17, 0x6e, 0xbe, 0xfe, 0xe0, 0xc2, + 0x25, 0x3d, 0x2a, 0x70, 0xe1, 0x56, 0xeb, 0xcc, 0xc0, 0xfd, 0x20, 0x41, 0xb1, 0xc2, 0x85, 0x9b, + 0x13, 0x2f, 0xc0, 0x85, 0xab, 0xc1, 0x85, 0x0b, 0x17, 0xee, 0x86, 0x1a, 0x6c, 0x90, 0x15, 0xbb, + 0xb8, 0xac, 0xd8, 0x93, 0x0c, 0x9b, 0x65, 0xcd, 0x54, 0xfa, 0xa6, 0x44, 0x27, 0x22, 0x96, 0xce, + 0xe4, 0x56, 0x93, 0xda, 0xa9, 0x1d, 0xf2, 0x2e, 0xe7, 0xb4, 0x19, 0x0f, 0x63, 0xc6, 0x77, 0xe2, + 0x24, 0x1b, 0x4e, 0x8c, 0x6e, 0x63, 0x82, 0x30, 0xd7, 0x72, 0xe3, 0xa0, 0xd5, 0x6a, 0xef, 0xb7, + 0x5a, 0xf5, 0xfd, 0xdd, 0xfd, 0xfa, 0xe1, 0xde, 0x5e, 0xa3, 0xdd, 0x20, 0xc4, 0xf0, 0xb5, 0x8b, + 0xc0, 0x62, 0x01, 0xb3, 0xde, 0xc7, 0xeb, 0xee, 0x46, 0x8e, 0x23, 0xa2, 0xe9, 0x4f, 0x21, 0x0b, + 0x48, 0xe1, 0x38, 0xd5, 0x71, 0x13, 0x24, 0x78, 0x0a, 0x16, 0x38, 0x35, 0xd2, 0xe4, 0xc3, 0x41, + 0x64, 0x72, 0x77, 0x8a, 0x21, 0x7b, 0xb3, 0xc1, 0xdc, 0x5c, 0xcd, 0x8d, 0xec, 0xa6, 0xe7, 0x3f, + 0xb4, 0x6f, 0x2e, 0x93, 0x91, 0x75, 0xe7, 0x07, 0x76, 0xd3, 0x27, 0x4c, 0xd2, 0x9c, 0x5f, 0x50, + 0xe5, 0x6b, 0x21, 0xe7, 0x99, 0xa3, 0x3e, 0x6b, 0x45, 0x9d, 0xb1, 0x7c, 0x9b, 0x99, 0x7d, 0x0b, + 0x72, 0x2c, 0x3f, 0x51, 0x06, 0x6d, 0xd2, 0x8c, 0xd9, 0x44, 0x19, 0xb2, 0xc9, 0x32, 0x62, 0x53, + 0x3a, 0x7a, 0xc8, 0x1d, 0x3a, 0xd4, 0x24, 0x51, 0x98, 0x83, 0x46, 0x18, 0xc3, 0x13, 0xe1, 0x70, + 0x29, 0x56, 0x1c, 0x52, 0x65, 0xa0, 0x9e, 0x26, 0xdb, 0xa1, 0x3b, 0x1b, 0xcf, 0x93, 0xf8, 0x50, + 0x1d, 0x8c, 0x63, 0x36, 0x34, 0x22, 0x87, 0x93, 0x1a, 0x94, 0x6a, 0xf1, 0xf9, 0xa2, 0x51, 0xae, + 0x03, 0x2a, 0xfc, 0x4e, 0xea, 0xee, 0x26, 0x77, 0x6f, 0x8b, 0x70, 0x67, 0x0b, 0x73, 0x5f, 0x8b, + 0x32, 0x8d, 0x09, 0x77, 0x4f, 0x0b, 0xb7, 0x73, 0x89, 0x74, 0x3f, 0x97, 0x8b, 0x0f, 0x93, 0xbb, + 0x93, 0x05, 0x26, 0xf9, 0x21, 0x4e, 0xea, 0x43, 0x80, 0xf7, 0x09, 0x90, 0x47, 0x02, 0x8d, 0x1f, + 0x0c, 0x87, 0x5e, 0xbf, 0xa4, 0x2d, 0x43, 0xf4, 0x42, 0xf4, 0x42, 0xf4, 0x6e, 0x90, 0xe8, 0x25, + 0x8f, 0xdc, 0x11, 0x10, 0xa9, 0x23, 0x28, 0x32, 0x47, 0x80, 0x71, 0x5f, 0x64, 0xe4, 0x8d, 0xe8, + 0x48, 0x1b, 0x69, 0x51, 0x12, 0xe2, 0xa3, 0x22, 0x44, 0x84, 0x04, 0x8b, 0x8c, 0x94, 0x91, 0x16, + 0x19, 0x53, 0xa5, 0x3d, 0x2e, 0xa9, 0x0f, 0x6b, 0x50, 0x21, 0xc0, 0x49, 0x1e, 0x00, 0xff, 0x54, + 0xfa, 0x91, 0x36, 0xd4, 0x1d, 0x80, 0x13, 0x80, 0x13, 0x80, 0x13, 0x80, 0x13, 0x80, 0x13, 0x80, + 0x13, 0x80, 0x13, 0x80, 0x13, 0x80, 0x53, 0x4d, 0xc0, 0x39, 0x32, 0x5c, 0xe3, 0x8e, 0x59, 0xf4, + 0x78, 0x73, 0xd6, 0x70, 0x99, 0x3d, 0x68, 0xc9, 0xb1, 0x85, 0x0b, 0x0d, 0xb0, 0x1a, 0xb0, 0x1a, + 0xb0, 0x7a, 0xdd, 0xd3, 0x5a, 0x7e, 0x17, 0x1a, 0xd1, 0x12, 0x0a, 0x7c, 0x7b, 0x23, 0xf0, 0xad, + 0x8d, 0xc0, 0x52, 0xfe, 0xeb, 0xbe, 0xa1, 0x68, 0x2a, 0x5e, 0xf6, 0x5f, 0xf4, 0x4b, 0x99, 0x62, + 0x2a, 0xff, 0xaf, 0xbf, 0x8b, 0x00, 0xb8, 0x2a, 0x02, 0x5c, 0xcf, 0x12, 0x60, 0x4d, 0x4d, 0x5a, + 0x2d, 0x33, 0xb4, 0xed, 0x9e, 0x9e, 0x02, 0xd8, 0x02, 0xd8, 0x02, 0xd8, 0x02, 0xd8, 0xae, 0x7b, + 0x5a, 0x99, 0x1b, 0x8d, 0x18, 0x79, 0x59, 0xfa, 0x14, 0xdc, 0xb6, 0x08, 0xdb, 0x3c, 0x71, 0xa3, + 0x11, 0xfd, 0x2d, 0xb8, 0xf6, 0xae, 0x78, 0x60, 0xbb, 0x77, 0x62, 0x9e, 0x23, 0xd6, 0xe3, 0x35, + 0x8e, 0xc5, 0xb3, 0x00, 0x50, 0xd8, 0x88, 0xdb, 0x3e, 0xee, 0x5d, 0x75, 0xdf, 0x9f, 0x9e, 0xdc, + 0x7c, 0x3a, 0xbf, 0xba, 0x38, 0xed, 0x1d, 0xf5, 0xae, 0x4f, 0x8e, 0x6f, 0x2e, 0xbb, 0xb5, 0x52, + 0xbf, 0x01, 0xbd, 0xf6, 0x7a, 0xc9, 0x9d, 0x15, 0xb0, 0xde, 0xf1, 0x52, 0x0b, 0x31, 0x82, 0x2e, + 0x5b, 0xe8, 0x8e, 0xd6, 0xc0, 0x6b, 0x4f, 0xf0, 0x4a, 0x11, 0xbc, 0x52, 0x7b, 0x60, 0x41, 0x18, + 0xd3, 0x91, 0xb6, 0xb6, 0x15, 0xf3, 0x93, 0x6d, 0x30, 0x4b, 0x25, 0x99, 0xe5, 0xe2, 0x3e, 0x82, + 0x5b, 0x2a, 0xc8, 0x2d, 0x3d, 0x7e, 0xcf, 0x02, 0xdd, 0x9c, 0x51, 0x11, 0x62, 0x8e, 0xf9, 0xac, + 0x75, 0xb8, 0x51, 0xc0, 0x36, 0xc1, 0x36, 0xc1, 0x36, 0x2b, 0xc7, 0x36, 0xe1, 0x46, 0x01, 0xdc, + 0x85, 0x1b, 0xa5, 0xca, 0x60, 0x17, 0x6e, 0x94, 0x0a, 0x40, 0xdd, 0x30, 0xf2, 0xfd, 0x80, 0x85, + 0x21, 0x3d, 0xcc, 0x4d, 0x5b, 0x06, 0xc4, 0x05, 0xc4, 0x05, 0xc4, 0x05, 0xc4, 0x05, 0xc4, 0x05, + 0xc4, 0x7d, 0x45, 0x01, 0x71, 0x83, 0x47, 0xa1, 0x4a, 0xf8, 0xd6, 0x62, 0x7e, 0xc0, 0x4c, 0x83, + 0x93, 0x05, 0xc1, 0x16, 0x05, 0x5c, 0xa7, 0x4b, 0x5f, 0x25, 0xd4, 0x3a, 0xb7, 0x37, 0x80, 0xa3, + 0xb2, 0xe1, 0x28, 0x12, 0xf1, 0x65, 0x4f, 0xc4, 0x47, 0x90, 0x4d, 0x36, 0x47, 0x16, 0xbe, 0x37, + 0x12, 0x77, 0x8c, 0x6a, 0xa7, 0x24, 0xef, 0x50, 0x2d, 0x57, 0xa6, 0xc2, 0x1c, 0xe9, 0x36, 0xb3, + 0x1d, 0x8a, 0xf5, 0xb7, 0x34, 0xc3, 0x76, 0xe6, 0x4c, 0xc1, 0x48, 0x92, 0x7a, 0x31, 0x67, 0xca, + 0xc5, 0xdc, 0xa9, 0x16, 0x29, 0xf8, 0x10, 0x19, 0xff, 0xa1, 0x42, 0x0f, 0xe4, 0xfc, 0x86, 0x1c, + 0x0d, 0x50, 0xf2, 0x17, 0xb9, 0xe2, 0x2f, 0x6f, 0x8a, 0xc4, 0x9a, 0xe9, 0x45, 0xb1, 0xd0, 0x08, + 0xe9, 0x52, 0x9f, 0xa6, 0x2d, 0x96, 0x2c, 0xfb, 0x69, 0x1d, 0xd9, 0x4f, 0x8b, 0x37, 0x49, 0x20, + 0xfb, 0xa9, 0xb4, 0xab, 0x9d, 0x36, 0x64, 0xbb, 0xba, 0x65, 0x87, 0xa6, 0x11, 0x58, 0xcc, 0xd2, + 0xfd, 0x6f, 0x3c, 0x14, 0x91, 0xa8, 0xee, 0x65, 0x17, 0xb0, 0x5f, 0xc2, 0x7e, 0x09, 0xfb, 0xe5, + 0x06, 0xd9, 0x2f, 0xa7, 0x6a, 0xbf, 0xdd, 0x12, 0x60, 0xc1, 0x3c, 0x40, 0x0e, 0x11, 0xe2, 0xc6, + 0x91, 0x43, 0x44, 0xf2, 0xcd, 0x7b, 0xbe, 0xb5, 0x32, 0x72, 0x88, 0x88, 0x2d, 0x0a, 0x53, 0xd5, + 0xdd, 0xae, 0xb6, 0x59, 0x16, 0x51, 0x4a, 0xc4, 0xe7, 0xf1, 0x29, 0x4a, 0x49, 0x6b, 0x35, 0x0f, + 0x77, 0x35, 0x5d, 0x3b, 0x4b, 0x52, 0x9a, 0xc4, 0x60, 0x42, 0xeb, 0xb9, 0x43, 0x2f, 0x18, 0x25, + 0xc6, 0x49, 0xed, 0xbd, 0x11, 0xb2, 0x24, 0xd4, 0x85, 0xdf, 0xb3, 0xaf, 0x6e, 0x62, 0xb5, 0x73, + 0x19, 0xd7, 0xfa, 0x81, 0xc7, 0x3d, 0xd3, 0x73, 0xb4, 0xad, 0x5e, 0x1f, 0x71, 0xfa, 0x05, 0xc3, + 0xc0, 0x57, 0xe1, 0x20, 0xd1, 0xd6, 0x42, 0x52, 0x49, 0x1e, 0x0f, 0x4d, 0x66, 0x77, 0x9d, 0x05, + 0x81, 0x17, 0x88, 0x63, 0xcd, 0x73, 0xcd, 0x83, 0x31, 0x83, 0x31, 0x83, 0x31, 0x83, 0x31, 0x83, + 0x31, 0x83, 0x31, 0x83, 0x31, 0x83, 0x31, 0x83, 0x31, 0x83, 0x31, 0x83, 0x31, 0x83, 0x31, 0x83, + 0x31, 0x43, 0x52, 0xa9, 0xc4, 0x98, 0x87, 0x5e, 0xf0, 0x7d, 0xe2, 0x08, 0xf6, 0x4c, 0xce, 0x04, + 0xf1, 0xe6, 0x85, 0x4e, 0xc0, 0x9e, 0xc1, 0x9e, 0xc1, 0x9e, 0xc1, 0x9e, 0xc1, 0x9e, 0xc1, 0x9e, + 0xc1, 0x9e, 0xc1, 0x9e, 0xc1, 0x9e, 0xc1, 0x9e, 0xc1, 0x9e, 0xc1, 0x9e, 0xc1, 0x9e, 0x21, 0xa9, + 0xd4, 0x64, 0xcf, 0xc2, 0x7c, 0xce, 0x2f, 0xba, 0x00, 0x73, 0x06, 0x73, 0x06, 0x73, 0x06, 0x73, + 0x06, 0x73, 0x06, 0x73, 0x06, 0x73, 0x06, 0x73, 0x06, 0x73, 0x06, 0x73, 0x06, 0x73, 0x06, 0x73, + 0x06, 0x73, 0x86, 0xa4, 0x52, 0x89, 0x39, 0x8f, 0x22, 0x87, 0xdb, 0xa6, 0x11, 0x72, 0x91, 0x7e, + 0xe7, 0x85, 0x4e, 0xc0, 0x9e, 0xc1, 0x9e, 0xc1, 0x9e, 0xc1, 0x9e, 0xc1, 0x9e, 0xc1, 0x9e, 0xc1, + 0x9e, 0xc1, 0x9e, 0xc1, 0x9e, 0xc1, 0x9e, 0xab, 0xcf, 0x9e, 0x3b, 0xab, 0x30, 0x2c, 0x6d, 0x46, + 0xb0, 0xbe, 0xba, 0xcf, 0x18, 0x96, 0xa6, 0x6b, 0xb6, 0x7f, 0xf5, 0x18, 0x72, 0x36, 0xba, 0xe2, + 0x06, 0x0f, 0xff, 0x3a, 0xea, 0xb9, 0x67, 0x31, 0xa6, 0xbe, 0xa0, 0x84, 0xd4, 0xe0, 0xd6, 0x22, + 0xb8, 0xb5, 0xd0, 0x8d, 0x87, 0x94, 0x53, 0x9d, 0x79, 0x0b, 0xf3, 0x59, 0xbf, 0xe8, 0x02, 0xac, + 0x1b, 0xac, 0x1b, 0xac, 0x1b, 0xac, 0x1b, 0xac, 0x1b, 0xac, 0x1b, 0xac, 0x1b, 0xac, 0x1b, 0xac, + 0x1b, 0xac, 0x1b, 0xac, 0x3b, 0x1b, 0xf9, 0xea, 0x7f, 0x03, 0xe7, 0xde, 0x40, 0xce, 0x9d, 0x6c, + 0x3b, 0x24, 0x9c, 0x9a, 0x8c, 0x5b, 0xa0, 0x87, 0x1b, 0x7e, 0x6d, 0x30, 0x6c, 0x30, 0x6c, 0x30, + 0x6c, 0x30, 0x6c, 0x30, 0x6c, 0x30, 0x6c, 0x30, 0x6c, 0x30, 0x6c, 0x30, 0xec, 0x8d, 0x61, 0xd8, + 0x88, 0x0a, 0x47, 0x54, 0x38, 0xa2, 0xc2, 0xab, 0xc4, 0x94, 0x85, 0x79, 0xa4, 0xe1, 0x87, 0x06, + 0x4b, 0x06, 0x4b, 0x06, 0x4b, 0x06, 0x4b, 0x06, 0x4b, 0x06, 0x4b, 0x06, 0x4b, 0x06, 0x4b, 0x06, + 0x4b, 0x06, 0x4b, 0x06, 0x4b, 0x06, 0x4b, 0x86, 0xa4, 0x52, 0x8b, 0x25, 0x7b, 0x11, 0x17, 0x5e, + 0x20, 0xfa, 0x95, 0x3e, 0xc0, 0x9d, 0xc1, 0x9d, 0xc1, 0x9d, 0xc1, 0x9d, 0xc1, 0x9d, 0xc1, 0x9d, + 0xc1, 0x9d, 0xc1, 0x9d, 0xc1, 0x9d, 0xc1, 0x9d, 0xc1, 0x9d, 0xc1, 0x9d, 0xc1, 0x9d, 0x21, 0xa9, + 0x94, 0xe2, 0xce, 0x22, 0x4b, 0x44, 0xbf, 0x68, 0x1f, 0x9c, 0x19, 0x9c, 0x19, 0x9c, 0x19, 0x9c, + 0x19, 0x9c, 0x19, 0x9c, 0x19, 0x9c, 0x19, 0x9c, 0x19, 0x9c, 0x19, 0x9c, 0x19, 0x9c, 0x19, 0x9c, + 0x19, 0x9c, 0x19, 0x92, 0x4a, 0x29, 0xce, 0x2c, 0xbe, 0x48, 0xf4, 0xab, 0xbd, 0x80, 0x3f, 0x83, + 0x3f, 0x83, 0x3f, 0x83, 0x3f, 0x83, 0x3f, 0x83, 0x3f, 0x83, 0x3f, 0x83, 0x3f, 0x83, 0x3f, 0x83, + 0x3f, 0x83, 0x3f, 0x83, 0x3f, 0x83, 0x3f, 0x43, 0x52, 0x29, 0xca, 0x9f, 0xc5, 0xf9, 0x9d, 0x51, + 0x27, 0x1a, 0xdc, 0x19, 0xdc, 0x19, 0xdc, 0x19, 0xdc, 0x19, 0xdc, 0x19, 0xdc, 0x19, 0xdc, 0x19, + 0xdc, 0x19, 0xdc, 0x19, 0xdc, 0x19, 0xdc, 0x19, 0xdc, 0x19, 0xdc, 0x59, 0x65, 0xee, 0x2c, 0xbe, + 0x50, 0xf4, 0xab, 0xbd, 0x80, 0x3f, 0x83, 0x3f, 0x83, 0x3f, 0x83, 0x3f, 0x83, 0x3f, 0x83, 0x3f, + 0x83, 0x3f, 0x83, 0x3f, 0x83, 0x3f, 0x83, 0x3f, 0x83, 0x3f, 0x83, 0x3f, 0x83, 0x3f, 0x43, 0x52, + 0x29, 0xca, 0x9f, 0xc5, 0xf9, 0x9e, 0x51, 0xef, 0x19, 0xdc, 0x19, 0xdc, 0x19, 0xdc, 0x19, 0xdc, + 0x19, 0xdc, 0x19, 0xdc, 0x19, 0xdc, 0x19, 0xdc, 0x19, 0xdc, 0x19, 0xdc, 0x79, 0x2d, 0x82, 0xf5, + 0xd5, 0x5d, 0xac, 0xfd, 0x7b, 0x11, 0x71, 0xd4, 0x7c, 0xae, 0x3e, 0xb7, 0xfe, 0xe3, 0xd6, 0x43, + 0xd2, 0x29, 0xca, 0xbd, 0x45, 0x7a, 0xac, 0xe1, 0xa7, 0x06, 0xd7, 0x06, 0xd7, 0x06, 0xd7, 0x06, + 0xd7, 0x06, 0xd7, 0x06, 0xd7, 0x06, 0xd7, 0x06, 0xd7, 0x06, 0xd7, 0x06, 0xd7, 0x86, 0x9f, 0x7a, + 0xb3, 0xb9, 0x34, 0xb8, 0xb2, 0xaa, 0x5c, 0x59, 0x9c, 0x77, 0x1a, 0x3e, 0x69, 0xf0, 0x64, 0xf0, + 0x64, 0xf0, 0x64, 0xf0, 0x64, 0xf0, 0x64, 0xf0, 0x64, 0xf0, 0x64, 0xf0, 0x64, 0xf0, 0x64, 0xf0, + 0x64, 0xf0, 0x64, 0xf0, 0x64, 0x48, 0x2a, 0x89, 0x3c, 0xf9, 0x4d, 0x81, 0x92, 0xb2, 0xd6, 0x75, + 0x5d, 0x8f, 0x27, 0xc7, 0x83, 0xe4, 0xea, 0xd5, 0x42, 0xf3, 0x9e, 0x8d, 0x0c, 0xdf, 0xe0, 0xf7, + 0xf1, 0x99, 0xdc, 0xf1, 0x7c, 0xe6, 0x9a, 0x09, 0x97, 0xd5, 0xed, 0xf8, 0xbc, 0x0d, 0x0d, 0x93, + 0x85, 0x3b, 0xaf, 0x7d, 0xbb, 0x13, 0x46, 0xb7, 0x73, 0xbf, 0x9f, 0xff, 0x69, 0xc7, 0xf6, 0x1f, + 0xda, 0x3b, 0x21, 0x37, 0x38, 0xdb, 0x99, 0xa2, 0x77, 0x0a, 0xde, 0x5e, 0x0b, 0x79, 0x10, 0x99, + 0xdc, 0x9d, 0x8a, 0xc6, 0xde, 0xac, 0xbb, 0x9b, 0xab, 0xb9, 0xbe, 0x6f, 0x7a, 0xfe, 0x43, 0xfb, + 0xe6, 0x68, 0xd6, 0xeb, 0x9b, 0x62, 0x76, 0x3a, 0xc7, 0x2e, 0xd7, 0xac, 0x7b, 0xd3, 0xd7, 0x4d, + 0xc7, 0x9e, 0x88, 0x89, 0x7c, 0x5b, 0x9c, 0xea, 0x91, 0xf9, 0x46, 0x73, 0x9e, 0xc0, 0x63, 0x36, + 0x34, 0x22, 0x87, 0x93, 0x68, 0xd1, 0x5a, 0x02, 0xb6, 0xf2, 0xed, 0xd2, 0x20, 0xe7, 0x7c, 0x68, + 0x2c, 0x41, 0x64, 0x16, 0x20, 0x4a, 0xcb, 0x0f, 0xb9, 0xc5, 0x87, 0x5a, 0xeb, 0x0b, 0xb3, 0xf0, + 0x08, 0x53, 0xe9, 0x22, 0x2c, 0x3a, 0xc5, 0x6a, 0x14, 0x32, 0xcb, 0x4d, 0x7a, 0xda, 0x6e, 0x3d, + 0xcf, 0x61, 0x86, 0x4b, 0x71, 0xde, 0xa6, 0x97, 0xb3, 0xd1, 0x50, 0x51, 0x90, 0x47, 0xbe, 0x6e, + 0x58, 0x56, 0xa0, 0x5b, 0x8c, 0x33, 0x93, 0xeb, 0x3c, 0x30, 0xdc, 0x70, 0x64, 0x13, 0x58, 0xc7, + 0x9f, 0xc4, 0xfa, 0xd2, 0x2e, 0xca, 0x24, 0xe4, 0x1b, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0xd5, + 0x11, 0xf0, 0x91, 0xed, 0xf2, 0xdd, 0x26, 0xa1, 0x7c, 0xdf, 0x27, 0x68, 0x8a, 0xd6, 0xfe, 0x4e, + 0x68, 0x78, 0x12, 0x61, 0x6f, 0x17, 0x65, 0x67, 0x17, 0x6e, 0x71, 0x15, 0x67, 0x69, 0x25, 0xb4, + 0xa7, 0x0b, 0xb1, 0xa3, 0xa7, 0x5b, 0xd6, 0x6a, 0x1e, 0xb6, 0x0e, 0xdb, 0xfb, 0xcd, 0xc3, 0x3d, + 0xec, 0x1d, 0xa9, 0x95, 0x28, 0x7f, 0x2b, 0x83, 0x42, 0x05, 0xb5, 0x00, 0xeb, 0xb7, 0x00, 0xab, + 0xb7, 0x00, 0x17, 0x6f, 0x62, 0x0a, 0x3d, 0x68, 0x37, 0x3b, 0x5a, 0xaf, 0xff, 0xd0, 0xd6, 0xae, + 0xb8, 0xc1, 0x99, 0xc3, 0xc2, 0x50, 0xeb, 0x5a, 0x56, 0x90, 0xfc, 0x3f, 0xe2, 0xde, 0xc4, 0x2c, + 0x15, 0x05, 0x13, 0xe3, 0x97, 0x5a, 0xd1, 0x0b, 0xa2, 0x2c, 0xd8, 0x72, 0x03, 0x18, 0x32, 0x6c, + 0x13, 0x24, 0x44, 0x09, 0x88, 0x28, 0x73, 0x63, 0x79, 0x62, 0xd1, 0xd1, 0xce, 0x59, 0x83, 0x65, + 0x22, 0x99, 0xf1, 0xd9, 0x07, 0xcf, 0x04, 0xcf, 0x04, 0xcf, 0xac, 0x0e, 0xcf, 0x84, 0x21, 0x31, + 0x19, 0xbb, 0xc3, 0x8c, 0xc0, 0x8d, 0x71, 0xa1, 0xe7, 0xd8, 0xa6, 0xcd, 0x29, 0x25, 0xf9, 0x62, + 0xd3, 0x65, 0x92, 0xe9, 0xe7, 0x17, 0xe7, 0x27, 0x90, 0xe9, 0x90, 0xe9, 0x90, 0xe9, 0xd5, 0x91, + 0xe9, 0xcc, 0x8d, 0x46, 0x8c, 0x8c, 0xc4, 0xa5, 0x72, 0xbd, 0x45, 0xd0, 0xd6, 0x89, 0x1b, 0x8d, + 0xe8, 0x4e, 0xef, 0xb5, 0x77, 0xc5, 0x03, 0xdb, 0xbd, 0xa3, 0x8d, 0x62, 0xab, 0xc7, 0x6b, 0x98, + 0xc8, 0x45, 0x42, 0x06, 0xdc, 0x88, 0x1b, 0xfd, 0x78, 0x7a, 0xf1, 0xbe, 0x7b, 0x4a, 0xd9, 0x6c, + 0x33, 0x6e, 0xf6, 0xb4, 0x77, 0xfe, 0xef, 0x9b, 0xd3, 0x8b, 0x23, 0xda, 0xa6, 0x77, 0xe3, 0xa6, + 0xdf, 0x5f, 0x5c, 0xff, 0x55, 0x2b, 0x57, 0x14, 0xbc, 0xd7, 0x23, 0x88, 0xda, 0x78, 0xd6, 0x64, + 0x32, 0xc9, 0x8e, 0xb6, 0x4b, 0xb8, 0x78, 0xd3, 0x9d, 0xee, 0x68, 0x0d, 0xc2, 0x46, 0xe7, 0xf6, + 0xb9, 0xa3, 0x35, 0x09, 0x1b, 0x4e, 0x0e, 0x7b, 0x47, 0xab, 0x23, 0xfc, 0x6b, 0xd3, 0x4d, 0x84, + 0x87, 0x8d, 0xdd, 0x46, 0x47, 0xbb, 0xf4, 0x22, 0xce, 0x82, 0x50, 0x3b, 0x0a, 0x98, 0xc1, 0x6d, + 0xf7, 0x4e, 0x3b, 0x32, 0xcc, 0x7b, 0xa6, 0x9d, 0xb8, 0x3c, 0xb0, 0x59, 0xa8, 0x45, 0xbe, 0xe7, + 0x7e, 0x75, 0x2f, 0x99, 0xc9, 0xec, 0x87, 0xf8, 0x5f, 0x3f, 0x3d, 0x61, 0x5b, 0xed, 0x9c, 0xd9, + 0x77, 0xf7, 0xb7, 0x5e, 0xa0, 0x75, 0xad, 0x07, 0x16, 0x70, 0x3b, 0x4c, 0x62, 0x2e, 0x43, 0x18, + 0x13, 0x0b, 0x32, 0x26, 0x0a, 0xdb, 0x50, 0x98, 0x1d, 0x4b, 0x40, 0x5b, 0x47, 0x3c, 0xa2, 0x23, + 0xaa, 0x71, 0x63, 0xe0, 0x72, 0xe0, 0x72, 0xe0, 0x72, 0x25, 0xe2, 0x72, 0x88, 0x03, 0x59, 0x67, + 0x60, 0x42, 0xe3, 0x40, 0x1a, 0xcd, 0x03, 0x84, 0x82, 0x10, 0xd3, 0x39, 0x0d, 0xa1, 0x20, 0x05, + 0xec, 0x1d, 0x42, 0x41, 0x36, 0x9d, 0xe7, 0x35, 0x5b, 0xed, 0x7a, 0x47, 0x5b, 0x78, 0xef, 0xf6, + 0x56, 0xfb, 0xcc, 0x82, 0xd0, 0xf6, 0x5c, 0xad, 0xad, 0x6d, 0xf5, 0xfa, 0x0f, 0xed, 0x6d, 0xed, + 0xca, 0x67, 0xa6, 0x3d, 0xb4, 0xcd, 0xc4, 0x9c, 0xf8, 0xd5, 0x4d, 0x9b, 0xbb, 0x62, 0xc9, 0xe9, + 0xd7, 0xf6, 0x40, 0xed, 0x0a, 0xa2, 0x76, 0x94, 0x7b, 0x08, 0xd9, 0x42, 0xc5, 0xe6, 0xde, 0x48, + 0x94, 0x65, 0x54, 0x4f, 0x15, 0x45, 0x3f, 0x51, 0xcc, 0x76, 0xbc, 0xd6, 0x5f, 0xca, 0x0c, 0xcb, + 0x58, 0x8b, 0x5c, 0x37, 0x1a, 0xdd, 0xb2, 0x20, 0x87, 0xcb, 0xf7, 0x09, 0xac, 0x3f, 0xb5, 0x95, + 0x71, 0x43, 0x67, 0xbe, 0x96, 0x8c, 0x1f, 0xcf, 0x4b, 0x9c, 0x29, 0x08, 0xf3, 0x33, 0xa2, 0x3c, + 0xcc, 0x21, 0x65, 0xa9, 0xb4, 0x01, 0x39, 0x31, 0x26, 0x17, 0xf5, 0x0b, 0x44, 0x78, 0x58, 0x53, + 0x44, 0x00, 0x1d, 0xdb, 0x41, 0xbe, 0xc3, 0x62, 0xce, 0x4e, 0x2c, 0x91, 0x11, 0x6b, 0xda, 0x1e, + 0x8d, 0x1d, 0xab, 0x51, 0x75, 0x3b, 0xd6, 0x10, 0x76, 0x2c, 0x11, 0x76, 0xac, 0xa1, 0xea, 0x76, + 0xac, 0xbc, 0xd7, 0xfa, 0x89, 0x64, 0x11, 0xc5, 0xc5, 0x2e, 0x9c, 0x5e, 0x9a, 0xf8, 0xd8, 0xa7, + 0x09, 0x13, 0xc6, 0x54, 0xa5, 0x8d, 0x12, 0xbc, 0xbc, 0x4f, 0xe1, 0x2c, 0x72, 0x32, 0x96, 0x46, + 0xe0, 0xc9, 0x64, 0xab, 0x15, 0xc9, 0xc9, 0x38, 0x44, 0x4e, 0xc6, 0x75, 0x4f, 0x2b, 0x5d, 0x60, + 0xee, 0x02, 0xaa, 0x69, 0x94, 0x6a, 0x09, 0x89, 0xd3, 0xed, 0xa4, 0xed, 0x3e, 0xde, 0x79, 0x5c, + 0xf7, 0x4c, 0xdd, 0xf4, 0x46, 0x7e, 0xc0, 0xc2, 0x90, 0x59, 0xba, 0xc3, 0x8c, 0x61, 0xdc, 0xc9, + 0x18, 0x81, 0x2e, 0x9a, 0x56, 0x3b, 0xf9, 0x91, 0x98, 0xad, 0xf3, 0x2b, 0x3c, 0x7a, 0xdc, 0xe7, + 0x99, 0x3a, 0xfb, 0xc1, 0x3b, 0x9c, 0x39, 0x6c, 0xc4, 0x78, 0xf0, 0xa8, 0x7b, 0xae, 0x6e, 0xde, + 0x27, 0x5e, 0x27, 0x21, 0x58, 0x30, 0xd1, 0xd4, 0x02, 0xc0, 0x60, 0xd1, 0x38, 0x70, 0xb0, 0x31, + 0xa9, 0xb0, 0x9e, 0x4c, 0x2f, 0x3b, 0x53, 0x0a, 0xa8, 0x60, 0x38, 0x47, 0x3a, 0x27, 0x3d, 0x60, + 0x43, 0x3a, 0x4e, 0xfc, 0xbc, 0x59, 0x50, 0x63, 0x50, 0x63, 0x50, 0xe3, 0xe2, 0xa9, 0x31, 0x91, + 0xe5, 0x4b, 0x8c, 0x05, 0x8c, 0xf8, 0xba, 0x83, 0x30, 0x82, 0x30, 0x82, 0x30, 0x52, 0x8a, 0x8f, + 0x45, 0xcc, 0x40, 0x7f, 0xac, 0x16, 0xf0, 0x03, 0xf5, 0xb1, 0xa2, 0xb5, 0x46, 0x09, 0x13, 0x32, + 0x22, 0x85, 0x8d, 0x70, 0xa1, 0x23, 0x5a, 0xf8, 0x48, 0x13, 0x42, 0xd2, 0x84, 0x91, 0x0c, 0xa1, + 0x44, 0x2b, 0x9c, 0x88, 0x85, 0x94, 0x38, 0xeb, 0xd6, 0xc2, 0x69, 0x77, 0x98, 0x31, 0xcc, 0x4f, + 0x4a, 0x7e, 0x8b, 0x5c, 0xf6, 0x05, 0xb4, 0xdd, 0x4f, 0x19, 0x6c, 0x7c, 0x2c, 0x3a, 0x73, 0xcc, + 0xf4, 0xc5, 0x2f, 0xa6, 0x3f, 0x27, 0x09, 0x95, 0x4b, 0xbd, 0xd5, 0x82, 0xac, 0x70, 0xf2, 0xac, + 0x71, 0xf4, 0x37, 0x8a, 0x32, 0xc4, 0x75, 0xde, 0x60, 0x21, 0x4e, 0x51, 0x3f, 0xeb, 0x05, 0xba, + 0x1a, 0xba, 0x1a, 0xba, 0x1a, 0xba, 0x1a, 0xba, 0x7a, 0x45, 0x5d, 0xfd, 0xe5, 0x49, 0x57, 0xff, + 0x8f, 0x19, 0x05, 0x01, 0x73, 0xf9, 0xd6, 0xf6, 0xce, 0xbb, 0x77, 0x4f, 0x56, 0xe8, 0xc1, 0xf4, + 0x23, 0xcf, 0x8d, 0xd1, 0x8b, 0xbf, 0x4b, 0x5b, 0xb6, 0xd8, 0x0f, 0xa8, 0x7d, 0xd5, 0xd4, 0x7e, + 0xa9, 0xec, 0x05, 0x64, 0x4e, 0xba, 0xd9, 0x97, 0x38, 0xd3, 0x93, 0x70, 0xa7, 0xdd, 0x12, 0xad, + 0x42, 0xe8, 0xbc, 0x7b, 0x55, 0x9d, 0x94, 0xcd, 0x14, 0x35, 0x28, 0xb9, 0xe3, 0x5d, 0x8a, 0x93, + 0xef, 0x99, 0x4f, 0x8b, 0xc4, 0xe5, 0x47, 0xb7, 0x49, 0x63, 0x92, 0x42, 0x3c, 0x06, 0x67, 0xf4, + 0xce, 0x81, 0x49, 0xb3, 0x25, 0xf7, 0x0d, 0x34, 0xe1, 0x1b, 0x50, 0x07, 0xea, 0xc3, 0x37, 0x00, + 0xdf, 0x00, 0xec, 0x0d, 0xb0, 0x37, 0xc0, 0xde, 0x00, 0x7b, 0x03, 0xec, 0x0d, 0xe5, 0xf0, 0x0d, + 0xc0, 0x04, 0x0e, 0x95, 0x04, 0x95, 0x04, 0x95, 0x04, 0x95, 0x04, 0x95, 0x54, 0x3d, 0x13, 0x78, + 0x45, 0xd9, 0x5f, 0x85, 0xcc, 0x71, 0x39, 0x92, 0x3e, 0x08, 0xb0, 0xc6, 0xa1, 0x98, 0x78, 0xae, + 0xdd, 0x94, 0x5b, 0x56, 0xfc, 0x53, 0x3a, 0x8a, 0x9b, 0xf4, 0xcf, 0x2e, 0xd9, 0x50, 0xc5, 0xd7, + 0x1c, 0x34, 0x26, 0x5c, 0x52, 0xd3, 0x2d, 0xf9, 0xeb, 0x8d, 0x26, 0x5e, 0x6f, 0x14, 0x0f, 0x39, + 0xf1, 0x7a, 0x63, 0xe5, 0x09, 0x21, 0xb1, 0x01, 0x45, 0xa3, 0x48, 0x6c, 0x50, 0x06, 0x2e, 0x0e, + 0x5f, 0x94, 0x74, 0xae, 0x8d, 0xc4, 0x06, 0xf9, 0x4f, 0x6b, 0xf9, 0x13, 0x1b, 0x80, 0x72, 0xc8, + 0xa7, 0x1c, 0x04, 0x94, 0x11, 0x49, 0x1b, 0xe9, 0xf7, 0xa5, 0x96, 0x8b, 0xff, 0xac, 0x4f, 0xfa, + 0xa4, 0x65, 0x8a, 0x7c, 0x23, 0x70, 0xa7, 0xf3, 0xee, 0xb0, 0xb8, 0x9d, 0xcd, 0xb0, 0x9d, 0xab, + 0x6f, 0xe3, 0x7a, 0x7b, 0xb7, 0xfa, 0x0e, 0xac, 0xb1, 0xfa, 0x19, 0x39, 0x77, 0x2e, 0x8e, 0x9d, + 0x91, 0x53, 0x67, 0xe6, 0xd0, 0x79, 0xa0, 0x64, 0x6e, 0xc8, 0x98, 0x17, 0x1a, 0x92, 0x41, 0x40, + 0x32, 0xa8, 0x47, 0x01, 0xe9, 0xc4, 0x4a, 0x93, 0xac, 0x9c, 0xb5, 0x66, 0x58, 0x23, 0xdb, 0xd5, + 0xe3, 0x33, 0x1d, 0x85, 0xf9, 0x93, 0xdb, 0x3e, 0x6b, 0x2d, 0x5f, 0x7a, 0xdb, 0x3a, 0xd2, 0xdb, + 0x22, 0xbd, 0xad, 0x0a, 0x50, 0xed, 0xcc, 0x70, 0x2d, 0x83, 0x7b, 0xc1, 0x63, 0x8e, 0x9c, 0xcc, + 0xb9, 0x99, 0x14, 0x71, 0x5d, 0x4f, 0x8a, 0x7a, 0x9e, 0x34, 0x75, 0x3c, 0x69, 0xeb, 0x77, 0x4e, + 0xea, 0x76, 0x7e, 0xea, 0x53, 0x58, 0x7e, 0x93, 0x6a, 0x9d, 0xc7, 0x17, 0xff, 0x39, 0xa7, 0x68, + 0x2c, 0xa9, 0xd1, 0x79, 0x7d, 0x72, 0x75, 0xdd, 0x3b, 0xff, 0x58, 0x2b, 0xb6, 0x3c, 0x11, 0x59, + 0xed, 0xcc, 0xc9, 0xe2, 0x90, 0xc4, 0x7e, 0xa7, 0x4b, 0x43, 0x12, 0xf8, 0x1d, 0x1f, 0x80, 0xbc, + 0x95, 0x2c, 0x55, 0x21, 0x92, 0xb9, 0xdf, 0x06, 0xd1, 0x29, 0x1e, 0x61, 0x6f, 0x7f, 0xe8, 0xdf, + 0xfa, 0x10, 0xbd, 0xed, 0xc9, 0x71, 0x17, 0xc9, 0x97, 0xdd, 0xf3, 0xa7, 0x6a, 0xc1, 0x70, 0xb0, + 0xdc, 0x58, 0x6e, 0x8a, 0xe5, 0xce, 0xf4, 0xc9, 0x8c, 0xce, 0x1c, 0xca, 0x52, 0x4c, 0x84, 0x25, + 0x98, 0x08, 0x5d, 0xd2, 0x49, 0xb9, 0x9e, 0x83, 0xf6, 0x6e, 0x47, 0xbb, 0xbe, 0x67, 0x5a, 0x6a, + 0x43, 0x09, 0xb5, 0x8f, 0x81, 0x17, 0xf9, 0xda, 0x59, 0xef, 0xbd, 0xa6, 0x6b, 0xf6, 0xb0, 0x1b, + 0x53, 0xac, 0xab, 0x3c, 0x0c, 0x4b, 0x04, 0xc1, 0x78, 0xed, 0x26, 0x50, 0x57, 0x51, 0x92, 0xe3, + 0xc2, 0xce, 0xb0, 0x0d, 0x45, 0xfb, 0x02, 0x32, 0x7f, 0x7a, 0x50, 0xe2, 0x9a, 0x3b, 0xa6, 0x17, + 0xc5, 0x6b, 0x4f, 0x60, 0x94, 0x48, 0x5b, 0x42, 0xbd, 0x1d, 0x18, 0x24, 0x36, 0xc0, 0x20, 0x91, + 0xbf, 0xde, 0x8e, 0x11, 0x04, 0x36, 0x0b, 0x74, 0x1e, 0x18, 0x6e, 0x68, 0xc7, 0x20, 0x26, 0x24, + 0x2c, 0xbe, 0xf3, 0x4a, 0xe3, 0xa8, 0x28, 0x2d, 0xfc, 0xe2, 0xca, 0x50, 0xf8, 0x08, 0x58, 0x2b, + 0xc8, 0x64, 0x43, 0x5e, 0x51, 0x7a, 0xaa, 0x32, 0xdb, 0x2d, 0xc2, 0xa2, 0xd2, 0x07, 0x28, 0x2a, + 0xbd, 0x66, 0xa3, 0xb3, 0xf2, 0xc4, 0xa8, 0x28, 0x4d, 0x74, 0x53, 0x9e, 0x6f, 0x99, 0xc8, 0x8a, + 0xd2, 0x8d, 0x83, 0x56, 0xab, 0xbd, 0xdf, 0x6a, 0xd5, 0xf7, 0x77, 0xf7, 0xeb, 0x87, 0x7b, 0x7b, + 0x8d, 0x76, 0x03, 0xb5, 0xa5, 0x69, 0xa4, 0x25, 0x5d, 0x2b, 0x03, 0x94, 0x56, 0xf9, 0xad, 0x0d, + 0x0b, 0xa5, 0x55, 0x28, 0x04, 0x8e, 0xb0, 0xed, 0xa1, 0x33, 0x31, 0xaa, 0xb7, 0x2d, 0x85, 0x56, + 0xbc, 0x11, 0x51, 0x15, 0x3e, 0x8d, 0xc0, 0x28, 0x6d, 0x49, 0x78, 0x8b, 0xf9, 0x01, 0x33, 0x0d, + 0x4e, 0xf6, 0xee, 0x40, 0x93, 0x14, 0x46, 0x1e, 0x52, 0x19, 0x4b, 0xa5, 0xd0, 0x93, 0x57, 0x6f, + 0xcc, 0xdc, 0xda, 0x43, 0x0b, 0x13, 0xf5, 0x9f, 0xaf, 0x08, 0x93, 0x7e, 0x1b, 0x78, 0x86, 0x65, + 0x1a, 0x21, 0xd7, 0xfd, 0x6f, 0x3c, 0xa4, 0x2c, 0xc4, 0xf4, 0xb2, 0x69, 0x58, 0x47, 0x60, 0x1d, + 0x81, 0x75, 0x04, 0xd6, 0x11, 0x58, 0x47, 0x60, 0x1d, 0x81, 0x75, 0x04, 0xd6, 0x91, 0x8d, 0xb0, + 0x8e, 0x88, 0xe0, 0x58, 0x74, 0x61, 0x1f, 0x02, 0x69, 0xd6, 0x8a, 0xf1, 0x07, 0x7f, 0x1d, 0xf5, + 0xdc, 0xf7, 0x33, 0x9c, 0xd8, 0xff, 0xc6, 0xc3, 0x77, 0x5f, 0xdd, 0xf8, 0xa3, 0xad, 0xe6, 0xe1, + 0x6e, 0x47, 0x3b, 0x33, 0x5c, 0xe3, 0x8e, 0xc5, 0x6a, 0x5c, 0xeb, 0xb9, 0x43, 0x2f, 0x18, 0x25, + 0x76, 0x02, 0xed, 0xbd, 0x11, 0x32, 0x6d, 0xe8, 0x05, 0x1a, 0xbf, 0x67, 0x5f, 0xdd, 0xa4, 0x6d, + 0x97, 0x71, 0xad, 0x1f, 0x78, 0xdc, 0x33, 0x3d, 0x47, 0xdb, 0xea, 0xf5, 0xb7, 0xdf, 0x29, 0xc6, + 0xee, 0xa8, 0xa3, 0x4c, 0x8a, 0x21, 0x78, 0xc5, 0xef, 0x3a, 0xe4, 0x57, 0x39, 0x78, 0xa5, 0x65, + 0x87, 0xa6, 0x11, 0x58, 0xb4, 0x8c, 0x32, 0x6d, 0x14, 0x5c, 0x12, 0x5c, 0x12, 0x5c, 0x12, 0x5c, + 0x12, 0x5c, 0x12, 0x5c, 0x12, 0x5c, 0x12, 0x5c, 0x12, 0x5c, 0x12, 0x5c, 0x72, 0xd8, 0x73, 0x8f, + 0xa7, 0xf8, 0x10, 0x24, 0x72, 0x03, 0x48, 0xa4, 0x88, 0xed, 0x86, 0xc4, 0x2a, 0x07, 0x7b, 0x64, + 0x41, 0xe0, 0x05, 0xb4, 0xdc, 0x71, 0xda, 0x24, 0x98, 0x23, 0x98, 0x23, 0x98, 0x23, 0x98, 0x23, + 0x98, 0x23, 0x98, 0x23, 0x98, 0x23, 0x98, 0x23, 0x98, 0x23, 0x98, 0xe3, 0xb0, 0xe7, 0x9e, 0x24, + 0xe8, 0x10, 0xbc, 0x71, 0x23, 0x78, 0x23, 0xf5, 0x66, 0x43, 0x5a, 0x95, 0x83, 0x35, 0x0e, 0xcd, + 0x50, 0x04, 0x73, 0x9c, 0x6b, 0x16, 0xec, 0x11, 0xec, 0x11, 0xec, 0x11, 0xec, 0x11, 0xec, 0x11, + 0xec, 0x11, 0xec, 0x11, 0xec, 0x71, 0x23, 0xd8, 0x63, 0xf9, 0x5f, 0xf8, 0xe2, 0x09, 0x69, 0xd6, + 0x83, 0x85, 0x27, 0xa4, 0x19, 0x40, 0x07, 0x9e, 0x90, 0x16, 0x47, 0xf2, 0xf1, 0x84, 0xb4, 0x74, + 0xb4, 0x7b, 0x14, 0x39, 0xdc, 0x16, 0xf3, 0x84, 0xf4, 0x45, 0xd3, 0xa0, 0xdf, 0xa0, 0xdf, 0xa0, + 0xdf, 0xa0, 0xdf, 0xa0, 0xdf, 0xa0, 0xdf, 0xa0, 0xdf, 0xa0, 0xdf, 0x1b, 0x41, 0xbf, 0xe1, 0xbc, + 0xfd, 0xf3, 0x63, 0xc2, 0xb3, 0x19, 0x4e, 0xc4, 0x13, 0xd2, 0x0d, 0x7a, 0x42, 0x2a, 0x68, 0xd7, + 0x21, 0xbf, 0xca, 0xc1, 0x2b, 0x3d, 0x93, 0x33, 0x62, 0x3e, 0x39, 0x6d, 0x12, 0x3c, 0x12, 0x3c, + 0x12, 0x3c, 0x12, 0x3c, 0x12, 0x3c, 0x12, 0x3c, 0x12, 0x3c, 0x12, 0x3c, 0x12, 0x3c, 0x12, 0x3c, + 0x32, 0x61, 0x14, 0x17, 0x09, 0x3e, 0x04, 0x81, 0xdc, 0x10, 0x02, 0x49, 0xbd, 0xdd, 0x90, 0x58, + 0xe5, 0x60, 0x8e, 0xe4, 0x7e, 0x48, 0x78, 0x1f, 0xc1, 0x1a, 0xc1, 0x1a, 0xc1, 0x1a, 0xc1, 0x1a, + 0xc1, 0x1a, 0xc1, 0x1a, 0xc1, 0x1a, 0xc1, 0x1a, 0x37, 0x84, 0x35, 0x36, 0x0e, 0x3b, 0xda, 0x25, + 0x1b, 0x79, 0x9c, 0x69, 0xe7, 0x8c, 0x7f, 0xf7, 0x82, 0x6f, 0xda, 0x99, 0xe7, 0xda, 0xdc, 0x0b, + 0x6c, 0xf7, 0xee, 0x77, 0x64, 0x01, 0x1c, 0x52, 0x7d, 0x0e, 0x59, 0x82, 0xcd, 0x87, 0x34, 0x2b, + 0x07, 0xa3, 0x8c, 0x5c, 0x41, 0x11, 0xae, 0xcf, 0x1a, 0x06, 0xc3, 0x04, 0xc3, 0x04, 0xc3, 0x04, + 0xc3, 0x04, 0xc3, 0x04, 0xc3, 0x04, 0xc3, 0x04, 0xc3, 0x04, 0xc3, 0xac, 0x3e, 0xc3, 0x5c, 0xc9, + 0x51, 0xf5, 0x09, 0xb1, 0xad, 0x1b, 0xe6, 0x9a, 0xfc, 0x84, 0xb8, 0xd6, 0xea, 0x72, 0xc9, 0x6f, + 0xae, 0xf7, 0xdd, 0xd5, 0xfd, 0x78, 0x7b, 0xa8, 0xd9, 0xe4, 0xb3, 0xa6, 0xc1, 0x27, 0xc1, 0x27, + 0xc1, 0x27, 0xc1, 0x27, 0xc1, 0x27, 0xc1, 0x27, 0xc1, 0x27, 0xc1, 0x27, 0x37, 0x82, 0x4f, 0x22, + 0x5d, 0x11, 0xd2, 0x15, 0xc1, 0xd4, 0x90, 0xc9, 0xd4, 0xd0, 0x73, 0x3f, 0x4d, 0x08, 0x44, 0x9f, + 0x82, 0x3f, 0xc0, 0x46, 0x20, 0xd0, 0x46, 0xf0, 0x72, 0xab, 0xaa, 0xa7, 0x44, 0xde, 0x22, 0x95, + 0x58, 0x89, 0x2f, 0x1b, 0x52, 0x89, 0xc1, 0x34, 0x46, 0x6c, 0x1a, 0x73, 0x8c, 0x90, 0xeb, 0xa6, + 0xc3, 0x8c, 0x80, 0xce, 0x26, 0x36, 0xd7, 0x26, 0x8c, 0x61, 0x30, 0x86, 0xc1, 0x18, 0x56, 0x22, + 0x63, 0x18, 0xb7, 0x47, 0x8c, 0xdb, 0xe6, 0xb7, 0xb0, 0x74, 0xe6, 0xb0, 0x4f, 0xee, 0x84, 0xf9, + 0xd7, 0x5c, 0xc3, 0xf5, 0x42, 0x66, 0x7a, 0xae, 0x45, 0xa1, 0xea, 0x60, 0x66, 0x83, 0x99, 0x0d, + 0x66, 0x36, 0x98, 0xd9, 0x60, 0x66, 0x93, 0x62, 0x66, 0xe3, 0xcc, 0x61, 0x23, 0xc6, 0x83, 0x47, + 0xdd, 0x73, 0x75, 0xf3, 0x3e, 0x91, 0xbd, 0x30, 0xb7, 0x49, 0x39, 0x60, 0x79, 0x68, 0x80, 0x17, + 0x71, 0xfd, 0x36, 0xf0, 0x0c, 0x4b, 0x40, 0xc0, 0xf5, 0x2b, 0x6d, 0x83, 0x16, 0x80, 0x16, 0x80, + 0x16, 0x94, 0x88, 0x16, 0xc0, 0x47, 0x0e, 0xf0, 0x0e, 0xf0, 0x0e, 0xf0, 0x0e, 0xf0, 0x2e, 0x4e, + 0x6a, 0xc3, 0x11, 0xfa, 0xa7, 0x08, 0xdc, 0x8b, 0x88, 0xbf, 0x9f, 0x01, 0x45, 0x04, 0x5e, 0x6f, + 0x4c, 0xe0, 0xb5, 0xb8, 0x6d, 0x87, 0x04, 0x23, 0xea, 0x3f, 0x2f, 0xb7, 0xb4, 0xec, 0xd0, 0x34, + 0x02, 0x8b, 0x98, 0x55, 0xa6, 0xad, 0x82, 0x4f, 0x82, 0x4f, 0x82, 0x4f, 0x82, 0x4f, 0x82, 0x4f, + 0x82, 0x4f, 0x82, 0x4f, 0x82, 0x4f, 0x82, 0x4f, 0x82, 0x4f, 0x0e, 0x2f, 0x22, 0x7e, 0x3c, 0x05, + 0x88, 0x20, 0x92, 0x1b, 0x40, 0x24, 0x85, 0xec, 0x37, 0x64, 0x56, 0x49, 0x18, 0x24, 0x0b, 0x02, + 0x2f, 0x20, 0xe6, 0x8f, 0xd3, 0x36, 0xc1, 0x1e, 0xc1, 0x1e, 0xc1, 0x1e, 0xc1, 0x1e, 0xc1, 0x1e, + 0xc1, 0x1e, 0xc1, 0x1e, 0xc1, 0x1e, 0xc1, 0x1e, 0xc1, 0x1e, 0x63, 0x36, 0x71, 0x92, 0xc0, 0x43, + 0x70, 0xc7, 0xcd, 0xe0, 0x8e, 0xd4, 0xbb, 0x0d, 0x79, 0x55, 0x12, 0xe6, 0x38, 0x9a, 0x55, 0xac, + 0x15, 0x10, 0xd7, 0xfa, 0xa2, 0x6d, 0x30, 0x49, 0x30, 0x49, 0x30, 0x49, 0x30, 0x49, 0x30, 0x49, + 0x30, 0x49, 0x30, 0x49, 0x30, 0x49, 0x30, 0x49, 0x30, 0xc9, 0x49, 0x80, 0xe3, 0xd9, 0x0c, 0x28, + 0x22, 0xae, 0x75, 0x93, 0xe2, 0x5a, 0x05, 0x6d, 0x3b, 0x24, 0x58, 0x49, 0xb8, 0xa5, 0x97, 0x14, + 0xb3, 0xa5, 0xe5, 0x94, 0xd3, 0x36, 0xc1, 0x25, 0xc1, 0x25, 0xc1, 0x25, 0xc1, 0x25, 0xc1, 0x25, + 0xc1, 0x25, 0xc1, 0x25, 0xc1, 0x25, 0xc1, 0x25, 0xc1, 0x25, 0x27, 0xa4, 0xe2, 0x22, 0x01, 0x88, + 0x20, 0x91, 0x9b, 0x42, 0x22, 0xa9, 0xf7, 0x1b, 0x32, 0xab, 0x24, 0xec, 0x91, 0xde, 0x1f, 0x09, + 0x2f, 0x24, 0x98, 0x23, 0x98, 0x23, 0x98, 0x23, 0x98, 0x23, 0x98, 0x23, 0x98, 0x23, 0x98, 0x23, + 0x98, 0xe3, 0x86, 0x30, 0xc7, 0xc6, 0x61, 0x47, 0xbb, 0x64, 0x23, 0x8f, 0x33, 0xed, 0x9c, 0xf1, + 0xef, 0x5e, 0xf0, 0x4d, 0x3b, 0xf3, 0x5c, 0x9b, 0x7b, 0x81, 0xed, 0xde, 0xfd, 0x8e, 0x2e, 0x80, + 0x46, 0xaa, 0x4f, 0x23, 0x4b, 0xb0, 0xf9, 0x90, 0x66, 0x25, 0xe1, 0x94, 0x91, 0x2b, 0x2a, 0xd6, + 0xf5, 0x59, 0xcb, 0xe0, 0x98, 0xe0, 0x98, 0xe0, 0x98, 0xe0, 0x98, 0xe0, 0x98, 0xe0, 0x98, 0xe0, + 0x98, 0xe0, 0x98, 0xe0, 0x98, 0xd5, 0xe7, 0x98, 0xab, 0x79, 0xab, 0x3e, 0x21, 0xca, 0x75, 0xd3, + 0x1c, 0x94, 0x9f, 0x10, 0xe1, 0x5a, 0x5e, 0x3e, 0xf9, 0x46, 0xa2, 0xa4, 0xcc, 0x5f, 0xa0, 0x26, + 0x27, 0x5f, 0x15, 0x59, 0xf7, 0x99, 0xbe, 0x00, 0x0d, 0x51, 0xe1, 0x99, 0x6c, 0x5b, 0x9c, 0xb1, + 0xd6, 0x6b, 0xad, 0xeb, 0xba, 0x1e, 0x4f, 0x56, 0x34, 0x97, 0x14, 0xad, 0x85, 0xe6, 0x3d, 0x1b, + 0x19, 0xbe, 0xc1, 0xef, 0xe3, 0xd9, 0xef, 0x78, 0x3e, 0x73, 0xcd, 0x84, 0xce, 0xeb, 0x76, 0x2a, + 0x6c, 0x76, 0x5e, 0xfb, 0x76, 0x27, 0x8c, 0x6e, 0xe7, 0x7e, 0x3f, 0xff, 0xd3, 0x4e, 0xc8, 0x0d, + 0xce, 0x76, 0xa6, 0x5c, 0x28, 0x8f, 0x95, 0xa2, 0x16, 0xf2, 0x20, 0x32, 0xb9, 0x3b, 0x55, 0x80, + 0xa9, 0xfc, 0xbb, 0xb9, 0x9a, 0xeb, 0xee, 0xe6, 0x68, 0xd6, 0xd1, 0x1b, 0x39, 0xfb, 0x96, 0xe1, + 0x5a, 0xd6, 0x4c, 0x3f, 0xca, 0xbc, 0x51, 0x4f, 0xec, 0xd2, 0x8f, 0x32, 0x2e, 0x66, 0x4e, 0x53, + 0x4f, 0x6e, 0x13, 0x0f, 0x85, 0x69, 0x87, 0xcc, 0xa4, 0x43, 0x05, 0x3f, 0xc8, 0x4d, 0x38, 0xe4, + 0xd8, 0x82, 0xd2, 0x64, 0x23, 0x57, 0x85, 0xe5, 0x36, 0xcd, 0xa4, 0xa7, 0xe5, 0xd6, 0xf3, 0x1c, + 0x66, 0xb8, 0x79, 0xce, 0xcb, 0xf4, 0xf2, 0x34, 0x1a, 0x1b, 0xae, 0xc5, 0xe9, 0xcb, 0xca, 0x95, + 0x57, 0x9b, 0xbf, 0x05, 0x78, 0xc2, 0x72, 0x03, 0xab, 0xe6, 0x23, 0x4f, 0x59, 0x90, 0x92, 0xc5, + 0x42, 0x33, 0xb0, 0xfd, 0x5c, 0xd0, 0x36, 0x15, 0xfe, 0xf3, 0x8d, 0x01, 0x39, 0x01, 0x39, 0x01, + 0x39, 0xad, 0x71, 0x5a, 0x42, 0x1e, 0xd8, 0xee, 0x1d, 0x05, 0x70, 0x3a, 0x90, 0xba, 0x02, 0x84, + 0x06, 0x62, 0x42, 0xc3, 0x30, 0xa1, 0x97, 0x71, 0x45, 0xab, 0x60, 0xd7, 0xb1, 0x8d, 0xb0, 0xe4, + 0xae, 0x6f, 0x6a, 0x33, 0xad, 0x1c, 0xef, 0xf7, 0x5a, 0x1b, 0x50, 0xb4, 0x93, 0xfc, 0x8d, 0x5c, + 0x63, 0xa9, 0x1c, 0x7b, 0x0a, 0x73, 0xe3, 0xbb, 0x6d, 0xe5, 0x47, 0x08, 0xb3, 0x86, 0x32, 0xca, + 0x9a, 0x63, 0x36, 0x34, 0x22, 0x87, 0xe7, 0x92, 0x0e, 0xb5, 0xf8, 0x94, 0xd6, 0xa4, 0x9a, 0x0f, + 0x01, 0x6a, 0x00, 0x6a, 0x60, 0x0e, 0x52, 0xca, 0x1c, 0x04, 0x54, 0x33, 0x55, 0xaa, 0xd6, 0xc8, + 0x76, 0xaf, 0xb8, 0xc1, 0x23, 0x60, 0x9b, 0x22, 0xb1, 0xcd, 0xdc, 0x36, 0x00, 0xe1, 0x08, 0x40, + 0x38, 0xf6, 0xd0, 0x76, 0x2d, 0xf6, 0x23, 0x3f, 0xc2, 0x99, 0x35, 0x04, 0xa8, 0x00, 0xa8, 0x00, + 0xa8, 0xb0, 0xc6, 0x69, 0x89, 0x6c, 0x97, 0xef, 0x36, 0x09, 0x90, 0xc2, 0x7e, 0x8e, 0x26, 0x68, + 0x22, 0x77, 0x09, 0xd4, 0x34, 0x65, 0xa4, 0x2e, 0x75, 0x84, 0xae, 0xb0, 0x98, 0x4e, 0xfa, 0x58, + 0x4e, 0x82, 0x48, 0x5c, 0xd2, 0x08, 0xdc, 0x74, 0x2b, 0x5a, 0xcd, 0xc3, 0xd6, 0x61, 0x7b, 0xbf, + 0x79, 0xb8, 0xb7, 0x79, 0x7b, 0xa2, 0x16, 0xfc, 0x80, 0x3f, 0x79, 0x55, 0x3d, 0x08, 0x07, 0x27, + 0xfc, 0xc9, 0x58, 0x6e, 0x09, 0xcb, 0x2d, 0xd5, 0x78, 0xb9, 0x31, 0x96, 0x10, 0x4d, 0x5f, 0xca, + 0xc1, 0x61, 0xfa, 0x10, 0x68, 0xfa, 0xf8, 0xdd, 0xba, 0xc3, 0xd6, 0x21, 0xc2, 0xd6, 0x41, 0x64, + 0xe9, 0xc8, 0x63, 0xe7, 0x20, 0xf1, 0xe4, 0xd4, 0xe1, 0xc6, 0x81, 0x6d, 0x06, 0xb6, 0x19, 0xd8, + 0x66, 0x60, 0x9b, 0x81, 0x6d, 0x06, 0xb6, 0x99, 0xcd, 0xb3, 0xcd, 0x48, 0x81, 0x4b, 0x8e, 0x11, + 0xf2, 0x99, 0xbd, 0x24, 0x37, 0x68, 0x9a, 0x6f, 0x0c, 0x30, 0x04, 0x30, 0x04, 0x30, 0x64, 0x8d, + 0xd3, 0xc2, 0xed, 0x11, 0xe3, 0xb6, 0xf9, 0x2d, 0xcc, 0x95, 0xf1, 0x85, 0x20, 0xd3, 0x4b, 0xed, + 0x93, 0x3b, 0x11, 0xe4, 0x35, 0xd7, 0x70, 0xbd, 0x90, 0x99, 0x9e, 0x6b, 0xe5, 0x7a, 0x79, 0x09, + 0x6c, 0x03, 0x6c, 0x23, 0x05, 0xdb, 0x88, 0xcb, 0xf8, 0x02, 0x94, 0x23, 0x0a, 0xe5, 0xc0, 0x03, + 0xb5, 0xaa, 0x9a, 0x85, 0x4b, 0x04, 0x1e, 0x28, 0x2c, 0xb7, 0x84, 0xe5, 0x2e, 0xf1, 0x8b, 0x46, + 0xc7, 0xbb, 0xb3, 0x4d, 0xc3, 0x21, 0xa0, 0x6a, 0xd3, 0x86, 0x40, 0xd3, 0x40, 0xd3, 0x40, 0xd3, + 0xd6, 0x38, 0x2d, 0xc8, 0x01, 0x01, 0xc4, 0x04, 0x15, 0x8e, 0xe5, 0xc6, 0x72, 0xab, 0x81, 0x98, + 0x46, 0x69, 0xd2, 0xc2, 0xfc, 0xa0, 0x69, 0xae, 0x2d, 0xe0, 0x26, 0xe0, 0x26, 0xe0, 0x26, 0xe0, + 0x26, 0xe0, 0x26, 0x28, 0x72, 0x2c, 0x37, 0x96, 0xbb, 0x72, 0xb8, 0x69, 0x9a, 0x28, 0x35, 0x27, + 0x62, 0x4a, 0x5a, 0x01, 0x56, 0x02, 0x56, 0x02, 0x56, 0x5a, 0xe3, 0xb4, 0xa8, 0x9a, 0x2d, 0x0b, + 0x50, 0x09, 0xba, 0x1b, 0xba, 0xbb, 0x78, 0xdd, 0x1d, 0x2f, 0xbf, 0x1e, 0x4e, 0x12, 0x6a, 0xe4, + 0x56, 0xe1, 0xf3, 0x8d, 0x41, 0x93, 0x43, 0x93, 0x6f, 0x80, 0x26, 0x3f, 0x33, 0x5c, 0xcb, 0xe0, + 0x5e, 0xf0, 0x18, 0xab, 0xd0, 0xc2, 0xd1, 0x00, 0x73, 0xa3, 0xd1, 0x54, 0x9c, 0x52, 0x40, 0x82, + 0x56, 0x8e, 0x36, 0x4e, 0xdc, 0x68, 0x94, 0xff, 0xe4, 0x5e, 0x7b, 0x57, 0x13, 0x80, 0x43, 0x52, + 0x6f, 0xa9, 0x11, 0xaf, 0xd1, 0xa7, 0x3e, 0xc5, 0x2b, 0xc6, 0x66, 0xdc, 0xd4, 0xf1, 0xc5, 0x7f, + 0xce, 0x29, 0x1a, 0xdb, 0x8d, 0x1b, 0xbb, 0x3e, 0xb9, 0xba, 0xee, 0x9d, 0x7f, 0xa4, 0x68, 0xaf, + 0x95, 0xcc, 0xf3, 0xfc, 0xdf, 0xe7, 0x44, 0xe3, 0xdb, 0x9b, 0x4c, 0xf6, 0xf2, 0xac, 0x7b, 0x7e, + 0x4d, 0xd1, 0x5e, 0x3b, 0x6e, 0xef, 0xfc, 0xe2, 0xfa, 0xa6, 0x7f, 0x79, 0x72, 0x75, 0x42, 0xd3, + 0xe6, 0x7e, 0xdc, 0xe6, 0xe9, 0xc5, 0x7f, 0x4e, 0x2e, 0x6f, 0x4e, 0xbb, 0xff, 0x9c, 0x5c, 0xde, + 0x24, 0x9b, 0x53, 0x6c, 0xa1, 0x47, 0xaf, 0x97, 0xc3, 0x95, 0xf0, 0xac, 0xa9, 0xd9, 0xe2, 0x77, + 0x34, 0x82, 0x28, 0xc5, 0xc9, 0xb9, 0xed, 0x68, 0x4d, 0x82, 0xa6, 0x16, 0x56, 0x3c, 0xd7, 0xdb, + 0xa6, 0x27, 0x81, 0x36, 0x77, 0x38, 0x3a, 0x5a, 0x9b, 0xa0, 0xc5, 0xd9, 0xf5, 0xea, 0x68, 0xbb, + 0x04, 0xad, 0xcd, 0x2e, 0x57, 0x47, 0x6b, 0x51, 0xb4, 0xd6, 0x8f, 0xa5, 0x2d, 0x8a, 0x44, 0x81, + 0xf7, 0x81, 0xf7, 0x61, 0xb9, 0xb1, 0xdc, 0x52, 0x69, 0x36, 0xd2, 0x81, 0xbc, 0xce, 0x25, 0x56, + 0xcc, 0xc8, 0x79, 0xe1, 0xb3, 0x00, 0x79, 0x51, 0x8b, 0xce, 0x8b, 0x3a, 0xb7, 0x0b, 0x78, 0xfb, + 0x4a, 0xfa, 0x89, 0x35, 0x85, 0x78, 0xde, 0x12, 0x89, 0x02, 0x4b, 0x23, 0xae, 0x77, 0x32, 0x56, + 0x5f, 0xa5, 0x35, 0x56, 0xa8, 0xf6, 0xe0, 0x18, 0xeb, 0xaf, 0x4b, 0x2a, 0x92, 0x92, 0x4f, 0xaf, + 0xb9, 0x1f, 0x33, 0x5b, 0xc6, 0x9a, 0x1f, 0xcb, 0x6a, 0x48, 0xcc, 0x63, 0x40, 0x9c, 0x37, 0x1c, + 0x66, 0x98, 0x2a, 0x85, 0x00, 0x25, 0x33, 0x15, 0x92, 0x49, 0xc7, 0x97, 0xa6, 0xc1, 0x64, 0x61, + 0x4a, 0x76, 0xe7, 0x8f, 0xed, 0x20, 0xdb, 0x86, 0x9b, 0xb3, 0x53, 0x96, 0xb7, 0x44, 0xe7, 0xa4, + 0x9d, 0x7c, 0x36, 0xf7, 0x46, 0x45, 0x6c, 0xee, 0x19, 0xaf, 0x0e, 0x35, 0x06, 0x51, 0xcf, 0xea, + 0x9e, 0xed, 0x6a, 0x15, 0x63, 0x47, 0xc8, 0x7a, 0xe5, 0x9e, 0x69, 0x22, 0xdd, 0xb6, 0xf2, 0x6f, + 0xf3, 0xbc, 0x72, 0x8a, 0x1b, 0xcc, 0xb9, 0x27, 0xf9, 0x1c, 0x60, 0x64, 0x97, 0x92, 0xf2, 0x72, + 0x0a, 0xb8, 0xa4, 0x32, 0x08, 0x03, 0xc9, 0xa5, 0x95, 0xcb, 0x16, 0x72, 0x5f, 0x62, 0x22, 0x0e, + 0x90, 0xd7, 0x70, 0x9e, 0xd7, 0x21, 0xb6, 0x70, 0xe2, 0x22, 0x37, 0x9f, 0x4b, 0x6c, 0x41, 0x57, + 0x1e, 0x52, 0x98, 0xa4, 0x27, 0xd3, 0xfc, 0x42, 0x72, 0x0e, 0x68, 0xce, 0xbf, 0x00, 0x89, 0xf6, + 0xda, 0xf2, 0xb5, 0x09, 0x9b, 0xa4, 0x49, 0x19, 0x22, 0x6e, 0x39, 0xd3, 0x81, 0x52, 0xa6, 0x14, + 0x59, 0x68, 0x3c, 0xcd, 0x6b, 0xf1, 0x56, 0x4c, 0xfb, 0xa2, 0x92, 0x5a, 0x2c, 0x1e, 0x3e, 0xea, + 0x24, 0x17, 0xc4, 0xc2, 0xe9, 0xf5, 0xad, 0x25, 0x4c, 0x51, 0xb2, 0x74, 0x6b, 0x5b, 0xf5, 0xc3, + 0x16, 0x76, 0x57, 0xa8, 0xe2, 0x12, 0xd7, 0xda, 0xe0, 0x4d, 0x89, 0xce, 0xae, 0x00, 0x5d, 0xf1, + 0xbf, 0xb6, 0xfb, 0xbf, 0x62, 0x74, 0x45, 0xe3, 0x80, 0xb0, 0xcd, 0xbe, 0xc1, 0x39, 0x0b, 0x5c, + 0x72, 0x75, 0x51, 0xdb, 0x6a, 0xd5, 0x0f, 0xbf, 0xd4, 0xf5, 0xd6, 0xe0, 0x57, 0xab, 0xfe, 0xa5, + 0xae, 0x1f, 0x0c, 0xbe, 0xd4, 0xf5, 0xc3, 0xc1, 0xaf, 0x2f, 0x0d, 0x7d, 0x77, 0xf2, 0xed, 0xcf, + 0xdd, 0x71, 0xfc, 0xd3, 0xe1, 0xf4, 0xa7, 0xc6, 0xdb, 0xe6, 0xf4, 0xe7, 0xff, 0xcf, 0xde, 0xf9, + 0xf5, 0xb6, 0x8d, 0x64, 0x59, 0xfc, 0xdd, 0x9f, 0x82, 0x10, 0x06, 0xe8, 0x78, 0xd0, 0x4a, 0xcb, + 0xb1, 0xfc, 0x2f, 0xc0, 0x3e, 0x38, 0xd3, 0xd9, 0x59, 0x03, 0xce, 0xd8, 0x68, 0x27, 0xd9, 0x1e, + 0xc4, 0x9e, 0x80, 0x2d, 0x56, 0x64, 0xa2, 0x65, 0x4a, 0x43, 0x52, 0xce, 0x06, 0x9b, 0x7c, 0xf7, + 0x01, 0x25, 0x59, 0x21, 0x45, 0x4b, 0xe1, 0x9f, 0xba, 0xc5, 0xa2, 0xfc, 0xeb, 0xa7, 0x76, 0x12, + 0x57, 0x49, 0x55, 0xb7, 0x6e, 0x9d, 0x73, 0xee, 0xe1, 0xe5, 0xee, 0xf5, 0xf5, 0xf3, 0x67, 0x35, + 0x7e, 0xfd, 0xeb, 0xf5, 0xf5, 0x5f, 0x77, 0x3b, 0xfa, 0x02, 0x55, 0xe7, 0x6a, 0x5f, 0x5c, 0x9d, + 0xfd, 0x2e, 0xb6, 0xe4, 0xff, 0x6a, 0x78, 0xcd, 0xff, 0xd2, 0xb1, 0x2d, 0x3b, 0xec, 0x34, 0xfb, + 0x39, 0xea, 0xc2, 0x7e, 0x8d, 0x25, 0xb5, 0xe5, 0x98, 0x4b, 0x6b, 0xab, 0xb5, 0x28, 0xdb, 0x53, + 0x93, 0x50, 0x0d, 0xdc, 0x58, 0x69, 0x4d, 0x9e, 0x9a, 0x79, 0xf1, 0x63, 0xfc, 0x38, 0xd2, 0x55, + 0xf5, 0x33, 0xc2, 0x93, 0x1f, 0xe5, 0xcb, 0xa9, 0xb5, 0xdf, 0xb1, 0x0b, 0x33, 0xb4, 0xfd, 0x2c, + 0xd7, 0x2c, 0x83, 0xe5, 0xc6, 0xfb, 0x32, 0x1c, 0xc7, 0xdd, 0xf1, 0xa0, 0x3b, 0x18, 0xdf, 0x4d, + 0x42, 0x15, 0x45, 0xca, 0xeb, 0x8e, 0x94, 0xfb, 0x29, 0x19, 0xfc, 0xdb, 0x93, 0x30, 0x4e, 0x69, + 0x5a, 0x50, 0x99, 0xfa, 0xe2, 0xfd, 0xc8, 0x0d, 0x7e, 0x59, 0x14, 0x21, 0x6c, 0x7e, 0x7d, 0xf7, + 0x30, 0x09, 0x9d, 0xee, 0x9d, 0x3b, 0x99, 0xd4, 0xf1, 0x14, 0x7f, 0xb7, 0x5b, 0x67, 0xc7, 0xa3, + 0xfc, 0x42, 0xf9, 0xa5, 0xea, 0x4d, 0xf4, 0xd4, 0xca, 0x2f, 0x35, 0x2b, 0x9f, 0xb9, 0xc0, 0xab, + 0x55, 0x01, 0xd5, 0x74, 0x14, 0xb5, 0x1d, 0x49, 0x9d, 0x47, 0x53, 0xe0, 0x88, 0x4a, 0x81, 0x4c, + 0x8a, 0x2f, 0x3a, 0xb0, 0x5f, 0x5d, 0xe4, 0x56, 0xf7, 0x68, 0x2f, 0x07, 0x8a, 0x27, 0x1a, 0xca, + 0xab, 0xb9, 0xf0, 0x9d, 0x8d, 0xaa, 0x69, 0xf7, 0xf4, 0xd4, 0x5a, 0xb5, 0x1f, 0x7b, 0x89, 0xe3, + 0x2f, 0x98, 0x06, 0x4c, 0x72, 0x4e, 0xad, 0x69, 0xa1, 0x19, 0xce, 0xa9, 0x2d, 0x4d, 0x68, 0x26, + 0x9c, 0x9a, 0x62, 0x56, 0x5b, 0xed, 0x36, 0x17, 0xb1, 0xbe, 0xa7, 0x82, 0xd8, 0x8f, 0xbf, 0x84, + 0xea, 0x93, 0x84, 0xcc, 0x7c, 0xa0, 0x71, 0xcc, 0xb3, 0xc5, 0x47, 0x7d, 0xe5, 0x46, 0x02, 0xe7, + 0xe1, 0x61, 0x41, 0xde, 0x5e, 0x9e, 0xfd, 0xfa, 0xf1, 0xed, 0x3f, 0x2f, 0x5f, 0x5f, 0xe9, 0x3e, + 0x10, 0xb3, 0x92, 0x53, 0xa4, 0x5d, 0xb2, 0x75, 0x44, 0x0a, 0xab, 0xf9, 0x35, 0xe9, 0xfd, 0x7e, + 0xbc, 0xd7, 0xeb, 0x75, 0xda, 0x50, 0x3a, 0x34, 0xb4, 0x1c, 0xc7, 0xa7, 0xc7, 0x2c, 0xc7, 0x72, + 0x39, 0x4e, 0x88, 0x8e, 0xcc, 0x72, 0xbc, 0x60, 0x39, 0x96, 0xcb, 0x71, 0xfa, 0x8f, 0x7f, 0x76, + 0x2c, 0xaf, 0x4a, 0xdf, 0x6c, 0x29, 0x74, 0xd0, 0xac, 0x19, 0x2f, 0xc7, 0x15, 0xd3, 0x8e, 0xf5, + 0x2d, 0xa3, 0x8e, 0xf7, 0xe4, 0xe8, 0x72, 0xb4, 0xe6, 0xce, 0x85, 0x5e, 0x1f, 0x18, 0xac, 0x0b, + 0xd6, 0x05, 0xeb, 0x6a, 0x0d, 0xeb, 0xc2, 0x04, 0xaa, 0x35, 0x26, 0x31, 0x81, 0x16, 0x0a, 0x3e, + 0x4c, 0xa0, 0x6b, 0xb6, 0x16, 0x13, 0xa8, 0x71, 0xb8, 0xbd, 0xa5, 0x26, 0x50, 0xe0, 0xb6, 0x06, + 0xb8, 0x1d, 0xc5, 0xee, 0xe0, 0xcf, 0xee, 0xfc, 0xdc, 0x08, 0x01, 0xef, 0xcc, 0x14, 0x40, 0x70, + 0x20, 0x38, 0x10, 0xfc, 0x29, 0x42, 0x70, 0x81, 0x34, 0xe0, 0x68, 0xea, 0xf5, 0x98, 0x1b, 0x53, + 0x4b, 0xef, 0xc7, 0xfc, 0x02, 0xeb, 0xec, 0x05, 0x99, 0x1b, 0xbd, 0x97, 0xac, 0xf4, 0xe5, 0xbb, + 0xab, 0xff, 0xe9, 0x08, 0x40, 0xc3, 0x59, 0xe3, 0xc9, 0xcb, 0x8b, 0x4b, 0x89, 0xb1, 0x67, 0x9d, + 0x28, 0xaf, 0xfe, 0xf7, 0xf4, 0x52, 0xaf, 0x6c, 0xa9, 0x19, 0x21, 0x6b, 0x6c, 0x86, 0x98, 0xbf, + 0x2d, 0x2e, 0x2e, 0x65, 0x48, 0xcf, 0x3c, 0x1e, 0x44, 0x80, 0xf0, 0x7c, 0xc7, 0x5e, 0x3a, 0x2f, + 0x2c, 0x85, 0xaa, 0x28, 0xc3, 0xb6, 0x40, 0xd5, 0xad, 0xb2, 0x71, 0xcb, 0xb9, 0x8f, 0xb3, 0x5e, + 0xdc, 0x5a, 0x66, 0xe4, 0xfa, 0x4b, 0x5f, 0x63, 0xd9, 0x3b, 0xf3, 0x5e, 0x4d, 0xda, 0x8c, 0x91, + 0xf3, 0xe1, 0x2c, 0xf3, 0x45, 0xbe, 0xc0, 0x17, 0x69, 0x03, 0x0f, 0xc0, 0x17, 0x59, 0xe2, 0x2b, + 0xe1, 0x8b, 0x44, 0x1e, 0x40, 0x1e, 0x40, 0x1e, 0xb0, 0x4e, 0x1e, 0xc0, 0x17, 0xb9, 0xb2, 0x20, + 0xf8, 0x22, 0xd7, 0xac, 0x09, 0xbe, 0x48, 0x7c, 0x91, 0x9b, 0x96, 0x03, 0x5f, 0x24, 0xbe, 0xc8, + 0x75, 0xcb, 0x81, 0x2f, 0xb2, 0x09, 0xf1, 0x07, 0x5b, 0x20, 0xa4, 0x03, 0xd2, 0x01, 0xe9, 0xb0, + 0x8e, 0x74, 0x60, 0x0b, 0xd4, 0x1a, 0x93, 0xd8, 0x02, 0x0b, 0x05, 0x1f, 0xb6, 0xc0, 0x35, 0x5b, + 0x8b, 0x2d, 0xd0, 0x38, 0xda, 0xfc, 0xb6, 0x75, 0xdd, 0xdf, 0x70, 0xc5, 0x81, 0x40, 0x41, 0xa0, + 0x20, 0x50, 0x07, 0x57, 0x1c, 0xae, 0xb8, 0xf9, 0xe8, 0xb8, 0xe2, 0x44, 0x01, 0x22, 0xae, 0xb8, + 0xd5, 0x3b, 0xe3, 0x49, 0xb8, 0xe2, 0x30, 0x85, 0x65, 0xc6, 0x33, 0x66, 0x0a, 0xab, 0xf0, 0x1a, + 0x3c, 0x7d, 0x2b, 0x4f, 0xbb, 0xd0, 0x4d, 0x7b, 0xd3, 0xa9, 0xe5, 0x98, 0x0b, 0xa7, 0x83, 0x38, + 0x58, 0xe0, 0x82, 0xe5, 0x3b, 0x32, 0x3f, 0x5e, 0xa5, 0xe6, 0xfc, 0xf8, 0x7e, 0xe4, 0x06, 0x1f, + 0x5f, 0xcf, 0xe6, 0x7c, 0xb3, 0x98, 0xd2, 0xe2, 0x4e, 0xa5, 0x7e, 0xa0, 0xb9, 0x55, 0xe9, 0xea, + 0x80, 0xf4, 0x2a, 0xa5, 0x57, 0x69, 0x63, 0x94, 0x85, 0x5e, 0xa5, 0xf4, 0x2a, 0x35, 0xac, 0x4a, + 0xe0, 0xc9, 0xc5, 0x93, 0xbb, 0x61, 0x20, 0x3c, 0xb9, 0x88, 0x93, 0x88, 0x93, 0x88, 0x93, 0xba, + 0x22, 0x16, 0x4f, 0xee, 0xca, 0x82, 0xe0, 0xc9, 0x5d, 0xb3, 0x26, 0x78, 0x72, 0xf1, 0xe4, 0x6e, + 0x5a, 0x0e, 0x3c, 0xb9, 0x78, 0x72, 0xd7, 0x2d, 0x07, 0x9e, 0xdc, 0xc6, 0xa0, 0x03, 0xcd, 0x93, + 0x6a, 0x7d, 0x4d, 0x4c, 0xc9, 0xb0, 0x2e, 0x58, 0x17, 0xac, 0xcb, 0xb1, 0xf8, 0xf0, 0x3b, 0x98, + 0x92, 0x31, 0x25, 0x17, 0x08, 0x3e, 0x4c, 0xc9, 0x6b, 0xb6, 0x16, 0x53, 0xb2, 0x71, 0xb8, 0x4d, + 0xaf, 0x52, 0xe0, 0xf6, 0x3a, 0xb8, 0x8d, 0x2b, 0x1b, 0x08, 0x0e, 0x04, 0x07, 0x82, 0xe3, 0xca, + 0x4e, 0x8f, 0x89, 0x2b, 0x7b, 0x65, 0x70, 0x5c, 0xd9, 0xb8, 0xb2, 0x57, 0xef, 0x0c, 0x7a, 0x95, + 0x02, 0x55, 0xc5, 0x47, 0x78, 0x3a, 0xb6, 0xf4, 0x15, 0x33, 0x2e, 0xcd, 0x4a, 0x69, 0x56, 0xda, + 0x18, 0x31, 0xc0, 0x18, 0x89, 0x31, 0x72, 0xc3, 0x40, 0x18, 0x23, 0xd1, 0x07, 0xd0, 0x07, 0xd0, + 0x07, 0x74, 0x45, 0x2c, 0xc6, 0xc8, 0x95, 0x05, 0xc1, 0x18, 0xb9, 0x66, 0x4d, 0x30, 0x46, 0x62, + 0x8c, 0xdc, 0xb4, 0x1c, 0x18, 0x23, 0x31, 0x46, 0xae, 0x5b, 0x0e, 0x8c, 0x91, 0x4d, 0xa8, 0x3f, + 0xf8, 0x02, 0x21, 0x1d, 0x90, 0x0e, 0x48, 0x87, 0x75, 0xa4, 0x03, 0x5f, 0xa0, 0xd6, 0x98, 0xc4, + 0x17, 0x58, 0x28, 0xf8, 0xf0, 0x05, 0xae, 0xd9, 0x5a, 0x7c, 0x81, 0xc6, 0xd1, 0x26, 0xcd, 0x4a, + 0xd7, 0xa2, 0x4d, 0x6c, 0x71, 0x20, 0x50, 0x10, 0x28, 0x08, 0x14, 0x5b, 0x5c, 0x7a, 0x4c, 0x6c, + 0x71, 0x2b, 0x83, 0x63, 0x8b, 0xc3, 0x16, 0xb7, 0x7a, 0x67, 0xd0, 0xac, 0x54, 0x7e, 0x84, 0xa7, + 0xeb, 0x0a, 0xa3, 0x5b, 0xa9, 0xbd, 0x9b, 0x63, 0xa6, 0x5d, 0xe9, 0x59, 0xd0, 0x96, 0x7e, 0xa5, + 0x77, 0x6e, 0x3c, 0xb8, 0xad, 0xdf, 0xa5, 0x74, 0x3e, 0x0c, 0xbd, 0x49, 0xe9, 0x4d, 0xda, 0x18, + 0x43, 0x69, 0x59, 0x6f, 0x52, 0x6f, 0x3c, 0xfd, 0x63, 0xa4, 0xba, 0xb1, 0x3b, 0x1c, 0x2a, 0x4f, + 0x9f, 0x11, 0x37, 0x3b, 0x2c, 0x9d, 0x4a, 0x0d, 0x4a, 0x12, 0x18, 0x72, 0x31, 0xe4, 0x6e, 0x18, + 0x48, 0x53, 0x33, 0xe2, 0x5c, 0x00, 0x6b, 0x69, 0x4a, 0xac, 0xf9, 0xc8, 0xa3, 0x4e, 0xa2, 0x4e, + 0xa2, 0x4e, 0xea, 0x4e, 0x21, 0xcb, 0x01, 0xfd, 0x20, 0x50, 0x61, 0x57, 0xb7, 0xe5, 0x26, 0x77, + 0x1e, 0xb2, 0xd3, 0x68, 0xde, 0x7f, 0xbd, 0x65, 0x10, 0xb1, 0x84, 0x23, 0x99, 0x78, 0x0c, 0x24, + 0x20, 0xe9, 0x44, 0x64, 0x2c, 0x21, 0x19, 0x4b, 0x4c, 0x66, 0x12, 0x94, 0x7e, 0xd1, 0xd0, 0x91, + 0xd0, 0x8d, 0x75, 0x97, 0x55, 0x72, 0x11, 0x2f, 0x93, 0x5c, 0x1c, 0x19, 0xa3, 0xcf, 0x72, 0x68, + 0x19, 0xc3, 0xcf, 0xc3, 0x7f, 0x32, 0x27, 0xd4, 0x91, 0x36, 0x00, 0x2d, 0x27, 0x11, 0x36, 0x02, + 0x2d, 0xe7, 0x31, 0x65, 0x19, 0xf9, 0x1e, 0xb4, 0xd2, 0xd6, 0x11, 0xa1, 0x73, 0x9c, 0x0d, 0x01, + 0x41, 0xa3, 0x50, 0x2e, 0x04, 0xe4, 0x0c, 0x43, 0x4f, 0x21, 0x0a, 0x76, 0xda, 0x31, 0xea, 0x8d, + 0xd5, 0x77, 0x98, 0x50, 0x57, 0x87, 0xe5, 0xf8, 0xe2, 0xdd, 0x1d, 0xf4, 0x6f, 0x9c, 0xc6, 0x25, + 0xee, 0x8c, 0xa7, 0xb1, 0x09, 0x2a, 0x92, 0x9d, 0x06, 0x2a, 0x02, 0x15, 0x81, 0x8a, 0x40, 0x45, + 0xa0, 0x22, 0x50, 0x11, 0xa8, 0x08, 0x54, 0x04, 0x2a, 0x02, 0x15, 0x81, 0x8a, 0xb4, 0x92, 0x8a, + 0x3c, 0x89, 0x0e, 0x80, 0x72, 0xee, 0xb6, 0x99, 0xef, 0xea, 0x97, 0x8c, 0xe9, 0x43, 0x4b, 0x53, + 0x3a, 0x7d, 0xfb, 0xa3, 0xe3, 0x71, 0x1f, 0x3d, 0xcd, 0xea, 0x72, 0x88, 0x4f, 0x47, 0xd3, 0xba, + 0x55, 0x8c, 0xa7, 0xbd, 0x70, 0xfe, 0x82, 0xc2, 0x79, 0x9b, 0xc8, 0x21, 0x85, 0x73, 0x0a, 0xe7, + 0x14, 0xce, 0x51, 0xab, 0x50, 0xab, 0x50, 0xab, 0x50, 0xab, 0x50, 0xab, 0x50, 0xab, 0x50, 0xab, + 0x50, 0xab, 0x50, 0xab, 0x0c, 0xa8, 0x55, 0xd4, 0x87, 0x41, 0xdc, 0x20, 0x6e, 0x10, 0x37, 0x88, + 0x1b, 0xc4, 0x0d, 0xe2, 0x06, 0x71, 0x83, 0xb8, 0x41, 0xdc, 0x20, 0xee, 0x76, 0x20, 0x6e, 0xca, + 0xa0, 0xda, 0xcb, 0xa0, 0x1a, 0xba, 0xb0, 0xe8, 0xdb, 0x1e, 0x5a, 0xe9, 0x54, 0xde, 0xc8, 0x8e, + 0x96, 0x02, 0x72, 0xd1, 0xce, 0x2d, 0x6f, 0x92, 0x0f, 0xf0, 0xf1, 0xd7, 0xd9, 0x07, 0x78, 0x3b, + 0x9f, 0xbf, 0x85, 0x6f, 0x77, 0xcb, 0x2c, 0x60, 0x77, 0x5e, 0x8e, 0x1a, 0xf9, 0x51, 0x2c, 0xd4, + 0x67, 0x22, 0x3d, 0x03, 0x2d, 0x27, 0x0c, 0x72, 0x67, 0x5a, 0x4e, 0xd0, 0x72, 0x62, 0xc3, 0x40, + 0xb4, 0x9c, 0xb0, 0x54, 0x4e, 0xc3, 0x39, 0xd3, 0x80, 0x5c, 0x86, 0x73, 0xa6, 0xc6, 0x80, 0x19, + 0x4b, 0x4b, 0x64, 0xc8, 0x3a, 0x13, 0xa1, 0xe4, 0xa3, 0xe4, 0x37, 0x98, 0x92, 0x8c, 0xa5, 0x26, + 0x33, 0x29, 0x4a, 0x46, 0x57, 0x41, 0xc9, 0xcf, 0x27, 0x18, 0x94, 0xfc, 0xd4, 0x07, 0x47, 0xc9, + 0xaf, 0x15, 0xb4, 0x28, 0xf9, 0x25, 0x43, 0x00, 0x25, 0xdf, 0x9a, 0xbb, 0x41, 0x6e, 0x54, 0xbb, + 0x9f, 0xf4, 0x3a, 0xf7, 0xa3, 0xf8, 0x34, 0x8e, 0x43, 0x99, 0x7b, 0xec, 0x8d, 0x1f, 0xbc, 0x1e, + 0xa9, 0x04, 0x26, 0x08, 0x85, 0x5e, 0x72, 0x5e, 0x53, 0x33, 0xec, 0x1d, 0xf7, 0xfb, 0x87, 0x47, + 0xfd, 0x7e, 0xef, 0x68, 0xff, 0xa8, 0x77, 0x72, 0x70, 0xb0, 0x77, 0xa8, 0xf3, 0x75, 0xcd, 0xcb, + 0x49, 0x2f, 0x42, 0x4f, 0x85, 0xca, 0x7b, 0xf5, 0xa5, 0xf3, 0xd2, 0x09, 0xa6, 0xa3, 0x91, 0xe4, + 0x14, 0xef, 0x22, 0x15, 0x8a, 0x9c, 0x25, 0x9e, 0x19, 0x14, 0x4f, 0x01, 0xd8, 0xd3, 0x20, 0xb5, + 0x90, 0x5a, 0x48, 0x2d, 0xa4, 0x16, 0x52, 0x0b, 0xa9, 0x85, 0xce, 0x40, 0x6a, 0x89, 0x02, 0x48, + 0x2d, 0x54, 0xa4, 0x09, 0x2a, 0x82, 0x6f, 0x4f, 0xb7, 0xdd, 0x2b, 0xe5, 0x25, 0xa2, 0x93, 0x49, + 0x51, 0xf0, 0x47, 0x27, 0x13, 0x6b, 0x79, 0x23, 0x7e, 0x8c, 0x66, 0x78, 0x21, 0x7e, 0x0c, 0x2d, + 0x07, 0x02, 0x3f, 0x06, 0xd2, 0x15, 0xd2, 0x15, 0xd2, 0x15, 0xd2, 0x15, 0xd2, 0x15, 0xd2, 0x15, + 0xd2, 0x15, 0xd2, 0x15, 0xd2, 0x55, 0xfb, 0xa4, 0x2b, 0xfc, 0x18, 0x15, 0x26, 0xdd, 0x0e, 0x3f, + 0x06, 0xb6, 0x03, 0x6c, 0x07, 0x70, 0x37, 0xb8, 0x1b, 0xdc, 0x0d, 0xee, 0x06, 0x77, 0x83, 0xbb, + 0xc1, 0xdd, 0xe0, 0x6e, 0x70, 0x37, 0x49, 0xee, 0x46, 0x75, 0xbd, 0xd4, 0xb8, 0x8d, 0x55, 0xd7, + 0x69, 0x90, 0x23, 0xb5, 0xb7, 0x8d, 0xed, 0x69, 0xd3, 0xbd, 0x72, 0xce, 0x92, 0x4f, 0x72, 0x9e, + 0x7c, 0x90, 0x2d, 0x69, 0x9a, 0x33, 0x67, 0xd0, 0xe1, 0x02, 0x2e, 0x0a, 0xf6, 0xce, 0x49, 0x4f, + 0x44, 0x0b, 0x1d, 0x83, 0x44, 0x9b, 0x16, 0x3a, 0xb4, 0xd0, 0xd9, 0x30, 0x10, 0x2d, 0x74, 0x2c, + 0xd5, 0xde, 0xb0, 0x6c, 0x35, 0xa0, 0xad, 0x61, 0xd9, 0xaa, 0x31, 0xe0, 0xfc, 0xa2, 0xbf, 0xf5, + 0x87, 0xb7, 0xa6, 0xde, 0x40, 0x95, 0x99, 0x0b, 0xf9, 0x1f, 0xf9, 0xbf, 0xb9, 0xd4, 0x64, 0x2c, + 0x45, 0x99, 0x49, 0x55, 0x32, 0x62, 0x0c, 0xf2, 0x7f, 0x3e, 0xc1, 0x20, 0xff, 0xa7, 0x3e, 0x38, + 0xf2, 0x7f, 0xad, 0xa0, 0x45, 0xfe, 0x2f, 0x19, 0x02, 0xc8, 0xff, 0xd6, 0xdc, 0x0d, 0x72, 0xa3, + 0xf2, 0xd4, 0xe1, 0x13, 0x6e, 0x80, 0xb2, 0xd0, 0x8e, 0xc7, 0x9f, 0x4d, 0x71, 0x92, 0xf4, 0x54, + 0x50, 0x12, 0x28, 0x09, 0x94, 0x04, 0x4a, 0x02, 0x25, 0x81, 0x92, 0x40, 0x49, 0xa0, 0x24, 0x50, + 0x12, 0x28, 0x09, 0x94, 0x84, 0x9e, 0x8c, 0xb1, 0xb1, 0x3a, 0xc9, 0x23, 0x73, 0x41, 0x4a, 0x20, + 0x25, 0x90, 0x12, 0x48, 0x09, 0xa4, 0x04, 0x52, 0x02, 0x29, 0x81, 0x94, 0x40, 0x4a, 0x20, 0x25, + 0x90, 0x12, 0x48, 0x49, 0x6c, 0xaa, 0x4e, 0x92, 0x9f, 0x0a, 0x4a, 0x02, 0x25, 0x81, 0x92, 0x40, + 0x49, 0xa0, 0x24, 0x50, 0x12, 0x28, 0x09, 0x94, 0x04, 0x4a, 0x02, 0x25, 0x81, 0x92, 0xd0, 0x30, + 0xde, 0xd2, 0x0d, 0x6a, 0xe4, 0xf1, 0xe7, 0xd4, 0x03, 0xb4, 0xf4, 0x8d, 0x2f, 0x8a, 0x01, 0xe9, + 0x1b, 0x6f, 0x2d, 0x7d, 0xe4, 0x21, 0xc4, 0x66, 0xe8, 0x21, 0x0f, 0x21, 0x6a, 0x3b, 0x14, 0x3c, + 0x84, 0x88, 0x92, 0x85, 0x92, 0x85, 0x92, 0x85, 0x92, 0x85, 0x92, 0x85, 0x92, 0x85, 0x92, 0x85, + 0x92, 0x85, 0x92, 0x65, 0x48, 0xc9, 0xe2, 0x59, 0x3b, 0x9e, 0xb5, 0x03, 0x79, 0x83, 0xbc, 0x41, + 0xde, 0x20, 0x6f, 0x90, 0x37, 0xc8, 0x1b, 0xe4, 0x0d, 0xf2, 0x06, 0x79, 0x3f, 0x59, 0xe4, 0xcd, + 0x23, 0x65, 0x60, 0x6f, 0xb0, 0x37, 0xd8, 0x1b, 0xec, 0x0d, 0xf6, 0x06, 0x7b, 0x83, 0xbd, 0xc1, + 0xde, 0x60, 0x6f, 0xb0, 0xb7, 0x49, 0xec, 0xcd, 0x93, 0x53, 0x20, 0x6f, 0x90, 0x37, 0xc8, 0x1b, + 0xe4, 0x0d, 0xf2, 0x06, 0x79, 0x83, 0xbc, 0x41, 0xde, 0x20, 0x6f, 0x90, 0xb7, 0xd4, 0x48, 0x3c, + 0x20, 0xb4, 0xf9, 0x01, 0x21, 0x5e, 0x7d, 0x29, 0xb5, 0xc5, 0x4d, 0x6f, 0xad, 0x15, 0x6f, 0xc0, + 0xbc, 0x48, 0x3e, 0xcf, 0x1c, 0x6f, 0x6d, 0xc9, 0x7b, 0x30, 0x0d, 0xbc, 0x01, 0x93, 0x77, 0x5f, + 0x1a, 0x27, 0xdc, 0xbc, 0xfb, 0x92, 0x77, 0x5f, 0x6e, 0x18, 0x88, 0x77, 0x5f, 0x5a, 0xaa, 0xc1, + 0xf1, 0xd8, 0x69, 0x03, 0x1a, 0x1b, 0x8f, 0x9d, 0xd6, 0x18, 0x90, 0xc7, 0x4e, 0x1b, 0x48, 0x3d, + 0x92, 0x29, 0xc8, 0x40, 0x2a, 0x92, 0x4e, 0x49, 0xc6, 0x52, 0x93, 0xb1, 0x14, 0x65, 0x26, 0x55, + 0xc9, 0x88, 0x32, 0x94, 0x01, 0xf2, 0x09, 0x86, 0x32, 0x40, 0xea, 0x83, 0x53, 0x06, 0xa8, 0x15, + 0xb4, 0x94, 0x01, 0x4a, 0x86, 0x00, 0x65, 0x00, 0x6b, 0xee, 0x06, 0xb9, 0x51, 0x69, 0xa0, 0xc6, + 0xbb, 0x2f, 0x79, 0x1e, 0x17, 0x4a, 0x02, 0x25, 0x81, 0x92, 0x40, 0x49, 0xa0, 0x24, 0x50, 0x12, + 0x28, 0x09, 0x94, 0x04, 0x4a, 0x02, 0x25, 0x81, 0x92, 0x34, 0x41, 0x49, 0xe6, 0x4e, 0x16, 0x43, + 0x0f, 0x4a, 0x40, 0x45, 0xa0, 0x22, 0x50, 0x11, 0xa8, 0x08, 0x54, 0x04, 0x2a, 0x02, 0x15, 0x81, + 0x8a, 0x40, 0x45, 0xa0, 0x22, 0x2d, 0xa2, 0x22, 0xe7, 0x7e, 0x14, 0x9f, 0xc6, 0x71, 0x28, 0x73, + 0x8f, 0xbd, 0xf1, 0x83, 0xd7, 0x23, 0x95, 0xc0, 0x04, 0xa1, 0xd0, 0x4b, 0xce, 0x6b, 0x6a, 0x86, + 0xbd, 0xe3, 0x7e, 0xff, 0xf0, 0xa8, 0xdf, 0xef, 0x1d, 0xed, 0x1f, 0xf5, 0x4e, 0x0e, 0x0e, 0xf6, + 0x0e, 0xf7, 0x0e, 0x04, 0x26, 0xbd, 0x08, 0x3d, 0x15, 0x2a, 0xef, 0xd5, 0x97, 0xce, 0x4b, 0x27, + 0x98, 0x8e, 0x46, 0x92, 0x53, 0xbc, 0x8b, 0x54, 0x28, 0x72, 0x96, 0x20, 0xb5, 0xf2, 0xa4, 0x96, + 0xe7, 0x90, 0x84, 0x1e, 0x56, 0xe1, 0x15, 0x45, 0xa5, 0x78, 0x04, 0xaf, 0x28, 0xb2, 0x56, 0x82, + 0xc0, 0x2b, 0xde, 0x8c, 0xc4, 0x80, 0x57, 0x5c, 0xdb, 0xa1, 0xc0, 0x2b, 0x6e, 0x20, 0x05, 0x19, + 0x48, 0x45, 0xd2, 0x29, 0xc9, 0x58, 0x6a, 0x32, 0x96, 0xa2, 0xcc, 0xa4, 0x2a, 0x19, 0x6e, 0x8a, + 0x1a, 0x9a, 0x4f, 0x30, 0xa8, 0xa1, 0x59, 0xf2, 0x8e, 0x1a, 0xda, 0x02, 0x1d, 0x0c, 0x35, 0x94, + 0x28, 0xa0, 0x65, 0x8c, 0x3d, 0xa7, 0x08, 0x4b, 0x34, 0xc8, 0x1b, 0xe4, 0x0d, 0xf2, 0x06, 0x79, + 0x83, 0xbc, 0x41, 0xde, 0x20, 0x6f, 0x90, 0x37, 0xc8, 0x1b, 0xe4, 0x6d, 0x04, 0x79, 0xe3, 0xfc, + 0x05, 0x71, 0x83, 0xb8, 0x41, 0xdc, 0x20, 0x6e, 0x10, 0x37, 0x88, 0x1b, 0xc4, 0x0d, 0xe2, 0x06, + 0x71, 0x6f, 0x0d, 0xe2, 0xc6, 0xf9, 0xbb, 0x7a, 0x5e, 0x71, 0xfe, 0x36, 0xcd, 0xdd, 0x30, 0xb8, + 0x8a, 0x1a, 0x5c, 0x69, 0xb1, 0x2f, 0xb5, 0xb9, 0xcd, 0x6d, 0xaa, 0x15, 0xcd, 0xf5, 0xb7, 0xa4, + 0xaf, 0xfe, 0xe2, 0x5d, 0x75, 0x7e, 0x14, 0x4b, 0xb5, 0xd5, 0x4f, 0xcd, 0x40, 0x57, 0x7d, 0x83, + 0x3a, 0x0d, 0x5d, 0xf5, 0xe9, 0xaa, 0xbf, 0x61, 0x20, 0xba, 0xea, 0xeb, 0x18, 0x90, 0x27, 0x25, + 0x1c, 0x9e, 0x94, 0x68, 0x19, 0xc8, 0x17, 0x7a, 0x52, 0xc2, 0x90, 0x53, 0x8b, 0x9a, 0x91, 0x43, + 0xcd, 0xa8, 0xf1, 0x84, 0x64, 0x2c, 0x31, 0x99, 0x49, 0x50, 0x32, 0x0a, 0x1e, 0x35, 0xa3, 0x7c, + 0x82, 0xa1, 0x66, 0x94, 0x95, 0x38, 0xa9, 0x19, 0x55, 0x0f, 0x5a, 0x6a, 0x46, 0x25, 0x43, 0x80, + 0x9a, 0x91, 0x35, 0x77, 0x83, 0xdc, 0xa8, 0x34, 0xae, 0xa4, 0x71, 0xe5, 0xfc, 0x1a, 0x8f, 0x0c, + 0xf9, 0xd7, 0x22, 0xc8, 0x08, 0x64, 0x04, 0x32, 0x02, 0x19, 0x81, 0x8c, 0x40, 0x46, 0x20, 0x23, + 0x90, 0x11, 0xc8, 0x08, 0x64, 0xa4, 0x0d, 0x64, 0x04, 0x03, 0x5b, 0x85, 0x49, 0x69, 0x5d, 0x09, + 0xad, 0x35, 0x37, 0x12, 0xce, 0xbe, 0xc7, 0xbd, 0x44, 0x74, 0xae, 0x2c, 0x4a, 0x23, 0xe8, 0x5c, + 0x69, 0xad, 0x02, 0x81, 0x1f, 0xa3, 0x19, 0x85, 0x01, 0x3f, 0x86, 0x8e, 0xf3, 0x80, 0x1f, 0x43, + 0x36, 0xf1, 0x18, 0x48, 0x40, 0xd2, 0x89, 0xc8, 0x58, 0x42, 0x32, 0x96, 0x98, 0xcc, 0x24, 0x28, + 0x19, 0x42, 0x8a, 0x04, 0x9a, 0x4f, 0x30, 0x48, 0xa0, 0x59, 0xc6, 0x8e, 0x04, 0xda, 0x02, 0xf1, + 0x0b, 0x09, 0x94, 0x28, 0xa0, 0x6b, 0x8e, 0x3d, 0xa7, 0x08, 0xdb, 0x01, 0x98, 0x1b, 0xcc, 0x0d, + 0xe6, 0x06, 0x73, 0x83, 0xb9, 0xc1, 0xdc, 0x60, 0x6e, 0x30, 0x37, 0x98, 0x7b, 0x9b, 0x30, 0x37, + 0xb6, 0x83, 0xd5, 0xf3, 0x8a, 0xed, 0xa0, 0x69, 0xf6, 0x46, 0x75, 0x5d, 0xb2, 0xba, 0x4e, 0xdb, + 0x1c, 0xa9, 0xbd, 0x6d, 0x6c, 0x4f, 0x9b, 0xee, 0x9a, 0x73, 0x91, 0x7c, 0x92, 0x24, 0xf5, 0x6f, + 0x4b, 0xd3, 0x9c, 0x70, 0x41, 0x39, 0x04, 0xbb, 0xe6, 0xe8, 0x68, 0x77, 0x44, 0xdb, 0x9c, 0x46, + 0x65, 0x19, 0xda, 0xe6, 0xd8, 0x90, 0xc4, 0x69, 0x9b, 0x63, 0xc3, 0xd1, 0x97, 0x48, 0x01, 0x82, + 0xa9, 0x40, 0x2a, 0x25, 0x88, 0xa7, 0x06, 0xf1, 0x14, 0x21, 0x9b, 0x2a, 0xec, 0xc4, 0xf8, 0xd8, + 0xb4, 0xd6, 0x27, 0x1a, 0x4a, 0x46, 0x94, 0x8c, 0xac, 0x4a, 0x4c, 0x66, 0x12, 0x94, 0x8c, 0x80, + 0x47, 0xc9, 0x28, 0x9f, 0x60, 0x28, 0x19, 0x65, 0x15, 0x4e, 0x4a, 0x46, 0xd5, 0x83, 0x96, 0x92, + 0x51, 0xc9, 0x10, 0xa0, 0x64, 0x64, 0xcd, 0xdd, 0x20, 0x37, 0x2a, 0x6d, 0x73, 0x9e, 0x7c, 0xdb, + 0x9c, 0x5b, 0x7f, 0x78, 0x6b, 0xea, 0xd5, 0x6f, 0x99, 0xb9, 0x20, 0x25, 0x90, 0x12, 0x48, 0x09, + 0xa4, 0x04, 0x52, 0x02, 0x29, 0x81, 0x94, 0x40, 0x4a, 0x20, 0x25, 0x90, 0x12, 0x48, 0x09, 0xa4, + 0x64, 0x66, 0x5d, 0x19, 0x7f, 0x36, 0xc5, 0x49, 0xd2, 0x53, 0x41, 0x49, 0xa0, 0x24, 0x50, 0x12, + 0x28, 0x09, 0x94, 0x04, 0x4a, 0x02, 0x25, 0x81, 0x92, 0x40, 0x49, 0xa0, 0x24, 0x50, 0x12, 0xfa, + 0x30, 0x5a, 0xba, 0x41, 0x8d, 0x3c, 0x55, 0x30, 0x7f, 0xc3, 0x32, 0x8d, 0x18, 0x0b, 0xa2, 0x3f, + 0x1a, 0x31, 0x5a, 0x4b, 0x1c, 0x71, 0xf8, 0x36, 0x43, 0x0c, 0x71, 0xf8, 0xea, 0x38, 0x0f, 0x38, + 0x7c, 0x51, 0xae, 0x50, 0xae, 0x50, 0xae, 0x50, 0xae, 0x50, 0xae, 0x50, 0xae, 0x50, 0xae, 0x50, + 0xae, 0x50, 0xae, 0xe4, 0x95, 0x2b, 0x8c, 0xac, 0x18, 0x59, 0xc1, 0xde, 0x60, 0x6f, 0xb0, 0x37, + 0xd8, 0x1b, 0xec, 0x0d, 0xf6, 0x06, 0x7b, 0x83, 0xbd, 0xc1, 0xde, 0x4f, 0x1e, 0x7b, 0xe3, 0xd7, + 0x04, 0x79, 0x83, 0xbc, 0x41, 0xde, 0x20, 0x6f, 0x90, 0x37, 0xc8, 0x1b, 0xe4, 0x0d, 0xf2, 0x06, + 0x79, 0x83, 0xbc, 0xa5, 0x46, 0xc2, 0x96, 0xb8, 0xce, 0x96, 0x48, 0x07, 0x6b, 0xa9, 0xcd, 0x6d, + 0x6e, 0x53, 0xad, 0x68, 0x61, 0x3d, 0x87, 0x57, 0x2d, 0xec, 0x61, 0x1d, 0xf9, 0xc1, 0x70, 0xb9, + 0xac, 0xfa, 0xfa, 0x56, 0x67, 0x87, 0xa5, 0x57, 0xb5, 0x41, 0x1e, 0x4d, 0xaf, 0x6a, 0x7a, 0x55, + 0x6f, 0x18, 0x88, 0x5e, 0xd5, 0x96, 0x4a, 0x6b, 0x38, 0xd9, 0x1b, 0x90, 0xce, 0x70, 0xb2, 0xd7, + 0x18, 0x50, 0x5c, 0xd1, 0x47, 0xc7, 0x77, 0xd0, 0xf1, 0x1b, 0x4f, 0x42, 0xc6, 0x92, 0x91, 0x99, + 0xa4, 0x24, 0xa3, 0xaa, 0xa0, 0xe3, 0xe7, 0x13, 0x0c, 0x3a, 0x7e, 0xea, 0x83, 0xa3, 0xe3, 0xd7, + 0x0a, 0x5a, 0x74, 0xfc, 0x92, 0x21, 0x80, 0x8e, 0x6f, 0xcd, 0xdd, 0x20, 0x37, 0x2a, 0x7d, 0x17, + 0xe8, 0xbb, 0x60, 0xdf, 0x06, 0x89, 0x6b, 0xe1, 0x19, 0x75, 0x95, 0x5e, 0x0b, 0x45, 0x11, 0x1f, + 0xbd, 0x16, 0x50, 0xa8, 0x50, 0xa8, 0x50, 0xa8, 0x50, 0xa8, 0x50, 0xa8, 0x50, 0xa8, 0x50, 0xa8, + 0x50, 0xa8, 0x50, 0xa8, 0x50, 0xa8, 0x50, 0xa8, 0x50, 0xa8, 0x50, 0xa8, 0x5a, 0xa2, 0x50, 0x21, + 0xc4, 0x58, 0x2c, 0xc4, 0xe0, 0x2e, 0x95, 0xda, 0x50, 0xb3, 0x1b, 0xd9, 0x84, 0xa3, 0xf4, 0x6a, + 0xf6, 0x01, 0xe6, 0x8e, 0xd2, 0xd6, 0xfb, 0x48, 0xbb, 0x23, 0x3f, 0x8a, 0x85, 0xcc, 0xa4, 0xf3, + 0xb1, 0x71, 0x94, 0x1a, 0xe4, 0xcb, 0x38, 0x4a, 0x71, 0x94, 0x6e, 0x18, 0x08, 0x47, 0xa9, 0xa5, + 0x12, 0x1a, 0x7a, 0x7d, 0x03, 0x12, 0x19, 0x7a, 0x7d, 0x8d, 0x01, 0x17, 0x8a, 0x57, 0x24, 0x2e, + 0xd8, 0x47, 0x28, 0xf6, 0x28, 0xf6, 0x0d, 0xa6, 0x21, 0x63, 0xe9, 0xc8, 0x4c, 0x5a, 0x92, 0xd1, + 0x4f, 0x50, 0xec, 0xf3, 0x09, 0x06, 0xc5, 0x3e, 0xf5, 0xc1, 0x51, 0xec, 0x6b, 0x05, 0x2d, 0x8a, + 0x7d, 0xc9, 0x10, 0x40, 0xb1, 0xb7, 0xe6, 0x6e, 0x90, 0x1b, 0xd5, 0x6e, 0x4f, 0xe9, 0xb9, 0x1f, + 0xc5, 0xa7, 0x71, 0x1c, 0xca, 0xdc, 0x63, 0x6f, 0xfc, 0xe0, 0xf5, 0x48, 0x25, 0x30, 0x41, 0x28, + 0xf4, 0x92, 0xf3, 0x9a, 0x9a, 0x61, 0xef, 0xb8, 0xdf, 0x3f, 0x3c, 0xea, 0xf7, 0x7b, 0x47, 0xfb, + 0x47, 0xbd, 0x93, 0x83, 0x83, 0xbd, 0xc3, 0xbd, 0x03, 0x81, 0x49, 0x2f, 0x42, 0x4f, 0x85, 0xca, + 0x7b, 0xf5, 0xa5, 0xf3, 0xd2, 0x09, 0xa6, 0xa3, 0x91, 0xe4, 0x14, 0xef, 0x22, 0x15, 0x8a, 0x9c, + 0x25, 0xdc, 0xc9, 0xe2, 0x29, 0x80, 0xa2, 0x98, 0xf6, 0x5a, 0xca, 0x4c, 0xae, 0xc7, 0xa2, 0x5c, + 0x94, 0x40, 0x60, 0x51, 0xb6, 0x56, 0x7b, 0x40, 0xf2, 0x6c, 0x46, 0x5b, 0x40, 0xf2, 0xd4, 0x23, + 0x4a, 0x20, 0x79, 0x22, 0x79, 0x36, 0x99, 0x86, 0x8c, 0xa5, 0x23, 0x33, 0x69, 0x49, 0x86, 0x80, + 0x22, 0x79, 0xe6, 0x13, 0x0c, 0x92, 0x67, 0x96, 0xa1, 0x23, 0x79, 0xb6, 0x40, 0xec, 0x42, 0xf2, + 0x24, 0x0a, 0x90, 0x3c, 0xb5, 0x6c, 0x17, 0x92, 0x67, 0x85, 0x49, 0xb7, 0x43, 0xf2, 0x44, 0xd9, + 0x2b, 0x27, 0x4a, 0x99, 0x57, 0xf6, 0xf0, 0xbc, 0x4b, 0xed, 0x6a, 0x03, 0xbb, 0xd9, 0xb4, 0xf1, + 0x3d, 0xc9, 0xf4, 0xed, 0x37, 0xbf, 0x87, 0x0b, 0x6e, 0x21, 0xe2, 0x7e, 0xd7, 0xd1, 0xf2, 0x1a, + 0xfb, 0x7b, 0xa3, 0xca, 0x0b, 0xf6, 0x77, 0x1b, 0xb2, 0x35, 0xf6, 0x77, 0x1b, 0x8e, 0xbe, 0x44, + 0x0a, 0x10, 0x4c, 0x05, 0x52, 0x29, 0x41, 0x3c, 0x35, 0x88, 0xa7, 0x08, 0xd9, 0x54, 0x61, 0x27, + 0x8c, 0xd7, 0x5e, 0x0b, 0x32, 0xf3, 0x8a, 0x72, 0x5e, 0x4e, 0x2e, 0x9a, 0x76, 0x0c, 0xa4, 0x1f, + 0xe9, 0x34, 0x64, 0x2c, 0x1d, 0x19, 0x4b, 0x4b, 0x66, 0xd2, 0x93, 0x8c, 0x42, 0x47, 0x4d, 0x28, + 0x9f, 0x60, 0xa8, 0x09, 0x65, 0x25, 0x4c, 0x6a, 0x42, 0xd5, 0x83, 0x96, 0x9a, 0x50, 0xc9, 0x10, + 0xa0, 0x26, 0x64, 0xcd, 0xdd, 0x20, 0x37, 0x2a, 0xad, 0x95, 0xdb, 0x66, 0x5e, 0xd6, 0x48, 0x6f, + 0x8d, 0xbc, 0xaf, 0x9d, 0x37, 0xb5, 0x43, 0x43, 0xa0, 0x21, 0xd0, 0x10, 0x68, 0x08, 0x34, 0x04, + 0x1a, 0x02, 0x0d, 0x81, 0x86, 0x40, 0x43, 0xa0, 0x21, 0xad, 0xa7, 0x21, 0x38, 0xad, 0xb4, 0x7b, + 0x73, 0xe6, 0x2f, 0xaf, 0xe7, 0x21, 0xca, 0x82, 0xb8, 0x8f, 0x87, 0x28, 0xad, 0xa5, 0x8c, 0x14, + 0xce, 0x9b, 0xa1, 0x84, 0x14, 0xce, 0x35, 0x1c, 0x07, 0x0a, 0xe7, 0x28, 0x56, 0x28, 0x56, 0x28, + 0x56, 0x28, 0x56, 0x28, 0x56, 0x28, 0x56, 0x28, 0x56, 0x28, 0x56, 0x28, 0x56, 0xe2, 0x8a, 0x15, + 0xf5, 0x61, 0xd0, 0x36, 0x68, 0x1b, 0xb4, 0x0d, 0xda, 0x06, 0x6d, 0x83, 0xb6, 0x41, 0xdb, 0xa0, + 0x6d, 0xd0, 0x36, 0x68, 0xdb, 0x7e, 0xb4, 0x4d, 0x19, 0x54, 0xa8, 0x0c, 0x4a, 0xc7, 0x09, 0xa9, + 0x6d, 0x6d, 0x62, 0x3b, 0x9b, 0x6e, 0x39, 0x31, 0x47, 0x53, 0x4d, 0xf5, 0x9c, 0xd8, 0x31, 0x18, + 0x35, 0xba, 0xa2, 0x45, 0x3a, 0x4a, 0x3a, 0x75, 0x1a, 0x71, 0x94, 0x8b, 0x84, 0x6a, 0xfb, 0x5e, + 0x7e, 0xd7, 0x2a, 0xec, 0x58, 0x4d, 0x6f, 0x84, 0x16, 0x2f, 0x44, 0x4d, 0xef, 0x43, 0x6d, 0xaf, + 0x83, 0x0e, 0xd9, 0x43, 0xa3, 0xbc, 0xa1, 0x4b, 0xc6, 0xd0, 0x2e, 0x57, 0x68, 0x97, 0x25, 0xf4, + 0xca, 0x0f, 0x66, 0xb3, 0x5c, 0x5d, 0x6f, 0x41, 0x47, 0x97, 0xae, 0xa9, 0x59, 0x66, 0xd0, 0xa4, + 0x59, 0xd2, 0xb4, 0xc7, 0x32, 0x8d, 0x91, 0xa6, 0x3d, 0x4d, 0x68, 0x82, 0xcb, 0x88, 0x9b, 0x06, + 0x09, 0x1e, 0xd2, 0x10, 0x6f, 0x0f, 0x77, 0xe5, 0x89, 0x86, 0xb1, 0x16, 0x5f, 0x53, 0x8f, 0xc2, + 0x27, 0xe0, 0x0b, 0xd4, 0x2f, 0x9c, 0x0a, 0x08, 0xa6, 0x42, 0x42, 0xa9, 0x4c, 0x0b, 0x52, 0xb9, + 0xda, 0x88, 0xb0, 0x20, 0x6a, 0x4c, 0x02, 0x93, 0x97, 0xbe, 0xbe, 0xc9, 0xf4, 0x7e, 0x95, 0xdf, + 0x5a, 0x39, 0xa1, 0x73, 0x9b, 0x76, 0xd7, 0x52, 0xa1, 0xf0, 0xc6, 0x26, 0xa1, 0x50, 0xe0, 0xae, + 0xf8, 0xb7, 0x1f, 0xfc, 0x5b, 0xe6, 0xae, 0xd8, 0x3b, 0xd6, 0x38, 0xe6, 0xa5, 0x1b, 0xc7, 0x2a, + 0x0c, 0xb4, 0x5f, 0x17, 0x9d, 0x67, 0xfd, 0xde, 0xc9, 0x87, 0x5e, 0xb7, 0x7f, 0xf3, 0xb5, 0xdf, + 0xfb, 0xd0, 0xeb, 0x1e, 0xdf, 0x7c, 0xe8, 0x75, 0x4f, 0x6e, 0xbe, 0x7e, 0xd8, 0xeb, 0xee, 0xcf, + 0xff, 0xf7, 0xff, 0xf7, 0xbf, 0x25, 0x3f, 0x9d, 0x2c, 0x7e, 0xda, 0xfb, 0xf9, 0xc5, 0xe2, 0xe7, + 0xdd, 0xeb, 0xeb, 0xe7, 0xcf, 0x6a, 0xfc, 0xfa, 0xd7, 0xeb, 0xeb, 0xbf, 0xee, 0xea, 0xab, 0x1a, + 0xdf, 0xe8, 0x5c, 0xed, 0x8b, 0xab, 0xb3, 0xdf, 0xc5, 0x96, 0xfc, 0x5f, 0x0d, 0xaf, 0xf9, 0x5f, + 0x3a, 0xb6, 0x65, 0x87, 0x9d, 0x66, 0x3f, 0x47, 0x5d, 0xd8, 0xaf, 0xfe, 0x2f, 0x0e, 0xdd, 0xee, + 0x34, 0x88, 0x62, 0xf7, 0x8f, 0x91, 0x26, 0x02, 0x10, 0xc5, 0x6e, 0x3c, 0x8d, 0x6c, 0x46, 0xd9, + 0x9e, 0x9a, 0x84, 0x6a, 0xe0, 0xc6, 0xca, 0x6b, 0xd9, 0x03, 0x38, 0x8b, 0xa5, 0x6d, 0xf3, 0x03, + 0x38, 0xa9, 0xb5, 0xb7, 0xad, 0x24, 0xd8, 0xf4, 0x59, 0xa6, 0xda, 0xa1, 0xa9, 0xda, 0x51, 0xa3, + 0x90, 0x59, 0xa1, 0x04, 0xb1, 0x23, 0xb8, 0xe8, 0x75, 0x17, 0x5b, 0x6e, 0x91, 0x3b, 0x95, 0x2a, + 0x2f, 0x05, 0x8b, 0x48, 0xe5, 0xf6, 0xae, 0xf8, 0x0e, 0x14, 0xfb, 0x97, 0x05, 0xf7, 0x28, 0x49, + 0xcc, 0xc9, 0xf7, 0xf0, 0x03, 0x4f, 0x15, 0xd5, 0x2c, 0xab, 0xbd, 0x72, 0xa5, 0xfa, 0xab, 0x54, + 0xb4, 0xbe, 0x22, 0xa5, 0xc6, 0xab, 0x4f, 0x6a, 0xbc, 0xd2, 0xa4, 0xe8, 0x6e, 0x9c, 0x4e, 0x87, + 0xc9, 0xd7, 0x54, 0x5e, 0x29, 0xe4, 0x51, 0xee, 0x48, 0x2d, 0x11, 0xc4, 0x2f, 0xe3, 0x41, 0xd7, + 0xff, 0xf4, 0x32, 0x75, 0x40, 0x56, 0xfe, 0x60, 0xf1, 0x73, 0xf6, 0x10, 0xe5, 0xff, 0xac, 0xe4, + 0x29, 0xea, 0xfc, 0xaa, 0xa2, 0x41, 0xe8, 0x4f, 0x16, 0xf9, 0xa0, 0x73, 0x76, 0x79, 0xdf, 0x77, + 0x5c, 0xcf, 0x0b, 0x55, 0x14, 0x39, 0x9f, 0xdc, 0x3b, 0x7f, 0xf4, 0xc5, 0x99, 0x1f, 0xef, 0x69, + 0x38, 0x4b, 0x1a, 0xce, 0xa7, 0x71, 0x78, 0x1d, 0x7c, 0xff, 0x08, 0x65, 0xe7, 0xab, 0x56, 0xa7, + 0xac, 0x5c, 0x0a, 0xa9, 0x53, 0xfa, 0x48, 0x97, 0x3a, 0xfc, 0x49, 0x95, 0xf4, 0x54, 0x13, 0xc0, + 0x69, 0x2b, 0x64, 0x68, 0x03, 0x64, 0xab, 0x85, 0x0a, 0x7f, 0xd2, 0xb1, 0xec, 0x7a, 0xab, 0x5a, + 0x53, 0xec, 0xf8, 0x93, 0xfb, 0x7e, 0xfd, 0x1a, 0xfe, 0x6c, 0x94, 0xaa, 0xe5, 0xd0, 0xec, 0x51, + 0xbc, 0x74, 0x43, 0xf7, 0x4e, 0xc5, 0x2a, 0x8c, 0x92, 0x33, 0xe7, 0xc4, 0xb7, 0xca, 0x79, 0xe4, + 0x74, 0x3e, 0x6f, 0xda, 0x30, 0xd0, 0xb3, 0xc3, 0x30, 0x50, 0xe9, 0x80, 0xea, 0x66, 0x5a, 0xed, + 0xb3, 0x0b, 0x54, 0x39, 0xc0, 0x35, 0x49, 0x82, 0x74, 0xc2, 0xd8, 0x11, 0x48, 0x2d, 0xad, 0xbf, + 0xd4, 0x0f, 0xb9, 0xd4, 0xb9, 0xd4, 0x9f, 0xe4, 0xa5, 0x7e, 0xa8, 0xe5, 0x52, 0x3f, 0x14, 0xbd, + 0xd4, 0x0f, 0xb9, 0xd4, 0xb9, 0xd4, 0xb9, 0xd4, 0xb9, 0xd4, 0x4b, 0x64, 0x92, 0x53, 0xcf, 0x8b, + 0x9c, 0xf7, 0xe7, 0xa7, 0xff, 0x70, 0x22, 0x15, 0xc7, 0x7e, 0x30, 0x8c, 0x9c, 0x78, 0xec, 0xf8, + 0x81, 0xe7, 0xdf, 0xfb, 0xde, 0xd4, 0x1d, 0x39, 0x99, 0xf9, 0x9f, 0xc8, 0x8d, 0x5e, 0x55, 0x47, + 0xdc, 0xfa, 0x3b, 0xbd, 0x9a, 0xa3, 0xd0, 0xd2, 0x5b, 0x7d, 0xf6, 0x65, 0x6a, 0xdf, 0xea, 0x35, + 0xdc, 0xab, 0xab, 0x67, 0xf1, 0x75, 0x30, 0x18, 0x8d, 0x23, 0x3f, 0x18, 0x26, 0xb0, 0x3a, 0x76, + 0xfd, 0x40, 0x85, 0xb3, 0xeb, 0x7d, 0x76, 0x3c, 0x97, 0x87, 0xb0, 0x1b, 0x4d, 0xd4, 0xc0, 0xff, + 0xe4, 0x0f, 0xae, 0x03, 0xcf, 0x8d, 0x5d, 0x67, 0x1c, 0xd4, 0x3a, 0xa3, 0xdb, 0x7a, 0xe9, 0x63, + 0xfd, 0x37, 0x7a, 0xc6, 0xb7, 0xe6, 0xe2, 0x2f, 0xf4, 0x2f, 0x6f, 0x8a, 0x6a, 0xff, 0xd5, 0xaa, + 0x64, 0x22, 0xd5, 0xb1, 0x12, 0x71, 0x57, 0xa8, 0x20, 0x56, 0x2c, 0x46, 0x7e, 0xbc, 0x9e, 0x9b, + 0xff, 0xc5, 0x0f, 0x6e, 0x83, 0xb2, 0x2b, 0xac, 0x6b, 0x65, 0x37, 0x7f, 0xf9, 0xf5, 0x5f, 0xe9, + 0xf1, 0xbf, 0x59, 0xf3, 0x25, 0x1f, 0x0a, 0x79, 0xb3, 0x7d, 0x58, 0xf3, 0x4f, 0x0a, 0xd5, 0xed, + 0x8a, 0xd7, 0xe9, 0x6a, 0xd5, 0xe5, 0x4a, 0xd4, 0xe1, 0x4a, 0xd4, 0xdd, 0xd6, 0x2d, 0x4e, 0xb1, + 0xba, 0xda, 0xe6, 0x90, 0x28, 0x8e, 0xc6, 0x7f, 0x70, 0x7a, 0x1e, 0x85, 0xd5, 0x59, 0x71, 0xcc, + 0x0d, 0x3c, 0x67, 0x66, 0x00, 0x98, 0xdd, 0xe9, 0xe1, 0x78, 0x1a, 0x2b, 0x6f, 0xe5, 0x6a, 0xff, + 0xd1, 0xdd, 0x5d, 0xf0, 0x8e, 0x2e, 0x7c, 0x17, 0x97, 0xb9, 0x73, 0x2b, 0xdc, 0xad, 0x65, 0xef, + 0xd0, 0xca, 0x77, 0x65, 0xe5, 0x3b, 0xb1, 0xda, 0xdd, 0x57, 0x2f, 0x63, 0x15, 0xc5, 0xab, 0x9d, + 0x79, 0x88, 0x74, 0x4b, 0xc1, 0xd4, 0xe5, 0x2e, 0xa5, 0x7f, 0xb9, 0xe0, 0x5a, 0xac, 0x84, 0xf0, + 0xdb, 0xf1, 0xa4, 0x3b, 0x52, 0xf7, 0x6a, 0xb4, 0x82, 0x46, 0x17, 0x91, 0x9b, 0x8c, 0x9c, 0x8a, + 0xdc, 0xe7, 0x8e, 0xf3, 0xf6, 0x56, 0x45, 0xea, 0x3a, 0x18, 0x8d, 0x87, 0xfe, 0xc0, 0x1d, 0xa5, + 0xfe, 0xce, 0x71, 0x43, 0xe5, 0xb8, 0xa3, 0x68, 0xec, 0xfc, 0x19, 0x8c, 0x3f, 0x07, 0x8e, 0x1b, + 0x39, 0x57, 0xef, 0xcf, 0x9c, 0x67, 0xd1, 0x67, 0x3f, 0x1e, 0xdc, 0x26, 0x63, 0xf9, 0x61, 0x3c, + 0x75, 0x47, 0x29, 0xed, 0x78, 0xf7, 0x67, 0xe7, 0xec, 0xb7, 0x57, 0xce, 0xb3, 0xe4, 0x0f, 0x86, + 0xa1, 0x9b, 0x4c, 0x98, 0xcc, 0x9b, 0x60, 0xe3, 0xe4, 0x1c, 0xfd, 0x11, 0xfa, 0xde, 0xd0, 0x0f, + 0x86, 0xbb, 0x3f, 0x3b, 0xbf, 0xbd, 0x3f, 0xbb, 0x0e, 0x9e, 0x3d, 0x7a, 0x9c, 0x76, 0x8b, 0x7e, + 0xf3, 0x72, 0xd0, 0xb7, 0x34, 0xd4, 0xad, 0x02, 0x6d, 0x6b, 0x40, 0xd9, 0xaa, 0xd0, 0xb5, 0x36, + 0x54, 0xad, 0x0d, 0x4d, 0xeb, 0x41, 0x51, 0xbd, 0x26, 0x9a, 0x1a, 0x0e, 0xd4, 0xce, 0xe7, 0x5b, + 0x55, 0xde, 0xe4, 0x5c, 0x43, 0xb2, 0x18, 0x4c, 0xc3, 0x50, 0x05, 0xf1, 0xb3, 0xdd, 0xc5, 0xad, + 0x35, 0xbf, 0x78, 0x16, 0x3f, 0xc4, 0x5f, 0x26, 0xca, 0xf9, 0x2f, 0xe7, 0x27, 0xdf, 0x0d, 0x5c, + 0xff, 0x53, 0xfc, 0x72, 0xb4, 0xef, 0x4f, 0x92, 0x85, 0xfd, 0xa9, 0x61, 0x85, 0x63, 0xb6, 0x48, + 0x36, 0xe9, 0x1b, 0x15, 0x57, 0xd1, 0x48, 0x6f, 0x80, 0x6c, 0x6e, 0xae, 0x29, 0x59, 0x9c, 0x0e, + 0x62, 0xff, 0x5e, 0x39, 0xc9, 0x06, 0xcc, 0x4a, 0x07, 0xcb, 0x84, 0xe9, 0xf8, 0x91, 0xe3, 0x3a, + 0xb9, 0x04, 0xee, 0x4c, 0xc2, 0xf1, 0xbd, 0xef, 0xf9, 0xc1, 0xf0, 0x3a, 0x38, 0xdf, 0x5f, 0x26, + 0xe2, 0x07, 0x69, 0xa2, 0xb2, 0xe2, 0xa0, 0x81, 0x62, 0xa7, 0x03, 0xca, 0x4b, 0xad, 0x51, 0x0d, + 0xe2, 0xaf, 0x93, 0x5f, 0x67, 0xe2, 0x4b, 0xfb, 0xb2, 0xb7, 0x9c, 0x6a, 0xdf, 0x98, 0x21, 0x90, + 0x3b, 0x15, 0xce, 0x61, 0x93, 0xac, 0xc1, 0xf5, 0xbc, 0xe4, 0x67, 0x77, 0xe4, 0xbc, 0x8e, 0x6f, + 0x55, 0x18, 0xa8, 0x78, 0xa9, 0xf8, 0xad, 0x30, 0x8a, 0x78, 0x9c, 0xae, 0xb6, 0x3b, 0x77, 0x63, + 0x4f, 0x8d, 0x5a, 0xc2, 0x20, 0x54, 0x7c, 0xbb, 0x95, 0x04, 0x22, 0xf9, 0x5e, 0xb6, 0xf0, 0x07, + 0xb5, 0x08, 0x9f, 0xf2, 0xe4, 0x61, 0xf9, 0x9b, 0x7a, 0x99, 0xc3, 0xc3, 0xb0, 0xd9, 0x30, 0xbe, + 0x0e, 0x96, 0xcc, 0x78, 0x4b, 0xf0, 0x7a, 0xb1, 0xe0, 0xde, 0x3e, 0xb8, 0x5e, 0x28, 0xf8, 0x41, + 0xeb, 0x05, 0xd0, 0xe5, 0xc3, 0x49, 0xf9, 0x5b, 0x74, 0xe7, 0x0e, 0xbc, 0x9f, 0x9c, 0x71, 0xe8, + 0x14, 0xf8, 0x2d, 0x5f, 0x29, 0x75, 0xdc, 0x7b, 0xb1, 0xef, 0x7a, 0xe7, 0xee, 0x10, 0x78, 0xff, + 0x88, 0xa3, 0xc1, 0xc4, 0xb2, 0xb7, 0x90, 0x0f, 0x78, 0x9e, 0xbf, 0x80, 0x1c, 0xdf, 0xc1, 0x67, + 0x16, 0x6a, 0x4c, 0xbe, 0x1b, 0x8e, 0x92, 0x8d, 0xbd, 0x0e, 0xb2, 0x00, 0x76, 0xb6, 0x24, 0x7e, + 0xb4, 0x44, 0x2c, 0x3f, 0x3b, 0x0b, 0x57, 0x52, 0x16, 0xe3, 0x06, 0x8e, 0x3b, 0x1c, 0x86, 0x6a, + 0xe8, 0xc6, 0x2a, 0x85, 0x5c, 0x9e, 0xc3, 0x1f, 0x8a, 0xf1, 0x87, 0xa6, 0xb7, 0x09, 0xbe, 0xb1, + 0x8d, 0x7c, 0xe3, 0xfc, 0xf4, 0xef, 0x39, 0x5e, 0xb1, 0x12, 0x14, 0x77, 0x63, 0x6f, 0x3a, 0x52, + 0x2d, 0xa1, 0x16, 0x23, 0x77, 0xb8, 0x95, 0xd4, 0x22, 0xf9, 0x5e, 0xb6, 0x50, 0x8b, 0x87, 0xfc, + 0x50, 0xe6, 0xfa, 0x59, 0xee, 0x51, 0xfa, 0x97, 0xab, 0x11, 0x8c, 0x8b, 0xd9, 0xff, 0xcd, 0xbd, + 0xaf, 0x8f, 0x94, 0x1b, 0x42, 0x35, 0x09, 0x55, 0xa4, 0x82, 0x78, 0x26, 0x9d, 0x2c, 0x73, 0x59, + 0xb4, 0x25, 0xf4, 0xa2, 0x58, 0x80, 0x6f, 0x1f, 0xbd, 0x28, 0x74, 0x00, 0xa0, 0x17, 0x10, 0x05, + 0x79, 0xa2, 0xd0, 0x7a, 0xc8, 0xef, 0x6e, 0xd2, 0xa2, 0x23, 0x15, 0xcf, 0x30, 0x40, 0xf2, 0xa5, + 0xcf, 0x4f, 0xff, 0x0e, 0x3c, 0x2f, 0x14, 0x36, 0xa5, 0x96, 0x14, 0x28, 0x5d, 0x0f, 0x4a, 0x3f, + 0xfa, 0x37, 0x37, 0xeb, 0x9c, 0x42, 0xc5, 0x3c, 0x62, 0xd5, 0xbd, 0x61, 0x1b, 0xe2, 0x71, 0x9d, + 0x95, 0xee, 0xf1, 0x08, 0xc8, 0x7f, 0xaf, 0xec, 0x9f, 0xac, 0xe4, 0x8d, 0x1f, 0x7d, 0xb3, 0xb2, + 0xdf, 0x28, 0xfb, 0xa1, 0xbe, 0x4f, 0x3d, 0xff, 0xbf, 0xc5, 0xe4, 0xeb, 0x26, 0xed, 0xf8, 0xd1, + 0xdf, 0xc6, 0x77, 0x09, 0xf2, 0x8a, 0x94, 0x77, 0x35, 0x9b, 0x38, 0x77, 0xc0, 0x3a, 0x7e, 0xf4, + 0xdf, 0xee, 0x9f, 0xea, 0xb7, 0xf1, 0x38, 0x7f, 0xf8, 0x56, 0x3f, 0x6c, 0x27, 0xfd, 0x57, 0x99, + 0x45, 0xfc, 0x55, 0xdd, 0xfb, 0x0f, 0x2b, 0xf8, 0x6d, 0xe7, 0xdb, 0x7f, 0x00, 0x00, 0x00, 0xff, + 0xff, 0x01, 0x00, 0x00, 0xff, 0xff, 0x24, 0x9c, 0xc9, 0xb3, 0x5e, 0x2d, 0x21, 0x00, + } +) diff --git a/internal/provider/openconfig/structs.go b/internal/provider/openconfig/structs.go new file mode 100644 index 00000000..3e3b21e1 --- /dev/null +++ b/internal/provider/openconfig/structs.go @@ -0,0 +1,14325 @@ +// SPDX-FileCopyrightText: 2025 SAP SE or an SAP affiliate company and IronCore contributors +// SPDX-License-Identifier: Apache-2.0 + +/* +Package openconfig is a generated package which contains definitions +of structs which represent a YANG schema. The generated schema can be +compressed by a series of transformations (compression was true +in this case). + +This package was generated by ygnmi version: v0.12.0: (ygot: v0.29.20) +using the following YANG input files: + - ./yang/release/models/interfaces/openconfig-interfaces.yang + - ./yang/release/models/interfaces/openconfig-if-ip.yang + - ./yang/third_party/ietf/iana-if-type.yang + +Imported modules were sourced from: + - ./yang/doc + - ./yang/regexp-tests + - ./yang/release/models + - ./yang/release/models/acl + - ./yang/release/models/aft + - ./yang/release/models/ate + - ./yang/release/models/bfd + - ./yang/release/models/bgp + - ./yang/release/models/catalog + - ./yang/release/models/defined-sets + - ./yang/release/models/devices-manifest + - ./yang/release/models/ethernet-segments + - ./yang/release/models/extensions + - ./yang/release/models/firewall + - ./yang/release/models/flex-algo + - ./yang/release/models/gnpsi + - ./yang/release/models/gnsi + - ./yang/release/models/gribi + - ./yang/release/models/grpc + - ./yang/release/models/interfaces + - ./yang/release/models/isis + - ./yang/release/models/keychain + - ./yang/release/models/lacp + - ./yang/release/models/lldp + - ./yang/release/models/local-routing + - ./yang/release/models/macsec + - ./yang/release/models/mpls + - ./yang/release/models/multicast + - ./yang/release/models/network-instance + - ./yang/release/models/oam + - ./yang/release/models/openflow + - ./yang/release/models/optical-transport + - ./yang/release/models/ospf + - ./yang/release/models/p4rt + - ./yang/release/models/pcep + - ./yang/release/models/platform + - ./yang/release/models/policy + - ./yang/release/models/policy-forwarding + - ./yang/release/models/probes + - ./yang/release/models/ptp + - ./yang/release/models/qos + - ./yang/release/models/relay-agent + - ./yang/release/models/rib + - ./yang/release/models/sampling + - ./yang/release/models/segment-routing + - ./yang/release/models/stp + - ./yang/release/models/system + - ./yang/release/models/telemetry + - ./yang/release/models/types + - ./yang/release/models/vlan + - ./yang/release/models/wifi + - ./yang/third_party/ietf +*/ +package openconfig + +import ( + "encoding/json" + "fmt" + "reflect" + + "github.com/openconfig/goyang/pkg/yang" + "github.com/openconfig/ygot/ygot" + "github.com/openconfig/ygot/ytypes" +) + +// Binary is a type that is used for fields that have a YANG type of +// binary. It is used such that binary fields can be distinguished from +// leaf-lists of uint8s (which are mapped to []uint8, equivalent to +// []byte in reflection). +type Binary []byte + +// YANGEmpty is a type that is used for fields that have a YANG type of +// empty. It is used such that empty fields can be distinguished from boolean fields +// in the generated code. +type YANGEmpty bool + +// UnionInt8 is an int8 type assignable to unions of which it is a subtype. +type UnionInt8 int8 + +// UnionInt16 is an int16 type assignable to unions of which it is a subtype. +type UnionInt16 int16 + +// UnionInt32 is an int32 type assignable to unions of which it is a subtype. +type UnionInt32 int32 + +// UnionInt64 is an int64 type assignable to unions of which it is a subtype. +type UnionInt64 int64 + +// UnionUint8 is a uint8 type assignable to unions of which it is a subtype. +type UnionUint8 uint8 + +// UnionUint16 is a uint16 type assignable to unions of which it is a subtype. +type UnionUint16 uint16 + +// UnionUint32 is a uint32 type assignable to unions of which it is a subtype. +type UnionUint32 uint32 + +// UnionUint64 is a uint64 type assignable to unions of which it is a subtype. +type UnionUint64 uint64 + +// UnionFloat64 is a float64 type assignable to unions of which it is a subtype. +type UnionFloat64 float64 + +// UnionString is a string type assignable to unions of which it is a subtype. +type UnionString string + +// UnionBool is a bool type assignable to unions of which it is a subtype. +type UnionBool bool + +// UnionUnsupported is an interface{} wrapper type for unsupported types. It is +// assignable to unions of which it is a subtype. +type UnionUnsupported struct { + Value interface{} +} + +var ( + SchemaTree map[string]*yang.Entry + ΛEnumTypes map[string][]reflect.Type +) + +func init() { + var err error + initΛEnumTypes() + if SchemaTree, err = UnzipSchema(); err != nil { + panic("schema error: " + err.Error()) + } +} + +// Schema returns the details of the generated schema. +func Schema() (*ytypes.Schema, error) { + uzp, err := UnzipSchema() + if err != nil { + return nil, fmt.Errorf("cannot unzip schema, %v", err) + } + + return &ytypes.Schema{ + Root: &Device{}, + SchemaTree: uzp, + Unmarshal: Unmarshal, + }, nil +} + +// UnzipSchema unzips the zipped schema and returns a map of yang.Entry nodes, +// keyed by the name of the struct that the yang.Entry describes the schema for. +func UnzipSchema() (map[string]*yang.Entry, error) { + var schemaTree map[string]*yang.Entry + var err error + if schemaTree, err = ygot.GzipToSchema(ySchema); err != nil { + return nil, fmt.Errorf("could not unzip the schema; %v", err) + } + return schemaTree, nil +} + +// Unmarshal unmarshals data, which must be RFC7951 JSON format, into +// destStruct, which must be non-nil and the correct GoStruct type. It returns +// an error if the destStruct is not found in the schema or the data cannot be +// unmarshaled. The supplied options (opts) are used to control the behaviour +// of the unmarshal function - for example, determining whether errors are +// thrown for unknown fields in the input JSON. +func Unmarshal(data []byte, destStruct ygot.GoStruct, opts ...ytypes.UnmarshalOpt) error { + tn := reflect.TypeOf(destStruct).Elem().Name() + schema, ok := SchemaTree[tn] + if !ok { + return fmt.Errorf("could not find schema for type %s", tn) + } + var jsonTree interface{} + if err := json.Unmarshal([]byte(data), &jsonTree); err != nil { + return err + } + return ytypes.Unmarshal(schema, destStruct, jsonTree, opts...) +} + +// Device represents the /device YANG schema element. +type Device struct { + Interface map[string]*Interface `path:"interfaces/interface" module:"openconfig-interfaces/openconfig-interfaces"` +} + +// IsYANGGoStruct ensures that Device implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*Device) IsYANGGoStruct() {} + +// NewInterface creates a new entry in the Interface list of the +// Device struct. The keys of the list are populated from the input +// arguments. +func (t *Device) NewInterface(Name string) (*Interface, error) { + + // Initialise the list within the receiver struct if it has not already been + // created. + if t.Interface == nil { + t.Interface = make(map[string]*Interface) + } + + key := Name + + // Ensure that this key has not already been used in the + // list. Keyed YANG lists do not allow duplicate keys to + // be created. + if _, ok := t.Interface[key]; ok { + return nil, fmt.Errorf("duplicate key %v for list Interface", key) + } + + t.Interface[key] = &Interface{ + Name: &Name, + } + + return t.Interface[key], nil +} + +// RenameInterface renames an entry in the list Interface within +// the Device struct. The entry with key oldK is renamed to newK updating +// the key within the value. +func (t *Device) RenameInterface(oldK, newK string) error { + if _, ok := t.Interface[newK]; ok { + return fmt.Errorf("key %v already exists in Interface", newK) + } + + e, ok := t.Interface[oldK] + if !ok { + return fmt.Errorf("key %v not found in Interface", oldK) + } + e.Name = &newK + + t.Interface[newK] = e + delete(t.Interface, oldK) + return nil +} + +// GetOrCreateInterfaceMap returns the list (map) from Device. +// +// It initializes the field if not already initialized. +func (t *Device) GetOrCreateInterfaceMap() map[string]*Interface { + if t.Interface == nil { + t.Interface = make(map[string]*Interface) + } + return t.Interface +} + +// GetOrCreateInterface retrieves the value with the specified keys from +// the receiver Device. If the entry does not exist, then it is created. +// It returns the existing or new list member. +func (t *Device) GetOrCreateInterface(Name string) *Interface { + + key := Name + + if v, ok := t.Interface[key]; ok { + return v + } + // Panic if we receive an error, since we should have retrieved an existing + // list member. This allows chaining of GetOrCreate methods. + v, err := t.NewInterface(Name) + if err != nil { + panic(fmt.Sprintf("GetOrCreateInterface got unexpected error: %v", err)) + } + return v +} + +// GetInterface retrieves the value with the specified key from +// the Interface map field of Device. If the receiver is nil, or +// the specified key is not present in the list, nil is returned such that Get* +// methods may be safely chained. +func (t *Device) GetInterface(Name string) *Interface { + + if t == nil { + return nil + } + + key := Name + + if lm, ok := t.Interface[key]; ok { + return lm + } + return nil +} + +// DeleteInterface deletes the value with the specified keys from +// the receiver Device. If there is no such element, the function +// is a no-op. +func (t *Device) DeleteInterface(Name string) { + key := Name + + delete(t.Interface, key) +} + +// AppendInterface appends the supplied Interface struct to the +// list Interface of Device. If the key value(s) specified in +// the supplied Interface already exist in the list, an error is +// returned. +func (t *Device) AppendInterface(v *Interface) error { + if v.Name == nil { + return fmt.Errorf("invalid nil key received for Name") + } + + key := *v.Name + + // Initialise the list within the receiver struct if it has not already been + // created. + if t.Interface == nil { + t.Interface = make(map[string]*Interface) + } + + if _, ok := t.Interface[key]; ok { + return fmt.Errorf("duplicate key for list Interface %v", key) + } + + t.Interface[key] = v + return nil +} + +// PopulateDefaults recursively populates unset leaf fields in the Device +// with default values as specified in the YANG schema, instantiating any nil +// container fields. +func (t *Device) PopulateDefaults() { + if t == nil { + return + } + ygot.BuildEmptyTree(t) + for _, e := range t.Interface { + e.PopulateDefaults() + } +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Device) ΛValidate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["Device"], t, opts...); err != nil { + return err + } + return nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Device) Validate(opts ...ygot.ValidationOption) error { + return t.ΛValidate(opts...) +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *Device) ΛEnumTypeMap() map[string][]reflect.Type { return ΛEnumTypes } + +// ΛBelongingModule returns the name of the module that defines the namespace +// of Device. +func (*Device) ΛBelongingModule() string { + return "" +} + +// Interface represents the /openconfig-interfaces/interfaces/interface YANG schema element. +type Interface struct { + AdminStatus E_Interface_AdminStatus `path:"state/admin-status" module:"openconfig-interfaces/openconfig-interfaces"` + Aggregation *Interface_Aggregation `path:"aggregation" module:"openconfig-if-aggregate"` + Counters *Interface_Counters `path:"state/counters" module:"openconfig-interfaces/openconfig-interfaces"` + Cpu *bool `path:"state/cpu" module:"openconfig-interfaces/openconfig-interfaces"` + Description *string `path:"config/description" module:"openconfig-interfaces/openconfig-interfaces" shadow-path:"state/description" shadow-module:"openconfig-interfaces/openconfig-interfaces"` + Enabled *bool `path:"config/enabled" module:"openconfig-interfaces/openconfig-interfaces" shadow-path:"state/enabled" shadow-module:"openconfig-interfaces/openconfig-interfaces"` + Ethernet *Interface_Ethernet `path:"ethernet" module:"openconfig-if-ethernet"` + HoldTime *Interface_HoldTime `path:"hold-time" module:"openconfig-interfaces"` + Ifindex *uint32 `path:"state/ifindex" module:"openconfig-interfaces/openconfig-interfaces"` + LastChange *uint64 `path:"state/last-change" module:"openconfig-interfaces/openconfig-interfaces"` + Logical *bool `path:"state/logical" module:"openconfig-interfaces/openconfig-interfaces"` + LoopbackMode E_TransportTypes_LoopbackModeType `path:"config/loopback-mode" module:"openconfig-interfaces/openconfig-interfaces" shadow-path:"state/loopback-mode" shadow-module:"openconfig-interfaces/openconfig-interfaces"` + Management *bool `path:"state/management" module:"openconfig-interfaces/openconfig-interfaces"` + Mtu *uint16 `path:"config/mtu" module:"openconfig-interfaces/openconfig-interfaces" shadow-path:"state/mtu" shadow-module:"openconfig-interfaces/openconfig-interfaces"` + Name *string `path:"config/name|name" module:"openconfig-interfaces/openconfig-interfaces|openconfig-interfaces" shadow-path:"state/name|name" shadow-module:"openconfig-interfaces/openconfig-interfaces|openconfig-interfaces"` + OperStatus E_Interface_OperStatus `path:"state/oper-status" module:"openconfig-interfaces/openconfig-interfaces"` + PenaltyBasedAied *Interface_PenaltyBasedAied `path:"penalty-based-aied" module:"openconfig-interfaces"` + RoutedVlan *Interface_RoutedVlan `path:"routed-vlan" module:"openconfig-vlan"` + Subinterface map[uint32]*Interface_Subinterface `path:"subinterfaces/subinterface" module:"openconfig-interfaces/openconfig-interfaces"` + Tpid E_VlanTypes_TPID_TYPES `path:"config/tpid" module:"openconfig-interfaces/openconfig-vlan" shadow-path:"state/tpid" shadow-module:"openconfig-interfaces/openconfig-vlan"` + Type E_IETFInterfaces_InterfaceType `path:"config/type" module:"openconfig-interfaces/openconfig-interfaces" shadow-path:"state/type" shadow-module:"openconfig-interfaces/openconfig-interfaces"` +} + +// IsYANGGoStruct ensures that Interface implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*Interface) IsYANGGoStruct() {} + +// NewSubinterface creates a new entry in the Subinterface list of the +// Interface struct. The keys of the list are populated from the input +// arguments. +func (t *Interface) NewSubinterface(Index uint32) (*Interface_Subinterface, error) { + + // Initialise the list within the receiver struct if it has not already been + // created. + if t.Subinterface == nil { + t.Subinterface = make(map[uint32]*Interface_Subinterface) + } + + key := Index + + // Ensure that this key has not already been used in the + // list. Keyed YANG lists do not allow duplicate keys to + // be created. + if _, ok := t.Subinterface[key]; ok { + return nil, fmt.Errorf("duplicate key %v for list Subinterface", key) + } + + t.Subinterface[key] = &Interface_Subinterface{ + Index: &Index, + } + + return t.Subinterface[key], nil +} + +// RenameSubinterface renames an entry in the list Subinterface within +// the Interface struct. The entry with key oldK is renamed to newK updating +// the key within the value. +func (t *Interface) RenameSubinterface(oldK, newK uint32) error { + if _, ok := t.Subinterface[newK]; ok { + return fmt.Errorf("key %v already exists in Subinterface", newK) + } + + e, ok := t.Subinterface[oldK] + if !ok { + return fmt.Errorf("key %v not found in Subinterface", oldK) + } + e.Index = &newK + + t.Subinterface[newK] = e + delete(t.Subinterface, oldK) + return nil +} + +// GetOrCreateSubinterfaceMap returns the list (map) from Interface. +// +// It initializes the field if not already initialized. +func (t *Interface) GetOrCreateSubinterfaceMap() map[uint32]*Interface_Subinterface { + if t.Subinterface == nil { + t.Subinterface = make(map[uint32]*Interface_Subinterface) + } + return t.Subinterface +} + +// GetOrCreateSubinterface retrieves the value with the specified keys from +// the receiver Interface. If the entry does not exist, then it is created. +// It returns the existing or new list member. +func (t *Interface) GetOrCreateSubinterface(Index uint32) *Interface_Subinterface { + + key := Index + + if v, ok := t.Subinterface[key]; ok { + return v + } + // Panic if we receive an error, since we should have retrieved an existing + // list member. This allows chaining of GetOrCreate methods. + v, err := t.NewSubinterface(Index) + if err != nil { + panic(fmt.Sprintf("GetOrCreateSubinterface got unexpected error: %v", err)) + } + return v +} + +// GetSubinterface retrieves the value with the specified key from +// the Subinterface map field of Interface. If the receiver is nil, or +// the specified key is not present in the list, nil is returned such that Get* +// methods may be safely chained. +func (t *Interface) GetSubinterface(Index uint32) *Interface_Subinterface { + + if t == nil { + return nil + } + + key := Index + + if lm, ok := t.Subinterface[key]; ok { + return lm + } + return nil +} + +// DeleteSubinterface deletes the value with the specified keys from +// the receiver Interface. If there is no such element, the function +// is a no-op. +func (t *Interface) DeleteSubinterface(Index uint32) { + key := Index + + delete(t.Subinterface, key) +} + +// AppendSubinterface appends the supplied Interface_Subinterface struct to the +// list Subinterface of Interface. If the key value(s) specified in +// the supplied Interface_Subinterface already exist in the list, an error is +// returned. +func (t *Interface) AppendSubinterface(v *Interface_Subinterface) error { + if v.Index == nil { + return fmt.Errorf("invalid nil key received for Index") + } + + key := *v.Index + + // Initialise the list within the receiver struct if it has not already been + // created. + if t.Subinterface == nil { + t.Subinterface = make(map[uint32]*Interface_Subinterface) + } + + if _, ok := t.Subinterface[key]; ok { + return fmt.Errorf("duplicate key for list Subinterface %v", key) + } + + t.Subinterface[key] = v + return nil +} + +// GetOrCreateAggregation retrieves the value of the Aggregation field +// or returns the existing field if it already exists. +func (t *Interface) GetOrCreateAggregation() *Interface_Aggregation { + if t.Aggregation != nil { + return t.Aggregation + } + t.Aggregation = &Interface_Aggregation{} + return t.Aggregation +} + +// GetOrCreateCounters retrieves the value of the Counters field +// or returns the existing field if it already exists. +func (t *Interface) GetOrCreateCounters() *Interface_Counters { + if t.Counters != nil { + return t.Counters + } + t.Counters = &Interface_Counters{} + return t.Counters +} + +// GetOrCreateEthernet retrieves the value of the Ethernet field +// or returns the existing field if it already exists. +func (t *Interface) GetOrCreateEthernet() *Interface_Ethernet { + if t.Ethernet != nil { + return t.Ethernet + } + t.Ethernet = &Interface_Ethernet{} + return t.Ethernet +} + +// GetOrCreateHoldTime retrieves the value of the HoldTime field +// or returns the existing field if it already exists. +func (t *Interface) GetOrCreateHoldTime() *Interface_HoldTime { + if t.HoldTime != nil { + return t.HoldTime + } + t.HoldTime = &Interface_HoldTime{} + return t.HoldTime +} + +// GetOrCreatePenaltyBasedAied retrieves the value of the PenaltyBasedAied field +// or returns the existing field if it already exists. +func (t *Interface) GetOrCreatePenaltyBasedAied() *Interface_PenaltyBasedAied { + if t.PenaltyBasedAied != nil { + return t.PenaltyBasedAied + } + t.PenaltyBasedAied = &Interface_PenaltyBasedAied{} + return t.PenaltyBasedAied +} + +// GetOrCreateRoutedVlan retrieves the value of the RoutedVlan field +// or returns the existing field if it already exists. +func (t *Interface) GetOrCreateRoutedVlan() *Interface_RoutedVlan { + if t.RoutedVlan != nil { + return t.RoutedVlan + } + t.RoutedVlan = &Interface_RoutedVlan{} + return t.RoutedVlan +} + +// GetAggregation returns the value of the Aggregation struct pointer +// from Interface. If the receiver or the field Aggregation is nil, nil +// is returned such that the Get* methods can be safely chained. +func (t *Interface) GetAggregation() *Interface_Aggregation { + if t != nil && t.Aggregation != nil { + return t.Aggregation + } + return nil +} + +// GetCounters returns the value of the Counters struct pointer +// from Interface. If the receiver or the field Counters is nil, nil +// is returned such that the Get* methods can be safely chained. +func (t *Interface) GetCounters() *Interface_Counters { + if t != nil && t.Counters != nil { + return t.Counters + } + return nil +} + +// GetEthernet returns the value of the Ethernet struct pointer +// from Interface. If the receiver or the field Ethernet is nil, nil +// is returned such that the Get* methods can be safely chained. +func (t *Interface) GetEthernet() *Interface_Ethernet { + if t != nil && t.Ethernet != nil { + return t.Ethernet + } + return nil +} + +// GetHoldTime returns the value of the HoldTime struct pointer +// from Interface. If the receiver or the field HoldTime is nil, nil +// is returned such that the Get* methods can be safely chained. +func (t *Interface) GetHoldTime() *Interface_HoldTime { + if t != nil && t.HoldTime != nil { + return t.HoldTime + } + return nil +} + +// GetPenaltyBasedAied returns the value of the PenaltyBasedAied struct pointer +// from Interface. If the receiver or the field PenaltyBasedAied is nil, nil +// is returned such that the Get* methods can be safely chained. +func (t *Interface) GetPenaltyBasedAied() *Interface_PenaltyBasedAied { + if t != nil && t.PenaltyBasedAied != nil { + return t.PenaltyBasedAied + } + return nil +} + +// GetRoutedVlan returns the value of the RoutedVlan struct pointer +// from Interface. If the receiver or the field RoutedVlan is nil, nil +// is returned such that the Get* methods can be safely chained. +func (t *Interface) GetRoutedVlan() *Interface_RoutedVlan { + if t != nil && t.RoutedVlan != nil { + return t.RoutedVlan + } + return nil +} + +// GetAdminStatus retrieves the value of the leaf AdminStatus from the Interface +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if AdminStatus is set, it can +// safely use t.GetAdminStatus() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.AdminStatus == nil' before retrieving the leaf's value. +func (t *Interface) GetAdminStatus() E_Interface_AdminStatus { + if t == nil || t.AdminStatus == 0 { + return 0 + } + return t.AdminStatus +} + +// GetCpu retrieves the value of the leaf Cpu from the Interface +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Cpu is set, it can +// safely use t.GetCpu() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Cpu == nil' before retrieving the leaf's value. +func (t *Interface) GetCpu() bool { + if t == nil || t.Cpu == nil { + return false + } + return *t.Cpu +} + +// GetDescription retrieves the value of the leaf Description from the Interface +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Description is set, it can +// safely use t.GetDescription() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Description == nil' before retrieving the leaf's value. +func (t *Interface) GetDescription() string { + if t == nil || t.Description == nil { + return "" + } + return *t.Description +} + +// GetEnabled retrieves the value of the leaf Enabled from the Interface +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Enabled is set, it can +// safely use t.GetEnabled() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Enabled == nil' before retrieving the leaf's value. +func (t *Interface) GetEnabled() bool { + if t == nil || t.Enabled == nil { + return true + } + return *t.Enabled +} + +// GetIfindex retrieves the value of the leaf Ifindex from the Interface +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Ifindex is set, it can +// safely use t.GetIfindex() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Ifindex == nil' before retrieving the leaf's value. +func (t *Interface) GetIfindex() uint32 { + if t == nil || t.Ifindex == nil { + return 0 + } + return *t.Ifindex +} + +// GetLastChange retrieves the value of the leaf LastChange from the Interface +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if LastChange is set, it can +// safely use t.GetLastChange() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.LastChange == nil' before retrieving the leaf's value. +func (t *Interface) GetLastChange() uint64 { + if t == nil || t.LastChange == nil { + return 0 + } + return *t.LastChange +} + +// GetLogical retrieves the value of the leaf Logical from the Interface +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Logical is set, it can +// safely use t.GetLogical() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Logical == nil' before retrieving the leaf's value. +func (t *Interface) GetLogical() bool { + if t == nil || t.Logical == nil { + return false + } + return *t.Logical +} + +// GetLoopbackMode retrieves the value of the leaf LoopbackMode from the Interface +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if LoopbackMode is set, it can +// safely use t.GetLoopbackMode() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.LoopbackMode == nil' before retrieving the leaf's value. +func (t *Interface) GetLoopbackMode() E_TransportTypes_LoopbackModeType { + if t == nil || t.LoopbackMode == 0 { + return TransportTypes_LoopbackModeType_NONE + } + return t.LoopbackMode +} + +// GetManagement retrieves the value of the leaf Management from the Interface +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Management is set, it can +// safely use t.GetManagement() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Management == nil' before retrieving the leaf's value. +func (t *Interface) GetManagement() bool { + if t == nil || t.Management == nil { + return false + } + return *t.Management +} + +// GetMtu retrieves the value of the leaf Mtu from the Interface +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Mtu is set, it can +// safely use t.GetMtu() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Mtu == nil' before retrieving the leaf's value. +func (t *Interface) GetMtu() uint16 { + if t == nil || t.Mtu == nil { + return 0 + } + return *t.Mtu +} + +// GetName retrieves the value of the leaf Name from the Interface +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Name is set, it can +// safely use t.GetName() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Name == nil' before retrieving the leaf's value. +func (t *Interface) GetName() string { + if t == nil || t.Name == nil { + return "" + } + return *t.Name +} + +// GetOperStatus retrieves the value of the leaf OperStatus from the Interface +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if OperStatus is set, it can +// safely use t.GetOperStatus() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.OperStatus == nil' before retrieving the leaf's value. +func (t *Interface) GetOperStatus() E_Interface_OperStatus { + if t == nil || t.OperStatus == 0 { + return 0 + } + return t.OperStatus +} + +// GetTpid retrieves the value of the leaf Tpid from the Interface +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Tpid is set, it can +// safely use t.GetTpid() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Tpid == nil' before retrieving the leaf's value. +func (t *Interface) GetTpid() E_VlanTypes_TPID_TYPES { + if t == nil || t.Tpid == 0 { + return VlanTypes_TPID_TYPES_TPID_0X8100 + } + return t.Tpid +} + +// GetType retrieves the value of the leaf Type from the Interface +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Type is set, it can +// safely use t.GetType() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Type == nil' before retrieving the leaf's value. +func (t *Interface) GetType() E_IETFInterfaces_InterfaceType { + if t == nil || t.Type == 0 { + return 0 + } + return t.Type +} + +// SetAdminStatus sets the value of the leaf AdminStatus in the Interface +// struct. +func (t *Interface) SetAdminStatus(v E_Interface_AdminStatus) { + t.AdminStatus = v +} + +// SetCpu sets the value of the leaf Cpu in the Interface +// struct. +func (t *Interface) SetCpu(v bool) { + t.Cpu = &v +} + +// SetDescription sets the value of the leaf Description in the Interface +// struct. +func (t *Interface) SetDescription(v string) { + t.Description = &v +} + +// SetEnabled sets the value of the leaf Enabled in the Interface +// struct. +func (t *Interface) SetEnabled(v bool) { + t.Enabled = &v +} + +// SetIfindex sets the value of the leaf Ifindex in the Interface +// struct. +func (t *Interface) SetIfindex(v uint32) { + t.Ifindex = &v +} + +// SetLastChange sets the value of the leaf LastChange in the Interface +// struct. +func (t *Interface) SetLastChange(v uint64) { + t.LastChange = &v +} + +// SetLogical sets the value of the leaf Logical in the Interface +// struct. +func (t *Interface) SetLogical(v bool) { + t.Logical = &v +} + +// SetLoopbackMode sets the value of the leaf LoopbackMode in the Interface +// struct. +func (t *Interface) SetLoopbackMode(v E_TransportTypes_LoopbackModeType) { + t.LoopbackMode = v +} + +// SetManagement sets the value of the leaf Management in the Interface +// struct. +func (t *Interface) SetManagement(v bool) { + t.Management = &v +} + +// SetMtu sets the value of the leaf Mtu in the Interface +// struct. +func (t *Interface) SetMtu(v uint16) { + t.Mtu = &v +} + +// SetName sets the value of the leaf Name in the Interface +// struct. +func (t *Interface) SetName(v string) { + t.Name = &v +} + +// SetOperStatus sets the value of the leaf OperStatus in the Interface +// struct. +func (t *Interface) SetOperStatus(v E_Interface_OperStatus) { + t.OperStatus = v +} + +// SetTpid sets the value of the leaf Tpid in the Interface +// struct. +func (t *Interface) SetTpid(v E_VlanTypes_TPID_TYPES) { + t.Tpid = v +} + +// SetType sets the value of the leaf Type in the Interface +// struct. +func (t *Interface) SetType(v E_IETFInterfaces_InterfaceType) { + t.Type = v +} + +// PopulateDefaults recursively populates unset leaf fields in the Interface +// with default values as specified in the YANG schema, instantiating any nil +// container fields. +func (t *Interface) PopulateDefaults() { + if t == nil { + return + } + ygot.BuildEmptyTree(t) + if t.Enabled == nil { + var v bool = true + t.Enabled = &v + } + if t.LoopbackMode == 0 { + t.LoopbackMode = TransportTypes_LoopbackModeType_NONE + } + if t.Tpid == 0 { + t.Tpid = VlanTypes_TPID_TYPES_TPID_0X8100 + } + t.Aggregation.PopulateDefaults() + t.Counters.PopulateDefaults() + t.Ethernet.PopulateDefaults() + t.HoldTime.PopulateDefaults() + t.PenaltyBasedAied.PopulateDefaults() + t.RoutedVlan.PopulateDefaults() + for _, e := range t.Subinterface { + e.PopulateDefaults() + } +} + +// ΛListKeyMap returns the keys of the Interface struct, which is a YANG list entry. +func (t *Interface) ΛListKeyMap() (map[string]interface{}, error) { + if t.Name == nil { + return nil, fmt.Errorf("nil value for key Name") + } + + return map[string]interface{}{ + "name": *t.Name, + }, nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface) ΛValidate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["Interface"], t, opts...); err != nil { + return err + } + return nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface) Validate(opts ...ygot.ValidationOption) error { + return t.ΛValidate(opts...) +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *Interface) ΛEnumTypeMap() map[string][]reflect.Type { return ΛEnumTypes } + +// ΛBelongingModule returns the name of the module that defines the namespace +// of Interface. +func (*Interface) ΛBelongingModule() string { + return "openconfig-interfaces" +} + +// Interface_Aggregation represents the /openconfig-interfaces/interfaces/interface/aggregation YANG schema element. +type Interface_Aggregation struct { + LagSpeed *uint32 `path:"state/lag-speed" module:"openconfig-if-aggregate/openconfig-if-aggregate"` + LagType E_IfAggregate_AggregationType `path:"config/lag-type" module:"openconfig-if-aggregate/openconfig-if-aggregate" shadow-path:"state/lag-type" shadow-module:"openconfig-if-aggregate/openconfig-if-aggregate"` + Member []string `path:"state/member" module:"openconfig-if-aggregate/openconfig-if-aggregate"` + MinLinks *uint16 `path:"config/min-links" module:"openconfig-if-aggregate/openconfig-if-aggregate" shadow-path:"state/min-links" shadow-module:"openconfig-if-aggregate/openconfig-if-aggregate"` + SwitchedVlan *Interface_Aggregation_SwitchedVlan `path:"switched-vlan" module:"openconfig-vlan"` +} + +// IsYANGGoStruct ensures that Interface_Aggregation implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*Interface_Aggregation) IsYANGGoStruct() {} + +// GetOrCreateSwitchedVlan retrieves the value of the SwitchedVlan field +// or returns the existing field if it already exists. +func (t *Interface_Aggregation) GetOrCreateSwitchedVlan() *Interface_Aggregation_SwitchedVlan { + if t.SwitchedVlan != nil { + return t.SwitchedVlan + } + t.SwitchedVlan = &Interface_Aggregation_SwitchedVlan{} + return t.SwitchedVlan +} + +// GetSwitchedVlan returns the value of the SwitchedVlan struct pointer +// from Interface_Aggregation. If the receiver or the field SwitchedVlan is nil, nil +// is returned such that the Get* methods can be safely chained. +func (t *Interface_Aggregation) GetSwitchedVlan() *Interface_Aggregation_SwitchedVlan { + if t != nil && t.SwitchedVlan != nil { + return t.SwitchedVlan + } + return nil +} + +// GetLagSpeed retrieves the value of the leaf LagSpeed from the Interface_Aggregation +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if LagSpeed is set, it can +// safely use t.GetLagSpeed() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.LagSpeed == nil' before retrieving the leaf's value. +func (t *Interface_Aggregation) GetLagSpeed() uint32 { + if t == nil || t.LagSpeed == nil { + return 0 + } + return *t.LagSpeed +} + +// GetLagType retrieves the value of the leaf LagType from the Interface_Aggregation +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if LagType is set, it can +// safely use t.GetLagType() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.LagType == nil' before retrieving the leaf's value. +func (t *Interface_Aggregation) GetLagType() E_IfAggregate_AggregationType { + if t == nil || t.LagType == 0 { + return 0 + } + return t.LagType +} + +// GetMember retrieves the value of the leaf Member from the Interface_Aggregation +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Member is set, it can +// safely use t.GetMember() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Member == nil' before retrieving the leaf's value. +func (t *Interface_Aggregation) GetMember() []string { + if t == nil || t.Member == nil { + return nil + } + return t.Member +} + +// GetMinLinks retrieves the value of the leaf MinLinks from the Interface_Aggregation +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if MinLinks is set, it can +// safely use t.GetMinLinks() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.MinLinks == nil' before retrieving the leaf's value. +func (t *Interface_Aggregation) GetMinLinks() uint16 { + if t == nil || t.MinLinks == nil { + return 0 + } + return *t.MinLinks +} + +// SetLagSpeed sets the value of the leaf LagSpeed in the Interface_Aggregation +// struct. +func (t *Interface_Aggregation) SetLagSpeed(v uint32) { + t.LagSpeed = &v +} + +// SetLagType sets the value of the leaf LagType in the Interface_Aggregation +// struct. +func (t *Interface_Aggregation) SetLagType(v E_IfAggregate_AggregationType) { + t.LagType = v +} + +// SetMember sets the value of the leaf Member in the Interface_Aggregation +// struct. +func (t *Interface_Aggregation) SetMember(v []string) { + t.Member = v +} + +// SetMinLinks sets the value of the leaf MinLinks in the Interface_Aggregation +// struct. +func (t *Interface_Aggregation) SetMinLinks(v uint16) { + t.MinLinks = &v +} + +// PopulateDefaults recursively populates unset leaf fields in the Interface_Aggregation +// with default values as specified in the YANG schema, instantiating any nil +// container fields. +func (t *Interface_Aggregation) PopulateDefaults() { + if t == nil { + return + } + ygot.BuildEmptyTree(t) + t.SwitchedVlan.PopulateDefaults() +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_Aggregation) ΛValidate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["Interface_Aggregation"], t, opts...); err != nil { + return err + } + return nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_Aggregation) Validate(opts ...ygot.ValidationOption) error { + return t.ΛValidate(opts...) +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *Interface_Aggregation) ΛEnumTypeMap() map[string][]reflect.Type { return ΛEnumTypes } + +// ΛBelongingModule returns the name of the module that defines the namespace +// of Interface_Aggregation. +func (*Interface_Aggregation) ΛBelongingModule() string { + return "openconfig-if-aggregate" +} + +// Interface_Aggregation_SwitchedVlan represents the /openconfig-interfaces/interfaces/interface/aggregation/switched-vlan YANG schema element. +type Interface_Aggregation_SwitchedVlan struct { + AccessVlan *uint16 `path:"config/access-vlan" module:"openconfig-vlan/openconfig-vlan" shadow-path:"state/access-vlan" shadow-module:"openconfig-vlan/openconfig-vlan"` + InterfaceMode E_VlanTypes_VlanModeType `path:"config/interface-mode" module:"openconfig-vlan/openconfig-vlan" shadow-path:"state/interface-mode" shadow-module:"openconfig-vlan/openconfig-vlan"` + NativeVlan *uint16 `path:"config/native-vlan" module:"openconfig-vlan/openconfig-vlan" shadow-path:"state/native-vlan" shadow-module:"openconfig-vlan/openconfig-vlan"` + TrunkVlans []Interface_Aggregation_SwitchedVlan_TrunkVlans_Union `path:"config/trunk-vlans" module:"openconfig-vlan/openconfig-vlan" shadow-path:"state/trunk-vlans" shadow-module:"openconfig-vlan/openconfig-vlan"` +} + +// IsYANGGoStruct ensures that Interface_Aggregation_SwitchedVlan implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*Interface_Aggregation_SwitchedVlan) IsYANGGoStruct() {} + +// GetAccessVlan retrieves the value of the leaf AccessVlan from the Interface_Aggregation_SwitchedVlan +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if AccessVlan is set, it can +// safely use t.GetAccessVlan() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.AccessVlan == nil' before retrieving the leaf's value. +func (t *Interface_Aggregation_SwitchedVlan) GetAccessVlan() uint16 { + if t == nil || t.AccessVlan == nil { + return 0 + } + return *t.AccessVlan +} + +// GetInterfaceMode retrieves the value of the leaf InterfaceMode from the Interface_Aggregation_SwitchedVlan +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if InterfaceMode is set, it can +// safely use t.GetInterfaceMode() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.InterfaceMode == nil' before retrieving the leaf's value. +func (t *Interface_Aggregation_SwitchedVlan) GetInterfaceMode() E_VlanTypes_VlanModeType { + if t == nil || t.InterfaceMode == 0 { + return 0 + } + return t.InterfaceMode +} + +// GetNativeVlan retrieves the value of the leaf NativeVlan from the Interface_Aggregation_SwitchedVlan +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if NativeVlan is set, it can +// safely use t.GetNativeVlan() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.NativeVlan == nil' before retrieving the leaf's value. +func (t *Interface_Aggregation_SwitchedVlan) GetNativeVlan() uint16 { + if t == nil || t.NativeVlan == nil { + return 0 + } + return *t.NativeVlan +} + +// GetTrunkVlans retrieves the value of the leaf TrunkVlans from the Interface_Aggregation_SwitchedVlan +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if TrunkVlans is set, it can +// safely use t.GetTrunkVlans() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.TrunkVlans == nil' before retrieving the leaf's value. +func (t *Interface_Aggregation_SwitchedVlan) GetTrunkVlans() []Interface_Aggregation_SwitchedVlan_TrunkVlans_Union { + if t == nil || t.TrunkVlans == nil { + return nil + } + return t.TrunkVlans +} + +// SetAccessVlan sets the value of the leaf AccessVlan in the Interface_Aggregation_SwitchedVlan +// struct. +func (t *Interface_Aggregation_SwitchedVlan) SetAccessVlan(v uint16) { + t.AccessVlan = &v +} + +// SetInterfaceMode sets the value of the leaf InterfaceMode in the Interface_Aggregation_SwitchedVlan +// struct. +func (t *Interface_Aggregation_SwitchedVlan) SetInterfaceMode(v E_VlanTypes_VlanModeType) { + t.InterfaceMode = v +} + +// SetNativeVlan sets the value of the leaf NativeVlan in the Interface_Aggregation_SwitchedVlan +// struct. +func (t *Interface_Aggregation_SwitchedVlan) SetNativeVlan(v uint16) { + t.NativeVlan = &v +} + +// SetTrunkVlans sets the value of the leaf TrunkVlans in the Interface_Aggregation_SwitchedVlan +// struct. +func (t *Interface_Aggregation_SwitchedVlan) SetTrunkVlans(v []Interface_Aggregation_SwitchedVlan_TrunkVlans_Union) { + t.TrunkVlans = v +} + +// PopulateDefaults recursively populates unset leaf fields in the Interface_Aggregation_SwitchedVlan +// with default values as specified in the YANG schema, instantiating any nil +// container fields. +func (t *Interface_Aggregation_SwitchedVlan) PopulateDefaults() { + if t == nil { + return + } + ygot.BuildEmptyTree(t) +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_Aggregation_SwitchedVlan) ΛValidate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["Interface_Aggregation_SwitchedVlan"], t, opts...); err != nil { + return err + } + return nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_Aggregation_SwitchedVlan) Validate(opts ...ygot.ValidationOption) error { + return t.ΛValidate(opts...) +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *Interface_Aggregation_SwitchedVlan) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// ΛBelongingModule returns the name of the module that defines the namespace +// of Interface_Aggregation_SwitchedVlan. +func (*Interface_Aggregation_SwitchedVlan) ΛBelongingModule() string { + return "openconfig-vlan" +} + +// Interface_Counters represents the /openconfig-interfaces/interfaces/interface/state/counters YANG schema element. +type Interface_Counters struct { + CarrierTransitions *uint64 `path:"carrier-transitions" module:"openconfig-interfaces"` + InBroadcastPkts *uint64 `path:"in-broadcast-pkts" module:"openconfig-interfaces"` + InDiscards *uint64 `path:"in-discards" module:"openconfig-interfaces"` + InErrors *uint64 `path:"in-errors" module:"openconfig-interfaces"` + InFcsErrors *uint64 `path:"in-fcs-errors" module:"openconfig-interfaces"` + InMulticastPkts *uint64 `path:"in-multicast-pkts" module:"openconfig-interfaces"` + InOctets *uint64 `path:"in-octets" module:"openconfig-interfaces"` + InPkts *uint64 `path:"in-pkts" module:"openconfig-interfaces"` + InUnicastPkts *uint64 `path:"in-unicast-pkts" module:"openconfig-interfaces"` + InUnknownProtos *uint64 `path:"in-unknown-protos" module:"openconfig-interfaces"` + LastClear *uint64 `path:"last-clear" module:"openconfig-interfaces"` + OutBroadcastPkts *uint64 `path:"out-broadcast-pkts" module:"openconfig-interfaces"` + OutDiscards *uint64 `path:"out-discards" module:"openconfig-interfaces"` + OutErrors *uint64 `path:"out-errors" module:"openconfig-interfaces"` + OutMulticastPkts *uint64 `path:"out-multicast-pkts" module:"openconfig-interfaces"` + OutOctets *uint64 `path:"out-octets" module:"openconfig-interfaces"` + OutPkts *uint64 `path:"out-pkts" module:"openconfig-interfaces"` + OutUnicastPkts *uint64 `path:"out-unicast-pkts" module:"openconfig-interfaces"` + Resets *uint64 `path:"resets" module:"openconfig-interfaces"` +} + +// IsYANGGoStruct ensures that Interface_Counters implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*Interface_Counters) IsYANGGoStruct() {} + +// GetCarrierTransitions retrieves the value of the leaf CarrierTransitions from the Interface_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if CarrierTransitions is set, it can +// safely use t.GetCarrierTransitions() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.CarrierTransitions == nil' before retrieving the leaf's value. +func (t *Interface_Counters) GetCarrierTransitions() uint64 { + if t == nil || t.CarrierTransitions == nil { + return 0 + } + return *t.CarrierTransitions +} + +// GetInBroadcastPkts retrieves the value of the leaf InBroadcastPkts from the Interface_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if InBroadcastPkts is set, it can +// safely use t.GetInBroadcastPkts() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.InBroadcastPkts == nil' before retrieving the leaf's value. +func (t *Interface_Counters) GetInBroadcastPkts() uint64 { + if t == nil || t.InBroadcastPkts == nil { + return 0 + } + return *t.InBroadcastPkts +} + +// GetInDiscards retrieves the value of the leaf InDiscards from the Interface_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if InDiscards is set, it can +// safely use t.GetInDiscards() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.InDiscards == nil' before retrieving the leaf's value. +func (t *Interface_Counters) GetInDiscards() uint64 { + if t == nil || t.InDiscards == nil { + return 0 + } + return *t.InDiscards +} + +// GetInErrors retrieves the value of the leaf InErrors from the Interface_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if InErrors is set, it can +// safely use t.GetInErrors() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.InErrors == nil' before retrieving the leaf's value. +func (t *Interface_Counters) GetInErrors() uint64 { + if t == nil || t.InErrors == nil { + return 0 + } + return *t.InErrors +} + +// GetInFcsErrors retrieves the value of the leaf InFcsErrors from the Interface_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if InFcsErrors is set, it can +// safely use t.GetInFcsErrors() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.InFcsErrors == nil' before retrieving the leaf's value. +func (t *Interface_Counters) GetInFcsErrors() uint64 { + if t == nil || t.InFcsErrors == nil { + return 0 + } + return *t.InFcsErrors +} + +// GetInMulticastPkts retrieves the value of the leaf InMulticastPkts from the Interface_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if InMulticastPkts is set, it can +// safely use t.GetInMulticastPkts() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.InMulticastPkts == nil' before retrieving the leaf's value. +func (t *Interface_Counters) GetInMulticastPkts() uint64 { + if t == nil || t.InMulticastPkts == nil { + return 0 + } + return *t.InMulticastPkts +} + +// GetInOctets retrieves the value of the leaf InOctets from the Interface_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if InOctets is set, it can +// safely use t.GetInOctets() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.InOctets == nil' before retrieving the leaf's value. +func (t *Interface_Counters) GetInOctets() uint64 { + if t == nil || t.InOctets == nil { + return 0 + } + return *t.InOctets +} + +// GetInPkts retrieves the value of the leaf InPkts from the Interface_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if InPkts is set, it can +// safely use t.GetInPkts() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.InPkts == nil' before retrieving the leaf's value. +func (t *Interface_Counters) GetInPkts() uint64 { + if t == nil || t.InPkts == nil { + return 0 + } + return *t.InPkts +} + +// GetInUnicastPkts retrieves the value of the leaf InUnicastPkts from the Interface_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if InUnicastPkts is set, it can +// safely use t.GetInUnicastPkts() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.InUnicastPkts == nil' before retrieving the leaf's value. +func (t *Interface_Counters) GetInUnicastPkts() uint64 { + if t == nil || t.InUnicastPkts == nil { + return 0 + } + return *t.InUnicastPkts +} + +// GetInUnknownProtos retrieves the value of the leaf InUnknownProtos from the Interface_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if InUnknownProtos is set, it can +// safely use t.GetInUnknownProtos() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.InUnknownProtos == nil' before retrieving the leaf's value. +func (t *Interface_Counters) GetInUnknownProtos() uint64 { + if t == nil || t.InUnknownProtos == nil { + return 0 + } + return *t.InUnknownProtos +} + +// GetLastClear retrieves the value of the leaf LastClear from the Interface_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if LastClear is set, it can +// safely use t.GetLastClear() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.LastClear == nil' before retrieving the leaf's value. +func (t *Interface_Counters) GetLastClear() uint64 { + if t == nil || t.LastClear == nil { + return 0 + } + return *t.LastClear +} + +// GetOutBroadcastPkts retrieves the value of the leaf OutBroadcastPkts from the Interface_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if OutBroadcastPkts is set, it can +// safely use t.GetOutBroadcastPkts() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.OutBroadcastPkts == nil' before retrieving the leaf's value. +func (t *Interface_Counters) GetOutBroadcastPkts() uint64 { + if t == nil || t.OutBroadcastPkts == nil { + return 0 + } + return *t.OutBroadcastPkts +} + +// GetOutDiscards retrieves the value of the leaf OutDiscards from the Interface_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if OutDiscards is set, it can +// safely use t.GetOutDiscards() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.OutDiscards == nil' before retrieving the leaf's value. +func (t *Interface_Counters) GetOutDiscards() uint64 { + if t == nil || t.OutDiscards == nil { + return 0 + } + return *t.OutDiscards +} + +// GetOutErrors retrieves the value of the leaf OutErrors from the Interface_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if OutErrors is set, it can +// safely use t.GetOutErrors() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.OutErrors == nil' before retrieving the leaf's value. +func (t *Interface_Counters) GetOutErrors() uint64 { + if t == nil || t.OutErrors == nil { + return 0 + } + return *t.OutErrors +} + +// GetOutMulticastPkts retrieves the value of the leaf OutMulticastPkts from the Interface_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if OutMulticastPkts is set, it can +// safely use t.GetOutMulticastPkts() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.OutMulticastPkts == nil' before retrieving the leaf's value. +func (t *Interface_Counters) GetOutMulticastPkts() uint64 { + if t == nil || t.OutMulticastPkts == nil { + return 0 + } + return *t.OutMulticastPkts +} + +// GetOutOctets retrieves the value of the leaf OutOctets from the Interface_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if OutOctets is set, it can +// safely use t.GetOutOctets() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.OutOctets == nil' before retrieving the leaf's value. +func (t *Interface_Counters) GetOutOctets() uint64 { + if t == nil || t.OutOctets == nil { + return 0 + } + return *t.OutOctets +} + +// GetOutPkts retrieves the value of the leaf OutPkts from the Interface_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if OutPkts is set, it can +// safely use t.GetOutPkts() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.OutPkts == nil' before retrieving the leaf's value. +func (t *Interface_Counters) GetOutPkts() uint64 { + if t == nil || t.OutPkts == nil { + return 0 + } + return *t.OutPkts +} + +// GetOutUnicastPkts retrieves the value of the leaf OutUnicastPkts from the Interface_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if OutUnicastPkts is set, it can +// safely use t.GetOutUnicastPkts() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.OutUnicastPkts == nil' before retrieving the leaf's value. +func (t *Interface_Counters) GetOutUnicastPkts() uint64 { + if t == nil || t.OutUnicastPkts == nil { + return 0 + } + return *t.OutUnicastPkts +} + +// GetResets retrieves the value of the leaf Resets from the Interface_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Resets is set, it can +// safely use t.GetResets() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Resets == nil' before retrieving the leaf's value. +func (t *Interface_Counters) GetResets() uint64 { + if t == nil || t.Resets == nil { + return 0 + } + return *t.Resets +} + +// SetCarrierTransitions sets the value of the leaf CarrierTransitions in the Interface_Counters +// struct. +func (t *Interface_Counters) SetCarrierTransitions(v uint64) { + t.CarrierTransitions = &v +} + +// SetInBroadcastPkts sets the value of the leaf InBroadcastPkts in the Interface_Counters +// struct. +func (t *Interface_Counters) SetInBroadcastPkts(v uint64) { + t.InBroadcastPkts = &v +} + +// SetInDiscards sets the value of the leaf InDiscards in the Interface_Counters +// struct. +func (t *Interface_Counters) SetInDiscards(v uint64) { + t.InDiscards = &v +} + +// SetInErrors sets the value of the leaf InErrors in the Interface_Counters +// struct. +func (t *Interface_Counters) SetInErrors(v uint64) { + t.InErrors = &v +} + +// SetInFcsErrors sets the value of the leaf InFcsErrors in the Interface_Counters +// struct. +func (t *Interface_Counters) SetInFcsErrors(v uint64) { + t.InFcsErrors = &v +} + +// SetInMulticastPkts sets the value of the leaf InMulticastPkts in the Interface_Counters +// struct. +func (t *Interface_Counters) SetInMulticastPkts(v uint64) { + t.InMulticastPkts = &v +} + +// SetInOctets sets the value of the leaf InOctets in the Interface_Counters +// struct. +func (t *Interface_Counters) SetInOctets(v uint64) { + t.InOctets = &v +} + +// SetInPkts sets the value of the leaf InPkts in the Interface_Counters +// struct. +func (t *Interface_Counters) SetInPkts(v uint64) { + t.InPkts = &v +} + +// SetInUnicastPkts sets the value of the leaf InUnicastPkts in the Interface_Counters +// struct. +func (t *Interface_Counters) SetInUnicastPkts(v uint64) { + t.InUnicastPkts = &v +} + +// SetInUnknownProtos sets the value of the leaf InUnknownProtos in the Interface_Counters +// struct. +func (t *Interface_Counters) SetInUnknownProtos(v uint64) { + t.InUnknownProtos = &v +} + +// SetLastClear sets the value of the leaf LastClear in the Interface_Counters +// struct. +func (t *Interface_Counters) SetLastClear(v uint64) { + t.LastClear = &v +} + +// SetOutBroadcastPkts sets the value of the leaf OutBroadcastPkts in the Interface_Counters +// struct. +func (t *Interface_Counters) SetOutBroadcastPkts(v uint64) { + t.OutBroadcastPkts = &v +} + +// SetOutDiscards sets the value of the leaf OutDiscards in the Interface_Counters +// struct. +func (t *Interface_Counters) SetOutDiscards(v uint64) { + t.OutDiscards = &v +} + +// SetOutErrors sets the value of the leaf OutErrors in the Interface_Counters +// struct. +func (t *Interface_Counters) SetOutErrors(v uint64) { + t.OutErrors = &v +} + +// SetOutMulticastPkts sets the value of the leaf OutMulticastPkts in the Interface_Counters +// struct. +func (t *Interface_Counters) SetOutMulticastPkts(v uint64) { + t.OutMulticastPkts = &v +} + +// SetOutOctets sets the value of the leaf OutOctets in the Interface_Counters +// struct. +func (t *Interface_Counters) SetOutOctets(v uint64) { + t.OutOctets = &v +} + +// SetOutPkts sets the value of the leaf OutPkts in the Interface_Counters +// struct. +func (t *Interface_Counters) SetOutPkts(v uint64) { + t.OutPkts = &v +} + +// SetOutUnicastPkts sets the value of the leaf OutUnicastPkts in the Interface_Counters +// struct. +func (t *Interface_Counters) SetOutUnicastPkts(v uint64) { + t.OutUnicastPkts = &v +} + +// SetResets sets the value of the leaf Resets in the Interface_Counters +// struct. +func (t *Interface_Counters) SetResets(v uint64) { + t.Resets = &v +} + +// PopulateDefaults recursively populates unset leaf fields in the Interface_Counters +// with default values as specified in the YANG schema, instantiating any nil +// container fields. +func (t *Interface_Counters) PopulateDefaults() { + if t == nil { + return + } + ygot.BuildEmptyTree(t) +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_Counters) ΛValidate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["Interface_Counters"], t, opts...); err != nil { + return err + } + return nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_Counters) Validate(opts ...ygot.ValidationOption) error { + return t.ΛValidate(opts...) +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *Interface_Counters) ΛEnumTypeMap() map[string][]reflect.Type { return ΛEnumTypes } + +// ΛBelongingModule returns the name of the module that defines the namespace +// of Interface_Counters. +func (*Interface_Counters) ΛBelongingModule() string { + return "openconfig-interfaces" +} + +// Interface_Ethernet represents the /openconfig-interfaces/interfaces/interface/ethernet YANG schema element. +type Interface_Ethernet struct { + AggregateId *string `path:"config/aggregate-id" module:"openconfig-if-ethernet/openconfig-if-aggregate" shadow-path:"state/aggregate-id" shadow-module:"openconfig-if-ethernet/openconfig-if-aggregate"` + AutoNegotiate *bool `path:"config/auto-negotiate" module:"openconfig-if-ethernet/openconfig-if-ethernet" shadow-path:"state/auto-negotiate" shadow-module:"openconfig-if-ethernet/openconfig-if-ethernet"` + Counters *Interface_Ethernet_Counters `path:"state/counters" module:"openconfig-if-ethernet/openconfig-if-ethernet"` + DuplexMode E_Ethernet_DuplexMode `path:"config/duplex-mode" module:"openconfig-if-ethernet/openconfig-if-ethernet" shadow-path:"state/duplex-mode" shadow-module:"openconfig-if-ethernet/openconfig-if-ethernet"` + EnableFlowControl *bool `path:"config/enable-flow-control" module:"openconfig-if-ethernet/openconfig-if-ethernet" shadow-path:"state/enable-flow-control" shadow-module:"openconfig-if-ethernet/openconfig-if-ethernet"` + FecMode E_IfEthernet_INTERFACE_FEC `path:"config/fec-mode" module:"openconfig-if-ethernet/openconfig-if-ethernet" shadow-path:"state/fec-mode" shadow-module:"openconfig-if-ethernet/openconfig-if-ethernet"` + HwMacAddress *string `path:"state/hw-mac-address" module:"openconfig-if-ethernet/openconfig-if-ethernet"` + MacAddress *string `path:"config/mac-address" module:"openconfig-if-ethernet/openconfig-if-ethernet" shadow-path:"state/mac-address" shadow-module:"openconfig-if-ethernet/openconfig-if-ethernet"` + NegotiatedDuplexMode E_Ethernet_NegotiatedDuplexMode `path:"state/negotiated-duplex-mode" module:"openconfig-if-ethernet/openconfig-if-ethernet"` + NegotiatedPortSpeed E_IfEthernet_ETHERNET_SPEED `path:"state/negotiated-port-speed" module:"openconfig-if-ethernet/openconfig-if-ethernet"` + PortSpeed E_IfEthernet_ETHERNET_SPEED `path:"config/port-speed" module:"openconfig-if-ethernet/openconfig-if-ethernet" shadow-path:"state/port-speed" shadow-module:"openconfig-if-ethernet/openconfig-if-ethernet"` + StandaloneLinkTraining *bool `path:"config/standalone-link-training" module:"openconfig-if-ethernet/openconfig-if-ethernet" shadow-path:"state/standalone-link-training" shadow-module:"openconfig-if-ethernet/openconfig-if-ethernet"` + SwitchedVlan *Interface_Ethernet_SwitchedVlan `path:"switched-vlan" module:"openconfig-vlan"` +} + +// IsYANGGoStruct ensures that Interface_Ethernet implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*Interface_Ethernet) IsYANGGoStruct() {} + +// GetOrCreateCounters retrieves the value of the Counters field +// or returns the existing field if it already exists. +func (t *Interface_Ethernet) GetOrCreateCounters() *Interface_Ethernet_Counters { + if t.Counters != nil { + return t.Counters + } + t.Counters = &Interface_Ethernet_Counters{} + return t.Counters +} + +// GetOrCreateSwitchedVlan retrieves the value of the SwitchedVlan field +// or returns the existing field if it already exists. +func (t *Interface_Ethernet) GetOrCreateSwitchedVlan() *Interface_Ethernet_SwitchedVlan { + if t.SwitchedVlan != nil { + return t.SwitchedVlan + } + t.SwitchedVlan = &Interface_Ethernet_SwitchedVlan{} + return t.SwitchedVlan +} + +// GetCounters returns the value of the Counters struct pointer +// from Interface_Ethernet. If the receiver or the field Counters is nil, nil +// is returned such that the Get* methods can be safely chained. +func (t *Interface_Ethernet) GetCounters() *Interface_Ethernet_Counters { + if t != nil && t.Counters != nil { + return t.Counters + } + return nil +} + +// GetSwitchedVlan returns the value of the SwitchedVlan struct pointer +// from Interface_Ethernet. If the receiver or the field SwitchedVlan is nil, nil +// is returned such that the Get* methods can be safely chained. +func (t *Interface_Ethernet) GetSwitchedVlan() *Interface_Ethernet_SwitchedVlan { + if t != nil && t.SwitchedVlan != nil { + return t.SwitchedVlan + } + return nil +} + +// GetAggregateId retrieves the value of the leaf AggregateId from the Interface_Ethernet +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if AggregateId is set, it can +// safely use t.GetAggregateId() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.AggregateId == nil' before retrieving the leaf's value. +func (t *Interface_Ethernet) GetAggregateId() string { + if t == nil || t.AggregateId == nil { + return "" + } + return *t.AggregateId +} + +// GetAutoNegotiate retrieves the value of the leaf AutoNegotiate from the Interface_Ethernet +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if AutoNegotiate is set, it can +// safely use t.GetAutoNegotiate() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.AutoNegotiate == nil' before retrieving the leaf's value. +func (t *Interface_Ethernet) GetAutoNegotiate() bool { + if t == nil || t.AutoNegotiate == nil { + return true + } + return *t.AutoNegotiate +} + +// GetDuplexMode retrieves the value of the leaf DuplexMode from the Interface_Ethernet +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if DuplexMode is set, it can +// safely use t.GetDuplexMode() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.DuplexMode == nil' before retrieving the leaf's value. +func (t *Interface_Ethernet) GetDuplexMode() E_Ethernet_DuplexMode { + if t == nil || t.DuplexMode == 0 { + return 0 + } + return t.DuplexMode +} + +// GetEnableFlowControl retrieves the value of the leaf EnableFlowControl from the Interface_Ethernet +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if EnableFlowControl is set, it can +// safely use t.GetEnableFlowControl() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.EnableFlowControl == nil' before retrieving the leaf's value. +func (t *Interface_Ethernet) GetEnableFlowControl() bool { + if t == nil || t.EnableFlowControl == nil { + return false + } + return *t.EnableFlowControl +} + +// GetFecMode retrieves the value of the leaf FecMode from the Interface_Ethernet +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if FecMode is set, it can +// safely use t.GetFecMode() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.FecMode == nil' before retrieving the leaf's value. +func (t *Interface_Ethernet) GetFecMode() E_IfEthernet_INTERFACE_FEC { + if t == nil || t.FecMode == 0 { + return 0 + } + return t.FecMode +} + +// GetHwMacAddress retrieves the value of the leaf HwMacAddress from the Interface_Ethernet +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if HwMacAddress is set, it can +// safely use t.GetHwMacAddress() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.HwMacAddress == nil' before retrieving the leaf's value. +func (t *Interface_Ethernet) GetHwMacAddress() string { + if t == nil || t.HwMacAddress == nil { + return "" + } + return *t.HwMacAddress +} + +// GetMacAddress retrieves the value of the leaf MacAddress from the Interface_Ethernet +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if MacAddress is set, it can +// safely use t.GetMacAddress() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.MacAddress == nil' before retrieving the leaf's value. +func (t *Interface_Ethernet) GetMacAddress() string { + if t == nil || t.MacAddress == nil { + return "" + } + return *t.MacAddress +} + +// GetNegotiatedDuplexMode retrieves the value of the leaf NegotiatedDuplexMode from the Interface_Ethernet +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if NegotiatedDuplexMode is set, it can +// safely use t.GetNegotiatedDuplexMode() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.NegotiatedDuplexMode == nil' before retrieving the leaf's value. +func (t *Interface_Ethernet) GetNegotiatedDuplexMode() E_Ethernet_NegotiatedDuplexMode { + if t == nil || t.NegotiatedDuplexMode == 0 { + return 0 + } + return t.NegotiatedDuplexMode +} + +// GetNegotiatedPortSpeed retrieves the value of the leaf NegotiatedPortSpeed from the Interface_Ethernet +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if NegotiatedPortSpeed is set, it can +// safely use t.GetNegotiatedPortSpeed() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.NegotiatedPortSpeed == nil' before retrieving the leaf's value. +func (t *Interface_Ethernet) GetNegotiatedPortSpeed() E_IfEthernet_ETHERNET_SPEED { + if t == nil || t.NegotiatedPortSpeed == 0 { + return 0 + } + return t.NegotiatedPortSpeed +} + +// GetPortSpeed retrieves the value of the leaf PortSpeed from the Interface_Ethernet +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if PortSpeed is set, it can +// safely use t.GetPortSpeed() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.PortSpeed == nil' before retrieving the leaf's value. +func (t *Interface_Ethernet) GetPortSpeed() E_IfEthernet_ETHERNET_SPEED { + if t == nil || t.PortSpeed == 0 { + return 0 + } + return t.PortSpeed +} + +// GetStandaloneLinkTraining retrieves the value of the leaf StandaloneLinkTraining from the Interface_Ethernet +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if StandaloneLinkTraining is set, it can +// safely use t.GetStandaloneLinkTraining() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.StandaloneLinkTraining == nil' before retrieving the leaf's value. +func (t *Interface_Ethernet) GetStandaloneLinkTraining() bool { + if t == nil || t.StandaloneLinkTraining == nil { + return false + } + return *t.StandaloneLinkTraining +} + +// SetAggregateId sets the value of the leaf AggregateId in the Interface_Ethernet +// struct. +func (t *Interface_Ethernet) SetAggregateId(v string) { + t.AggregateId = &v +} + +// SetAutoNegotiate sets the value of the leaf AutoNegotiate in the Interface_Ethernet +// struct. +func (t *Interface_Ethernet) SetAutoNegotiate(v bool) { + t.AutoNegotiate = &v +} + +// SetDuplexMode sets the value of the leaf DuplexMode in the Interface_Ethernet +// struct. +func (t *Interface_Ethernet) SetDuplexMode(v E_Ethernet_DuplexMode) { + t.DuplexMode = v +} + +// SetEnableFlowControl sets the value of the leaf EnableFlowControl in the Interface_Ethernet +// struct. +func (t *Interface_Ethernet) SetEnableFlowControl(v bool) { + t.EnableFlowControl = &v +} + +// SetFecMode sets the value of the leaf FecMode in the Interface_Ethernet +// struct. +func (t *Interface_Ethernet) SetFecMode(v E_IfEthernet_INTERFACE_FEC) { + t.FecMode = v +} + +// SetHwMacAddress sets the value of the leaf HwMacAddress in the Interface_Ethernet +// struct. +func (t *Interface_Ethernet) SetHwMacAddress(v string) { + t.HwMacAddress = &v +} + +// SetMacAddress sets the value of the leaf MacAddress in the Interface_Ethernet +// struct. +func (t *Interface_Ethernet) SetMacAddress(v string) { + t.MacAddress = &v +} + +// SetNegotiatedDuplexMode sets the value of the leaf NegotiatedDuplexMode in the Interface_Ethernet +// struct. +func (t *Interface_Ethernet) SetNegotiatedDuplexMode(v E_Ethernet_NegotiatedDuplexMode) { + t.NegotiatedDuplexMode = v +} + +// SetNegotiatedPortSpeed sets the value of the leaf NegotiatedPortSpeed in the Interface_Ethernet +// struct. +func (t *Interface_Ethernet) SetNegotiatedPortSpeed(v E_IfEthernet_ETHERNET_SPEED) { + t.NegotiatedPortSpeed = v +} + +// SetPortSpeed sets the value of the leaf PortSpeed in the Interface_Ethernet +// struct. +func (t *Interface_Ethernet) SetPortSpeed(v E_IfEthernet_ETHERNET_SPEED) { + t.PortSpeed = v +} + +// SetStandaloneLinkTraining sets the value of the leaf StandaloneLinkTraining in the Interface_Ethernet +// struct. +func (t *Interface_Ethernet) SetStandaloneLinkTraining(v bool) { + t.StandaloneLinkTraining = &v +} + +// PopulateDefaults recursively populates unset leaf fields in the Interface_Ethernet +// with default values as specified in the YANG schema, instantiating any nil +// container fields. +func (t *Interface_Ethernet) PopulateDefaults() { + if t == nil { + return + } + ygot.BuildEmptyTree(t) + if t.AutoNegotiate == nil { + var v bool = true + t.AutoNegotiate = &v + } + if t.EnableFlowControl == nil { + var v bool = false + t.EnableFlowControl = &v + } + if t.StandaloneLinkTraining == nil { + var v bool = false + t.StandaloneLinkTraining = &v + } + t.Counters.PopulateDefaults() + t.SwitchedVlan.PopulateDefaults() +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_Ethernet) ΛValidate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["Interface_Ethernet"], t, opts...); err != nil { + return err + } + return nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_Ethernet) Validate(opts ...ygot.ValidationOption) error { + return t.ΛValidate(opts...) +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *Interface_Ethernet) ΛEnumTypeMap() map[string][]reflect.Type { return ΛEnumTypes } + +// ΛBelongingModule returns the name of the module that defines the namespace +// of Interface_Ethernet. +func (*Interface_Ethernet) ΛBelongingModule() string { + return "openconfig-if-ethernet" +} + +// Interface_Ethernet_Counters represents the /openconfig-interfaces/interfaces/interface/ethernet/state/counters YANG schema element. +type Interface_Ethernet_Counters struct { + In_8021QFrames *uint64 `path:"in-8021q-frames" module:"openconfig-if-ethernet"` + InBlockErrors *uint64 `path:"in-block-errors" module:"openconfig-if-ethernet"` + InCarrierErrors *uint64 `path:"in-carrier-errors" module:"openconfig-if-ethernet"` + InCrcErrors *uint64 `path:"in-crc-errors" module:"openconfig-if-ethernet"` + InFragmentFrames *uint64 `path:"in-fragment-frames" module:"openconfig-if-ethernet"` + InInterruptedTx *uint64 `path:"in-interrupted-tx" module:"openconfig-if-ethernet"` + InJabberFrames *uint64 `path:"in-jabber-frames" module:"openconfig-if-ethernet"` + InLateCollision *uint64 `path:"in-late-collision" module:"openconfig-if-ethernet"` + InMacControlFrames *uint64 `path:"in-mac-control-frames" module:"openconfig-if-ethernet"` + InMacErrorsRx *uint64 `path:"in-mac-errors-rx" module:"openconfig-if-ethernet"` + InMacPauseFrames *uint64 `path:"in-mac-pause-frames" module:"openconfig-if-ethernet"` + InMaxsizeExceeded *uint64 `path:"in-maxsize-exceeded" module:"openconfig-if-ethernet"` + InOversizeFrames *uint64 `path:"in-oversize-frames" module:"openconfig-if-ethernet"` + InSingleCollision *uint64 `path:"in-single-collision" module:"openconfig-if-ethernet"` + InSymbolError *uint64 `path:"in-symbol-error" module:"openconfig-if-ethernet"` + InUndersizeFrames *uint64 `path:"in-undersize-frames" module:"openconfig-if-ethernet"` + Out_8021QFrames *uint64 `path:"out-8021q-frames" module:"openconfig-if-ethernet"` + OutMacControlFrames *uint64 `path:"out-mac-control-frames" module:"openconfig-if-ethernet"` + OutMacErrorsTx *uint64 `path:"out-mac-errors-tx" module:"openconfig-if-ethernet"` + OutMacPauseFrames *uint64 `path:"out-mac-pause-frames" module:"openconfig-if-ethernet"` +} + +// IsYANGGoStruct ensures that Interface_Ethernet_Counters implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*Interface_Ethernet_Counters) IsYANGGoStruct() {} + +// GetIn_8021QFrames retrieves the value of the leaf In_8021QFrames from the Interface_Ethernet_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if In_8021QFrames is set, it can +// safely use t.GetIn_8021QFrames() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.In_8021QFrames == nil' before retrieving the leaf's value. +func (t *Interface_Ethernet_Counters) GetIn_8021QFrames() uint64 { + if t == nil || t.In_8021QFrames == nil { + return 0 + } + return *t.In_8021QFrames +} + +// GetInBlockErrors retrieves the value of the leaf InBlockErrors from the Interface_Ethernet_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if InBlockErrors is set, it can +// safely use t.GetInBlockErrors() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.InBlockErrors == nil' before retrieving the leaf's value. +func (t *Interface_Ethernet_Counters) GetInBlockErrors() uint64 { + if t == nil || t.InBlockErrors == nil { + return 0 + } + return *t.InBlockErrors +} + +// GetInCarrierErrors retrieves the value of the leaf InCarrierErrors from the Interface_Ethernet_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if InCarrierErrors is set, it can +// safely use t.GetInCarrierErrors() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.InCarrierErrors == nil' before retrieving the leaf's value. +func (t *Interface_Ethernet_Counters) GetInCarrierErrors() uint64 { + if t == nil || t.InCarrierErrors == nil { + return 0 + } + return *t.InCarrierErrors +} + +// GetInCrcErrors retrieves the value of the leaf InCrcErrors from the Interface_Ethernet_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if InCrcErrors is set, it can +// safely use t.GetInCrcErrors() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.InCrcErrors == nil' before retrieving the leaf's value. +func (t *Interface_Ethernet_Counters) GetInCrcErrors() uint64 { + if t == nil || t.InCrcErrors == nil { + return 0 + } + return *t.InCrcErrors +} + +// GetInFragmentFrames retrieves the value of the leaf InFragmentFrames from the Interface_Ethernet_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if InFragmentFrames is set, it can +// safely use t.GetInFragmentFrames() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.InFragmentFrames == nil' before retrieving the leaf's value. +func (t *Interface_Ethernet_Counters) GetInFragmentFrames() uint64 { + if t == nil || t.InFragmentFrames == nil { + return 0 + } + return *t.InFragmentFrames +} + +// GetInInterruptedTx retrieves the value of the leaf InInterruptedTx from the Interface_Ethernet_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if InInterruptedTx is set, it can +// safely use t.GetInInterruptedTx() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.InInterruptedTx == nil' before retrieving the leaf's value. +func (t *Interface_Ethernet_Counters) GetInInterruptedTx() uint64 { + if t == nil || t.InInterruptedTx == nil { + return 0 + } + return *t.InInterruptedTx +} + +// GetInJabberFrames retrieves the value of the leaf InJabberFrames from the Interface_Ethernet_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if InJabberFrames is set, it can +// safely use t.GetInJabberFrames() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.InJabberFrames == nil' before retrieving the leaf's value. +func (t *Interface_Ethernet_Counters) GetInJabberFrames() uint64 { + if t == nil || t.InJabberFrames == nil { + return 0 + } + return *t.InJabberFrames +} + +// GetInLateCollision retrieves the value of the leaf InLateCollision from the Interface_Ethernet_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if InLateCollision is set, it can +// safely use t.GetInLateCollision() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.InLateCollision == nil' before retrieving the leaf's value. +func (t *Interface_Ethernet_Counters) GetInLateCollision() uint64 { + if t == nil || t.InLateCollision == nil { + return 0 + } + return *t.InLateCollision +} + +// GetInMacControlFrames retrieves the value of the leaf InMacControlFrames from the Interface_Ethernet_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if InMacControlFrames is set, it can +// safely use t.GetInMacControlFrames() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.InMacControlFrames == nil' before retrieving the leaf's value. +func (t *Interface_Ethernet_Counters) GetInMacControlFrames() uint64 { + if t == nil || t.InMacControlFrames == nil { + return 0 + } + return *t.InMacControlFrames +} + +// GetInMacErrorsRx retrieves the value of the leaf InMacErrorsRx from the Interface_Ethernet_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if InMacErrorsRx is set, it can +// safely use t.GetInMacErrorsRx() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.InMacErrorsRx == nil' before retrieving the leaf's value. +func (t *Interface_Ethernet_Counters) GetInMacErrorsRx() uint64 { + if t == nil || t.InMacErrorsRx == nil { + return 0 + } + return *t.InMacErrorsRx +} + +// GetInMacPauseFrames retrieves the value of the leaf InMacPauseFrames from the Interface_Ethernet_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if InMacPauseFrames is set, it can +// safely use t.GetInMacPauseFrames() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.InMacPauseFrames == nil' before retrieving the leaf's value. +func (t *Interface_Ethernet_Counters) GetInMacPauseFrames() uint64 { + if t == nil || t.InMacPauseFrames == nil { + return 0 + } + return *t.InMacPauseFrames +} + +// GetInMaxsizeExceeded retrieves the value of the leaf InMaxsizeExceeded from the Interface_Ethernet_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if InMaxsizeExceeded is set, it can +// safely use t.GetInMaxsizeExceeded() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.InMaxsizeExceeded == nil' before retrieving the leaf's value. +func (t *Interface_Ethernet_Counters) GetInMaxsizeExceeded() uint64 { + if t == nil || t.InMaxsizeExceeded == nil { + return 0 + } + return *t.InMaxsizeExceeded +} + +// GetInOversizeFrames retrieves the value of the leaf InOversizeFrames from the Interface_Ethernet_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if InOversizeFrames is set, it can +// safely use t.GetInOversizeFrames() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.InOversizeFrames == nil' before retrieving the leaf's value. +func (t *Interface_Ethernet_Counters) GetInOversizeFrames() uint64 { + if t == nil || t.InOversizeFrames == nil { + return 0 + } + return *t.InOversizeFrames +} + +// GetInSingleCollision retrieves the value of the leaf InSingleCollision from the Interface_Ethernet_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if InSingleCollision is set, it can +// safely use t.GetInSingleCollision() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.InSingleCollision == nil' before retrieving the leaf's value. +func (t *Interface_Ethernet_Counters) GetInSingleCollision() uint64 { + if t == nil || t.InSingleCollision == nil { + return 0 + } + return *t.InSingleCollision +} + +// GetInSymbolError retrieves the value of the leaf InSymbolError from the Interface_Ethernet_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if InSymbolError is set, it can +// safely use t.GetInSymbolError() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.InSymbolError == nil' before retrieving the leaf's value. +func (t *Interface_Ethernet_Counters) GetInSymbolError() uint64 { + if t == nil || t.InSymbolError == nil { + return 0 + } + return *t.InSymbolError +} + +// GetInUndersizeFrames retrieves the value of the leaf InUndersizeFrames from the Interface_Ethernet_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if InUndersizeFrames is set, it can +// safely use t.GetInUndersizeFrames() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.InUndersizeFrames == nil' before retrieving the leaf's value. +func (t *Interface_Ethernet_Counters) GetInUndersizeFrames() uint64 { + if t == nil || t.InUndersizeFrames == nil { + return 0 + } + return *t.InUndersizeFrames +} + +// GetOut_8021QFrames retrieves the value of the leaf Out_8021QFrames from the Interface_Ethernet_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Out_8021QFrames is set, it can +// safely use t.GetOut_8021QFrames() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Out_8021QFrames == nil' before retrieving the leaf's value. +func (t *Interface_Ethernet_Counters) GetOut_8021QFrames() uint64 { + if t == nil || t.Out_8021QFrames == nil { + return 0 + } + return *t.Out_8021QFrames +} + +// GetOutMacControlFrames retrieves the value of the leaf OutMacControlFrames from the Interface_Ethernet_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if OutMacControlFrames is set, it can +// safely use t.GetOutMacControlFrames() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.OutMacControlFrames == nil' before retrieving the leaf's value. +func (t *Interface_Ethernet_Counters) GetOutMacControlFrames() uint64 { + if t == nil || t.OutMacControlFrames == nil { + return 0 + } + return *t.OutMacControlFrames +} + +// GetOutMacErrorsTx retrieves the value of the leaf OutMacErrorsTx from the Interface_Ethernet_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if OutMacErrorsTx is set, it can +// safely use t.GetOutMacErrorsTx() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.OutMacErrorsTx == nil' before retrieving the leaf's value. +func (t *Interface_Ethernet_Counters) GetOutMacErrorsTx() uint64 { + if t == nil || t.OutMacErrorsTx == nil { + return 0 + } + return *t.OutMacErrorsTx +} + +// GetOutMacPauseFrames retrieves the value of the leaf OutMacPauseFrames from the Interface_Ethernet_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if OutMacPauseFrames is set, it can +// safely use t.GetOutMacPauseFrames() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.OutMacPauseFrames == nil' before retrieving the leaf's value. +func (t *Interface_Ethernet_Counters) GetOutMacPauseFrames() uint64 { + if t == nil || t.OutMacPauseFrames == nil { + return 0 + } + return *t.OutMacPauseFrames +} + +// SetIn_8021QFrames sets the value of the leaf In_8021QFrames in the Interface_Ethernet_Counters +// struct. +func (t *Interface_Ethernet_Counters) SetIn_8021QFrames(v uint64) { + t.In_8021QFrames = &v +} + +// SetInBlockErrors sets the value of the leaf InBlockErrors in the Interface_Ethernet_Counters +// struct. +func (t *Interface_Ethernet_Counters) SetInBlockErrors(v uint64) { + t.InBlockErrors = &v +} + +// SetInCarrierErrors sets the value of the leaf InCarrierErrors in the Interface_Ethernet_Counters +// struct. +func (t *Interface_Ethernet_Counters) SetInCarrierErrors(v uint64) { + t.InCarrierErrors = &v +} + +// SetInCrcErrors sets the value of the leaf InCrcErrors in the Interface_Ethernet_Counters +// struct. +func (t *Interface_Ethernet_Counters) SetInCrcErrors(v uint64) { + t.InCrcErrors = &v +} + +// SetInFragmentFrames sets the value of the leaf InFragmentFrames in the Interface_Ethernet_Counters +// struct. +func (t *Interface_Ethernet_Counters) SetInFragmentFrames(v uint64) { + t.InFragmentFrames = &v +} + +// SetInInterruptedTx sets the value of the leaf InInterruptedTx in the Interface_Ethernet_Counters +// struct. +func (t *Interface_Ethernet_Counters) SetInInterruptedTx(v uint64) { + t.InInterruptedTx = &v +} + +// SetInJabberFrames sets the value of the leaf InJabberFrames in the Interface_Ethernet_Counters +// struct. +func (t *Interface_Ethernet_Counters) SetInJabberFrames(v uint64) { + t.InJabberFrames = &v +} + +// SetInLateCollision sets the value of the leaf InLateCollision in the Interface_Ethernet_Counters +// struct. +func (t *Interface_Ethernet_Counters) SetInLateCollision(v uint64) { + t.InLateCollision = &v +} + +// SetInMacControlFrames sets the value of the leaf InMacControlFrames in the Interface_Ethernet_Counters +// struct. +func (t *Interface_Ethernet_Counters) SetInMacControlFrames(v uint64) { + t.InMacControlFrames = &v +} + +// SetInMacErrorsRx sets the value of the leaf InMacErrorsRx in the Interface_Ethernet_Counters +// struct. +func (t *Interface_Ethernet_Counters) SetInMacErrorsRx(v uint64) { + t.InMacErrorsRx = &v +} + +// SetInMacPauseFrames sets the value of the leaf InMacPauseFrames in the Interface_Ethernet_Counters +// struct. +func (t *Interface_Ethernet_Counters) SetInMacPauseFrames(v uint64) { + t.InMacPauseFrames = &v +} + +// SetInMaxsizeExceeded sets the value of the leaf InMaxsizeExceeded in the Interface_Ethernet_Counters +// struct. +func (t *Interface_Ethernet_Counters) SetInMaxsizeExceeded(v uint64) { + t.InMaxsizeExceeded = &v +} + +// SetInOversizeFrames sets the value of the leaf InOversizeFrames in the Interface_Ethernet_Counters +// struct. +func (t *Interface_Ethernet_Counters) SetInOversizeFrames(v uint64) { + t.InOversizeFrames = &v +} + +// SetInSingleCollision sets the value of the leaf InSingleCollision in the Interface_Ethernet_Counters +// struct. +func (t *Interface_Ethernet_Counters) SetInSingleCollision(v uint64) { + t.InSingleCollision = &v +} + +// SetInSymbolError sets the value of the leaf InSymbolError in the Interface_Ethernet_Counters +// struct. +func (t *Interface_Ethernet_Counters) SetInSymbolError(v uint64) { + t.InSymbolError = &v +} + +// SetInUndersizeFrames sets the value of the leaf InUndersizeFrames in the Interface_Ethernet_Counters +// struct. +func (t *Interface_Ethernet_Counters) SetInUndersizeFrames(v uint64) { + t.InUndersizeFrames = &v +} + +// SetOut_8021QFrames sets the value of the leaf Out_8021QFrames in the Interface_Ethernet_Counters +// struct. +func (t *Interface_Ethernet_Counters) SetOut_8021QFrames(v uint64) { + t.Out_8021QFrames = &v +} + +// SetOutMacControlFrames sets the value of the leaf OutMacControlFrames in the Interface_Ethernet_Counters +// struct. +func (t *Interface_Ethernet_Counters) SetOutMacControlFrames(v uint64) { + t.OutMacControlFrames = &v +} + +// SetOutMacErrorsTx sets the value of the leaf OutMacErrorsTx in the Interface_Ethernet_Counters +// struct. +func (t *Interface_Ethernet_Counters) SetOutMacErrorsTx(v uint64) { + t.OutMacErrorsTx = &v +} + +// SetOutMacPauseFrames sets the value of the leaf OutMacPauseFrames in the Interface_Ethernet_Counters +// struct. +func (t *Interface_Ethernet_Counters) SetOutMacPauseFrames(v uint64) { + t.OutMacPauseFrames = &v +} + +// PopulateDefaults recursively populates unset leaf fields in the Interface_Ethernet_Counters +// with default values as specified in the YANG schema, instantiating any nil +// container fields. +func (t *Interface_Ethernet_Counters) PopulateDefaults() { + if t == nil { + return + } + ygot.BuildEmptyTree(t) +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_Ethernet_Counters) ΛValidate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["Interface_Ethernet_Counters"], t, opts...); err != nil { + return err + } + return nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_Ethernet_Counters) Validate(opts ...ygot.ValidationOption) error { + return t.ΛValidate(opts...) +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *Interface_Ethernet_Counters) ΛEnumTypeMap() map[string][]reflect.Type { return ΛEnumTypes } + +// ΛBelongingModule returns the name of the module that defines the namespace +// of Interface_Ethernet_Counters. +func (*Interface_Ethernet_Counters) ΛBelongingModule() string { + return "openconfig-if-ethernet" +} + +// Interface_Ethernet_SwitchedVlan represents the /openconfig-interfaces/interfaces/interface/ethernet/switched-vlan YANG schema element. +type Interface_Ethernet_SwitchedVlan struct { + AccessVlan *uint16 `path:"config/access-vlan" module:"openconfig-vlan/openconfig-vlan" shadow-path:"state/access-vlan" shadow-module:"openconfig-vlan/openconfig-vlan"` + InterfaceMode E_VlanTypes_VlanModeType `path:"config/interface-mode" module:"openconfig-vlan/openconfig-vlan" shadow-path:"state/interface-mode" shadow-module:"openconfig-vlan/openconfig-vlan"` + NativeVlan *uint16 `path:"config/native-vlan" module:"openconfig-vlan/openconfig-vlan" shadow-path:"state/native-vlan" shadow-module:"openconfig-vlan/openconfig-vlan"` + TrunkVlans []Interface_Ethernet_SwitchedVlan_TrunkVlans_Union `path:"config/trunk-vlans" module:"openconfig-vlan/openconfig-vlan" shadow-path:"state/trunk-vlans" shadow-module:"openconfig-vlan/openconfig-vlan"` +} + +// IsYANGGoStruct ensures that Interface_Ethernet_SwitchedVlan implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*Interface_Ethernet_SwitchedVlan) IsYANGGoStruct() {} + +// GetAccessVlan retrieves the value of the leaf AccessVlan from the Interface_Ethernet_SwitchedVlan +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if AccessVlan is set, it can +// safely use t.GetAccessVlan() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.AccessVlan == nil' before retrieving the leaf's value. +func (t *Interface_Ethernet_SwitchedVlan) GetAccessVlan() uint16 { + if t == nil || t.AccessVlan == nil { + return 0 + } + return *t.AccessVlan +} + +// GetInterfaceMode retrieves the value of the leaf InterfaceMode from the Interface_Ethernet_SwitchedVlan +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if InterfaceMode is set, it can +// safely use t.GetInterfaceMode() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.InterfaceMode == nil' before retrieving the leaf's value. +func (t *Interface_Ethernet_SwitchedVlan) GetInterfaceMode() E_VlanTypes_VlanModeType { + if t == nil || t.InterfaceMode == 0 { + return 0 + } + return t.InterfaceMode +} + +// GetNativeVlan retrieves the value of the leaf NativeVlan from the Interface_Ethernet_SwitchedVlan +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if NativeVlan is set, it can +// safely use t.GetNativeVlan() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.NativeVlan == nil' before retrieving the leaf's value. +func (t *Interface_Ethernet_SwitchedVlan) GetNativeVlan() uint16 { + if t == nil || t.NativeVlan == nil { + return 0 + } + return *t.NativeVlan +} + +// GetTrunkVlans retrieves the value of the leaf TrunkVlans from the Interface_Ethernet_SwitchedVlan +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if TrunkVlans is set, it can +// safely use t.GetTrunkVlans() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.TrunkVlans == nil' before retrieving the leaf's value. +func (t *Interface_Ethernet_SwitchedVlan) GetTrunkVlans() []Interface_Ethernet_SwitchedVlan_TrunkVlans_Union { + if t == nil || t.TrunkVlans == nil { + return nil + } + return t.TrunkVlans +} + +// SetAccessVlan sets the value of the leaf AccessVlan in the Interface_Ethernet_SwitchedVlan +// struct. +func (t *Interface_Ethernet_SwitchedVlan) SetAccessVlan(v uint16) { + t.AccessVlan = &v +} + +// SetInterfaceMode sets the value of the leaf InterfaceMode in the Interface_Ethernet_SwitchedVlan +// struct. +func (t *Interface_Ethernet_SwitchedVlan) SetInterfaceMode(v E_VlanTypes_VlanModeType) { + t.InterfaceMode = v +} + +// SetNativeVlan sets the value of the leaf NativeVlan in the Interface_Ethernet_SwitchedVlan +// struct. +func (t *Interface_Ethernet_SwitchedVlan) SetNativeVlan(v uint16) { + t.NativeVlan = &v +} + +// SetTrunkVlans sets the value of the leaf TrunkVlans in the Interface_Ethernet_SwitchedVlan +// struct. +func (t *Interface_Ethernet_SwitchedVlan) SetTrunkVlans(v []Interface_Ethernet_SwitchedVlan_TrunkVlans_Union) { + t.TrunkVlans = v +} + +// PopulateDefaults recursively populates unset leaf fields in the Interface_Ethernet_SwitchedVlan +// with default values as specified in the YANG schema, instantiating any nil +// container fields. +func (t *Interface_Ethernet_SwitchedVlan) PopulateDefaults() { + if t == nil { + return + } + ygot.BuildEmptyTree(t) +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_Ethernet_SwitchedVlan) ΛValidate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["Interface_Ethernet_SwitchedVlan"], t, opts...); err != nil { + return err + } + return nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_Ethernet_SwitchedVlan) Validate(opts ...ygot.ValidationOption) error { + return t.ΛValidate(opts...) +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *Interface_Ethernet_SwitchedVlan) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// ΛBelongingModule returns the name of the module that defines the namespace +// of Interface_Ethernet_SwitchedVlan. +func (*Interface_Ethernet_SwitchedVlan) ΛBelongingModule() string { + return "openconfig-vlan" +} + +// Interface_HoldTime represents the /openconfig-interfaces/interfaces/interface/hold-time YANG schema element. +type Interface_HoldTime struct { + Down *uint32 `path:"config/down" module:"openconfig-interfaces/openconfig-interfaces" shadow-path:"state/down" shadow-module:"openconfig-interfaces/openconfig-interfaces"` + Up *uint32 `path:"config/up" module:"openconfig-interfaces/openconfig-interfaces" shadow-path:"state/up" shadow-module:"openconfig-interfaces/openconfig-interfaces"` +} + +// IsYANGGoStruct ensures that Interface_HoldTime implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*Interface_HoldTime) IsYANGGoStruct() {} + +// GetDown retrieves the value of the leaf Down from the Interface_HoldTime +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Down is set, it can +// safely use t.GetDown() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Down == nil' before retrieving the leaf's value. +func (t *Interface_HoldTime) GetDown() uint32 { + if t == nil || t.Down == nil { + return 0 + } + return *t.Down +} + +// GetUp retrieves the value of the leaf Up from the Interface_HoldTime +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Up is set, it can +// safely use t.GetUp() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Up == nil' before retrieving the leaf's value. +func (t *Interface_HoldTime) GetUp() uint32 { + if t == nil || t.Up == nil { + return 0 + } + return *t.Up +} + +// SetDown sets the value of the leaf Down in the Interface_HoldTime +// struct. +func (t *Interface_HoldTime) SetDown(v uint32) { + t.Down = &v +} + +// SetUp sets the value of the leaf Up in the Interface_HoldTime +// struct. +func (t *Interface_HoldTime) SetUp(v uint32) { + t.Up = &v +} + +// PopulateDefaults recursively populates unset leaf fields in the Interface_HoldTime +// with default values as specified in the YANG schema, instantiating any nil +// container fields. +func (t *Interface_HoldTime) PopulateDefaults() { + if t == nil { + return + } + ygot.BuildEmptyTree(t) + if t.Down == nil { + var v uint32 = 0 + t.Down = &v + } + if t.Up == nil { + var v uint32 = 0 + t.Up = &v + } +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_HoldTime) ΛValidate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["Interface_HoldTime"], t, opts...); err != nil { + return err + } + return nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_HoldTime) Validate(opts ...ygot.ValidationOption) error { + return t.ΛValidate(opts...) +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *Interface_HoldTime) ΛEnumTypeMap() map[string][]reflect.Type { return ΛEnumTypes } + +// ΛBelongingModule returns the name of the module that defines the namespace +// of Interface_HoldTime. +func (*Interface_HoldTime) ΛBelongingModule() string { + return "openconfig-interfaces" +} + +// Interface_PenaltyBasedAied represents the /openconfig-interfaces/interfaces/interface/penalty-based-aied YANG schema element. +type Interface_PenaltyBasedAied struct { + DecayHalfLife *uint32 `path:"config/decay-half-life" module:"openconfig-interfaces/openconfig-interfaces" shadow-path:"state/decay-half-life" shadow-module:"openconfig-interfaces/openconfig-interfaces"` + FlapPenalty *uint32 `path:"config/flap-penalty" module:"openconfig-interfaces/openconfig-interfaces" shadow-path:"state/flap-penalty" shadow-module:"openconfig-interfaces/openconfig-interfaces"` + MaxSuppressTime *uint32 `path:"config/max-suppress-time" module:"openconfig-interfaces/openconfig-interfaces" shadow-path:"state/max-suppress-time" shadow-module:"openconfig-interfaces/openconfig-interfaces"` + ReuseThreshold *uint32 `path:"config/reuse-threshold" module:"openconfig-interfaces/openconfig-interfaces" shadow-path:"state/reuse-threshold" shadow-module:"openconfig-interfaces/openconfig-interfaces"` + SuppressThreshold *uint32 `path:"config/suppress-threshold" module:"openconfig-interfaces/openconfig-interfaces" shadow-path:"state/suppress-threshold" shadow-module:"openconfig-interfaces/openconfig-interfaces"` +} + +// IsYANGGoStruct ensures that Interface_PenaltyBasedAied implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*Interface_PenaltyBasedAied) IsYANGGoStruct() {} + +// GetDecayHalfLife retrieves the value of the leaf DecayHalfLife from the Interface_PenaltyBasedAied +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if DecayHalfLife is set, it can +// safely use t.GetDecayHalfLife() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.DecayHalfLife == nil' before retrieving the leaf's value. +func (t *Interface_PenaltyBasedAied) GetDecayHalfLife() uint32 { + if t == nil || t.DecayHalfLife == nil { + return 0 + } + return *t.DecayHalfLife +} + +// GetFlapPenalty retrieves the value of the leaf FlapPenalty from the Interface_PenaltyBasedAied +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if FlapPenalty is set, it can +// safely use t.GetFlapPenalty() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.FlapPenalty == nil' before retrieving the leaf's value. +func (t *Interface_PenaltyBasedAied) GetFlapPenalty() uint32 { + if t == nil || t.FlapPenalty == nil { + return 0 + } + return *t.FlapPenalty +} + +// GetMaxSuppressTime retrieves the value of the leaf MaxSuppressTime from the Interface_PenaltyBasedAied +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if MaxSuppressTime is set, it can +// safely use t.GetMaxSuppressTime() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.MaxSuppressTime == nil' before retrieving the leaf's value. +func (t *Interface_PenaltyBasedAied) GetMaxSuppressTime() uint32 { + if t == nil || t.MaxSuppressTime == nil { + return 0 + } + return *t.MaxSuppressTime +} + +// GetReuseThreshold retrieves the value of the leaf ReuseThreshold from the Interface_PenaltyBasedAied +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if ReuseThreshold is set, it can +// safely use t.GetReuseThreshold() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.ReuseThreshold == nil' before retrieving the leaf's value. +func (t *Interface_PenaltyBasedAied) GetReuseThreshold() uint32 { + if t == nil || t.ReuseThreshold == nil { + return 0 + } + return *t.ReuseThreshold +} + +// GetSuppressThreshold retrieves the value of the leaf SuppressThreshold from the Interface_PenaltyBasedAied +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if SuppressThreshold is set, it can +// safely use t.GetSuppressThreshold() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.SuppressThreshold == nil' before retrieving the leaf's value. +func (t *Interface_PenaltyBasedAied) GetSuppressThreshold() uint32 { + if t == nil || t.SuppressThreshold == nil { + return 0 + } + return *t.SuppressThreshold +} + +// SetDecayHalfLife sets the value of the leaf DecayHalfLife in the Interface_PenaltyBasedAied +// struct. +func (t *Interface_PenaltyBasedAied) SetDecayHalfLife(v uint32) { + t.DecayHalfLife = &v +} + +// SetFlapPenalty sets the value of the leaf FlapPenalty in the Interface_PenaltyBasedAied +// struct. +func (t *Interface_PenaltyBasedAied) SetFlapPenalty(v uint32) { + t.FlapPenalty = &v +} + +// SetMaxSuppressTime sets the value of the leaf MaxSuppressTime in the Interface_PenaltyBasedAied +// struct. +func (t *Interface_PenaltyBasedAied) SetMaxSuppressTime(v uint32) { + t.MaxSuppressTime = &v +} + +// SetReuseThreshold sets the value of the leaf ReuseThreshold in the Interface_PenaltyBasedAied +// struct. +func (t *Interface_PenaltyBasedAied) SetReuseThreshold(v uint32) { + t.ReuseThreshold = &v +} + +// SetSuppressThreshold sets the value of the leaf SuppressThreshold in the Interface_PenaltyBasedAied +// struct. +func (t *Interface_PenaltyBasedAied) SetSuppressThreshold(v uint32) { + t.SuppressThreshold = &v +} + +// PopulateDefaults recursively populates unset leaf fields in the Interface_PenaltyBasedAied +// with default values as specified in the YANG schema, instantiating any nil +// container fields. +func (t *Interface_PenaltyBasedAied) PopulateDefaults() { + if t == nil { + return + } + ygot.BuildEmptyTree(t) + if t.DecayHalfLife == nil { + var v uint32 = 0 + t.DecayHalfLife = &v + } + if t.FlapPenalty == nil { + var v uint32 = 0 + t.FlapPenalty = &v + } + if t.MaxSuppressTime == nil { + var v uint32 = 0 + t.MaxSuppressTime = &v + } + if t.ReuseThreshold == nil { + var v uint32 = 0 + t.ReuseThreshold = &v + } + if t.SuppressThreshold == nil { + var v uint32 = 0 + t.SuppressThreshold = &v + } +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_PenaltyBasedAied) ΛValidate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["Interface_PenaltyBasedAied"], t, opts...); err != nil { + return err + } + return nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_PenaltyBasedAied) Validate(opts ...ygot.ValidationOption) error { + return t.ΛValidate(opts...) +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *Interface_PenaltyBasedAied) ΛEnumTypeMap() map[string][]reflect.Type { return ΛEnumTypes } + +// ΛBelongingModule returns the name of the module that defines the namespace +// of Interface_PenaltyBasedAied. +func (*Interface_PenaltyBasedAied) ΛBelongingModule() string { + return "openconfig-interfaces" +} + +// Interface_RoutedVlan represents the /openconfig-interfaces/interfaces/interface/routed-vlan YANG schema element. +type Interface_RoutedVlan struct { + Ipv4 *Interface_RoutedVlan_Ipv4 `path:"ipv4" module:"openconfig-if-ip"` + Ipv6 *Interface_RoutedVlan_Ipv6 `path:"ipv6" module:"openconfig-if-ip"` + Vlan Interface_RoutedVlan_Vlan_Union `path:"config/vlan" module:"openconfig-vlan/openconfig-vlan" shadow-path:"state/vlan" shadow-module:"openconfig-vlan/openconfig-vlan"` +} + +// IsYANGGoStruct ensures that Interface_RoutedVlan implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*Interface_RoutedVlan) IsYANGGoStruct() {} + +// GetOrCreateIpv4 retrieves the value of the Ipv4 field +// or returns the existing field if it already exists. +func (t *Interface_RoutedVlan) GetOrCreateIpv4() *Interface_RoutedVlan_Ipv4 { + if t.Ipv4 != nil { + return t.Ipv4 + } + t.Ipv4 = &Interface_RoutedVlan_Ipv4{} + return t.Ipv4 +} + +// GetOrCreateIpv6 retrieves the value of the Ipv6 field +// or returns the existing field if it already exists. +func (t *Interface_RoutedVlan) GetOrCreateIpv6() *Interface_RoutedVlan_Ipv6 { + if t.Ipv6 != nil { + return t.Ipv6 + } + t.Ipv6 = &Interface_RoutedVlan_Ipv6{} + return t.Ipv6 +} + +// GetIpv4 returns the value of the Ipv4 struct pointer +// from Interface_RoutedVlan. If the receiver or the field Ipv4 is nil, nil +// is returned such that the Get* methods can be safely chained. +func (t *Interface_RoutedVlan) GetIpv4() *Interface_RoutedVlan_Ipv4 { + if t != nil && t.Ipv4 != nil { + return t.Ipv4 + } + return nil +} + +// GetIpv6 returns the value of the Ipv6 struct pointer +// from Interface_RoutedVlan. If the receiver or the field Ipv6 is nil, nil +// is returned such that the Get* methods can be safely chained. +func (t *Interface_RoutedVlan) GetIpv6() *Interface_RoutedVlan_Ipv6 { + if t != nil && t.Ipv6 != nil { + return t.Ipv6 + } + return nil +} + +// GetVlan retrieves the value of the leaf Vlan from the Interface_RoutedVlan +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Vlan is set, it can +// safely use t.GetVlan() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Vlan == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan) GetVlan() Interface_RoutedVlan_Vlan_Union { + if t == nil || t.Vlan == nil { + return nil + } + return t.Vlan +} + +// SetVlan sets the value of the leaf Vlan in the Interface_RoutedVlan +// struct. +func (t *Interface_RoutedVlan) SetVlan(v Interface_RoutedVlan_Vlan_Union) { + t.Vlan = v +} + +// PopulateDefaults recursively populates unset leaf fields in the Interface_RoutedVlan +// with default values as specified in the YANG schema, instantiating any nil +// container fields. +func (t *Interface_RoutedVlan) PopulateDefaults() { + if t == nil { + return + } + ygot.BuildEmptyTree(t) + t.Ipv4.PopulateDefaults() + t.Ipv6.PopulateDefaults() +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_RoutedVlan) ΛValidate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["Interface_RoutedVlan"], t, opts...); err != nil { + return err + } + return nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_RoutedVlan) Validate(opts ...ygot.ValidationOption) error { + return t.ΛValidate(opts...) +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *Interface_RoutedVlan) ΛEnumTypeMap() map[string][]reflect.Type { return ΛEnumTypes } + +// ΛBelongingModule returns the name of the module that defines the namespace +// of Interface_RoutedVlan. +func (*Interface_RoutedVlan) ΛBelongingModule() string { + return "openconfig-vlan" +} + +// Interface_RoutedVlan_Ipv4 represents the /openconfig-interfaces/interfaces/interface/routed-vlan/ipv4 YANG schema element. +type Interface_RoutedVlan_Ipv4 struct { + Address map[string]*Interface_RoutedVlan_Ipv4_Address `path:"addresses/address" module:"openconfig-if-ip/openconfig-if-ip"` + Counters *Interface_RoutedVlan_Ipv4_Counters `path:"state/counters" module:"openconfig-if-ip/openconfig-if-ip"` + DhcpClient *bool `path:"config/dhcp-client" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/dhcp-client" shadow-module:"openconfig-if-ip/openconfig-if-ip"` + Enabled *bool `path:"config/enabled" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/enabled" shadow-module:"openconfig-if-ip/openconfig-if-ip"` + GratuitousArpAccepted *bool `path:"config/gratuitous-arp-accepted" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/gratuitous-arp-accepted" shadow-module:"openconfig-if-ip/openconfig-if-ip"` + Mtu *uint16 `path:"config/mtu" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/mtu" shadow-module:"openconfig-if-ip/openconfig-if-ip"` + Neighbor map[string]*Interface_RoutedVlan_Ipv4_Neighbor `path:"neighbors/neighbor" module:"openconfig-if-ip/openconfig-if-ip"` + ProxyArp *Interface_RoutedVlan_Ipv4_ProxyArp `path:"proxy-arp" module:"openconfig-if-ip"` + Unnumbered *Interface_RoutedVlan_Ipv4_Unnumbered `path:"unnumbered" module:"openconfig-if-ip"` +} + +// IsYANGGoStruct ensures that Interface_RoutedVlan_Ipv4 implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*Interface_RoutedVlan_Ipv4) IsYANGGoStruct() {} + +// NewAddress creates a new entry in the Address list of the +// Interface_RoutedVlan_Ipv4 struct. The keys of the list are populated from the input +// arguments. +func (t *Interface_RoutedVlan_Ipv4) NewAddress(Ip string) (*Interface_RoutedVlan_Ipv4_Address, error) { + + // Initialise the list within the receiver struct if it has not already been + // created. + if t.Address == nil { + t.Address = make(map[string]*Interface_RoutedVlan_Ipv4_Address) + } + + key := Ip + + // Ensure that this key has not already been used in the + // list. Keyed YANG lists do not allow duplicate keys to + // be created. + if _, ok := t.Address[key]; ok { + return nil, fmt.Errorf("duplicate key %v for list Address", key) + } + + t.Address[key] = &Interface_RoutedVlan_Ipv4_Address{ + Ip: &Ip, + } + + return t.Address[key], nil +} + +// RenameAddress renames an entry in the list Address within +// the Interface_RoutedVlan_Ipv4 struct. The entry with key oldK is renamed to newK updating +// the key within the value. +func (t *Interface_RoutedVlan_Ipv4) RenameAddress(oldK, newK string) error { + if _, ok := t.Address[newK]; ok { + return fmt.Errorf("key %v already exists in Address", newK) + } + + e, ok := t.Address[oldK] + if !ok { + return fmt.Errorf("key %v not found in Address", oldK) + } + e.Ip = &newK + + t.Address[newK] = e + delete(t.Address, oldK) + return nil +} + +// GetOrCreateAddressMap returns the list (map) from Interface_RoutedVlan_Ipv4. +// +// It initializes the field if not already initialized. +func (t *Interface_RoutedVlan_Ipv4) GetOrCreateAddressMap() map[string]*Interface_RoutedVlan_Ipv4_Address { + if t.Address == nil { + t.Address = make(map[string]*Interface_RoutedVlan_Ipv4_Address) + } + return t.Address +} + +// GetOrCreateAddress retrieves the value with the specified keys from +// the receiver Interface_RoutedVlan_Ipv4. If the entry does not exist, then it is created. +// It returns the existing or new list member. +func (t *Interface_RoutedVlan_Ipv4) GetOrCreateAddress(Ip string) *Interface_RoutedVlan_Ipv4_Address { + + key := Ip + + if v, ok := t.Address[key]; ok { + return v + } + // Panic if we receive an error, since we should have retrieved an existing + // list member. This allows chaining of GetOrCreate methods. + v, err := t.NewAddress(Ip) + if err != nil { + panic(fmt.Sprintf("GetOrCreateAddress got unexpected error: %v", err)) + } + return v +} + +// GetAddress retrieves the value with the specified key from +// the Address map field of Interface_RoutedVlan_Ipv4. If the receiver is nil, or +// the specified key is not present in the list, nil is returned such that Get* +// methods may be safely chained. +func (t *Interface_RoutedVlan_Ipv4) GetAddress(Ip string) *Interface_RoutedVlan_Ipv4_Address { + + if t == nil { + return nil + } + + key := Ip + + if lm, ok := t.Address[key]; ok { + return lm + } + return nil +} + +// DeleteAddress deletes the value with the specified keys from +// the receiver Interface_RoutedVlan_Ipv4. If there is no such element, the function +// is a no-op. +func (t *Interface_RoutedVlan_Ipv4) DeleteAddress(Ip string) { + key := Ip + + delete(t.Address, key) +} + +// AppendAddress appends the supplied Interface_RoutedVlan_Ipv4_Address struct to the +// list Address of Interface_RoutedVlan_Ipv4. If the key value(s) specified in +// the supplied Interface_RoutedVlan_Ipv4_Address already exist in the list, an error is +// returned. +func (t *Interface_RoutedVlan_Ipv4) AppendAddress(v *Interface_RoutedVlan_Ipv4_Address) error { + if v.Ip == nil { + return fmt.Errorf("invalid nil key received for Ip") + } + + key := *v.Ip + + // Initialise the list within the receiver struct if it has not already been + // created. + if t.Address == nil { + t.Address = make(map[string]*Interface_RoutedVlan_Ipv4_Address) + } + + if _, ok := t.Address[key]; ok { + return fmt.Errorf("duplicate key for list Address %v", key) + } + + t.Address[key] = v + return nil +} + +// NewNeighbor creates a new entry in the Neighbor list of the +// Interface_RoutedVlan_Ipv4 struct. The keys of the list are populated from the input +// arguments. +func (t *Interface_RoutedVlan_Ipv4) NewNeighbor(Ip string) (*Interface_RoutedVlan_Ipv4_Neighbor, error) { + + // Initialise the list within the receiver struct if it has not already been + // created. + if t.Neighbor == nil { + t.Neighbor = make(map[string]*Interface_RoutedVlan_Ipv4_Neighbor) + } + + key := Ip + + // Ensure that this key has not already been used in the + // list. Keyed YANG lists do not allow duplicate keys to + // be created. + if _, ok := t.Neighbor[key]; ok { + return nil, fmt.Errorf("duplicate key %v for list Neighbor", key) + } + + t.Neighbor[key] = &Interface_RoutedVlan_Ipv4_Neighbor{ + Ip: &Ip, + } + + return t.Neighbor[key], nil +} + +// RenameNeighbor renames an entry in the list Neighbor within +// the Interface_RoutedVlan_Ipv4 struct. The entry with key oldK is renamed to newK updating +// the key within the value. +func (t *Interface_RoutedVlan_Ipv4) RenameNeighbor(oldK, newK string) error { + if _, ok := t.Neighbor[newK]; ok { + return fmt.Errorf("key %v already exists in Neighbor", newK) + } + + e, ok := t.Neighbor[oldK] + if !ok { + return fmt.Errorf("key %v not found in Neighbor", oldK) + } + e.Ip = &newK + + t.Neighbor[newK] = e + delete(t.Neighbor, oldK) + return nil +} + +// GetOrCreateNeighborMap returns the list (map) from Interface_RoutedVlan_Ipv4. +// +// It initializes the field if not already initialized. +func (t *Interface_RoutedVlan_Ipv4) GetOrCreateNeighborMap() map[string]*Interface_RoutedVlan_Ipv4_Neighbor { + if t.Neighbor == nil { + t.Neighbor = make(map[string]*Interface_RoutedVlan_Ipv4_Neighbor) + } + return t.Neighbor +} + +// GetOrCreateNeighbor retrieves the value with the specified keys from +// the receiver Interface_RoutedVlan_Ipv4. If the entry does not exist, then it is created. +// It returns the existing or new list member. +func (t *Interface_RoutedVlan_Ipv4) GetOrCreateNeighbor(Ip string) *Interface_RoutedVlan_Ipv4_Neighbor { + + key := Ip + + if v, ok := t.Neighbor[key]; ok { + return v + } + // Panic if we receive an error, since we should have retrieved an existing + // list member. This allows chaining of GetOrCreate methods. + v, err := t.NewNeighbor(Ip) + if err != nil { + panic(fmt.Sprintf("GetOrCreateNeighbor got unexpected error: %v", err)) + } + return v +} + +// GetNeighbor retrieves the value with the specified key from +// the Neighbor map field of Interface_RoutedVlan_Ipv4. If the receiver is nil, or +// the specified key is not present in the list, nil is returned such that Get* +// methods may be safely chained. +func (t *Interface_RoutedVlan_Ipv4) GetNeighbor(Ip string) *Interface_RoutedVlan_Ipv4_Neighbor { + + if t == nil { + return nil + } + + key := Ip + + if lm, ok := t.Neighbor[key]; ok { + return lm + } + return nil +} + +// DeleteNeighbor deletes the value with the specified keys from +// the receiver Interface_RoutedVlan_Ipv4. If there is no such element, the function +// is a no-op. +func (t *Interface_RoutedVlan_Ipv4) DeleteNeighbor(Ip string) { + key := Ip + + delete(t.Neighbor, key) +} + +// AppendNeighbor appends the supplied Interface_RoutedVlan_Ipv4_Neighbor struct to the +// list Neighbor of Interface_RoutedVlan_Ipv4. If the key value(s) specified in +// the supplied Interface_RoutedVlan_Ipv4_Neighbor already exist in the list, an error is +// returned. +func (t *Interface_RoutedVlan_Ipv4) AppendNeighbor(v *Interface_RoutedVlan_Ipv4_Neighbor) error { + if v.Ip == nil { + return fmt.Errorf("invalid nil key received for Ip") + } + + key := *v.Ip + + // Initialise the list within the receiver struct if it has not already been + // created. + if t.Neighbor == nil { + t.Neighbor = make(map[string]*Interface_RoutedVlan_Ipv4_Neighbor) + } + + if _, ok := t.Neighbor[key]; ok { + return fmt.Errorf("duplicate key for list Neighbor %v", key) + } + + t.Neighbor[key] = v + return nil +} + +// GetOrCreateCounters retrieves the value of the Counters field +// or returns the existing field if it already exists. +func (t *Interface_RoutedVlan_Ipv4) GetOrCreateCounters() *Interface_RoutedVlan_Ipv4_Counters { + if t.Counters != nil { + return t.Counters + } + t.Counters = &Interface_RoutedVlan_Ipv4_Counters{} + return t.Counters +} + +// GetOrCreateProxyArp retrieves the value of the ProxyArp field +// or returns the existing field if it already exists. +func (t *Interface_RoutedVlan_Ipv4) GetOrCreateProxyArp() *Interface_RoutedVlan_Ipv4_ProxyArp { + if t.ProxyArp != nil { + return t.ProxyArp + } + t.ProxyArp = &Interface_RoutedVlan_Ipv4_ProxyArp{} + return t.ProxyArp +} + +// GetOrCreateUnnumbered retrieves the value of the Unnumbered field +// or returns the existing field if it already exists. +func (t *Interface_RoutedVlan_Ipv4) GetOrCreateUnnumbered() *Interface_RoutedVlan_Ipv4_Unnumbered { + if t.Unnumbered != nil { + return t.Unnumbered + } + t.Unnumbered = &Interface_RoutedVlan_Ipv4_Unnumbered{} + return t.Unnumbered +} + +// GetCounters returns the value of the Counters struct pointer +// from Interface_RoutedVlan_Ipv4. If the receiver or the field Counters is nil, nil +// is returned such that the Get* methods can be safely chained. +func (t *Interface_RoutedVlan_Ipv4) GetCounters() *Interface_RoutedVlan_Ipv4_Counters { + if t != nil && t.Counters != nil { + return t.Counters + } + return nil +} + +// GetProxyArp returns the value of the ProxyArp struct pointer +// from Interface_RoutedVlan_Ipv4. If the receiver or the field ProxyArp is nil, nil +// is returned such that the Get* methods can be safely chained. +func (t *Interface_RoutedVlan_Ipv4) GetProxyArp() *Interface_RoutedVlan_Ipv4_ProxyArp { + if t != nil && t.ProxyArp != nil { + return t.ProxyArp + } + return nil +} + +// GetUnnumbered returns the value of the Unnumbered struct pointer +// from Interface_RoutedVlan_Ipv4. If the receiver or the field Unnumbered is nil, nil +// is returned such that the Get* methods can be safely chained. +func (t *Interface_RoutedVlan_Ipv4) GetUnnumbered() *Interface_RoutedVlan_Ipv4_Unnumbered { + if t != nil && t.Unnumbered != nil { + return t.Unnumbered + } + return nil +} + +// GetDhcpClient retrieves the value of the leaf DhcpClient from the Interface_RoutedVlan_Ipv4 +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if DhcpClient is set, it can +// safely use t.GetDhcpClient() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.DhcpClient == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv4) GetDhcpClient() bool { + if t == nil || t.DhcpClient == nil { + return false + } + return *t.DhcpClient +} + +// GetEnabled retrieves the value of the leaf Enabled from the Interface_RoutedVlan_Ipv4 +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Enabled is set, it can +// safely use t.GetEnabled() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Enabled == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv4) GetEnabled() bool { + if t == nil || t.Enabled == nil { + return true + } + return *t.Enabled +} + +// GetGratuitousArpAccepted retrieves the value of the leaf GratuitousArpAccepted from the Interface_RoutedVlan_Ipv4 +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if GratuitousArpAccepted is set, it can +// safely use t.GetGratuitousArpAccepted() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.GratuitousArpAccepted == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv4) GetGratuitousArpAccepted() bool { + if t == nil || t.GratuitousArpAccepted == nil { + return false + } + return *t.GratuitousArpAccepted +} + +// GetMtu retrieves the value of the leaf Mtu from the Interface_RoutedVlan_Ipv4 +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Mtu is set, it can +// safely use t.GetMtu() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Mtu == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv4) GetMtu() uint16 { + if t == nil || t.Mtu == nil { + return 0 + } + return *t.Mtu +} + +// SetDhcpClient sets the value of the leaf DhcpClient in the Interface_RoutedVlan_Ipv4 +// struct. +func (t *Interface_RoutedVlan_Ipv4) SetDhcpClient(v bool) { + t.DhcpClient = &v +} + +// SetEnabled sets the value of the leaf Enabled in the Interface_RoutedVlan_Ipv4 +// struct. +func (t *Interface_RoutedVlan_Ipv4) SetEnabled(v bool) { + t.Enabled = &v +} + +// SetGratuitousArpAccepted sets the value of the leaf GratuitousArpAccepted in the Interface_RoutedVlan_Ipv4 +// struct. +func (t *Interface_RoutedVlan_Ipv4) SetGratuitousArpAccepted(v bool) { + t.GratuitousArpAccepted = &v +} + +// SetMtu sets the value of the leaf Mtu in the Interface_RoutedVlan_Ipv4 +// struct. +func (t *Interface_RoutedVlan_Ipv4) SetMtu(v uint16) { + t.Mtu = &v +} + +// PopulateDefaults recursively populates unset leaf fields in the Interface_RoutedVlan_Ipv4 +// with default values as specified in the YANG schema, instantiating any nil +// container fields. +func (t *Interface_RoutedVlan_Ipv4) PopulateDefaults() { + if t == nil { + return + } + ygot.BuildEmptyTree(t) + if t.DhcpClient == nil { + var v bool = false + t.DhcpClient = &v + } + if t.Enabled == nil { + var v bool = true + t.Enabled = &v + } + t.Counters.PopulateDefaults() + t.ProxyArp.PopulateDefaults() + t.Unnumbered.PopulateDefaults() + for _, e := range t.Address { + e.PopulateDefaults() + } + for _, e := range t.Neighbor { + e.PopulateDefaults() + } +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_RoutedVlan_Ipv4) ΛValidate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["Interface_RoutedVlan_Ipv4"], t, opts...); err != nil { + return err + } + return nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_RoutedVlan_Ipv4) Validate(opts ...ygot.ValidationOption) error { + return t.ΛValidate(opts...) +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *Interface_RoutedVlan_Ipv4) ΛEnumTypeMap() map[string][]reflect.Type { return ΛEnumTypes } + +// ΛBelongingModule returns the name of the module that defines the namespace +// of Interface_RoutedVlan_Ipv4. +func (*Interface_RoutedVlan_Ipv4) ΛBelongingModule() string { + return "openconfig-if-ip" +} + +// Interface_RoutedVlan_Ipv4_Address represents the /openconfig-interfaces/interfaces/interface/routed-vlan/ipv4/addresses/address YANG schema element. +type Interface_RoutedVlan_Ipv4_Address struct { + Ip *string `path:"config/ip|ip" module:"openconfig-if-ip/openconfig-if-ip|openconfig-if-ip" shadow-path:"state/ip|ip" shadow-module:"openconfig-if-ip/openconfig-if-ip|openconfig-if-ip"` + Origin E_IfIp_IpAddressOrigin `path:"state/origin" module:"openconfig-if-ip/openconfig-if-ip"` + PrefixLength *uint8 `path:"config/prefix-length" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/prefix-length" shadow-module:"openconfig-if-ip/openconfig-if-ip"` + Type E_IfIp_Ipv4AddressType `path:"config/type" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/type" shadow-module:"openconfig-if-ip/openconfig-if-ip"` + VrrpGroup map[uint8]*Interface_RoutedVlan_Ipv4_Address_VrrpGroup `path:"vrrp/vrrp-group" module:"openconfig-if-ip/openconfig-if-ip"` +} + +// IsYANGGoStruct ensures that Interface_RoutedVlan_Ipv4_Address implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*Interface_RoutedVlan_Ipv4_Address) IsYANGGoStruct() {} + +// NewVrrpGroup creates a new entry in the VrrpGroup list of the +// Interface_RoutedVlan_Ipv4_Address struct. The keys of the list are populated from the input +// arguments. +func (t *Interface_RoutedVlan_Ipv4_Address) NewVrrpGroup(VirtualRouterId uint8) (*Interface_RoutedVlan_Ipv4_Address_VrrpGroup, error) { + + // Initialise the list within the receiver struct if it has not already been + // created. + if t.VrrpGroup == nil { + t.VrrpGroup = make(map[uint8]*Interface_RoutedVlan_Ipv4_Address_VrrpGroup) + } + + key := VirtualRouterId + + // Ensure that this key has not already been used in the + // list. Keyed YANG lists do not allow duplicate keys to + // be created. + if _, ok := t.VrrpGroup[key]; ok { + return nil, fmt.Errorf("duplicate key %v for list VrrpGroup", key) + } + + t.VrrpGroup[key] = &Interface_RoutedVlan_Ipv4_Address_VrrpGroup{ + VirtualRouterId: &VirtualRouterId, + } + + return t.VrrpGroup[key], nil +} + +// RenameVrrpGroup renames an entry in the list VrrpGroup within +// the Interface_RoutedVlan_Ipv4_Address struct. The entry with key oldK is renamed to newK updating +// the key within the value. +func (t *Interface_RoutedVlan_Ipv4_Address) RenameVrrpGroup(oldK, newK uint8) error { + if _, ok := t.VrrpGroup[newK]; ok { + return fmt.Errorf("key %v already exists in VrrpGroup", newK) + } + + e, ok := t.VrrpGroup[oldK] + if !ok { + return fmt.Errorf("key %v not found in VrrpGroup", oldK) + } + e.VirtualRouterId = &newK + + t.VrrpGroup[newK] = e + delete(t.VrrpGroup, oldK) + return nil +} + +// GetOrCreateVrrpGroupMap returns the list (map) from Interface_RoutedVlan_Ipv4_Address. +// +// It initializes the field if not already initialized. +func (t *Interface_RoutedVlan_Ipv4_Address) GetOrCreateVrrpGroupMap() map[uint8]*Interface_RoutedVlan_Ipv4_Address_VrrpGroup { + if t.VrrpGroup == nil { + t.VrrpGroup = make(map[uint8]*Interface_RoutedVlan_Ipv4_Address_VrrpGroup) + } + return t.VrrpGroup +} + +// GetOrCreateVrrpGroup retrieves the value with the specified keys from +// the receiver Interface_RoutedVlan_Ipv4_Address. If the entry does not exist, then it is created. +// It returns the existing or new list member. +func (t *Interface_RoutedVlan_Ipv4_Address) GetOrCreateVrrpGroup(VirtualRouterId uint8) *Interface_RoutedVlan_Ipv4_Address_VrrpGroup { + + key := VirtualRouterId + + if v, ok := t.VrrpGroup[key]; ok { + return v + } + // Panic if we receive an error, since we should have retrieved an existing + // list member. This allows chaining of GetOrCreate methods. + v, err := t.NewVrrpGroup(VirtualRouterId) + if err != nil { + panic(fmt.Sprintf("GetOrCreateVrrpGroup got unexpected error: %v", err)) + } + return v +} + +// GetVrrpGroup retrieves the value with the specified key from +// the VrrpGroup map field of Interface_RoutedVlan_Ipv4_Address. If the receiver is nil, or +// the specified key is not present in the list, nil is returned such that Get* +// methods may be safely chained. +func (t *Interface_RoutedVlan_Ipv4_Address) GetVrrpGroup(VirtualRouterId uint8) *Interface_RoutedVlan_Ipv4_Address_VrrpGroup { + + if t == nil { + return nil + } + + key := VirtualRouterId + + if lm, ok := t.VrrpGroup[key]; ok { + return lm + } + return nil +} + +// DeleteVrrpGroup deletes the value with the specified keys from +// the receiver Interface_RoutedVlan_Ipv4_Address. If there is no such element, the function +// is a no-op. +func (t *Interface_RoutedVlan_Ipv4_Address) DeleteVrrpGroup(VirtualRouterId uint8) { + key := VirtualRouterId + + delete(t.VrrpGroup, key) +} + +// AppendVrrpGroup appends the supplied Interface_RoutedVlan_Ipv4_Address_VrrpGroup struct to the +// list VrrpGroup of Interface_RoutedVlan_Ipv4_Address. If the key value(s) specified in +// the supplied Interface_RoutedVlan_Ipv4_Address_VrrpGroup already exist in the list, an error is +// returned. +func (t *Interface_RoutedVlan_Ipv4_Address) AppendVrrpGroup(v *Interface_RoutedVlan_Ipv4_Address_VrrpGroup) error { + if v.VirtualRouterId == nil { + return fmt.Errorf("invalid nil key received for VirtualRouterId") + } + + key := *v.VirtualRouterId + + // Initialise the list within the receiver struct if it has not already been + // created. + if t.VrrpGroup == nil { + t.VrrpGroup = make(map[uint8]*Interface_RoutedVlan_Ipv4_Address_VrrpGroup) + } + + if _, ok := t.VrrpGroup[key]; ok { + return fmt.Errorf("duplicate key for list VrrpGroup %v", key) + } + + t.VrrpGroup[key] = v + return nil +} + +// GetIp retrieves the value of the leaf Ip from the Interface_RoutedVlan_Ipv4_Address +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Ip is set, it can +// safely use t.GetIp() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Ip == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv4_Address) GetIp() string { + if t == nil || t.Ip == nil { + return "" + } + return *t.Ip +} + +// GetOrigin retrieves the value of the leaf Origin from the Interface_RoutedVlan_Ipv4_Address +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Origin is set, it can +// safely use t.GetOrigin() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Origin == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv4_Address) GetOrigin() E_IfIp_IpAddressOrigin { + if t == nil || t.Origin == 0 { + return 0 + } + return t.Origin +} + +// GetPrefixLength retrieves the value of the leaf PrefixLength from the Interface_RoutedVlan_Ipv4_Address +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if PrefixLength is set, it can +// safely use t.GetPrefixLength() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.PrefixLength == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv4_Address) GetPrefixLength() uint8 { + if t == nil || t.PrefixLength == nil { + return 0 + } + return *t.PrefixLength +} + +// GetType retrieves the value of the leaf Type from the Interface_RoutedVlan_Ipv4_Address +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Type is set, it can +// safely use t.GetType() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Type == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv4_Address) GetType() E_IfIp_Ipv4AddressType { + if t == nil || t.Type == 0 { + return IfIp_Ipv4AddressType_PRIMARY + } + return t.Type +} + +// SetIp sets the value of the leaf Ip in the Interface_RoutedVlan_Ipv4_Address +// struct. +func (t *Interface_RoutedVlan_Ipv4_Address) SetIp(v string) { + t.Ip = &v +} + +// SetOrigin sets the value of the leaf Origin in the Interface_RoutedVlan_Ipv4_Address +// struct. +func (t *Interface_RoutedVlan_Ipv4_Address) SetOrigin(v E_IfIp_IpAddressOrigin) { + t.Origin = v +} + +// SetPrefixLength sets the value of the leaf PrefixLength in the Interface_RoutedVlan_Ipv4_Address +// struct. +func (t *Interface_RoutedVlan_Ipv4_Address) SetPrefixLength(v uint8) { + t.PrefixLength = &v +} + +// SetType sets the value of the leaf Type in the Interface_RoutedVlan_Ipv4_Address +// struct. +func (t *Interface_RoutedVlan_Ipv4_Address) SetType(v E_IfIp_Ipv4AddressType) { + t.Type = v +} + +// PopulateDefaults recursively populates unset leaf fields in the Interface_RoutedVlan_Ipv4_Address +// with default values as specified in the YANG schema, instantiating any nil +// container fields. +func (t *Interface_RoutedVlan_Ipv4_Address) PopulateDefaults() { + if t == nil { + return + } + ygot.BuildEmptyTree(t) + if t.Type == 0 { + t.Type = IfIp_Ipv4AddressType_PRIMARY + } + for _, e := range t.VrrpGroup { + e.PopulateDefaults() + } +} + +// ΛListKeyMap returns the keys of the Interface_RoutedVlan_Ipv4_Address struct, which is a YANG list entry. +func (t *Interface_RoutedVlan_Ipv4_Address) ΛListKeyMap() (map[string]interface{}, error) { + if t.Ip == nil { + return nil, fmt.Errorf("nil value for key Ip") + } + + return map[string]interface{}{ + "ip": *t.Ip, + }, nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_RoutedVlan_Ipv4_Address) ΛValidate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["Interface_RoutedVlan_Ipv4_Address"], t, opts...); err != nil { + return err + } + return nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_RoutedVlan_Ipv4_Address) Validate(opts ...ygot.ValidationOption) error { + return t.ΛValidate(opts...) +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *Interface_RoutedVlan_Ipv4_Address) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// ΛBelongingModule returns the name of the module that defines the namespace +// of Interface_RoutedVlan_Ipv4_Address. +func (*Interface_RoutedVlan_Ipv4_Address) ΛBelongingModule() string { + return "openconfig-if-ip" +} + +// Interface_RoutedVlan_Ipv4_Address_VrrpGroup represents the /openconfig-interfaces/interfaces/interface/routed-vlan/ipv4/addresses/address/vrrp/vrrp-group YANG schema element. +type Interface_RoutedVlan_Ipv4_Address_VrrpGroup struct { + AcceptMode *bool `path:"config/accept-mode" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/accept-mode" shadow-module:"openconfig-if-ip/openconfig-if-ip"` + AdvertisementInterval *uint16 `path:"config/advertisement-interval" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/advertisement-interval" shadow-module:"openconfig-if-ip/openconfig-if-ip"` + CurrentPriority *uint8 `path:"state/current-priority" module:"openconfig-if-ip/openconfig-if-ip"` + InterfaceTracking *Interface_RoutedVlan_Ipv4_Address_VrrpGroup_InterfaceTracking `path:"interface-tracking" module:"openconfig-if-ip"` + Preempt *bool `path:"config/preempt" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/preempt" shadow-module:"openconfig-if-ip/openconfig-if-ip"` + PreemptDelay *uint16 `path:"config/preempt-delay" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/preempt-delay" shadow-module:"openconfig-if-ip/openconfig-if-ip"` + Priority *uint8 `path:"config/priority" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/priority" shadow-module:"openconfig-if-ip/openconfig-if-ip"` + VirtualAddress []string `path:"config/virtual-address" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/virtual-address" shadow-module:"openconfig-if-ip/openconfig-if-ip"` + VirtualRouterId *uint8 `path:"config/virtual-router-id|virtual-router-id" module:"openconfig-if-ip/openconfig-if-ip|openconfig-if-ip" shadow-path:"state/virtual-router-id|virtual-router-id" shadow-module:"openconfig-if-ip/openconfig-if-ip|openconfig-if-ip"` +} + +// IsYANGGoStruct ensures that Interface_RoutedVlan_Ipv4_Address_VrrpGroup implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*Interface_RoutedVlan_Ipv4_Address_VrrpGroup) IsYANGGoStruct() {} + +// GetOrCreateInterfaceTracking retrieves the value of the InterfaceTracking field +// or returns the existing field if it already exists. +func (t *Interface_RoutedVlan_Ipv4_Address_VrrpGroup) GetOrCreateInterfaceTracking() *Interface_RoutedVlan_Ipv4_Address_VrrpGroup_InterfaceTracking { + if t.InterfaceTracking != nil { + return t.InterfaceTracking + } + t.InterfaceTracking = &Interface_RoutedVlan_Ipv4_Address_VrrpGroup_InterfaceTracking{} + return t.InterfaceTracking +} + +// GetInterfaceTracking returns the value of the InterfaceTracking struct pointer +// from Interface_RoutedVlan_Ipv4_Address_VrrpGroup. If the receiver or the field InterfaceTracking is nil, nil +// is returned such that the Get* methods can be safely chained. +func (t *Interface_RoutedVlan_Ipv4_Address_VrrpGroup) GetInterfaceTracking() *Interface_RoutedVlan_Ipv4_Address_VrrpGroup_InterfaceTracking { + if t != nil && t.InterfaceTracking != nil { + return t.InterfaceTracking + } + return nil +} + +// GetAcceptMode retrieves the value of the leaf AcceptMode from the Interface_RoutedVlan_Ipv4_Address_VrrpGroup +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if AcceptMode is set, it can +// safely use t.GetAcceptMode() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.AcceptMode == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv4_Address_VrrpGroup) GetAcceptMode() bool { + if t == nil || t.AcceptMode == nil { + return false + } + return *t.AcceptMode +} + +// GetAdvertisementInterval retrieves the value of the leaf AdvertisementInterval from the Interface_RoutedVlan_Ipv4_Address_VrrpGroup +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if AdvertisementInterval is set, it can +// safely use t.GetAdvertisementInterval() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.AdvertisementInterval == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv4_Address_VrrpGroup) GetAdvertisementInterval() uint16 { + if t == nil || t.AdvertisementInterval == nil { + return 100 + } + return *t.AdvertisementInterval +} + +// GetCurrentPriority retrieves the value of the leaf CurrentPriority from the Interface_RoutedVlan_Ipv4_Address_VrrpGroup +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if CurrentPriority is set, it can +// safely use t.GetCurrentPriority() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.CurrentPriority == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv4_Address_VrrpGroup) GetCurrentPriority() uint8 { + if t == nil || t.CurrentPriority == nil { + return 0 + } + return *t.CurrentPriority +} + +// GetPreempt retrieves the value of the leaf Preempt from the Interface_RoutedVlan_Ipv4_Address_VrrpGroup +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Preempt is set, it can +// safely use t.GetPreempt() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Preempt == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv4_Address_VrrpGroup) GetPreempt() bool { + if t == nil || t.Preempt == nil { + return true + } + return *t.Preempt +} + +// GetPreemptDelay retrieves the value of the leaf PreemptDelay from the Interface_RoutedVlan_Ipv4_Address_VrrpGroup +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if PreemptDelay is set, it can +// safely use t.GetPreemptDelay() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.PreemptDelay == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv4_Address_VrrpGroup) GetPreemptDelay() uint16 { + if t == nil || t.PreemptDelay == nil { + return 0 + } + return *t.PreemptDelay +} + +// GetPriority retrieves the value of the leaf Priority from the Interface_RoutedVlan_Ipv4_Address_VrrpGroup +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Priority is set, it can +// safely use t.GetPriority() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Priority == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv4_Address_VrrpGroup) GetPriority() uint8 { + if t == nil || t.Priority == nil { + return 100 + } + return *t.Priority +} + +// GetVirtualAddress retrieves the value of the leaf VirtualAddress from the Interface_RoutedVlan_Ipv4_Address_VrrpGroup +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if VirtualAddress is set, it can +// safely use t.GetVirtualAddress() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.VirtualAddress == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv4_Address_VrrpGroup) GetVirtualAddress() []string { + if t == nil || t.VirtualAddress == nil { + return nil + } + return t.VirtualAddress +} + +// GetVirtualRouterId retrieves the value of the leaf VirtualRouterId from the Interface_RoutedVlan_Ipv4_Address_VrrpGroup +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if VirtualRouterId is set, it can +// safely use t.GetVirtualRouterId() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.VirtualRouterId == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv4_Address_VrrpGroup) GetVirtualRouterId() uint8 { + if t == nil || t.VirtualRouterId == nil { + return 0 + } + return *t.VirtualRouterId +} + +// SetAcceptMode sets the value of the leaf AcceptMode in the Interface_RoutedVlan_Ipv4_Address_VrrpGroup +// struct. +func (t *Interface_RoutedVlan_Ipv4_Address_VrrpGroup) SetAcceptMode(v bool) { + t.AcceptMode = &v +} + +// SetAdvertisementInterval sets the value of the leaf AdvertisementInterval in the Interface_RoutedVlan_Ipv4_Address_VrrpGroup +// struct. +func (t *Interface_RoutedVlan_Ipv4_Address_VrrpGroup) SetAdvertisementInterval(v uint16) { + t.AdvertisementInterval = &v +} + +// SetCurrentPriority sets the value of the leaf CurrentPriority in the Interface_RoutedVlan_Ipv4_Address_VrrpGroup +// struct. +func (t *Interface_RoutedVlan_Ipv4_Address_VrrpGroup) SetCurrentPriority(v uint8) { + t.CurrentPriority = &v +} + +// SetPreempt sets the value of the leaf Preempt in the Interface_RoutedVlan_Ipv4_Address_VrrpGroup +// struct. +func (t *Interface_RoutedVlan_Ipv4_Address_VrrpGroup) SetPreempt(v bool) { + t.Preempt = &v +} + +// SetPreemptDelay sets the value of the leaf PreemptDelay in the Interface_RoutedVlan_Ipv4_Address_VrrpGroup +// struct. +func (t *Interface_RoutedVlan_Ipv4_Address_VrrpGroup) SetPreemptDelay(v uint16) { + t.PreemptDelay = &v +} + +// SetPriority sets the value of the leaf Priority in the Interface_RoutedVlan_Ipv4_Address_VrrpGroup +// struct. +func (t *Interface_RoutedVlan_Ipv4_Address_VrrpGroup) SetPriority(v uint8) { + t.Priority = &v +} + +// SetVirtualAddress sets the value of the leaf VirtualAddress in the Interface_RoutedVlan_Ipv4_Address_VrrpGroup +// struct. +func (t *Interface_RoutedVlan_Ipv4_Address_VrrpGroup) SetVirtualAddress(v []string) { + t.VirtualAddress = v +} + +// SetVirtualRouterId sets the value of the leaf VirtualRouterId in the Interface_RoutedVlan_Ipv4_Address_VrrpGroup +// struct. +func (t *Interface_RoutedVlan_Ipv4_Address_VrrpGroup) SetVirtualRouterId(v uint8) { + t.VirtualRouterId = &v +} + +// PopulateDefaults recursively populates unset leaf fields in the Interface_RoutedVlan_Ipv4_Address_VrrpGroup +// with default values as specified in the YANG schema, instantiating any nil +// container fields. +func (t *Interface_RoutedVlan_Ipv4_Address_VrrpGroup) PopulateDefaults() { + if t == nil { + return + } + ygot.BuildEmptyTree(t) + if t.AcceptMode == nil { + var v bool = false + t.AcceptMode = &v + } + if t.AdvertisementInterval == nil { + var v uint16 = 100 + t.AdvertisementInterval = &v + } + if t.Preempt == nil { + var v bool = true + t.Preempt = &v + } + if t.PreemptDelay == nil { + var v uint16 = 0 + t.PreemptDelay = &v + } + if t.Priority == nil { + var v uint8 = 100 + t.Priority = &v + } + t.InterfaceTracking.PopulateDefaults() +} + +// ΛListKeyMap returns the keys of the Interface_RoutedVlan_Ipv4_Address_VrrpGroup struct, which is a YANG list entry. +func (t *Interface_RoutedVlan_Ipv4_Address_VrrpGroup) ΛListKeyMap() (map[string]interface{}, error) { + if t.VirtualRouterId == nil { + return nil, fmt.Errorf("nil value for key VirtualRouterId") + } + + return map[string]interface{}{ + "virtual-router-id": *t.VirtualRouterId, + }, nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_RoutedVlan_Ipv4_Address_VrrpGroup) ΛValidate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["Interface_RoutedVlan_Ipv4_Address_VrrpGroup"], t, opts...); err != nil { + return err + } + return nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_RoutedVlan_Ipv4_Address_VrrpGroup) Validate(opts ...ygot.ValidationOption) error { + return t.ΛValidate(opts...) +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *Interface_RoutedVlan_Ipv4_Address_VrrpGroup) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// ΛBelongingModule returns the name of the module that defines the namespace +// of Interface_RoutedVlan_Ipv4_Address_VrrpGroup. +func (*Interface_RoutedVlan_Ipv4_Address_VrrpGroup) ΛBelongingModule() string { + return "openconfig-if-ip" +} + +// Interface_RoutedVlan_Ipv4_Address_VrrpGroup_InterfaceTracking represents the /openconfig-interfaces/interfaces/interface/routed-vlan/ipv4/addresses/address/vrrp/vrrp-group/interface-tracking YANG schema element. +type Interface_RoutedVlan_Ipv4_Address_VrrpGroup_InterfaceTracking struct { + PriorityDecrement *uint8 `path:"config/priority-decrement" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/priority-decrement" shadow-module:"openconfig-if-ip/openconfig-if-ip"` + TrackInterface []string `path:"config/track-interface" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/track-interface" shadow-module:"openconfig-if-ip/openconfig-if-ip"` +} + +// IsYANGGoStruct ensures that Interface_RoutedVlan_Ipv4_Address_VrrpGroup_InterfaceTracking implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*Interface_RoutedVlan_Ipv4_Address_VrrpGroup_InterfaceTracking) IsYANGGoStruct() {} + +// GetPriorityDecrement retrieves the value of the leaf PriorityDecrement from the Interface_RoutedVlan_Ipv4_Address_VrrpGroup_InterfaceTracking +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if PriorityDecrement is set, it can +// safely use t.GetPriorityDecrement() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.PriorityDecrement == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv4_Address_VrrpGroup_InterfaceTracking) GetPriorityDecrement() uint8 { + if t == nil || t.PriorityDecrement == nil { + return 0 + } + return *t.PriorityDecrement +} + +// GetTrackInterface retrieves the value of the leaf TrackInterface from the Interface_RoutedVlan_Ipv4_Address_VrrpGroup_InterfaceTracking +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if TrackInterface is set, it can +// safely use t.GetTrackInterface() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.TrackInterface == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv4_Address_VrrpGroup_InterfaceTracking) GetTrackInterface() []string { + if t == nil || t.TrackInterface == nil { + return nil + } + return t.TrackInterface +} + +// SetPriorityDecrement sets the value of the leaf PriorityDecrement in the Interface_RoutedVlan_Ipv4_Address_VrrpGroup_InterfaceTracking +// struct. +func (t *Interface_RoutedVlan_Ipv4_Address_VrrpGroup_InterfaceTracking) SetPriorityDecrement(v uint8) { + t.PriorityDecrement = &v +} + +// SetTrackInterface sets the value of the leaf TrackInterface in the Interface_RoutedVlan_Ipv4_Address_VrrpGroup_InterfaceTracking +// struct. +func (t *Interface_RoutedVlan_Ipv4_Address_VrrpGroup_InterfaceTracking) SetTrackInterface(v []string) { + t.TrackInterface = v +} + +// PopulateDefaults recursively populates unset leaf fields in the Interface_RoutedVlan_Ipv4_Address_VrrpGroup_InterfaceTracking +// with default values as specified in the YANG schema, instantiating any nil +// container fields. +func (t *Interface_RoutedVlan_Ipv4_Address_VrrpGroup_InterfaceTracking) PopulateDefaults() { + if t == nil { + return + } + ygot.BuildEmptyTree(t) + if t.PriorityDecrement == nil { + var v uint8 = 0 + t.PriorityDecrement = &v + } +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_RoutedVlan_Ipv4_Address_VrrpGroup_InterfaceTracking) ΛValidate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["Interface_RoutedVlan_Ipv4_Address_VrrpGroup_InterfaceTracking"], t, opts...); err != nil { + return err + } + return nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_RoutedVlan_Ipv4_Address_VrrpGroup_InterfaceTracking) Validate(opts ...ygot.ValidationOption) error { + return t.ΛValidate(opts...) +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *Interface_RoutedVlan_Ipv4_Address_VrrpGroup_InterfaceTracking) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// ΛBelongingModule returns the name of the module that defines the namespace +// of Interface_RoutedVlan_Ipv4_Address_VrrpGroup_InterfaceTracking. +func (*Interface_RoutedVlan_Ipv4_Address_VrrpGroup_InterfaceTracking) ΛBelongingModule() string { + return "openconfig-if-ip" +} + +// Interface_RoutedVlan_Ipv4_Counters represents the /openconfig-interfaces/interfaces/interface/routed-vlan/ipv4/state/counters YANG schema element. +type Interface_RoutedVlan_Ipv4_Counters struct { + InDiscardedPkts *uint64 `path:"in-discarded-pkts" module:"openconfig-if-ip"` + InErrorPkts *uint64 `path:"in-error-pkts" module:"openconfig-if-ip"` + InForwardedOctets *uint64 `path:"in-forwarded-octets" module:"openconfig-if-ip"` + InForwardedPkts *uint64 `path:"in-forwarded-pkts" module:"openconfig-if-ip"` + InMulticastOctets *uint64 `path:"in-multicast-octets" module:"openconfig-if-ip"` + InMulticastPkts *uint64 `path:"in-multicast-pkts" module:"openconfig-if-ip"` + InOctets *uint64 `path:"in-octets" module:"openconfig-if-ip"` + InPkts *uint64 `path:"in-pkts" module:"openconfig-if-ip"` + OutDiscardedPkts *uint64 `path:"out-discarded-pkts" module:"openconfig-if-ip"` + OutErrorPkts *uint64 `path:"out-error-pkts" module:"openconfig-if-ip"` + OutForwardedOctets *uint64 `path:"out-forwarded-octets" module:"openconfig-if-ip"` + OutForwardedPkts *uint64 `path:"out-forwarded-pkts" module:"openconfig-if-ip"` + OutMulticastOctets *uint64 `path:"out-multicast-octets" module:"openconfig-if-ip"` + OutMulticastPkts *uint64 `path:"out-multicast-pkts" module:"openconfig-if-ip"` + OutOctets *uint64 `path:"out-octets" module:"openconfig-if-ip"` + OutPkts *uint64 `path:"out-pkts" module:"openconfig-if-ip"` +} + +// IsYANGGoStruct ensures that Interface_RoutedVlan_Ipv4_Counters implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*Interface_RoutedVlan_Ipv4_Counters) IsYANGGoStruct() {} + +// GetInDiscardedPkts retrieves the value of the leaf InDiscardedPkts from the Interface_RoutedVlan_Ipv4_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if InDiscardedPkts is set, it can +// safely use t.GetInDiscardedPkts() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.InDiscardedPkts == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv4_Counters) GetInDiscardedPkts() uint64 { + if t == nil || t.InDiscardedPkts == nil { + return 0 + } + return *t.InDiscardedPkts +} + +// GetInErrorPkts retrieves the value of the leaf InErrorPkts from the Interface_RoutedVlan_Ipv4_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if InErrorPkts is set, it can +// safely use t.GetInErrorPkts() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.InErrorPkts == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv4_Counters) GetInErrorPkts() uint64 { + if t == nil || t.InErrorPkts == nil { + return 0 + } + return *t.InErrorPkts +} + +// GetInForwardedOctets retrieves the value of the leaf InForwardedOctets from the Interface_RoutedVlan_Ipv4_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if InForwardedOctets is set, it can +// safely use t.GetInForwardedOctets() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.InForwardedOctets == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv4_Counters) GetInForwardedOctets() uint64 { + if t == nil || t.InForwardedOctets == nil { + return 0 + } + return *t.InForwardedOctets +} + +// GetInForwardedPkts retrieves the value of the leaf InForwardedPkts from the Interface_RoutedVlan_Ipv4_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if InForwardedPkts is set, it can +// safely use t.GetInForwardedPkts() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.InForwardedPkts == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv4_Counters) GetInForwardedPkts() uint64 { + if t == nil || t.InForwardedPkts == nil { + return 0 + } + return *t.InForwardedPkts +} + +// GetInMulticastOctets retrieves the value of the leaf InMulticastOctets from the Interface_RoutedVlan_Ipv4_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if InMulticastOctets is set, it can +// safely use t.GetInMulticastOctets() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.InMulticastOctets == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv4_Counters) GetInMulticastOctets() uint64 { + if t == nil || t.InMulticastOctets == nil { + return 0 + } + return *t.InMulticastOctets +} + +// GetInMulticastPkts retrieves the value of the leaf InMulticastPkts from the Interface_RoutedVlan_Ipv4_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if InMulticastPkts is set, it can +// safely use t.GetInMulticastPkts() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.InMulticastPkts == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv4_Counters) GetInMulticastPkts() uint64 { + if t == nil || t.InMulticastPkts == nil { + return 0 + } + return *t.InMulticastPkts +} + +// GetInOctets retrieves the value of the leaf InOctets from the Interface_RoutedVlan_Ipv4_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if InOctets is set, it can +// safely use t.GetInOctets() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.InOctets == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv4_Counters) GetInOctets() uint64 { + if t == nil || t.InOctets == nil { + return 0 + } + return *t.InOctets +} + +// GetInPkts retrieves the value of the leaf InPkts from the Interface_RoutedVlan_Ipv4_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if InPkts is set, it can +// safely use t.GetInPkts() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.InPkts == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv4_Counters) GetInPkts() uint64 { + if t == nil || t.InPkts == nil { + return 0 + } + return *t.InPkts +} + +// GetOutDiscardedPkts retrieves the value of the leaf OutDiscardedPkts from the Interface_RoutedVlan_Ipv4_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if OutDiscardedPkts is set, it can +// safely use t.GetOutDiscardedPkts() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.OutDiscardedPkts == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv4_Counters) GetOutDiscardedPkts() uint64 { + if t == nil || t.OutDiscardedPkts == nil { + return 0 + } + return *t.OutDiscardedPkts +} + +// GetOutErrorPkts retrieves the value of the leaf OutErrorPkts from the Interface_RoutedVlan_Ipv4_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if OutErrorPkts is set, it can +// safely use t.GetOutErrorPkts() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.OutErrorPkts == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv4_Counters) GetOutErrorPkts() uint64 { + if t == nil || t.OutErrorPkts == nil { + return 0 + } + return *t.OutErrorPkts +} + +// GetOutForwardedOctets retrieves the value of the leaf OutForwardedOctets from the Interface_RoutedVlan_Ipv4_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if OutForwardedOctets is set, it can +// safely use t.GetOutForwardedOctets() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.OutForwardedOctets == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv4_Counters) GetOutForwardedOctets() uint64 { + if t == nil || t.OutForwardedOctets == nil { + return 0 + } + return *t.OutForwardedOctets +} + +// GetOutForwardedPkts retrieves the value of the leaf OutForwardedPkts from the Interface_RoutedVlan_Ipv4_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if OutForwardedPkts is set, it can +// safely use t.GetOutForwardedPkts() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.OutForwardedPkts == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv4_Counters) GetOutForwardedPkts() uint64 { + if t == nil || t.OutForwardedPkts == nil { + return 0 + } + return *t.OutForwardedPkts +} + +// GetOutMulticastOctets retrieves the value of the leaf OutMulticastOctets from the Interface_RoutedVlan_Ipv4_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if OutMulticastOctets is set, it can +// safely use t.GetOutMulticastOctets() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.OutMulticastOctets == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv4_Counters) GetOutMulticastOctets() uint64 { + if t == nil || t.OutMulticastOctets == nil { + return 0 + } + return *t.OutMulticastOctets +} + +// GetOutMulticastPkts retrieves the value of the leaf OutMulticastPkts from the Interface_RoutedVlan_Ipv4_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if OutMulticastPkts is set, it can +// safely use t.GetOutMulticastPkts() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.OutMulticastPkts == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv4_Counters) GetOutMulticastPkts() uint64 { + if t == nil || t.OutMulticastPkts == nil { + return 0 + } + return *t.OutMulticastPkts +} + +// GetOutOctets retrieves the value of the leaf OutOctets from the Interface_RoutedVlan_Ipv4_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if OutOctets is set, it can +// safely use t.GetOutOctets() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.OutOctets == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv4_Counters) GetOutOctets() uint64 { + if t == nil || t.OutOctets == nil { + return 0 + } + return *t.OutOctets +} + +// GetOutPkts retrieves the value of the leaf OutPkts from the Interface_RoutedVlan_Ipv4_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if OutPkts is set, it can +// safely use t.GetOutPkts() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.OutPkts == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv4_Counters) GetOutPkts() uint64 { + if t == nil || t.OutPkts == nil { + return 0 + } + return *t.OutPkts +} + +// SetInDiscardedPkts sets the value of the leaf InDiscardedPkts in the Interface_RoutedVlan_Ipv4_Counters +// struct. +func (t *Interface_RoutedVlan_Ipv4_Counters) SetInDiscardedPkts(v uint64) { + t.InDiscardedPkts = &v +} + +// SetInErrorPkts sets the value of the leaf InErrorPkts in the Interface_RoutedVlan_Ipv4_Counters +// struct. +func (t *Interface_RoutedVlan_Ipv4_Counters) SetInErrorPkts(v uint64) { + t.InErrorPkts = &v +} + +// SetInForwardedOctets sets the value of the leaf InForwardedOctets in the Interface_RoutedVlan_Ipv4_Counters +// struct. +func (t *Interface_RoutedVlan_Ipv4_Counters) SetInForwardedOctets(v uint64) { + t.InForwardedOctets = &v +} + +// SetInForwardedPkts sets the value of the leaf InForwardedPkts in the Interface_RoutedVlan_Ipv4_Counters +// struct. +func (t *Interface_RoutedVlan_Ipv4_Counters) SetInForwardedPkts(v uint64) { + t.InForwardedPkts = &v +} + +// SetInMulticastOctets sets the value of the leaf InMulticastOctets in the Interface_RoutedVlan_Ipv4_Counters +// struct. +func (t *Interface_RoutedVlan_Ipv4_Counters) SetInMulticastOctets(v uint64) { + t.InMulticastOctets = &v +} + +// SetInMulticastPkts sets the value of the leaf InMulticastPkts in the Interface_RoutedVlan_Ipv4_Counters +// struct. +func (t *Interface_RoutedVlan_Ipv4_Counters) SetInMulticastPkts(v uint64) { + t.InMulticastPkts = &v +} + +// SetInOctets sets the value of the leaf InOctets in the Interface_RoutedVlan_Ipv4_Counters +// struct. +func (t *Interface_RoutedVlan_Ipv4_Counters) SetInOctets(v uint64) { + t.InOctets = &v +} + +// SetInPkts sets the value of the leaf InPkts in the Interface_RoutedVlan_Ipv4_Counters +// struct. +func (t *Interface_RoutedVlan_Ipv4_Counters) SetInPkts(v uint64) { + t.InPkts = &v +} + +// SetOutDiscardedPkts sets the value of the leaf OutDiscardedPkts in the Interface_RoutedVlan_Ipv4_Counters +// struct. +func (t *Interface_RoutedVlan_Ipv4_Counters) SetOutDiscardedPkts(v uint64) { + t.OutDiscardedPkts = &v +} + +// SetOutErrorPkts sets the value of the leaf OutErrorPkts in the Interface_RoutedVlan_Ipv4_Counters +// struct. +func (t *Interface_RoutedVlan_Ipv4_Counters) SetOutErrorPkts(v uint64) { + t.OutErrorPkts = &v +} + +// SetOutForwardedOctets sets the value of the leaf OutForwardedOctets in the Interface_RoutedVlan_Ipv4_Counters +// struct. +func (t *Interface_RoutedVlan_Ipv4_Counters) SetOutForwardedOctets(v uint64) { + t.OutForwardedOctets = &v +} + +// SetOutForwardedPkts sets the value of the leaf OutForwardedPkts in the Interface_RoutedVlan_Ipv4_Counters +// struct. +func (t *Interface_RoutedVlan_Ipv4_Counters) SetOutForwardedPkts(v uint64) { + t.OutForwardedPkts = &v +} + +// SetOutMulticastOctets sets the value of the leaf OutMulticastOctets in the Interface_RoutedVlan_Ipv4_Counters +// struct. +func (t *Interface_RoutedVlan_Ipv4_Counters) SetOutMulticastOctets(v uint64) { + t.OutMulticastOctets = &v +} + +// SetOutMulticastPkts sets the value of the leaf OutMulticastPkts in the Interface_RoutedVlan_Ipv4_Counters +// struct. +func (t *Interface_RoutedVlan_Ipv4_Counters) SetOutMulticastPkts(v uint64) { + t.OutMulticastPkts = &v +} + +// SetOutOctets sets the value of the leaf OutOctets in the Interface_RoutedVlan_Ipv4_Counters +// struct. +func (t *Interface_RoutedVlan_Ipv4_Counters) SetOutOctets(v uint64) { + t.OutOctets = &v +} + +// SetOutPkts sets the value of the leaf OutPkts in the Interface_RoutedVlan_Ipv4_Counters +// struct. +func (t *Interface_RoutedVlan_Ipv4_Counters) SetOutPkts(v uint64) { + t.OutPkts = &v +} + +// PopulateDefaults recursively populates unset leaf fields in the Interface_RoutedVlan_Ipv4_Counters +// with default values as specified in the YANG schema, instantiating any nil +// container fields. +func (t *Interface_RoutedVlan_Ipv4_Counters) PopulateDefaults() { + if t == nil { + return + } + ygot.BuildEmptyTree(t) +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_RoutedVlan_Ipv4_Counters) ΛValidate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["Interface_RoutedVlan_Ipv4_Counters"], t, opts...); err != nil { + return err + } + return nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_RoutedVlan_Ipv4_Counters) Validate(opts ...ygot.ValidationOption) error { + return t.ΛValidate(opts...) +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *Interface_RoutedVlan_Ipv4_Counters) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// ΛBelongingModule returns the name of the module that defines the namespace +// of Interface_RoutedVlan_Ipv4_Counters. +func (*Interface_RoutedVlan_Ipv4_Counters) ΛBelongingModule() string { + return "openconfig-if-ip" +} + +// Interface_RoutedVlan_Ipv4_Neighbor represents the /openconfig-interfaces/interfaces/interface/routed-vlan/ipv4/neighbors/neighbor YANG schema element. +type Interface_RoutedVlan_Ipv4_Neighbor struct { + Ip *string `path:"config/ip|ip" module:"openconfig-if-ip/openconfig-if-ip|openconfig-if-ip" shadow-path:"state/ip|ip" shadow-module:"openconfig-if-ip/openconfig-if-ip|openconfig-if-ip"` + LinkLayerAddress *string `path:"config/link-layer-address" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/link-layer-address" shadow-module:"openconfig-if-ip/openconfig-if-ip"` + Origin E_IfIp_NeighborOrigin `path:"state/origin" module:"openconfig-if-ip/openconfig-if-ip"` +} + +// IsYANGGoStruct ensures that Interface_RoutedVlan_Ipv4_Neighbor implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*Interface_RoutedVlan_Ipv4_Neighbor) IsYANGGoStruct() {} + +// GetIp retrieves the value of the leaf Ip from the Interface_RoutedVlan_Ipv4_Neighbor +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Ip is set, it can +// safely use t.GetIp() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Ip == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv4_Neighbor) GetIp() string { + if t == nil || t.Ip == nil { + return "" + } + return *t.Ip +} + +// GetLinkLayerAddress retrieves the value of the leaf LinkLayerAddress from the Interface_RoutedVlan_Ipv4_Neighbor +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if LinkLayerAddress is set, it can +// safely use t.GetLinkLayerAddress() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.LinkLayerAddress == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv4_Neighbor) GetLinkLayerAddress() string { + if t == nil || t.LinkLayerAddress == nil { + return "" + } + return *t.LinkLayerAddress +} + +// GetOrigin retrieves the value of the leaf Origin from the Interface_RoutedVlan_Ipv4_Neighbor +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Origin is set, it can +// safely use t.GetOrigin() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Origin == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv4_Neighbor) GetOrigin() E_IfIp_NeighborOrigin { + if t == nil || t.Origin == 0 { + return 0 + } + return t.Origin +} + +// SetIp sets the value of the leaf Ip in the Interface_RoutedVlan_Ipv4_Neighbor +// struct. +func (t *Interface_RoutedVlan_Ipv4_Neighbor) SetIp(v string) { + t.Ip = &v +} + +// SetLinkLayerAddress sets the value of the leaf LinkLayerAddress in the Interface_RoutedVlan_Ipv4_Neighbor +// struct. +func (t *Interface_RoutedVlan_Ipv4_Neighbor) SetLinkLayerAddress(v string) { + t.LinkLayerAddress = &v +} + +// SetOrigin sets the value of the leaf Origin in the Interface_RoutedVlan_Ipv4_Neighbor +// struct. +func (t *Interface_RoutedVlan_Ipv4_Neighbor) SetOrigin(v E_IfIp_NeighborOrigin) { + t.Origin = v +} + +// PopulateDefaults recursively populates unset leaf fields in the Interface_RoutedVlan_Ipv4_Neighbor +// with default values as specified in the YANG schema, instantiating any nil +// container fields. +func (t *Interface_RoutedVlan_Ipv4_Neighbor) PopulateDefaults() { + if t == nil { + return + } + ygot.BuildEmptyTree(t) +} + +// ΛListKeyMap returns the keys of the Interface_RoutedVlan_Ipv4_Neighbor struct, which is a YANG list entry. +func (t *Interface_RoutedVlan_Ipv4_Neighbor) ΛListKeyMap() (map[string]interface{}, error) { + if t.Ip == nil { + return nil, fmt.Errorf("nil value for key Ip") + } + + return map[string]interface{}{ + "ip": *t.Ip, + }, nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_RoutedVlan_Ipv4_Neighbor) ΛValidate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["Interface_RoutedVlan_Ipv4_Neighbor"], t, opts...); err != nil { + return err + } + return nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_RoutedVlan_Ipv4_Neighbor) Validate(opts ...ygot.ValidationOption) error { + return t.ΛValidate(opts...) +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *Interface_RoutedVlan_Ipv4_Neighbor) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// ΛBelongingModule returns the name of the module that defines the namespace +// of Interface_RoutedVlan_Ipv4_Neighbor. +func (*Interface_RoutedVlan_Ipv4_Neighbor) ΛBelongingModule() string { + return "openconfig-if-ip" +} + +// Interface_RoutedVlan_Ipv4_ProxyArp represents the /openconfig-interfaces/interfaces/interface/routed-vlan/ipv4/proxy-arp YANG schema element. +type Interface_RoutedVlan_Ipv4_ProxyArp struct { + Mode E_ProxyArp_Mode `path:"config/mode" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/mode" shadow-module:"openconfig-if-ip/openconfig-if-ip"` +} + +// IsYANGGoStruct ensures that Interface_RoutedVlan_Ipv4_ProxyArp implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*Interface_RoutedVlan_Ipv4_ProxyArp) IsYANGGoStruct() {} + +// GetMode retrieves the value of the leaf Mode from the Interface_RoutedVlan_Ipv4_ProxyArp +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Mode is set, it can +// safely use t.GetMode() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Mode == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv4_ProxyArp) GetMode() E_ProxyArp_Mode { + if t == nil || t.Mode == 0 { + return ProxyArp_Mode_DISABLE + } + return t.Mode +} + +// SetMode sets the value of the leaf Mode in the Interface_RoutedVlan_Ipv4_ProxyArp +// struct. +func (t *Interface_RoutedVlan_Ipv4_ProxyArp) SetMode(v E_ProxyArp_Mode) { + t.Mode = v +} + +// PopulateDefaults recursively populates unset leaf fields in the Interface_RoutedVlan_Ipv4_ProxyArp +// with default values as specified in the YANG schema, instantiating any nil +// container fields. +func (t *Interface_RoutedVlan_Ipv4_ProxyArp) PopulateDefaults() { + if t == nil { + return + } + ygot.BuildEmptyTree(t) + if t.Mode == 0 { + t.Mode = ProxyArp_Mode_DISABLE + } +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_RoutedVlan_Ipv4_ProxyArp) ΛValidate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["Interface_RoutedVlan_Ipv4_ProxyArp"], t, opts...); err != nil { + return err + } + return nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_RoutedVlan_Ipv4_ProxyArp) Validate(opts ...ygot.ValidationOption) error { + return t.ΛValidate(opts...) +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *Interface_RoutedVlan_Ipv4_ProxyArp) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// ΛBelongingModule returns the name of the module that defines the namespace +// of Interface_RoutedVlan_Ipv4_ProxyArp. +func (*Interface_RoutedVlan_Ipv4_ProxyArp) ΛBelongingModule() string { + return "openconfig-if-ip" +} + +// Interface_RoutedVlan_Ipv4_Unnumbered represents the /openconfig-interfaces/interfaces/interface/routed-vlan/ipv4/unnumbered YANG schema element. +type Interface_RoutedVlan_Ipv4_Unnumbered struct { + Enabled *bool `path:"config/enabled" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/enabled" shadow-module:"openconfig-if-ip/openconfig-if-ip"` + InterfaceRef *Interface_RoutedVlan_Ipv4_Unnumbered_InterfaceRef `path:"interface-ref" module:"openconfig-if-ip"` +} + +// IsYANGGoStruct ensures that Interface_RoutedVlan_Ipv4_Unnumbered implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*Interface_RoutedVlan_Ipv4_Unnumbered) IsYANGGoStruct() {} + +// GetOrCreateInterfaceRef retrieves the value of the InterfaceRef field +// or returns the existing field if it already exists. +func (t *Interface_RoutedVlan_Ipv4_Unnumbered) GetOrCreateInterfaceRef() *Interface_RoutedVlan_Ipv4_Unnumbered_InterfaceRef { + if t.InterfaceRef != nil { + return t.InterfaceRef + } + t.InterfaceRef = &Interface_RoutedVlan_Ipv4_Unnumbered_InterfaceRef{} + return t.InterfaceRef +} + +// GetInterfaceRef returns the value of the InterfaceRef struct pointer +// from Interface_RoutedVlan_Ipv4_Unnumbered. If the receiver or the field InterfaceRef is nil, nil +// is returned such that the Get* methods can be safely chained. +func (t *Interface_RoutedVlan_Ipv4_Unnumbered) GetInterfaceRef() *Interface_RoutedVlan_Ipv4_Unnumbered_InterfaceRef { + if t != nil && t.InterfaceRef != nil { + return t.InterfaceRef + } + return nil +} + +// GetEnabled retrieves the value of the leaf Enabled from the Interface_RoutedVlan_Ipv4_Unnumbered +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Enabled is set, it can +// safely use t.GetEnabled() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Enabled == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv4_Unnumbered) GetEnabled() bool { + if t == nil || t.Enabled == nil { + return false + } + return *t.Enabled +} + +// SetEnabled sets the value of the leaf Enabled in the Interface_RoutedVlan_Ipv4_Unnumbered +// struct. +func (t *Interface_RoutedVlan_Ipv4_Unnumbered) SetEnabled(v bool) { + t.Enabled = &v +} + +// PopulateDefaults recursively populates unset leaf fields in the Interface_RoutedVlan_Ipv4_Unnumbered +// with default values as specified in the YANG schema, instantiating any nil +// container fields. +func (t *Interface_RoutedVlan_Ipv4_Unnumbered) PopulateDefaults() { + if t == nil { + return + } + ygot.BuildEmptyTree(t) + if t.Enabled == nil { + var v bool = false + t.Enabled = &v + } + t.InterfaceRef.PopulateDefaults() +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_RoutedVlan_Ipv4_Unnumbered) ΛValidate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["Interface_RoutedVlan_Ipv4_Unnumbered"], t, opts...); err != nil { + return err + } + return nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_RoutedVlan_Ipv4_Unnumbered) Validate(opts ...ygot.ValidationOption) error { + return t.ΛValidate(opts...) +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *Interface_RoutedVlan_Ipv4_Unnumbered) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// ΛBelongingModule returns the name of the module that defines the namespace +// of Interface_RoutedVlan_Ipv4_Unnumbered. +func (*Interface_RoutedVlan_Ipv4_Unnumbered) ΛBelongingModule() string { + return "openconfig-if-ip" +} + +// Interface_RoutedVlan_Ipv4_Unnumbered_InterfaceRef represents the /openconfig-interfaces/interfaces/interface/routed-vlan/ipv4/unnumbered/interface-ref YANG schema element. +type Interface_RoutedVlan_Ipv4_Unnumbered_InterfaceRef struct { + Interface *string `path:"config/interface" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/interface" shadow-module:"openconfig-if-ip/openconfig-if-ip"` + Subinterface *uint32 `path:"config/subinterface" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/subinterface" shadow-module:"openconfig-if-ip/openconfig-if-ip"` +} + +// IsYANGGoStruct ensures that Interface_RoutedVlan_Ipv4_Unnumbered_InterfaceRef implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*Interface_RoutedVlan_Ipv4_Unnumbered_InterfaceRef) IsYANGGoStruct() {} + +// GetInterface retrieves the value of the leaf Interface from the Interface_RoutedVlan_Ipv4_Unnumbered_InterfaceRef +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Interface is set, it can +// safely use t.GetInterface() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Interface == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv4_Unnumbered_InterfaceRef) GetInterface() string { + if t == nil || t.Interface == nil { + return "" + } + return *t.Interface +} + +// GetSubinterface retrieves the value of the leaf Subinterface from the Interface_RoutedVlan_Ipv4_Unnumbered_InterfaceRef +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Subinterface is set, it can +// safely use t.GetSubinterface() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Subinterface == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv4_Unnumbered_InterfaceRef) GetSubinterface() uint32 { + if t == nil || t.Subinterface == nil { + return 0 + } + return *t.Subinterface +} + +// SetInterface sets the value of the leaf Interface in the Interface_RoutedVlan_Ipv4_Unnumbered_InterfaceRef +// struct. +func (t *Interface_RoutedVlan_Ipv4_Unnumbered_InterfaceRef) SetInterface(v string) { + t.Interface = &v +} + +// SetSubinterface sets the value of the leaf Subinterface in the Interface_RoutedVlan_Ipv4_Unnumbered_InterfaceRef +// struct. +func (t *Interface_RoutedVlan_Ipv4_Unnumbered_InterfaceRef) SetSubinterface(v uint32) { + t.Subinterface = &v +} + +// PopulateDefaults recursively populates unset leaf fields in the Interface_RoutedVlan_Ipv4_Unnumbered_InterfaceRef +// with default values as specified in the YANG schema, instantiating any nil +// container fields. +func (t *Interface_RoutedVlan_Ipv4_Unnumbered_InterfaceRef) PopulateDefaults() { + if t == nil { + return + } + ygot.BuildEmptyTree(t) +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_RoutedVlan_Ipv4_Unnumbered_InterfaceRef) ΛValidate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["Interface_RoutedVlan_Ipv4_Unnumbered_InterfaceRef"], t, opts...); err != nil { + return err + } + return nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_RoutedVlan_Ipv4_Unnumbered_InterfaceRef) Validate(opts ...ygot.ValidationOption) error { + return t.ΛValidate(opts...) +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *Interface_RoutedVlan_Ipv4_Unnumbered_InterfaceRef) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// ΛBelongingModule returns the name of the module that defines the namespace +// of Interface_RoutedVlan_Ipv4_Unnumbered_InterfaceRef. +func (*Interface_RoutedVlan_Ipv4_Unnumbered_InterfaceRef) ΛBelongingModule() string { + return "openconfig-if-ip" +} + +// Interface_RoutedVlan_Ipv6 represents the /openconfig-interfaces/interfaces/interface/routed-vlan/ipv6 YANG schema element. +type Interface_RoutedVlan_Ipv6 struct { + Address map[string]*Interface_RoutedVlan_Ipv6_Address `path:"addresses/address" module:"openconfig-if-ip/openconfig-if-ip"` + Counters *Interface_RoutedVlan_Ipv6_Counters `path:"state/counters" module:"openconfig-if-ip/openconfig-if-ip"` + DhcpClient *bool `path:"config/dhcp-client" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/dhcp-client" shadow-module:"openconfig-if-ip/openconfig-if-ip"` + DupAddrDetectTransmits *uint32 `path:"config/dup-addr-detect-transmits" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/dup-addr-detect-transmits" shadow-module:"openconfig-if-ip/openconfig-if-ip"` + Enabled *bool `path:"config/enabled" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/enabled" shadow-module:"openconfig-if-ip/openconfig-if-ip"` + LearnUnsolicited E_Ipv6_LearnUnsolicited `path:"config/learn-unsolicited" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/learn-unsolicited" shadow-module:"openconfig-if-ip/openconfig-if-ip"` + Mtu *uint32 `path:"config/mtu" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/mtu" shadow-module:"openconfig-if-ip/openconfig-if-ip"` + Neighbor map[string]*Interface_RoutedVlan_Ipv6_Neighbor `path:"neighbors/neighbor" module:"openconfig-if-ip/openconfig-if-ip"` + RouterAdvertisement *Interface_RoutedVlan_Ipv6_RouterAdvertisement `path:"router-advertisement" module:"openconfig-if-ip"` + Unnumbered *Interface_RoutedVlan_Ipv6_Unnumbered `path:"unnumbered" module:"openconfig-if-ip"` +} + +// IsYANGGoStruct ensures that Interface_RoutedVlan_Ipv6 implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*Interface_RoutedVlan_Ipv6) IsYANGGoStruct() {} + +// NewAddress creates a new entry in the Address list of the +// Interface_RoutedVlan_Ipv6 struct. The keys of the list are populated from the input +// arguments. +func (t *Interface_RoutedVlan_Ipv6) NewAddress(Ip string) (*Interface_RoutedVlan_Ipv6_Address, error) { + + // Initialise the list within the receiver struct if it has not already been + // created. + if t.Address == nil { + t.Address = make(map[string]*Interface_RoutedVlan_Ipv6_Address) + } + + key := Ip + + // Ensure that this key has not already been used in the + // list. Keyed YANG lists do not allow duplicate keys to + // be created. + if _, ok := t.Address[key]; ok { + return nil, fmt.Errorf("duplicate key %v for list Address", key) + } + + t.Address[key] = &Interface_RoutedVlan_Ipv6_Address{ + Ip: &Ip, + } + + return t.Address[key], nil +} + +// RenameAddress renames an entry in the list Address within +// the Interface_RoutedVlan_Ipv6 struct. The entry with key oldK is renamed to newK updating +// the key within the value. +func (t *Interface_RoutedVlan_Ipv6) RenameAddress(oldK, newK string) error { + if _, ok := t.Address[newK]; ok { + return fmt.Errorf("key %v already exists in Address", newK) + } + + e, ok := t.Address[oldK] + if !ok { + return fmt.Errorf("key %v not found in Address", oldK) + } + e.Ip = &newK + + t.Address[newK] = e + delete(t.Address, oldK) + return nil +} + +// GetOrCreateAddressMap returns the list (map) from Interface_RoutedVlan_Ipv6. +// +// It initializes the field if not already initialized. +func (t *Interface_RoutedVlan_Ipv6) GetOrCreateAddressMap() map[string]*Interface_RoutedVlan_Ipv6_Address { + if t.Address == nil { + t.Address = make(map[string]*Interface_RoutedVlan_Ipv6_Address) + } + return t.Address +} + +// GetOrCreateAddress retrieves the value with the specified keys from +// the receiver Interface_RoutedVlan_Ipv6. If the entry does not exist, then it is created. +// It returns the existing or new list member. +func (t *Interface_RoutedVlan_Ipv6) GetOrCreateAddress(Ip string) *Interface_RoutedVlan_Ipv6_Address { + + key := Ip + + if v, ok := t.Address[key]; ok { + return v + } + // Panic if we receive an error, since we should have retrieved an existing + // list member. This allows chaining of GetOrCreate methods. + v, err := t.NewAddress(Ip) + if err != nil { + panic(fmt.Sprintf("GetOrCreateAddress got unexpected error: %v", err)) + } + return v +} + +// GetAddress retrieves the value with the specified key from +// the Address map field of Interface_RoutedVlan_Ipv6. If the receiver is nil, or +// the specified key is not present in the list, nil is returned such that Get* +// methods may be safely chained. +func (t *Interface_RoutedVlan_Ipv6) GetAddress(Ip string) *Interface_RoutedVlan_Ipv6_Address { + + if t == nil { + return nil + } + + key := Ip + + if lm, ok := t.Address[key]; ok { + return lm + } + return nil +} + +// DeleteAddress deletes the value with the specified keys from +// the receiver Interface_RoutedVlan_Ipv6. If there is no such element, the function +// is a no-op. +func (t *Interface_RoutedVlan_Ipv6) DeleteAddress(Ip string) { + key := Ip + + delete(t.Address, key) +} + +// AppendAddress appends the supplied Interface_RoutedVlan_Ipv6_Address struct to the +// list Address of Interface_RoutedVlan_Ipv6. If the key value(s) specified in +// the supplied Interface_RoutedVlan_Ipv6_Address already exist in the list, an error is +// returned. +func (t *Interface_RoutedVlan_Ipv6) AppendAddress(v *Interface_RoutedVlan_Ipv6_Address) error { + if v.Ip == nil { + return fmt.Errorf("invalid nil key received for Ip") + } + + key := *v.Ip + + // Initialise the list within the receiver struct if it has not already been + // created. + if t.Address == nil { + t.Address = make(map[string]*Interface_RoutedVlan_Ipv6_Address) + } + + if _, ok := t.Address[key]; ok { + return fmt.Errorf("duplicate key for list Address %v", key) + } + + t.Address[key] = v + return nil +} + +// NewNeighbor creates a new entry in the Neighbor list of the +// Interface_RoutedVlan_Ipv6 struct. The keys of the list are populated from the input +// arguments. +func (t *Interface_RoutedVlan_Ipv6) NewNeighbor(Ip string) (*Interface_RoutedVlan_Ipv6_Neighbor, error) { + + // Initialise the list within the receiver struct if it has not already been + // created. + if t.Neighbor == nil { + t.Neighbor = make(map[string]*Interface_RoutedVlan_Ipv6_Neighbor) + } + + key := Ip + + // Ensure that this key has not already been used in the + // list. Keyed YANG lists do not allow duplicate keys to + // be created. + if _, ok := t.Neighbor[key]; ok { + return nil, fmt.Errorf("duplicate key %v for list Neighbor", key) + } + + t.Neighbor[key] = &Interface_RoutedVlan_Ipv6_Neighbor{ + Ip: &Ip, + } + + return t.Neighbor[key], nil +} + +// RenameNeighbor renames an entry in the list Neighbor within +// the Interface_RoutedVlan_Ipv6 struct. The entry with key oldK is renamed to newK updating +// the key within the value. +func (t *Interface_RoutedVlan_Ipv6) RenameNeighbor(oldK, newK string) error { + if _, ok := t.Neighbor[newK]; ok { + return fmt.Errorf("key %v already exists in Neighbor", newK) + } + + e, ok := t.Neighbor[oldK] + if !ok { + return fmt.Errorf("key %v not found in Neighbor", oldK) + } + e.Ip = &newK + + t.Neighbor[newK] = e + delete(t.Neighbor, oldK) + return nil +} + +// GetOrCreateNeighborMap returns the list (map) from Interface_RoutedVlan_Ipv6. +// +// It initializes the field if not already initialized. +func (t *Interface_RoutedVlan_Ipv6) GetOrCreateNeighborMap() map[string]*Interface_RoutedVlan_Ipv6_Neighbor { + if t.Neighbor == nil { + t.Neighbor = make(map[string]*Interface_RoutedVlan_Ipv6_Neighbor) + } + return t.Neighbor +} + +// GetOrCreateNeighbor retrieves the value with the specified keys from +// the receiver Interface_RoutedVlan_Ipv6. If the entry does not exist, then it is created. +// It returns the existing or new list member. +func (t *Interface_RoutedVlan_Ipv6) GetOrCreateNeighbor(Ip string) *Interface_RoutedVlan_Ipv6_Neighbor { + + key := Ip + + if v, ok := t.Neighbor[key]; ok { + return v + } + // Panic if we receive an error, since we should have retrieved an existing + // list member. This allows chaining of GetOrCreate methods. + v, err := t.NewNeighbor(Ip) + if err != nil { + panic(fmt.Sprintf("GetOrCreateNeighbor got unexpected error: %v", err)) + } + return v +} + +// GetNeighbor retrieves the value with the specified key from +// the Neighbor map field of Interface_RoutedVlan_Ipv6. If the receiver is nil, or +// the specified key is not present in the list, nil is returned such that Get* +// methods may be safely chained. +func (t *Interface_RoutedVlan_Ipv6) GetNeighbor(Ip string) *Interface_RoutedVlan_Ipv6_Neighbor { + + if t == nil { + return nil + } + + key := Ip + + if lm, ok := t.Neighbor[key]; ok { + return lm + } + return nil +} + +// DeleteNeighbor deletes the value with the specified keys from +// the receiver Interface_RoutedVlan_Ipv6. If there is no such element, the function +// is a no-op. +func (t *Interface_RoutedVlan_Ipv6) DeleteNeighbor(Ip string) { + key := Ip + + delete(t.Neighbor, key) +} + +// AppendNeighbor appends the supplied Interface_RoutedVlan_Ipv6_Neighbor struct to the +// list Neighbor of Interface_RoutedVlan_Ipv6. If the key value(s) specified in +// the supplied Interface_RoutedVlan_Ipv6_Neighbor already exist in the list, an error is +// returned. +func (t *Interface_RoutedVlan_Ipv6) AppendNeighbor(v *Interface_RoutedVlan_Ipv6_Neighbor) error { + if v.Ip == nil { + return fmt.Errorf("invalid nil key received for Ip") + } + + key := *v.Ip + + // Initialise the list within the receiver struct if it has not already been + // created. + if t.Neighbor == nil { + t.Neighbor = make(map[string]*Interface_RoutedVlan_Ipv6_Neighbor) + } + + if _, ok := t.Neighbor[key]; ok { + return fmt.Errorf("duplicate key for list Neighbor %v", key) + } + + t.Neighbor[key] = v + return nil +} + +// GetOrCreateCounters retrieves the value of the Counters field +// or returns the existing field if it already exists. +func (t *Interface_RoutedVlan_Ipv6) GetOrCreateCounters() *Interface_RoutedVlan_Ipv6_Counters { + if t.Counters != nil { + return t.Counters + } + t.Counters = &Interface_RoutedVlan_Ipv6_Counters{} + return t.Counters +} + +// GetOrCreateRouterAdvertisement retrieves the value of the RouterAdvertisement field +// or returns the existing field if it already exists. +func (t *Interface_RoutedVlan_Ipv6) GetOrCreateRouterAdvertisement() *Interface_RoutedVlan_Ipv6_RouterAdvertisement { + if t.RouterAdvertisement != nil { + return t.RouterAdvertisement + } + t.RouterAdvertisement = &Interface_RoutedVlan_Ipv6_RouterAdvertisement{} + return t.RouterAdvertisement +} + +// GetOrCreateUnnumbered retrieves the value of the Unnumbered field +// or returns the existing field if it already exists. +func (t *Interface_RoutedVlan_Ipv6) GetOrCreateUnnumbered() *Interface_RoutedVlan_Ipv6_Unnumbered { + if t.Unnumbered != nil { + return t.Unnumbered + } + t.Unnumbered = &Interface_RoutedVlan_Ipv6_Unnumbered{} + return t.Unnumbered +} + +// GetCounters returns the value of the Counters struct pointer +// from Interface_RoutedVlan_Ipv6. If the receiver or the field Counters is nil, nil +// is returned such that the Get* methods can be safely chained. +func (t *Interface_RoutedVlan_Ipv6) GetCounters() *Interface_RoutedVlan_Ipv6_Counters { + if t != nil && t.Counters != nil { + return t.Counters + } + return nil +} + +// GetRouterAdvertisement returns the value of the RouterAdvertisement struct pointer +// from Interface_RoutedVlan_Ipv6. If the receiver or the field RouterAdvertisement is nil, nil +// is returned such that the Get* methods can be safely chained. +func (t *Interface_RoutedVlan_Ipv6) GetRouterAdvertisement() *Interface_RoutedVlan_Ipv6_RouterAdvertisement { + if t != nil && t.RouterAdvertisement != nil { + return t.RouterAdvertisement + } + return nil +} + +// GetUnnumbered returns the value of the Unnumbered struct pointer +// from Interface_RoutedVlan_Ipv6. If the receiver or the field Unnumbered is nil, nil +// is returned such that the Get* methods can be safely chained. +func (t *Interface_RoutedVlan_Ipv6) GetUnnumbered() *Interface_RoutedVlan_Ipv6_Unnumbered { + if t != nil && t.Unnumbered != nil { + return t.Unnumbered + } + return nil +} + +// GetDhcpClient retrieves the value of the leaf DhcpClient from the Interface_RoutedVlan_Ipv6 +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if DhcpClient is set, it can +// safely use t.GetDhcpClient() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.DhcpClient == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv6) GetDhcpClient() bool { + if t == nil || t.DhcpClient == nil { + return false + } + return *t.DhcpClient +} + +// GetDupAddrDetectTransmits retrieves the value of the leaf DupAddrDetectTransmits from the Interface_RoutedVlan_Ipv6 +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if DupAddrDetectTransmits is set, it can +// safely use t.GetDupAddrDetectTransmits() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.DupAddrDetectTransmits == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv6) GetDupAddrDetectTransmits() uint32 { + if t == nil || t.DupAddrDetectTransmits == nil { + return 1 + } + return *t.DupAddrDetectTransmits +} + +// GetEnabled retrieves the value of the leaf Enabled from the Interface_RoutedVlan_Ipv6 +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Enabled is set, it can +// safely use t.GetEnabled() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Enabled == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv6) GetEnabled() bool { + if t == nil || t.Enabled == nil { + return true + } + return *t.Enabled +} + +// GetLearnUnsolicited retrieves the value of the leaf LearnUnsolicited from the Interface_RoutedVlan_Ipv6 +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if LearnUnsolicited is set, it can +// safely use t.GetLearnUnsolicited() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.LearnUnsolicited == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv6) GetLearnUnsolicited() E_Ipv6_LearnUnsolicited { + if t == nil || t.LearnUnsolicited == 0 { + return Ipv6_LearnUnsolicited_NONE + } + return t.LearnUnsolicited +} + +// GetMtu retrieves the value of the leaf Mtu from the Interface_RoutedVlan_Ipv6 +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Mtu is set, it can +// safely use t.GetMtu() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Mtu == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv6) GetMtu() uint32 { + if t == nil || t.Mtu == nil { + return 0 + } + return *t.Mtu +} + +// SetDhcpClient sets the value of the leaf DhcpClient in the Interface_RoutedVlan_Ipv6 +// struct. +func (t *Interface_RoutedVlan_Ipv6) SetDhcpClient(v bool) { + t.DhcpClient = &v +} + +// SetDupAddrDetectTransmits sets the value of the leaf DupAddrDetectTransmits in the Interface_RoutedVlan_Ipv6 +// struct. +func (t *Interface_RoutedVlan_Ipv6) SetDupAddrDetectTransmits(v uint32) { + t.DupAddrDetectTransmits = &v +} + +// SetEnabled sets the value of the leaf Enabled in the Interface_RoutedVlan_Ipv6 +// struct. +func (t *Interface_RoutedVlan_Ipv6) SetEnabled(v bool) { + t.Enabled = &v +} + +// SetLearnUnsolicited sets the value of the leaf LearnUnsolicited in the Interface_RoutedVlan_Ipv6 +// struct. +func (t *Interface_RoutedVlan_Ipv6) SetLearnUnsolicited(v E_Ipv6_LearnUnsolicited) { + t.LearnUnsolicited = v +} + +// SetMtu sets the value of the leaf Mtu in the Interface_RoutedVlan_Ipv6 +// struct. +func (t *Interface_RoutedVlan_Ipv6) SetMtu(v uint32) { + t.Mtu = &v +} + +// PopulateDefaults recursively populates unset leaf fields in the Interface_RoutedVlan_Ipv6 +// with default values as specified in the YANG schema, instantiating any nil +// container fields. +func (t *Interface_RoutedVlan_Ipv6) PopulateDefaults() { + if t == nil { + return + } + ygot.BuildEmptyTree(t) + if t.DhcpClient == nil { + var v bool = false + t.DhcpClient = &v + } + if t.DupAddrDetectTransmits == nil { + var v uint32 = 1 + t.DupAddrDetectTransmits = &v + } + if t.Enabled == nil { + var v bool = true + t.Enabled = &v + } + if t.LearnUnsolicited == 0 { + t.LearnUnsolicited = Ipv6_LearnUnsolicited_NONE + } + t.Counters.PopulateDefaults() + t.RouterAdvertisement.PopulateDefaults() + t.Unnumbered.PopulateDefaults() + for _, e := range t.Address { + e.PopulateDefaults() + } + for _, e := range t.Neighbor { + e.PopulateDefaults() + } +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_RoutedVlan_Ipv6) ΛValidate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["Interface_RoutedVlan_Ipv6"], t, opts...); err != nil { + return err + } + return nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_RoutedVlan_Ipv6) Validate(opts ...ygot.ValidationOption) error { + return t.ΛValidate(opts...) +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *Interface_RoutedVlan_Ipv6) ΛEnumTypeMap() map[string][]reflect.Type { return ΛEnumTypes } + +// ΛBelongingModule returns the name of the module that defines the namespace +// of Interface_RoutedVlan_Ipv6. +func (*Interface_RoutedVlan_Ipv6) ΛBelongingModule() string { + return "openconfig-if-ip" +} + +// Interface_RoutedVlan_Ipv6_Address represents the /openconfig-interfaces/interfaces/interface/routed-vlan/ipv6/addresses/address YANG schema element. +type Interface_RoutedVlan_Ipv6_Address struct { + Ip *string `path:"config/ip|ip" module:"openconfig-if-ip/openconfig-if-ip|openconfig-if-ip" shadow-path:"state/ip|ip" shadow-module:"openconfig-if-ip/openconfig-if-ip|openconfig-if-ip"` + Origin E_IfIp_IpAddressOrigin `path:"state/origin" module:"openconfig-if-ip/openconfig-if-ip"` + PrefixLength *uint8 `path:"config/prefix-length" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/prefix-length" shadow-module:"openconfig-if-ip/openconfig-if-ip"` + Status E_Address_Status `path:"state/status" module:"openconfig-if-ip/openconfig-if-ip"` + Type E_InetTypes_Ipv6AddressType `path:"config/type" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/type" shadow-module:"openconfig-if-ip/openconfig-if-ip"` + VrrpGroup map[uint8]*Interface_RoutedVlan_Ipv6_Address_VrrpGroup `path:"vrrp/vrrp-group" module:"openconfig-if-ip/openconfig-if-ip"` +} + +// IsYANGGoStruct ensures that Interface_RoutedVlan_Ipv6_Address implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*Interface_RoutedVlan_Ipv6_Address) IsYANGGoStruct() {} + +// NewVrrpGroup creates a new entry in the VrrpGroup list of the +// Interface_RoutedVlan_Ipv6_Address struct. The keys of the list are populated from the input +// arguments. +func (t *Interface_RoutedVlan_Ipv6_Address) NewVrrpGroup(VirtualRouterId uint8) (*Interface_RoutedVlan_Ipv6_Address_VrrpGroup, error) { + + // Initialise the list within the receiver struct if it has not already been + // created. + if t.VrrpGroup == nil { + t.VrrpGroup = make(map[uint8]*Interface_RoutedVlan_Ipv6_Address_VrrpGroup) + } + + key := VirtualRouterId + + // Ensure that this key has not already been used in the + // list. Keyed YANG lists do not allow duplicate keys to + // be created. + if _, ok := t.VrrpGroup[key]; ok { + return nil, fmt.Errorf("duplicate key %v for list VrrpGroup", key) + } + + t.VrrpGroup[key] = &Interface_RoutedVlan_Ipv6_Address_VrrpGroup{ + VirtualRouterId: &VirtualRouterId, + } + + return t.VrrpGroup[key], nil +} + +// RenameVrrpGroup renames an entry in the list VrrpGroup within +// the Interface_RoutedVlan_Ipv6_Address struct. The entry with key oldK is renamed to newK updating +// the key within the value. +func (t *Interface_RoutedVlan_Ipv6_Address) RenameVrrpGroup(oldK, newK uint8) error { + if _, ok := t.VrrpGroup[newK]; ok { + return fmt.Errorf("key %v already exists in VrrpGroup", newK) + } + + e, ok := t.VrrpGroup[oldK] + if !ok { + return fmt.Errorf("key %v not found in VrrpGroup", oldK) + } + e.VirtualRouterId = &newK + + t.VrrpGroup[newK] = e + delete(t.VrrpGroup, oldK) + return nil +} + +// GetOrCreateVrrpGroupMap returns the list (map) from Interface_RoutedVlan_Ipv6_Address. +// +// It initializes the field if not already initialized. +func (t *Interface_RoutedVlan_Ipv6_Address) GetOrCreateVrrpGroupMap() map[uint8]*Interface_RoutedVlan_Ipv6_Address_VrrpGroup { + if t.VrrpGroup == nil { + t.VrrpGroup = make(map[uint8]*Interface_RoutedVlan_Ipv6_Address_VrrpGroup) + } + return t.VrrpGroup +} + +// GetOrCreateVrrpGroup retrieves the value with the specified keys from +// the receiver Interface_RoutedVlan_Ipv6_Address. If the entry does not exist, then it is created. +// It returns the existing or new list member. +func (t *Interface_RoutedVlan_Ipv6_Address) GetOrCreateVrrpGroup(VirtualRouterId uint8) *Interface_RoutedVlan_Ipv6_Address_VrrpGroup { + + key := VirtualRouterId + + if v, ok := t.VrrpGroup[key]; ok { + return v + } + // Panic if we receive an error, since we should have retrieved an existing + // list member. This allows chaining of GetOrCreate methods. + v, err := t.NewVrrpGroup(VirtualRouterId) + if err != nil { + panic(fmt.Sprintf("GetOrCreateVrrpGroup got unexpected error: %v", err)) + } + return v +} + +// GetVrrpGroup retrieves the value with the specified key from +// the VrrpGroup map field of Interface_RoutedVlan_Ipv6_Address. If the receiver is nil, or +// the specified key is not present in the list, nil is returned such that Get* +// methods may be safely chained. +func (t *Interface_RoutedVlan_Ipv6_Address) GetVrrpGroup(VirtualRouterId uint8) *Interface_RoutedVlan_Ipv6_Address_VrrpGroup { + + if t == nil { + return nil + } + + key := VirtualRouterId + + if lm, ok := t.VrrpGroup[key]; ok { + return lm + } + return nil +} + +// DeleteVrrpGroup deletes the value with the specified keys from +// the receiver Interface_RoutedVlan_Ipv6_Address. If there is no such element, the function +// is a no-op. +func (t *Interface_RoutedVlan_Ipv6_Address) DeleteVrrpGroup(VirtualRouterId uint8) { + key := VirtualRouterId + + delete(t.VrrpGroup, key) +} + +// AppendVrrpGroup appends the supplied Interface_RoutedVlan_Ipv6_Address_VrrpGroup struct to the +// list VrrpGroup of Interface_RoutedVlan_Ipv6_Address. If the key value(s) specified in +// the supplied Interface_RoutedVlan_Ipv6_Address_VrrpGroup already exist in the list, an error is +// returned. +func (t *Interface_RoutedVlan_Ipv6_Address) AppendVrrpGroup(v *Interface_RoutedVlan_Ipv6_Address_VrrpGroup) error { + if v.VirtualRouterId == nil { + return fmt.Errorf("invalid nil key received for VirtualRouterId") + } + + key := *v.VirtualRouterId + + // Initialise the list within the receiver struct if it has not already been + // created. + if t.VrrpGroup == nil { + t.VrrpGroup = make(map[uint8]*Interface_RoutedVlan_Ipv6_Address_VrrpGroup) + } + + if _, ok := t.VrrpGroup[key]; ok { + return fmt.Errorf("duplicate key for list VrrpGroup %v", key) + } + + t.VrrpGroup[key] = v + return nil +} + +// GetIp retrieves the value of the leaf Ip from the Interface_RoutedVlan_Ipv6_Address +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Ip is set, it can +// safely use t.GetIp() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Ip == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv6_Address) GetIp() string { + if t == nil || t.Ip == nil { + return "" + } + return *t.Ip +} + +// GetOrigin retrieves the value of the leaf Origin from the Interface_RoutedVlan_Ipv6_Address +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Origin is set, it can +// safely use t.GetOrigin() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Origin == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv6_Address) GetOrigin() E_IfIp_IpAddressOrigin { + if t == nil || t.Origin == 0 { + return 0 + } + return t.Origin +} + +// GetPrefixLength retrieves the value of the leaf PrefixLength from the Interface_RoutedVlan_Ipv6_Address +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if PrefixLength is set, it can +// safely use t.GetPrefixLength() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.PrefixLength == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv6_Address) GetPrefixLength() uint8 { + if t == nil || t.PrefixLength == nil { + return 0 + } + return *t.PrefixLength +} + +// GetStatus retrieves the value of the leaf Status from the Interface_RoutedVlan_Ipv6_Address +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Status is set, it can +// safely use t.GetStatus() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Status == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv6_Address) GetStatus() E_Address_Status { + if t == nil || t.Status == 0 { + return 0 + } + return t.Status +} + +// GetType retrieves the value of the leaf Type from the Interface_RoutedVlan_Ipv6_Address +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Type is set, it can +// safely use t.GetType() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Type == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv6_Address) GetType() E_InetTypes_Ipv6AddressType { + if t == nil || t.Type == 0 { + return InetTypes_Ipv6AddressType_GLOBAL_UNICAST + } + return t.Type +} + +// SetIp sets the value of the leaf Ip in the Interface_RoutedVlan_Ipv6_Address +// struct. +func (t *Interface_RoutedVlan_Ipv6_Address) SetIp(v string) { + t.Ip = &v +} + +// SetOrigin sets the value of the leaf Origin in the Interface_RoutedVlan_Ipv6_Address +// struct. +func (t *Interface_RoutedVlan_Ipv6_Address) SetOrigin(v E_IfIp_IpAddressOrigin) { + t.Origin = v +} + +// SetPrefixLength sets the value of the leaf PrefixLength in the Interface_RoutedVlan_Ipv6_Address +// struct. +func (t *Interface_RoutedVlan_Ipv6_Address) SetPrefixLength(v uint8) { + t.PrefixLength = &v +} + +// SetStatus sets the value of the leaf Status in the Interface_RoutedVlan_Ipv6_Address +// struct. +func (t *Interface_RoutedVlan_Ipv6_Address) SetStatus(v E_Address_Status) { + t.Status = v +} + +// SetType sets the value of the leaf Type in the Interface_RoutedVlan_Ipv6_Address +// struct. +func (t *Interface_RoutedVlan_Ipv6_Address) SetType(v E_InetTypes_Ipv6AddressType) { + t.Type = v +} + +// PopulateDefaults recursively populates unset leaf fields in the Interface_RoutedVlan_Ipv6_Address +// with default values as specified in the YANG schema, instantiating any nil +// container fields. +func (t *Interface_RoutedVlan_Ipv6_Address) PopulateDefaults() { + if t == nil { + return + } + ygot.BuildEmptyTree(t) + if t.Type == 0 { + t.Type = InetTypes_Ipv6AddressType_GLOBAL_UNICAST + } + for _, e := range t.VrrpGroup { + e.PopulateDefaults() + } +} + +// ΛListKeyMap returns the keys of the Interface_RoutedVlan_Ipv6_Address struct, which is a YANG list entry. +func (t *Interface_RoutedVlan_Ipv6_Address) ΛListKeyMap() (map[string]interface{}, error) { + if t.Ip == nil { + return nil, fmt.Errorf("nil value for key Ip") + } + + return map[string]interface{}{ + "ip": *t.Ip, + }, nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_RoutedVlan_Ipv6_Address) ΛValidate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["Interface_RoutedVlan_Ipv6_Address"], t, opts...); err != nil { + return err + } + return nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_RoutedVlan_Ipv6_Address) Validate(opts ...ygot.ValidationOption) error { + return t.ΛValidate(opts...) +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *Interface_RoutedVlan_Ipv6_Address) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// ΛBelongingModule returns the name of the module that defines the namespace +// of Interface_RoutedVlan_Ipv6_Address. +func (*Interface_RoutedVlan_Ipv6_Address) ΛBelongingModule() string { + return "openconfig-if-ip" +} + +// Interface_RoutedVlan_Ipv6_Address_VrrpGroup represents the /openconfig-interfaces/interfaces/interface/routed-vlan/ipv6/addresses/address/vrrp/vrrp-group YANG schema element. +type Interface_RoutedVlan_Ipv6_Address_VrrpGroup struct { + AcceptMode *bool `path:"config/accept-mode" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/accept-mode" shadow-module:"openconfig-if-ip/openconfig-if-ip"` + AdvertisementInterval *uint16 `path:"config/advertisement-interval" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/advertisement-interval" shadow-module:"openconfig-if-ip/openconfig-if-ip"` + CurrentPriority *uint8 `path:"state/current-priority" module:"openconfig-if-ip/openconfig-if-ip"` + InterfaceTracking *Interface_RoutedVlan_Ipv6_Address_VrrpGroup_InterfaceTracking `path:"interface-tracking" module:"openconfig-if-ip"` + Preempt *bool `path:"config/preempt" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/preempt" shadow-module:"openconfig-if-ip/openconfig-if-ip"` + PreemptDelay *uint16 `path:"config/preempt-delay" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/preempt-delay" shadow-module:"openconfig-if-ip/openconfig-if-ip"` + Priority *uint8 `path:"config/priority" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/priority" shadow-module:"openconfig-if-ip/openconfig-if-ip"` + VirtualAddress []string `path:"config/virtual-address" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/virtual-address" shadow-module:"openconfig-if-ip/openconfig-if-ip"` + VirtualLinkLocal *string `path:"config/virtual-link-local" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/virtual-link-local" shadow-module:"openconfig-if-ip/openconfig-if-ip"` + VirtualRouterId *uint8 `path:"config/virtual-router-id|virtual-router-id" module:"openconfig-if-ip/openconfig-if-ip|openconfig-if-ip" shadow-path:"state/virtual-router-id|virtual-router-id" shadow-module:"openconfig-if-ip/openconfig-if-ip|openconfig-if-ip"` +} + +// IsYANGGoStruct ensures that Interface_RoutedVlan_Ipv6_Address_VrrpGroup implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*Interface_RoutedVlan_Ipv6_Address_VrrpGroup) IsYANGGoStruct() {} + +// GetOrCreateInterfaceTracking retrieves the value of the InterfaceTracking field +// or returns the existing field if it already exists. +func (t *Interface_RoutedVlan_Ipv6_Address_VrrpGroup) GetOrCreateInterfaceTracking() *Interface_RoutedVlan_Ipv6_Address_VrrpGroup_InterfaceTracking { + if t.InterfaceTracking != nil { + return t.InterfaceTracking + } + t.InterfaceTracking = &Interface_RoutedVlan_Ipv6_Address_VrrpGroup_InterfaceTracking{} + return t.InterfaceTracking +} + +// GetInterfaceTracking returns the value of the InterfaceTracking struct pointer +// from Interface_RoutedVlan_Ipv6_Address_VrrpGroup. If the receiver or the field InterfaceTracking is nil, nil +// is returned such that the Get* methods can be safely chained. +func (t *Interface_RoutedVlan_Ipv6_Address_VrrpGroup) GetInterfaceTracking() *Interface_RoutedVlan_Ipv6_Address_VrrpGroup_InterfaceTracking { + if t != nil && t.InterfaceTracking != nil { + return t.InterfaceTracking + } + return nil +} + +// GetAcceptMode retrieves the value of the leaf AcceptMode from the Interface_RoutedVlan_Ipv6_Address_VrrpGroup +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if AcceptMode is set, it can +// safely use t.GetAcceptMode() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.AcceptMode == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv6_Address_VrrpGroup) GetAcceptMode() bool { + if t == nil || t.AcceptMode == nil { + return false + } + return *t.AcceptMode +} + +// GetAdvertisementInterval retrieves the value of the leaf AdvertisementInterval from the Interface_RoutedVlan_Ipv6_Address_VrrpGroup +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if AdvertisementInterval is set, it can +// safely use t.GetAdvertisementInterval() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.AdvertisementInterval == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv6_Address_VrrpGroup) GetAdvertisementInterval() uint16 { + if t == nil || t.AdvertisementInterval == nil { + return 100 + } + return *t.AdvertisementInterval +} + +// GetCurrentPriority retrieves the value of the leaf CurrentPriority from the Interface_RoutedVlan_Ipv6_Address_VrrpGroup +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if CurrentPriority is set, it can +// safely use t.GetCurrentPriority() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.CurrentPriority == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv6_Address_VrrpGroup) GetCurrentPriority() uint8 { + if t == nil || t.CurrentPriority == nil { + return 0 + } + return *t.CurrentPriority +} + +// GetPreempt retrieves the value of the leaf Preempt from the Interface_RoutedVlan_Ipv6_Address_VrrpGroup +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Preempt is set, it can +// safely use t.GetPreempt() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Preempt == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv6_Address_VrrpGroup) GetPreempt() bool { + if t == nil || t.Preempt == nil { + return true + } + return *t.Preempt +} + +// GetPreemptDelay retrieves the value of the leaf PreemptDelay from the Interface_RoutedVlan_Ipv6_Address_VrrpGroup +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if PreemptDelay is set, it can +// safely use t.GetPreemptDelay() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.PreemptDelay == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv6_Address_VrrpGroup) GetPreemptDelay() uint16 { + if t == nil || t.PreemptDelay == nil { + return 0 + } + return *t.PreemptDelay +} + +// GetPriority retrieves the value of the leaf Priority from the Interface_RoutedVlan_Ipv6_Address_VrrpGroup +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Priority is set, it can +// safely use t.GetPriority() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Priority == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv6_Address_VrrpGroup) GetPriority() uint8 { + if t == nil || t.Priority == nil { + return 100 + } + return *t.Priority +} + +// GetVirtualAddress retrieves the value of the leaf VirtualAddress from the Interface_RoutedVlan_Ipv6_Address_VrrpGroup +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if VirtualAddress is set, it can +// safely use t.GetVirtualAddress() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.VirtualAddress == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv6_Address_VrrpGroup) GetVirtualAddress() []string { + if t == nil || t.VirtualAddress == nil { + return nil + } + return t.VirtualAddress +} + +// GetVirtualLinkLocal retrieves the value of the leaf VirtualLinkLocal from the Interface_RoutedVlan_Ipv6_Address_VrrpGroup +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if VirtualLinkLocal is set, it can +// safely use t.GetVirtualLinkLocal() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.VirtualLinkLocal == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv6_Address_VrrpGroup) GetVirtualLinkLocal() string { + if t == nil || t.VirtualLinkLocal == nil { + return "" + } + return *t.VirtualLinkLocal +} + +// GetVirtualRouterId retrieves the value of the leaf VirtualRouterId from the Interface_RoutedVlan_Ipv6_Address_VrrpGroup +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if VirtualRouterId is set, it can +// safely use t.GetVirtualRouterId() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.VirtualRouterId == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv6_Address_VrrpGroup) GetVirtualRouterId() uint8 { + if t == nil || t.VirtualRouterId == nil { + return 0 + } + return *t.VirtualRouterId +} + +// SetAcceptMode sets the value of the leaf AcceptMode in the Interface_RoutedVlan_Ipv6_Address_VrrpGroup +// struct. +func (t *Interface_RoutedVlan_Ipv6_Address_VrrpGroup) SetAcceptMode(v bool) { + t.AcceptMode = &v +} + +// SetAdvertisementInterval sets the value of the leaf AdvertisementInterval in the Interface_RoutedVlan_Ipv6_Address_VrrpGroup +// struct. +func (t *Interface_RoutedVlan_Ipv6_Address_VrrpGroup) SetAdvertisementInterval(v uint16) { + t.AdvertisementInterval = &v +} + +// SetCurrentPriority sets the value of the leaf CurrentPriority in the Interface_RoutedVlan_Ipv6_Address_VrrpGroup +// struct. +func (t *Interface_RoutedVlan_Ipv6_Address_VrrpGroup) SetCurrentPriority(v uint8) { + t.CurrentPriority = &v +} + +// SetPreempt sets the value of the leaf Preempt in the Interface_RoutedVlan_Ipv6_Address_VrrpGroup +// struct. +func (t *Interface_RoutedVlan_Ipv6_Address_VrrpGroup) SetPreempt(v bool) { + t.Preempt = &v +} + +// SetPreemptDelay sets the value of the leaf PreemptDelay in the Interface_RoutedVlan_Ipv6_Address_VrrpGroup +// struct. +func (t *Interface_RoutedVlan_Ipv6_Address_VrrpGroup) SetPreemptDelay(v uint16) { + t.PreemptDelay = &v +} + +// SetPriority sets the value of the leaf Priority in the Interface_RoutedVlan_Ipv6_Address_VrrpGroup +// struct. +func (t *Interface_RoutedVlan_Ipv6_Address_VrrpGroup) SetPriority(v uint8) { + t.Priority = &v +} + +// SetVirtualAddress sets the value of the leaf VirtualAddress in the Interface_RoutedVlan_Ipv6_Address_VrrpGroup +// struct. +func (t *Interface_RoutedVlan_Ipv6_Address_VrrpGroup) SetVirtualAddress(v []string) { + t.VirtualAddress = v +} + +// SetVirtualLinkLocal sets the value of the leaf VirtualLinkLocal in the Interface_RoutedVlan_Ipv6_Address_VrrpGroup +// struct. +func (t *Interface_RoutedVlan_Ipv6_Address_VrrpGroup) SetVirtualLinkLocal(v string) { + t.VirtualLinkLocal = &v +} + +// SetVirtualRouterId sets the value of the leaf VirtualRouterId in the Interface_RoutedVlan_Ipv6_Address_VrrpGroup +// struct. +func (t *Interface_RoutedVlan_Ipv6_Address_VrrpGroup) SetVirtualRouterId(v uint8) { + t.VirtualRouterId = &v +} + +// PopulateDefaults recursively populates unset leaf fields in the Interface_RoutedVlan_Ipv6_Address_VrrpGroup +// with default values as specified in the YANG schema, instantiating any nil +// container fields. +func (t *Interface_RoutedVlan_Ipv6_Address_VrrpGroup) PopulateDefaults() { + if t == nil { + return + } + ygot.BuildEmptyTree(t) + if t.AcceptMode == nil { + var v bool = false + t.AcceptMode = &v + } + if t.AdvertisementInterval == nil { + var v uint16 = 100 + t.AdvertisementInterval = &v + } + if t.Preempt == nil { + var v bool = true + t.Preempt = &v + } + if t.PreemptDelay == nil { + var v uint16 = 0 + t.PreemptDelay = &v + } + if t.Priority == nil { + var v uint8 = 100 + t.Priority = &v + } + t.InterfaceTracking.PopulateDefaults() +} + +// ΛListKeyMap returns the keys of the Interface_RoutedVlan_Ipv6_Address_VrrpGroup struct, which is a YANG list entry. +func (t *Interface_RoutedVlan_Ipv6_Address_VrrpGroup) ΛListKeyMap() (map[string]interface{}, error) { + if t.VirtualRouterId == nil { + return nil, fmt.Errorf("nil value for key VirtualRouterId") + } + + return map[string]interface{}{ + "virtual-router-id": *t.VirtualRouterId, + }, nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_RoutedVlan_Ipv6_Address_VrrpGroup) ΛValidate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["Interface_RoutedVlan_Ipv6_Address_VrrpGroup"], t, opts...); err != nil { + return err + } + return nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_RoutedVlan_Ipv6_Address_VrrpGroup) Validate(opts ...ygot.ValidationOption) error { + return t.ΛValidate(opts...) +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *Interface_RoutedVlan_Ipv6_Address_VrrpGroup) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// ΛBelongingModule returns the name of the module that defines the namespace +// of Interface_RoutedVlan_Ipv6_Address_VrrpGroup. +func (*Interface_RoutedVlan_Ipv6_Address_VrrpGroup) ΛBelongingModule() string { + return "openconfig-if-ip" +} + +// Interface_RoutedVlan_Ipv6_Address_VrrpGroup_InterfaceTracking represents the /openconfig-interfaces/interfaces/interface/routed-vlan/ipv6/addresses/address/vrrp/vrrp-group/interface-tracking YANG schema element. +type Interface_RoutedVlan_Ipv6_Address_VrrpGroup_InterfaceTracking struct { + PriorityDecrement *uint8 `path:"config/priority-decrement" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/priority-decrement" shadow-module:"openconfig-if-ip/openconfig-if-ip"` + TrackInterface []string `path:"config/track-interface" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/track-interface" shadow-module:"openconfig-if-ip/openconfig-if-ip"` +} + +// IsYANGGoStruct ensures that Interface_RoutedVlan_Ipv6_Address_VrrpGroup_InterfaceTracking implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*Interface_RoutedVlan_Ipv6_Address_VrrpGroup_InterfaceTracking) IsYANGGoStruct() {} + +// GetPriorityDecrement retrieves the value of the leaf PriorityDecrement from the Interface_RoutedVlan_Ipv6_Address_VrrpGroup_InterfaceTracking +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if PriorityDecrement is set, it can +// safely use t.GetPriorityDecrement() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.PriorityDecrement == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv6_Address_VrrpGroup_InterfaceTracking) GetPriorityDecrement() uint8 { + if t == nil || t.PriorityDecrement == nil { + return 0 + } + return *t.PriorityDecrement +} + +// GetTrackInterface retrieves the value of the leaf TrackInterface from the Interface_RoutedVlan_Ipv6_Address_VrrpGroup_InterfaceTracking +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if TrackInterface is set, it can +// safely use t.GetTrackInterface() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.TrackInterface == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv6_Address_VrrpGroup_InterfaceTracking) GetTrackInterface() []string { + if t == nil || t.TrackInterface == nil { + return nil + } + return t.TrackInterface +} + +// SetPriorityDecrement sets the value of the leaf PriorityDecrement in the Interface_RoutedVlan_Ipv6_Address_VrrpGroup_InterfaceTracking +// struct. +func (t *Interface_RoutedVlan_Ipv6_Address_VrrpGroup_InterfaceTracking) SetPriorityDecrement(v uint8) { + t.PriorityDecrement = &v +} + +// SetTrackInterface sets the value of the leaf TrackInterface in the Interface_RoutedVlan_Ipv6_Address_VrrpGroup_InterfaceTracking +// struct. +func (t *Interface_RoutedVlan_Ipv6_Address_VrrpGroup_InterfaceTracking) SetTrackInterface(v []string) { + t.TrackInterface = v +} + +// PopulateDefaults recursively populates unset leaf fields in the Interface_RoutedVlan_Ipv6_Address_VrrpGroup_InterfaceTracking +// with default values as specified in the YANG schema, instantiating any nil +// container fields. +func (t *Interface_RoutedVlan_Ipv6_Address_VrrpGroup_InterfaceTracking) PopulateDefaults() { + if t == nil { + return + } + ygot.BuildEmptyTree(t) + if t.PriorityDecrement == nil { + var v uint8 = 0 + t.PriorityDecrement = &v + } +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_RoutedVlan_Ipv6_Address_VrrpGroup_InterfaceTracking) ΛValidate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["Interface_RoutedVlan_Ipv6_Address_VrrpGroup_InterfaceTracking"], t, opts...); err != nil { + return err + } + return nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_RoutedVlan_Ipv6_Address_VrrpGroup_InterfaceTracking) Validate(opts ...ygot.ValidationOption) error { + return t.ΛValidate(opts...) +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *Interface_RoutedVlan_Ipv6_Address_VrrpGroup_InterfaceTracking) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// ΛBelongingModule returns the name of the module that defines the namespace +// of Interface_RoutedVlan_Ipv6_Address_VrrpGroup_InterfaceTracking. +func (*Interface_RoutedVlan_Ipv6_Address_VrrpGroup_InterfaceTracking) ΛBelongingModule() string { + return "openconfig-if-ip" +} + +// Interface_RoutedVlan_Ipv6_Counters represents the /openconfig-interfaces/interfaces/interface/routed-vlan/ipv6/state/counters YANG schema element. +type Interface_RoutedVlan_Ipv6_Counters struct { + InDiscardedPkts *uint64 `path:"in-discarded-pkts" module:"openconfig-if-ip"` + InErrorPkts *uint64 `path:"in-error-pkts" module:"openconfig-if-ip"` + InForwardedOctets *uint64 `path:"in-forwarded-octets" module:"openconfig-if-ip"` + InForwardedPkts *uint64 `path:"in-forwarded-pkts" module:"openconfig-if-ip"` + InMulticastOctets *uint64 `path:"in-multicast-octets" module:"openconfig-if-ip"` + InMulticastPkts *uint64 `path:"in-multicast-pkts" module:"openconfig-if-ip"` + InOctets *uint64 `path:"in-octets" module:"openconfig-if-ip"` + InPkts *uint64 `path:"in-pkts" module:"openconfig-if-ip"` + OutDiscardedPkts *uint64 `path:"out-discarded-pkts" module:"openconfig-if-ip"` + OutErrorPkts *uint64 `path:"out-error-pkts" module:"openconfig-if-ip"` + OutForwardedOctets *uint64 `path:"out-forwarded-octets" module:"openconfig-if-ip"` + OutForwardedPkts *uint64 `path:"out-forwarded-pkts" module:"openconfig-if-ip"` + OutMulticastOctets *uint64 `path:"out-multicast-octets" module:"openconfig-if-ip"` + OutMulticastPkts *uint64 `path:"out-multicast-pkts" module:"openconfig-if-ip"` + OutOctets *uint64 `path:"out-octets" module:"openconfig-if-ip"` + OutPkts *uint64 `path:"out-pkts" module:"openconfig-if-ip"` +} + +// IsYANGGoStruct ensures that Interface_RoutedVlan_Ipv6_Counters implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*Interface_RoutedVlan_Ipv6_Counters) IsYANGGoStruct() {} + +// GetInDiscardedPkts retrieves the value of the leaf InDiscardedPkts from the Interface_RoutedVlan_Ipv6_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if InDiscardedPkts is set, it can +// safely use t.GetInDiscardedPkts() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.InDiscardedPkts == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv6_Counters) GetInDiscardedPkts() uint64 { + if t == nil || t.InDiscardedPkts == nil { + return 0 + } + return *t.InDiscardedPkts +} + +// GetInErrorPkts retrieves the value of the leaf InErrorPkts from the Interface_RoutedVlan_Ipv6_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if InErrorPkts is set, it can +// safely use t.GetInErrorPkts() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.InErrorPkts == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv6_Counters) GetInErrorPkts() uint64 { + if t == nil || t.InErrorPkts == nil { + return 0 + } + return *t.InErrorPkts +} + +// GetInForwardedOctets retrieves the value of the leaf InForwardedOctets from the Interface_RoutedVlan_Ipv6_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if InForwardedOctets is set, it can +// safely use t.GetInForwardedOctets() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.InForwardedOctets == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv6_Counters) GetInForwardedOctets() uint64 { + if t == nil || t.InForwardedOctets == nil { + return 0 + } + return *t.InForwardedOctets +} + +// GetInForwardedPkts retrieves the value of the leaf InForwardedPkts from the Interface_RoutedVlan_Ipv6_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if InForwardedPkts is set, it can +// safely use t.GetInForwardedPkts() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.InForwardedPkts == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv6_Counters) GetInForwardedPkts() uint64 { + if t == nil || t.InForwardedPkts == nil { + return 0 + } + return *t.InForwardedPkts +} + +// GetInMulticastOctets retrieves the value of the leaf InMulticastOctets from the Interface_RoutedVlan_Ipv6_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if InMulticastOctets is set, it can +// safely use t.GetInMulticastOctets() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.InMulticastOctets == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv6_Counters) GetInMulticastOctets() uint64 { + if t == nil || t.InMulticastOctets == nil { + return 0 + } + return *t.InMulticastOctets +} + +// GetInMulticastPkts retrieves the value of the leaf InMulticastPkts from the Interface_RoutedVlan_Ipv6_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if InMulticastPkts is set, it can +// safely use t.GetInMulticastPkts() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.InMulticastPkts == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv6_Counters) GetInMulticastPkts() uint64 { + if t == nil || t.InMulticastPkts == nil { + return 0 + } + return *t.InMulticastPkts +} + +// GetInOctets retrieves the value of the leaf InOctets from the Interface_RoutedVlan_Ipv6_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if InOctets is set, it can +// safely use t.GetInOctets() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.InOctets == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv6_Counters) GetInOctets() uint64 { + if t == nil || t.InOctets == nil { + return 0 + } + return *t.InOctets +} + +// GetInPkts retrieves the value of the leaf InPkts from the Interface_RoutedVlan_Ipv6_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if InPkts is set, it can +// safely use t.GetInPkts() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.InPkts == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv6_Counters) GetInPkts() uint64 { + if t == nil || t.InPkts == nil { + return 0 + } + return *t.InPkts +} + +// GetOutDiscardedPkts retrieves the value of the leaf OutDiscardedPkts from the Interface_RoutedVlan_Ipv6_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if OutDiscardedPkts is set, it can +// safely use t.GetOutDiscardedPkts() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.OutDiscardedPkts == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv6_Counters) GetOutDiscardedPkts() uint64 { + if t == nil || t.OutDiscardedPkts == nil { + return 0 + } + return *t.OutDiscardedPkts +} + +// GetOutErrorPkts retrieves the value of the leaf OutErrorPkts from the Interface_RoutedVlan_Ipv6_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if OutErrorPkts is set, it can +// safely use t.GetOutErrorPkts() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.OutErrorPkts == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv6_Counters) GetOutErrorPkts() uint64 { + if t == nil || t.OutErrorPkts == nil { + return 0 + } + return *t.OutErrorPkts +} + +// GetOutForwardedOctets retrieves the value of the leaf OutForwardedOctets from the Interface_RoutedVlan_Ipv6_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if OutForwardedOctets is set, it can +// safely use t.GetOutForwardedOctets() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.OutForwardedOctets == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv6_Counters) GetOutForwardedOctets() uint64 { + if t == nil || t.OutForwardedOctets == nil { + return 0 + } + return *t.OutForwardedOctets +} + +// GetOutForwardedPkts retrieves the value of the leaf OutForwardedPkts from the Interface_RoutedVlan_Ipv6_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if OutForwardedPkts is set, it can +// safely use t.GetOutForwardedPkts() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.OutForwardedPkts == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv6_Counters) GetOutForwardedPkts() uint64 { + if t == nil || t.OutForwardedPkts == nil { + return 0 + } + return *t.OutForwardedPkts +} + +// GetOutMulticastOctets retrieves the value of the leaf OutMulticastOctets from the Interface_RoutedVlan_Ipv6_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if OutMulticastOctets is set, it can +// safely use t.GetOutMulticastOctets() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.OutMulticastOctets == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv6_Counters) GetOutMulticastOctets() uint64 { + if t == nil || t.OutMulticastOctets == nil { + return 0 + } + return *t.OutMulticastOctets +} + +// GetOutMulticastPkts retrieves the value of the leaf OutMulticastPkts from the Interface_RoutedVlan_Ipv6_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if OutMulticastPkts is set, it can +// safely use t.GetOutMulticastPkts() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.OutMulticastPkts == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv6_Counters) GetOutMulticastPkts() uint64 { + if t == nil || t.OutMulticastPkts == nil { + return 0 + } + return *t.OutMulticastPkts +} + +// GetOutOctets retrieves the value of the leaf OutOctets from the Interface_RoutedVlan_Ipv6_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if OutOctets is set, it can +// safely use t.GetOutOctets() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.OutOctets == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv6_Counters) GetOutOctets() uint64 { + if t == nil || t.OutOctets == nil { + return 0 + } + return *t.OutOctets +} + +// GetOutPkts retrieves the value of the leaf OutPkts from the Interface_RoutedVlan_Ipv6_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if OutPkts is set, it can +// safely use t.GetOutPkts() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.OutPkts == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv6_Counters) GetOutPkts() uint64 { + if t == nil || t.OutPkts == nil { + return 0 + } + return *t.OutPkts +} + +// SetInDiscardedPkts sets the value of the leaf InDiscardedPkts in the Interface_RoutedVlan_Ipv6_Counters +// struct. +func (t *Interface_RoutedVlan_Ipv6_Counters) SetInDiscardedPkts(v uint64) { + t.InDiscardedPkts = &v +} + +// SetInErrorPkts sets the value of the leaf InErrorPkts in the Interface_RoutedVlan_Ipv6_Counters +// struct. +func (t *Interface_RoutedVlan_Ipv6_Counters) SetInErrorPkts(v uint64) { + t.InErrorPkts = &v +} + +// SetInForwardedOctets sets the value of the leaf InForwardedOctets in the Interface_RoutedVlan_Ipv6_Counters +// struct. +func (t *Interface_RoutedVlan_Ipv6_Counters) SetInForwardedOctets(v uint64) { + t.InForwardedOctets = &v +} + +// SetInForwardedPkts sets the value of the leaf InForwardedPkts in the Interface_RoutedVlan_Ipv6_Counters +// struct. +func (t *Interface_RoutedVlan_Ipv6_Counters) SetInForwardedPkts(v uint64) { + t.InForwardedPkts = &v +} + +// SetInMulticastOctets sets the value of the leaf InMulticastOctets in the Interface_RoutedVlan_Ipv6_Counters +// struct. +func (t *Interface_RoutedVlan_Ipv6_Counters) SetInMulticastOctets(v uint64) { + t.InMulticastOctets = &v +} + +// SetInMulticastPkts sets the value of the leaf InMulticastPkts in the Interface_RoutedVlan_Ipv6_Counters +// struct. +func (t *Interface_RoutedVlan_Ipv6_Counters) SetInMulticastPkts(v uint64) { + t.InMulticastPkts = &v +} + +// SetInOctets sets the value of the leaf InOctets in the Interface_RoutedVlan_Ipv6_Counters +// struct. +func (t *Interface_RoutedVlan_Ipv6_Counters) SetInOctets(v uint64) { + t.InOctets = &v +} + +// SetInPkts sets the value of the leaf InPkts in the Interface_RoutedVlan_Ipv6_Counters +// struct. +func (t *Interface_RoutedVlan_Ipv6_Counters) SetInPkts(v uint64) { + t.InPkts = &v +} + +// SetOutDiscardedPkts sets the value of the leaf OutDiscardedPkts in the Interface_RoutedVlan_Ipv6_Counters +// struct. +func (t *Interface_RoutedVlan_Ipv6_Counters) SetOutDiscardedPkts(v uint64) { + t.OutDiscardedPkts = &v +} + +// SetOutErrorPkts sets the value of the leaf OutErrorPkts in the Interface_RoutedVlan_Ipv6_Counters +// struct. +func (t *Interface_RoutedVlan_Ipv6_Counters) SetOutErrorPkts(v uint64) { + t.OutErrorPkts = &v +} + +// SetOutForwardedOctets sets the value of the leaf OutForwardedOctets in the Interface_RoutedVlan_Ipv6_Counters +// struct. +func (t *Interface_RoutedVlan_Ipv6_Counters) SetOutForwardedOctets(v uint64) { + t.OutForwardedOctets = &v +} + +// SetOutForwardedPkts sets the value of the leaf OutForwardedPkts in the Interface_RoutedVlan_Ipv6_Counters +// struct. +func (t *Interface_RoutedVlan_Ipv6_Counters) SetOutForwardedPkts(v uint64) { + t.OutForwardedPkts = &v +} + +// SetOutMulticastOctets sets the value of the leaf OutMulticastOctets in the Interface_RoutedVlan_Ipv6_Counters +// struct. +func (t *Interface_RoutedVlan_Ipv6_Counters) SetOutMulticastOctets(v uint64) { + t.OutMulticastOctets = &v +} + +// SetOutMulticastPkts sets the value of the leaf OutMulticastPkts in the Interface_RoutedVlan_Ipv6_Counters +// struct. +func (t *Interface_RoutedVlan_Ipv6_Counters) SetOutMulticastPkts(v uint64) { + t.OutMulticastPkts = &v +} + +// SetOutOctets sets the value of the leaf OutOctets in the Interface_RoutedVlan_Ipv6_Counters +// struct. +func (t *Interface_RoutedVlan_Ipv6_Counters) SetOutOctets(v uint64) { + t.OutOctets = &v +} + +// SetOutPkts sets the value of the leaf OutPkts in the Interface_RoutedVlan_Ipv6_Counters +// struct. +func (t *Interface_RoutedVlan_Ipv6_Counters) SetOutPkts(v uint64) { + t.OutPkts = &v +} + +// PopulateDefaults recursively populates unset leaf fields in the Interface_RoutedVlan_Ipv6_Counters +// with default values as specified in the YANG schema, instantiating any nil +// container fields. +func (t *Interface_RoutedVlan_Ipv6_Counters) PopulateDefaults() { + if t == nil { + return + } + ygot.BuildEmptyTree(t) +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_RoutedVlan_Ipv6_Counters) ΛValidate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["Interface_RoutedVlan_Ipv6_Counters"], t, opts...); err != nil { + return err + } + return nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_RoutedVlan_Ipv6_Counters) Validate(opts ...ygot.ValidationOption) error { + return t.ΛValidate(opts...) +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *Interface_RoutedVlan_Ipv6_Counters) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// ΛBelongingModule returns the name of the module that defines the namespace +// of Interface_RoutedVlan_Ipv6_Counters. +func (*Interface_RoutedVlan_Ipv6_Counters) ΛBelongingModule() string { + return "openconfig-if-ip" +} + +// Interface_RoutedVlan_Ipv6_Neighbor represents the /openconfig-interfaces/interfaces/interface/routed-vlan/ipv6/neighbors/neighbor YANG schema element. +type Interface_RoutedVlan_Ipv6_Neighbor struct { + Ip *string `path:"config/ip|ip" module:"openconfig-if-ip/openconfig-if-ip|openconfig-if-ip" shadow-path:"state/ip|ip" shadow-module:"openconfig-if-ip/openconfig-if-ip|openconfig-if-ip"` + IsRouter *bool `path:"state/is-router" module:"openconfig-if-ip/openconfig-if-ip"` + LinkLayerAddress *string `path:"config/link-layer-address" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/link-layer-address" shadow-module:"openconfig-if-ip/openconfig-if-ip"` + NeighborState E_Neighbor_NeighborState `path:"state/neighbor-state" module:"openconfig-if-ip/openconfig-if-ip"` + Origin E_IfIp_NeighborOrigin `path:"state/origin" module:"openconfig-if-ip/openconfig-if-ip"` +} + +// IsYANGGoStruct ensures that Interface_RoutedVlan_Ipv6_Neighbor implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*Interface_RoutedVlan_Ipv6_Neighbor) IsYANGGoStruct() {} + +// GetIp retrieves the value of the leaf Ip from the Interface_RoutedVlan_Ipv6_Neighbor +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Ip is set, it can +// safely use t.GetIp() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Ip == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv6_Neighbor) GetIp() string { + if t == nil || t.Ip == nil { + return "" + } + return *t.Ip +} + +// GetIsRouter retrieves the value of the leaf IsRouter from the Interface_RoutedVlan_Ipv6_Neighbor +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if IsRouter is set, it can +// safely use t.GetIsRouter() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.IsRouter == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv6_Neighbor) GetIsRouter() bool { + if t == nil || t.IsRouter == nil { + return false + } + return *t.IsRouter +} + +// GetLinkLayerAddress retrieves the value of the leaf LinkLayerAddress from the Interface_RoutedVlan_Ipv6_Neighbor +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if LinkLayerAddress is set, it can +// safely use t.GetLinkLayerAddress() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.LinkLayerAddress == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv6_Neighbor) GetLinkLayerAddress() string { + if t == nil || t.LinkLayerAddress == nil { + return "" + } + return *t.LinkLayerAddress +} + +// GetNeighborState retrieves the value of the leaf NeighborState from the Interface_RoutedVlan_Ipv6_Neighbor +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if NeighborState is set, it can +// safely use t.GetNeighborState() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.NeighborState == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv6_Neighbor) GetNeighborState() E_Neighbor_NeighborState { + if t == nil || t.NeighborState == 0 { + return 0 + } + return t.NeighborState +} + +// GetOrigin retrieves the value of the leaf Origin from the Interface_RoutedVlan_Ipv6_Neighbor +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Origin is set, it can +// safely use t.GetOrigin() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Origin == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv6_Neighbor) GetOrigin() E_IfIp_NeighborOrigin { + if t == nil || t.Origin == 0 { + return 0 + } + return t.Origin +} + +// SetIp sets the value of the leaf Ip in the Interface_RoutedVlan_Ipv6_Neighbor +// struct. +func (t *Interface_RoutedVlan_Ipv6_Neighbor) SetIp(v string) { + t.Ip = &v +} + +// SetIsRouter sets the value of the leaf IsRouter in the Interface_RoutedVlan_Ipv6_Neighbor +// struct. +func (t *Interface_RoutedVlan_Ipv6_Neighbor) SetIsRouter(v bool) { + t.IsRouter = &v +} + +// SetLinkLayerAddress sets the value of the leaf LinkLayerAddress in the Interface_RoutedVlan_Ipv6_Neighbor +// struct. +func (t *Interface_RoutedVlan_Ipv6_Neighbor) SetLinkLayerAddress(v string) { + t.LinkLayerAddress = &v +} + +// SetNeighborState sets the value of the leaf NeighborState in the Interface_RoutedVlan_Ipv6_Neighbor +// struct. +func (t *Interface_RoutedVlan_Ipv6_Neighbor) SetNeighborState(v E_Neighbor_NeighborState) { + t.NeighborState = v +} + +// SetOrigin sets the value of the leaf Origin in the Interface_RoutedVlan_Ipv6_Neighbor +// struct. +func (t *Interface_RoutedVlan_Ipv6_Neighbor) SetOrigin(v E_IfIp_NeighborOrigin) { + t.Origin = v +} + +// PopulateDefaults recursively populates unset leaf fields in the Interface_RoutedVlan_Ipv6_Neighbor +// with default values as specified in the YANG schema, instantiating any nil +// container fields. +func (t *Interface_RoutedVlan_Ipv6_Neighbor) PopulateDefaults() { + if t == nil { + return + } + ygot.BuildEmptyTree(t) +} + +// ΛListKeyMap returns the keys of the Interface_RoutedVlan_Ipv6_Neighbor struct, which is a YANG list entry. +func (t *Interface_RoutedVlan_Ipv6_Neighbor) ΛListKeyMap() (map[string]interface{}, error) { + if t.Ip == nil { + return nil, fmt.Errorf("nil value for key Ip") + } + + return map[string]interface{}{ + "ip": *t.Ip, + }, nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_RoutedVlan_Ipv6_Neighbor) ΛValidate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["Interface_RoutedVlan_Ipv6_Neighbor"], t, opts...); err != nil { + return err + } + return nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_RoutedVlan_Ipv6_Neighbor) Validate(opts ...ygot.ValidationOption) error { + return t.ΛValidate(opts...) +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *Interface_RoutedVlan_Ipv6_Neighbor) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// ΛBelongingModule returns the name of the module that defines the namespace +// of Interface_RoutedVlan_Ipv6_Neighbor. +func (*Interface_RoutedVlan_Ipv6_Neighbor) ΛBelongingModule() string { + return "openconfig-if-ip" +} + +// Interface_RoutedVlan_Ipv6_RouterAdvertisement represents the /openconfig-interfaces/interfaces/interface/routed-vlan/ipv6/router-advertisement YANG schema element. +type Interface_RoutedVlan_Ipv6_RouterAdvertisement struct { + Enable *bool `path:"config/enable" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/enable" shadow-module:"openconfig-if-ip/openconfig-if-ip"` + Interval *uint32 `path:"config/interval" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/interval" shadow-module:"openconfig-if-ip/openconfig-if-ip"` + Lifetime *uint32 `path:"config/lifetime" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/lifetime" shadow-module:"openconfig-if-ip/openconfig-if-ip"` + Managed *bool `path:"config/managed" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/managed" shadow-module:"openconfig-if-ip/openconfig-if-ip"` + Mode E_RouterAdvertisement_Mode `path:"config/mode" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/mode" shadow-module:"openconfig-if-ip/openconfig-if-ip"` + OtherConfig *bool `path:"config/other-config" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/other-config" shadow-module:"openconfig-if-ip/openconfig-if-ip"` + Prefix map[string]*Interface_RoutedVlan_Ipv6_RouterAdvertisement_Prefix `path:"prefixes/prefix" module:"openconfig-if-ip/openconfig-if-ip"` + Suppress *bool `path:"config/suppress" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/suppress" shadow-module:"openconfig-if-ip/openconfig-if-ip"` +} + +// IsYANGGoStruct ensures that Interface_RoutedVlan_Ipv6_RouterAdvertisement implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*Interface_RoutedVlan_Ipv6_RouterAdvertisement) IsYANGGoStruct() {} + +// NewPrefix creates a new entry in the Prefix list of the +// Interface_RoutedVlan_Ipv6_RouterAdvertisement struct. The keys of the list are populated from the input +// arguments. +func (t *Interface_RoutedVlan_Ipv6_RouterAdvertisement) NewPrefix(Prefix string) (*Interface_RoutedVlan_Ipv6_RouterAdvertisement_Prefix, error) { + + // Initialise the list within the receiver struct if it has not already been + // created. + if t.Prefix == nil { + t.Prefix = make(map[string]*Interface_RoutedVlan_Ipv6_RouterAdvertisement_Prefix) + } + + key := Prefix + + // Ensure that this key has not already been used in the + // list. Keyed YANG lists do not allow duplicate keys to + // be created. + if _, ok := t.Prefix[key]; ok { + return nil, fmt.Errorf("duplicate key %v for list Prefix", key) + } + + t.Prefix[key] = &Interface_RoutedVlan_Ipv6_RouterAdvertisement_Prefix{ + Prefix: &Prefix, + } + + return t.Prefix[key], nil +} + +// RenamePrefix renames an entry in the list Prefix within +// the Interface_RoutedVlan_Ipv6_RouterAdvertisement struct. The entry with key oldK is renamed to newK updating +// the key within the value. +func (t *Interface_RoutedVlan_Ipv6_RouterAdvertisement) RenamePrefix(oldK, newK string) error { + if _, ok := t.Prefix[newK]; ok { + return fmt.Errorf("key %v already exists in Prefix", newK) + } + + e, ok := t.Prefix[oldK] + if !ok { + return fmt.Errorf("key %v not found in Prefix", oldK) + } + e.Prefix = &newK + + t.Prefix[newK] = e + delete(t.Prefix, oldK) + return nil +} + +// GetOrCreatePrefixMap returns the list (map) from Interface_RoutedVlan_Ipv6_RouterAdvertisement. +// +// It initializes the field if not already initialized. +func (t *Interface_RoutedVlan_Ipv6_RouterAdvertisement) GetOrCreatePrefixMap() map[string]*Interface_RoutedVlan_Ipv6_RouterAdvertisement_Prefix { + if t.Prefix == nil { + t.Prefix = make(map[string]*Interface_RoutedVlan_Ipv6_RouterAdvertisement_Prefix) + } + return t.Prefix +} + +// GetOrCreatePrefix retrieves the value with the specified keys from +// the receiver Interface_RoutedVlan_Ipv6_RouterAdvertisement. If the entry does not exist, then it is created. +// It returns the existing or new list member. +func (t *Interface_RoutedVlan_Ipv6_RouterAdvertisement) GetOrCreatePrefix(Prefix string) *Interface_RoutedVlan_Ipv6_RouterAdvertisement_Prefix { + + key := Prefix + + if v, ok := t.Prefix[key]; ok { + return v + } + // Panic if we receive an error, since we should have retrieved an existing + // list member. This allows chaining of GetOrCreate methods. + v, err := t.NewPrefix(Prefix) + if err != nil { + panic(fmt.Sprintf("GetOrCreatePrefix got unexpected error: %v", err)) + } + return v +} + +// GetPrefix retrieves the value with the specified key from +// the Prefix map field of Interface_RoutedVlan_Ipv6_RouterAdvertisement. If the receiver is nil, or +// the specified key is not present in the list, nil is returned such that Get* +// methods may be safely chained. +func (t *Interface_RoutedVlan_Ipv6_RouterAdvertisement) GetPrefix(Prefix string) *Interface_RoutedVlan_Ipv6_RouterAdvertisement_Prefix { + + if t == nil { + return nil + } + + key := Prefix + + if lm, ok := t.Prefix[key]; ok { + return lm + } + return nil +} + +// DeletePrefix deletes the value with the specified keys from +// the receiver Interface_RoutedVlan_Ipv6_RouterAdvertisement. If there is no such element, the function +// is a no-op. +func (t *Interface_RoutedVlan_Ipv6_RouterAdvertisement) DeletePrefix(Prefix string) { + key := Prefix + + delete(t.Prefix, key) +} + +// AppendPrefix appends the supplied Interface_RoutedVlan_Ipv6_RouterAdvertisement_Prefix struct to the +// list Prefix of Interface_RoutedVlan_Ipv6_RouterAdvertisement. If the key value(s) specified in +// the supplied Interface_RoutedVlan_Ipv6_RouterAdvertisement_Prefix already exist in the list, an error is +// returned. +func (t *Interface_RoutedVlan_Ipv6_RouterAdvertisement) AppendPrefix(v *Interface_RoutedVlan_Ipv6_RouterAdvertisement_Prefix) error { + if v.Prefix == nil { + return fmt.Errorf("invalid nil key received for Prefix") + } + + key := *v.Prefix + + // Initialise the list within the receiver struct if it has not already been + // created. + if t.Prefix == nil { + t.Prefix = make(map[string]*Interface_RoutedVlan_Ipv6_RouterAdvertisement_Prefix) + } + + if _, ok := t.Prefix[key]; ok { + return fmt.Errorf("duplicate key for list Prefix %v", key) + } + + t.Prefix[key] = v + return nil +} + +// GetEnable retrieves the value of the leaf Enable from the Interface_RoutedVlan_Ipv6_RouterAdvertisement +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Enable is set, it can +// safely use t.GetEnable() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Enable == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv6_RouterAdvertisement) GetEnable() bool { + if t == nil || t.Enable == nil { + return true + } + return *t.Enable +} + +// GetInterval retrieves the value of the leaf Interval from the Interface_RoutedVlan_Ipv6_RouterAdvertisement +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Interval is set, it can +// safely use t.GetInterval() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Interval == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv6_RouterAdvertisement) GetInterval() uint32 { + if t == nil || t.Interval == nil { + return 0 + } + return *t.Interval +} + +// GetLifetime retrieves the value of the leaf Lifetime from the Interface_RoutedVlan_Ipv6_RouterAdvertisement +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Lifetime is set, it can +// safely use t.GetLifetime() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Lifetime == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv6_RouterAdvertisement) GetLifetime() uint32 { + if t == nil || t.Lifetime == nil { + return 0 + } + return *t.Lifetime +} + +// GetManaged retrieves the value of the leaf Managed from the Interface_RoutedVlan_Ipv6_RouterAdvertisement +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Managed is set, it can +// safely use t.GetManaged() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Managed == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv6_RouterAdvertisement) GetManaged() bool { + if t == nil || t.Managed == nil { + return false + } + return *t.Managed +} + +// GetMode retrieves the value of the leaf Mode from the Interface_RoutedVlan_Ipv6_RouterAdvertisement +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Mode is set, it can +// safely use t.GetMode() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Mode == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv6_RouterAdvertisement) GetMode() E_RouterAdvertisement_Mode { + if t == nil || t.Mode == 0 { + return RouterAdvertisement_Mode_ALL + } + return t.Mode +} + +// GetOtherConfig retrieves the value of the leaf OtherConfig from the Interface_RoutedVlan_Ipv6_RouterAdvertisement +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if OtherConfig is set, it can +// safely use t.GetOtherConfig() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.OtherConfig == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv6_RouterAdvertisement) GetOtherConfig() bool { + if t == nil || t.OtherConfig == nil { + return false + } + return *t.OtherConfig +} + +// GetSuppress retrieves the value of the leaf Suppress from the Interface_RoutedVlan_Ipv6_RouterAdvertisement +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Suppress is set, it can +// safely use t.GetSuppress() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Suppress == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv6_RouterAdvertisement) GetSuppress() bool { + if t == nil || t.Suppress == nil { + return false + } + return *t.Suppress +} + +// SetEnable sets the value of the leaf Enable in the Interface_RoutedVlan_Ipv6_RouterAdvertisement +// struct. +func (t *Interface_RoutedVlan_Ipv6_RouterAdvertisement) SetEnable(v bool) { + t.Enable = &v +} + +// SetInterval sets the value of the leaf Interval in the Interface_RoutedVlan_Ipv6_RouterAdvertisement +// struct. +func (t *Interface_RoutedVlan_Ipv6_RouterAdvertisement) SetInterval(v uint32) { + t.Interval = &v +} + +// SetLifetime sets the value of the leaf Lifetime in the Interface_RoutedVlan_Ipv6_RouterAdvertisement +// struct. +func (t *Interface_RoutedVlan_Ipv6_RouterAdvertisement) SetLifetime(v uint32) { + t.Lifetime = &v +} + +// SetManaged sets the value of the leaf Managed in the Interface_RoutedVlan_Ipv6_RouterAdvertisement +// struct. +func (t *Interface_RoutedVlan_Ipv6_RouterAdvertisement) SetManaged(v bool) { + t.Managed = &v +} + +// SetMode sets the value of the leaf Mode in the Interface_RoutedVlan_Ipv6_RouterAdvertisement +// struct. +func (t *Interface_RoutedVlan_Ipv6_RouterAdvertisement) SetMode(v E_RouterAdvertisement_Mode) { + t.Mode = v +} + +// SetOtherConfig sets the value of the leaf OtherConfig in the Interface_RoutedVlan_Ipv6_RouterAdvertisement +// struct. +func (t *Interface_RoutedVlan_Ipv6_RouterAdvertisement) SetOtherConfig(v bool) { + t.OtherConfig = &v +} + +// SetSuppress sets the value of the leaf Suppress in the Interface_RoutedVlan_Ipv6_RouterAdvertisement +// struct. +func (t *Interface_RoutedVlan_Ipv6_RouterAdvertisement) SetSuppress(v bool) { + t.Suppress = &v +} + +// PopulateDefaults recursively populates unset leaf fields in the Interface_RoutedVlan_Ipv6_RouterAdvertisement +// with default values as specified in the YANG schema, instantiating any nil +// container fields. +func (t *Interface_RoutedVlan_Ipv6_RouterAdvertisement) PopulateDefaults() { + if t == nil { + return + } + ygot.BuildEmptyTree(t) + if t.Enable == nil { + var v bool = true + t.Enable = &v + } + if t.Managed == nil { + var v bool = false + t.Managed = &v + } + if t.Mode == 0 { + t.Mode = RouterAdvertisement_Mode_ALL + } + if t.OtherConfig == nil { + var v bool = false + t.OtherConfig = &v + } + if t.Suppress == nil { + var v bool = false + t.Suppress = &v + } + for _, e := range t.Prefix { + e.PopulateDefaults() + } +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_RoutedVlan_Ipv6_RouterAdvertisement) ΛValidate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["Interface_RoutedVlan_Ipv6_RouterAdvertisement"], t, opts...); err != nil { + return err + } + return nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_RoutedVlan_Ipv6_RouterAdvertisement) Validate(opts ...ygot.ValidationOption) error { + return t.ΛValidate(opts...) +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *Interface_RoutedVlan_Ipv6_RouterAdvertisement) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// ΛBelongingModule returns the name of the module that defines the namespace +// of Interface_RoutedVlan_Ipv6_RouterAdvertisement. +func (*Interface_RoutedVlan_Ipv6_RouterAdvertisement) ΛBelongingModule() string { + return "openconfig-if-ip" +} + +// Interface_RoutedVlan_Ipv6_RouterAdvertisement_Prefix represents the /openconfig-interfaces/interfaces/interface/routed-vlan/ipv6/router-advertisement/prefixes/prefix YANG schema element. +type Interface_RoutedVlan_Ipv6_RouterAdvertisement_Prefix struct { + DisableAdvertisement *bool `path:"config/disable-advertisement" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/disable-advertisement" shadow-module:"openconfig-if-ip/openconfig-if-ip"` + DisableAutoconfiguration *bool `path:"config/disable-autoconfiguration" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/disable-autoconfiguration" shadow-module:"openconfig-if-ip/openconfig-if-ip"` + EnableOnlink *bool `path:"config/enable-onlink" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/enable-onlink" shadow-module:"openconfig-if-ip/openconfig-if-ip"` + PreferredLifetime *uint32 `path:"config/preferred-lifetime" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/preferred-lifetime" shadow-module:"openconfig-if-ip/openconfig-if-ip"` + Prefix *string `path:"config/prefix|prefix" module:"openconfig-if-ip/openconfig-if-ip|openconfig-if-ip" shadow-path:"state/prefix|prefix" shadow-module:"openconfig-if-ip/openconfig-if-ip|openconfig-if-ip"` + ValidLifetime *uint32 `path:"config/valid-lifetime" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/valid-lifetime" shadow-module:"openconfig-if-ip/openconfig-if-ip"` +} + +// IsYANGGoStruct ensures that Interface_RoutedVlan_Ipv6_RouterAdvertisement_Prefix implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*Interface_RoutedVlan_Ipv6_RouterAdvertisement_Prefix) IsYANGGoStruct() {} + +// GetDisableAdvertisement retrieves the value of the leaf DisableAdvertisement from the Interface_RoutedVlan_Ipv6_RouterAdvertisement_Prefix +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if DisableAdvertisement is set, it can +// safely use t.GetDisableAdvertisement() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.DisableAdvertisement == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv6_RouterAdvertisement_Prefix) GetDisableAdvertisement() bool { + if t == nil || t.DisableAdvertisement == nil { + return false + } + return *t.DisableAdvertisement +} + +// GetDisableAutoconfiguration retrieves the value of the leaf DisableAutoconfiguration from the Interface_RoutedVlan_Ipv6_RouterAdvertisement_Prefix +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if DisableAutoconfiguration is set, it can +// safely use t.GetDisableAutoconfiguration() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.DisableAutoconfiguration == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv6_RouterAdvertisement_Prefix) GetDisableAutoconfiguration() bool { + if t == nil || t.DisableAutoconfiguration == nil { + return false + } + return *t.DisableAutoconfiguration +} + +// GetEnableOnlink retrieves the value of the leaf EnableOnlink from the Interface_RoutedVlan_Ipv6_RouterAdvertisement_Prefix +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if EnableOnlink is set, it can +// safely use t.GetEnableOnlink() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.EnableOnlink == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv6_RouterAdvertisement_Prefix) GetEnableOnlink() bool { + if t == nil || t.EnableOnlink == nil { + return false + } + return *t.EnableOnlink +} + +// GetPreferredLifetime retrieves the value of the leaf PreferredLifetime from the Interface_RoutedVlan_Ipv6_RouterAdvertisement_Prefix +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if PreferredLifetime is set, it can +// safely use t.GetPreferredLifetime() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.PreferredLifetime == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv6_RouterAdvertisement_Prefix) GetPreferredLifetime() uint32 { + if t == nil || t.PreferredLifetime == nil { + return 0 + } + return *t.PreferredLifetime +} + +// GetPrefix retrieves the value of the leaf Prefix from the Interface_RoutedVlan_Ipv6_RouterAdvertisement_Prefix +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Prefix is set, it can +// safely use t.GetPrefix() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Prefix == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv6_RouterAdvertisement_Prefix) GetPrefix() string { + if t == nil || t.Prefix == nil { + return "" + } + return *t.Prefix +} + +// GetValidLifetime retrieves the value of the leaf ValidLifetime from the Interface_RoutedVlan_Ipv6_RouterAdvertisement_Prefix +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if ValidLifetime is set, it can +// safely use t.GetValidLifetime() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.ValidLifetime == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv6_RouterAdvertisement_Prefix) GetValidLifetime() uint32 { + if t == nil || t.ValidLifetime == nil { + return 0 + } + return *t.ValidLifetime +} + +// SetDisableAdvertisement sets the value of the leaf DisableAdvertisement in the Interface_RoutedVlan_Ipv6_RouterAdvertisement_Prefix +// struct. +func (t *Interface_RoutedVlan_Ipv6_RouterAdvertisement_Prefix) SetDisableAdvertisement(v bool) { + t.DisableAdvertisement = &v +} + +// SetDisableAutoconfiguration sets the value of the leaf DisableAutoconfiguration in the Interface_RoutedVlan_Ipv6_RouterAdvertisement_Prefix +// struct. +func (t *Interface_RoutedVlan_Ipv6_RouterAdvertisement_Prefix) SetDisableAutoconfiguration(v bool) { + t.DisableAutoconfiguration = &v +} + +// SetEnableOnlink sets the value of the leaf EnableOnlink in the Interface_RoutedVlan_Ipv6_RouterAdvertisement_Prefix +// struct. +func (t *Interface_RoutedVlan_Ipv6_RouterAdvertisement_Prefix) SetEnableOnlink(v bool) { + t.EnableOnlink = &v +} + +// SetPreferredLifetime sets the value of the leaf PreferredLifetime in the Interface_RoutedVlan_Ipv6_RouterAdvertisement_Prefix +// struct. +func (t *Interface_RoutedVlan_Ipv6_RouterAdvertisement_Prefix) SetPreferredLifetime(v uint32) { + t.PreferredLifetime = &v +} + +// SetPrefix sets the value of the leaf Prefix in the Interface_RoutedVlan_Ipv6_RouterAdvertisement_Prefix +// struct. +func (t *Interface_RoutedVlan_Ipv6_RouterAdvertisement_Prefix) SetPrefix(v string) { + t.Prefix = &v +} + +// SetValidLifetime sets the value of the leaf ValidLifetime in the Interface_RoutedVlan_Ipv6_RouterAdvertisement_Prefix +// struct. +func (t *Interface_RoutedVlan_Ipv6_RouterAdvertisement_Prefix) SetValidLifetime(v uint32) { + t.ValidLifetime = &v +} + +// PopulateDefaults recursively populates unset leaf fields in the Interface_RoutedVlan_Ipv6_RouterAdvertisement_Prefix +// with default values as specified in the YANG schema, instantiating any nil +// container fields. +func (t *Interface_RoutedVlan_Ipv6_RouterAdvertisement_Prefix) PopulateDefaults() { + if t == nil { + return + } + ygot.BuildEmptyTree(t) +} + +// ΛListKeyMap returns the keys of the Interface_RoutedVlan_Ipv6_RouterAdvertisement_Prefix struct, which is a YANG list entry. +func (t *Interface_RoutedVlan_Ipv6_RouterAdvertisement_Prefix) ΛListKeyMap() (map[string]interface{}, error) { + if t.Prefix == nil { + return nil, fmt.Errorf("nil value for key Prefix") + } + + return map[string]interface{}{ + "prefix": *t.Prefix, + }, nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_RoutedVlan_Ipv6_RouterAdvertisement_Prefix) ΛValidate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["Interface_RoutedVlan_Ipv6_RouterAdvertisement_Prefix"], t, opts...); err != nil { + return err + } + return nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_RoutedVlan_Ipv6_RouterAdvertisement_Prefix) Validate(opts ...ygot.ValidationOption) error { + return t.ΛValidate(opts...) +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *Interface_RoutedVlan_Ipv6_RouterAdvertisement_Prefix) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// ΛBelongingModule returns the name of the module that defines the namespace +// of Interface_RoutedVlan_Ipv6_RouterAdvertisement_Prefix. +func (*Interface_RoutedVlan_Ipv6_RouterAdvertisement_Prefix) ΛBelongingModule() string { + return "openconfig-if-ip" +} + +// Interface_RoutedVlan_Ipv6_Unnumbered represents the /openconfig-interfaces/interfaces/interface/routed-vlan/ipv6/unnumbered YANG schema element. +type Interface_RoutedVlan_Ipv6_Unnumbered struct { + Enabled *bool `path:"config/enabled" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/enabled" shadow-module:"openconfig-if-ip/openconfig-if-ip"` + InterfaceRef *Interface_RoutedVlan_Ipv6_Unnumbered_InterfaceRef `path:"interface-ref" module:"openconfig-if-ip"` +} + +// IsYANGGoStruct ensures that Interface_RoutedVlan_Ipv6_Unnumbered implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*Interface_RoutedVlan_Ipv6_Unnumbered) IsYANGGoStruct() {} + +// GetOrCreateInterfaceRef retrieves the value of the InterfaceRef field +// or returns the existing field if it already exists. +func (t *Interface_RoutedVlan_Ipv6_Unnumbered) GetOrCreateInterfaceRef() *Interface_RoutedVlan_Ipv6_Unnumbered_InterfaceRef { + if t.InterfaceRef != nil { + return t.InterfaceRef + } + t.InterfaceRef = &Interface_RoutedVlan_Ipv6_Unnumbered_InterfaceRef{} + return t.InterfaceRef +} + +// GetInterfaceRef returns the value of the InterfaceRef struct pointer +// from Interface_RoutedVlan_Ipv6_Unnumbered. If the receiver or the field InterfaceRef is nil, nil +// is returned such that the Get* methods can be safely chained. +func (t *Interface_RoutedVlan_Ipv6_Unnumbered) GetInterfaceRef() *Interface_RoutedVlan_Ipv6_Unnumbered_InterfaceRef { + if t != nil && t.InterfaceRef != nil { + return t.InterfaceRef + } + return nil +} + +// GetEnabled retrieves the value of the leaf Enabled from the Interface_RoutedVlan_Ipv6_Unnumbered +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Enabled is set, it can +// safely use t.GetEnabled() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Enabled == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv6_Unnumbered) GetEnabled() bool { + if t == nil || t.Enabled == nil { + return false + } + return *t.Enabled +} + +// SetEnabled sets the value of the leaf Enabled in the Interface_RoutedVlan_Ipv6_Unnumbered +// struct. +func (t *Interface_RoutedVlan_Ipv6_Unnumbered) SetEnabled(v bool) { + t.Enabled = &v +} + +// PopulateDefaults recursively populates unset leaf fields in the Interface_RoutedVlan_Ipv6_Unnumbered +// with default values as specified in the YANG schema, instantiating any nil +// container fields. +func (t *Interface_RoutedVlan_Ipv6_Unnumbered) PopulateDefaults() { + if t == nil { + return + } + ygot.BuildEmptyTree(t) + if t.Enabled == nil { + var v bool = false + t.Enabled = &v + } + t.InterfaceRef.PopulateDefaults() +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_RoutedVlan_Ipv6_Unnumbered) ΛValidate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["Interface_RoutedVlan_Ipv6_Unnumbered"], t, opts...); err != nil { + return err + } + return nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_RoutedVlan_Ipv6_Unnumbered) Validate(opts ...ygot.ValidationOption) error { + return t.ΛValidate(opts...) +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *Interface_RoutedVlan_Ipv6_Unnumbered) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// ΛBelongingModule returns the name of the module that defines the namespace +// of Interface_RoutedVlan_Ipv6_Unnumbered. +func (*Interface_RoutedVlan_Ipv6_Unnumbered) ΛBelongingModule() string { + return "openconfig-if-ip" +} + +// Interface_RoutedVlan_Ipv6_Unnumbered_InterfaceRef represents the /openconfig-interfaces/interfaces/interface/routed-vlan/ipv6/unnumbered/interface-ref YANG schema element. +type Interface_RoutedVlan_Ipv6_Unnumbered_InterfaceRef struct { + Interface *string `path:"config/interface" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/interface" shadow-module:"openconfig-if-ip/openconfig-if-ip"` + Subinterface *uint32 `path:"config/subinterface" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/subinterface" shadow-module:"openconfig-if-ip/openconfig-if-ip"` +} + +// IsYANGGoStruct ensures that Interface_RoutedVlan_Ipv6_Unnumbered_InterfaceRef implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*Interface_RoutedVlan_Ipv6_Unnumbered_InterfaceRef) IsYANGGoStruct() {} + +// GetInterface retrieves the value of the leaf Interface from the Interface_RoutedVlan_Ipv6_Unnumbered_InterfaceRef +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Interface is set, it can +// safely use t.GetInterface() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Interface == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv6_Unnumbered_InterfaceRef) GetInterface() string { + if t == nil || t.Interface == nil { + return "" + } + return *t.Interface +} + +// GetSubinterface retrieves the value of the leaf Subinterface from the Interface_RoutedVlan_Ipv6_Unnumbered_InterfaceRef +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Subinterface is set, it can +// safely use t.GetSubinterface() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Subinterface == nil' before retrieving the leaf's value. +func (t *Interface_RoutedVlan_Ipv6_Unnumbered_InterfaceRef) GetSubinterface() uint32 { + if t == nil || t.Subinterface == nil { + return 0 + } + return *t.Subinterface +} + +// SetInterface sets the value of the leaf Interface in the Interface_RoutedVlan_Ipv6_Unnumbered_InterfaceRef +// struct. +func (t *Interface_RoutedVlan_Ipv6_Unnumbered_InterfaceRef) SetInterface(v string) { + t.Interface = &v +} + +// SetSubinterface sets the value of the leaf Subinterface in the Interface_RoutedVlan_Ipv6_Unnumbered_InterfaceRef +// struct. +func (t *Interface_RoutedVlan_Ipv6_Unnumbered_InterfaceRef) SetSubinterface(v uint32) { + t.Subinterface = &v +} + +// PopulateDefaults recursively populates unset leaf fields in the Interface_RoutedVlan_Ipv6_Unnumbered_InterfaceRef +// with default values as specified in the YANG schema, instantiating any nil +// container fields. +func (t *Interface_RoutedVlan_Ipv6_Unnumbered_InterfaceRef) PopulateDefaults() { + if t == nil { + return + } + ygot.BuildEmptyTree(t) +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_RoutedVlan_Ipv6_Unnumbered_InterfaceRef) ΛValidate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["Interface_RoutedVlan_Ipv6_Unnumbered_InterfaceRef"], t, opts...); err != nil { + return err + } + return nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_RoutedVlan_Ipv6_Unnumbered_InterfaceRef) Validate(opts ...ygot.ValidationOption) error { + return t.ΛValidate(opts...) +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *Interface_RoutedVlan_Ipv6_Unnumbered_InterfaceRef) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// ΛBelongingModule returns the name of the module that defines the namespace +// of Interface_RoutedVlan_Ipv6_Unnumbered_InterfaceRef. +func (*Interface_RoutedVlan_Ipv6_Unnumbered_InterfaceRef) ΛBelongingModule() string { + return "openconfig-if-ip" +} + +// Interface_Subinterface represents the /openconfig-interfaces/interfaces/interface/subinterfaces/subinterface YANG schema element. +type Interface_Subinterface struct { + AdminStatus E_Interface_AdminStatus `path:"state/admin-status" module:"openconfig-interfaces/openconfig-interfaces"` + Counters *Interface_Subinterface_Counters `path:"state/counters" module:"openconfig-interfaces/openconfig-interfaces"` + Cpu *bool `path:"state/cpu" module:"openconfig-interfaces/openconfig-interfaces"` + Description *string `path:"config/description" module:"openconfig-interfaces/openconfig-interfaces" shadow-path:"state/description" shadow-module:"openconfig-interfaces/openconfig-interfaces"` + Enabled *bool `path:"config/enabled" module:"openconfig-interfaces/openconfig-interfaces" shadow-path:"state/enabled" shadow-module:"openconfig-interfaces/openconfig-interfaces"` + Ifindex *uint32 `path:"state/ifindex" module:"openconfig-interfaces/openconfig-interfaces"` + Index *uint32 `path:"config/index|index" module:"openconfig-interfaces/openconfig-interfaces|openconfig-interfaces" shadow-path:"state/index|index" shadow-module:"openconfig-interfaces/openconfig-interfaces|openconfig-interfaces"` + Ipv4 *Interface_Subinterface_Ipv4 `path:"ipv4" module:"openconfig-if-ip"` + Ipv6 *Interface_Subinterface_Ipv6 `path:"ipv6" module:"openconfig-if-ip"` + LastChange *uint64 `path:"state/last-change" module:"openconfig-interfaces/openconfig-interfaces"` + Logical *bool `path:"state/logical" module:"openconfig-interfaces/openconfig-interfaces"` + Management *bool `path:"state/management" module:"openconfig-interfaces/openconfig-interfaces"` + Name *string `path:"state/name" module:"openconfig-interfaces/openconfig-interfaces"` + OperStatus E_Interface_OperStatus `path:"state/oper-status" module:"openconfig-interfaces/openconfig-interfaces"` + Vlan *Interface_Subinterface_Vlan `path:"vlan" module:"openconfig-vlan"` +} + +// IsYANGGoStruct ensures that Interface_Subinterface implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*Interface_Subinterface) IsYANGGoStruct() {} + +// GetOrCreateCounters retrieves the value of the Counters field +// or returns the existing field if it already exists. +func (t *Interface_Subinterface) GetOrCreateCounters() *Interface_Subinterface_Counters { + if t.Counters != nil { + return t.Counters + } + t.Counters = &Interface_Subinterface_Counters{} + return t.Counters +} + +// GetOrCreateIpv4 retrieves the value of the Ipv4 field +// or returns the existing field if it already exists. +func (t *Interface_Subinterface) GetOrCreateIpv4() *Interface_Subinterface_Ipv4 { + if t.Ipv4 != nil { + return t.Ipv4 + } + t.Ipv4 = &Interface_Subinterface_Ipv4{} + return t.Ipv4 +} + +// GetOrCreateIpv6 retrieves the value of the Ipv6 field +// or returns the existing field if it already exists. +func (t *Interface_Subinterface) GetOrCreateIpv6() *Interface_Subinterface_Ipv6 { + if t.Ipv6 != nil { + return t.Ipv6 + } + t.Ipv6 = &Interface_Subinterface_Ipv6{} + return t.Ipv6 +} + +// GetOrCreateVlan retrieves the value of the Vlan field +// or returns the existing field if it already exists. +func (t *Interface_Subinterface) GetOrCreateVlan() *Interface_Subinterface_Vlan { + if t.Vlan != nil { + return t.Vlan + } + t.Vlan = &Interface_Subinterface_Vlan{} + return t.Vlan +} + +// GetCounters returns the value of the Counters struct pointer +// from Interface_Subinterface. If the receiver or the field Counters is nil, nil +// is returned such that the Get* methods can be safely chained. +func (t *Interface_Subinterface) GetCounters() *Interface_Subinterface_Counters { + if t != nil && t.Counters != nil { + return t.Counters + } + return nil +} + +// GetIpv4 returns the value of the Ipv4 struct pointer +// from Interface_Subinterface. If the receiver or the field Ipv4 is nil, nil +// is returned such that the Get* methods can be safely chained. +func (t *Interface_Subinterface) GetIpv4() *Interface_Subinterface_Ipv4 { + if t != nil && t.Ipv4 != nil { + return t.Ipv4 + } + return nil +} + +// GetIpv6 returns the value of the Ipv6 struct pointer +// from Interface_Subinterface. If the receiver or the field Ipv6 is nil, nil +// is returned such that the Get* methods can be safely chained. +func (t *Interface_Subinterface) GetIpv6() *Interface_Subinterface_Ipv6 { + if t != nil && t.Ipv6 != nil { + return t.Ipv6 + } + return nil +} + +// GetVlan returns the value of the Vlan struct pointer +// from Interface_Subinterface. If the receiver or the field Vlan is nil, nil +// is returned such that the Get* methods can be safely chained. +func (t *Interface_Subinterface) GetVlan() *Interface_Subinterface_Vlan { + if t != nil && t.Vlan != nil { + return t.Vlan + } + return nil +} + +// GetAdminStatus retrieves the value of the leaf AdminStatus from the Interface_Subinterface +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if AdminStatus is set, it can +// safely use t.GetAdminStatus() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.AdminStatus == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface) GetAdminStatus() E_Interface_AdminStatus { + if t == nil || t.AdminStatus == 0 { + return 0 + } + return t.AdminStatus +} + +// GetCpu retrieves the value of the leaf Cpu from the Interface_Subinterface +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Cpu is set, it can +// safely use t.GetCpu() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Cpu == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface) GetCpu() bool { + if t == nil || t.Cpu == nil { + return false + } + return *t.Cpu +} + +// GetDescription retrieves the value of the leaf Description from the Interface_Subinterface +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Description is set, it can +// safely use t.GetDescription() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Description == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface) GetDescription() string { + if t == nil || t.Description == nil { + return "" + } + return *t.Description +} + +// GetEnabled retrieves the value of the leaf Enabled from the Interface_Subinterface +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Enabled is set, it can +// safely use t.GetEnabled() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Enabled == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface) GetEnabled() bool { + if t == nil || t.Enabled == nil { + return true + } + return *t.Enabled +} + +// GetIfindex retrieves the value of the leaf Ifindex from the Interface_Subinterface +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Ifindex is set, it can +// safely use t.GetIfindex() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Ifindex == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface) GetIfindex() uint32 { + if t == nil || t.Ifindex == nil { + return 0 + } + return *t.Ifindex +} + +// GetIndex retrieves the value of the leaf Index from the Interface_Subinterface +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Index is set, it can +// safely use t.GetIndex() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Index == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface) GetIndex() uint32 { + if t == nil || t.Index == nil { + return 0 + } + return *t.Index +} + +// GetLastChange retrieves the value of the leaf LastChange from the Interface_Subinterface +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if LastChange is set, it can +// safely use t.GetLastChange() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.LastChange == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface) GetLastChange() uint64 { + if t == nil || t.LastChange == nil { + return 0 + } + return *t.LastChange +} + +// GetLogical retrieves the value of the leaf Logical from the Interface_Subinterface +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Logical is set, it can +// safely use t.GetLogical() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Logical == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface) GetLogical() bool { + if t == nil || t.Logical == nil { + return false + } + return *t.Logical +} + +// GetManagement retrieves the value of the leaf Management from the Interface_Subinterface +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Management is set, it can +// safely use t.GetManagement() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Management == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface) GetManagement() bool { + if t == nil || t.Management == nil { + return false + } + return *t.Management +} + +// GetName retrieves the value of the leaf Name from the Interface_Subinterface +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Name is set, it can +// safely use t.GetName() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Name == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface) GetName() string { + if t == nil || t.Name == nil { + return "" + } + return *t.Name +} + +// GetOperStatus retrieves the value of the leaf OperStatus from the Interface_Subinterface +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if OperStatus is set, it can +// safely use t.GetOperStatus() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.OperStatus == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface) GetOperStatus() E_Interface_OperStatus { + if t == nil || t.OperStatus == 0 { + return 0 + } + return t.OperStatus +} + +// SetAdminStatus sets the value of the leaf AdminStatus in the Interface_Subinterface +// struct. +func (t *Interface_Subinterface) SetAdminStatus(v E_Interface_AdminStatus) { + t.AdminStatus = v +} + +// SetCpu sets the value of the leaf Cpu in the Interface_Subinterface +// struct. +func (t *Interface_Subinterface) SetCpu(v bool) { + t.Cpu = &v +} + +// SetDescription sets the value of the leaf Description in the Interface_Subinterface +// struct. +func (t *Interface_Subinterface) SetDescription(v string) { + t.Description = &v +} + +// SetEnabled sets the value of the leaf Enabled in the Interface_Subinterface +// struct. +func (t *Interface_Subinterface) SetEnabled(v bool) { + t.Enabled = &v +} + +// SetIfindex sets the value of the leaf Ifindex in the Interface_Subinterface +// struct. +func (t *Interface_Subinterface) SetIfindex(v uint32) { + t.Ifindex = &v +} + +// SetIndex sets the value of the leaf Index in the Interface_Subinterface +// struct. +func (t *Interface_Subinterface) SetIndex(v uint32) { + t.Index = &v +} + +// SetLastChange sets the value of the leaf LastChange in the Interface_Subinterface +// struct. +func (t *Interface_Subinterface) SetLastChange(v uint64) { + t.LastChange = &v +} + +// SetLogical sets the value of the leaf Logical in the Interface_Subinterface +// struct. +func (t *Interface_Subinterface) SetLogical(v bool) { + t.Logical = &v +} + +// SetManagement sets the value of the leaf Management in the Interface_Subinterface +// struct. +func (t *Interface_Subinterface) SetManagement(v bool) { + t.Management = &v +} + +// SetName sets the value of the leaf Name in the Interface_Subinterface +// struct. +func (t *Interface_Subinterface) SetName(v string) { + t.Name = &v +} + +// SetOperStatus sets the value of the leaf OperStatus in the Interface_Subinterface +// struct. +func (t *Interface_Subinterface) SetOperStatus(v E_Interface_OperStatus) { + t.OperStatus = v +} + +// PopulateDefaults recursively populates unset leaf fields in the Interface_Subinterface +// with default values as specified in the YANG schema, instantiating any nil +// container fields. +func (t *Interface_Subinterface) PopulateDefaults() { + if t == nil { + return + } + ygot.BuildEmptyTree(t) + if t.Enabled == nil { + var v bool = true + t.Enabled = &v + } + if t.Index == nil { + var v uint32 = 0 + t.Index = &v + } + t.Counters.PopulateDefaults() + t.Ipv4.PopulateDefaults() + t.Ipv6.PopulateDefaults() + t.Vlan.PopulateDefaults() +} + +// ΛListKeyMap returns the keys of the Interface_Subinterface struct, which is a YANG list entry. +func (t *Interface_Subinterface) ΛListKeyMap() (map[string]interface{}, error) { + if t.Index == nil { + return nil, fmt.Errorf("nil value for key Index") + } + + return map[string]interface{}{ + "index": *t.Index, + }, nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_Subinterface) ΛValidate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["Interface_Subinterface"], t, opts...); err != nil { + return err + } + return nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_Subinterface) Validate(opts ...ygot.ValidationOption) error { + return t.ΛValidate(opts...) +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *Interface_Subinterface) ΛEnumTypeMap() map[string][]reflect.Type { return ΛEnumTypes } + +// ΛBelongingModule returns the name of the module that defines the namespace +// of Interface_Subinterface. +func (*Interface_Subinterface) ΛBelongingModule() string { + return "openconfig-interfaces" +} + +// Interface_Subinterface_Counters represents the /openconfig-interfaces/interfaces/interface/subinterfaces/subinterface/state/counters YANG schema element. +type Interface_Subinterface_Counters struct { + CarrierTransitions *uint64 `path:"carrier-transitions" module:"openconfig-interfaces"` + InBroadcastPkts *uint64 `path:"in-broadcast-pkts" module:"openconfig-interfaces"` + InDiscards *uint64 `path:"in-discards" module:"openconfig-interfaces"` + InErrors *uint64 `path:"in-errors" module:"openconfig-interfaces"` + InFcsErrors *uint64 `path:"in-fcs-errors" module:"openconfig-interfaces"` + InMulticastPkts *uint64 `path:"in-multicast-pkts" module:"openconfig-interfaces"` + InOctets *uint64 `path:"in-octets" module:"openconfig-interfaces"` + InPkts *uint64 `path:"in-pkts" module:"openconfig-interfaces"` + InUnicastPkts *uint64 `path:"in-unicast-pkts" module:"openconfig-interfaces"` + InUnknownProtos *uint64 `path:"in-unknown-protos" module:"openconfig-interfaces"` + LastClear *uint64 `path:"last-clear" module:"openconfig-interfaces"` + OutBroadcastPkts *uint64 `path:"out-broadcast-pkts" module:"openconfig-interfaces"` + OutDiscards *uint64 `path:"out-discards" module:"openconfig-interfaces"` + OutErrors *uint64 `path:"out-errors" module:"openconfig-interfaces"` + OutMulticastPkts *uint64 `path:"out-multicast-pkts" module:"openconfig-interfaces"` + OutOctets *uint64 `path:"out-octets" module:"openconfig-interfaces"` + OutPkts *uint64 `path:"out-pkts" module:"openconfig-interfaces"` + OutUnicastPkts *uint64 `path:"out-unicast-pkts" module:"openconfig-interfaces"` +} + +// IsYANGGoStruct ensures that Interface_Subinterface_Counters implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*Interface_Subinterface_Counters) IsYANGGoStruct() {} + +// GetCarrierTransitions retrieves the value of the leaf CarrierTransitions from the Interface_Subinterface_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if CarrierTransitions is set, it can +// safely use t.GetCarrierTransitions() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.CarrierTransitions == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Counters) GetCarrierTransitions() uint64 { + if t == nil || t.CarrierTransitions == nil { + return 0 + } + return *t.CarrierTransitions +} + +// GetInBroadcastPkts retrieves the value of the leaf InBroadcastPkts from the Interface_Subinterface_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if InBroadcastPkts is set, it can +// safely use t.GetInBroadcastPkts() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.InBroadcastPkts == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Counters) GetInBroadcastPkts() uint64 { + if t == nil || t.InBroadcastPkts == nil { + return 0 + } + return *t.InBroadcastPkts +} + +// GetInDiscards retrieves the value of the leaf InDiscards from the Interface_Subinterface_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if InDiscards is set, it can +// safely use t.GetInDiscards() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.InDiscards == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Counters) GetInDiscards() uint64 { + if t == nil || t.InDiscards == nil { + return 0 + } + return *t.InDiscards +} + +// GetInErrors retrieves the value of the leaf InErrors from the Interface_Subinterface_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if InErrors is set, it can +// safely use t.GetInErrors() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.InErrors == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Counters) GetInErrors() uint64 { + if t == nil || t.InErrors == nil { + return 0 + } + return *t.InErrors +} + +// GetInFcsErrors retrieves the value of the leaf InFcsErrors from the Interface_Subinterface_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if InFcsErrors is set, it can +// safely use t.GetInFcsErrors() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.InFcsErrors == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Counters) GetInFcsErrors() uint64 { + if t == nil || t.InFcsErrors == nil { + return 0 + } + return *t.InFcsErrors +} + +// GetInMulticastPkts retrieves the value of the leaf InMulticastPkts from the Interface_Subinterface_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if InMulticastPkts is set, it can +// safely use t.GetInMulticastPkts() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.InMulticastPkts == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Counters) GetInMulticastPkts() uint64 { + if t == nil || t.InMulticastPkts == nil { + return 0 + } + return *t.InMulticastPkts +} + +// GetInOctets retrieves the value of the leaf InOctets from the Interface_Subinterface_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if InOctets is set, it can +// safely use t.GetInOctets() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.InOctets == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Counters) GetInOctets() uint64 { + if t == nil || t.InOctets == nil { + return 0 + } + return *t.InOctets +} + +// GetInPkts retrieves the value of the leaf InPkts from the Interface_Subinterface_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if InPkts is set, it can +// safely use t.GetInPkts() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.InPkts == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Counters) GetInPkts() uint64 { + if t == nil || t.InPkts == nil { + return 0 + } + return *t.InPkts +} + +// GetInUnicastPkts retrieves the value of the leaf InUnicastPkts from the Interface_Subinterface_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if InUnicastPkts is set, it can +// safely use t.GetInUnicastPkts() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.InUnicastPkts == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Counters) GetInUnicastPkts() uint64 { + if t == nil || t.InUnicastPkts == nil { + return 0 + } + return *t.InUnicastPkts +} + +// GetInUnknownProtos retrieves the value of the leaf InUnknownProtos from the Interface_Subinterface_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if InUnknownProtos is set, it can +// safely use t.GetInUnknownProtos() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.InUnknownProtos == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Counters) GetInUnknownProtos() uint64 { + if t == nil || t.InUnknownProtos == nil { + return 0 + } + return *t.InUnknownProtos +} + +// GetLastClear retrieves the value of the leaf LastClear from the Interface_Subinterface_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if LastClear is set, it can +// safely use t.GetLastClear() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.LastClear == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Counters) GetLastClear() uint64 { + if t == nil || t.LastClear == nil { + return 0 + } + return *t.LastClear +} + +// GetOutBroadcastPkts retrieves the value of the leaf OutBroadcastPkts from the Interface_Subinterface_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if OutBroadcastPkts is set, it can +// safely use t.GetOutBroadcastPkts() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.OutBroadcastPkts == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Counters) GetOutBroadcastPkts() uint64 { + if t == nil || t.OutBroadcastPkts == nil { + return 0 + } + return *t.OutBroadcastPkts +} + +// GetOutDiscards retrieves the value of the leaf OutDiscards from the Interface_Subinterface_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if OutDiscards is set, it can +// safely use t.GetOutDiscards() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.OutDiscards == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Counters) GetOutDiscards() uint64 { + if t == nil || t.OutDiscards == nil { + return 0 + } + return *t.OutDiscards +} + +// GetOutErrors retrieves the value of the leaf OutErrors from the Interface_Subinterface_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if OutErrors is set, it can +// safely use t.GetOutErrors() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.OutErrors == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Counters) GetOutErrors() uint64 { + if t == nil || t.OutErrors == nil { + return 0 + } + return *t.OutErrors +} + +// GetOutMulticastPkts retrieves the value of the leaf OutMulticastPkts from the Interface_Subinterface_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if OutMulticastPkts is set, it can +// safely use t.GetOutMulticastPkts() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.OutMulticastPkts == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Counters) GetOutMulticastPkts() uint64 { + if t == nil || t.OutMulticastPkts == nil { + return 0 + } + return *t.OutMulticastPkts +} + +// GetOutOctets retrieves the value of the leaf OutOctets from the Interface_Subinterface_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if OutOctets is set, it can +// safely use t.GetOutOctets() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.OutOctets == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Counters) GetOutOctets() uint64 { + if t == nil || t.OutOctets == nil { + return 0 + } + return *t.OutOctets +} + +// GetOutPkts retrieves the value of the leaf OutPkts from the Interface_Subinterface_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if OutPkts is set, it can +// safely use t.GetOutPkts() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.OutPkts == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Counters) GetOutPkts() uint64 { + if t == nil || t.OutPkts == nil { + return 0 + } + return *t.OutPkts +} + +// GetOutUnicastPkts retrieves the value of the leaf OutUnicastPkts from the Interface_Subinterface_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if OutUnicastPkts is set, it can +// safely use t.GetOutUnicastPkts() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.OutUnicastPkts == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Counters) GetOutUnicastPkts() uint64 { + if t == nil || t.OutUnicastPkts == nil { + return 0 + } + return *t.OutUnicastPkts +} + +// SetCarrierTransitions sets the value of the leaf CarrierTransitions in the Interface_Subinterface_Counters +// struct. +func (t *Interface_Subinterface_Counters) SetCarrierTransitions(v uint64) { + t.CarrierTransitions = &v +} + +// SetInBroadcastPkts sets the value of the leaf InBroadcastPkts in the Interface_Subinterface_Counters +// struct. +func (t *Interface_Subinterface_Counters) SetInBroadcastPkts(v uint64) { + t.InBroadcastPkts = &v +} + +// SetInDiscards sets the value of the leaf InDiscards in the Interface_Subinterface_Counters +// struct. +func (t *Interface_Subinterface_Counters) SetInDiscards(v uint64) { + t.InDiscards = &v +} + +// SetInErrors sets the value of the leaf InErrors in the Interface_Subinterface_Counters +// struct. +func (t *Interface_Subinterface_Counters) SetInErrors(v uint64) { + t.InErrors = &v +} + +// SetInFcsErrors sets the value of the leaf InFcsErrors in the Interface_Subinterface_Counters +// struct. +func (t *Interface_Subinterface_Counters) SetInFcsErrors(v uint64) { + t.InFcsErrors = &v +} + +// SetInMulticastPkts sets the value of the leaf InMulticastPkts in the Interface_Subinterface_Counters +// struct. +func (t *Interface_Subinterface_Counters) SetInMulticastPkts(v uint64) { + t.InMulticastPkts = &v +} + +// SetInOctets sets the value of the leaf InOctets in the Interface_Subinterface_Counters +// struct. +func (t *Interface_Subinterface_Counters) SetInOctets(v uint64) { + t.InOctets = &v +} + +// SetInPkts sets the value of the leaf InPkts in the Interface_Subinterface_Counters +// struct. +func (t *Interface_Subinterface_Counters) SetInPkts(v uint64) { + t.InPkts = &v +} + +// SetInUnicastPkts sets the value of the leaf InUnicastPkts in the Interface_Subinterface_Counters +// struct. +func (t *Interface_Subinterface_Counters) SetInUnicastPkts(v uint64) { + t.InUnicastPkts = &v +} + +// SetInUnknownProtos sets the value of the leaf InUnknownProtos in the Interface_Subinterface_Counters +// struct. +func (t *Interface_Subinterface_Counters) SetInUnknownProtos(v uint64) { + t.InUnknownProtos = &v +} + +// SetLastClear sets the value of the leaf LastClear in the Interface_Subinterface_Counters +// struct. +func (t *Interface_Subinterface_Counters) SetLastClear(v uint64) { + t.LastClear = &v +} + +// SetOutBroadcastPkts sets the value of the leaf OutBroadcastPkts in the Interface_Subinterface_Counters +// struct. +func (t *Interface_Subinterface_Counters) SetOutBroadcastPkts(v uint64) { + t.OutBroadcastPkts = &v +} + +// SetOutDiscards sets the value of the leaf OutDiscards in the Interface_Subinterface_Counters +// struct. +func (t *Interface_Subinterface_Counters) SetOutDiscards(v uint64) { + t.OutDiscards = &v +} + +// SetOutErrors sets the value of the leaf OutErrors in the Interface_Subinterface_Counters +// struct. +func (t *Interface_Subinterface_Counters) SetOutErrors(v uint64) { + t.OutErrors = &v +} + +// SetOutMulticastPkts sets the value of the leaf OutMulticastPkts in the Interface_Subinterface_Counters +// struct. +func (t *Interface_Subinterface_Counters) SetOutMulticastPkts(v uint64) { + t.OutMulticastPkts = &v +} + +// SetOutOctets sets the value of the leaf OutOctets in the Interface_Subinterface_Counters +// struct. +func (t *Interface_Subinterface_Counters) SetOutOctets(v uint64) { + t.OutOctets = &v +} + +// SetOutPkts sets the value of the leaf OutPkts in the Interface_Subinterface_Counters +// struct. +func (t *Interface_Subinterface_Counters) SetOutPkts(v uint64) { + t.OutPkts = &v +} + +// SetOutUnicastPkts sets the value of the leaf OutUnicastPkts in the Interface_Subinterface_Counters +// struct. +func (t *Interface_Subinterface_Counters) SetOutUnicastPkts(v uint64) { + t.OutUnicastPkts = &v +} + +// PopulateDefaults recursively populates unset leaf fields in the Interface_Subinterface_Counters +// with default values as specified in the YANG schema, instantiating any nil +// container fields. +func (t *Interface_Subinterface_Counters) PopulateDefaults() { + if t == nil { + return + } + ygot.BuildEmptyTree(t) +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_Subinterface_Counters) ΛValidate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["Interface_Subinterface_Counters"], t, opts...); err != nil { + return err + } + return nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_Subinterface_Counters) Validate(opts ...ygot.ValidationOption) error { + return t.ΛValidate(opts...) +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *Interface_Subinterface_Counters) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// ΛBelongingModule returns the name of the module that defines the namespace +// of Interface_Subinterface_Counters. +func (*Interface_Subinterface_Counters) ΛBelongingModule() string { + return "openconfig-interfaces" +} + +// Interface_Subinterface_Ipv4 represents the /openconfig-interfaces/interfaces/interface/subinterfaces/subinterface/ipv4 YANG schema element. +type Interface_Subinterface_Ipv4 struct { + Address map[string]*Interface_Subinterface_Ipv4_Address `path:"addresses/address" module:"openconfig-if-ip/openconfig-if-ip"` + Counters *Interface_Subinterface_Ipv4_Counters `path:"state/counters" module:"openconfig-if-ip/openconfig-if-ip"` + DhcpClient *bool `path:"config/dhcp-client" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/dhcp-client" shadow-module:"openconfig-if-ip/openconfig-if-ip"` + Enabled *bool `path:"config/enabled" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/enabled" shadow-module:"openconfig-if-ip/openconfig-if-ip"` + GratuitousArpAccepted *bool `path:"config/gratuitous-arp-accepted" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/gratuitous-arp-accepted" shadow-module:"openconfig-if-ip/openconfig-if-ip"` + Mtu *uint16 `path:"config/mtu" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/mtu" shadow-module:"openconfig-if-ip/openconfig-if-ip"` + Neighbor map[string]*Interface_Subinterface_Ipv4_Neighbor `path:"neighbors/neighbor" module:"openconfig-if-ip/openconfig-if-ip"` + ProxyArp *Interface_Subinterface_Ipv4_ProxyArp `path:"proxy-arp" module:"openconfig-if-ip"` + Unnumbered *Interface_Subinterface_Ipv4_Unnumbered `path:"unnumbered" module:"openconfig-if-ip"` +} + +// IsYANGGoStruct ensures that Interface_Subinterface_Ipv4 implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*Interface_Subinterface_Ipv4) IsYANGGoStruct() {} + +// NewAddress creates a new entry in the Address list of the +// Interface_Subinterface_Ipv4 struct. The keys of the list are populated from the input +// arguments. +func (t *Interface_Subinterface_Ipv4) NewAddress(Ip string) (*Interface_Subinterface_Ipv4_Address, error) { + + // Initialise the list within the receiver struct if it has not already been + // created. + if t.Address == nil { + t.Address = make(map[string]*Interface_Subinterface_Ipv4_Address) + } + + key := Ip + + // Ensure that this key has not already been used in the + // list. Keyed YANG lists do not allow duplicate keys to + // be created. + if _, ok := t.Address[key]; ok { + return nil, fmt.Errorf("duplicate key %v for list Address", key) + } + + t.Address[key] = &Interface_Subinterface_Ipv4_Address{ + Ip: &Ip, + } + + return t.Address[key], nil +} + +// RenameAddress renames an entry in the list Address within +// the Interface_Subinterface_Ipv4 struct. The entry with key oldK is renamed to newK updating +// the key within the value. +func (t *Interface_Subinterface_Ipv4) RenameAddress(oldK, newK string) error { + if _, ok := t.Address[newK]; ok { + return fmt.Errorf("key %v already exists in Address", newK) + } + + e, ok := t.Address[oldK] + if !ok { + return fmt.Errorf("key %v not found in Address", oldK) + } + e.Ip = &newK + + t.Address[newK] = e + delete(t.Address, oldK) + return nil +} + +// GetOrCreateAddressMap returns the list (map) from Interface_Subinterface_Ipv4. +// +// It initializes the field if not already initialized. +func (t *Interface_Subinterface_Ipv4) GetOrCreateAddressMap() map[string]*Interface_Subinterface_Ipv4_Address { + if t.Address == nil { + t.Address = make(map[string]*Interface_Subinterface_Ipv4_Address) + } + return t.Address +} + +// GetOrCreateAddress retrieves the value with the specified keys from +// the receiver Interface_Subinterface_Ipv4. If the entry does not exist, then it is created. +// It returns the existing or new list member. +func (t *Interface_Subinterface_Ipv4) GetOrCreateAddress(Ip string) *Interface_Subinterface_Ipv4_Address { + + key := Ip + + if v, ok := t.Address[key]; ok { + return v + } + // Panic if we receive an error, since we should have retrieved an existing + // list member. This allows chaining of GetOrCreate methods. + v, err := t.NewAddress(Ip) + if err != nil { + panic(fmt.Sprintf("GetOrCreateAddress got unexpected error: %v", err)) + } + return v +} + +// GetAddress retrieves the value with the specified key from +// the Address map field of Interface_Subinterface_Ipv4. If the receiver is nil, or +// the specified key is not present in the list, nil is returned such that Get* +// methods may be safely chained. +func (t *Interface_Subinterface_Ipv4) GetAddress(Ip string) *Interface_Subinterface_Ipv4_Address { + + if t == nil { + return nil + } + + key := Ip + + if lm, ok := t.Address[key]; ok { + return lm + } + return nil +} + +// DeleteAddress deletes the value with the specified keys from +// the receiver Interface_Subinterface_Ipv4. If there is no such element, the function +// is a no-op. +func (t *Interface_Subinterface_Ipv4) DeleteAddress(Ip string) { + key := Ip + + delete(t.Address, key) +} + +// AppendAddress appends the supplied Interface_Subinterface_Ipv4_Address struct to the +// list Address of Interface_Subinterface_Ipv4. If the key value(s) specified in +// the supplied Interface_Subinterface_Ipv4_Address already exist in the list, an error is +// returned. +func (t *Interface_Subinterface_Ipv4) AppendAddress(v *Interface_Subinterface_Ipv4_Address) error { + if v.Ip == nil { + return fmt.Errorf("invalid nil key received for Ip") + } + + key := *v.Ip + + // Initialise the list within the receiver struct if it has not already been + // created. + if t.Address == nil { + t.Address = make(map[string]*Interface_Subinterface_Ipv4_Address) + } + + if _, ok := t.Address[key]; ok { + return fmt.Errorf("duplicate key for list Address %v", key) + } + + t.Address[key] = v + return nil +} + +// NewNeighbor creates a new entry in the Neighbor list of the +// Interface_Subinterface_Ipv4 struct. The keys of the list are populated from the input +// arguments. +func (t *Interface_Subinterface_Ipv4) NewNeighbor(Ip string) (*Interface_Subinterface_Ipv4_Neighbor, error) { + + // Initialise the list within the receiver struct if it has not already been + // created. + if t.Neighbor == nil { + t.Neighbor = make(map[string]*Interface_Subinterface_Ipv4_Neighbor) + } + + key := Ip + + // Ensure that this key has not already been used in the + // list. Keyed YANG lists do not allow duplicate keys to + // be created. + if _, ok := t.Neighbor[key]; ok { + return nil, fmt.Errorf("duplicate key %v for list Neighbor", key) + } + + t.Neighbor[key] = &Interface_Subinterface_Ipv4_Neighbor{ + Ip: &Ip, + } + + return t.Neighbor[key], nil +} + +// RenameNeighbor renames an entry in the list Neighbor within +// the Interface_Subinterface_Ipv4 struct. The entry with key oldK is renamed to newK updating +// the key within the value. +func (t *Interface_Subinterface_Ipv4) RenameNeighbor(oldK, newK string) error { + if _, ok := t.Neighbor[newK]; ok { + return fmt.Errorf("key %v already exists in Neighbor", newK) + } + + e, ok := t.Neighbor[oldK] + if !ok { + return fmt.Errorf("key %v not found in Neighbor", oldK) + } + e.Ip = &newK + + t.Neighbor[newK] = e + delete(t.Neighbor, oldK) + return nil +} + +// GetOrCreateNeighborMap returns the list (map) from Interface_Subinterface_Ipv4. +// +// It initializes the field if not already initialized. +func (t *Interface_Subinterface_Ipv4) GetOrCreateNeighborMap() map[string]*Interface_Subinterface_Ipv4_Neighbor { + if t.Neighbor == nil { + t.Neighbor = make(map[string]*Interface_Subinterface_Ipv4_Neighbor) + } + return t.Neighbor +} + +// GetOrCreateNeighbor retrieves the value with the specified keys from +// the receiver Interface_Subinterface_Ipv4. If the entry does not exist, then it is created. +// It returns the existing or new list member. +func (t *Interface_Subinterface_Ipv4) GetOrCreateNeighbor(Ip string) *Interface_Subinterface_Ipv4_Neighbor { + + key := Ip + + if v, ok := t.Neighbor[key]; ok { + return v + } + // Panic if we receive an error, since we should have retrieved an existing + // list member. This allows chaining of GetOrCreate methods. + v, err := t.NewNeighbor(Ip) + if err != nil { + panic(fmt.Sprintf("GetOrCreateNeighbor got unexpected error: %v", err)) + } + return v +} + +// GetNeighbor retrieves the value with the specified key from +// the Neighbor map field of Interface_Subinterface_Ipv4. If the receiver is nil, or +// the specified key is not present in the list, nil is returned such that Get* +// methods may be safely chained. +func (t *Interface_Subinterface_Ipv4) GetNeighbor(Ip string) *Interface_Subinterface_Ipv4_Neighbor { + + if t == nil { + return nil + } + + key := Ip + + if lm, ok := t.Neighbor[key]; ok { + return lm + } + return nil +} + +// DeleteNeighbor deletes the value with the specified keys from +// the receiver Interface_Subinterface_Ipv4. If there is no such element, the function +// is a no-op. +func (t *Interface_Subinterface_Ipv4) DeleteNeighbor(Ip string) { + key := Ip + + delete(t.Neighbor, key) +} + +// AppendNeighbor appends the supplied Interface_Subinterface_Ipv4_Neighbor struct to the +// list Neighbor of Interface_Subinterface_Ipv4. If the key value(s) specified in +// the supplied Interface_Subinterface_Ipv4_Neighbor already exist in the list, an error is +// returned. +func (t *Interface_Subinterface_Ipv4) AppendNeighbor(v *Interface_Subinterface_Ipv4_Neighbor) error { + if v.Ip == nil { + return fmt.Errorf("invalid nil key received for Ip") + } + + key := *v.Ip + + // Initialise the list within the receiver struct if it has not already been + // created. + if t.Neighbor == nil { + t.Neighbor = make(map[string]*Interface_Subinterface_Ipv4_Neighbor) + } + + if _, ok := t.Neighbor[key]; ok { + return fmt.Errorf("duplicate key for list Neighbor %v", key) + } + + t.Neighbor[key] = v + return nil +} + +// GetOrCreateCounters retrieves the value of the Counters field +// or returns the existing field if it already exists. +func (t *Interface_Subinterface_Ipv4) GetOrCreateCounters() *Interface_Subinterface_Ipv4_Counters { + if t.Counters != nil { + return t.Counters + } + t.Counters = &Interface_Subinterface_Ipv4_Counters{} + return t.Counters +} + +// GetOrCreateProxyArp retrieves the value of the ProxyArp field +// or returns the existing field if it already exists. +func (t *Interface_Subinterface_Ipv4) GetOrCreateProxyArp() *Interface_Subinterface_Ipv4_ProxyArp { + if t.ProxyArp != nil { + return t.ProxyArp + } + t.ProxyArp = &Interface_Subinterface_Ipv4_ProxyArp{} + return t.ProxyArp +} + +// GetOrCreateUnnumbered retrieves the value of the Unnumbered field +// or returns the existing field if it already exists. +func (t *Interface_Subinterface_Ipv4) GetOrCreateUnnumbered() *Interface_Subinterface_Ipv4_Unnumbered { + if t.Unnumbered != nil { + return t.Unnumbered + } + t.Unnumbered = &Interface_Subinterface_Ipv4_Unnumbered{} + return t.Unnumbered +} + +// GetCounters returns the value of the Counters struct pointer +// from Interface_Subinterface_Ipv4. If the receiver or the field Counters is nil, nil +// is returned such that the Get* methods can be safely chained. +func (t *Interface_Subinterface_Ipv4) GetCounters() *Interface_Subinterface_Ipv4_Counters { + if t != nil && t.Counters != nil { + return t.Counters + } + return nil +} + +// GetProxyArp returns the value of the ProxyArp struct pointer +// from Interface_Subinterface_Ipv4. If the receiver or the field ProxyArp is nil, nil +// is returned such that the Get* methods can be safely chained. +func (t *Interface_Subinterface_Ipv4) GetProxyArp() *Interface_Subinterface_Ipv4_ProxyArp { + if t != nil && t.ProxyArp != nil { + return t.ProxyArp + } + return nil +} + +// GetUnnumbered returns the value of the Unnumbered struct pointer +// from Interface_Subinterface_Ipv4. If the receiver or the field Unnumbered is nil, nil +// is returned such that the Get* methods can be safely chained. +func (t *Interface_Subinterface_Ipv4) GetUnnumbered() *Interface_Subinterface_Ipv4_Unnumbered { + if t != nil && t.Unnumbered != nil { + return t.Unnumbered + } + return nil +} + +// GetDhcpClient retrieves the value of the leaf DhcpClient from the Interface_Subinterface_Ipv4 +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if DhcpClient is set, it can +// safely use t.GetDhcpClient() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.DhcpClient == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv4) GetDhcpClient() bool { + if t == nil || t.DhcpClient == nil { + return false + } + return *t.DhcpClient +} + +// GetEnabled retrieves the value of the leaf Enabled from the Interface_Subinterface_Ipv4 +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Enabled is set, it can +// safely use t.GetEnabled() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Enabled == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv4) GetEnabled() bool { + if t == nil || t.Enabled == nil { + return true + } + return *t.Enabled +} + +// GetGratuitousArpAccepted retrieves the value of the leaf GratuitousArpAccepted from the Interface_Subinterface_Ipv4 +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if GratuitousArpAccepted is set, it can +// safely use t.GetGratuitousArpAccepted() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.GratuitousArpAccepted == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv4) GetGratuitousArpAccepted() bool { + if t == nil || t.GratuitousArpAccepted == nil { + return false + } + return *t.GratuitousArpAccepted +} + +// GetMtu retrieves the value of the leaf Mtu from the Interface_Subinterface_Ipv4 +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Mtu is set, it can +// safely use t.GetMtu() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Mtu == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv4) GetMtu() uint16 { + if t == nil || t.Mtu == nil { + return 0 + } + return *t.Mtu +} + +// SetDhcpClient sets the value of the leaf DhcpClient in the Interface_Subinterface_Ipv4 +// struct. +func (t *Interface_Subinterface_Ipv4) SetDhcpClient(v bool) { + t.DhcpClient = &v +} + +// SetEnabled sets the value of the leaf Enabled in the Interface_Subinterface_Ipv4 +// struct. +func (t *Interface_Subinterface_Ipv4) SetEnabled(v bool) { + t.Enabled = &v +} + +// SetGratuitousArpAccepted sets the value of the leaf GratuitousArpAccepted in the Interface_Subinterface_Ipv4 +// struct. +func (t *Interface_Subinterface_Ipv4) SetGratuitousArpAccepted(v bool) { + t.GratuitousArpAccepted = &v +} + +// SetMtu sets the value of the leaf Mtu in the Interface_Subinterface_Ipv4 +// struct. +func (t *Interface_Subinterface_Ipv4) SetMtu(v uint16) { + t.Mtu = &v +} + +// PopulateDefaults recursively populates unset leaf fields in the Interface_Subinterface_Ipv4 +// with default values as specified in the YANG schema, instantiating any nil +// container fields. +func (t *Interface_Subinterface_Ipv4) PopulateDefaults() { + if t == nil { + return + } + ygot.BuildEmptyTree(t) + if t.DhcpClient == nil { + var v bool = false + t.DhcpClient = &v + } + if t.Enabled == nil { + var v bool = true + t.Enabled = &v + } + t.Counters.PopulateDefaults() + t.ProxyArp.PopulateDefaults() + t.Unnumbered.PopulateDefaults() + for _, e := range t.Address { + e.PopulateDefaults() + } + for _, e := range t.Neighbor { + e.PopulateDefaults() + } +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_Subinterface_Ipv4) ΛValidate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["Interface_Subinterface_Ipv4"], t, opts...); err != nil { + return err + } + return nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_Subinterface_Ipv4) Validate(opts ...ygot.ValidationOption) error { + return t.ΛValidate(opts...) +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *Interface_Subinterface_Ipv4) ΛEnumTypeMap() map[string][]reflect.Type { return ΛEnumTypes } + +// ΛBelongingModule returns the name of the module that defines the namespace +// of Interface_Subinterface_Ipv4. +func (*Interface_Subinterface_Ipv4) ΛBelongingModule() string { + return "openconfig-if-ip" +} + +// Interface_Subinterface_Ipv4_Address represents the /openconfig-interfaces/interfaces/interface/subinterfaces/subinterface/ipv4/addresses/address YANG schema element. +type Interface_Subinterface_Ipv4_Address struct { + Ip *string `path:"config/ip|ip" module:"openconfig-if-ip/openconfig-if-ip|openconfig-if-ip" shadow-path:"state/ip|ip" shadow-module:"openconfig-if-ip/openconfig-if-ip|openconfig-if-ip"` + Origin E_IfIp_IpAddressOrigin `path:"state/origin" module:"openconfig-if-ip/openconfig-if-ip"` + PrefixLength *uint8 `path:"config/prefix-length" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/prefix-length" shadow-module:"openconfig-if-ip/openconfig-if-ip"` + Type E_IfIp_Ipv4AddressType `path:"config/type" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/type" shadow-module:"openconfig-if-ip/openconfig-if-ip"` + VrrpGroup map[uint8]*Interface_Subinterface_Ipv4_Address_VrrpGroup `path:"vrrp/vrrp-group" module:"openconfig-if-ip/openconfig-if-ip"` +} + +// IsYANGGoStruct ensures that Interface_Subinterface_Ipv4_Address implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*Interface_Subinterface_Ipv4_Address) IsYANGGoStruct() {} + +// NewVrrpGroup creates a new entry in the VrrpGroup list of the +// Interface_Subinterface_Ipv4_Address struct. The keys of the list are populated from the input +// arguments. +func (t *Interface_Subinterface_Ipv4_Address) NewVrrpGroup(VirtualRouterId uint8) (*Interface_Subinterface_Ipv4_Address_VrrpGroup, error) { + + // Initialise the list within the receiver struct if it has not already been + // created. + if t.VrrpGroup == nil { + t.VrrpGroup = make(map[uint8]*Interface_Subinterface_Ipv4_Address_VrrpGroup) + } + + key := VirtualRouterId + + // Ensure that this key has not already been used in the + // list. Keyed YANG lists do not allow duplicate keys to + // be created. + if _, ok := t.VrrpGroup[key]; ok { + return nil, fmt.Errorf("duplicate key %v for list VrrpGroup", key) + } + + t.VrrpGroup[key] = &Interface_Subinterface_Ipv4_Address_VrrpGroup{ + VirtualRouterId: &VirtualRouterId, + } + + return t.VrrpGroup[key], nil +} + +// RenameVrrpGroup renames an entry in the list VrrpGroup within +// the Interface_Subinterface_Ipv4_Address struct. The entry with key oldK is renamed to newK updating +// the key within the value. +func (t *Interface_Subinterface_Ipv4_Address) RenameVrrpGroup(oldK, newK uint8) error { + if _, ok := t.VrrpGroup[newK]; ok { + return fmt.Errorf("key %v already exists in VrrpGroup", newK) + } + + e, ok := t.VrrpGroup[oldK] + if !ok { + return fmt.Errorf("key %v not found in VrrpGroup", oldK) + } + e.VirtualRouterId = &newK + + t.VrrpGroup[newK] = e + delete(t.VrrpGroup, oldK) + return nil +} + +// GetOrCreateVrrpGroupMap returns the list (map) from Interface_Subinterface_Ipv4_Address. +// +// It initializes the field if not already initialized. +func (t *Interface_Subinterface_Ipv4_Address) GetOrCreateVrrpGroupMap() map[uint8]*Interface_Subinterface_Ipv4_Address_VrrpGroup { + if t.VrrpGroup == nil { + t.VrrpGroup = make(map[uint8]*Interface_Subinterface_Ipv4_Address_VrrpGroup) + } + return t.VrrpGroup +} + +// GetOrCreateVrrpGroup retrieves the value with the specified keys from +// the receiver Interface_Subinterface_Ipv4_Address. If the entry does not exist, then it is created. +// It returns the existing or new list member. +func (t *Interface_Subinterface_Ipv4_Address) GetOrCreateVrrpGroup(VirtualRouterId uint8) *Interface_Subinterface_Ipv4_Address_VrrpGroup { + + key := VirtualRouterId + + if v, ok := t.VrrpGroup[key]; ok { + return v + } + // Panic if we receive an error, since we should have retrieved an existing + // list member. This allows chaining of GetOrCreate methods. + v, err := t.NewVrrpGroup(VirtualRouterId) + if err != nil { + panic(fmt.Sprintf("GetOrCreateVrrpGroup got unexpected error: %v", err)) + } + return v +} + +// GetVrrpGroup retrieves the value with the specified key from +// the VrrpGroup map field of Interface_Subinterface_Ipv4_Address. If the receiver is nil, or +// the specified key is not present in the list, nil is returned such that Get* +// methods may be safely chained. +func (t *Interface_Subinterface_Ipv4_Address) GetVrrpGroup(VirtualRouterId uint8) *Interface_Subinterface_Ipv4_Address_VrrpGroup { + + if t == nil { + return nil + } + + key := VirtualRouterId + + if lm, ok := t.VrrpGroup[key]; ok { + return lm + } + return nil +} + +// DeleteVrrpGroup deletes the value with the specified keys from +// the receiver Interface_Subinterface_Ipv4_Address. If there is no such element, the function +// is a no-op. +func (t *Interface_Subinterface_Ipv4_Address) DeleteVrrpGroup(VirtualRouterId uint8) { + key := VirtualRouterId + + delete(t.VrrpGroup, key) +} + +// AppendVrrpGroup appends the supplied Interface_Subinterface_Ipv4_Address_VrrpGroup struct to the +// list VrrpGroup of Interface_Subinterface_Ipv4_Address. If the key value(s) specified in +// the supplied Interface_Subinterface_Ipv4_Address_VrrpGroup already exist in the list, an error is +// returned. +func (t *Interface_Subinterface_Ipv4_Address) AppendVrrpGroup(v *Interface_Subinterface_Ipv4_Address_VrrpGroup) error { + if v.VirtualRouterId == nil { + return fmt.Errorf("invalid nil key received for VirtualRouterId") + } + + key := *v.VirtualRouterId + + // Initialise the list within the receiver struct if it has not already been + // created. + if t.VrrpGroup == nil { + t.VrrpGroup = make(map[uint8]*Interface_Subinterface_Ipv4_Address_VrrpGroup) + } + + if _, ok := t.VrrpGroup[key]; ok { + return fmt.Errorf("duplicate key for list VrrpGroup %v", key) + } + + t.VrrpGroup[key] = v + return nil +} + +// GetIp retrieves the value of the leaf Ip from the Interface_Subinterface_Ipv4_Address +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Ip is set, it can +// safely use t.GetIp() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Ip == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv4_Address) GetIp() string { + if t == nil || t.Ip == nil { + return "" + } + return *t.Ip +} + +// GetOrigin retrieves the value of the leaf Origin from the Interface_Subinterface_Ipv4_Address +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Origin is set, it can +// safely use t.GetOrigin() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Origin == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv4_Address) GetOrigin() E_IfIp_IpAddressOrigin { + if t == nil || t.Origin == 0 { + return 0 + } + return t.Origin +} + +// GetPrefixLength retrieves the value of the leaf PrefixLength from the Interface_Subinterface_Ipv4_Address +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if PrefixLength is set, it can +// safely use t.GetPrefixLength() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.PrefixLength == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv4_Address) GetPrefixLength() uint8 { + if t == nil || t.PrefixLength == nil { + return 0 + } + return *t.PrefixLength +} + +// GetType retrieves the value of the leaf Type from the Interface_Subinterface_Ipv4_Address +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Type is set, it can +// safely use t.GetType() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Type == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv4_Address) GetType() E_IfIp_Ipv4AddressType { + if t == nil || t.Type == 0 { + return IfIp_Ipv4AddressType_PRIMARY + } + return t.Type +} + +// SetIp sets the value of the leaf Ip in the Interface_Subinterface_Ipv4_Address +// struct. +func (t *Interface_Subinterface_Ipv4_Address) SetIp(v string) { + t.Ip = &v +} + +// SetOrigin sets the value of the leaf Origin in the Interface_Subinterface_Ipv4_Address +// struct. +func (t *Interface_Subinterface_Ipv4_Address) SetOrigin(v E_IfIp_IpAddressOrigin) { + t.Origin = v +} + +// SetPrefixLength sets the value of the leaf PrefixLength in the Interface_Subinterface_Ipv4_Address +// struct. +func (t *Interface_Subinterface_Ipv4_Address) SetPrefixLength(v uint8) { + t.PrefixLength = &v +} + +// SetType sets the value of the leaf Type in the Interface_Subinterface_Ipv4_Address +// struct. +func (t *Interface_Subinterface_Ipv4_Address) SetType(v E_IfIp_Ipv4AddressType) { + t.Type = v +} + +// PopulateDefaults recursively populates unset leaf fields in the Interface_Subinterface_Ipv4_Address +// with default values as specified in the YANG schema, instantiating any nil +// container fields. +func (t *Interface_Subinterface_Ipv4_Address) PopulateDefaults() { + if t == nil { + return + } + ygot.BuildEmptyTree(t) + if t.Type == 0 { + t.Type = IfIp_Ipv4AddressType_PRIMARY + } + for _, e := range t.VrrpGroup { + e.PopulateDefaults() + } +} + +// ΛListKeyMap returns the keys of the Interface_Subinterface_Ipv4_Address struct, which is a YANG list entry. +func (t *Interface_Subinterface_Ipv4_Address) ΛListKeyMap() (map[string]interface{}, error) { + if t.Ip == nil { + return nil, fmt.Errorf("nil value for key Ip") + } + + return map[string]interface{}{ + "ip": *t.Ip, + }, nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_Subinterface_Ipv4_Address) ΛValidate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["Interface_Subinterface_Ipv4_Address"], t, opts...); err != nil { + return err + } + return nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_Subinterface_Ipv4_Address) Validate(opts ...ygot.ValidationOption) error { + return t.ΛValidate(opts...) +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *Interface_Subinterface_Ipv4_Address) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// ΛBelongingModule returns the name of the module that defines the namespace +// of Interface_Subinterface_Ipv4_Address. +func (*Interface_Subinterface_Ipv4_Address) ΛBelongingModule() string { + return "openconfig-if-ip" +} + +// Interface_Subinterface_Ipv4_Address_VrrpGroup represents the /openconfig-interfaces/interfaces/interface/subinterfaces/subinterface/ipv4/addresses/address/vrrp/vrrp-group YANG schema element. +type Interface_Subinterface_Ipv4_Address_VrrpGroup struct { + AcceptMode *bool `path:"config/accept-mode" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/accept-mode" shadow-module:"openconfig-if-ip/openconfig-if-ip"` + AdvertisementInterval *uint16 `path:"config/advertisement-interval" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/advertisement-interval" shadow-module:"openconfig-if-ip/openconfig-if-ip"` + CurrentPriority *uint8 `path:"state/current-priority" module:"openconfig-if-ip/openconfig-if-ip"` + InterfaceTracking *Interface_Subinterface_Ipv4_Address_VrrpGroup_InterfaceTracking `path:"interface-tracking" module:"openconfig-if-ip"` + Preempt *bool `path:"config/preempt" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/preempt" shadow-module:"openconfig-if-ip/openconfig-if-ip"` + PreemptDelay *uint16 `path:"config/preempt-delay" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/preempt-delay" shadow-module:"openconfig-if-ip/openconfig-if-ip"` + Priority *uint8 `path:"config/priority" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/priority" shadow-module:"openconfig-if-ip/openconfig-if-ip"` + VirtualAddress []string `path:"config/virtual-address" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/virtual-address" shadow-module:"openconfig-if-ip/openconfig-if-ip"` + VirtualRouterId *uint8 `path:"config/virtual-router-id|virtual-router-id" module:"openconfig-if-ip/openconfig-if-ip|openconfig-if-ip" shadow-path:"state/virtual-router-id|virtual-router-id" shadow-module:"openconfig-if-ip/openconfig-if-ip|openconfig-if-ip"` +} + +// IsYANGGoStruct ensures that Interface_Subinterface_Ipv4_Address_VrrpGroup implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*Interface_Subinterface_Ipv4_Address_VrrpGroup) IsYANGGoStruct() {} + +// GetOrCreateInterfaceTracking retrieves the value of the InterfaceTracking field +// or returns the existing field if it already exists. +func (t *Interface_Subinterface_Ipv4_Address_VrrpGroup) GetOrCreateInterfaceTracking() *Interface_Subinterface_Ipv4_Address_VrrpGroup_InterfaceTracking { + if t.InterfaceTracking != nil { + return t.InterfaceTracking + } + t.InterfaceTracking = &Interface_Subinterface_Ipv4_Address_VrrpGroup_InterfaceTracking{} + return t.InterfaceTracking +} + +// GetInterfaceTracking returns the value of the InterfaceTracking struct pointer +// from Interface_Subinterface_Ipv4_Address_VrrpGroup. If the receiver or the field InterfaceTracking is nil, nil +// is returned such that the Get* methods can be safely chained. +func (t *Interface_Subinterface_Ipv4_Address_VrrpGroup) GetInterfaceTracking() *Interface_Subinterface_Ipv4_Address_VrrpGroup_InterfaceTracking { + if t != nil && t.InterfaceTracking != nil { + return t.InterfaceTracking + } + return nil +} + +// GetAcceptMode retrieves the value of the leaf AcceptMode from the Interface_Subinterface_Ipv4_Address_VrrpGroup +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if AcceptMode is set, it can +// safely use t.GetAcceptMode() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.AcceptMode == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv4_Address_VrrpGroup) GetAcceptMode() bool { + if t == nil || t.AcceptMode == nil { + return false + } + return *t.AcceptMode +} + +// GetAdvertisementInterval retrieves the value of the leaf AdvertisementInterval from the Interface_Subinterface_Ipv4_Address_VrrpGroup +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if AdvertisementInterval is set, it can +// safely use t.GetAdvertisementInterval() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.AdvertisementInterval == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv4_Address_VrrpGroup) GetAdvertisementInterval() uint16 { + if t == nil || t.AdvertisementInterval == nil { + return 100 + } + return *t.AdvertisementInterval +} + +// GetCurrentPriority retrieves the value of the leaf CurrentPriority from the Interface_Subinterface_Ipv4_Address_VrrpGroup +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if CurrentPriority is set, it can +// safely use t.GetCurrentPriority() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.CurrentPriority == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv4_Address_VrrpGroup) GetCurrentPriority() uint8 { + if t == nil || t.CurrentPriority == nil { + return 0 + } + return *t.CurrentPriority +} + +// GetPreempt retrieves the value of the leaf Preempt from the Interface_Subinterface_Ipv4_Address_VrrpGroup +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Preempt is set, it can +// safely use t.GetPreempt() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Preempt == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv4_Address_VrrpGroup) GetPreempt() bool { + if t == nil || t.Preempt == nil { + return true + } + return *t.Preempt +} + +// GetPreemptDelay retrieves the value of the leaf PreemptDelay from the Interface_Subinterface_Ipv4_Address_VrrpGroup +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if PreemptDelay is set, it can +// safely use t.GetPreemptDelay() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.PreemptDelay == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv4_Address_VrrpGroup) GetPreemptDelay() uint16 { + if t == nil || t.PreemptDelay == nil { + return 0 + } + return *t.PreemptDelay +} + +// GetPriority retrieves the value of the leaf Priority from the Interface_Subinterface_Ipv4_Address_VrrpGroup +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Priority is set, it can +// safely use t.GetPriority() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Priority == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv4_Address_VrrpGroup) GetPriority() uint8 { + if t == nil || t.Priority == nil { + return 100 + } + return *t.Priority +} + +// GetVirtualAddress retrieves the value of the leaf VirtualAddress from the Interface_Subinterface_Ipv4_Address_VrrpGroup +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if VirtualAddress is set, it can +// safely use t.GetVirtualAddress() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.VirtualAddress == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv4_Address_VrrpGroup) GetVirtualAddress() []string { + if t == nil || t.VirtualAddress == nil { + return nil + } + return t.VirtualAddress +} + +// GetVirtualRouterId retrieves the value of the leaf VirtualRouterId from the Interface_Subinterface_Ipv4_Address_VrrpGroup +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if VirtualRouterId is set, it can +// safely use t.GetVirtualRouterId() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.VirtualRouterId == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv4_Address_VrrpGroup) GetVirtualRouterId() uint8 { + if t == nil || t.VirtualRouterId == nil { + return 0 + } + return *t.VirtualRouterId +} + +// SetAcceptMode sets the value of the leaf AcceptMode in the Interface_Subinterface_Ipv4_Address_VrrpGroup +// struct. +func (t *Interface_Subinterface_Ipv4_Address_VrrpGroup) SetAcceptMode(v bool) { + t.AcceptMode = &v +} + +// SetAdvertisementInterval sets the value of the leaf AdvertisementInterval in the Interface_Subinterface_Ipv4_Address_VrrpGroup +// struct. +func (t *Interface_Subinterface_Ipv4_Address_VrrpGroup) SetAdvertisementInterval(v uint16) { + t.AdvertisementInterval = &v +} + +// SetCurrentPriority sets the value of the leaf CurrentPriority in the Interface_Subinterface_Ipv4_Address_VrrpGroup +// struct. +func (t *Interface_Subinterface_Ipv4_Address_VrrpGroup) SetCurrentPriority(v uint8) { + t.CurrentPriority = &v +} + +// SetPreempt sets the value of the leaf Preempt in the Interface_Subinterface_Ipv4_Address_VrrpGroup +// struct. +func (t *Interface_Subinterface_Ipv4_Address_VrrpGroup) SetPreempt(v bool) { + t.Preempt = &v +} + +// SetPreemptDelay sets the value of the leaf PreemptDelay in the Interface_Subinterface_Ipv4_Address_VrrpGroup +// struct. +func (t *Interface_Subinterface_Ipv4_Address_VrrpGroup) SetPreemptDelay(v uint16) { + t.PreemptDelay = &v +} + +// SetPriority sets the value of the leaf Priority in the Interface_Subinterface_Ipv4_Address_VrrpGroup +// struct. +func (t *Interface_Subinterface_Ipv4_Address_VrrpGroup) SetPriority(v uint8) { + t.Priority = &v +} + +// SetVirtualAddress sets the value of the leaf VirtualAddress in the Interface_Subinterface_Ipv4_Address_VrrpGroup +// struct. +func (t *Interface_Subinterface_Ipv4_Address_VrrpGroup) SetVirtualAddress(v []string) { + t.VirtualAddress = v +} + +// SetVirtualRouterId sets the value of the leaf VirtualRouterId in the Interface_Subinterface_Ipv4_Address_VrrpGroup +// struct. +func (t *Interface_Subinterface_Ipv4_Address_VrrpGroup) SetVirtualRouterId(v uint8) { + t.VirtualRouterId = &v +} + +// PopulateDefaults recursively populates unset leaf fields in the Interface_Subinterface_Ipv4_Address_VrrpGroup +// with default values as specified in the YANG schema, instantiating any nil +// container fields. +func (t *Interface_Subinterface_Ipv4_Address_VrrpGroup) PopulateDefaults() { + if t == nil { + return + } + ygot.BuildEmptyTree(t) + if t.AcceptMode == nil { + var v bool = false + t.AcceptMode = &v + } + if t.AdvertisementInterval == nil { + var v uint16 = 100 + t.AdvertisementInterval = &v + } + if t.Preempt == nil { + var v bool = true + t.Preempt = &v + } + if t.PreemptDelay == nil { + var v uint16 = 0 + t.PreemptDelay = &v + } + if t.Priority == nil { + var v uint8 = 100 + t.Priority = &v + } + t.InterfaceTracking.PopulateDefaults() +} + +// ΛListKeyMap returns the keys of the Interface_Subinterface_Ipv4_Address_VrrpGroup struct, which is a YANG list entry. +func (t *Interface_Subinterface_Ipv4_Address_VrrpGroup) ΛListKeyMap() (map[string]interface{}, error) { + if t.VirtualRouterId == nil { + return nil, fmt.Errorf("nil value for key VirtualRouterId") + } + + return map[string]interface{}{ + "virtual-router-id": *t.VirtualRouterId, + }, nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_Subinterface_Ipv4_Address_VrrpGroup) ΛValidate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["Interface_Subinterface_Ipv4_Address_VrrpGroup"], t, opts...); err != nil { + return err + } + return nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_Subinterface_Ipv4_Address_VrrpGroup) Validate(opts ...ygot.ValidationOption) error { + return t.ΛValidate(opts...) +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *Interface_Subinterface_Ipv4_Address_VrrpGroup) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// ΛBelongingModule returns the name of the module that defines the namespace +// of Interface_Subinterface_Ipv4_Address_VrrpGroup. +func (*Interface_Subinterface_Ipv4_Address_VrrpGroup) ΛBelongingModule() string { + return "openconfig-if-ip" +} + +// Interface_Subinterface_Ipv4_Address_VrrpGroup_InterfaceTracking represents the /openconfig-interfaces/interfaces/interface/subinterfaces/subinterface/ipv4/addresses/address/vrrp/vrrp-group/interface-tracking YANG schema element. +type Interface_Subinterface_Ipv4_Address_VrrpGroup_InterfaceTracking struct { + PriorityDecrement *uint8 `path:"config/priority-decrement" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/priority-decrement" shadow-module:"openconfig-if-ip/openconfig-if-ip"` + TrackInterface []string `path:"config/track-interface" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/track-interface" shadow-module:"openconfig-if-ip/openconfig-if-ip"` +} + +// IsYANGGoStruct ensures that Interface_Subinterface_Ipv4_Address_VrrpGroup_InterfaceTracking implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*Interface_Subinterface_Ipv4_Address_VrrpGroup_InterfaceTracking) IsYANGGoStruct() {} + +// GetPriorityDecrement retrieves the value of the leaf PriorityDecrement from the Interface_Subinterface_Ipv4_Address_VrrpGroup_InterfaceTracking +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if PriorityDecrement is set, it can +// safely use t.GetPriorityDecrement() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.PriorityDecrement == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv4_Address_VrrpGroup_InterfaceTracking) GetPriorityDecrement() uint8 { + if t == nil || t.PriorityDecrement == nil { + return 0 + } + return *t.PriorityDecrement +} + +// GetTrackInterface retrieves the value of the leaf TrackInterface from the Interface_Subinterface_Ipv4_Address_VrrpGroup_InterfaceTracking +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if TrackInterface is set, it can +// safely use t.GetTrackInterface() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.TrackInterface == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv4_Address_VrrpGroup_InterfaceTracking) GetTrackInterface() []string { + if t == nil || t.TrackInterface == nil { + return nil + } + return t.TrackInterface +} + +// SetPriorityDecrement sets the value of the leaf PriorityDecrement in the Interface_Subinterface_Ipv4_Address_VrrpGroup_InterfaceTracking +// struct. +func (t *Interface_Subinterface_Ipv4_Address_VrrpGroup_InterfaceTracking) SetPriorityDecrement(v uint8) { + t.PriorityDecrement = &v +} + +// SetTrackInterface sets the value of the leaf TrackInterface in the Interface_Subinterface_Ipv4_Address_VrrpGroup_InterfaceTracking +// struct. +func (t *Interface_Subinterface_Ipv4_Address_VrrpGroup_InterfaceTracking) SetTrackInterface(v []string) { + t.TrackInterface = v +} + +// PopulateDefaults recursively populates unset leaf fields in the Interface_Subinterface_Ipv4_Address_VrrpGroup_InterfaceTracking +// with default values as specified in the YANG schema, instantiating any nil +// container fields. +func (t *Interface_Subinterface_Ipv4_Address_VrrpGroup_InterfaceTracking) PopulateDefaults() { + if t == nil { + return + } + ygot.BuildEmptyTree(t) + if t.PriorityDecrement == nil { + var v uint8 = 0 + t.PriorityDecrement = &v + } +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_Subinterface_Ipv4_Address_VrrpGroup_InterfaceTracking) ΛValidate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["Interface_Subinterface_Ipv4_Address_VrrpGroup_InterfaceTracking"], t, opts...); err != nil { + return err + } + return nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_Subinterface_Ipv4_Address_VrrpGroup_InterfaceTracking) Validate(opts ...ygot.ValidationOption) error { + return t.ΛValidate(opts...) +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *Interface_Subinterface_Ipv4_Address_VrrpGroup_InterfaceTracking) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// ΛBelongingModule returns the name of the module that defines the namespace +// of Interface_Subinterface_Ipv4_Address_VrrpGroup_InterfaceTracking. +func (*Interface_Subinterface_Ipv4_Address_VrrpGroup_InterfaceTracking) ΛBelongingModule() string { + return "openconfig-if-ip" +} + +// Interface_Subinterface_Ipv4_Counters represents the /openconfig-interfaces/interfaces/interface/subinterfaces/subinterface/ipv4/state/counters YANG schema element. +type Interface_Subinterface_Ipv4_Counters struct { + InDiscardedPkts *uint64 `path:"in-discarded-pkts" module:"openconfig-if-ip"` + InErrorPkts *uint64 `path:"in-error-pkts" module:"openconfig-if-ip"` + InForwardedOctets *uint64 `path:"in-forwarded-octets" module:"openconfig-if-ip"` + InForwardedPkts *uint64 `path:"in-forwarded-pkts" module:"openconfig-if-ip"` + InMulticastOctets *uint64 `path:"in-multicast-octets" module:"openconfig-if-ip"` + InMulticastPkts *uint64 `path:"in-multicast-pkts" module:"openconfig-if-ip"` + InOctets *uint64 `path:"in-octets" module:"openconfig-if-ip"` + InPkts *uint64 `path:"in-pkts" module:"openconfig-if-ip"` + OutDiscardedPkts *uint64 `path:"out-discarded-pkts" module:"openconfig-if-ip"` + OutErrorPkts *uint64 `path:"out-error-pkts" module:"openconfig-if-ip"` + OutForwardedOctets *uint64 `path:"out-forwarded-octets" module:"openconfig-if-ip"` + OutForwardedPkts *uint64 `path:"out-forwarded-pkts" module:"openconfig-if-ip"` + OutMulticastOctets *uint64 `path:"out-multicast-octets" module:"openconfig-if-ip"` + OutMulticastPkts *uint64 `path:"out-multicast-pkts" module:"openconfig-if-ip"` + OutOctets *uint64 `path:"out-octets" module:"openconfig-if-ip"` + OutPkts *uint64 `path:"out-pkts" module:"openconfig-if-ip"` +} + +// IsYANGGoStruct ensures that Interface_Subinterface_Ipv4_Counters implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*Interface_Subinterface_Ipv4_Counters) IsYANGGoStruct() {} + +// GetInDiscardedPkts retrieves the value of the leaf InDiscardedPkts from the Interface_Subinterface_Ipv4_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if InDiscardedPkts is set, it can +// safely use t.GetInDiscardedPkts() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.InDiscardedPkts == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv4_Counters) GetInDiscardedPkts() uint64 { + if t == nil || t.InDiscardedPkts == nil { + return 0 + } + return *t.InDiscardedPkts +} + +// GetInErrorPkts retrieves the value of the leaf InErrorPkts from the Interface_Subinterface_Ipv4_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if InErrorPkts is set, it can +// safely use t.GetInErrorPkts() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.InErrorPkts == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv4_Counters) GetInErrorPkts() uint64 { + if t == nil || t.InErrorPkts == nil { + return 0 + } + return *t.InErrorPkts +} + +// GetInForwardedOctets retrieves the value of the leaf InForwardedOctets from the Interface_Subinterface_Ipv4_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if InForwardedOctets is set, it can +// safely use t.GetInForwardedOctets() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.InForwardedOctets == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv4_Counters) GetInForwardedOctets() uint64 { + if t == nil || t.InForwardedOctets == nil { + return 0 + } + return *t.InForwardedOctets +} + +// GetInForwardedPkts retrieves the value of the leaf InForwardedPkts from the Interface_Subinterface_Ipv4_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if InForwardedPkts is set, it can +// safely use t.GetInForwardedPkts() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.InForwardedPkts == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv4_Counters) GetInForwardedPkts() uint64 { + if t == nil || t.InForwardedPkts == nil { + return 0 + } + return *t.InForwardedPkts +} + +// GetInMulticastOctets retrieves the value of the leaf InMulticastOctets from the Interface_Subinterface_Ipv4_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if InMulticastOctets is set, it can +// safely use t.GetInMulticastOctets() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.InMulticastOctets == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv4_Counters) GetInMulticastOctets() uint64 { + if t == nil || t.InMulticastOctets == nil { + return 0 + } + return *t.InMulticastOctets +} + +// GetInMulticastPkts retrieves the value of the leaf InMulticastPkts from the Interface_Subinterface_Ipv4_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if InMulticastPkts is set, it can +// safely use t.GetInMulticastPkts() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.InMulticastPkts == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv4_Counters) GetInMulticastPkts() uint64 { + if t == nil || t.InMulticastPkts == nil { + return 0 + } + return *t.InMulticastPkts +} + +// GetInOctets retrieves the value of the leaf InOctets from the Interface_Subinterface_Ipv4_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if InOctets is set, it can +// safely use t.GetInOctets() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.InOctets == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv4_Counters) GetInOctets() uint64 { + if t == nil || t.InOctets == nil { + return 0 + } + return *t.InOctets +} + +// GetInPkts retrieves the value of the leaf InPkts from the Interface_Subinterface_Ipv4_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if InPkts is set, it can +// safely use t.GetInPkts() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.InPkts == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv4_Counters) GetInPkts() uint64 { + if t == nil || t.InPkts == nil { + return 0 + } + return *t.InPkts +} + +// GetOutDiscardedPkts retrieves the value of the leaf OutDiscardedPkts from the Interface_Subinterface_Ipv4_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if OutDiscardedPkts is set, it can +// safely use t.GetOutDiscardedPkts() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.OutDiscardedPkts == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv4_Counters) GetOutDiscardedPkts() uint64 { + if t == nil || t.OutDiscardedPkts == nil { + return 0 + } + return *t.OutDiscardedPkts +} + +// GetOutErrorPkts retrieves the value of the leaf OutErrorPkts from the Interface_Subinterface_Ipv4_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if OutErrorPkts is set, it can +// safely use t.GetOutErrorPkts() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.OutErrorPkts == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv4_Counters) GetOutErrorPkts() uint64 { + if t == nil || t.OutErrorPkts == nil { + return 0 + } + return *t.OutErrorPkts +} + +// GetOutForwardedOctets retrieves the value of the leaf OutForwardedOctets from the Interface_Subinterface_Ipv4_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if OutForwardedOctets is set, it can +// safely use t.GetOutForwardedOctets() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.OutForwardedOctets == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv4_Counters) GetOutForwardedOctets() uint64 { + if t == nil || t.OutForwardedOctets == nil { + return 0 + } + return *t.OutForwardedOctets +} + +// GetOutForwardedPkts retrieves the value of the leaf OutForwardedPkts from the Interface_Subinterface_Ipv4_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if OutForwardedPkts is set, it can +// safely use t.GetOutForwardedPkts() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.OutForwardedPkts == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv4_Counters) GetOutForwardedPkts() uint64 { + if t == nil || t.OutForwardedPkts == nil { + return 0 + } + return *t.OutForwardedPkts +} + +// GetOutMulticastOctets retrieves the value of the leaf OutMulticastOctets from the Interface_Subinterface_Ipv4_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if OutMulticastOctets is set, it can +// safely use t.GetOutMulticastOctets() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.OutMulticastOctets == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv4_Counters) GetOutMulticastOctets() uint64 { + if t == nil || t.OutMulticastOctets == nil { + return 0 + } + return *t.OutMulticastOctets +} + +// GetOutMulticastPkts retrieves the value of the leaf OutMulticastPkts from the Interface_Subinterface_Ipv4_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if OutMulticastPkts is set, it can +// safely use t.GetOutMulticastPkts() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.OutMulticastPkts == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv4_Counters) GetOutMulticastPkts() uint64 { + if t == nil || t.OutMulticastPkts == nil { + return 0 + } + return *t.OutMulticastPkts +} + +// GetOutOctets retrieves the value of the leaf OutOctets from the Interface_Subinterface_Ipv4_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if OutOctets is set, it can +// safely use t.GetOutOctets() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.OutOctets == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv4_Counters) GetOutOctets() uint64 { + if t == nil || t.OutOctets == nil { + return 0 + } + return *t.OutOctets +} + +// GetOutPkts retrieves the value of the leaf OutPkts from the Interface_Subinterface_Ipv4_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if OutPkts is set, it can +// safely use t.GetOutPkts() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.OutPkts == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv4_Counters) GetOutPkts() uint64 { + if t == nil || t.OutPkts == nil { + return 0 + } + return *t.OutPkts +} + +// SetInDiscardedPkts sets the value of the leaf InDiscardedPkts in the Interface_Subinterface_Ipv4_Counters +// struct. +func (t *Interface_Subinterface_Ipv4_Counters) SetInDiscardedPkts(v uint64) { + t.InDiscardedPkts = &v +} + +// SetInErrorPkts sets the value of the leaf InErrorPkts in the Interface_Subinterface_Ipv4_Counters +// struct. +func (t *Interface_Subinterface_Ipv4_Counters) SetInErrorPkts(v uint64) { + t.InErrorPkts = &v +} + +// SetInForwardedOctets sets the value of the leaf InForwardedOctets in the Interface_Subinterface_Ipv4_Counters +// struct. +func (t *Interface_Subinterface_Ipv4_Counters) SetInForwardedOctets(v uint64) { + t.InForwardedOctets = &v +} + +// SetInForwardedPkts sets the value of the leaf InForwardedPkts in the Interface_Subinterface_Ipv4_Counters +// struct. +func (t *Interface_Subinterface_Ipv4_Counters) SetInForwardedPkts(v uint64) { + t.InForwardedPkts = &v +} + +// SetInMulticastOctets sets the value of the leaf InMulticastOctets in the Interface_Subinterface_Ipv4_Counters +// struct. +func (t *Interface_Subinterface_Ipv4_Counters) SetInMulticastOctets(v uint64) { + t.InMulticastOctets = &v +} + +// SetInMulticastPkts sets the value of the leaf InMulticastPkts in the Interface_Subinterface_Ipv4_Counters +// struct. +func (t *Interface_Subinterface_Ipv4_Counters) SetInMulticastPkts(v uint64) { + t.InMulticastPkts = &v +} + +// SetInOctets sets the value of the leaf InOctets in the Interface_Subinterface_Ipv4_Counters +// struct. +func (t *Interface_Subinterface_Ipv4_Counters) SetInOctets(v uint64) { + t.InOctets = &v +} + +// SetInPkts sets the value of the leaf InPkts in the Interface_Subinterface_Ipv4_Counters +// struct. +func (t *Interface_Subinterface_Ipv4_Counters) SetInPkts(v uint64) { + t.InPkts = &v +} + +// SetOutDiscardedPkts sets the value of the leaf OutDiscardedPkts in the Interface_Subinterface_Ipv4_Counters +// struct. +func (t *Interface_Subinterface_Ipv4_Counters) SetOutDiscardedPkts(v uint64) { + t.OutDiscardedPkts = &v +} + +// SetOutErrorPkts sets the value of the leaf OutErrorPkts in the Interface_Subinterface_Ipv4_Counters +// struct. +func (t *Interface_Subinterface_Ipv4_Counters) SetOutErrorPkts(v uint64) { + t.OutErrorPkts = &v +} + +// SetOutForwardedOctets sets the value of the leaf OutForwardedOctets in the Interface_Subinterface_Ipv4_Counters +// struct. +func (t *Interface_Subinterface_Ipv4_Counters) SetOutForwardedOctets(v uint64) { + t.OutForwardedOctets = &v +} + +// SetOutForwardedPkts sets the value of the leaf OutForwardedPkts in the Interface_Subinterface_Ipv4_Counters +// struct. +func (t *Interface_Subinterface_Ipv4_Counters) SetOutForwardedPkts(v uint64) { + t.OutForwardedPkts = &v +} + +// SetOutMulticastOctets sets the value of the leaf OutMulticastOctets in the Interface_Subinterface_Ipv4_Counters +// struct. +func (t *Interface_Subinterface_Ipv4_Counters) SetOutMulticastOctets(v uint64) { + t.OutMulticastOctets = &v +} + +// SetOutMulticastPkts sets the value of the leaf OutMulticastPkts in the Interface_Subinterface_Ipv4_Counters +// struct. +func (t *Interface_Subinterface_Ipv4_Counters) SetOutMulticastPkts(v uint64) { + t.OutMulticastPkts = &v +} + +// SetOutOctets sets the value of the leaf OutOctets in the Interface_Subinterface_Ipv4_Counters +// struct. +func (t *Interface_Subinterface_Ipv4_Counters) SetOutOctets(v uint64) { + t.OutOctets = &v +} + +// SetOutPkts sets the value of the leaf OutPkts in the Interface_Subinterface_Ipv4_Counters +// struct. +func (t *Interface_Subinterface_Ipv4_Counters) SetOutPkts(v uint64) { + t.OutPkts = &v +} + +// PopulateDefaults recursively populates unset leaf fields in the Interface_Subinterface_Ipv4_Counters +// with default values as specified in the YANG schema, instantiating any nil +// container fields. +func (t *Interface_Subinterface_Ipv4_Counters) PopulateDefaults() { + if t == nil { + return + } + ygot.BuildEmptyTree(t) +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_Subinterface_Ipv4_Counters) ΛValidate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["Interface_Subinterface_Ipv4_Counters"], t, opts...); err != nil { + return err + } + return nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_Subinterface_Ipv4_Counters) Validate(opts ...ygot.ValidationOption) error { + return t.ΛValidate(opts...) +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *Interface_Subinterface_Ipv4_Counters) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// ΛBelongingModule returns the name of the module that defines the namespace +// of Interface_Subinterface_Ipv4_Counters. +func (*Interface_Subinterface_Ipv4_Counters) ΛBelongingModule() string { + return "openconfig-if-ip" +} + +// Interface_Subinterface_Ipv4_Neighbor represents the /openconfig-interfaces/interfaces/interface/subinterfaces/subinterface/ipv4/neighbors/neighbor YANG schema element. +type Interface_Subinterface_Ipv4_Neighbor struct { + Ip *string `path:"config/ip|ip" module:"openconfig-if-ip/openconfig-if-ip|openconfig-if-ip" shadow-path:"state/ip|ip" shadow-module:"openconfig-if-ip/openconfig-if-ip|openconfig-if-ip"` + LinkLayerAddress *string `path:"config/link-layer-address" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/link-layer-address" shadow-module:"openconfig-if-ip/openconfig-if-ip"` + Origin E_IfIp_NeighborOrigin `path:"state/origin" module:"openconfig-if-ip/openconfig-if-ip"` +} + +// IsYANGGoStruct ensures that Interface_Subinterface_Ipv4_Neighbor implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*Interface_Subinterface_Ipv4_Neighbor) IsYANGGoStruct() {} + +// GetIp retrieves the value of the leaf Ip from the Interface_Subinterface_Ipv4_Neighbor +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Ip is set, it can +// safely use t.GetIp() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Ip == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv4_Neighbor) GetIp() string { + if t == nil || t.Ip == nil { + return "" + } + return *t.Ip +} + +// GetLinkLayerAddress retrieves the value of the leaf LinkLayerAddress from the Interface_Subinterface_Ipv4_Neighbor +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if LinkLayerAddress is set, it can +// safely use t.GetLinkLayerAddress() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.LinkLayerAddress == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv4_Neighbor) GetLinkLayerAddress() string { + if t == nil || t.LinkLayerAddress == nil { + return "" + } + return *t.LinkLayerAddress +} + +// GetOrigin retrieves the value of the leaf Origin from the Interface_Subinterface_Ipv4_Neighbor +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Origin is set, it can +// safely use t.GetOrigin() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Origin == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv4_Neighbor) GetOrigin() E_IfIp_NeighborOrigin { + if t == nil || t.Origin == 0 { + return 0 + } + return t.Origin +} + +// SetIp sets the value of the leaf Ip in the Interface_Subinterface_Ipv4_Neighbor +// struct. +func (t *Interface_Subinterface_Ipv4_Neighbor) SetIp(v string) { + t.Ip = &v +} + +// SetLinkLayerAddress sets the value of the leaf LinkLayerAddress in the Interface_Subinterface_Ipv4_Neighbor +// struct. +func (t *Interface_Subinterface_Ipv4_Neighbor) SetLinkLayerAddress(v string) { + t.LinkLayerAddress = &v +} + +// SetOrigin sets the value of the leaf Origin in the Interface_Subinterface_Ipv4_Neighbor +// struct. +func (t *Interface_Subinterface_Ipv4_Neighbor) SetOrigin(v E_IfIp_NeighborOrigin) { + t.Origin = v +} + +// PopulateDefaults recursively populates unset leaf fields in the Interface_Subinterface_Ipv4_Neighbor +// with default values as specified in the YANG schema, instantiating any nil +// container fields. +func (t *Interface_Subinterface_Ipv4_Neighbor) PopulateDefaults() { + if t == nil { + return + } + ygot.BuildEmptyTree(t) +} + +// ΛListKeyMap returns the keys of the Interface_Subinterface_Ipv4_Neighbor struct, which is a YANG list entry. +func (t *Interface_Subinterface_Ipv4_Neighbor) ΛListKeyMap() (map[string]interface{}, error) { + if t.Ip == nil { + return nil, fmt.Errorf("nil value for key Ip") + } + + return map[string]interface{}{ + "ip": *t.Ip, + }, nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_Subinterface_Ipv4_Neighbor) ΛValidate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["Interface_Subinterface_Ipv4_Neighbor"], t, opts...); err != nil { + return err + } + return nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_Subinterface_Ipv4_Neighbor) Validate(opts ...ygot.ValidationOption) error { + return t.ΛValidate(opts...) +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *Interface_Subinterface_Ipv4_Neighbor) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// ΛBelongingModule returns the name of the module that defines the namespace +// of Interface_Subinterface_Ipv4_Neighbor. +func (*Interface_Subinterface_Ipv4_Neighbor) ΛBelongingModule() string { + return "openconfig-if-ip" +} + +// Interface_Subinterface_Ipv4_ProxyArp represents the /openconfig-interfaces/interfaces/interface/subinterfaces/subinterface/ipv4/proxy-arp YANG schema element. +type Interface_Subinterface_Ipv4_ProxyArp struct { + Mode E_ProxyArp_Mode `path:"config/mode" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/mode" shadow-module:"openconfig-if-ip/openconfig-if-ip"` +} + +// IsYANGGoStruct ensures that Interface_Subinterface_Ipv4_ProxyArp implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*Interface_Subinterface_Ipv4_ProxyArp) IsYANGGoStruct() {} + +// GetMode retrieves the value of the leaf Mode from the Interface_Subinterface_Ipv4_ProxyArp +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Mode is set, it can +// safely use t.GetMode() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Mode == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv4_ProxyArp) GetMode() E_ProxyArp_Mode { + if t == nil || t.Mode == 0 { + return ProxyArp_Mode_DISABLE + } + return t.Mode +} + +// SetMode sets the value of the leaf Mode in the Interface_Subinterface_Ipv4_ProxyArp +// struct. +func (t *Interface_Subinterface_Ipv4_ProxyArp) SetMode(v E_ProxyArp_Mode) { + t.Mode = v +} + +// PopulateDefaults recursively populates unset leaf fields in the Interface_Subinterface_Ipv4_ProxyArp +// with default values as specified in the YANG schema, instantiating any nil +// container fields. +func (t *Interface_Subinterface_Ipv4_ProxyArp) PopulateDefaults() { + if t == nil { + return + } + ygot.BuildEmptyTree(t) + if t.Mode == 0 { + t.Mode = ProxyArp_Mode_DISABLE + } +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_Subinterface_Ipv4_ProxyArp) ΛValidate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["Interface_Subinterface_Ipv4_ProxyArp"], t, opts...); err != nil { + return err + } + return nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_Subinterface_Ipv4_ProxyArp) Validate(opts ...ygot.ValidationOption) error { + return t.ΛValidate(opts...) +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *Interface_Subinterface_Ipv4_ProxyArp) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// ΛBelongingModule returns the name of the module that defines the namespace +// of Interface_Subinterface_Ipv4_ProxyArp. +func (*Interface_Subinterface_Ipv4_ProxyArp) ΛBelongingModule() string { + return "openconfig-if-ip" +} + +// Interface_Subinterface_Ipv4_Unnumbered represents the /openconfig-interfaces/interfaces/interface/subinterfaces/subinterface/ipv4/unnumbered YANG schema element. +type Interface_Subinterface_Ipv4_Unnumbered struct { + Enabled *bool `path:"config/enabled" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/enabled" shadow-module:"openconfig-if-ip/openconfig-if-ip"` + InterfaceRef *Interface_Subinterface_Ipv4_Unnumbered_InterfaceRef `path:"interface-ref" module:"openconfig-if-ip"` +} + +// IsYANGGoStruct ensures that Interface_Subinterface_Ipv4_Unnumbered implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*Interface_Subinterface_Ipv4_Unnumbered) IsYANGGoStruct() {} + +// GetOrCreateInterfaceRef retrieves the value of the InterfaceRef field +// or returns the existing field if it already exists. +func (t *Interface_Subinterface_Ipv4_Unnumbered) GetOrCreateInterfaceRef() *Interface_Subinterface_Ipv4_Unnumbered_InterfaceRef { + if t.InterfaceRef != nil { + return t.InterfaceRef + } + t.InterfaceRef = &Interface_Subinterface_Ipv4_Unnumbered_InterfaceRef{} + return t.InterfaceRef +} + +// GetInterfaceRef returns the value of the InterfaceRef struct pointer +// from Interface_Subinterface_Ipv4_Unnumbered. If the receiver or the field InterfaceRef is nil, nil +// is returned such that the Get* methods can be safely chained. +func (t *Interface_Subinterface_Ipv4_Unnumbered) GetInterfaceRef() *Interface_Subinterface_Ipv4_Unnumbered_InterfaceRef { + if t != nil && t.InterfaceRef != nil { + return t.InterfaceRef + } + return nil +} + +// GetEnabled retrieves the value of the leaf Enabled from the Interface_Subinterface_Ipv4_Unnumbered +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Enabled is set, it can +// safely use t.GetEnabled() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Enabled == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv4_Unnumbered) GetEnabled() bool { + if t == nil || t.Enabled == nil { + return false + } + return *t.Enabled +} + +// SetEnabled sets the value of the leaf Enabled in the Interface_Subinterface_Ipv4_Unnumbered +// struct. +func (t *Interface_Subinterface_Ipv4_Unnumbered) SetEnabled(v bool) { + t.Enabled = &v +} + +// PopulateDefaults recursively populates unset leaf fields in the Interface_Subinterface_Ipv4_Unnumbered +// with default values as specified in the YANG schema, instantiating any nil +// container fields. +func (t *Interface_Subinterface_Ipv4_Unnumbered) PopulateDefaults() { + if t == nil { + return + } + ygot.BuildEmptyTree(t) + if t.Enabled == nil { + var v bool = false + t.Enabled = &v + } + t.InterfaceRef.PopulateDefaults() +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_Subinterface_Ipv4_Unnumbered) ΛValidate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["Interface_Subinterface_Ipv4_Unnumbered"], t, opts...); err != nil { + return err + } + return nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_Subinterface_Ipv4_Unnumbered) Validate(opts ...ygot.ValidationOption) error { + return t.ΛValidate(opts...) +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *Interface_Subinterface_Ipv4_Unnumbered) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// ΛBelongingModule returns the name of the module that defines the namespace +// of Interface_Subinterface_Ipv4_Unnumbered. +func (*Interface_Subinterface_Ipv4_Unnumbered) ΛBelongingModule() string { + return "openconfig-if-ip" +} + +// Interface_Subinterface_Ipv4_Unnumbered_InterfaceRef represents the /openconfig-interfaces/interfaces/interface/subinterfaces/subinterface/ipv4/unnumbered/interface-ref YANG schema element. +type Interface_Subinterface_Ipv4_Unnumbered_InterfaceRef struct { + Interface *string `path:"config/interface" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/interface" shadow-module:"openconfig-if-ip/openconfig-if-ip"` + Subinterface *uint32 `path:"config/subinterface" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/subinterface" shadow-module:"openconfig-if-ip/openconfig-if-ip"` +} + +// IsYANGGoStruct ensures that Interface_Subinterface_Ipv4_Unnumbered_InterfaceRef implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*Interface_Subinterface_Ipv4_Unnumbered_InterfaceRef) IsYANGGoStruct() {} + +// GetInterface retrieves the value of the leaf Interface from the Interface_Subinterface_Ipv4_Unnumbered_InterfaceRef +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Interface is set, it can +// safely use t.GetInterface() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Interface == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv4_Unnumbered_InterfaceRef) GetInterface() string { + if t == nil || t.Interface == nil { + return "" + } + return *t.Interface +} + +// GetSubinterface retrieves the value of the leaf Subinterface from the Interface_Subinterface_Ipv4_Unnumbered_InterfaceRef +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Subinterface is set, it can +// safely use t.GetSubinterface() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Subinterface == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv4_Unnumbered_InterfaceRef) GetSubinterface() uint32 { + if t == nil || t.Subinterface == nil { + return 0 + } + return *t.Subinterface +} + +// SetInterface sets the value of the leaf Interface in the Interface_Subinterface_Ipv4_Unnumbered_InterfaceRef +// struct. +func (t *Interface_Subinterface_Ipv4_Unnumbered_InterfaceRef) SetInterface(v string) { + t.Interface = &v +} + +// SetSubinterface sets the value of the leaf Subinterface in the Interface_Subinterface_Ipv4_Unnumbered_InterfaceRef +// struct. +func (t *Interface_Subinterface_Ipv4_Unnumbered_InterfaceRef) SetSubinterface(v uint32) { + t.Subinterface = &v +} + +// PopulateDefaults recursively populates unset leaf fields in the Interface_Subinterface_Ipv4_Unnumbered_InterfaceRef +// with default values as specified in the YANG schema, instantiating any nil +// container fields. +func (t *Interface_Subinterface_Ipv4_Unnumbered_InterfaceRef) PopulateDefaults() { + if t == nil { + return + } + ygot.BuildEmptyTree(t) +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_Subinterface_Ipv4_Unnumbered_InterfaceRef) ΛValidate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["Interface_Subinterface_Ipv4_Unnumbered_InterfaceRef"], t, opts...); err != nil { + return err + } + return nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_Subinterface_Ipv4_Unnumbered_InterfaceRef) Validate(opts ...ygot.ValidationOption) error { + return t.ΛValidate(opts...) +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *Interface_Subinterface_Ipv4_Unnumbered_InterfaceRef) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// ΛBelongingModule returns the name of the module that defines the namespace +// of Interface_Subinterface_Ipv4_Unnumbered_InterfaceRef. +func (*Interface_Subinterface_Ipv4_Unnumbered_InterfaceRef) ΛBelongingModule() string { + return "openconfig-if-ip" +} + +// Interface_Subinterface_Ipv6 represents the /openconfig-interfaces/interfaces/interface/subinterfaces/subinterface/ipv6 YANG schema element. +type Interface_Subinterface_Ipv6 struct { + Address map[string]*Interface_Subinterface_Ipv6_Address `path:"addresses/address" module:"openconfig-if-ip/openconfig-if-ip"` + Counters *Interface_Subinterface_Ipv6_Counters `path:"state/counters" module:"openconfig-if-ip/openconfig-if-ip"` + DhcpClient *bool `path:"config/dhcp-client" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/dhcp-client" shadow-module:"openconfig-if-ip/openconfig-if-ip"` + DupAddrDetectTransmits *uint32 `path:"config/dup-addr-detect-transmits" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/dup-addr-detect-transmits" shadow-module:"openconfig-if-ip/openconfig-if-ip"` + Enabled *bool `path:"config/enabled" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/enabled" shadow-module:"openconfig-if-ip/openconfig-if-ip"` + LearnUnsolicited E_Ipv6_LearnUnsolicited `path:"config/learn-unsolicited" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/learn-unsolicited" shadow-module:"openconfig-if-ip/openconfig-if-ip"` + Mtu *uint32 `path:"config/mtu" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/mtu" shadow-module:"openconfig-if-ip/openconfig-if-ip"` + Neighbor map[string]*Interface_Subinterface_Ipv6_Neighbor `path:"neighbors/neighbor" module:"openconfig-if-ip/openconfig-if-ip"` + RouterAdvertisement *Interface_Subinterface_Ipv6_RouterAdvertisement `path:"router-advertisement" module:"openconfig-if-ip"` + Unnumbered *Interface_Subinterface_Ipv6_Unnumbered `path:"unnumbered" module:"openconfig-if-ip"` +} + +// IsYANGGoStruct ensures that Interface_Subinterface_Ipv6 implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*Interface_Subinterface_Ipv6) IsYANGGoStruct() {} + +// NewAddress creates a new entry in the Address list of the +// Interface_Subinterface_Ipv6 struct. The keys of the list are populated from the input +// arguments. +func (t *Interface_Subinterface_Ipv6) NewAddress(Ip string) (*Interface_Subinterface_Ipv6_Address, error) { + + // Initialise the list within the receiver struct if it has not already been + // created. + if t.Address == nil { + t.Address = make(map[string]*Interface_Subinterface_Ipv6_Address) + } + + key := Ip + + // Ensure that this key has not already been used in the + // list. Keyed YANG lists do not allow duplicate keys to + // be created. + if _, ok := t.Address[key]; ok { + return nil, fmt.Errorf("duplicate key %v for list Address", key) + } + + t.Address[key] = &Interface_Subinterface_Ipv6_Address{ + Ip: &Ip, + } + + return t.Address[key], nil +} + +// RenameAddress renames an entry in the list Address within +// the Interface_Subinterface_Ipv6 struct. The entry with key oldK is renamed to newK updating +// the key within the value. +func (t *Interface_Subinterface_Ipv6) RenameAddress(oldK, newK string) error { + if _, ok := t.Address[newK]; ok { + return fmt.Errorf("key %v already exists in Address", newK) + } + + e, ok := t.Address[oldK] + if !ok { + return fmt.Errorf("key %v not found in Address", oldK) + } + e.Ip = &newK + + t.Address[newK] = e + delete(t.Address, oldK) + return nil +} + +// GetOrCreateAddressMap returns the list (map) from Interface_Subinterface_Ipv6. +// +// It initializes the field if not already initialized. +func (t *Interface_Subinterface_Ipv6) GetOrCreateAddressMap() map[string]*Interface_Subinterface_Ipv6_Address { + if t.Address == nil { + t.Address = make(map[string]*Interface_Subinterface_Ipv6_Address) + } + return t.Address +} + +// GetOrCreateAddress retrieves the value with the specified keys from +// the receiver Interface_Subinterface_Ipv6. If the entry does not exist, then it is created. +// It returns the existing or new list member. +func (t *Interface_Subinterface_Ipv6) GetOrCreateAddress(Ip string) *Interface_Subinterface_Ipv6_Address { + + key := Ip + + if v, ok := t.Address[key]; ok { + return v + } + // Panic if we receive an error, since we should have retrieved an existing + // list member. This allows chaining of GetOrCreate methods. + v, err := t.NewAddress(Ip) + if err != nil { + panic(fmt.Sprintf("GetOrCreateAddress got unexpected error: %v", err)) + } + return v +} + +// GetAddress retrieves the value with the specified key from +// the Address map field of Interface_Subinterface_Ipv6. If the receiver is nil, or +// the specified key is not present in the list, nil is returned such that Get* +// methods may be safely chained. +func (t *Interface_Subinterface_Ipv6) GetAddress(Ip string) *Interface_Subinterface_Ipv6_Address { + + if t == nil { + return nil + } + + key := Ip + + if lm, ok := t.Address[key]; ok { + return lm + } + return nil +} + +// DeleteAddress deletes the value with the specified keys from +// the receiver Interface_Subinterface_Ipv6. If there is no such element, the function +// is a no-op. +func (t *Interface_Subinterface_Ipv6) DeleteAddress(Ip string) { + key := Ip + + delete(t.Address, key) +} + +// AppendAddress appends the supplied Interface_Subinterface_Ipv6_Address struct to the +// list Address of Interface_Subinterface_Ipv6. If the key value(s) specified in +// the supplied Interface_Subinterface_Ipv6_Address already exist in the list, an error is +// returned. +func (t *Interface_Subinterface_Ipv6) AppendAddress(v *Interface_Subinterface_Ipv6_Address) error { + if v.Ip == nil { + return fmt.Errorf("invalid nil key received for Ip") + } + + key := *v.Ip + + // Initialise the list within the receiver struct if it has not already been + // created. + if t.Address == nil { + t.Address = make(map[string]*Interface_Subinterface_Ipv6_Address) + } + + if _, ok := t.Address[key]; ok { + return fmt.Errorf("duplicate key for list Address %v", key) + } + + t.Address[key] = v + return nil +} + +// NewNeighbor creates a new entry in the Neighbor list of the +// Interface_Subinterface_Ipv6 struct. The keys of the list are populated from the input +// arguments. +func (t *Interface_Subinterface_Ipv6) NewNeighbor(Ip string) (*Interface_Subinterface_Ipv6_Neighbor, error) { + + // Initialise the list within the receiver struct if it has not already been + // created. + if t.Neighbor == nil { + t.Neighbor = make(map[string]*Interface_Subinterface_Ipv6_Neighbor) + } + + key := Ip + + // Ensure that this key has not already been used in the + // list. Keyed YANG lists do not allow duplicate keys to + // be created. + if _, ok := t.Neighbor[key]; ok { + return nil, fmt.Errorf("duplicate key %v for list Neighbor", key) + } + + t.Neighbor[key] = &Interface_Subinterface_Ipv6_Neighbor{ + Ip: &Ip, + } + + return t.Neighbor[key], nil +} + +// RenameNeighbor renames an entry in the list Neighbor within +// the Interface_Subinterface_Ipv6 struct. The entry with key oldK is renamed to newK updating +// the key within the value. +func (t *Interface_Subinterface_Ipv6) RenameNeighbor(oldK, newK string) error { + if _, ok := t.Neighbor[newK]; ok { + return fmt.Errorf("key %v already exists in Neighbor", newK) + } + + e, ok := t.Neighbor[oldK] + if !ok { + return fmt.Errorf("key %v not found in Neighbor", oldK) + } + e.Ip = &newK + + t.Neighbor[newK] = e + delete(t.Neighbor, oldK) + return nil +} + +// GetOrCreateNeighborMap returns the list (map) from Interface_Subinterface_Ipv6. +// +// It initializes the field if not already initialized. +func (t *Interface_Subinterface_Ipv6) GetOrCreateNeighborMap() map[string]*Interface_Subinterface_Ipv6_Neighbor { + if t.Neighbor == nil { + t.Neighbor = make(map[string]*Interface_Subinterface_Ipv6_Neighbor) + } + return t.Neighbor +} + +// GetOrCreateNeighbor retrieves the value with the specified keys from +// the receiver Interface_Subinterface_Ipv6. If the entry does not exist, then it is created. +// It returns the existing or new list member. +func (t *Interface_Subinterface_Ipv6) GetOrCreateNeighbor(Ip string) *Interface_Subinterface_Ipv6_Neighbor { + + key := Ip + + if v, ok := t.Neighbor[key]; ok { + return v + } + // Panic if we receive an error, since we should have retrieved an existing + // list member. This allows chaining of GetOrCreate methods. + v, err := t.NewNeighbor(Ip) + if err != nil { + panic(fmt.Sprintf("GetOrCreateNeighbor got unexpected error: %v", err)) + } + return v +} + +// GetNeighbor retrieves the value with the specified key from +// the Neighbor map field of Interface_Subinterface_Ipv6. If the receiver is nil, or +// the specified key is not present in the list, nil is returned such that Get* +// methods may be safely chained. +func (t *Interface_Subinterface_Ipv6) GetNeighbor(Ip string) *Interface_Subinterface_Ipv6_Neighbor { + + if t == nil { + return nil + } + + key := Ip + + if lm, ok := t.Neighbor[key]; ok { + return lm + } + return nil +} + +// DeleteNeighbor deletes the value with the specified keys from +// the receiver Interface_Subinterface_Ipv6. If there is no such element, the function +// is a no-op. +func (t *Interface_Subinterface_Ipv6) DeleteNeighbor(Ip string) { + key := Ip + + delete(t.Neighbor, key) +} + +// AppendNeighbor appends the supplied Interface_Subinterface_Ipv6_Neighbor struct to the +// list Neighbor of Interface_Subinterface_Ipv6. If the key value(s) specified in +// the supplied Interface_Subinterface_Ipv6_Neighbor already exist in the list, an error is +// returned. +func (t *Interface_Subinterface_Ipv6) AppendNeighbor(v *Interface_Subinterface_Ipv6_Neighbor) error { + if v.Ip == nil { + return fmt.Errorf("invalid nil key received for Ip") + } + + key := *v.Ip + + // Initialise the list within the receiver struct if it has not already been + // created. + if t.Neighbor == nil { + t.Neighbor = make(map[string]*Interface_Subinterface_Ipv6_Neighbor) + } + + if _, ok := t.Neighbor[key]; ok { + return fmt.Errorf("duplicate key for list Neighbor %v", key) + } + + t.Neighbor[key] = v + return nil +} + +// GetOrCreateCounters retrieves the value of the Counters field +// or returns the existing field if it already exists. +func (t *Interface_Subinterface_Ipv6) GetOrCreateCounters() *Interface_Subinterface_Ipv6_Counters { + if t.Counters != nil { + return t.Counters + } + t.Counters = &Interface_Subinterface_Ipv6_Counters{} + return t.Counters +} + +// GetOrCreateRouterAdvertisement retrieves the value of the RouterAdvertisement field +// or returns the existing field if it already exists. +func (t *Interface_Subinterface_Ipv6) GetOrCreateRouterAdvertisement() *Interface_Subinterface_Ipv6_RouterAdvertisement { + if t.RouterAdvertisement != nil { + return t.RouterAdvertisement + } + t.RouterAdvertisement = &Interface_Subinterface_Ipv6_RouterAdvertisement{} + return t.RouterAdvertisement +} + +// GetOrCreateUnnumbered retrieves the value of the Unnumbered field +// or returns the existing field if it already exists. +func (t *Interface_Subinterface_Ipv6) GetOrCreateUnnumbered() *Interface_Subinterface_Ipv6_Unnumbered { + if t.Unnumbered != nil { + return t.Unnumbered + } + t.Unnumbered = &Interface_Subinterface_Ipv6_Unnumbered{} + return t.Unnumbered +} + +// GetCounters returns the value of the Counters struct pointer +// from Interface_Subinterface_Ipv6. If the receiver or the field Counters is nil, nil +// is returned such that the Get* methods can be safely chained. +func (t *Interface_Subinterface_Ipv6) GetCounters() *Interface_Subinterface_Ipv6_Counters { + if t != nil && t.Counters != nil { + return t.Counters + } + return nil +} + +// GetRouterAdvertisement returns the value of the RouterAdvertisement struct pointer +// from Interface_Subinterface_Ipv6. If the receiver or the field RouterAdvertisement is nil, nil +// is returned such that the Get* methods can be safely chained. +func (t *Interface_Subinterface_Ipv6) GetRouterAdvertisement() *Interface_Subinterface_Ipv6_RouterAdvertisement { + if t != nil && t.RouterAdvertisement != nil { + return t.RouterAdvertisement + } + return nil +} + +// GetUnnumbered returns the value of the Unnumbered struct pointer +// from Interface_Subinterface_Ipv6. If the receiver or the field Unnumbered is nil, nil +// is returned such that the Get* methods can be safely chained. +func (t *Interface_Subinterface_Ipv6) GetUnnumbered() *Interface_Subinterface_Ipv6_Unnumbered { + if t != nil && t.Unnumbered != nil { + return t.Unnumbered + } + return nil +} + +// GetDhcpClient retrieves the value of the leaf DhcpClient from the Interface_Subinterface_Ipv6 +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if DhcpClient is set, it can +// safely use t.GetDhcpClient() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.DhcpClient == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv6) GetDhcpClient() bool { + if t == nil || t.DhcpClient == nil { + return false + } + return *t.DhcpClient +} + +// GetDupAddrDetectTransmits retrieves the value of the leaf DupAddrDetectTransmits from the Interface_Subinterface_Ipv6 +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if DupAddrDetectTransmits is set, it can +// safely use t.GetDupAddrDetectTransmits() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.DupAddrDetectTransmits == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv6) GetDupAddrDetectTransmits() uint32 { + if t == nil || t.DupAddrDetectTransmits == nil { + return 1 + } + return *t.DupAddrDetectTransmits +} + +// GetEnabled retrieves the value of the leaf Enabled from the Interface_Subinterface_Ipv6 +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Enabled is set, it can +// safely use t.GetEnabled() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Enabled == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv6) GetEnabled() bool { + if t == nil || t.Enabled == nil { + return true + } + return *t.Enabled +} + +// GetLearnUnsolicited retrieves the value of the leaf LearnUnsolicited from the Interface_Subinterface_Ipv6 +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if LearnUnsolicited is set, it can +// safely use t.GetLearnUnsolicited() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.LearnUnsolicited == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv6) GetLearnUnsolicited() E_Ipv6_LearnUnsolicited { + if t == nil || t.LearnUnsolicited == 0 { + return Ipv6_LearnUnsolicited_NONE + } + return t.LearnUnsolicited +} + +// GetMtu retrieves the value of the leaf Mtu from the Interface_Subinterface_Ipv6 +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Mtu is set, it can +// safely use t.GetMtu() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Mtu == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv6) GetMtu() uint32 { + if t == nil || t.Mtu == nil { + return 0 + } + return *t.Mtu +} + +// SetDhcpClient sets the value of the leaf DhcpClient in the Interface_Subinterface_Ipv6 +// struct. +func (t *Interface_Subinterface_Ipv6) SetDhcpClient(v bool) { + t.DhcpClient = &v +} + +// SetDupAddrDetectTransmits sets the value of the leaf DupAddrDetectTransmits in the Interface_Subinterface_Ipv6 +// struct. +func (t *Interface_Subinterface_Ipv6) SetDupAddrDetectTransmits(v uint32) { + t.DupAddrDetectTransmits = &v +} + +// SetEnabled sets the value of the leaf Enabled in the Interface_Subinterface_Ipv6 +// struct. +func (t *Interface_Subinterface_Ipv6) SetEnabled(v bool) { + t.Enabled = &v +} + +// SetLearnUnsolicited sets the value of the leaf LearnUnsolicited in the Interface_Subinterface_Ipv6 +// struct. +func (t *Interface_Subinterface_Ipv6) SetLearnUnsolicited(v E_Ipv6_LearnUnsolicited) { + t.LearnUnsolicited = v +} + +// SetMtu sets the value of the leaf Mtu in the Interface_Subinterface_Ipv6 +// struct. +func (t *Interface_Subinterface_Ipv6) SetMtu(v uint32) { + t.Mtu = &v +} + +// PopulateDefaults recursively populates unset leaf fields in the Interface_Subinterface_Ipv6 +// with default values as specified in the YANG schema, instantiating any nil +// container fields. +func (t *Interface_Subinterface_Ipv6) PopulateDefaults() { + if t == nil { + return + } + ygot.BuildEmptyTree(t) + if t.DhcpClient == nil { + var v bool = false + t.DhcpClient = &v + } + if t.DupAddrDetectTransmits == nil { + var v uint32 = 1 + t.DupAddrDetectTransmits = &v + } + if t.Enabled == nil { + var v bool = true + t.Enabled = &v + } + if t.LearnUnsolicited == 0 { + t.LearnUnsolicited = Ipv6_LearnUnsolicited_NONE + } + t.Counters.PopulateDefaults() + t.RouterAdvertisement.PopulateDefaults() + t.Unnumbered.PopulateDefaults() + for _, e := range t.Address { + e.PopulateDefaults() + } + for _, e := range t.Neighbor { + e.PopulateDefaults() + } +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_Subinterface_Ipv6) ΛValidate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["Interface_Subinterface_Ipv6"], t, opts...); err != nil { + return err + } + return nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_Subinterface_Ipv6) Validate(opts ...ygot.ValidationOption) error { + return t.ΛValidate(opts...) +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *Interface_Subinterface_Ipv6) ΛEnumTypeMap() map[string][]reflect.Type { return ΛEnumTypes } + +// ΛBelongingModule returns the name of the module that defines the namespace +// of Interface_Subinterface_Ipv6. +func (*Interface_Subinterface_Ipv6) ΛBelongingModule() string { + return "openconfig-if-ip" +} + +// Interface_Subinterface_Ipv6_Address represents the /openconfig-interfaces/interfaces/interface/subinterfaces/subinterface/ipv6/addresses/address YANG schema element. +type Interface_Subinterface_Ipv6_Address struct { + Ip *string `path:"config/ip|ip" module:"openconfig-if-ip/openconfig-if-ip|openconfig-if-ip" shadow-path:"state/ip|ip" shadow-module:"openconfig-if-ip/openconfig-if-ip|openconfig-if-ip"` + Origin E_IfIp_IpAddressOrigin `path:"state/origin" module:"openconfig-if-ip/openconfig-if-ip"` + PrefixLength *uint8 `path:"config/prefix-length" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/prefix-length" shadow-module:"openconfig-if-ip/openconfig-if-ip"` + Status E_Address_Status `path:"state/status" module:"openconfig-if-ip/openconfig-if-ip"` + Type E_InetTypes_Ipv6AddressType `path:"config/type" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/type" shadow-module:"openconfig-if-ip/openconfig-if-ip"` + VrrpGroup map[uint8]*Interface_Subinterface_Ipv6_Address_VrrpGroup `path:"vrrp/vrrp-group" module:"openconfig-if-ip/openconfig-if-ip"` +} + +// IsYANGGoStruct ensures that Interface_Subinterface_Ipv6_Address implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*Interface_Subinterface_Ipv6_Address) IsYANGGoStruct() {} + +// NewVrrpGroup creates a new entry in the VrrpGroup list of the +// Interface_Subinterface_Ipv6_Address struct. The keys of the list are populated from the input +// arguments. +func (t *Interface_Subinterface_Ipv6_Address) NewVrrpGroup(VirtualRouterId uint8) (*Interface_Subinterface_Ipv6_Address_VrrpGroup, error) { + + // Initialise the list within the receiver struct if it has not already been + // created. + if t.VrrpGroup == nil { + t.VrrpGroup = make(map[uint8]*Interface_Subinterface_Ipv6_Address_VrrpGroup) + } + + key := VirtualRouterId + + // Ensure that this key has not already been used in the + // list. Keyed YANG lists do not allow duplicate keys to + // be created. + if _, ok := t.VrrpGroup[key]; ok { + return nil, fmt.Errorf("duplicate key %v for list VrrpGroup", key) + } + + t.VrrpGroup[key] = &Interface_Subinterface_Ipv6_Address_VrrpGroup{ + VirtualRouterId: &VirtualRouterId, + } + + return t.VrrpGroup[key], nil +} + +// RenameVrrpGroup renames an entry in the list VrrpGroup within +// the Interface_Subinterface_Ipv6_Address struct. The entry with key oldK is renamed to newK updating +// the key within the value. +func (t *Interface_Subinterface_Ipv6_Address) RenameVrrpGroup(oldK, newK uint8) error { + if _, ok := t.VrrpGroup[newK]; ok { + return fmt.Errorf("key %v already exists in VrrpGroup", newK) + } + + e, ok := t.VrrpGroup[oldK] + if !ok { + return fmt.Errorf("key %v not found in VrrpGroup", oldK) + } + e.VirtualRouterId = &newK + + t.VrrpGroup[newK] = e + delete(t.VrrpGroup, oldK) + return nil +} + +// GetOrCreateVrrpGroupMap returns the list (map) from Interface_Subinterface_Ipv6_Address. +// +// It initializes the field if not already initialized. +func (t *Interface_Subinterface_Ipv6_Address) GetOrCreateVrrpGroupMap() map[uint8]*Interface_Subinterface_Ipv6_Address_VrrpGroup { + if t.VrrpGroup == nil { + t.VrrpGroup = make(map[uint8]*Interface_Subinterface_Ipv6_Address_VrrpGroup) + } + return t.VrrpGroup +} + +// GetOrCreateVrrpGroup retrieves the value with the specified keys from +// the receiver Interface_Subinterface_Ipv6_Address. If the entry does not exist, then it is created. +// It returns the existing or new list member. +func (t *Interface_Subinterface_Ipv6_Address) GetOrCreateVrrpGroup(VirtualRouterId uint8) *Interface_Subinterface_Ipv6_Address_VrrpGroup { + + key := VirtualRouterId + + if v, ok := t.VrrpGroup[key]; ok { + return v + } + // Panic if we receive an error, since we should have retrieved an existing + // list member. This allows chaining of GetOrCreate methods. + v, err := t.NewVrrpGroup(VirtualRouterId) + if err != nil { + panic(fmt.Sprintf("GetOrCreateVrrpGroup got unexpected error: %v", err)) + } + return v +} + +// GetVrrpGroup retrieves the value with the specified key from +// the VrrpGroup map field of Interface_Subinterface_Ipv6_Address. If the receiver is nil, or +// the specified key is not present in the list, nil is returned such that Get* +// methods may be safely chained. +func (t *Interface_Subinterface_Ipv6_Address) GetVrrpGroup(VirtualRouterId uint8) *Interface_Subinterface_Ipv6_Address_VrrpGroup { + + if t == nil { + return nil + } + + key := VirtualRouterId + + if lm, ok := t.VrrpGroup[key]; ok { + return lm + } + return nil +} + +// DeleteVrrpGroup deletes the value with the specified keys from +// the receiver Interface_Subinterface_Ipv6_Address. If there is no such element, the function +// is a no-op. +func (t *Interface_Subinterface_Ipv6_Address) DeleteVrrpGroup(VirtualRouterId uint8) { + key := VirtualRouterId + + delete(t.VrrpGroup, key) +} + +// AppendVrrpGroup appends the supplied Interface_Subinterface_Ipv6_Address_VrrpGroup struct to the +// list VrrpGroup of Interface_Subinterface_Ipv6_Address. If the key value(s) specified in +// the supplied Interface_Subinterface_Ipv6_Address_VrrpGroup already exist in the list, an error is +// returned. +func (t *Interface_Subinterface_Ipv6_Address) AppendVrrpGroup(v *Interface_Subinterface_Ipv6_Address_VrrpGroup) error { + if v.VirtualRouterId == nil { + return fmt.Errorf("invalid nil key received for VirtualRouterId") + } + + key := *v.VirtualRouterId + + // Initialise the list within the receiver struct if it has not already been + // created. + if t.VrrpGroup == nil { + t.VrrpGroup = make(map[uint8]*Interface_Subinterface_Ipv6_Address_VrrpGroup) + } + + if _, ok := t.VrrpGroup[key]; ok { + return fmt.Errorf("duplicate key for list VrrpGroup %v", key) + } + + t.VrrpGroup[key] = v + return nil +} + +// GetIp retrieves the value of the leaf Ip from the Interface_Subinterface_Ipv6_Address +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Ip is set, it can +// safely use t.GetIp() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Ip == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv6_Address) GetIp() string { + if t == nil || t.Ip == nil { + return "" + } + return *t.Ip +} + +// GetOrigin retrieves the value of the leaf Origin from the Interface_Subinterface_Ipv6_Address +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Origin is set, it can +// safely use t.GetOrigin() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Origin == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv6_Address) GetOrigin() E_IfIp_IpAddressOrigin { + if t == nil || t.Origin == 0 { + return 0 + } + return t.Origin +} + +// GetPrefixLength retrieves the value of the leaf PrefixLength from the Interface_Subinterface_Ipv6_Address +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if PrefixLength is set, it can +// safely use t.GetPrefixLength() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.PrefixLength == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv6_Address) GetPrefixLength() uint8 { + if t == nil || t.PrefixLength == nil { + return 0 + } + return *t.PrefixLength +} + +// GetStatus retrieves the value of the leaf Status from the Interface_Subinterface_Ipv6_Address +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Status is set, it can +// safely use t.GetStatus() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Status == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv6_Address) GetStatus() E_Address_Status { + if t == nil || t.Status == 0 { + return 0 + } + return t.Status +} + +// GetType retrieves the value of the leaf Type from the Interface_Subinterface_Ipv6_Address +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Type is set, it can +// safely use t.GetType() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Type == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv6_Address) GetType() E_InetTypes_Ipv6AddressType { + if t == nil || t.Type == 0 { + return InetTypes_Ipv6AddressType_GLOBAL_UNICAST + } + return t.Type +} + +// SetIp sets the value of the leaf Ip in the Interface_Subinterface_Ipv6_Address +// struct. +func (t *Interface_Subinterface_Ipv6_Address) SetIp(v string) { + t.Ip = &v +} + +// SetOrigin sets the value of the leaf Origin in the Interface_Subinterface_Ipv6_Address +// struct. +func (t *Interface_Subinterface_Ipv6_Address) SetOrigin(v E_IfIp_IpAddressOrigin) { + t.Origin = v +} + +// SetPrefixLength sets the value of the leaf PrefixLength in the Interface_Subinterface_Ipv6_Address +// struct. +func (t *Interface_Subinterface_Ipv6_Address) SetPrefixLength(v uint8) { + t.PrefixLength = &v +} + +// SetStatus sets the value of the leaf Status in the Interface_Subinterface_Ipv6_Address +// struct. +func (t *Interface_Subinterface_Ipv6_Address) SetStatus(v E_Address_Status) { + t.Status = v +} + +// SetType sets the value of the leaf Type in the Interface_Subinterface_Ipv6_Address +// struct. +func (t *Interface_Subinterface_Ipv6_Address) SetType(v E_InetTypes_Ipv6AddressType) { + t.Type = v +} + +// PopulateDefaults recursively populates unset leaf fields in the Interface_Subinterface_Ipv6_Address +// with default values as specified in the YANG schema, instantiating any nil +// container fields. +func (t *Interface_Subinterface_Ipv6_Address) PopulateDefaults() { + if t == nil { + return + } + ygot.BuildEmptyTree(t) + if t.Type == 0 { + t.Type = InetTypes_Ipv6AddressType_GLOBAL_UNICAST + } + for _, e := range t.VrrpGroup { + e.PopulateDefaults() + } +} + +// ΛListKeyMap returns the keys of the Interface_Subinterface_Ipv6_Address struct, which is a YANG list entry. +func (t *Interface_Subinterface_Ipv6_Address) ΛListKeyMap() (map[string]interface{}, error) { + if t.Ip == nil { + return nil, fmt.Errorf("nil value for key Ip") + } + + return map[string]interface{}{ + "ip": *t.Ip, + }, nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_Subinterface_Ipv6_Address) ΛValidate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["Interface_Subinterface_Ipv6_Address"], t, opts...); err != nil { + return err + } + return nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_Subinterface_Ipv6_Address) Validate(opts ...ygot.ValidationOption) error { + return t.ΛValidate(opts...) +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *Interface_Subinterface_Ipv6_Address) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// ΛBelongingModule returns the name of the module that defines the namespace +// of Interface_Subinterface_Ipv6_Address. +func (*Interface_Subinterface_Ipv6_Address) ΛBelongingModule() string { + return "openconfig-if-ip" +} + +// Interface_Subinterface_Ipv6_Address_VrrpGroup represents the /openconfig-interfaces/interfaces/interface/subinterfaces/subinterface/ipv6/addresses/address/vrrp/vrrp-group YANG schema element. +type Interface_Subinterface_Ipv6_Address_VrrpGroup struct { + AcceptMode *bool `path:"config/accept-mode" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/accept-mode" shadow-module:"openconfig-if-ip/openconfig-if-ip"` + AdvertisementInterval *uint16 `path:"config/advertisement-interval" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/advertisement-interval" shadow-module:"openconfig-if-ip/openconfig-if-ip"` + CurrentPriority *uint8 `path:"state/current-priority" module:"openconfig-if-ip/openconfig-if-ip"` + InterfaceTracking *Interface_Subinterface_Ipv6_Address_VrrpGroup_InterfaceTracking `path:"interface-tracking" module:"openconfig-if-ip"` + Preempt *bool `path:"config/preempt" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/preempt" shadow-module:"openconfig-if-ip/openconfig-if-ip"` + PreemptDelay *uint16 `path:"config/preempt-delay" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/preempt-delay" shadow-module:"openconfig-if-ip/openconfig-if-ip"` + Priority *uint8 `path:"config/priority" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/priority" shadow-module:"openconfig-if-ip/openconfig-if-ip"` + VirtualAddress []string `path:"config/virtual-address" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/virtual-address" shadow-module:"openconfig-if-ip/openconfig-if-ip"` + VirtualLinkLocal *string `path:"config/virtual-link-local" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/virtual-link-local" shadow-module:"openconfig-if-ip/openconfig-if-ip"` + VirtualRouterId *uint8 `path:"config/virtual-router-id|virtual-router-id" module:"openconfig-if-ip/openconfig-if-ip|openconfig-if-ip" shadow-path:"state/virtual-router-id|virtual-router-id" shadow-module:"openconfig-if-ip/openconfig-if-ip|openconfig-if-ip"` +} + +// IsYANGGoStruct ensures that Interface_Subinterface_Ipv6_Address_VrrpGroup implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*Interface_Subinterface_Ipv6_Address_VrrpGroup) IsYANGGoStruct() {} + +// GetOrCreateInterfaceTracking retrieves the value of the InterfaceTracking field +// or returns the existing field if it already exists. +func (t *Interface_Subinterface_Ipv6_Address_VrrpGroup) GetOrCreateInterfaceTracking() *Interface_Subinterface_Ipv6_Address_VrrpGroup_InterfaceTracking { + if t.InterfaceTracking != nil { + return t.InterfaceTracking + } + t.InterfaceTracking = &Interface_Subinterface_Ipv6_Address_VrrpGroup_InterfaceTracking{} + return t.InterfaceTracking +} + +// GetInterfaceTracking returns the value of the InterfaceTracking struct pointer +// from Interface_Subinterface_Ipv6_Address_VrrpGroup. If the receiver or the field InterfaceTracking is nil, nil +// is returned such that the Get* methods can be safely chained. +func (t *Interface_Subinterface_Ipv6_Address_VrrpGroup) GetInterfaceTracking() *Interface_Subinterface_Ipv6_Address_VrrpGroup_InterfaceTracking { + if t != nil && t.InterfaceTracking != nil { + return t.InterfaceTracking + } + return nil +} + +// GetAcceptMode retrieves the value of the leaf AcceptMode from the Interface_Subinterface_Ipv6_Address_VrrpGroup +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if AcceptMode is set, it can +// safely use t.GetAcceptMode() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.AcceptMode == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv6_Address_VrrpGroup) GetAcceptMode() bool { + if t == nil || t.AcceptMode == nil { + return false + } + return *t.AcceptMode +} + +// GetAdvertisementInterval retrieves the value of the leaf AdvertisementInterval from the Interface_Subinterface_Ipv6_Address_VrrpGroup +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if AdvertisementInterval is set, it can +// safely use t.GetAdvertisementInterval() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.AdvertisementInterval == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv6_Address_VrrpGroup) GetAdvertisementInterval() uint16 { + if t == nil || t.AdvertisementInterval == nil { + return 100 + } + return *t.AdvertisementInterval +} + +// GetCurrentPriority retrieves the value of the leaf CurrentPriority from the Interface_Subinterface_Ipv6_Address_VrrpGroup +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if CurrentPriority is set, it can +// safely use t.GetCurrentPriority() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.CurrentPriority == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv6_Address_VrrpGroup) GetCurrentPriority() uint8 { + if t == nil || t.CurrentPriority == nil { + return 0 + } + return *t.CurrentPriority +} + +// GetPreempt retrieves the value of the leaf Preempt from the Interface_Subinterface_Ipv6_Address_VrrpGroup +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Preempt is set, it can +// safely use t.GetPreempt() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Preempt == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv6_Address_VrrpGroup) GetPreempt() bool { + if t == nil || t.Preempt == nil { + return true + } + return *t.Preempt +} + +// GetPreemptDelay retrieves the value of the leaf PreemptDelay from the Interface_Subinterface_Ipv6_Address_VrrpGroup +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if PreemptDelay is set, it can +// safely use t.GetPreemptDelay() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.PreemptDelay == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv6_Address_VrrpGroup) GetPreemptDelay() uint16 { + if t == nil || t.PreemptDelay == nil { + return 0 + } + return *t.PreemptDelay +} + +// GetPriority retrieves the value of the leaf Priority from the Interface_Subinterface_Ipv6_Address_VrrpGroup +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Priority is set, it can +// safely use t.GetPriority() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Priority == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv6_Address_VrrpGroup) GetPriority() uint8 { + if t == nil || t.Priority == nil { + return 100 + } + return *t.Priority +} + +// GetVirtualAddress retrieves the value of the leaf VirtualAddress from the Interface_Subinterface_Ipv6_Address_VrrpGroup +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if VirtualAddress is set, it can +// safely use t.GetVirtualAddress() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.VirtualAddress == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv6_Address_VrrpGroup) GetVirtualAddress() []string { + if t == nil || t.VirtualAddress == nil { + return nil + } + return t.VirtualAddress +} + +// GetVirtualLinkLocal retrieves the value of the leaf VirtualLinkLocal from the Interface_Subinterface_Ipv6_Address_VrrpGroup +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if VirtualLinkLocal is set, it can +// safely use t.GetVirtualLinkLocal() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.VirtualLinkLocal == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv6_Address_VrrpGroup) GetVirtualLinkLocal() string { + if t == nil || t.VirtualLinkLocal == nil { + return "" + } + return *t.VirtualLinkLocal +} + +// GetVirtualRouterId retrieves the value of the leaf VirtualRouterId from the Interface_Subinterface_Ipv6_Address_VrrpGroup +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if VirtualRouterId is set, it can +// safely use t.GetVirtualRouterId() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.VirtualRouterId == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv6_Address_VrrpGroup) GetVirtualRouterId() uint8 { + if t == nil || t.VirtualRouterId == nil { + return 0 + } + return *t.VirtualRouterId +} + +// SetAcceptMode sets the value of the leaf AcceptMode in the Interface_Subinterface_Ipv6_Address_VrrpGroup +// struct. +func (t *Interface_Subinterface_Ipv6_Address_VrrpGroup) SetAcceptMode(v bool) { + t.AcceptMode = &v +} + +// SetAdvertisementInterval sets the value of the leaf AdvertisementInterval in the Interface_Subinterface_Ipv6_Address_VrrpGroup +// struct. +func (t *Interface_Subinterface_Ipv6_Address_VrrpGroup) SetAdvertisementInterval(v uint16) { + t.AdvertisementInterval = &v +} + +// SetCurrentPriority sets the value of the leaf CurrentPriority in the Interface_Subinterface_Ipv6_Address_VrrpGroup +// struct. +func (t *Interface_Subinterface_Ipv6_Address_VrrpGroup) SetCurrentPriority(v uint8) { + t.CurrentPriority = &v +} + +// SetPreempt sets the value of the leaf Preempt in the Interface_Subinterface_Ipv6_Address_VrrpGroup +// struct. +func (t *Interface_Subinterface_Ipv6_Address_VrrpGroup) SetPreempt(v bool) { + t.Preempt = &v +} + +// SetPreemptDelay sets the value of the leaf PreemptDelay in the Interface_Subinterface_Ipv6_Address_VrrpGroup +// struct. +func (t *Interface_Subinterface_Ipv6_Address_VrrpGroup) SetPreemptDelay(v uint16) { + t.PreemptDelay = &v +} + +// SetPriority sets the value of the leaf Priority in the Interface_Subinterface_Ipv6_Address_VrrpGroup +// struct. +func (t *Interface_Subinterface_Ipv6_Address_VrrpGroup) SetPriority(v uint8) { + t.Priority = &v +} + +// SetVirtualAddress sets the value of the leaf VirtualAddress in the Interface_Subinterface_Ipv6_Address_VrrpGroup +// struct. +func (t *Interface_Subinterface_Ipv6_Address_VrrpGroup) SetVirtualAddress(v []string) { + t.VirtualAddress = v +} + +// SetVirtualLinkLocal sets the value of the leaf VirtualLinkLocal in the Interface_Subinterface_Ipv6_Address_VrrpGroup +// struct. +func (t *Interface_Subinterface_Ipv6_Address_VrrpGroup) SetVirtualLinkLocal(v string) { + t.VirtualLinkLocal = &v +} + +// SetVirtualRouterId sets the value of the leaf VirtualRouterId in the Interface_Subinterface_Ipv6_Address_VrrpGroup +// struct. +func (t *Interface_Subinterface_Ipv6_Address_VrrpGroup) SetVirtualRouterId(v uint8) { + t.VirtualRouterId = &v +} + +// PopulateDefaults recursively populates unset leaf fields in the Interface_Subinterface_Ipv6_Address_VrrpGroup +// with default values as specified in the YANG schema, instantiating any nil +// container fields. +func (t *Interface_Subinterface_Ipv6_Address_VrrpGroup) PopulateDefaults() { + if t == nil { + return + } + ygot.BuildEmptyTree(t) + if t.AcceptMode == nil { + var v bool = false + t.AcceptMode = &v + } + if t.AdvertisementInterval == nil { + var v uint16 = 100 + t.AdvertisementInterval = &v + } + if t.Preempt == nil { + var v bool = true + t.Preempt = &v + } + if t.PreemptDelay == nil { + var v uint16 = 0 + t.PreemptDelay = &v + } + if t.Priority == nil { + var v uint8 = 100 + t.Priority = &v + } + t.InterfaceTracking.PopulateDefaults() +} + +// ΛListKeyMap returns the keys of the Interface_Subinterface_Ipv6_Address_VrrpGroup struct, which is a YANG list entry. +func (t *Interface_Subinterface_Ipv6_Address_VrrpGroup) ΛListKeyMap() (map[string]interface{}, error) { + if t.VirtualRouterId == nil { + return nil, fmt.Errorf("nil value for key VirtualRouterId") + } + + return map[string]interface{}{ + "virtual-router-id": *t.VirtualRouterId, + }, nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_Subinterface_Ipv6_Address_VrrpGroup) ΛValidate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["Interface_Subinterface_Ipv6_Address_VrrpGroup"], t, opts...); err != nil { + return err + } + return nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_Subinterface_Ipv6_Address_VrrpGroup) Validate(opts ...ygot.ValidationOption) error { + return t.ΛValidate(opts...) +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *Interface_Subinterface_Ipv6_Address_VrrpGroup) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// ΛBelongingModule returns the name of the module that defines the namespace +// of Interface_Subinterface_Ipv6_Address_VrrpGroup. +func (*Interface_Subinterface_Ipv6_Address_VrrpGroup) ΛBelongingModule() string { + return "openconfig-if-ip" +} + +// Interface_Subinterface_Ipv6_Address_VrrpGroup_InterfaceTracking represents the /openconfig-interfaces/interfaces/interface/subinterfaces/subinterface/ipv6/addresses/address/vrrp/vrrp-group/interface-tracking YANG schema element. +type Interface_Subinterface_Ipv6_Address_VrrpGroup_InterfaceTracking struct { + PriorityDecrement *uint8 `path:"config/priority-decrement" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/priority-decrement" shadow-module:"openconfig-if-ip/openconfig-if-ip"` + TrackInterface []string `path:"config/track-interface" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/track-interface" shadow-module:"openconfig-if-ip/openconfig-if-ip"` +} + +// IsYANGGoStruct ensures that Interface_Subinterface_Ipv6_Address_VrrpGroup_InterfaceTracking implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*Interface_Subinterface_Ipv6_Address_VrrpGroup_InterfaceTracking) IsYANGGoStruct() {} + +// GetPriorityDecrement retrieves the value of the leaf PriorityDecrement from the Interface_Subinterface_Ipv6_Address_VrrpGroup_InterfaceTracking +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if PriorityDecrement is set, it can +// safely use t.GetPriorityDecrement() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.PriorityDecrement == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv6_Address_VrrpGroup_InterfaceTracking) GetPriorityDecrement() uint8 { + if t == nil || t.PriorityDecrement == nil { + return 0 + } + return *t.PriorityDecrement +} + +// GetTrackInterface retrieves the value of the leaf TrackInterface from the Interface_Subinterface_Ipv6_Address_VrrpGroup_InterfaceTracking +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if TrackInterface is set, it can +// safely use t.GetTrackInterface() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.TrackInterface == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv6_Address_VrrpGroup_InterfaceTracking) GetTrackInterface() []string { + if t == nil || t.TrackInterface == nil { + return nil + } + return t.TrackInterface +} + +// SetPriorityDecrement sets the value of the leaf PriorityDecrement in the Interface_Subinterface_Ipv6_Address_VrrpGroup_InterfaceTracking +// struct. +func (t *Interface_Subinterface_Ipv6_Address_VrrpGroup_InterfaceTracking) SetPriorityDecrement(v uint8) { + t.PriorityDecrement = &v +} + +// SetTrackInterface sets the value of the leaf TrackInterface in the Interface_Subinterface_Ipv6_Address_VrrpGroup_InterfaceTracking +// struct. +func (t *Interface_Subinterface_Ipv6_Address_VrrpGroup_InterfaceTracking) SetTrackInterface(v []string) { + t.TrackInterface = v +} + +// PopulateDefaults recursively populates unset leaf fields in the Interface_Subinterface_Ipv6_Address_VrrpGroup_InterfaceTracking +// with default values as specified in the YANG schema, instantiating any nil +// container fields. +func (t *Interface_Subinterface_Ipv6_Address_VrrpGroup_InterfaceTracking) PopulateDefaults() { + if t == nil { + return + } + ygot.BuildEmptyTree(t) + if t.PriorityDecrement == nil { + var v uint8 = 0 + t.PriorityDecrement = &v + } +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_Subinterface_Ipv6_Address_VrrpGroup_InterfaceTracking) ΛValidate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["Interface_Subinterface_Ipv6_Address_VrrpGroup_InterfaceTracking"], t, opts...); err != nil { + return err + } + return nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_Subinterface_Ipv6_Address_VrrpGroup_InterfaceTracking) Validate(opts ...ygot.ValidationOption) error { + return t.ΛValidate(opts...) +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *Interface_Subinterface_Ipv6_Address_VrrpGroup_InterfaceTracking) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// ΛBelongingModule returns the name of the module that defines the namespace +// of Interface_Subinterface_Ipv6_Address_VrrpGroup_InterfaceTracking. +func (*Interface_Subinterface_Ipv6_Address_VrrpGroup_InterfaceTracking) ΛBelongingModule() string { + return "openconfig-if-ip" +} + +// Interface_Subinterface_Ipv6_Counters represents the /openconfig-interfaces/interfaces/interface/subinterfaces/subinterface/ipv6/state/counters YANG schema element. +type Interface_Subinterface_Ipv6_Counters struct { + InDiscardedPkts *uint64 `path:"in-discarded-pkts" module:"openconfig-if-ip"` + InErrorPkts *uint64 `path:"in-error-pkts" module:"openconfig-if-ip"` + InForwardedOctets *uint64 `path:"in-forwarded-octets" module:"openconfig-if-ip"` + InForwardedPkts *uint64 `path:"in-forwarded-pkts" module:"openconfig-if-ip"` + InMulticastOctets *uint64 `path:"in-multicast-octets" module:"openconfig-if-ip"` + InMulticastPkts *uint64 `path:"in-multicast-pkts" module:"openconfig-if-ip"` + InOctets *uint64 `path:"in-octets" module:"openconfig-if-ip"` + InPkts *uint64 `path:"in-pkts" module:"openconfig-if-ip"` + OutDiscardedPkts *uint64 `path:"out-discarded-pkts" module:"openconfig-if-ip"` + OutErrorPkts *uint64 `path:"out-error-pkts" module:"openconfig-if-ip"` + OutForwardedOctets *uint64 `path:"out-forwarded-octets" module:"openconfig-if-ip"` + OutForwardedPkts *uint64 `path:"out-forwarded-pkts" module:"openconfig-if-ip"` + OutMulticastOctets *uint64 `path:"out-multicast-octets" module:"openconfig-if-ip"` + OutMulticastPkts *uint64 `path:"out-multicast-pkts" module:"openconfig-if-ip"` + OutOctets *uint64 `path:"out-octets" module:"openconfig-if-ip"` + OutPkts *uint64 `path:"out-pkts" module:"openconfig-if-ip"` +} + +// IsYANGGoStruct ensures that Interface_Subinterface_Ipv6_Counters implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*Interface_Subinterface_Ipv6_Counters) IsYANGGoStruct() {} + +// GetInDiscardedPkts retrieves the value of the leaf InDiscardedPkts from the Interface_Subinterface_Ipv6_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if InDiscardedPkts is set, it can +// safely use t.GetInDiscardedPkts() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.InDiscardedPkts == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv6_Counters) GetInDiscardedPkts() uint64 { + if t == nil || t.InDiscardedPkts == nil { + return 0 + } + return *t.InDiscardedPkts +} + +// GetInErrorPkts retrieves the value of the leaf InErrorPkts from the Interface_Subinterface_Ipv6_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if InErrorPkts is set, it can +// safely use t.GetInErrorPkts() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.InErrorPkts == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv6_Counters) GetInErrorPkts() uint64 { + if t == nil || t.InErrorPkts == nil { + return 0 + } + return *t.InErrorPkts +} + +// GetInForwardedOctets retrieves the value of the leaf InForwardedOctets from the Interface_Subinterface_Ipv6_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if InForwardedOctets is set, it can +// safely use t.GetInForwardedOctets() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.InForwardedOctets == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv6_Counters) GetInForwardedOctets() uint64 { + if t == nil || t.InForwardedOctets == nil { + return 0 + } + return *t.InForwardedOctets +} + +// GetInForwardedPkts retrieves the value of the leaf InForwardedPkts from the Interface_Subinterface_Ipv6_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if InForwardedPkts is set, it can +// safely use t.GetInForwardedPkts() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.InForwardedPkts == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv6_Counters) GetInForwardedPkts() uint64 { + if t == nil || t.InForwardedPkts == nil { + return 0 + } + return *t.InForwardedPkts +} + +// GetInMulticastOctets retrieves the value of the leaf InMulticastOctets from the Interface_Subinterface_Ipv6_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if InMulticastOctets is set, it can +// safely use t.GetInMulticastOctets() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.InMulticastOctets == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv6_Counters) GetInMulticastOctets() uint64 { + if t == nil || t.InMulticastOctets == nil { + return 0 + } + return *t.InMulticastOctets +} + +// GetInMulticastPkts retrieves the value of the leaf InMulticastPkts from the Interface_Subinterface_Ipv6_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if InMulticastPkts is set, it can +// safely use t.GetInMulticastPkts() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.InMulticastPkts == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv6_Counters) GetInMulticastPkts() uint64 { + if t == nil || t.InMulticastPkts == nil { + return 0 + } + return *t.InMulticastPkts +} + +// GetInOctets retrieves the value of the leaf InOctets from the Interface_Subinterface_Ipv6_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if InOctets is set, it can +// safely use t.GetInOctets() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.InOctets == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv6_Counters) GetInOctets() uint64 { + if t == nil || t.InOctets == nil { + return 0 + } + return *t.InOctets +} + +// GetInPkts retrieves the value of the leaf InPkts from the Interface_Subinterface_Ipv6_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if InPkts is set, it can +// safely use t.GetInPkts() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.InPkts == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv6_Counters) GetInPkts() uint64 { + if t == nil || t.InPkts == nil { + return 0 + } + return *t.InPkts +} + +// GetOutDiscardedPkts retrieves the value of the leaf OutDiscardedPkts from the Interface_Subinterface_Ipv6_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if OutDiscardedPkts is set, it can +// safely use t.GetOutDiscardedPkts() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.OutDiscardedPkts == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv6_Counters) GetOutDiscardedPkts() uint64 { + if t == nil || t.OutDiscardedPkts == nil { + return 0 + } + return *t.OutDiscardedPkts +} + +// GetOutErrorPkts retrieves the value of the leaf OutErrorPkts from the Interface_Subinterface_Ipv6_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if OutErrorPkts is set, it can +// safely use t.GetOutErrorPkts() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.OutErrorPkts == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv6_Counters) GetOutErrorPkts() uint64 { + if t == nil || t.OutErrorPkts == nil { + return 0 + } + return *t.OutErrorPkts +} + +// GetOutForwardedOctets retrieves the value of the leaf OutForwardedOctets from the Interface_Subinterface_Ipv6_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if OutForwardedOctets is set, it can +// safely use t.GetOutForwardedOctets() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.OutForwardedOctets == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv6_Counters) GetOutForwardedOctets() uint64 { + if t == nil || t.OutForwardedOctets == nil { + return 0 + } + return *t.OutForwardedOctets +} + +// GetOutForwardedPkts retrieves the value of the leaf OutForwardedPkts from the Interface_Subinterface_Ipv6_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if OutForwardedPkts is set, it can +// safely use t.GetOutForwardedPkts() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.OutForwardedPkts == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv6_Counters) GetOutForwardedPkts() uint64 { + if t == nil || t.OutForwardedPkts == nil { + return 0 + } + return *t.OutForwardedPkts +} + +// GetOutMulticastOctets retrieves the value of the leaf OutMulticastOctets from the Interface_Subinterface_Ipv6_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if OutMulticastOctets is set, it can +// safely use t.GetOutMulticastOctets() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.OutMulticastOctets == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv6_Counters) GetOutMulticastOctets() uint64 { + if t == nil || t.OutMulticastOctets == nil { + return 0 + } + return *t.OutMulticastOctets +} + +// GetOutMulticastPkts retrieves the value of the leaf OutMulticastPkts from the Interface_Subinterface_Ipv6_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if OutMulticastPkts is set, it can +// safely use t.GetOutMulticastPkts() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.OutMulticastPkts == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv6_Counters) GetOutMulticastPkts() uint64 { + if t == nil || t.OutMulticastPkts == nil { + return 0 + } + return *t.OutMulticastPkts +} + +// GetOutOctets retrieves the value of the leaf OutOctets from the Interface_Subinterface_Ipv6_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if OutOctets is set, it can +// safely use t.GetOutOctets() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.OutOctets == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv6_Counters) GetOutOctets() uint64 { + if t == nil || t.OutOctets == nil { + return 0 + } + return *t.OutOctets +} + +// GetOutPkts retrieves the value of the leaf OutPkts from the Interface_Subinterface_Ipv6_Counters +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if OutPkts is set, it can +// safely use t.GetOutPkts() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.OutPkts == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv6_Counters) GetOutPkts() uint64 { + if t == nil || t.OutPkts == nil { + return 0 + } + return *t.OutPkts +} + +// SetInDiscardedPkts sets the value of the leaf InDiscardedPkts in the Interface_Subinterface_Ipv6_Counters +// struct. +func (t *Interface_Subinterface_Ipv6_Counters) SetInDiscardedPkts(v uint64) { + t.InDiscardedPkts = &v +} + +// SetInErrorPkts sets the value of the leaf InErrorPkts in the Interface_Subinterface_Ipv6_Counters +// struct. +func (t *Interface_Subinterface_Ipv6_Counters) SetInErrorPkts(v uint64) { + t.InErrorPkts = &v +} + +// SetInForwardedOctets sets the value of the leaf InForwardedOctets in the Interface_Subinterface_Ipv6_Counters +// struct. +func (t *Interface_Subinterface_Ipv6_Counters) SetInForwardedOctets(v uint64) { + t.InForwardedOctets = &v +} + +// SetInForwardedPkts sets the value of the leaf InForwardedPkts in the Interface_Subinterface_Ipv6_Counters +// struct. +func (t *Interface_Subinterface_Ipv6_Counters) SetInForwardedPkts(v uint64) { + t.InForwardedPkts = &v +} + +// SetInMulticastOctets sets the value of the leaf InMulticastOctets in the Interface_Subinterface_Ipv6_Counters +// struct. +func (t *Interface_Subinterface_Ipv6_Counters) SetInMulticastOctets(v uint64) { + t.InMulticastOctets = &v +} + +// SetInMulticastPkts sets the value of the leaf InMulticastPkts in the Interface_Subinterface_Ipv6_Counters +// struct. +func (t *Interface_Subinterface_Ipv6_Counters) SetInMulticastPkts(v uint64) { + t.InMulticastPkts = &v +} + +// SetInOctets sets the value of the leaf InOctets in the Interface_Subinterface_Ipv6_Counters +// struct. +func (t *Interface_Subinterface_Ipv6_Counters) SetInOctets(v uint64) { + t.InOctets = &v +} + +// SetInPkts sets the value of the leaf InPkts in the Interface_Subinterface_Ipv6_Counters +// struct. +func (t *Interface_Subinterface_Ipv6_Counters) SetInPkts(v uint64) { + t.InPkts = &v +} + +// SetOutDiscardedPkts sets the value of the leaf OutDiscardedPkts in the Interface_Subinterface_Ipv6_Counters +// struct. +func (t *Interface_Subinterface_Ipv6_Counters) SetOutDiscardedPkts(v uint64) { + t.OutDiscardedPkts = &v +} + +// SetOutErrorPkts sets the value of the leaf OutErrorPkts in the Interface_Subinterface_Ipv6_Counters +// struct. +func (t *Interface_Subinterface_Ipv6_Counters) SetOutErrorPkts(v uint64) { + t.OutErrorPkts = &v +} + +// SetOutForwardedOctets sets the value of the leaf OutForwardedOctets in the Interface_Subinterface_Ipv6_Counters +// struct. +func (t *Interface_Subinterface_Ipv6_Counters) SetOutForwardedOctets(v uint64) { + t.OutForwardedOctets = &v +} + +// SetOutForwardedPkts sets the value of the leaf OutForwardedPkts in the Interface_Subinterface_Ipv6_Counters +// struct. +func (t *Interface_Subinterface_Ipv6_Counters) SetOutForwardedPkts(v uint64) { + t.OutForwardedPkts = &v +} + +// SetOutMulticastOctets sets the value of the leaf OutMulticastOctets in the Interface_Subinterface_Ipv6_Counters +// struct. +func (t *Interface_Subinterface_Ipv6_Counters) SetOutMulticastOctets(v uint64) { + t.OutMulticastOctets = &v +} + +// SetOutMulticastPkts sets the value of the leaf OutMulticastPkts in the Interface_Subinterface_Ipv6_Counters +// struct. +func (t *Interface_Subinterface_Ipv6_Counters) SetOutMulticastPkts(v uint64) { + t.OutMulticastPkts = &v +} + +// SetOutOctets sets the value of the leaf OutOctets in the Interface_Subinterface_Ipv6_Counters +// struct. +func (t *Interface_Subinterface_Ipv6_Counters) SetOutOctets(v uint64) { + t.OutOctets = &v +} + +// SetOutPkts sets the value of the leaf OutPkts in the Interface_Subinterface_Ipv6_Counters +// struct. +func (t *Interface_Subinterface_Ipv6_Counters) SetOutPkts(v uint64) { + t.OutPkts = &v +} + +// PopulateDefaults recursively populates unset leaf fields in the Interface_Subinterface_Ipv6_Counters +// with default values as specified in the YANG schema, instantiating any nil +// container fields. +func (t *Interface_Subinterface_Ipv6_Counters) PopulateDefaults() { + if t == nil { + return + } + ygot.BuildEmptyTree(t) +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_Subinterface_Ipv6_Counters) ΛValidate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["Interface_Subinterface_Ipv6_Counters"], t, opts...); err != nil { + return err + } + return nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_Subinterface_Ipv6_Counters) Validate(opts ...ygot.ValidationOption) error { + return t.ΛValidate(opts...) +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *Interface_Subinterface_Ipv6_Counters) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// ΛBelongingModule returns the name of the module that defines the namespace +// of Interface_Subinterface_Ipv6_Counters. +func (*Interface_Subinterface_Ipv6_Counters) ΛBelongingModule() string { + return "openconfig-if-ip" +} + +// Interface_Subinterface_Ipv6_Neighbor represents the /openconfig-interfaces/interfaces/interface/subinterfaces/subinterface/ipv6/neighbors/neighbor YANG schema element. +type Interface_Subinterface_Ipv6_Neighbor struct { + Ip *string `path:"config/ip|ip" module:"openconfig-if-ip/openconfig-if-ip|openconfig-if-ip" shadow-path:"state/ip|ip" shadow-module:"openconfig-if-ip/openconfig-if-ip|openconfig-if-ip"` + IsRouter *bool `path:"state/is-router" module:"openconfig-if-ip/openconfig-if-ip"` + LinkLayerAddress *string `path:"config/link-layer-address" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/link-layer-address" shadow-module:"openconfig-if-ip/openconfig-if-ip"` + NeighborState E_Neighbor_NeighborState `path:"state/neighbor-state" module:"openconfig-if-ip/openconfig-if-ip"` + Origin E_IfIp_NeighborOrigin `path:"state/origin" module:"openconfig-if-ip/openconfig-if-ip"` +} + +// IsYANGGoStruct ensures that Interface_Subinterface_Ipv6_Neighbor implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*Interface_Subinterface_Ipv6_Neighbor) IsYANGGoStruct() {} + +// GetIp retrieves the value of the leaf Ip from the Interface_Subinterface_Ipv6_Neighbor +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Ip is set, it can +// safely use t.GetIp() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Ip == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv6_Neighbor) GetIp() string { + if t == nil || t.Ip == nil { + return "" + } + return *t.Ip +} + +// GetIsRouter retrieves the value of the leaf IsRouter from the Interface_Subinterface_Ipv6_Neighbor +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if IsRouter is set, it can +// safely use t.GetIsRouter() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.IsRouter == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv6_Neighbor) GetIsRouter() bool { + if t == nil || t.IsRouter == nil { + return false + } + return *t.IsRouter +} + +// GetLinkLayerAddress retrieves the value of the leaf LinkLayerAddress from the Interface_Subinterface_Ipv6_Neighbor +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if LinkLayerAddress is set, it can +// safely use t.GetLinkLayerAddress() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.LinkLayerAddress == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv6_Neighbor) GetLinkLayerAddress() string { + if t == nil || t.LinkLayerAddress == nil { + return "" + } + return *t.LinkLayerAddress +} + +// GetNeighborState retrieves the value of the leaf NeighborState from the Interface_Subinterface_Ipv6_Neighbor +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if NeighborState is set, it can +// safely use t.GetNeighborState() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.NeighborState == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv6_Neighbor) GetNeighborState() E_Neighbor_NeighborState { + if t == nil || t.NeighborState == 0 { + return 0 + } + return t.NeighborState +} + +// GetOrigin retrieves the value of the leaf Origin from the Interface_Subinterface_Ipv6_Neighbor +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Origin is set, it can +// safely use t.GetOrigin() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Origin == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv6_Neighbor) GetOrigin() E_IfIp_NeighborOrigin { + if t == nil || t.Origin == 0 { + return 0 + } + return t.Origin +} + +// SetIp sets the value of the leaf Ip in the Interface_Subinterface_Ipv6_Neighbor +// struct. +func (t *Interface_Subinterface_Ipv6_Neighbor) SetIp(v string) { + t.Ip = &v +} + +// SetIsRouter sets the value of the leaf IsRouter in the Interface_Subinterface_Ipv6_Neighbor +// struct. +func (t *Interface_Subinterface_Ipv6_Neighbor) SetIsRouter(v bool) { + t.IsRouter = &v +} + +// SetLinkLayerAddress sets the value of the leaf LinkLayerAddress in the Interface_Subinterface_Ipv6_Neighbor +// struct. +func (t *Interface_Subinterface_Ipv6_Neighbor) SetLinkLayerAddress(v string) { + t.LinkLayerAddress = &v +} + +// SetNeighborState sets the value of the leaf NeighborState in the Interface_Subinterface_Ipv6_Neighbor +// struct. +func (t *Interface_Subinterface_Ipv6_Neighbor) SetNeighborState(v E_Neighbor_NeighborState) { + t.NeighborState = v +} + +// SetOrigin sets the value of the leaf Origin in the Interface_Subinterface_Ipv6_Neighbor +// struct. +func (t *Interface_Subinterface_Ipv6_Neighbor) SetOrigin(v E_IfIp_NeighborOrigin) { + t.Origin = v +} + +// PopulateDefaults recursively populates unset leaf fields in the Interface_Subinterface_Ipv6_Neighbor +// with default values as specified in the YANG schema, instantiating any nil +// container fields. +func (t *Interface_Subinterface_Ipv6_Neighbor) PopulateDefaults() { + if t == nil { + return + } + ygot.BuildEmptyTree(t) +} + +// ΛListKeyMap returns the keys of the Interface_Subinterface_Ipv6_Neighbor struct, which is a YANG list entry. +func (t *Interface_Subinterface_Ipv6_Neighbor) ΛListKeyMap() (map[string]interface{}, error) { + if t.Ip == nil { + return nil, fmt.Errorf("nil value for key Ip") + } + + return map[string]interface{}{ + "ip": *t.Ip, + }, nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_Subinterface_Ipv6_Neighbor) ΛValidate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["Interface_Subinterface_Ipv6_Neighbor"], t, opts...); err != nil { + return err + } + return nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_Subinterface_Ipv6_Neighbor) Validate(opts ...ygot.ValidationOption) error { + return t.ΛValidate(opts...) +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *Interface_Subinterface_Ipv6_Neighbor) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// ΛBelongingModule returns the name of the module that defines the namespace +// of Interface_Subinterface_Ipv6_Neighbor. +func (*Interface_Subinterface_Ipv6_Neighbor) ΛBelongingModule() string { + return "openconfig-if-ip" +} + +// Interface_Subinterface_Ipv6_RouterAdvertisement represents the /openconfig-interfaces/interfaces/interface/subinterfaces/subinterface/ipv6/router-advertisement YANG schema element. +type Interface_Subinterface_Ipv6_RouterAdvertisement struct { + Enable *bool `path:"config/enable" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/enable" shadow-module:"openconfig-if-ip/openconfig-if-ip"` + Interval *uint32 `path:"config/interval" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/interval" shadow-module:"openconfig-if-ip/openconfig-if-ip"` + Lifetime *uint32 `path:"config/lifetime" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/lifetime" shadow-module:"openconfig-if-ip/openconfig-if-ip"` + Managed *bool `path:"config/managed" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/managed" shadow-module:"openconfig-if-ip/openconfig-if-ip"` + Mode E_RouterAdvertisement_Mode `path:"config/mode" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/mode" shadow-module:"openconfig-if-ip/openconfig-if-ip"` + OtherConfig *bool `path:"config/other-config" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/other-config" shadow-module:"openconfig-if-ip/openconfig-if-ip"` + Prefix map[string]*Interface_Subinterface_Ipv6_RouterAdvertisement_Prefix `path:"prefixes/prefix" module:"openconfig-if-ip/openconfig-if-ip"` + Suppress *bool `path:"config/suppress" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/suppress" shadow-module:"openconfig-if-ip/openconfig-if-ip"` +} + +// IsYANGGoStruct ensures that Interface_Subinterface_Ipv6_RouterAdvertisement implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*Interface_Subinterface_Ipv6_RouterAdvertisement) IsYANGGoStruct() {} + +// NewPrefix creates a new entry in the Prefix list of the +// Interface_Subinterface_Ipv6_RouterAdvertisement struct. The keys of the list are populated from the input +// arguments. +func (t *Interface_Subinterface_Ipv6_RouterAdvertisement) NewPrefix(Prefix string) (*Interface_Subinterface_Ipv6_RouterAdvertisement_Prefix, error) { + + // Initialise the list within the receiver struct if it has not already been + // created. + if t.Prefix == nil { + t.Prefix = make(map[string]*Interface_Subinterface_Ipv6_RouterAdvertisement_Prefix) + } + + key := Prefix + + // Ensure that this key has not already been used in the + // list. Keyed YANG lists do not allow duplicate keys to + // be created. + if _, ok := t.Prefix[key]; ok { + return nil, fmt.Errorf("duplicate key %v for list Prefix", key) + } + + t.Prefix[key] = &Interface_Subinterface_Ipv6_RouterAdvertisement_Prefix{ + Prefix: &Prefix, + } + + return t.Prefix[key], nil +} + +// RenamePrefix renames an entry in the list Prefix within +// the Interface_Subinterface_Ipv6_RouterAdvertisement struct. The entry with key oldK is renamed to newK updating +// the key within the value. +func (t *Interface_Subinterface_Ipv6_RouterAdvertisement) RenamePrefix(oldK, newK string) error { + if _, ok := t.Prefix[newK]; ok { + return fmt.Errorf("key %v already exists in Prefix", newK) + } + + e, ok := t.Prefix[oldK] + if !ok { + return fmt.Errorf("key %v not found in Prefix", oldK) + } + e.Prefix = &newK + + t.Prefix[newK] = e + delete(t.Prefix, oldK) + return nil +} + +// GetOrCreatePrefixMap returns the list (map) from Interface_Subinterface_Ipv6_RouterAdvertisement. +// +// It initializes the field if not already initialized. +func (t *Interface_Subinterface_Ipv6_RouterAdvertisement) GetOrCreatePrefixMap() map[string]*Interface_Subinterface_Ipv6_RouterAdvertisement_Prefix { + if t.Prefix == nil { + t.Prefix = make(map[string]*Interface_Subinterface_Ipv6_RouterAdvertisement_Prefix) + } + return t.Prefix +} + +// GetOrCreatePrefix retrieves the value with the specified keys from +// the receiver Interface_Subinterface_Ipv6_RouterAdvertisement. If the entry does not exist, then it is created. +// It returns the existing or new list member. +func (t *Interface_Subinterface_Ipv6_RouterAdvertisement) GetOrCreatePrefix(Prefix string) *Interface_Subinterface_Ipv6_RouterAdvertisement_Prefix { + + key := Prefix + + if v, ok := t.Prefix[key]; ok { + return v + } + // Panic if we receive an error, since we should have retrieved an existing + // list member. This allows chaining of GetOrCreate methods. + v, err := t.NewPrefix(Prefix) + if err != nil { + panic(fmt.Sprintf("GetOrCreatePrefix got unexpected error: %v", err)) + } + return v +} + +// GetPrefix retrieves the value with the specified key from +// the Prefix map field of Interface_Subinterface_Ipv6_RouterAdvertisement. If the receiver is nil, or +// the specified key is not present in the list, nil is returned such that Get* +// methods may be safely chained. +func (t *Interface_Subinterface_Ipv6_RouterAdvertisement) GetPrefix(Prefix string) *Interface_Subinterface_Ipv6_RouterAdvertisement_Prefix { + + if t == nil { + return nil + } + + key := Prefix + + if lm, ok := t.Prefix[key]; ok { + return lm + } + return nil +} + +// DeletePrefix deletes the value with the specified keys from +// the receiver Interface_Subinterface_Ipv6_RouterAdvertisement. If there is no such element, the function +// is a no-op. +func (t *Interface_Subinterface_Ipv6_RouterAdvertisement) DeletePrefix(Prefix string) { + key := Prefix + + delete(t.Prefix, key) +} + +// AppendPrefix appends the supplied Interface_Subinterface_Ipv6_RouterAdvertisement_Prefix struct to the +// list Prefix of Interface_Subinterface_Ipv6_RouterAdvertisement. If the key value(s) specified in +// the supplied Interface_Subinterface_Ipv6_RouterAdvertisement_Prefix already exist in the list, an error is +// returned. +func (t *Interface_Subinterface_Ipv6_RouterAdvertisement) AppendPrefix(v *Interface_Subinterface_Ipv6_RouterAdvertisement_Prefix) error { + if v.Prefix == nil { + return fmt.Errorf("invalid nil key received for Prefix") + } + + key := *v.Prefix + + // Initialise the list within the receiver struct if it has not already been + // created. + if t.Prefix == nil { + t.Prefix = make(map[string]*Interface_Subinterface_Ipv6_RouterAdvertisement_Prefix) + } + + if _, ok := t.Prefix[key]; ok { + return fmt.Errorf("duplicate key for list Prefix %v", key) + } + + t.Prefix[key] = v + return nil +} + +// GetEnable retrieves the value of the leaf Enable from the Interface_Subinterface_Ipv6_RouterAdvertisement +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Enable is set, it can +// safely use t.GetEnable() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Enable == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv6_RouterAdvertisement) GetEnable() bool { + if t == nil || t.Enable == nil { + return true + } + return *t.Enable +} + +// GetInterval retrieves the value of the leaf Interval from the Interface_Subinterface_Ipv6_RouterAdvertisement +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Interval is set, it can +// safely use t.GetInterval() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Interval == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv6_RouterAdvertisement) GetInterval() uint32 { + if t == nil || t.Interval == nil { + return 0 + } + return *t.Interval +} + +// GetLifetime retrieves the value of the leaf Lifetime from the Interface_Subinterface_Ipv6_RouterAdvertisement +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Lifetime is set, it can +// safely use t.GetLifetime() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Lifetime == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv6_RouterAdvertisement) GetLifetime() uint32 { + if t == nil || t.Lifetime == nil { + return 0 + } + return *t.Lifetime +} + +// GetManaged retrieves the value of the leaf Managed from the Interface_Subinterface_Ipv6_RouterAdvertisement +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Managed is set, it can +// safely use t.GetManaged() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Managed == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv6_RouterAdvertisement) GetManaged() bool { + if t == nil || t.Managed == nil { + return false + } + return *t.Managed +} + +// GetMode retrieves the value of the leaf Mode from the Interface_Subinterface_Ipv6_RouterAdvertisement +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Mode is set, it can +// safely use t.GetMode() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Mode == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv6_RouterAdvertisement) GetMode() E_RouterAdvertisement_Mode { + if t == nil || t.Mode == 0 { + return RouterAdvertisement_Mode_ALL + } + return t.Mode +} + +// GetOtherConfig retrieves the value of the leaf OtherConfig from the Interface_Subinterface_Ipv6_RouterAdvertisement +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if OtherConfig is set, it can +// safely use t.GetOtherConfig() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.OtherConfig == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv6_RouterAdvertisement) GetOtherConfig() bool { + if t == nil || t.OtherConfig == nil { + return false + } + return *t.OtherConfig +} + +// GetSuppress retrieves the value of the leaf Suppress from the Interface_Subinterface_Ipv6_RouterAdvertisement +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Suppress is set, it can +// safely use t.GetSuppress() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Suppress == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv6_RouterAdvertisement) GetSuppress() bool { + if t == nil || t.Suppress == nil { + return false + } + return *t.Suppress +} + +// SetEnable sets the value of the leaf Enable in the Interface_Subinterface_Ipv6_RouterAdvertisement +// struct. +func (t *Interface_Subinterface_Ipv6_RouterAdvertisement) SetEnable(v bool) { + t.Enable = &v +} + +// SetInterval sets the value of the leaf Interval in the Interface_Subinterface_Ipv6_RouterAdvertisement +// struct. +func (t *Interface_Subinterface_Ipv6_RouterAdvertisement) SetInterval(v uint32) { + t.Interval = &v +} + +// SetLifetime sets the value of the leaf Lifetime in the Interface_Subinterface_Ipv6_RouterAdvertisement +// struct. +func (t *Interface_Subinterface_Ipv6_RouterAdvertisement) SetLifetime(v uint32) { + t.Lifetime = &v +} + +// SetManaged sets the value of the leaf Managed in the Interface_Subinterface_Ipv6_RouterAdvertisement +// struct. +func (t *Interface_Subinterface_Ipv6_RouterAdvertisement) SetManaged(v bool) { + t.Managed = &v +} + +// SetMode sets the value of the leaf Mode in the Interface_Subinterface_Ipv6_RouterAdvertisement +// struct. +func (t *Interface_Subinterface_Ipv6_RouterAdvertisement) SetMode(v E_RouterAdvertisement_Mode) { + t.Mode = v +} + +// SetOtherConfig sets the value of the leaf OtherConfig in the Interface_Subinterface_Ipv6_RouterAdvertisement +// struct. +func (t *Interface_Subinterface_Ipv6_RouterAdvertisement) SetOtherConfig(v bool) { + t.OtherConfig = &v +} + +// SetSuppress sets the value of the leaf Suppress in the Interface_Subinterface_Ipv6_RouterAdvertisement +// struct. +func (t *Interface_Subinterface_Ipv6_RouterAdvertisement) SetSuppress(v bool) { + t.Suppress = &v +} + +// PopulateDefaults recursively populates unset leaf fields in the Interface_Subinterface_Ipv6_RouterAdvertisement +// with default values as specified in the YANG schema, instantiating any nil +// container fields. +func (t *Interface_Subinterface_Ipv6_RouterAdvertisement) PopulateDefaults() { + if t == nil { + return + } + ygot.BuildEmptyTree(t) + if t.Enable == nil { + var v bool = true + t.Enable = &v + } + if t.Managed == nil { + var v bool = false + t.Managed = &v + } + if t.Mode == 0 { + t.Mode = RouterAdvertisement_Mode_ALL + } + if t.OtherConfig == nil { + var v bool = false + t.OtherConfig = &v + } + if t.Suppress == nil { + var v bool = false + t.Suppress = &v + } + for _, e := range t.Prefix { + e.PopulateDefaults() + } +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_Subinterface_Ipv6_RouterAdvertisement) ΛValidate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["Interface_Subinterface_Ipv6_RouterAdvertisement"], t, opts...); err != nil { + return err + } + return nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_Subinterface_Ipv6_RouterAdvertisement) Validate(opts ...ygot.ValidationOption) error { + return t.ΛValidate(opts...) +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *Interface_Subinterface_Ipv6_RouterAdvertisement) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// ΛBelongingModule returns the name of the module that defines the namespace +// of Interface_Subinterface_Ipv6_RouterAdvertisement. +func (*Interface_Subinterface_Ipv6_RouterAdvertisement) ΛBelongingModule() string { + return "openconfig-if-ip" +} + +// Interface_Subinterface_Ipv6_RouterAdvertisement_Prefix represents the /openconfig-interfaces/interfaces/interface/subinterfaces/subinterface/ipv6/router-advertisement/prefixes/prefix YANG schema element. +type Interface_Subinterface_Ipv6_RouterAdvertisement_Prefix struct { + DisableAdvertisement *bool `path:"config/disable-advertisement" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/disable-advertisement" shadow-module:"openconfig-if-ip/openconfig-if-ip"` + DisableAutoconfiguration *bool `path:"config/disable-autoconfiguration" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/disable-autoconfiguration" shadow-module:"openconfig-if-ip/openconfig-if-ip"` + EnableOnlink *bool `path:"config/enable-onlink" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/enable-onlink" shadow-module:"openconfig-if-ip/openconfig-if-ip"` + PreferredLifetime *uint32 `path:"config/preferred-lifetime" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/preferred-lifetime" shadow-module:"openconfig-if-ip/openconfig-if-ip"` + Prefix *string `path:"config/prefix|prefix" module:"openconfig-if-ip/openconfig-if-ip|openconfig-if-ip" shadow-path:"state/prefix|prefix" shadow-module:"openconfig-if-ip/openconfig-if-ip|openconfig-if-ip"` + ValidLifetime *uint32 `path:"config/valid-lifetime" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/valid-lifetime" shadow-module:"openconfig-if-ip/openconfig-if-ip"` +} + +// IsYANGGoStruct ensures that Interface_Subinterface_Ipv6_RouterAdvertisement_Prefix implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*Interface_Subinterface_Ipv6_RouterAdvertisement_Prefix) IsYANGGoStruct() {} + +// GetDisableAdvertisement retrieves the value of the leaf DisableAdvertisement from the Interface_Subinterface_Ipv6_RouterAdvertisement_Prefix +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if DisableAdvertisement is set, it can +// safely use t.GetDisableAdvertisement() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.DisableAdvertisement == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv6_RouterAdvertisement_Prefix) GetDisableAdvertisement() bool { + if t == nil || t.DisableAdvertisement == nil { + return false + } + return *t.DisableAdvertisement +} + +// GetDisableAutoconfiguration retrieves the value of the leaf DisableAutoconfiguration from the Interface_Subinterface_Ipv6_RouterAdvertisement_Prefix +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if DisableAutoconfiguration is set, it can +// safely use t.GetDisableAutoconfiguration() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.DisableAutoconfiguration == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv6_RouterAdvertisement_Prefix) GetDisableAutoconfiguration() bool { + if t == nil || t.DisableAutoconfiguration == nil { + return false + } + return *t.DisableAutoconfiguration +} + +// GetEnableOnlink retrieves the value of the leaf EnableOnlink from the Interface_Subinterface_Ipv6_RouterAdvertisement_Prefix +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if EnableOnlink is set, it can +// safely use t.GetEnableOnlink() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.EnableOnlink == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv6_RouterAdvertisement_Prefix) GetEnableOnlink() bool { + if t == nil || t.EnableOnlink == nil { + return false + } + return *t.EnableOnlink +} + +// GetPreferredLifetime retrieves the value of the leaf PreferredLifetime from the Interface_Subinterface_Ipv6_RouterAdvertisement_Prefix +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if PreferredLifetime is set, it can +// safely use t.GetPreferredLifetime() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.PreferredLifetime == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv6_RouterAdvertisement_Prefix) GetPreferredLifetime() uint32 { + if t == nil || t.PreferredLifetime == nil { + return 0 + } + return *t.PreferredLifetime +} + +// GetPrefix retrieves the value of the leaf Prefix from the Interface_Subinterface_Ipv6_RouterAdvertisement_Prefix +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Prefix is set, it can +// safely use t.GetPrefix() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Prefix == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv6_RouterAdvertisement_Prefix) GetPrefix() string { + if t == nil || t.Prefix == nil { + return "" + } + return *t.Prefix +} + +// GetValidLifetime retrieves the value of the leaf ValidLifetime from the Interface_Subinterface_Ipv6_RouterAdvertisement_Prefix +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if ValidLifetime is set, it can +// safely use t.GetValidLifetime() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.ValidLifetime == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv6_RouterAdvertisement_Prefix) GetValidLifetime() uint32 { + if t == nil || t.ValidLifetime == nil { + return 0 + } + return *t.ValidLifetime +} + +// SetDisableAdvertisement sets the value of the leaf DisableAdvertisement in the Interface_Subinterface_Ipv6_RouterAdvertisement_Prefix +// struct. +func (t *Interface_Subinterface_Ipv6_RouterAdvertisement_Prefix) SetDisableAdvertisement(v bool) { + t.DisableAdvertisement = &v +} + +// SetDisableAutoconfiguration sets the value of the leaf DisableAutoconfiguration in the Interface_Subinterface_Ipv6_RouterAdvertisement_Prefix +// struct. +func (t *Interface_Subinterface_Ipv6_RouterAdvertisement_Prefix) SetDisableAutoconfiguration(v bool) { + t.DisableAutoconfiguration = &v +} + +// SetEnableOnlink sets the value of the leaf EnableOnlink in the Interface_Subinterface_Ipv6_RouterAdvertisement_Prefix +// struct. +func (t *Interface_Subinterface_Ipv6_RouterAdvertisement_Prefix) SetEnableOnlink(v bool) { + t.EnableOnlink = &v +} + +// SetPreferredLifetime sets the value of the leaf PreferredLifetime in the Interface_Subinterface_Ipv6_RouterAdvertisement_Prefix +// struct. +func (t *Interface_Subinterface_Ipv6_RouterAdvertisement_Prefix) SetPreferredLifetime(v uint32) { + t.PreferredLifetime = &v +} + +// SetPrefix sets the value of the leaf Prefix in the Interface_Subinterface_Ipv6_RouterAdvertisement_Prefix +// struct. +func (t *Interface_Subinterface_Ipv6_RouterAdvertisement_Prefix) SetPrefix(v string) { + t.Prefix = &v +} + +// SetValidLifetime sets the value of the leaf ValidLifetime in the Interface_Subinterface_Ipv6_RouterAdvertisement_Prefix +// struct. +func (t *Interface_Subinterface_Ipv6_RouterAdvertisement_Prefix) SetValidLifetime(v uint32) { + t.ValidLifetime = &v +} + +// PopulateDefaults recursively populates unset leaf fields in the Interface_Subinterface_Ipv6_RouterAdvertisement_Prefix +// with default values as specified in the YANG schema, instantiating any nil +// container fields. +func (t *Interface_Subinterface_Ipv6_RouterAdvertisement_Prefix) PopulateDefaults() { + if t == nil { + return + } + ygot.BuildEmptyTree(t) +} + +// ΛListKeyMap returns the keys of the Interface_Subinterface_Ipv6_RouterAdvertisement_Prefix struct, which is a YANG list entry. +func (t *Interface_Subinterface_Ipv6_RouterAdvertisement_Prefix) ΛListKeyMap() (map[string]interface{}, error) { + if t.Prefix == nil { + return nil, fmt.Errorf("nil value for key Prefix") + } + + return map[string]interface{}{ + "prefix": *t.Prefix, + }, nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_Subinterface_Ipv6_RouterAdvertisement_Prefix) ΛValidate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["Interface_Subinterface_Ipv6_RouterAdvertisement_Prefix"], t, opts...); err != nil { + return err + } + return nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_Subinterface_Ipv6_RouterAdvertisement_Prefix) Validate(opts ...ygot.ValidationOption) error { + return t.ΛValidate(opts...) +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *Interface_Subinterface_Ipv6_RouterAdvertisement_Prefix) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// ΛBelongingModule returns the name of the module that defines the namespace +// of Interface_Subinterface_Ipv6_RouterAdvertisement_Prefix. +func (*Interface_Subinterface_Ipv6_RouterAdvertisement_Prefix) ΛBelongingModule() string { + return "openconfig-if-ip" +} + +// Interface_Subinterface_Ipv6_Unnumbered represents the /openconfig-interfaces/interfaces/interface/subinterfaces/subinterface/ipv6/unnumbered YANG schema element. +type Interface_Subinterface_Ipv6_Unnumbered struct { + Enabled *bool `path:"config/enabled" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/enabled" shadow-module:"openconfig-if-ip/openconfig-if-ip"` + InterfaceRef *Interface_Subinterface_Ipv6_Unnumbered_InterfaceRef `path:"interface-ref" module:"openconfig-if-ip"` +} + +// IsYANGGoStruct ensures that Interface_Subinterface_Ipv6_Unnumbered implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*Interface_Subinterface_Ipv6_Unnumbered) IsYANGGoStruct() {} + +// GetOrCreateInterfaceRef retrieves the value of the InterfaceRef field +// or returns the existing field if it already exists. +func (t *Interface_Subinterface_Ipv6_Unnumbered) GetOrCreateInterfaceRef() *Interface_Subinterface_Ipv6_Unnumbered_InterfaceRef { + if t.InterfaceRef != nil { + return t.InterfaceRef + } + t.InterfaceRef = &Interface_Subinterface_Ipv6_Unnumbered_InterfaceRef{} + return t.InterfaceRef +} + +// GetInterfaceRef returns the value of the InterfaceRef struct pointer +// from Interface_Subinterface_Ipv6_Unnumbered. If the receiver or the field InterfaceRef is nil, nil +// is returned such that the Get* methods can be safely chained. +func (t *Interface_Subinterface_Ipv6_Unnumbered) GetInterfaceRef() *Interface_Subinterface_Ipv6_Unnumbered_InterfaceRef { + if t != nil && t.InterfaceRef != nil { + return t.InterfaceRef + } + return nil +} + +// GetEnabled retrieves the value of the leaf Enabled from the Interface_Subinterface_Ipv6_Unnumbered +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Enabled is set, it can +// safely use t.GetEnabled() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Enabled == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv6_Unnumbered) GetEnabled() bool { + if t == nil || t.Enabled == nil { + return false + } + return *t.Enabled +} + +// SetEnabled sets the value of the leaf Enabled in the Interface_Subinterface_Ipv6_Unnumbered +// struct. +func (t *Interface_Subinterface_Ipv6_Unnumbered) SetEnabled(v bool) { + t.Enabled = &v +} + +// PopulateDefaults recursively populates unset leaf fields in the Interface_Subinterface_Ipv6_Unnumbered +// with default values as specified in the YANG schema, instantiating any nil +// container fields. +func (t *Interface_Subinterface_Ipv6_Unnumbered) PopulateDefaults() { + if t == nil { + return + } + ygot.BuildEmptyTree(t) + if t.Enabled == nil { + var v bool = false + t.Enabled = &v + } + t.InterfaceRef.PopulateDefaults() +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_Subinterface_Ipv6_Unnumbered) ΛValidate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["Interface_Subinterface_Ipv6_Unnumbered"], t, opts...); err != nil { + return err + } + return nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_Subinterface_Ipv6_Unnumbered) Validate(opts ...ygot.ValidationOption) error { + return t.ΛValidate(opts...) +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *Interface_Subinterface_Ipv6_Unnumbered) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// ΛBelongingModule returns the name of the module that defines the namespace +// of Interface_Subinterface_Ipv6_Unnumbered. +func (*Interface_Subinterface_Ipv6_Unnumbered) ΛBelongingModule() string { + return "openconfig-if-ip" +} + +// Interface_Subinterface_Ipv6_Unnumbered_InterfaceRef represents the /openconfig-interfaces/interfaces/interface/subinterfaces/subinterface/ipv6/unnumbered/interface-ref YANG schema element. +type Interface_Subinterface_Ipv6_Unnumbered_InterfaceRef struct { + Interface *string `path:"config/interface" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/interface" shadow-module:"openconfig-if-ip/openconfig-if-ip"` + Subinterface *uint32 `path:"config/subinterface" module:"openconfig-if-ip/openconfig-if-ip" shadow-path:"state/subinterface" shadow-module:"openconfig-if-ip/openconfig-if-ip"` +} + +// IsYANGGoStruct ensures that Interface_Subinterface_Ipv6_Unnumbered_InterfaceRef implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*Interface_Subinterface_Ipv6_Unnumbered_InterfaceRef) IsYANGGoStruct() {} + +// GetInterface retrieves the value of the leaf Interface from the Interface_Subinterface_Ipv6_Unnumbered_InterfaceRef +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Interface is set, it can +// safely use t.GetInterface() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Interface == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv6_Unnumbered_InterfaceRef) GetInterface() string { + if t == nil || t.Interface == nil { + return "" + } + return *t.Interface +} + +// GetSubinterface retrieves the value of the leaf Subinterface from the Interface_Subinterface_Ipv6_Unnumbered_InterfaceRef +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Subinterface is set, it can +// safely use t.GetSubinterface() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Subinterface == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Ipv6_Unnumbered_InterfaceRef) GetSubinterface() uint32 { + if t == nil || t.Subinterface == nil { + return 0 + } + return *t.Subinterface +} + +// SetInterface sets the value of the leaf Interface in the Interface_Subinterface_Ipv6_Unnumbered_InterfaceRef +// struct. +func (t *Interface_Subinterface_Ipv6_Unnumbered_InterfaceRef) SetInterface(v string) { + t.Interface = &v +} + +// SetSubinterface sets the value of the leaf Subinterface in the Interface_Subinterface_Ipv6_Unnumbered_InterfaceRef +// struct. +func (t *Interface_Subinterface_Ipv6_Unnumbered_InterfaceRef) SetSubinterface(v uint32) { + t.Subinterface = &v +} + +// PopulateDefaults recursively populates unset leaf fields in the Interface_Subinterface_Ipv6_Unnumbered_InterfaceRef +// with default values as specified in the YANG schema, instantiating any nil +// container fields. +func (t *Interface_Subinterface_Ipv6_Unnumbered_InterfaceRef) PopulateDefaults() { + if t == nil { + return + } + ygot.BuildEmptyTree(t) +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_Subinterface_Ipv6_Unnumbered_InterfaceRef) ΛValidate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["Interface_Subinterface_Ipv6_Unnumbered_InterfaceRef"], t, opts...); err != nil { + return err + } + return nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_Subinterface_Ipv6_Unnumbered_InterfaceRef) Validate(opts ...ygot.ValidationOption) error { + return t.ΛValidate(opts...) +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *Interface_Subinterface_Ipv6_Unnumbered_InterfaceRef) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// ΛBelongingModule returns the name of the module that defines the namespace +// of Interface_Subinterface_Ipv6_Unnumbered_InterfaceRef. +func (*Interface_Subinterface_Ipv6_Unnumbered_InterfaceRef) ΛBelongingModule() string { + return "openconfig-if-ip" +} + +// Interface_Subinterface_Vlan represents the /openconfig-interfaces/interfaces/interface/subinterfaces/subinterface/vlan YANG schema element. +type Interface_Subinterface_Vlan struct { + EgressMapping *Interface_Subinterface_Vlan_EgressMapping `path:"egress-mapping" module:"openconfig-vlan"` + IngressMapping *Interface_Subinterface_Vlan_IngressMapping `path:"ingress-mapping" module:"openconfig-vlan"` + Match *Interface_Subinterface_Vlan_Match `path:"match" module:"openconfig-vlan"` + VlanId Interface_Subinterface_Vlan_VlanId_Union `path:"config/vlan-id" module:"openconfig-vlan/openconfig-vlan" shadow-path:"state/vlan-id" shadow-module:"openconfig-vlan/openconfig-vlan"` +} + +// IsYANGGoStruct ensures that Interface_Subinterface_Vlan implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*Interface_Subinterface_Vlan) IsYANGGoStruct() {} + +// GetOrCreateEgressMapping retrieves the value of the EgressMapping field +// or returns the existing field if it already exists. +func (t *Interface_Subinterface_Vlan) GetOrCreateEgressMapping() *Interface_Subinterface_Vlan_EgressMapping { + if t.EgressMapping != nil { + return t.EgressMapping + } + t.EgressMapping = &Interface_Subinterface_Vlan_EgressMapping{} + return t.EgressMapping +} + +// GetOrCreateIngressMapping retrieves the value of the IngressMapping field +// or returns the existing field if it already exists. +func (t *Interface_Subinterface_Vlan) GetOrCreateIngressMapping() *Interface_Subinterface_Vlan_IngressMapping { + if t.IngressMapping != nil { + return t.IngressMapping + } + t.IngressMapping = &Interface_Subinterface_Vlan_IngressMapping{} + return t.IngressMapping +} + +// GetOrCreateMatch retrieves the value of the Match field +// or returns the existing field if it already exists. +func (t *Interface_Subinterface_Vlan) GetOrCreateMatch() *Interface_Subinterface_Vlan_Match { + if t.Match != nil { + return t.Match + } + t.Match = &Interface_Subinterface_Vlan_Match{} + return t.Match +} + +// GetEgressMapping returns the value of the EgressMapping struct pointer +// from Interface_Subinterface_Vlan. If the receiver or the field EgressMapping is nil, nil +// is returned such that the Get* methods can be safely chained. +func (t *Interface_Subinterface_Vlan) GetEgressMapping() *Interface_Subinterface_Vlan_EgressMapping { + if t != nil && t.EgressMapping != nil { + return t.EgressMapping + } + return nil +} + +// GetIngressMapping returns the value of the IngressMapping struct pointer +// from Interface_Subinterface_Vlan. If the receiver or the field IngressMapping is nil, nil +// is returned such that the Get* methods can be safely chained. +func (t *Interface_Subinterface_Vlan) GetIngressMapping() *Interface_Subinterface_Vlan_IngressMapping { + if t != nil && t.IngressMapping != nil { + return t.IngressMapping + } + return nil +} + +// GetMatch returns the value of the Match struct pointer +// from Interface_Subinterface_Vlan. If the receiver or the field Match is nil, nil +// is returned such that the Get* methods can be safely chained. +func (t *Interface_Subinterface_Vlan) GetMatch() *Interface_Subinterface_Vlan_Match { + if t != nil && t.Match != nil { + return t.Match + } + return nil +} + +// GetVlanId retrieves the value of the leaf VlanId from the Interface_Subinterface_Vlan +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if VlanId is set, it can +// safely use t.GetVlanId() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.VlanId == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Vlan) GetVlanId() Interface_Subinterface_Vlan_VlanId_Union { + if t == nil || t.VlanId == nil { + return nil + } + return t.VlanId +} + +// SetVlanId sets the value of the leaf VlanId in the Interface_Subinterface_Vlan +// struct. +func (t *Interface_Subinterface_Vlan) SetVlanId(v Interface_Subinterface_Vlan_VlanId_Union) { + t.VlanId = v +} + +// PopulateDefaults recursively populates unset leaf fields in the Interface_Subinterface_Vlan +// with default values as specified in the YANG schema, instantiating any nil +// container fields. +func (t *Interface_Subinterface_Vlan) PopulateDefaults() { + if t == nil { + return + } + ygot.BuildEmptyTree(t) + t.EgressMapping.PopulateDefaults() + t.IngressMapping.PopulateDefaults() + t.Match.PopulateDefaults() +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_Subinterface_Vlan) ΛValidate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["Interface_Subinterface_Vlan"], t, opts...); err != nil { + return err + } + return nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_Subinterface_Vlan) Validate(opts ...ygot.ValidationOption) error { + return t.ΛValidate(opts...) +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *Interface_Subinterface_Vlan) ΛEnumTypeMap() map[string][]reflect.Type { return ΛEnumTypes } + +// ΛBelongingModule returns the name of the module that defines the namespace +// of Interface_Subinterface_Vlan. +func (*Interface_Subinterface_Vlan) ΛBelongingModule() string { + return "openconfig-vlan" +} + +// Interface_Subinterface_Vlan_EgressMapping represents the /openconfig-interfaces/interfaces/interface/subinterfaces/subinterface/vlan/egress-mapping YANG schema element. +type Interface_Subinterface_Vlan_EgressMapping struct { + Tpid E_VlanTypes_TPID_TYPES `path:"config/tpid" module:"openconfig-vlan/openconfig-vlan" shadow-path:"state/tpid" shadow-module:"openconfig-vlan/openconfig-vlan"` + VlanId *uint16 `path:"config/vlan-id" module:"openconfig-vlan/openconfig-vlan" shadow-path:"state/vlan-id" shadow-module:"openconfig-vlan/openconfig-vlan"` + VlanStackAction E_VlanTypes_VlanStackAction `path:"config/vlan-stack-action" module:"openconfig-vlan/openconfig-vlan" shadow-path:"state/vlan-stack-action" shadow-module:"openconfig-vlan/openconfig-vlan"` +} + +// IsYANGGoStruct ensures that Interface_Subinterface_Vlan_EgressMapping implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*Interface_Subinterface_Vlan_EgressMapping) IsYANGGoStruct() {} + +// GetTpid retrieves the value of the leaf Tpid from the Interface_Subinterface_Vlan_EgressMapping +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Tpid is set, it can +// safely use t.GetTpid() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Tpid == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Vlan_EgressMapping) GetTpid() E_VlanTypes_TPID_TYPES { + if t == nil || t.Tpid == 0 { + return 0 + } + return t.Tpid +} + +// GetVlanId retrieves the value of the leaf VlanId from the Interface_Subinterface_Vlan_EgressMapping +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if VlanId is set, it can +// safely use t.GetVlanId() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.VlanId == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Vlan_EgressMapping) GetVlanId() uint16 { + if t == nil || t.VlanId == nil { + return 0 + } + return *t.VlanId +} + +// GetVlanStackAction retrieves the value of the leaf VlanStackAction from the Interface_Subinterface_Vlan_EgressMapping +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if VlanStackAction is set, it can +// safely use t.GetVlanStackAction() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.VlanStackAction == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Vlan_EgressMapping) GetVlanStackAction() E_VlanTypes_VlanStackAction { + if t == nil || t.VlanStackAction == 0 { + return 0 + } + return t.VlanStackAction +} + +// SetTpid sets the value of the leaf Tpid in the Interface_Subinterface_Vlan_EgressMapping +// struct. +func (t *Interface_Subinterface_Vlan_EgressMapping) SetTpid(v E_VlanTypes_TPID_TYPES) { + t.Tpid = v +} + +// SetVlanId sets the value of the leaf VlanId in the Interface_Subinterface_Vlan_EgressMapping +// struct. +func (t *Interface_Subinterface_Vlan_EgressMapping) SetVlanId(v uint16) { + t.VlanId = &v +} + +// SetVlanStackAction sets the value of the leaf VlanStackAction in the Interface_Subinterface_Vlan_EgressMapping +// struct. +func (t *Interface_Subinterface_Vlan_EgressMapping) SetVlanStackAction(v E_VlanTypes_VlanStackAction) { + t.VlanStackAction = v +} + +// PopulateDefaults recursively populates unset leaf fields in the Interface_Subinterface_Vlan_EgressMapping +// with default values as specified in the YANG schema, instantiating any nil +// container fields. +func (t *Interface_Subinterface_Vlan_EgressMapping) PopulateDefaults() { + if t == nil { + return + } + ygot.BuildEmptyTree(t) +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_Subinterface_Vlan_EgressMapping) ΛValidate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["Interface_Subinterface_Vlan_EgressMapping"], t, opts...); err != nil { + return err + } + return nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_Subinterface_Vlan_EgressMapping) Validate(opts ...ygot.ValidationOption) error { + return t.ΛValidate(opts...) +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *Interface_Subinterface_Vlan_EgressMapping) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// ΛBelongingModule returns the name of the module that defines the namespace +// of Interface_Subinterface_Vlan_EgressMapping. +func (*Interface_Subinterface_Vlan_EgressMapping) ΛBelongingModule() string { + return "openconfig-vlan" +} + +// Interface_Subinterface_Vlan_IngressMapping represents the /openconfig-interfaces/interfaces/interface/subinterfaces/subinterface/vlan/ingress-mapping YANG schema element. +type Interface_Subinterface_Vlan_IngressMapping struct { + Tpid E_VlanTypes_TPID_TYPES `path:"config/tpid" module:"openconfig-vlan/openconfig-vlan" shadow-path:"state/tpid" shadow-module:"openconfig-vlan/openconfig-vlan"` + VlanId *uint16 `path:"config/vlan-id" module:"openconfig-vlan/openconfig-vlan" shadow-path:"state/vlan-id" shadow-module:"openconfig-vlan/openconfig-vlan"` + VlanStackAction E_VlanTypes_VlanStackAction `path:"config/vlan-stack-action" module:"openconfig-vlan/openconfig-vlan" shadow-path:"state/vlan-stack-action" shadow-module:"openconfig-vlan/openconfig-vlan"` +} + +// IsYANGGoStruct ensures that Interface_Subinterface_Vlan_IngressMapping implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*Interface_Subinterface_Vlan_IngressMapping) IsYANGGoStruct() {} + +// GetTpid retrieves the value of the leaf Tpid from the Interface_Subinterface_Vlan_IngressMapping +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if Tpid is set, it can +// safely use t.GetTpid() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.Tpid == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Vlan_IngressMapping) GetTpid() E_VlanTypes_TPID_TYPES { + if t == nil || t.Tpid == 0 { + return 0 + } + return t.Tpid +} + +// GetVlanId retrieves the value of the leaf VlanId from the Interface_Subinterface_Vlan_IngressMapping +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if VlanId is set, it can +// safely use t.GetVlanId() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.VlanId == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Vlan_IngressMapping) GetVlanId() uint16 { + if t == nil || t.VlanId == nil { + return 0 + } + return *t.VlanId +} + +// GetVlanStackAction retrieves the value of the leaf VlanStackAction from the Interface_Subinterface_Vlan_IngressMapping +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if VlanStackAction is set, it can +// safely use t.GetVlanStackAction() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.VlanStackAction == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Vlan_IngressMapping) GetVlanStackAction() E_VlanTypes_VlanStackAction { + if t == nil || t.VlanStackAction == 0 { + return 0 + } + return t.VlanStackAction +} + +// SetTpid sets the value of the leaf Tpid in the Interface_Subinterface_Vlan_IngressMapping +// struct. +func (t *Interface_Subinterface_Vlan_IngressMapping) SetTpid(v E_VlanTypes_TPID_TYPES) { + t.Tpid = v +} + +// SetVlanId sets the value of the leaf VlanId in the Interface_Subinterface_Vlan_IngressMapping +// struct. +func (t *Interface_Subinterface_Vlan_IngressMapping) SetVlanId(v uint16) { + t.VlanId = &v +} + +// SetVlanStackAction sets the value of the leaf VlanStackAction in the Interface_Subinterface_Vlan_IngressMapping +// struct. +func (t *Interface_Subinterface_Vlan_IngressMapping) SetVlanStackAction(v E_VlanTypes_VlanStackAction) { + t.VlanStackAction = v +} + +// PopulateDefaults recursively populates unset leaf fields in the Interface_Subinterface_Vlan_IngressMapping +// with default values as specified in the YANG schema, instantiating any nil +// container fields. +func (t *Interface_Subinterface_Vlan_IngressMapping) PopulateDefaults() { + if t == nil { + return + } + ygot.BuildEmptyTree(t) +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_Subinterface_Vlan_IngressMapping) ΛValidate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["Interface_Subinterface_Vlan_IngressMapping"], t, opts...); err != nil { + return err + } + return nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_Subinterface_Vlan_IngressMapping) Validate(opts ...ygot.ValidationOption) error { + return t.ΛValidate(opts...) +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *Interface_Subinterface_Vlan_IngressMapping) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// ΛBelongingModule returns the name of the module that defines the namespace +// of Interface_Subinterface_Vlan_IngressMapping. +func (*Interface_Subinterface_Vlan_IngressMapping) ΛBelongingModule() string { + return "openconfig-vlan" +} + +// Interface_Subinterface_Vlan_Match represents the /openconfig-interfaces/interfaces/interface/subinterfaces/subinterface/vlan/match YANG schema element. +type Interface_Subinterface_Vlan_Match struct { + DoubleTagged *Interface_Subinterface_Vlan_Match_DoubleTagged `path:"double-tagged" module:"openconfig-vlan"` + DoubleTaggedInnerList *Interface_Subinterface_Vlan_Match_DoubleTaggedInnerList `path:"double-tagged-inner-list" module:"openconfig-vlan"` + DoubleTaggedInnerOuterRange *Interface_Subinterface_Vlan_Match_DoubleTaggedInnerOuterRange `path:"double-tagged-inner-outer-range" module:"openconfig-vlan"` + DoubleTaggedInnerRange *Interface_Subinterface_Vlan_Match_DoubleTaggedInnerRange `path:"double-tagged-inner-range" module:"openconfig-vlan"` + DoubleTaggedOuterList *Interface_Subinterface_Vlan_Match_DoubleTaggedOuterList `path:"double-tagged-outer-list" module:"openconfig-vlan"` + DoubleTaggedOuterRange *Interface_Subinterface_Vlan_Match_DoubleTaggedOuterRange `path:"double-tagged-outer-range" module:"openconfig-vlan"` + SingleTagged *Interface_Subinterface_Vlan_Match_SingleTagged `path:"single-tagged" module:"openconfig-vlan"` + SingleTaggedList *Interface_Subinterface_Vlan_Match_SingleTaggedList `path:"single-tagged-list" module:"openconfig-vlan"` + SingleTaggedRange *Interface_Subinterface_Vlan_Match_SingleTaggedRange `path:"single-tagged-range" module:"openconfig-vlan"` +} + +// IsYANGGoStruct ensures that Interface_Subinterface_Vlan_Match implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*Interface_Subinterface_Vlan_Match) IsYANGGoStruct() {} + +// GetOrCreateDoubleTagged retrieves the value of the DoubleTagged field +// or returns the existing field if it already exists. +func (t *Interface_Subinterface_Vlan_Match) GetOrCreateDoubleTagged() *Interface_Subinterface_Vlan_Match_DoubleTagged { + if t.DoubleTagged != nil { + return t.DoubleTagged + } + t.DoubleTagged = &Interface_Subinterface_Vlan_Match_DoubleTagged{} + return t.DoubleTagged +} + +// GetOrCreateDoubleTaggedInnerList retrieves the value of the DoubleTaggedInnerList field +// or returns the existing field if it already exists. +func (t *Interface_Subinterface_Vlan_Match) GetOrCreateDoubleTaggedInnerList() *Interface_Subinterface_Vlan_Match_DoubleTaggedInnerList { + if t.DoubleTaggedInnerList != nil { + return t.DoubleTaggedInnerList + } + t.DoubleTaggedInnerList = &Interface_Subinterface_Vlan_Match_DoubleTaggedInnerList{} + return t.DoubleTaggedInnerList +} + +// GetOrCreateDoubleTaggedInnerOuterRange retrieves the value of the DoubleTaggedInnerOuterRange field +// or returns the existing field if it already exists. +func (t *Interface_Subinterface_Vlan_Match) GetOrCreateDoubleTaggedInnerOuterRange() *Interface_Subinterface_Vlan_Match_DoubleTaggedInnerOuterRange { + if t.DoubleTaggedInnerOuterRange != nil { + return t.DoubleTaggedInnerOuterRange + } + t.DoubleTaggedInnerOuterRange = &Interface_Subinterface_Vlan_Match_DoubleTaggedInnerOuterRange{} + return t.DoubleTaggedInnerOuterRange +} + +// GetOrCreateDoubleTaggedInnerRange retrieves the value of the DoubleTaggedInnerRange field +// or returns the existing field if it already exists. +func (t *Interface_Subinterface_Vlan_Match) GetOrCreateDoubleTaggedInnerRange() *Interface_Subinterface_Vlan_Match_DoubleTaggedInnerRange { + if t.DoubleTaggedInnerRange != nil { + return t.DoubleTaggedInnerRange + } + t.DoubleTaggedInnerRange = &Interface_Subinterface_Vlan_Match_DoubleTaggedInnerRange{} + return t.DoubleTaggedInnerRange +} + +// GetOrCreateDoubleTaggedOuterList retrieves the value of the DoubleTaggedOuterList field +// or returns the existing field if it already exists. +func (t *Interface_Subinterface_Vlan_Match) GetOrCreateDoubleTaggedOuterList() *Interface_Subinterface_Vlan_Match_DoubleTaggedOuterList { + if t.DoubleTaggedOuterList != nil { + return t.DoubleTaggedOuterList + } + t.DoubleTaggedOuterList = &Interface_Subinterface_Vlan_Match_DoubleTaggedOuterList{} + return t.DoubleTaggedOuterList +} + +// GetOrCreateDoubleTaggedOuterRange retrieves the value of the DoubleTaggedOuterRange field +// or returns the existing field if it already exists. +func (t *Interface_Subinterface_Vlan_Match) GetOrCreateDoubleTaggedOuterRange() *Interface_Subinterface_Vlan_Match_DoubleTaggedOuterRange { + if t.DoubleTaggedOuterRange != nil { + return t.DoubleTaggedOuterRange + } + t.DoubleTaggedOuterRange = &Interface_Subinterface_Vlan_Match_DoubleTaggedOuterRange{} + return t.DoubleTaggedOuterRange +} + +// GetOrCreateSingleTagged retrieves the value of the SingleTagged field +// or returns the existing field if it already exists. +func (t *Interface_Subinterface_Vlan_Match) GetOrCreateSingleTagged() *Interface_Subinterface_Vlan_Match_SingleTagged { + if t.SingleTagged != nil { + return t.SingleTagged + } + t.SingleTagged = &Interface_Subinterface_Vlan_Match_SingleTagged{} + return t.SingleTagged +} + +// GetOrCreateSingleTaggedList retrieves the value of the SingleTaggedList field +// or returns the existing field if it already exists. +func (t *Interface_Subinterface_Vlan_Match) GetOrCreateSingleTaggedList() *Interface_Subinterface_Vlan_Match_SingleTaggedList { + if t.SingleTaggedList != nil { + return t.SingleTaggedList + } + t.SingleTaggedList = &Interface_Subinterface_Vlan_Match_SingleTaggedList{} + return t.SingleTaggedList +} + +// GetOrCreateSingleTaggedRange retrieves the value of the SingleTaggedRange field +// or returns the existing field if it already exists. +func (t *Interface_Subinterface_Vlan_Match) GetOrCreateSingleTaggedRange() *Interface_Subinterface_Vlan_Match_SingleTaggedRange { + if t.SingleTaggedRange != nil { + return t.SingleTaggedRange + } + t.SingleTaggedRange = &Interface_Subinterface_Vlan_Match_SingleTaggedRange{} + return t.SingleTaggedRange +} + +// GetDoubleTagged returns the value of the DoubleTagged struct pointer +// from Interface_Subinterface_Vlan_Match. If the receiver or the field DoubleTagged is nil, nil +// is returned such that the Get* methods can be safely chained. +func (t *Interface_Subinterface_Vlan_Match) GetDoubleTagged() *Interface_Subinterface_Vlan_Match_DoubleTagged { + if t != nil && t.DoubleTagged != nil { + return t.DoubleTagged + } + return nil +} + +// GetDoubleTaggedInnerList returns the value of the DoubleTaggedInnerList struct pointer +// from Interface_Subinterface_Vlan_Match. If the receiver or the field DoubleTaggedInnerList is nil, nil +// is returned such that the Get* methods can be safely chained. +func (t *Interface_Subinterface_Vlan_Match) GetDoubleTaggedInnerList() *Interface_Subinterface_Vlan_Match_DoubleTaggedInnerList { + if t != nil && t.DoubleTaggedInnerList != nil { + return t.DoubleTaggedInnerList + } + return nil +} + +// GetDoubleTaggedInnerOuterRange returns the value of the DoubleTaggedInnerOuterRange struct pointer +// from Interface_Subinterface_Vlan_Match. If the receiver or the field DoubleTaggedInnerOuterRange is nil, nil +// is returned such that the Get* methods can be safely chained. +func (t *Interface_Subinterface_Vlan_Match) GetDoubleTaggedInnerOuterRange() *Interface_Subinterface_Vlan_Match_DoubleTaggedInnerOuterRange { + if t != nil && t.DoubleTaggedInnerOuterRange != nil { + return t.DoubleTaggedInnerOuterRange + } + return nil +} + +// GetDoubleTaggedInnerRange returns the value of the DoubleTaggedInnerRange struct pointer +// from Interface_Subinterface_Vlan_Match. If the receiver or the field DoubleTaggedInnerRange is nil, nil +// is returned such that the Get* methods can be safely chained. +func (t *Interface_Subinterface_Vlan_Match) GetDoubleTaggedInnerRange() *Interface_Subinterface_Vlan_Match_DoubleTaggedInnerRange { + if t != nil && t.DoubleTaggedInnerRange != nil { + return t.DoubleTaggedInnerRange + } + return nil +} + +// GetDoubleTaggedOuterList returns the value of the DoubleTaggedOuterList struct pointer +// from Interface_Subinterface_Vlan_Match. If the receiver or the field DoubleTaggedOuterList is nil, nil +// is returned such that the Get* methods can be safely chained. +func (t *Interface_Subinterface_Vlan_Match) GetDoubleTaggedOuterList() *Interface_Subinterface_Vlan_Match_DoubleTaggedOuterList { + if t != nil && t.DoubleTaggedOuterList != nil { + return t.DoubleTaggedOuterList + } + return nil +} + +// GetDoubleTaggedOuterRange returns the value of the DoubleTaggedOuterRange struct pointer +// from Interface_Subinterface_Vlan_Match. If the receiver or the field DoubleTaggedOuterRange is nil, nil +// is returned such that the Get* methods can be safely chained. +func (t *Interface_Subinterface_Vlan_Match) GetDoubleTaggedOuterRange() *Interface_Subinterface_Vlan_Match_DoubleTaggedOuterRange { + if t != nil && t.DoubleTaggedOuterRange != nil { + return t.DoubleTaggedOuterRange + } + return nil +} + +// GetSingleTagged returns the value of the SingleTagged struct pointer +// from Interface_Subinterface_Vlan_Match. If the receiver or the field SingleTagged is nil, nil +// is returned such that the Get* methods can be safely chained. +func (t *Interface_Subinterface_Vlan_Match) GetSingleTagged() *Interface_Subinterface_Vlan_Match_SingleTagged { + if t != nil && t.SingleTagged != nil { + return t.SingleTagged + } + return nil +} + +// GetSingleTaggedList returns the value of the SingleTaggedList struct pointer +// from Interface_Subinterface_Vlan_Match. If the receiver or the field SingleTaggedList is nil, nil +// is returned such that the Get* methods can be safely chained. +func (t *Interface_Subinterface_Vlan_Match) GetSingleTaggedList() *Interface_Subinterface_Vlan_Match_SingleTaggedList { + if t != nil && t.SingleTaggedList != nil { + return t.SingleTaggedList + } + return nil +} + +// GetSingleTaggedRange returns the value of the SingleTaggedRange struct pointer +// from Interface_Subinterface_Vlan_Match. If the receiver or the field SingleTaggedRange is nil, nil +// is returned such that the Get* methods can be safely chained. +func (t *Interface_Subinterface_Vlan_Match) GetSingleTaggedRange() *Interface_Subinterface_Vlan_Match_SingleTaggedRange { + if t != nil && t.SingleTaggedRange != nil { + return t.SingleTaggedRange + } + return nil +} + +// PopulateDefaults recursively populates unset leaf fields in the Interface_Subinterface_Vlan_Match +// with default values as specified in the YANG schema, instantiating any nil +// container fields. +func (t *Interface_Subinterface_Vlan_Match) PopulateDefaults() { + if t == nil { + return + } + ygot.BuildEmptyTree(t) + t.DoubleTagged.PopulateDefaults() + t.DoubleTaggedInnerList.PopulateDefaults() + t.DoubleTaggedInnerOuterRange.PopulateDefaults() + t.DoubleTaggedInnerRange.PopulateDefaults() + t.DoubleTaggedOuterList.PopulateDefaults() + t.DoubleTaggedOuterRange.PopulateDefaults() + t.SingleTagged.PopulateDefaults() + t.SingleTaggedList.PopulateDefaults() + t.SingleTaggedRange.PopulateDefaults() +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_Subinterface_Vlan_Match) ΛValidate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["Interface_Subinterface_Vlan_Match"], t, opts...); err != nil { + return err + } + return nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_Subinterface_Vlan_Match) Validate(opts ...ygot.ValidationOption) error { + return t.ΛValidate(opts...) +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *Interface_Subinterface_Vlan_Match) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// ΛBelongingModule returns the name of the module that defines the namespace +// of Interface_Subinterface_Vlan_Match. +func (*Interface_Subinterface_Vlan_Match) ΛBelongingModule() string { + return "openconfig-vlan" +} + +// Interface_Subinterface_Vlan_Match_DoubleTagged represents the /openconfig-interfaces/interfaces/interface/subinterfaces/subinterface/vlan/match/double-tagged YANG schema element. +type Interface_Subinterface_Vlan_Match_DoubleTagged struct { + InnerVlanId *uint16 `path:"config/inner-vlan-id" module:"openconfig-vlan/openconfig-vlan" shadow-path:"state/inner-vlan-id" shadow-module:"openconfig-vlan/openconfig-vlan"` + OuterVlanId *uint16 `path:"config/outer-vlan-id" module:"openconfig-vlan/openconfig-vlan" shadow-path:"state/outer-vlan-id" shadow-module:"openconfig-vlan/openconfig-vlan"` +} + +// IsYANGGoStruct ensures that Interface_Subinterface_Vlan_Match_DoubleTagged implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*Interface_Subinterface_Vlan_Match_DoubleTagged) IsYANGGoStruct() {} + +// GetInnerVlanId retrieves the value of the leaf InnerVlanId from the Interface_Subinterface_Vlan_Match_DoubleTagged +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if InnerVlanId is set, it can +// safely use t.GetInnerVlanId() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.InnerVlanId == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Vlan_Match_DoubleTagged) GetInnerVlanId() uint16 { + if t == nil || t.InnerVlanId == nil { + return 0 + } + return *t.InnerVlanId +} + +// GetOuterVlanId retrieves the value of the leaf OuterVlanId from the Interface_Subinterface_Vlan_Match_DoubleTagged +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if OuterVlanId is set, it can +// safely use t.GetOuterVlanId() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.OuterVlanId == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Vlan_Match_DoubleTagged) GetOuterVlanId() uint16 { + if t == nil || t.OuterVlanId == nil { + return 0 + } + return *t.OuterVlanId +} + +// SetInnerVlanId sets the value of the leaf InnerVlanId in the Interface_Subinterface_Vlan_Match_DoubleTagged +// struct. +func (t *Interface_Subinterface_Vlan_Match_DoubleTagged) SetInnerVlanId(v uint16) { + t.InnerVlanId = &v +} + +// SetOuterVlanId sets the value of the leaf OuterVlanId in the Interface_Subinterface_Vlan_Match_DoubleTagged +// struct. +func (t *Interface_Subinterface_Vlan_Match_DoubleTagged) SetOuterVlanId(v uint16) { + t.OuterVlanId = &v +} + +// PopulateDefaults recursively populates unset leaf fields in the Interface_Subinterface_Vlan_Match_DoubleTagged +// with default values as specified in the YANG schema, instantiating any nil +// container fields. +func (t *Interface_Subinterface_Vlan_Match_DoubleTagged) PopulateDefaults() { + if t == nil { + return + } + ygot.BuildEmptyTree(t) +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_Subinterface_Vlan_Match_DoubleTagged) ΛValidate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["Interface_Subinterface_Vlan_Match_DoubleTagged"], t, opts...); err != nil { + return err + } + return nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_Subinterface_Vlan_Match_DoubleTagged) Validate(opts ...ygot.ValidationOption) error { + return t.ΛValidate(opts...) +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *Interface_Subinterface_Vlan_Match_DoubleTagged) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// ΛBelongingModule returns the name of the module that defines the namespace +// of Interface_Subinterface_Vlan_Match_DoubleTagged. +func (*Interface_Subinterface_Vlan_Match_DoubleTagged) ΛBelongingModule() string { + return "openconfig-vlan" +} + +// Interface_Subinterface_Vlan_Match_DoubleTaggedInnerList represents the /openconfig-interfaces/interfaces/interface/subinterfaces/subinterface/vlan/match/double-tagged-inner-list YANG schema element. +type Interface_Subinterface_Vlan_Match_DoubleTaggedInnerList struct { + InnerVlanIds []uint16 `path:"config/inner-vlan-ids" module:"openconfig-vlan/openconfig-vlan" shadow-path:"state/inner-vlan-ids" shadow-module:"openconfig-vlan/openconfig-vlan"` + OuterVlanId *uint16 `path:"config/outer-vlan-id" module:"openconfig-vlan/openconfig-vlan" shadow-path:"state/outer-vlan-id" shadow-module:"openconfig-vlan/openconfig-vlan"` +} + +// IsYANGGoStruct ensures that Interface_Subinterface_Vlan_Match_DoubleTaggedInnerList implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*Interface_Subinterface_Vlan_Match_DoubleTaggedInnerList) IsYANGGoStruct() {} + +// GetInnerVlanIds retrieves the value of the leaf InnerVlanIds from the Interface_Subinterface_Vlan_Match_DoubleTaggedInnerList +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if InnerVlanIds is set, it can +// safely use t.GetInnerVlanIds() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.InnerVlanIds == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Vlan_Match_DoubleTaggedInnerList) GetInnerVlanIds() []uint16 { + if t == nil || t.InnerVlanIds == nil { + return nil + } + return t.InnerVlanIds +} + +// GetOuterVlanId retrieves the value of the leaf OuterVlanId from the Interface_Subinterface_Vlan_Match_DoubleTaggedInnerList +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if OuterVlanId is set, it can +// safely use t.GetOuterVlanId() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.OuterVlanId == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Vlan_Match_DoubleTaggedInnerList) GetOuterVlanId() uint16 { + if t == nil || t.OuterVlanId == nil { + return 0 + } + return *t.OuterVlanId +} + +// SetInnerVlanIds sets the value of the leaf InnerVlanIds in the Interface_Subinterface_Vlan_Match_DoubleTaggedInnerList +// struct. +func (t *Interface_Subinterface_Vlan_Match_DoubleTaggedInnerList) SetInnerVlanIds(v []uint16) { + t.InnerVlanIds = v +} + +// SetOuterVlanId sets the value of the leaf OuterVlanId in the Interface_Subinterface_Vlan_Match_DoubleTaggedInnerList +// struct. +func (t *Interface_Subinterface_Vlan_Match_DoubleTaggedInnerList) SetOuterVlanId(v uint16) { + t.OuterVlanId = &v +} + +// PopulateDefaults recursively populates unset leaf fields in the Interface_Subinterface_Vlan_Match_DoubleTaggedInnerList +// with default values as specified in the YANG schema, instantiating any nil +// container fields. +func (t *Interface_Subinterface_Vlan_Match_DoubleTaggedInnerList) PopulateDefaults() { + if t == nil { + return + } + ygot.BuildEmptyTree(t) +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_Subinterface_Vlan_Match_DoubleTaggedInnerList) ΛValidate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["Interface_Subinterface_Vlan_Match_DoubleTaggedInnerList"], t, opts...); err != nil { + return err + } + return nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_Subinterface_Vlan_Match_DoubleTaggedInnerList) Validate(opts ...ygot.ValidationOption) error { + return t.ΛValidate(opts...) +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *Interface_Subinterface_Vlan_Match_DoubleTaggedInnerList) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// ΛBelongingModule returns the name of the module that defines the namespace +// of Interface_Subinterface_Vlan_Match_DoubleTaggedInnerList. +func (*Interface_Subinterface_Vlan_Match_DoubleTaggedInnerList) ΛBelongingModule() string { + return "openconfig-vlan" +} + +// Interface_Subinterface_Vlan_Match_DoubleTaggedInnerOuterRange represents the /openconfig-interfaces/interfaces/interface/subinterfaces/subinterface/vlan/match/double-tagged-inner-outer-range YANG schema element. +type Interface_Subinterface_Vlan_Match_DoubleTaggedInnerOuterRange struct { + InnerHighVlanId *uint16 `path:"config/inner-high-vlan-id" module:"openconfig-vlan/openconfig-vlan" shadow-path:"state/inner-high-vlan-id" shadow-module:"openconfig-vlan/openconfig-vlan"` + InnerLowVlanId *uint16 `path:"config/inner-low-vlan-id" module:"openconfig-vlan/openconfig-vlan" shadow-path:"state/inner-low-vlan-id" shadow-module:"openconfig-vlan/openconfig-vlan"` + OuterHighVlanId *uint16 `path:"config/outer-high-vlan-id" module:"openconfig-vlan/openconfig-vlan" shadow-path:"state/outer-high-vlan-id" shadow-module:"openconfig-vlan/openconfig-vlan"` + OuterLowVlanId *uint16 `path:"config/outer-low-vlan-id" module:"openconfig-vlan/openconfig-vlan" shadow-path:"state/outer-low-vlan-id" shadow-module:"openconfig-vlan/openconfig-vlan"` +} + +// IsYANGGoStruct ensures that Interface_Subinterface_Vlan_Match_DoubleTaggedInnerOuterRange implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*Interface_Subinterface_Vlan_Match_DoubleTaggedInnerOuterRange) IsYANGGoStruct() {} + +// GetInnerHighVlanId retrieves the value of the leaf InnerHighVlanId from the Interface_Subinterface_Vlan_Match_DoubleTaggedInnerOuterRange +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if InnerHighVlanId is set, it can +// safely use t.GetInnerHighVlanId() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.InnerHighVlanId == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Vlan_Match_DoubleTaggedInnerOuterRange) GetInnerHighVlanId() uint16 { + if t == nil || t.InnerHighVlanId == nil { + return 0 + } + return *t.InnerHighVlanId +} + +// GetInnerLowVlanId retrieves the value of the leaf InnerLowVlanId from the Interface_Subinterface_Vlan_Match_DoubleTaggedInnerOuterRange +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if InnerLowVlanId is set, it can +// safely use t.GetInnerLowVlanId() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.InnerLowVlanId == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Vlan_Match_DoubleTaggedInnerOuterRange) GetInnerLowVlanId() uint16 { + if t == nil || t.InnerLowVlanId == nil { + return 0 + } + return *t.InnerLowVlanId +} + +// GetOuterHighVlanId retrieves the value of the leaf OuterHighVlanId from the Interface_Subinterface_Vlan_Match_DoubleTaggedInnerOuterRange +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if OuterHighVlanId is set, it can +// safely use t.GetOuterHighVlanId() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.OuterHighVlanId == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Vlan_Match_DoubleTaggedInnerOuterRange) GetOuterHighVlanId() uint16 { + if t == nil || t.OuterHighVlanId == nil { + return 0 + } + return *t.OuterHighVlanId +} + +// GetOuterLowVlanId retrieves the value of the leaf OuterLowVlanId from the Interface_Subinterface_Vlan_Match_DoubleTaggedInnerOuterRange +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if OuterLowVlanId is set, it can +// safely use t.GetOuterLowVlanId() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.OuterLowVlanId == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Vlan_Match_DoubleTaggedInnerOuterRange) GetOuterLowVlanId() uint16 { + if t == nil || t.OuterLowVlanId == nil { + return 0 + } + return *t.OuterLowVlanId +} + +// SetInnerHighVlanId sets the value of the leaf InnerHighVlanId in the Interface_Subinterface_Vlan_Match_DoubleTaggedInnerOuterRange +// struct. +func (t *Interface_Subinterface_Vlan_Match_DoubleTaggedInnerOuterRange) SetInnerHighVlanId(v uint16) { + t.InnerHighVlanId = &v +} + +// SetInnerLowVlanId sets the value of the leaf InnerLowVlanId in the Interface_Subinterface_Vlan_Match_DoubleTaggedInnerOuterRange +// struct. +func (t *Interface_Subinterface_Vlan_Match_DoubleTaggedInnerOuterRange) SetInnerLowVlanId(v uint16) { + t.InnerLowVlanId = &v +} + +// SetOuterHighVlanId sets the value of the leaf OuterHighVlanId in the Interface_Subinterface_Vlan_Match_DoubleTaggedInnerOuterRange +// struct. +func (t *Interface_Subinterface_Vlan_Match_DoubleTaggedInnerOuterRange) SetOuterHighVlanId(v uint16) { + t.OuterHighVlanId = &v +} + +// SetOuterLowVlanId sets the value of the leaf OuterLowVlanId in the Interface_Subinterface_Vlan_Match_DoubleTaggedInnerOuterRange +// struct. +func (t *Interface_Subinterface_Vlan_Match_DoubleTaggedInnerOuterRange) SetOuterLowVlanId(v uint16) { + t.OuterLowVlanId = &v +} + +// PopulateDefaults recursively populates unset leaf fields in the Interface_Subinterface_Vlan_Match_DoubleTaggedInnerOuterRange +// with default values as specified in the YANG schema, instantiating any nil +// container fields. +func (t *Interface_Subinterface_Vlan_Match_DoubleTaggedInnerOuterRange) PopulateDefaults() { + if t == nil { + return + } + ygot.BuildEmptyTree(t) +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_Subinterface_Vlan_Match_DoubleTaggedInnerOuterRange) ΛValidate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["Interface_Subinterface_Vlan_Match_DoubleTaggedInnerOuterRange"], t, opts...); err != nil { + return err + } + return nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_Subinterface_Vlan_Match_DoubleTaggedInnerOuterRange) Validate(opts ...ygot.ValidationOption) error { + return t.ΛValidate(opts...) +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *Interface_Subinterface_Vlan_Match_DoubleTaggedInnerOuterRange) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// ΛBelongingModule returns the name of the module that defines the namespace +// of Interface_Subinterface_Vlan_Match_DoubleTaggedInnerOuterRange. +func (*Interface_Subinterface_Vlan_Match_DoubleTaggedInnerOuterRange) ΛBelongingModule() string { + return "openconfig-vlan" +} + +// Interface_Subinterface_Vlan_Match_DoubleTaggedInnerRange represents the /openconfig-interfaces/interfaces/interface/subinterfaces/subinterface/vlan/match/double-tagged-inner-range YANG schema element. +type Interface_Subinterface_Vlan_Match_DoubleTaggedInnerRange struct { + InnerHighVlanId *uint16 `path:"config/inner-high-vlan-id" module:"openconfig-vlan/openconfig-vlan" shadow-path:"state/inner-high-vlan-id" shadow-module:"openconfig-vlan/openconfig-vlan"` + InnerLowVlanId *uint16 `path:"config/inner-low-vlan-id" module:"openconfig-vlan/openconfig-vlan" shadow-path:"state/inner-low-vlan-id" shadow-module:"openconfig-vlan/openconfig-vlan"` + OuterVlanId []uint16 `path:"config/outer-vlan-id" module:"openconfig-vlan/openconfig-vlan" shadow-path:"state/outer-vlan-id" shadow-module:"openconfig-vlan/openconfig-vlan"` +} + +// IsYANGGoStruct ensures that Interface_Subinterface_Vlan_Match_DoubleTaggedInnerRange implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*Interface_Subinterface_Vlan_Match_DoubleTaggedInnerRange) IsYANGGoStruct() {} + +// GetInnerHighVlanId retrieves the value of the leaf InnerHighVlanId from the Interface_Subinterface_Vlan_Match_DoubleTaggedInnerRange +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if InnerHighVlanId is set, it can +// safely use t.GetInnerHighVlanId() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.InnerHighVlanId == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Vlan_Match_DoubleTaggedInnerRange) GetInnerHighVlanId() uint16 { + if t == nil || t.InnerHighVlanId == nil { + return 0 + } + return *t.InnerHighVlanId +} + +// GetInnerLowVlanId retrieves the value of the leaf InnerLowVlanId from the Interface_Subinterface_Vlan_Match_DoubleTaggedInnerRange +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if InnerLowVlanId is set, it can +// safely use t.GetInnerLowVlanId() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.InnerLowVlanId == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Vlan_Match_DoubleTaggedInnerRange) GetInnerLowVlanId() uint16 { + if t == nil || t.InnerLowVlanId == nil { + return 0 + } + return *t.InnerLowVlanId +} + +// GetOuterVlanId retrieves the value of the leaf OuterVlanId from the Interface_Subinterface_Vlan_Match_DoubleTaggedInnerRange +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if OuterVlanId is set, it can +// safely use t.GetOuterVlanId() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.OuterVlanId == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Vlan_Match_DoubleTaggedInnerRange) GetOuterVlanId() []uint16 { + if t == nil || t.OuterVlanId == nil { + return nil + } + return t.OuterVlanId +} + +// SetInnerHighVlanId sets the value of the leaf InnerHighVlanId in the Interface_Subinterface_Vlan_Match_DoubleTaggedInnerRange +// struct. +func (t *Interface_Subinterface_Vlan_Match_DoubleTaggedInnerRange) SetInnerHighVlanId(v uint16) { + t.InnerHighVlanId = &v +} + +// SetInnerLowVlanId sets the value of the leaf InnerLowVlanId in the Interface_Subinterface_Vlan_Match_DoubleTaggedInnerRange +// struct. +func (t *Interface_Subinterface_Vlan_Match_DoubleTaggedInnerRange) SetInnerLowVlanId(v uint16) { + t.InnerLowVlanId = &v +} + +// SetOuterVlanId sets the value of the leaf OuterVlanId in the Interface_Subinterface_Vlan_Match_DoubleTaggedInnerRange +// struct. +func (t *Interface_Subinterface_Vlan_Match_DoubleTaggedInnerRange) SetOuterVlanId(v []uint16) { + t.OuterVlanId = v +} + +// PopulateDefaults recursively populates unset leaf fields in the Interface_Subinterface_Vlan_Match_DoubleTaggedInnerRange +// with default values as specified in the YANG schema, instantiating any nil +// container fields. +func (t *Interface_Subinterface_Vlan_Match_DoubleTaggedInnerRange) PopulateDefaults() { + if t == nil { + return + } + ygot.BuildEmptyTree(t) +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_Subinterface_Vlan_Match_DoubleTaggedInnerRange) ΛValidate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["Interface_Subinterface_Vlan_Match_DoubleTaggedInnerRange"], t, opts...); err != nil { + return err + } + return nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_Subinterface_Vlan_Match_DoubleTaggedInnerRange) Validate(opts ...ygot.ValidationOption) error { + return t.ΛValidate(opts...) +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *Interface_Subinterface_Vlan_Match_DoubleTaggedInnerRange) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// ΛBelongingModule returns the name of the module that defines the namespace +// of Interface_Subinterface_Vlan_Match_DoubleTaggedInnerRange. +func (*Interface_Subinterface_Vlan_Match_DoubleTaggedInnerRange) ΛBelongingModule() string { + return "openconfig-vlan" +} + +// Interface_Subinterface_Vlan_Match_DoubleTaggedOuterList represents the /openconfig-interfaces/interfaces/interface/subinterfaces/subinterface/vlan/match/double-tagged-outer-list YANG schema element. +type Interface_Subinterface_Vlan_Match_DoubleTaggedOuterList struct { + InnerVlanId *uint16 `path:"config/inner-vlan-id" module:"openconfig-vlan/openconfig-vlan" shadow-path:"state/inner-vlan-id" shadow-module:"openconfig-vlan/openconfig-vlan"` + OuterVlanIds []uint16 `path:"config/outer-vlan-ids" module:"openconfig-vlan/openconfig-vlan" shadow-path:"state/outer-vlan-ids" shadow-module:"openconfig-vlan/openconfig-vlan"` +} + +// IsYANGGoStruct ensures that Interface_Subinterface_Vlan_Match_DoubleTaggedOuterList implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*Interface_Subinterface_Vlan_Match_DoubleTaggedOuterList) IsYANGGoStruct() {} + +// GetInnerVlanId retrieves the value of the leaf InnerVlanId from the Interface_Subinterface_Vlan_Match_DoubleTaggedOuterList +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if InnerVlanId is set, it can +// safely use t.GetInnerVlanId() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.InnerVlanId == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Vlan_Match_DoubleTaggedOuterList) GetInnerVlanId() uint16 { + if t == nil || t.InnerVlanId == nil { + return 0 + } + return *t.InnerVlanId +} + +// GetOuterVlanIds retrieves the value of the leaf OuterVlanIds from the Interface_Subinterface_Vlan_Match_DoubleTaggedOuterList +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if OuterVlanIds is set, it can +// safely use t.GetOuterVlanIds() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.OuterVlanIds == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Vlan_Match_DoubleTaggedOuterList) GetOuterVlanIds() []uint16 { + if t == nil || t.OuterVlanIds == nil { + return nil + } + return t.OuterVlanIds +} + +// SetInnerVlanId sets the value of the leaf InnerVlanId in the Interface_Subinterface_Vlan_Match_DoubleTaggedOuterList +// struct. +func (t *Interface_Subinterface_Vlan_Match_DoubleTaggedOuterList) SetInnerVlanId(v uint16) { + t.InnerVlanId = &v +} + +// SetOuterVlanIds sets the value of the leaf OuterVlanIds in the Interface_Subinterface_Vlan_Match_DoubleTaggedOuterList +// struct. +func (t *Interface_Subinterface_Vlan_Match_DoubleTaggedOuterList) SetOuterVlanIds(v []uint16) { + t.OuterVlanIds = v +} + +// PopulateDefaults recursively populates unset leaf fields in the Interface_Subinterface_Vlan_Match_DoubleTaggedOuterList +// with default values as specified in the YANG schema, instantiating any nil +// container fields. +func (t *Interface_Subinterface_Vlan_Match_DoubleTaggedOuterList) PopulateDefaults() { + if t == nil { + return + } + ygot.BuildEmptyTree(t) +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_Subinterface_Vlan_Match_DoubleTaggedOuterList) ΛValidate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["Interface_Subinterface_Vlan_Match_DoubleTaggedOuterList"], t, opts...); err != nil { + return err + } + return nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_Subinterface_Vlan_Match_DoubleTaggedOuterList) Validate(opts ...ygot.ValidationOption) error { + return t.ΛValidate(opts...) +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *Interface_Subinterface_Vlan_Match_DoubleTaggedOuterList) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// ΛBelongingModule returns the name of the module that defines the namespace +// of Interface_Subinterface_Vlan_Match_DoubleTaggedOuterList. +func (*Interface_Subinterface_Vlan_Match_DoubleTaggedOuterList) ΛBelongingModule() string { + return "openconfig-vlan" +} + +// Interface_Subinterface_Vlan_Match_DoubleTaggedOuterRange represents the /openconfig-interfaces/interfaces/interface/subinterfaces/subinterface/vlan/match/double-tagged-outer-range YANG schema element. +type Interface_Subinterface_Vlan_Match_DoubleTaggedOuterRange struct { + InnerVlanId *uint16 `path:"config/inner-vlan-id" module:"openconfig-vlan/openconfig-vlan" shadow-path:"state/inner-vlan-id" shadow-module:"openconfig-vlan/openconfig-vlan"` + OuterHighVlanId *uint16 `path:"config/outer-high-vlan-id" module:"openconfig-vlan/openconfig-vlan" shadow-path:"state/outer-high-vlan-id" shadow-module:"openconfig-vlan/openconfig-vlan"` + OuterLowVlanId *uint16 `path:"config/outer-low-vlan-id" module:"openconfig-vlan/openconfig-vlan" shadow-path:"state/outer-low-vlan-id" shadow-module:"openconfig-vlan/openconfig-vlan"` +} + +// IsYANGGoStruct ensures that Interface_Subinterface_Vlan_Match_DoubleTaggedOuterRange implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*Interface_Subinterface_Vlan_Match_DoubleTaggedOuterRange) IsYANGGoStruct() {} + +// GetInnerVlanId retrieves the value of the leaf InnerVlanId from the Interface_Subinterface_Vlan_Match_DoubleTaggedOuterRange +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if InnerVlanId is set, it can +// safely use t.GetInnerVlanId() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.InnerVlanId == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Vlan_Match_DoubleTaggedOuterRange) GetInnerVlanId() uint16 { + if t == nil || t.InnerVlanId == nil { + return 0 + } + return *t.InnerVlanId +} + +// GetOuterHighVlanId retrieves the value of the leaf OuterHighVlanId from the Interface_Subinterface_Vlan_Match_DoubleTaggedOuterRange +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if OuterHighVlanId is set, it can +// safely use t.GetOuterHighVlanId() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.OuterHighVlanId == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Vlan_Match_DoubleTaggedOuterRange) GetOuterHighVlanId() uint16 { + if t == nil || t.OuterHighVlanId == nil { + return 0 + } + return *t.OuterHighVlanId +} + +// GetOuterLowVlanId retrieves the value of the leaf OuterLowVlanId from the Interface_Subinterface_Vlan_Match_DoubleTaggedOuterRange +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if OuterLowVlanId is set, it can +// safely use t.GetOuterLowVlanId() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.OuterLowVlanId == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Vlan_Match_DoubleTaggedOuterRange) GetOuterLowVlanId() uint16 { + if t == nil || t.OuterLowVlanId == nil { + return 0 + } + return *t.OuterLowVlanId +} + +// SetInnerVlanId sets the value of the leaf InnerVlanId in the Interface_Subinterface_Vlan_Match_DoubleTaggedOuterRange +// struct. +func (t *Interface_Subinterface_Vlan_Match_DoubleTaggedOuterRange) SetInnerVlanId(v uint16) { + t.InnerVlanId = &v +} + +// SetOuterHighVlanId sets the value of the leaf OuterHighVlanId in the Interface_Subinterface_Vlan_Match_DoubleTaggedOuterRange +// struct. +func (t *Interface_Subinterface_Vlan_Match_DoubleTaggedOuterRange) SetOuterHighVlanId(v uint16) { + t.OuterHighVlanId = &v +} + +// SetOuterLowVlanId sets the value of the leaf OuterLowVlanId in the Interface_Subinterface_Vlan_Match_DoubleTaggedOuterRange +// struct. +func (t *Interface_Subinterface_Vlan_Match_DoubleTaggedOuterRange) SetOuterLowVlanId(v uint16) { + t.OuterLowVlanId = &v +} + +// PopulateDefaults recursively populates unset leaf fields in the Interface_Subinterface_Vlan_Match_DoubleTaggedOuterRange +// with default values as specified in the YANG schema, instantiating any nil +// container fields. +func (t *Interface_Subinterface_Vlan_Match_DoubleTaggedOuterRange) PopulateDefaults() { + if t == nil { + return + } + ygot.BuildEmptyTree(t) +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_Subinterface_Vlan_Match_DoubleTaggedOuterRange) ΛValidate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["Interface_Subinterface_Vlan_Match_DoubleTaggedOuterRange"], t, opts...); err != nil { + return err + } + return nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_Subinterface_Vlan_Match_DoubleTaggedOuterRange) Validate(opts ...ygot.ValidationOption) error { + return t.ΛValidate(opts...) +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *Interface_Subinterface_Vlan_Match_DoubleTaggedOuterRange) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// ΛBelongingModule returns the name of the module that defines the namespace +// of Interface_Subinterface_Vlan_Match_DoubleTaggedOuterRange. +func (*Interface_Subinterface_Vlan_Match_DoubleTaggedOuterRange) ΛBelongingModule() string { + return "openconfig-vlan" +} + +// Interface_Subinterface_Vlan_Match_SingleTagged represents the /openconfig-interfaces/interfaces/interface/subinterfaces/subinterface/vlan/match/single-tagged YANG schema element. +type Interface_Subinterface_Vlan_Match_SingleTagged struct { + VlanId *uint16 `path:"config/vlan-id" module:"openconfig-vlan/openconfig-vlan" shadow-path:"state/vlan-id" shadow-module:"openconfig-vlan/openconfig-vlan"` +} + +// IsYANGGoStruct ensures that Interface_Subinterface_Vlan_Match_SingleTagged implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*Interface_Subinterface_Vlan_Match_SingleTagged) IsYANGGoStruct() {} + +// GetVlanId retrieves the value of the leaf VlanId from the Interface_Subinterface_Vlan_Match_SingleTagged +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if VlanId is set, it can +// safely use t.GetVlanId() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.VlanId == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Vlan_Match_SingleTagged) GetVlanId() uint16 { + if t == nil || t.VlanId == nil { + return 0 + } + return *t.VlanId +} + +// SetVlanId sets the value of the leaf VlanId in the Interface_Subinterface_Vlan_Match_SingleTagged +// struct. +func (t *Interface_Subinterface_Vlan_Match_SingleTagged) SetVlanId(v uint16) { + t.VlanId = &v +} + +// PopulateDefaults recursively populates unset leaf fields in the Interface_Subinterface_Vlan_Match_SingleTagged +// with default values as specified in the YANG schema, instantiating any nil +// container fields. +func (t *Interface_Subinterface_Vlan_Match_SingleTagged) PopulateDefaults() { + if t == nil { + return + } + ygot.BuildEmptyTree(t) +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_Subinterface_Vlan_Match_SingleTagged) ΛValidate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["Interface_Subinterface_Vlan_Match_SingleTagged"], t, opts...); err != nil { + return err + } + return nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_Subinterface_Vlan_Match_SingleTagged) Validate(opts ...ygot.ValidationOption) error { + return t.ΛValidate(opts...) +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *Interface_Subinterface_Vlan_Match_SingleTagged) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// ΛBelongingModule returns the name of the module that defines the namespace +// of Interface_Subinterface_Vlan_Match_SingleTagged. +func (*Interface_Subinterface_Vlan_Match_SingleTagged) ΛBelongingModule() string { + return "openconfig-vlan" +} + +// Interface_Subinterface_Vlan_Match_SingleTaggedList represents the /openconfig-interfaces/interfaces/interface/subinterfaces/subinterface/vlan/match/single-tagged-list YANG schema element. +type Interface_Subinterface_Vlan_Match_SingleTaggedList struct { + VlanIds []uint16 `path:"config/vlan-ids" module:"openconfig-vlan/openconfig-vlan" shadow-path:"state/vlan-ids" shadow-module:"openconfig-vlan/openconfig-vlan"` +} + +// IsYANGGoStruct ensures that Interface_Subinterface_Vlan_Match_SingleTaggedList implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*Interface_Subinterface_Vlan_Match_SingleTaggedList) IsYANGGoStruct() {} + +// GetVlanIds retrieves the value of the leaf VlanIds from the Interface_Subinterface_Vlan_Match_SingleTaggedList +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if VlanIds is set, it can +// safely use t.GetVlanIds() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.VlanIds == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Vlan_Match_SingleTaggedList) GetVlanIds() []uint16 { + if t == nil || t.VlanIds == nil { + return nil + } + return t.VlanIds +} + +// SetVlanIds sets the value of the leaf VlanIds in the Interface_Subinterface_Vlan_Match_SingleTaggedList +// struct. +func (t *Interface_Subinterface_Vlan_Match_SingleTaggedList) SetVlanIds(v []uint16) { + t.VlanIds = v +} + +// PopulateDefaults recursively populates unset leaf fields in the Interface_Subinterface_Vlan_Match_SingleTaggedList +// with default values as specified in the YANG schema, instantiating any nil +// container fields. +func (t *Interface_Subinterface_Vlan_Match_SingleTaggedList) PopulateDefaults() { + if t == nil { + return + } + ygot.BuildEmptyTree(t) +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_Subinterface_Vlan_Match_SingleTaggedList) ΛValidate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["Interface_Subinterface_Vlan_Match_SingleTaggedList"], t, opts...); err != nil { + return err + } + return nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_Subinterface_Vlan_Match_SingleTaggedList) Validate(opts ...ygot.ValidationOption) error { + return t.ΛValidate(opts...) +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *Interface_Subinterface_Vlan_Match_SingleTaggedList) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// ΛBelongingModule returns the name of the module that defines the namespace +// of Interface_Subinterface_Vlan_Match_SingleTaggedList. +func (*Interface_Subinterface_Vlan_Match_SingleTaggedList) ΛBelongingModule() string { + return "openconfig-vlan" +} + +// Interface_Subinterface_Vlan_Match_SingleTaggedRange represents the /openconfig-interfaces/interfaces/interface/subinterfaces/subinterface/vlan/match/single-tagged-range YANG schema element. +type Interface_Subinterface_Vlan_Match_SingleTaggedRange struct { + HighVlanId *uint16 `path:"config/high-vlan-id" module:"openconfig-vlan/openconfig-vlan" shadow-path:"state/high-vlan-id" shadow-module:"openconfig-vlan/openconfig-vlan"` + LowVlanId *uint16 `path:"config/low-vlan-id" module:"openconfig-vlan/openconfig-vlan" shadow-path:"state/low-vlan-id" shadow-module:"openconfig-vlan/openconfig-vlan"` +} + +// IsYANGGoStruct ensures that Interface_Subinterface_Vlan_Match_SingleTaggedRange implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*Interface_Subinterface_Vlan_Match_SingleTaggedRange) IsYANGGoStruct() {} + +// GetHighVlanId retrieves the value of the leaf HighVlanId from the Interface_Subinterface_Vlan_Match_SingleTaggedRange +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if HighVlanId is set, it can +// safely use t.GetHighVlanId() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.HighVlanId == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Vlan_Match_SingleTaggedRange) GetHighVlanId() uint16 { + if t == nil || t.HighVlanId == nil { + return 0 + } + return *t.HighVlanId +} + +// GetLowVlanId retrieves the value of the leaf LowVlanId from the Interface_Subinterface_Vlan_Match_SingleTaggedRange +// struct. If the field is unset but has a default value in the YANG schema, +// then the default value will be returned. +// Caution should be exercised whilst using this method since when without a +// default value, it will return the Go zero value if the field is explicitly +// unset. If the caller explicitly does not care if LowVlanId is set, it can +// safely use t.GetLowVlanId() to retrieve the value. In the case that the +// caller has different actions based on whether the leaf is set or unset, it +// should use 'if t.LowVlanId == nil' before retrieving the leaf's value. +func (t *Interface_Subinterface_Vlan_Match_SingleTaggedRange) GetLowVlanId() uint16 { + if t == nil || t.LowVlanId == nil { + return 0 + } + return *t.LowVlanId +} + +// SetHighVlanId sets the value of the leaf HighVlanId in the Interface_Subinterface_Vlan_Match_SingleTaggedRange +// struct. +func (t *Interface_Subinterface_Vlan_Match_SingleTaggedRange) SetHighVlanId(v uint16) { + t.HighVlanId = &v +} + +// SetLowVlanId sets the value of the leaf LowVlanId in the Interface_Subinterface_Vlan_Match_SingleTaggedRange +// struct. +func (t *Interface_Subinterface_Vlan_Match_SingleTaggedRange) SetLowVlanId(v uint16) { + t.LowVlanId = &v +} + +// PopulateDefaults recursively populates unset leaf fields in the Interface_Subinterface_Vlan_Match_SingleTaggedRange +// with default values as specified in the YANG schema, instantiating any nil +// container fields. +func (t *Interface_Subinterface_Vlan_Match_SingleTaggedRange) PopulateDefaults() { + if t == nil { + return + } + ygot.BuildEmptyTree(t) +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_Subinterface_Vlan_Match_SingleTaggedRange) ΛValidate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["Interface_Subinterface_Vlan_Match_SingleTaggedRange"], t, opts...); err != nil { + return err + } + return nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Interface_Subinterface_Vlan_Match_SingleTaggedRange) Validate(opts ...ygot.ValidationOption) error { + return t.ΛValidate(opts...) +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *Interface_Subinterface_Vlan_Match_SingleTaggedRange) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// ΛBelongingModule returns the name of the module that defines the namespace +// of Interface_Subinterface_Vlan_Match_SingleTaggedRange. +func (*Interface_Subinterface_Vlan_Match_SingleTaggedRange) ΛBelongingModule() string { + return "openconfig-vlan" +} diff --git a/internal/provider/openconfig/union.go b/internal/provider/openconfig/union.go new file mode 100644 index 00000000..bb89e8b0 --- /dev/null +++ b/internal/provider/openconfig/union.go @@ -0,0 +1,202 @@ +// SPDX-FileCopyrightText: 2025 SAP SE or an SAP affiliate company and IronCore contributors +// SPDX-License-Identifier: Apache-2.0 + +/* +Package openconfig is a generated package which contains definitions +of structs which represent a YANG schema. The generated schema can be +compressed by a series of transformations (compression was true +in this case). + +This package was generated by ygnmi version: v0.12.0: (ygot: v0.29.20) +using the following YANG input files: + - ./yang/release/models/interfaces/openconfig-interfaces.yang + - ./yang/release/models/interfaces/openconfig-if-ip.yang + - ./yang/third_party/ietf/iana-if-type.yang + +Imported modules were sourced from: + - ./yang/doc + - ./yang/regexp-tests + - ./yang/release/models + - ./yang/release/models/acl + - ./yang/release/models/aft + - ./yang/release/models/ate + - ./yang/release/models/bfd + - ./yang/release/models/bgp + - ./yang/release/models/catalog + - ./yang/release/models/defined-sets + - ./yang/release/models/devices-manifest + - ./yang/release/models/ethernet-segments + - ./yang/release/models/extensions + - ./yang/release/models/firewall + - ./yang/release/models/flex-algo + - ./yang/release/models/gnpsi + - ./yang/release/models/gnsi + - ./yang/release/models/gribi + - ./yang/release/models/grpc + - ./yang/release/models/interfaces + - ./yang/release/models/isis + - ./yang/release/models/keychain + - ./yang/release/models/lacp + - ./yang/release/models/lldp + - ./yang/release/models/local-routing + - ./yang/release/models/macsec + - ./yang/release/models/mpls + - ./yang/release/models/multicast + - ./yang/release/models/network-instance + - ./yang/release/models/oam + - ./yang/release/models/openflow + - ./yang/release/models/optical-transport + - ./yang/release/models/ospf + - ./yang/release/models/p4rt + - ./yang/release/models/pcep + - ./yang/release/models/platform + - ./yang/release/models/policy + - ./yang/release/models/policy-forwarding + - ./yang/release/models/probes + - ./yang/release/models/ptp + - ./yang/release/models/qos + - ./yang/release/models/relay-agent + - ./yang/release/models/rib + - ./yang/release/models/sampling + - ./yang/release/models/segment-routing + - ./yang/release/models/stp + - ./yang/release/models/system + - ./yang/release/models/telemetry + - ./yang/release/models/types + - ./yang/release/models/vlan + - ./yang/release/models/wifi + - ./yang/third_party/ietf +*/ +package openconfig + +import ( + "fmt" +) + +// Interface_Aggregation_SwitchedVlan_TrunkVlans_Union is an interface that is implemented by valid types for the union +// for the leaf /openconfig-interfaces/interfaces/interface/aggregation/switched-vlan/config/trunk-vlans within the YANG schema. +// Union type can be one of [UnionString, UnionUint16]. +type Interface_Aggregation_SwitchedVlan_TrunkVlans_Union interface { + // Union type can be one of [UnionString, UnionUint16] + Documentation_for_Interface_Aggregation_SwitchedVlan_TrunkVlans_Union() +} + +// Documentation_for_Interface_Aggregation_SwitchedVlan_TrunkVlans_Union ensures that UnionString +// implements the Interface_Aggregation_SwitchedVlan_TrunkVlans_Union interface. +func (UnionString) Documentation_for_Interface_Aggregation_SwitchedVlan_TrunkVlans_Union() {} + +// Documentation_for_Interface_Aggregation_SwitchedVlan_TrunkVlans_Union ensures that UnionUint16 +// implements the Interface_Aggregation_SwitchedVlan_TrunkVlans_Union interface. +func (UnionUint16) Documentation_for_Interface_Aggregation_SwitchedVlan_TrunkVlans_Union() {} + +// To_Interface_Aggregation_SwitchedVlan_TrunkVlans_Union takes an input interface{} and attempts to convert it to a struct +// which implements the Interface_Aggregation_SwitchedVlan_TrunkVlans_Union union. It returns an error if the interface{} supplied +// cannot be converted to a type within the union. +func (t *Interface_Aggregation_SwitchedVlan) To_Interface_Aggregation_SwitchedVlan_TrunkVlans_Union(i interface{}) (Interface_Aggregation_SwitchedVlan_TrunkVlans_Union, error) { + if v, ok := i.(Interface_Aggregation_SwitchedVlan_TrunkVlans_Union); ok { + return v, nil + } + switch v := i.(type) { + case string: + return UnionString(v), nil + case uint16: + return UnionUint16(v), nil + } + return nil, fmt.Errorf("cannot convert %v to Interface_Aggregation_SwitchedVlan_TrunkVlans_Union, unknown union type, got: %T, want any of [string, uint16]", i, i) +} + +// Interface_Ethernet_SwitchedVlan_TrunkVlans_Union is an interface that is implemented by valid types for the union +// for the leaf /openconfig-interfaces/interfaces/interface/ethernet/switched-vlan/config/trunk-vlans within the YANG schema. +// Union type can be one of [UnionString, UnionUint16]. +type Interface_Ethernet_SwitchedVlan_TrunkVlans_Union interface { + // Union type can be one of [UnionString, UnionUint16] + Documentation_for_Interface_Ethernet_SwitchedVlan_TrunkVlans_Union() +} + +// Documentation_for_Interface_Ethernet_SwitchedVlan_TrunkVlans_Union ensures that UnionString +// implements the Interface_Ethernet_SwitchedVlan_TrunkVlans_Union interface. +func (UnionString) Documentation_for_Interface_Ethernet_SwitchedVlan_TrunkVlans_Union() {} + +// Documentation_for_Interface_Ethernet_SwitchedVlan_TrunkVlans_Union ensures that UnionUint16 +// implements the Interface_Ethernet_SwitchedVlan_TrunkVlans_Union interface. +func (UnionUint16) Documentation_for_Interface_Ethernet_SwitchedVlan_TrunkVlans_Union() {} + +// To_Interface_Ethernet_SwitchedVlan_TrunkVlans_Union takes an input interface{} and attempts to convert it to a struct +// which implements the Interface_Ethernet_SwitchedVlan_TrunkVlans_Union union. It returns an error if the interface{} supplied +// cannot be converted to a type within the union. +func (t *Interface_Ethernet_SwitchedVlan) To_Interface_Ethernet_SwitchedVlan_TrunkVlans_Union(i interface{}) (Interface_Ethernet_SwitchedVlan_TrunkVlans_Union, error) { + if v, ok := i.(Interface_Ethernet_SwitchedVlan_TrunkVlans_Union); ok { + return v, nil + } + switch v := i.(type) { + case string: + return UnionString(v), nil + case uint16: + return UnionUint16(v), nil + } + return nil, fmt.Errorf("cannot convert %v to Interface_Ethernet_SwitchedVlan_TrunkVlans_Union, unknown union type, got: %T, want any of [string, uint16]", i, i) +} + +// Interface_RoutedVlan_Vlan_Union is an interface that is implemented by valid types for the union +// for the leaf /openconfig-interfaces/interfaces/interface/routed-vlan/config/vlan within the YANG schema. +// Union type can be one of [UnionString, UnionUint16]. +type Interface_RoutedVlan_Vlan_Union interface { + // Union type can be one of [UnionString, UnionUint16] + Documentation_for_Interface_RoutedVlan_Vlan_Union() +} + +// Documentation_for_Interface_RoutedVlan_Vlan_Union ensures that UnionString +// implements the Interface_RoutedVlan_Vlan_Union interface. +func (UnionString) Documentation_for_Interface_RoutedVlan_Vlan_Union() {} + +// Documentation_for_Interface_RoutedVlan_Vlan_Union ensures that UnionUint16 +// implements the Interface_RoutedVlan_Vlan_Union interface. +func (UnionUint16) Documentation_for_Interface_RoutedVlan_Vlan_Union() {} + +// To_Interface_RoutedVlan_Vlan_Union takes an input interface{} and attempts to convert it to a struct +// which implements the Interface_RoutedVlan_Vlan_Union union. It returns an error if the interface{} supplied +// cannot be converted to a type within the union. +func (t *Interface_RoutedVlan) To_Interface_RoutedVlan_Vlan_Union(i interface{}) (Interface_RoutedVlan_Vlan_Union, error) { + if v, ok := i.(Interface_RoutedVlan_Vlan_Union); ok { + return v, nil + } + switch v := i.(type) { + case string: + return UnionString(v), nil + case uint16: + return UnionUint16(v), nil + } + return nil, fmt.Errorf("cannot convert %v to Interface_RoutedVlan_Vlan_Union, unknown union type, got: %T, want any of [string, uint16]", i, i) +} + +// Interface_Subinterface_Vlan_VlanId_Union is an interface that is implemented by valid types for the union +// for the leaf /openconfig-interfaces/interfaces/interface/subinterfaces/subinterface/vlan/config/vlan-id within the YANG schema. +// Union type can be one of [UnionString, UnionUint16]. +type Interface_Subinterface_Vlan_VlanId_Union interface { + // Union type can be one of [UnionString, UnionUint16] + Documentation_for_Interface_Subinterface_Vlan_VlanId_Union() +} + +// Documentation_for_Interface_Subinterface_Vlan_VlanId_Union ensures that UnionString +// implements the Interface_Subinterface_Vlan_VlanId_Union interface. +func (UnionString) Documentation_for_Interface_Subinterface_Vlan_VlanId_Union() {} + +// Documentation_for_Interface_Subinterface_Vlan_VlanId_Union ensures that UnionUint16 +// implements the Interface_Subinterface_Vlan_VlanId_Union interface. +func (UnionUint16) Documentation_for_Interface_Subinterface_Vlan_VlanId_Union() {} + +// To_Interface_Subinterface_Vlan_VlanId_Union takes an input interface{} and attempts to convert it to a struct +// which implements the Interface_Subinterface_Vlan_VlanId_Union union. It returns an error if the interface{} supplied +// cannot be converted to a type within the union. +func (t *Interface_Subinterface_Vlan) To_Interface_Subinterface_Vlan_VlanId_Union(i interface{}) (Interface_Subinterface_Vlan_VlanId_Union, error) { + if v, ok := i.(Interface_Subinterface_Vlan_VlanId_Union); ok { + return v, nil + } + switch v := i.(type) { + case string: + return UnionString(v), nil + case uint16: + return UnionUint16(v), nil + } + return nil, fmt.Errorf("cannot convert %v to Interface_Subinterface_Vlan_VlanId_Union, unknown union type, got: %T, want any of [string, uint16]", i, i) +} diff --git a/internal/provider/provider.go b/internal/provider/provider.go new file mode 100644 index 00000000..892ad4f1 --- /dev/null +++ b/internal/provider/provider.go @@ -0,0 +1,60 @@ +// SPDX-FileCopyrightText: 2025 SAP SE or an SAP affiliate company and IronCore contributors +// SPDX-License-Identifier: Apache-2.0 +package provider + +import ( + "context" + "fmt" + "maps" + "slices" + "sync" + + "github.com/ironcore-dev/network-operator/api/v1alpha1" +) + +// Provider is the common interface for creation/deletion of the objects over different drivers. +type Provider interface { + // CreateInterface call is responsible for Interface creation on the provider + CreateInterface(context.Context, *v1alpha1.Interface) error + // DeleteInterface call is responsible for Interface deletion on the provider. + DeleteInterface(context.Context, *v1alpha1.Interface) error +} + +var mu sync.RWMutex + +// providers holds all registered providers. +// It should be accessed in a thread-safe manner and kept private to this package. +var providers = make(map[string]Provider) + +// Register registers a new provider with the given name. +// If a provider with the same name already exists, it panics. +func Register(name string, provider Provider) { + mu.Lock() + defer mu.Unlock() + if providers == nil { + panic("Register provider is nil") + } + if _, ok := providers[name]; ok { + panic("Register called twice for provider " + name) + } + providers[name] = provider +} + +// Get returns the provider with the given name. +// If the provider does not exist, it returns an error. +func Get(name string) (Provider, error) { + mu.RLock() + defer mu.RUnlock() + provider, ok := providers[name] + if !ok { + return nil, fmt.Errorf("unknown provider %q", name) + } + return provider, nil +} + +// Providers returns a slice of all registered provider names. +func Providers() []string { + mu.RLock() + defer mu.RUnlock() + return slices.Sorted(maps.Keys(providers)) +}