Use statusReason for reason under x-kubernetes-validations (#119544)

* Change reason field format

* Auto update

* Address comments

* Auto update

* Update the test
This commit is contained in:
Cici Huang 2023-07-24 17:56:03 -07:00 committed by GitHub
parent b53830590f
commit 7e0a9a7f4e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
21 changed files with 520 additions and 445 deletions

View File

@ -15751,7 +15751,7 @@
"type": "string" "type": "string"
}, },
"reason": { "reason": {
"description": "reason provides a machine-readable validation failure reason that is returned to the caller when a request fails this validation rule. The HTTP status code returned to the caller will match the reason of the reason of the first failed validation rule. The currently supported reasons are: \"FieldValueInvalid\", \"FieldValueForbidden\", \"FieldValueRequired\", \"FieldValueDuplicate\". If not set, default to use \"FieldValueInvalid\". All future added reasons must be accepted by clients when reading this value.", "description": "reason provides a machine-readable validation failure reason that is returned to the caller when a request fails this validation rule. The HTTP status code returned to the caller will match the reason of the reason of the first failed validation rule. The currently supported reasons are: \"FieldValueInvalid\", \"FieldValueForbidden\", \"FieldValueRequired\", \"FieldValueDuplicate\". If not set, default to use \"FieldValueInvalid\". All future added reasons must be accepted by clients when reading this value and unknown reasons should be treated as FieldValueInvalid.",
"type": "string" "type": "string"
}, },
"rule": { "rule": {

View File

@ -774,7 +774,7 @@
"type": "string" "type": "string"
}, },
"reason": { "reason": {
"description": "reason provides a machine-readable validation failure reason that is returned to the caller when a request fails this validation rule. The HTTP status code returned to the caller will match the reason of the reason of the first failed validation rule. The currently supported reasons are: \"FieldValueInvalid\", \"FieldValueForbidden\", \"FieldValueRequired\", \"FieldValueDuplicate\". If not set, default to use \"FieldValueInvalid\". All future added reasons must be accepted by clients when reading this value.", "description": "reason provides a machine-readable validation failure reason that is returned to the caller when a request fails this validation rule. The HTTP status code returned to the caller will match the reason of the reason of the first failed validation rule. The currently supported reasons are: \"FieldValueInvalid\", \"FieldValueForbidden\", \"FieldValueRequired\", \"FieldValueDuplicate\". If not set, default to use \"FieldValueInvalid\". All future added reasons must be accepted by clients when reading this value and unknown reasons should be treated as FieldValueInvalid.",
"type": "string" "type": "string"
}, },
"rule": { "rule": {

View File

@ -47653,9 +47653,10 @@ func schema_pkg_apis_apiextensions_v1_ValidationRule(ref common.ReferenceCallbac
}, },
"reason": { "reason": {
SchemaProps: spec.SchemaProps{ SchemaProps: spec.SchemaProps{
Description: "reason provides a machine-readable validation failure reason that is returned to the caller when a request fails this validation rule. The HTTP status code returned to the caller will match the reason of the reason of the first failed validation rule. The currently supported reasons are: \"FieldValueInvalid\", \"FieldValueForbidden\", \"FieldValueRequired\", \"FieldValueDuplicate\". If not set, default to use \"FieldValueInvalid\". All future added reasons must be accepted by clients when reading this value.", Description: "reason provides a machine-readable validation failure reason that is returned to the caller when a request fails this validation rule. The HTTP status code returned to the caller will match the reason of the reason of the first failed validation rule. The currently supported reasons are: \"FieldValueInvalid\", \"FieldValueForbidden\", \"FieldValueRequired\", \"FieldValueDuplicate\". If not set, default to use \"FieldValueInvalid\". All future added reasons must be accepted by clients when reading this value and unknown reasons should be treated as FieldValueInvalid.\n\nPossible enum values:\n - `\"FieldValueDuplicate\"` is used to report collisions of values that must be unique (e.g. unique IDs).\n - `\"FieldValueForbidden\"` is used to report valid (as per formatting rules) values which would be accepted under some conditions, but which are not permitted by the current conditions (such as security policy).\n - `\"FieldValueInvalid\"` is used to report malformed values (e.g. failed regex match, too long, out of bounds).\n - `\"FieldValueRequired\"` is used to report required values that are not provided (e.g. empty strings, null values, or empty arrays).",
Type: []string{"string"}, Type: []string{"string"},
Format: "", Format: "",
Enum: []interface{}{"FieldValueDuplicate", "FieldValueForbidden", "FieldValueInvalid", "FieldValueRequired"},
}, },
}, },
"fieldPath": { "fieldPath": {
@ -49065,9 +49066,10 @@ func schema_pkg_apis_apiextensions_v1beta1_ValidationRule(ref common.ReferenceCa
}, },
"reason": { "reason": {
SchemaProps: spec.SchemaProps{ SchemaProps: spec.SchemaProps{
Description: "reason provides a machine-readable validation failure reason that is returned to the caller when a request fails this validation rule. The HTTP status code returned to the caller will match the reason of the reason of the first failed validation rule. The currently supported reasons are: \"FieldValueInvalid\", \"FieldValueForbidden\", \"FieldValueRequired\", \"FieldValueDuplicate\". If not set, default to use \"FieldValueInvalid\". All future added reasons must be accepted by clients when reading this value.", Description: "reason provides a machine-readable validation failure reason that is returned to the caller when a request fails this validation rule. The HTTP status code returned to the caller will match the reason of the reason of the first failed validation rule. The currently supported reasons are: \"FieldValueInvalid\", \"FieldValueForbidden\", \"FieldValueRequired\", \"FieldValueDuplicate\". If not set, default to use \"FieldValueInvalid\". All future added reasons must be accepted by clients when reading this value and unknown reasons should be treated as FieldValueInvalid.\n\nPossible enum values:\n - `\"FieldValueDuplicate\"` is used to report collisions of values that must be unique (e.g. unique IDs).\n - `\"FieldValueForbidden\"` is used to report valid (as per formatting rules) values which would be accepted under some conditions, but which are not permitted by the current conditions (such as security policy).\n - `\"FieldValueInvalid\"` is used to report malformed values (e.g. failed regex match, too long, out of bounds).\n - `\"FieldValueRequired\"` is used to report required values that are not provided (e.g. empty strings, null values, or empty arrays).",
Type: []string{"string"}, Type: []string{"string"},
Format: "", Format: "",
Enum: []interface{}{"FieldValueDuplicate", "FieldValueForbidden", "FieldValueInvalid", "FieldValueRequired"},
}, },
}, },
"fieldPath": { "fieldPath": {

View File

@ -16,8 +16,24 @@ limitations under the License.
package apiextensions package apiextensions
import ( // FieldValueErrorReason is a machine-readable value providing more detail about why a field failed the validation.
"k8s.io/apimachinery/pkg/util/validation/field" // +enum
type FieldValueErrorReason string
const (
// FieldValueRequired is used to report required values that are not
// provided (e.g. empty strings, null values, or empty arrays).
FieldValueRequired FieldValueErrorReason = "FieldValueRequired"
// FieldValueDuplicate is used to report collisions of values that must be
// unique (e.g. unique IDs).
FieldValueDuplicate FieldValueErrorReason = "FieldValueDuplicate"
// FieldValueInvalid is used to report malformed values (e.g. failed regex
// match, too long, out of bounds).
FieldValueInvalid FieldValueErrorReason = "FieldValueInvalid"
// FieldValueForbidden is used to report valid (as per formatting rules)
// values which would be accepted under some conditions, but which are not
// permitted by the current conditions (such as security policy).
FieldValueForbidden FieldValueErrorReason = "FieldValueForbidden"
) )
// JSONSchemaProps is a JSON-Schema following Specification Draft 4 (http://json-schema.org/). // JSONSchemaProps is a JSON-Schema following Specification Draft 4 (http://json-schema.org/).
@ -216,9 +232,9 @@ type ValidationRule struct {
// The HTTP status code returned to the caller will match the reason of the reason of the first failed validation rule. // The HTTP status code returned to the caller will match the reason of the reason of the first failed validation rule.
// The currently supported reasons are: "FieldValueInvalid", "FieldValueForbidden", "FieldValueRequired", "FieldValueDuplicate". // The currently supported reasons are: "FieldValueInvalid", "FieldValueForbidden", "FieldValueRequired", "FieldValueDuplicate".
// If not set, default to use "FieldValueInvalid". // If not set, default to use "FieldValueInvalid".
// All future added reasons must be accepted by clients when reading this value. // All future added reasons must be accepted by clients when reading this value and unknown reasons should be treated as FieldValueInvalid.
// +optional // +optional
Reason *field.ErrorType Reason *FieldValueErrorReason
// fieldPath represents the field path returned when the validation fails. // fieldPath represents the field path returned when the validation fails.
// It must be a relative JSON path (i.e. with array notation) scoped to the location of this x-kubernetes-validations extension in the schema and refer to an existing field. // It must be a relative JSON path (i.e. with array notation) scoped to the location of this x-kubernetes-validations extension in the schema and refer to an existing field.
// e.g. when validation checks if a specific attribute `foo` under a map `testMap`, the fieldPath could be set to `.testMap.foo` // e.g. when validation checks if a specific attribute `foo` under a map `testMap`, the fieldPath could be set to `.testMap.foo`

View File

@ -719,6 +719,8 @@ func assertEqualTypes(t *testing.T, path []string, a, b reflect.Type) {
aElemType := a.Elem() aElemType := a.Elem()
bElemType := b.Elem() bElemType := b.Elem()
assertEqualTypes(t, path, aElemType, bElemType) assertEqualTypes(t, path, aElemType, bElemType)
case reflect.String:
// string types are equal
default: default:
fatalTypeError(t, path, a, b, "unhandled kind") fatalTypeError(t, path, a, b, "unhandled kind")

View File

@ -35,7 +35,6 @@ import (
strings "strings" strings "strings"
k8s_io_apimachinery_pkg_types "k8s.io/apimachinery/pkg/types" k8s_io_apimachinery_pkg_types "k8s.io/apimachinery/pkg/types"
k8s_io_apimachinery_pkg_util_validation_field "k8s.io/apimachinery/pkg/util/validation/field"
) )
// Reference imports to suppress errors if they are not otherwise used. // Reference imports to suppress errors if they are not otherwise used.
@ -815,203 +814,202 @@ func init() {
} }
var fileDescriptor_f5a35c9667703937 = []byte{ var fileDescriptor_f5a35c9667703937 = []byte{
// 3126 bytes of a gzipped FileDescriptorProto // 3111 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5a, 0xdf, 0x6f, 0x5c, 0x47, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5a, 0xdd, 0x6f, 0x5c, 0x47,
0xf5, 0xcf, 0x5d, 0x7b, 0xed, 0xf5, 0xd8, 0x49, 0xec, 0x49, 0xec, 0xef, 0x8d, 0x9b, 0x78, 0x9d, 0x15, 0xcf, 0x5d, 0x7b, 0xed, 0xf5, 0xd8, 0x89, 0xed, 0x49, 0x6c, 0x6e, 0xdc, 0xc4, 0xeb, 0x6c,
0xed, 0xb7, 0xf9, 0xba, 0x6d, 0xba, 0x6e, 0xfd, 0x6d, 0x69, 0xa8, 0x10, 0xc8, 0x6b, 0x3b, 0xad, 0x68, 0x70, 0xdb, 0x74, 0xdd, 0x9a, 0x96, 0x86, 0x82, 0x40, 0x5e, 0xdb, 0x69, 0xdd, 0xd8, 0xb1,
0x1b, 0x3b, 0xb6, 0x66, 0x93, 0xd4, 0x6d, 0x81, 0xf6, 0x7a, 0xef, 0x78, 0x7d, 0xeb, 0xfb, 0x2b, 0x35, 0x9b, 0xa4, 0x6e, 0x8b, 0x68, 0xaf, 0xf7, 0x8e, 0xd7, 0xb7, 0xbe, 0x5f, 0x99, 0xb9, 0xd7,
0x33, 0xf7, 0xae, 0x6d, 0x09, 0xa4, 0x0a, 0x54, 0x01, 0x95, 0xa0, 0x3c, 0xa0, 0xf2, 0x84, 0x10, 0x1f, 0x12, 0x48, 0x15, 0xa8, 0x02, 0x2a, 0x41, 0x79, 0xa8, 0xca, 0x13, 0x42, 0x08, 0xf5, 0x01,
0x42, 0x7d, 0x80, 0x07, 0x78, 0x2b, 0xff, 0x42, 0x5f, 0x90, 0xfa, 0x84, 0x2a, 0x21, 0xad, 0xe8, 0x1e, 0xe0, 0x0d, 0xfe, 0x85, 0xbe, 0x20, 0xf5, 0x09, 0x55, 0x42, 0x5a, 0xd1, 0xe5, 0x1f, 0x40,
0xf2, 0x0f, 0x20, 0x01, 0x42, 0xf8, 0x01, 0xa1, 0xf9, 0x71, 0xe7, 0xce, 0xde, 0xdd, 0x4d, 0x22, 0x02, 0x84, 0xf0, 0x03, 0x42, 0xf3, 0x71, 0xe7, 0xce, 0xde, 0xdd, 0x4d, 0x22, 0x7b, 0xdd, 0xbe,
0x7b, 0xdd, 0xbe, 0xed, 0x9e, 0x73, 0xe6, 0x7c, 0xce, 0x9c, 0x39, 0x73, 0xe6, 0xcc, 0xb9, 0x03, 0xed, 0x9e, 0x73, 0xe6, 0xfc, 0xce, 0x9c, 0x39, 0x73, 0xe6, 0xcc, 0xb9, 0x03, 0xac, 0xdd, 0x1b,
0xac, 0xbd, 0x1b, 0xb4, 0xec, 0x04, 0xf3, 0x7b, 0xf1, 0x36, 0x26, 0x3e, 0x8e, 0x30, 0x9d, 0x6f, 0xb4, 0xec, 0x04, 0x73, 0xbb, 0xf1, 0x16, 0x26, 0x3e, 0x8e, 0x30, 0x9d, 0xdb, 0xc3, 0xbe, 0x1d,
0x60, 0xdf, 0x0e, 0xc8, 0xbc, 0x64, 0x58, 0xa1, 0x83, 0x0f, 0x22, 0xec, 0x53, 0x27, 0xf0, 0xe9, 0x90, 0x39, 0xc9, 0xb0, 0x42, 0x07, 0x1f, 0x44, 0xd8, 0xa7, 0x4e, 0xe0, 0xd3, 0xa7, 0xad, 0xd0,
0x33, 0x56, 0xe8, 0x50, 0x4c, 0x1a, 0x98, 0xcc, 0x87, 0x7b, 0x75, 0xc6, 0xa3, 0xed, 0x02, 0xf3, 0xa1, 0x98, 0xec, 0x61, 0x32, 0x17, 0xee, 0xd6, 0x19, 0x8f, 0xb6, 0x0a, 0xcc, 0xed, 0x3d, 0x3b,
0x8d, 0xe7, 0xe6, 0xeb, 0xd8, 0xc7, 0xc4, 0x8a, 0xb0, 0x5d, 0x0e, 0x49, 0x10, 0x05, 0xf0, 0x86, 0x57, 0xc7, 0x3e, 0x26, 0x56, 0x84, 0xed, 0x72, 0x48, 0x82, 0x28, 0x80, 0x37, 0x84, 0xa6, 0x72,
0xd0, 0x54, 0x6e, 0x13, 0x7c, 0x4b, 0x69, 0x2a, 0x87, 0x7b, 0x75, 0xc6, 0xa3, 0xed, 0x02, 0xe5, 0x8b, 0xe0, 0x9b, 0x4a, 0x53, 0x39, 0xdc, 0xad, 0x33, 0x1e, 0x6d, 0x15, 0x28, 0xef, 0x3d, 0x3b,
0xc6, 0x73, 0xd3, 0xcf, 0xd4, 0x9d, 0x68, 0x37, 0xde, 0x2e, 0xd7, 0x02, 0x6f, 0xbe, 0x1e, 0xd4, 0xf5, 0x74, 0xdd, 0x89, 0x76, 0xe2, 0xad, 0x72, 0x2d, 0xf0, 0xe6, 0xea, 0x41, 0x3d, 0x98, 0xe3,
0x83, 0x79, 0xae, 0x70, 0x3b, 0xde, 0xe1, 0xff, 0xf8, 0x1f, 0xfe, 0x4b, 0x00, 0x4d, 0x3f, 0x9f, 0x0a, 0xb7, 0xe2, 0x6d, 0xfe, 0x8f, 0xff, 0xe1, 0xbf, 0x04, 0xd0, 0xd4, 0x73, 0xa9, 0xc9, 0x9e,
0x9a, 0xec, 0x59, 0xb5, 0x5d, 0xc7, 0xc7, 0xe4, 0x30, 0xb5, 0xd3, 0xc3, 0x91, 0xd5, 0xc5, 0xbc, 0x55, 0xdb, 0x71, 0x7c, 0x4c, 0x0e, 0x53, 0x3b, 0x3d, 0x1c, 0x59, 0x1d, 0xcc, 0x9b, 0x9a, 0xeb,
0xe9, 0xf9, 0x5e, 0xa3, 0x48, 0xec, 0x47, 0x8e, 0x87, 0x3b, 0x06, 0x7c, 0xe5, 0x61, 0x03, 0x68, 0x36, 0x8a, 0xc4, 0x7e, 0xe4, 0x78, 0xb8, 0x6d, 0xc0, 0xd7, 0x1e, 0x36, 0x80, 0xd6, 0x76, 0xb0,
0x6d, 0x17, 0x7b, 0x56, 0x76, 0x5c, 0xe9, 0xc8, 0x00, 0x13, 0x4b, 0x81, 0xdf, 0xc0, 0x84, 0x4d, 0x67, 0x65, 0xc7, 0x95, 0x8e, 0x0c, 0x30, 0xbe, 0x18, 0xf8, 0x7b, 0x98, 0xb0, 0x09, 0x22, 0x7c,
0x10, 0xe1, 0xfb, 0x31, 0xa6, 0x11, 0xac, 0x80, 0x81, 0xd8, 0xb1, 0x4d, 0x63, 0xd6, 0x98, 0x1b, 0x3f, 0xc6, 0x34, 0x82, 0x15, 0xd0, 0x17, 0x3b, 0xb6, 0x69, 0xcc, 0x18, 0xb3, 0x43, 0x95, 0x67,
0xa9, 0x3c, 0xfb, 0x49, 0xb3, 0x78, 0xa6, 0xd5, 0x2c, 0x0e, 0xdc, 0x5d, 0x5d, 0x3e, 0x6a, 0x16, 0x3e, 0x6e, 0x14, 0xcf, 0x34, 0x1b, 0xc5, 0xbe, 0xbb, 0x2b, 0x4b, 0x47, 0x8d, 0xe2, 0x95, 0x6e,
0xaf, 0xf6, 0x42, 0x8a, 0x0e, 0x43, 0x4c, 0xcb, 0x77, 0x57, 0x97, 0x11, 0x1b, 0x0c, 0x5f, 0x06, 0x48, 0xd1, 0x61, 0x88, 0x69, 0xf9, 0xee, 0xca, 0x12, 0x62, 0x83, 0xe1, 0x4b, 0x60, 0xdc, 0xc6,
0x13, 0x36, 0xa6, 0x0e, 0xc1, 0xf6, 0xe2, 0xe6, 0xea, 0x3d, 0xa1, 0xdf, 0xcc, 0x71, 0x8d, 0x97, 0xd4, 0x21, 0xd8, 0x5e, 0xd8, 0x58, 0xb9, 0x27, 0xf4, 0x9b, 0x39, 0xae, 0xf1, 0xa2, 0xd4, 0x38,
0xa4, 0xc6, 0x89, 0xe5, 0xac, 0x00, 0xea, 0x1c, 0x03, 0xb7, 0xc0, 0x70, 0xb0, 0xfd, 0x0e, 0xae, 0xbe, 0x94, 0x15, 0x40, 0xed, 0x63, 0xe0, 0x26, 0x18, 0x0c, 0xb6, 0xde, 0xc6, 0xb5, 0x88, 0x9a,
0x45, 0xd4, 0x1c, 0x98, 0x1d, 0x98, 0x1b, 0x5d, 0x78, 0xa6, 0x9c, 0x2e, 0x9e, 0x32, 0x81, 0xaf, 0x7d, 0x33, 0x7d, 0xb3, 0xc3, 0xf3, 0x4f, 0x97, 0xd3, 0xc5, 0x53, 0x26, 0xf0, 0x15, 0x93, 0x93,
0x98, 0x9c, 0x6c, 0x19, 0x59, 0xfb, 0x2b, 0xc9, 0xa2, 0x55, 0xce, 0x4b, 0xb4, 0xe1, 0x0d, 0xa1, 0x2d, 0x23, 0x6b, 0x7f, 0x39, 0x59, 0xb4, 0xca, 0xa8, 0x44, 0x1b, 0x5c, 0x17, 0x5a, 0x50, 0xa2,
0x05, 0x25, 0xea, 0x4a, 0xbf, 0xce, 0x01, 0xa8, 0x4f, 0x9e, 0x86, 0x81, 0x4f, 0x71, 0x5f, 0x66, 0xae, 0xf4, 0x9b, 0x1c, 0x80, 0xfa, 0xe4, 0x69, 0x18, 0xf8, 0x14, 0xf7, 0x64, 0xf6, 0x14, 0x8c,
0x4f, 0xc1, 0x78, 0x8d, 0x6b, 0x8e, 0xb0, 0x2d, 0x71, 0xcd, 0xdc, 0x71, 0xac, 0x37, 0x25, 0xfe, 0xd5, 0xb8, 0xe6, 0x08, 0xdb, 0x12, 0xd7, 0xcc, 0x1d, 0xc7, 0x7a, 0x53, 0xe2, 0x8f, 0x2d, 0x66,
0xf8, 0x52, 0x46, 0x1d, 0xea, 0x00, 0x80, 0x77, 0xc0, 0x10, 0xc1, 0x34, 0x76, 0x23, 0x73, 0x60, 0xd4, 0xa1, 0x36, 0x00, 0x78, 0x07, 0x0c, 0x10, 0x4c, 0x63, 0x37, 0x32, 0xfb, 0x66, 0x8c, 0xd9,
0xd6, 0x98, 0x1b, 0x5d, 0xb8, 0xde, 0x13, 0x8a, 0x87, 0x36, 0x0b, 0xbe, 0x72, 0xe3, 0xb9, 0x72, 0xe1, 0xf9, 0xeb, 0x5d, 0xa1, 0x78, 0x68, 0xb3, 0xe0, 0x2b, 0xef, 0x3d, 0x5b, 0xae, 0x46, 0x56,
0x35, 0xb2, 0xa2, 0x98, 0x56, 0xce, 0x49, 0xa4, 0x21, 0xc4, 0x75, 0x20, 0xa9, 0xab, 0xf4, 0x1f, 0x14, 0xd3, 0xca, 0x39, 0x89, 0x34, 0x80, 0xb8, 0x0e, 0x24, 0x75, 0x95, 0xfe, 0x67, 0x80, 0x31,
0x03, 0x8c, 0xeb, 0x5e, 0x6a, 0x38, 0x78, 0x1f, 0x12, 0x30, 0x4c, 0x44, 0xb0, 0x70, 0x3f, 0x8d, 0xdd, 0x4b, 0x7b, 0x0e, 0xde, 0x87, 0x04, 0x0c, 0x12, 0x11, 0x2c, 0xdc, 0x4f, 0xc3, 0xf3, 0xb7,
0x2e, 0xdc, 0x2a, 0x1f, 0x77, 0x47, 0x95, 0x3b, 0xe2, 0xaf, 0x32, 0xca, 0x96, 0x4b, 0xfe, 0x41, 0xca, 0xc7, 0xdd, 0x51, 0xe5, 0xb6, 0xf8, 0xab, 0x0c, 0xb3, 0xe5, 0x92, 0x7f, 0x50, 0x02, 0x04,
0x09, 0x10, 0x6c, 0x80, 0x02, 0x91, 0x6b, 0xc4, 0x03, 0x69, 0x74, 0x61, 0xad, 0x3f, 0xa0, 0x42, 0xf7, 0x40, 0x81, 0xc8, 0x35, 0xe2, 0x81, 0x34, 0x3c, 0xbf, 0xda, 0x1b, 0x50, 0xa1, 0xb3, 0x32,
0x67, 0x65, 0xac, 0xd5, 0x2c, 0x16, 0x92, 0x7f, 0x48, 0x61, 0x95, 0x7e, 0x99, 0x03, 0x33, 0x4b, 0xd2, 0x6c, 0x14, 0x0b, 0xc9, 0x3f, 0xa4, 0xb0, 0x4a, 0xbf, 0xca, 0x81, 0xe9, 0xc5, 0x98, 0x46,
0x31, 0x8d, 0x02, 0x0f, 0x61, 0x1a, 0xc4, 0xa4, 0x86, 0x97, 0x02, 0x37, 0xf6, 0xfc, 0x65, 0xbc, 0x81, 0x87, 0x30, 0x0d, 0x62, 0x52, 0xc3, 0x8b, 0x81, 0x1b, 0x7b, 0xfe, 0x12, 0xde, 0x76, 0x7c,
0xe3, 0xf8, 0x4e, 0xc4, 0x62, 0x74, 0x16, 0x0c, 0xfa, 0x96, 0x87, 0x65, 0xcc, 0x8c, 0x49, 0x4f, 0x27, 0x62, 0x31, 0x3a, 0x03, 0xfa, 0x7d, 0xcb, 0xc3, 0x32, 0x66, 0x46, 0xa4, 0x27, 0xfb, 0x6f,
0x0e, 0xde, 0xb6, 0x3c, 0x8c, 0x38, 0x87, 0x49, 0xb0, 0x10, 0x91, 0x3b, 0x40, 0x49, 0xdc, 0x39, 0x5b, 0x1e, 0x46, 0x9c, 0xc3, 0x24, 0x58, 0x88, 0xc8, 0x1d, 0xa0, 0x24, 0xee, 0x1c, 0x86, 0x18,
0x0c, 0x31, 0xe2, 0x1c, 0x78, 0x0d, 0x0c, 0xed, 0x04, 0xc4, 0xb3, 0xc4, 0xea, 0x8d, 0xa4, 0xeb, 0x71, 0x0e, 0xbc, 0x06, 0x06, 0xb6, 0x03, 0xe2, 0x59, 0x62, 0xf5, 0x86, 0xd2, 0xf5, 0xb8, 0xc9,
0x71, 0x93, 0x53, 0x91, 0xe4, 0xc2, 0x17, 0xc0, 0xa8, 0x8d, 0x69, 0x8d, 0x38, 0x21, 0x83, 0x36, 0xa9, 0x48, 0x72, 0xe1, 0xf3, 0x60, 0xd8, 0xc6, 0xb4, 0x46, 0x9c, 0x90, 0x41, 0x9b, 0xfd, 0x5c,
0x07, 0xb9, 0xf0, 0x05, 0x29, 0x3c, 0xba, 0x9c, 0xb2, 0x90, 0x2e, 0x07, 0xaf, 0x83, 0x42, 0x48, 0xf8, 0xbc, 0x14, 0x1e, 0x5e, 0x4a, 0x59, 0x48, 0x97, 0x83, 0xd7, 0x41, 0x21, 0x24, 0x4e, 0x40,
0x9c, 0x80, 0x38, 0xd1, 0xa1, 0x99, 0x9f, 0x35, 0xe6, 0xf2, 0x95, 0x71, 0x39, 0xa6, 0xb0, 0x29, 0x9c, 0xe8, 0xd0, 0xcc, 0xcf, 0x18, 0xb3, 0xf9, 0xca, 0x98, 0x1c, 0x53, 0xd8, 0x90, 0x74, 0xa4,
0xe9, 0x48, 0x49, 0x30, 0xe9, 0x77, 0x68, 0xe0, 0x6f, 0x5a, 0xd1, 0xae, 0x39, 0xc4, 0x11, 0x94, 0x24, 0x98, 0xf4, 0xdb, 0x34, 0xf0, 0x37, 0xac, 0x68, 0xc7, 0x1c, 0xe0, 0x08, 0x4a, 0xfa, 0x95,
0xf4, 0xab, 0xd5, 0x8d, 0xdb, 0x8c, 0x8e, 0x94, 0x44, 0xe9, 0x4f, 0x06, 0x30, 0xb3, 0x1e, 0x4a, 0xea, 0xfa, 0x6d, 0x46, 0x47, 0x4a, 0xa2, 0xf4, 0x17, 0x03, 0x98, 0x59, 0x0f, 0x25, 0xee, 0x85,
0xdc, 0x0b, 0x6f, 0x82, 0x02, 0x8d, 0x58, 0xce, 0xa9, 0x1f, 0x4a, 0xff, 0x3c, 0x95, 0xa8, 0xaa, 0x37, 0x41, 0x81, 0x46, 0x2c, 0xe7, 0xd4, 0x0f, 0xa5, 0x7f, 0x9e, 0x4c, 0x54, 0x55, 0x25, 0xfd,
0x4a, 0xfa, 0x51, 0xb3, 0x38, 0x95, 0x8e, 0x48, 0xa8, 0xdc, 0x37, 0x6a, 0x2c, 0x0b, 0xb9, 0x7d, 0xa8, 0x51, 0x9c, 0x4c, 0x47, 0x24, 0x54, 0xee, 0x1b, 0x35, 0x96, 0x85, 0xdc, 0x3e, 0xde, 0xda,
0xbc, 0xbd, 0x1b, 0x04, 0x7b, 0x72, 0xf5, 0x4f, 0x10, 0x72, 0xaf, 0x09, 0x45, 0x29, 0xa6, 0x08, 0x09, 0x82, 0x5d, 0xb9, 0xfa, 0x27, 0x08, 0xb9, 0x57, 0x85, 0xa2, 0x14, 0x53, 0x84, 0x9c, 0x24,
0x39, 0x49, 0x46, 0x09, 0x50, 0xe9, 0xdf, 0xb9, 0xec, 0xc4, 0xb4, 0x45, 0x7f, 0x1b, 0x14, 0xd8, 0xa3, 0x04, 0xa8, 0xf4, 0xdf, 0x5c, 0x76, 0x62, 0xda, 0xa2, 0xbf, 0x05, 0x0a, 0x6c, 0x0b, 0xd9,
0x16, 0xb2, 0xad, 0xc8, 0x92, 0x9b, 0xe0, 0xd9, 0x47, 0xdb, 0x70, 0x62, 0xbf, 0xae, 0xe3, 0xc8, 0x56, 0x64, 0xc9, 0x4d, 0xf0, 0xcc, 0xa3, 0x6d, 0x38, 0xb1, 0x5f, 0xd7, 0x70, 0x64, 0x55, 0xa0,
0xaa, 0x40, 0xe9, 0x0a, 0x90, 0xd2, 0x90, 0xd2, 0x0a, 0x0f, 0xc0, 0x20, 0x0d, 0x71, 0x4d, 0xce, 0x74, 0x05, 0x48, 0x69, 0x48, 0x69, 0x85, 0x07, 0xa0, 0x9f, 0x86, 0xb8, 0x26, 0xe7, 0x7b, 0xef,
0xf7, 0xde, 0x09, 0xa2, 0xbd, 0xc7, 0x1c, 0xaa, 0x21, 0xae, 0xa5, 0xc1, 0xc8, 0xfe, 0x21, 0x8e, 0x04, 0xd1, 0xde, 0x65, 0x0e, 0xd5, 0x10, 0xd7, 0xd2, 0x60, 0x64, 0xff, 0x10, 0x47, 0x84, 0xef,
0x08, 0xdf, 0x35, 0xc0, 0x10, 0xe5, 0x79, 0x41, 0xe6, 0x92, 0xad, 0x53, 0x00, 0xcf, 0xe4, 0x1d, 0x18, 0x60, 0x80, 0xf2, 0xbc, 0x20, 0x73, 0xc9, 0xe6, 0x29, 0x80, 0x67, 0xf2, 0x8e, 0xf8, 0x8f,
0xf1, 0x1f, 0x49, 0xdc, 0xd2, 0x3f, 0x72, 0xe0, 0x6a, 0xaf, 0xa1, 0x4b, 0x81, 0x6f, 0x8b, 0x45, 0x24, 0x6e, 0xe9, 0x5f, 0x39, 0x70, 0xa5, 0xdb, 0xd0, 0xc5, 0xc0, 0xb7, 0xc5, 0x22, 0xac, 0xc8,
0x58, 0x95, 0xfb, 0x4a, 0x44, 0xd6, 0x0b, 0xfa, 0xbe, 0x3a, 0x6a, 0x16, 0x9f, 0x78, 0xa8, 0x02, 0x7d, 0x25, 0x22, 0xeb, 0x79, 0x7d, 0x5f, 0x1d, 0x35, 0x8a, 0x8f, 0x3f, 0x54, 0x81, 0xb6, 0x01,
0x6d, 0x03, 0x7e, 0x55, 0x4d, 0x59, 0x6c, 0xd2, 0xab, 0xed, 0x86, 0x1d, 0x35, 0x8b, 0xe7, 0xd5, 0xbf, 0xae, 0xa6, 0x2c, 0x36, 0xe9, 0x95, 0x56, 0xc3, 0x8e, 0x1a, 0xc5, 0x51, 0x35, 0xac, 0xd5,
0xb0, 0x76, 0x5b, 0x61, 0x03, 0x40, 0xd7, 0xa2, 0xd1, 0x1d, 0x62, 0xf9, 0x54, 0xa8, 0x75, 0x3c, 0x56, 0xb8, 0x07, 0xa0, 0x6b, 0xd1, 0xe8, 0x0e, 0xb1, 0x7c, 0x2a, 0xd4, 0x3a, 0x1e, 0x96, 0x9e,
0x2c, 0x3d, 0xf7, 0xd4, 0xa3, 0x05, 0x05, 0x1b, 0x51, 0x99, 0x96, 0x90, 0x70, 0xad, 0x43, 0x1b, 0x7b, 0xf2, 0xd1, 0x82, 0x82, 0x8d, 0xa8, 0x4c, 0x49, 0x48, 0xb8, 0xda, 0xa6, 0x0d, 0x75, 0x40,
0xea, 0x82, 0xc0, 0x72, 0x06, 0xc1, 0x16, 0x55, 0x69, 0x40, 0xcb, 0xe1, 0x8c, 0x8a, 0x24, 0x17, 0x60, 0x39, 0x83, 0x60, 0x8b, 0xaa, 0x34, 0xa0, 0xe5, 0x70, 0x46, 0x45, 0x92, 0x0b, 0x9f, 0x00,
0x3e, 0x09, 0x86, 0x3d, 0x4c, 0xa9, 0x55, 0xc7, 0x7c, 0xef, 0x8f, 0xa4, 0x87, 0xe2, 0xba, 0x20, 0x83, 0x1e, 0xa6, 0xd4, 0xaa, 0x63, 0xbe, 0xf7, 0x87, 0xd2, 0x43, 0x71, 0x4d, 0x90, 0x51, 0xc2,
0xa3, 0x84, 0x5f, 0xfa, 0xa7, 0x01, 0x2e, 0xf7, 0xf2, 0xda, 0x9a, 0x43, 0x23, 0xf8, 0xcd, 0x8e, 0x2f, 0xfd, 0xdb, 0x00, 0x97, 0xba, 0x79, 0x6d, 0xd5, 0xa1, 0x11, 0xfc, 0x4e, 0x5b, 0xd8, 0x97,
0xb0, 0x2f, 0x3f, 0xda, 0x0c, 0xd9, 0x68, 0x1e, 0xf4, 0x2a, 0x95, 0x24, 0x14, 0x2d, 0xe4, 0xf7, 0x1f, 0x6d, 0x86, 0x6c, 0x34, 0x0f, 0x7a, 0x95, 0x4a, 0x12, 0x8a, 0x16, 0xf2, 0xfb, 0x20, 0xef,
0x41, 0xde, 0x89, 0xb0, 0x97, 0x9c, 0x96, 0xa8, 0xff, 0x61, 0x57, 0x39, 0x2b, 0xe1, 0xf3, 0xab, 0x44, 0xd8, 0x4b, 0x4e, 0x4b, 0xd4, 0xfb, 0xb0, 0xab, 0x9c, 0x95, 0xf0, 0xf9, 0x15, 0x06, 0x84,
0x0c, 0x08, 0x09, 0xbc, 0xd2, 0x47, 0x39, 0x70, 0xa5, 0xd7, 0x10, 0x96, 0xc7, 0x29, 0x73, 0x76, 0x04, 0x5e, 0xe9, 0xa3, 0x1c, 0xb8, 0xdc, 0x6d, 0x08, 0xcb, 0xe3, 0x94, 0x39, 0x3b, 0x74, 0x63,
0xe8, 0xc6, 0xc4, 0x72, 0x65, 0xb0, 0x29, 0x67, 0x6f, 0x72, 0x2a, 0x92, 0x5c, 0x96, 0x3b, 0xa9, 0x62, 0xb9, 0x32, 0xd8, 0x94, 0xb3, 0x37, 0x38, 0x15, 0x49, 0x2e, 0xcb, 0x9d, 0xd4, 0xf1, 0xeb,
0xe3, 0xd7, 0x63, 0xd7, 0x22, 0x32, 0x92, 0xd4, 0x84, 0xab, 0x92, 0x8e, 0x94, 0x04, 0x2c, 0x03, 0xb1, 0x6b, 0x11, 0x19, 0x49, 0x6a, 0xc2, 0x55, 0x49, 0x47, 0x4a, 0x02, 0x96, 0x01, 0xa0, 0x3b,
0x40, 0x77, 0x03, 0x12, 0x71, 0x0c, 0x5e, 0xe1, 0x8c, 0x54, 0xce, 0xb1, 0x8c, 0x50, 0x55, 0x54, 0x01, 0x89, 0x38, 0x06, 0xaf, 0x70, 0x86, 0x2a, 0xe7, 0x58, 0x46, 0xa8, 0x2a, 0x2a, 0xd2, 0x24,
0xa4, 0x49, 0xb0, 0x83, 0x64, 0xcf, 0xf1, 0x6d, 0xb9, 0xe0, 0x6a, 0xef, 0xde, 0x72, 0x7c, 0x1b, 0xd8, 0x41, 0xb2, 0xeb, 0xf8, 0xb6, 0x5c, 0x70, 0xb5, 0x77, 0x6f, 0x39, 0xbe, 0x8d, 0x38, 0x87,
0x71, 0x0e, 0xc3, 0x77, 0x1d, 0x1a, 0x31, 0x8a, 0x5c, 0xed, 0x36, 0x87, 0x73, 0x49, 0x25, 0xc1, 0xe1, 0xbb, 0x0e, 0x8d, 0x18, 0x45, 0xae, 0x76, 0x8b, 0xc3, 0xb9, 0xa4, 0x92, 0x60, 0xf8, 0x35,
0xf0, 0x6b, 0x2c, 0xc1, 0x06, 0xc4, 0xc1, 0xd4, 0x1c, 0x4a, 0xf1, 0x97, 0x14, 0x15, 0x69, 0x12, 0x96, 0x60, 0x03, 0xe2, 0x60, 0x6a, 0x0e, 0xa4, 0xf8, 0x8b, 0x8a, 0x8a, 0x34, 0x89, 0xd2, 0x5f,
0xa5, 0x3f, 0x0f, 0xf6, 0x8e, 0x0f, 0x96, 0x40, 0xe0, 0xe3, 0x20, 0x5f, 0x27, 0x41, 0x1c, 0x4a, 0xfb, 0xbb, 0xc7, 0x07, 0x4b, 0x20, 0xf0, 0x2a, 0xc8, 0xd7, 0x49, 0x10, 0x87, 0xd2, 0x4b, 0xca,
0x2f, 0x29, 0x6f, 0xbf, 0xcc, 0x88, 0x48, 0xf0, 0xe0, 0x77, 0x40, 0xde, 0x97, 0x13, 0x66, 0x11, 0xdb, 0x2f, 0x31, 0x22, 0x12, 0x3c, 0xf8, 0x3d, 0x90, 0xf7, 0xe5, 0x84, 0x59, 0x04, 0xbd, 0xda,
0xf4, 0x5a, 0xff, 0x97, 0x99, 0x7b, 0x2b, 0x45, 0x17, 0x8e, 0x14, 0xa0, 0xf0, 0x79, 0x90, 0xa7, 0xfb, 0x65, 0xe6, 0xde, 0x4a, 0xd1, 0x85, 0x23, 0x05, 0x28, 0x7c, 0x0e, 0xe4, 0x69, 0x2d, 0x08,
0xb5, 0x20, 0xc4, 0xd2, 0x89, 0x33, 0x89, 0x50, 0x95, 0x11, 0x8f, 0x9a, 0xc5, 0xb3, 0x89, 0x3a, 0xb1, 0x74, 0xe2, 0x74, 0x22, 0x54, 0x65, 0xc4, 0xa3, 0x46, 0xf1, 0x6c, 0xa2, 0x8e, 0x13, 0x90,
0x4e, 0x40, 0x42, 0x18, 0xfe, 0xc0, 0x00, 0x05, 0x79, 0x5c, 0x50, 0x73, 0x98, 0x87, 0xe7, 0xeb, 0x10, 0x86, 0x3f, 0x32, 0x40, 0x41, 0x1e, 0x17, 0xd4, 0x1c, 0xe4, 0xe1, 0xf9, 0x5a, 0xef, 0xed,
0xfd, 0xb7, 0x5b, 0x96, 0xbd, 0xe9, 0x9a, 0x49, 0x02, 0x45, 0x0a, 0x1c, 0x7e, 0xcf, 0x00, 0xa0, 0x96, 0x65, 0x6f, 0xba, 0x66, 0x92, 0x40, 0x91, 0x02, 0x87, 0x3f, 0x30, 0x00, 0xa8, 0xa9, 0xb3,
0xa6, 0xce, 0x2e, 0x73, 0x84, 0xfb, 0xb0, 0x6f, 0x5b, 0x45, 0x3b, 0x15, 0x45, 0x20, 0xa4, 0xa5, 0xcb, 0x1c, 0xe2, 0x3e, 0xec, 0xd9, 0x56, 0xd1, 0x4e, 0x45, 0x11, 0x08, 0x69, 0xa9, 0xa4, 0xa1,
0x92, 0x86, 0x0a, 0xab, 0x60, 0x32, 0x24, 0x98, 0xeb, 0xbe, 0xeb, 0xef, 0xf9, 0xc1, 0xbe, 0x7f, 0xc2, 0x2a, 0x98, 0x08, 0x09, 0xe6, 0xba, 0xef, 0xfa, 0xbb, 0x7e, 0xb0, 0xef, 0xdf, 0x74, 0xb0,
0xd3, 0xc1, 0xae, 0x4d, 0x4d, 0x30, 0x6b, 0xcc, 0x15, 0x2a, 0x57, 0xa4, 0xfd, 0x93, 0x9b, 0xdd, 0x6b, 0x53, 0x13, 0xcc, 0x18, 0xb3, 0x85, 0xca, 0x65, 0x69, 0xff, 0xc4, 0x46, 0x27, 0x21, 0xd4,
0x84, 0x50, 0xf7, 0xb1, 0xa5, 0xf7, 0x06, 0xb2, 0xb5, 0x56, 0xf6, 0xbc, 0x80, 0x1f, 0x88, 0xc9, 0x79, 0x6c, 0xe9, 0xdd, 0xbe, 0x6c, 0xad, 0x95, 0x3d, 0x2f, 0xe0, 0xfb, 0x62, 0xf2, 0x22, 0x0f,
0x8b, 0x3c, 0x4c, 0x4d, 0x83, 0x2f, 0xc4, 0x9b, 0xfd, 0x5f, 0x08, 0x95, 0xeb, 0xd3, 0x43, 0x5a, 0x53, 0xd3, 0xe0, 0x0b, 0xf1, 0x46, 0xef, 0x17, 0x42, 0xe5, 0xfa, 0xf4, 0x90, 0x56, 0x24, 0x8a,
0x91, 0x28, 0xd2, 0x4c, 0x80, 0x3f, 0x33, 0xc0, 0x59, 0xab, 0x56, 0xc3, 0x61, 0x84, 0x6d, 0xb1, 0x34, 0x13, 0xe0, 0x07, 0x06, 0x38, 0x6b, 0xd5, 0x6a, 0x38, 0x8c, 0xb0, 0x2d, 0xb6, 0x71, 0xee,
0x8d, 0x73, 0xa7, 0x1b, 0xd5, 0x93, 0xd2, 0xa0, 0xb3, 0x8b, 0x3a, 0x2a, 0x6a, 0x37, 0x02, 0xbe, 0x74, 0xa3, 0x7a, 0x42, 0x1a, 0x74, 0x76, 0x41, 0x47, 0x45, 0xad, 0x46, 0xc0, 0x17, 0xc1, 0x39,
0x04, 0xce, 0xd1, 0x28, 0x20, 0xd8, 0x4e, 0x22, 0x48, 0x66, 0x17, 0xd8, 0x6a, 0x16, 0xcf, 0x55, 0x1a, 0x05, 0x04, 0xdb, 0x49, 0x04, 0xc9, 0xec, 0x02, 0x9b, 0x8d, 0xe2, 0xb9, 0x6a, 0x0b, 0x07,
0xdb, 0x38, 0x28, 0x23, 0x59, 0xfa, 0x34, 0x0f, 0x8a, 0x0f, 0x89, 0xd0, 0x47, 0x28, 0x7a, 0xaf, 0x65, 0x24, 0x4b, 0x9f, 0xe4, 0x41, 0xf1, 0x21, 0x11, 0xfa, 0x08, 0x45, 0xef, 0x35, 0x30, 0xc0,
0x81, 0x21, 0x3e, 0x53, 0x9b, 0x3b, 0xa4, 0xa0, 0x1d, 0xf5, 0x9c, 0x8a, 0x24, 0x97, 0x1d, 0x4f, 0x67, 0x6a, 0x73, 0x87, 0x14, 0xb4, 0xa3, 0x9e, 0x53, 0x91, 0xe4, 0xb2, 0xe3, 0x89, 0xe1, 0xb3,
0x0c, 0x9f, 0x1d, 0x4f, 0x03, 0x5c, 0x50, 0x1d, 0x4f, 0x55, 0x41, 0x46, 0x09, 0x1f, 0x2e, 0x00, 0xe3, 0xa9, 0x8f, 0x0b, 0xaa, 0xe3, 0xa9, 0x2a, 0xc8, 0x28, 0xe1, 0xc3, 0x79, 0x00, 0x6c, 0x1c,
0x60, 0xe3, 0x90, 0x60, 0x96, 0x91, 0x6c, 0x73, 0x98, 0x4b, 0xab, 0xf5, 0x59, 0x56, 0x1c, 0xa4, 0x12, 0xcc, 0x32, 0x92, 0x6d, 0x0e, 0x72, 0x69, 0xb5, 0x3e, 0x4b, 0x8a, 0x83, 0x34, 0x29, 0x78,
0x49, 0xc1, 0x9b, 0x00, 0x26, 0xff, 0x9c, 0xc0, 0x7f, 0xcd, 0x22, 0xbe, 0xe3, 0xd7, 0xcd, 0x02, 0x13, 0xc0, 0xe4, 0x9f, 0x13, 0xf8, 0xaf, 0x5a, 0xc4, 0x77, 0xfc, 0xba, 0x59, 0xe0, 0x66, 0x4f,
0x37, 0x7b, 0x8a, 0x9d, 0xb6, 0xcb, 0x1d, 0x5c, 0xd4, 0x65, 0x04, 0x6c, 0x80, 0x21, 0x71, 0x8d, 0xb2, 0xd3, 0x76, 0xa9, 0x8d, 0x8b, 0x3a, 0x8c, 0x80, 0x7b, 0x60, 0x40, 0x5c, 0xa3, 0x79, 0xde,
0xe6, 0x79, 0xa3, 0x8f, 0x3b, 0xee, 0x9e, 0xe5, 0x3a, 0x36, 0x87, 0xaa, 0x00, 0xee, 0x1e, 0x8e, 0xe8, 0xe1, 0x8e, 0xbb, 0x67, 0xb9, 0x8e, 0xcd, 0xa1, 0x2a, 0x80, 0xbb, 0x87, 0xa3, 0x20, 0x89,
0x82, 0x24, 0x1a, 0x7c, 0xdf, 0x00, 0x63, 0x34, 0xde, 0x26, 0x52, 0x9a, 0xf2, 0xac, 0x3e, 0xba, 0x06, 0xdf, 0x33, 0xc0, 0x08, 0x8d, 0xb7, 0x88, 0x94, 0xa6, 0x3c, 0xab, 0x0f, 0xcf, 0xdf, 0xe9,
0x70, 0xa7, 0x5f, 0xf0, 0x55, 0x4d, 0x77, 0x65, 0xbc, 0xd5, 0x2c, 0x8e, 0xe9, 0x14, 0xd4, 0x86, 0x15, 0x7c, 0x55, 0xd3, 0x5d, 0x19, 0x6b, 0x36, 0x8a, 0x23, 0x3a, 0x05, 0xb5, 0x60, 0xc3, 0x3f,
0x0d, 0x3f, 0x36, 0x80, 0x69, 0xd9, 0x22, 0xf4, 0x2d, 0x77, 0x93, 0x38, 0x7e, 0x84, 0x89, 0xb8, 0x1a, 0xc0, 0xb4, 0x6c, 0x11, 0xfa, 0x96, 0xbb, 0x41, 0x1c, 0x3f, 0xc2, 0x44, 0x5c, 0x88, 0xc4,
0x10, 0x89, 0xe3, 0xa3, 0x8f, 0xb5, 0x62, 0xf6, 0x9e, 0x55, 0x99, 0x95, 0x2b, 0x6d, 0x2e, 0xf6, 0xf1, 0xd1, 0xc3, 0x5a, 0x31, 0x7b, 0xcf, 0xaa, 0xcc, 0xc8, 0x95, 0x36, 0x17, 0xba, 0x58, 0x80,
0xb0, 0x00, 0xf5, 0xb4, 0xad, 0xf4, 0x2f, 0x23, 0x9b, 0x5a, 0xb4, 0x59, 0x56, 0x6b, 0x96, 0x8b, 0xba, 0xda, 0x56, 0xfa, 0x8f, 0x91, 0x4d, 0x2d, 0xda, 0x2c, 0xab, 0x35, 0xcb, 0xc5, 0x70, 0x09,
0xe1, 0x32, 0x18, 0x67, 0xd5, 0x2f, 0xc2, 0xa1, 0xeb, 0xd4, 0x2c, 0xca, 0x6f, 0x3f, 0x22, 0xba, 0x8c, 0xb1, 0xea, 0x17, 0xe1, 0xd0, 0x75, 0x6a, 0x16, 0xe5, 0xb7, 0x1f, 0x11, 0xdd, 0xea, 0x1a,
0xd5, 0x35, 0xbc, 0x9a, 0xe1, 0xa3, 0x8e, 0x11, 0xf0, 0x55, 0x00, 0x45, 0x59, 0xd8, 0xa6, 0x47, 0x5e, 0xcd, 0xf0, 0x51, 0xdb, 0x08, 0xf8, 0x0a, 0x80, 0xa2, 0x2c, 0x6c, 0xd1, 0x23, 0x2a, 0x01,
0x54, 0x02, 0xaa, 0xc0, 0xab, 0x76, 0x48, 0xa0, 0x2e, 0xa3, 0xe0, 0x12, 0x98, 0x70, 0xad, 0x6d, 0x55, 0xe0, 0x55, 0xdb, 0x24, 0x50, 0x87, 0x51, 0x70, 0x11, 0x8c, 0xbb, 0xd6, 0x16, 0x76, 0xab,
0xec, 0x56, 0xb1, 0x8b, 0x6b, 0x51, 0x40, 0xb8, 0x2a, 0x71, 0x3f, 0x9c, 0x6c, 0x35, 0x8b, 0x13, 0xd8, 0xc5, 0xb5, 0x28, 0x20, 0x5c, 0x95, 0xb8, 0x1f, 0x4e, 0x34, 0x1b, 0xc5, 0xf1, 0xd5, 0x2c,
0x6b, 0x59, 0x26, 0xea, 0x94, 0x2f, 0x5d, 0xcd, 0xee, 0x65, 0x7d, 0xe2, 0xa2, 0xd8, 0xfe, 0x30, 0x13, 0xb5, 0xcb, 0x97, 0xae, 0x64, 0xf7, 0xb2, 0x3e, 0x71, 0x51, 0x6c, 0x7f, 0x98, 0x03, 0x53,
0x07, 0xa6, 0x7b, 0x07, 0x05, 0xfc, 0xae, 0x2a, 0x8d, 0x45, 0xc5, 0xf7, 0xfa, 0x29, 0x84, 0x9e, 0xdd, 0x83, 0x02, 0x7e, 0x5f, 0x95, 0xc6, 0xa2, 0xe2, 0x7b, 0xed, 0x14, 0x42, 0x4f, 0x5e, 0x07,
0xbc, 0x0e, 0x80, 0xce, 0xab, 0x00, 0x3c, 0x64, 0xe7, 0xb5, 0xe5, 0x26, 0xd7, 0xfe, 0xad, 0xd3, 0x40, 0xfb, 0x55, 0x00, 0x1e, 0xb2, 0xf3, 0xda, 0x72, 0x93, 0x6b, 0xff, 0xe6, 0x69, 0xa0, 0x33,
0x40, 0x67, 0xfa, 0x2b, 0x23, 0xa2, 0x0a, 0xb0, 0x5c, 0x7e, 0xe8, 0x5b, 0x2e, 0x2e, 0x7d, 0xd4, 0xfd, 0x95, 0x21, 0x51, 0x05, 0x58, 0x2e, 0x3f, 0xf4, 0x2d, 0x17, 0x97, 0x3e, 0x6a, 0xbb, 0xda,
0x71, 0xb5, 0x4d, 0x37, 0x2b, 0xfc, 0xa1, 0x01, 0xce, 0x07, 0x21, 0xf6, 0x17, 0x37, 0x57, 0xef, 0xa6, 0x9b, 0x15, 0xfe, 0xd8, 0x00, 0xa3, 0x41, 0x88, 0xfd, 0x85, 0x8d, 0x95, 0x7b, 0x5f, 0x15,
0xfd, 0xbf, 0xd8, 0xb4, 0xd2, 0x41, 0xab, 0xc7, 0x37, 0x91, 0xdd, 0xaf, 0x85, 0xae, 0x4d, 0x12, 0x9b, 0x56, 0x3a, 0x68, 0xe5, 0xf8, 0x26, 0xb2, 0xfb, 0xb5, 0xd0, 0xb5, 0x41, 0x82, 0x90, 0x56,
0x84, 0xb4, 0x72, 0xa1, 0xd5, 0x2c, 0x9e, 0xdf, 0x68, 0x47, 0x41, 0x59, 0xd8, 0x92, 0x07, 0x26, 0xce, 0x37, 0x1b, 0xc5, 0xd1, 0xf5, 0x56, 0x14, 0x94, 0x85, 0x2d, 0x79, 0x60, 0x62, 0xf9, 0x20,
0x57, 0x0e, 0x22, 0x4c, 0x7c, 0xcb, 0x5d, 0x0e, 0x6a, 0xb1, 0x87, 0xfd, 0x48, 0xd8, 0x98, 0x69, 0xc2, 0xc4, 0xb7, 0xdc, 0xa5, 0xa0, 0x16, 0x7b, 0xd8, 0x8f, 0x84, 0x8d, 0x99, 0x76, 0x81, 0xf1,
0x17, 0x18, 0x8f, 0xd8, 0x2e, 0xb8, 0x02, 0x06, 0x62, 0xe2, 0xca, 0xa8, 0x1d, 0x55, 0x4d, 0x30, 0x88, 0xed, 0x82, 0xcb, 0xa0, 0x2f, 0x26, 0xae, 0x8c, 0xda, 0x61, 0xd5, 0x04, 0x43, 0xab, 0x88,
0xb4, 0x86, 0x18, 0xbd, 0x74, 0x15, 0x0c, 0x32, 0x3b, 0xe1, 0x25, 0x30, 0x40, 0xac, 0x7d, 0xae, 0xd1, 0x4b, 0x57, 0x40, 0x3f, 0xb3, 0x13, 0x5e, 0x04, 0x7d, 0xc4, 0xda, 0xe7, 0x5a, 0x47, 0x2a,
0x75, 0xac, 0x32, 0xcc, 0x44, 0x90, 0xb5, 0x8f, 0x18, 0xad, 0xf4, 0xb7, 0x59, 0x70, 0x3e, 0x33, 0x83, 0x4c, 0x04, 0x59, 0xfb, 0x88, 0xd1, 0x4a, 0xff, 0x98, 0x01, 0xa3, 0x99, 0xb9, 0xc0, 0x29,
0x17, 0x38, 0x0d, 0x72, 0xaa, 0xb3, 0x06, 0xa4, 0xd2, 0xdc, 0xea, 0x32, 0xca, 0x39, 0x36, 0x7c, 0x90, 0x53, 0x9d, 0x35, 0x20, 0x95, 0xe6, 0x56, 0x96, 0x50, 0xce, 0xb1, 0xe1, 0x0b, 0x2a, 0xbb,
0x51, 0x65, 0x57, 0x01, 0x5a, 0x54, 0x87, 0x05, 0xa7, 0xb2, 0xb2, 0x2c, 0x55, 0xc7, 0x0c, 0x49, 0x0a, 0xd0, 0xa2, 0x3a, 0x2c, 0x38, 0x95, 0x95, 0x65, 0xa9, 0x3a, 0x66, 0x48, 0x92, 0x1e, 0x99,
0xd2, 0x23, 0xb3, 0x01, 0xef, 0xc8, 0x5d, 0x21, 0x6c, 0xc0, 0x3b, 0x88, 0xd1, 0x8e, 0xdb, 0x2b, 0x0d, 0x78, 0x5b, 0xee, 0x0a, 0x61, 0x03, 0xde, 0x46, 0x8c, 0x76, 0xdc, 0x5e, 0x49, 0xd2, 0xac,
0x49, 0x9a, 0x35, 0xf9, 0x47, 0x68, 0xd6, 0x0c, 0x3d, 0xb0, 0x59, 0xf3, 0x38, 0xc8, 0x47, 0x4e, 0xc9, 0x3f, 0x42, 0xb3, 0x66, 0xe0, 0x81, 0xcd, 0x9a, 0xab, 0x20, 0x1f, 0x39, 0x91, 0x8b, 0xf9,
0xe4, 0x62, 0x7e, 0x52, 0x69, 0xc5, 0xf0, 0x1d, 0x46, 0x44, 0x82, 0x07, 0x31, 0x18, 0xb6, 0xf1, 0x49, 0xa5, 0x15, 0xc3, 0x77, 0x18, 0x11, 0x09, 0x1e, 0xc4, 0x60, 0xd0, 0xc6, 0xdb, 0x56, 0xec,
0x8e, 0x15, 0xbb, 0x11, 0x3f, 0x94, 0x46, 0x17, 0xbe, 0x7e, 0xb2, 0xe8, 0x11, 0xcd, 0x8c, 0x65, 0x46, 0xfc, 0x50, 0x1a, 0x9e, 0xff, 0xd6, 0xc9, 0xa2, 0x47, 0x34, 0x33, 0x96, 0x84, 0x4a, 0x94,
0xa1, 0x12, 0x25, 0xba, 0xe1, 0x13, 0x60, 0xd8, 0xb3, 0x0e, 0x1c, 0x2f, 0xf6, 0x78, 0xc5, 0x68, 0xe8, 0x86, 0x8f, 0x83, 0x41, 0xcf, 0x3a, 0x70, 0xbc, 0xd8, 0xe3, 0x15, 0xa3, 0x21, 0xc4, 0xd6,
0x08, 0xb1, 0x75, 0x41, 0x42, 0x09, 0x8f, 0x25, 0x41, 0x7c, 0x50, 0x73, 0x63, 0xea, 0x34, 0xb0, 0x04, 0x09, 0x25, 0x3c, 0x96, 0x04, 0xf1, 0x41, 0xcd, 0x8d, 0xa9, 0xb3, 0x87, 0x25, 0x53, 0x96,
0x64, 0xca, 0x92, 0x4e, 0x25, 0xc1, 0x95, 0x0c, 0x1f, 0x75, 0x8c, 0xe0, 0x60, 0x8e, 0xcf, 0x07, 0x74, 0x2a, 0x09, 0x2e, 0x67, 0xf8, 0xa8, 0x6d, 0x04, 0x07, 0x73, 0x7c, 0x3e, 0x78, 0x58, 0x03,
0x8f, 0x6a, 0x60, 0x82, 0x84, 0x12, 0x5e, 0x3b, 0x98, 0x94, 0x1f, 0xeb, 0x05, 0x26, 0x07, 0x77, 0x13, 0x24, 0x94, 0xf0, 0x5a, 0xc1, 0xa4, 0xfc, 0x48, 0x37, 0x30, 0x39, 0xb8, 0x6d, 0x04, 0x7c,
0x8c, 0x80, 0x4f, 0x83, 0x11, 0xcf, 0x3a, 0x58, 0xc3, 0x7e, 0x3d, 0xda, 0x35, 0xcf, 0xce, 0x1a, 0x0a, 0x0c, 0x79, 0xd6, 0xc1, 0x2a, 0xf6, 0xeb, 0xd1, 0x8e, 0x79, 0x76, 0xc6, 0x98, 0xed, 0xab,
0x73, 0x03, 0x95, 0xb3, 0xad, 0x66, 0x71, 0x64, 0x3d, 0x21, 0xa2, 0x94, 0xcf, 0x85, 0x1d, 0x5f, 0x9c, 0x6d, 0x36, 0x8a, 0x43, 0x6b, 0x09, 0x11, 0xa5, 0x7c, 0x2e, 0xec, 0xf8, 0x52, 0xf8, 0x9c,
0x0a, 0x9f, 0xd3, 0x84, 0x13, 0x22, 0x4a, 0xf9, 0xac, 0x32, 0x09, 0xad, 0x88, 0xed, 0x2b, 0xf3, 0x26, 0x9c, 0x10, 0x51, 0xca, 0x67, 0x95, 0x49, 0x68, 0x45, 0x6c, 0x5f, 0x99, 0xa3, 0xad, 0x17,
0x7c, 0xfb, 0xc5, 0x79, 0x53, 0x90, 0x51, 0xc2, 0x87, 0x73, 0xa0, 0xe0, 0x59, 0x07, 0xfc, 0x4e, 0xe7, 0x0d, 0x41, 0x46, 0x09, 0x1f, 0xce, 0x82, 0x82, 0x67, 0x1d, 0xf0, 0x3b, 0xa5, 0x39, 0xc6,
0x69, 0x8e, 0x73, 0xb5, 0xbc, 0xa1, 0xb8, 0x2e, 0x69, 0x48, 0x71, 0xb9, 0xa4, 0xe3, 0x0b, 0xc9, 0xd5, 0xf2, 0x86, 0xe2, 0x9a, 0xa4, 0x21, 0xc5, 0xe5, 0x92, 0x8e, 0x2f, 0x24, 0xc7, 0x35, 0x49,
0x09, 0x4d, 0x52, 0xd2, 0x90, 0xe2, 0xb2, 0xf8, 0x8d, 0x7d, 0xe7, 0x7e, 0x8c, 0x85, 0x30, 0xe4, 0x49, 0x43, 0x8a, 0xcb, 0xe2, 0x37, 0xf6, 0x9d, 0xfb, 0x31, 0x16, 0xc2, 0x90, 0x7b, 0x46, 0xc5,
0x9e, 0x51, 0xf1, 0x7b, 0x37, 0x65, 0x21, 0x5d, 0x8e, 0xdd, 0xe9, 0xbc, 0xd8, 0x8d, 0x9c, 0xd0, 0xef, 0xdd, 0x94, 0x85, 0x74, 0x39, 0x76, 0xa7, 0xf3, 0x62, 0x37, 0x72, 0x42, 0x17, 0xaf, 0x6f,
0xc5, 0x1b, 0x3b, 0xe6, 0x05, 0xee, 0x7f, 0x5e, 0xca, 0xaf, 0x2b, 0x2a, 0xd2, 0x24, 0xe0, 0xdb, 0x9b, 0xe7, 0xb9, 0xff, 0x79, 0x29, 0xbf, 0xa6, 0xa8, 0x48, 0x93, 0x80, 0x6f, 0x81, 0x7e, 0xec,
0x60, 0x10, 0xfb, 0xb1, 0x67, 0x5e, 0xe4, 0xc7, 0xf7, 0x49, 0xa3, 0x4f, 0xed, 0x97, 0x15, 0x3f, 0xc7, 0x9e, 0x79, 0x81, 0x1f, 0xdf, 0x27, 0x8d, 0x3e, 0xb5, 0x5f, 0x96, 0xfd, 0xd8, 0x43, 0x5c,
0xf6, 0x10, 0xd7, 0x0c, 0x5f, 0x04, 0x67, 0x3d, 0xeb, 0x80, 0x25, 0x01, 0x4c, 0x22, 0x76, 0xd1, 0x33, 0x7c, 0x01, 0x9c, 0xf5, 0xac, 0x03, 0x96, 0x04, 0x30, 0x89, 0xd8, 0x45, 0x73, 0x82, 0xcf,
0x9c, 0xe4, 0xf3, 0x9e, 0x60, 0x45, 0xec, 0xba, 0xce, 0x40, 0xed, 0x72, 0x7c, 0xa0, 0xe3, 0x6b, 0x7b, 0x9c, 0x15, 0xb1, 0x6b, 0x3a, 0x03, 0xb5, 0xca, 0xf1, 0x81, 0x8e, 0xaf, 0x0d, 0x9c, 0xd4,
0x03, 0xa7, 0xb4, 0x81, 0x3a, 0x03, 0xb5, 0xcb, 0x31, 0x27, 0x13, 0x7c, 0x3f, 0x76, 0x08, 0xb6, 0x06, 0xea, 0x0c, 0xd4, 0x2a, 0xc7, 0x9c, 0x4c, 0xf0, 0xfd, 0xd8, 0x21, 0xd8, 0x36, 0xbf, 0xc4,
0xcd, 0xff, 0xe1, 0x75, 0xaf, 0xec, 0xef, 0x0a, 0x1a, 0x52, 0x5c, 0x78, 0x3f, 0x69, 0x39, 0x98, 0xeb, 0x5e, 0xd9, 0xdf, 0x15, 0x34, 0xa4, 0xb8, 0xf0, 0x7e, 0xd2, 0x72, 0x30, 0xf9, 0xe6, 0xdb,
0x7c, 0xf3, 0x6d, 0xf6, 0x2d, 0x75, 0x6f, 0x90, 0x45, 0x42, 0xac, 0x43, 0x71, 0xaa, 0xe8, 0xcd, 0xe8, 0x59, 0xea, 0x5e, 0x27, 0x0b, 0x84, 0x58, 0x87, 0xe2, 0x54, 0xd1, 0x9b, 0x0d, 0xd0, 0x07,
0x06, 0xe8, 0x83, 0xbc, 0xe5, 0xba, 0x1b, 0x3b, 0xe6, 0x25, 0xee, 0xf1, 0x3e, 0x9e, 0x16, 0x2a, 0x79, 0xcb, 0x75, 0xd7, 0xb7, 0xcd, 0x8b, 0xdc, 0xe3, 0x3d, 0x3c, 0x2d, 0x54, 0x86, 0x59, 0x60,
0xc3, 0x2c, 0x32, 0xfd, 0x48, 0xc0, 0x30, 0xbc, 0xc0, 0x67, 0xb1, 0x30, 0x7d, 0x6a, 0x78, 0x1b, 0xfa, 0x91, 0x80, 0x61, 0x78, 0x81, 0xcf, 0x62, 0x61, 0xea, 0xd4, 0xf0, 0xd6, 0x99, 0x7e, 0x24,
0x4c, 0x3f, 0x12, 0x30, 0x7c, 0x7e, 0xfe, 0xe1, 0xc6, 0x8e, 0xf9, 0xd8, 0xe9, 0xcd, 0x8f, 0xe9, 0x60, 0xf8, 0xfc, 0xfc, 0xc3, 0xf5, 0x6d, 0xf3, 0xb1, 0xd3, 0x9b, 0x1f, 0xd3, 0x8f, 0x04, 0x0c,
0x47, 0x02, 0x06, 0xda, 0x60, 0xc0, 0x0f, 0x22, 0xf3, 0x72, 0xbf, 0xcf, 0x5e, 0x7e, 0x9a, 0xdc, 0xb4, 0x41, 0x9f, 0x1f, 0x44, 0xe6, 0xa5, 0x5e, 0x9f, 0xbd, 0xfc, 0x34, 0xb9, 0x1d, 0x44, 0x88,
0x0e, 0x22, 0xc4, 0xd4, 0xc3, 0x1f, 0x1b, 0x00, 0x84, 0x69, 0x24, 0x5e, 0x39, 0x69, 0x0b, 0x20, 0xa9, 0x87, 0x3f, 0x35, 0x00, 0x08, 0xd3, 0x48, 0xbc, 0x7c, 0xd2, 0x16, 0x40, 0x06, 0xad, 0x9c,
0x83, 0x56, 0x4e, 0xa3, 0x77, 0xc5, 0x8f, 0xc8, 0x61, 0x7a, 0xaf, 0xd1, 0xa2, 0x5c, 0x33, 0x00, 0x46, 0xef, 0xb2, 0x1f, 0x91, 0xc3, 0xf4, 0x5e, 0xa3, 0x45, 0xb9, 0x66, 0x00, 0xfc, 0xa5, 0x01,
0xfe, 0xc2, 0x00, 0x17, 0xf5, 0x72, 0x57, 0x59, 0x36, 0xc3, 0xfd, 0xb0, 0xd1, 0xc7, 0x40, 0xae, 0x2e, 0xe8, 0xe5, 0xae, 0xb2, 0x6c, 0x9a, 0xfb, 0x61, 0xbd, 0x87, 0x81, 0x5c, 0x09, 0x02, 0xb7,
0x04, 0x81, 0x5b, 0x31, 0x5b, 0xcd, 0xe2, 0xc5, 0xc5, 0x2e, 0x80, 0xa8, 0xab, 0x19, 0xf0, 0x37, 0x62, 0x36, 0x1b, 0xc5, 0x0b, 0x0b, 0x1d, 0x00, 0x51, 0x47, 0x33, 0xe0, 0x6f, 0x0d, 0x30, 0x2e,
0x06, 0x98, 0x90, 0xd9, 0x51, 0x33, 0xae, 0xc8, 0xdd, 0xf6, 0x76, 0x1f, 0xdd, 0x96, 0x85, 0x10, 0xb3, 0xa3, 0x66, 0x5c, 0x91, 0xbb, 0xed, 0xad, 0x1e, 0xba, 0x2d, 0x0b, 0x21, 0xbc, 0xa7, 0xbe,
0xde, 0x53, 0x5f, 0x19, 0x3b, 0xf8, 0xa8, 0xd3, 0x2a, 0xf8, 0x7b, 0x03, 0x8c, 0xd9, 0x38, 0xc4, 0x32, 0xb6, 0xf1, 0x51, 0xbb, 0x55, 0xf0, 0x0f, 0x06, 0x18, 0xb1, 0x71, 0x88, 0x7d, 0x1b, 0xfb,
0xbe, 0x8d, 0xfd, 0x1a, 0x33, 0x73, 0xf6, 0xa4, 0x7d, 0x85, 0xac, 0x99, 0xcb, 0x9a, 0x76, 0x61, 0x35, 0x66, 0xe6, 0xcc, 0x49, 0xfb, 0x0a, 0x59, 0x33, 0x97, 0x34, 0xed, 0xc2, 0xc2, 0xb2, 0xb4,
0x61, 0x59, 0x5a, 0x38, 0xa6, 0xb3, 0x8e, 0x9a, 0xc5, 0xa9, 0x74, 0xa8, 0xce, 0x41, 0x6d, 0x06, 0x70, 0x44, 0x67, 0x1d, 0x35, 0x8a, 0x93, 0xe9, 0x50, 0x9d, 0x83, 0x5a, 0x0c, 0x84, 0x3f, 0x33,
0xc2, 0x9f, 0x18, 0xe0, 0x7c, 0xea, 0x76, 0x71, 0x40, 0x5c, 0x3d, 0x9d, 0x85, 0xe7, 0x25, 0xe8, 0xc0, 0x68, 0xea, 0x76, 0x71, 0x40, 0x5c, 0x39, 0x9d, 0x85, 0xe7, 0x25, 0xe8, 0x42, 0x2b, 0x16,
0x62, 0x3b, 0x16, 0xca, 0x82, 0xc3, 0xdf, 0x1a, 0xac, 0xda, 0x4a, 0xee, 0x6a, 0xd4, 0x2c, 0x71, 0xca, 0x82, 0xc3, 0xdf, 0x19, 0xac, 0xda, 0x4a, 0xee, 0x6a, 0xd4, 0x2c, 0x71, 0x0f, 0xbe, 0xde,
0x0f, 0xbe, 0xd1, 0x4f, 0x0f, 0x2a, 0xe5, 0xc2, 0x81, 0xd7, 0xd3, 0x4a, 0x4e, 0x71, 0x8e, 0x9a, 0x4b, 0x0f, 0x2a, 0xe5, 0xc2, 0x81, 0xd7, 0xd3, 0x4a, 0x4e, 0x71, 0x8e, 0x1a, 0xc5, 0x09, 0xdd,
0xc5, 0x49, 0xdd, 0x7f, 0x8a, 0x81, 0x74, 0xe3, 0xe0, 0x7b, 0x06, 0x18, 0xc3, 0x69, 0xc1, 0x4c, 0x7f, 0x8a, 0x81, 0x74, 0xe3, 0xe0, 0xbb, 0x06, 0x18, 0xc1, 0x69, 0xc1, 0x4c, 0xcd, 0xab, 0x27,
0xcd, 0xc7, 0x4f, 0xea, 0xba, 0xae, 0xe5, 0xb7, 0xb8, 0x4e, 0x6b, 0x2c, 0x8a, 0xda, 0x60, 0x59, 0x75, 0x5d, 0xc7, 0xf2, 0x5b, 0x5c, 0xa7, 0x35, 0x16, 0x45, 0x2d, 0xb0, 0xac, 0xf6, 0xc3, 0x07,
0xed, 0x87, 0x0f, 0x2c, 0x2f, 0x74, 0xb1, 0xf9, 0xbf, 0xfd, 0xab, 0xfd, 0x56, 0x84, 0x4a, 0x94, 0x96, 0x17, 0xba, 0xd8, 0xfc, 0x72, 0xef, 0x6a, 0xbf, 0x65, 0xa1, 0x12, 0x25, 0xba, 0xe1, 0x75,
0xe8, 0x86, 0xd7, 0x41, 0xc1, 0x8f, 0x5d, 0xd7, 0xda, 0x76, 0xb1, 0xf9, 0x04, 0xaf, 0x22, 0x54, 0x50, 0xf0, 0x63, 0xd7, 0xb5, 0xb6, 0x5c, 0x6c, 0x3e, 0xce, 0xab, 0x08, 0xd5, 0x5f, 0xbc, 0x2d,
0x7f, 0xf1, 0xb6, 0xa4, 0x23, 0x25, 0x01, 0x77, 0xc0, 0xec, 0xc1, 0x2d, 0xf5, 0xf8, 0xa2, 0x6b, 0xe9, 0x48, 0x49, 0xc0, 0x6d, 0x30, 0x73, 0x70, 0x4b, 0x3d, 0xbe, 0xe8, 0xd8, 0xc0, 0x33, 0xaf,
0x03, 0xcf, 0xbc, 0xc6, 0xb5, 0x4c, 0xb7, 0x9a, 0xc5, 0xa9, 0xad, 0xee, 0x2d, 0xbe, 0x87, 0xea, 0x71, 0x2d, 0x53, 0xcd, 0x46, 0x71, 0x72, 0xb3, 0x73, 0x8b, 0xef, 0xa1, 0x3a, 0xe0, 0x1b, 0xe0,
0x80, 0x6f, 0x82, 0xc7, 0x34, 0x99, 0x15, 0x6f, 0x1b, 0xdb, 0x36, 0xb6, 0x93, 0x8b, 0x96, 0xf9, 0x31, 0x4d, 0x66, 0xd9, 0xdb, 0xc2, 0xb6, 0x8d, 0xed, 0xe4, 0xa2, 0x65, 0x7e, 0x85, 0x43, 0xa8,
0x7f, 0x1c, 0x42, 0xed, 0xe3, 0xad, 0xac, 0x00, 0x7a, 0xd0, 0x68, 0xb8, 0x06, 0xa6, 0x34, 0xf6, 0x7d, 0xbc, 0x99, 0x15, 0x40, 0x0f, 0x1a, 0x0d, 0x57, 0xc1, 0xa4, 0xc6, 0x5e, 0xf1, 0xa3, 0x75,
0xaa, 0x1f, 0x6d, 0x90, 0x6a, 0x44, 0x1c, 0xbf, 0x6e, 0xce, 0x71, 0xbd, 0x17, 0x93, 0xdd, 0xb7, 0x52, 0x8d, 0x88, 0xe3, 0xd7, 0xcd, 0x59, 0xae, 0xf7, 0x42, 0xb2, 0xfb, 0x36, 0x35, 0x1e, 0xea,
0xa5, 0xf1, 0x50, 0x8f, 0x31, 0xf0, 0x95, 0x36, 0x6d, 0xfc, 0xc3, 0x85, 0x15, 0xde, 0xc2, 0x87, 0x32, 0x06, 0xbe, 0xdc, 0xa2, 0x8d, 0x7f, 0xb8, 0xb0, 0xc2, 0x5b, 0xf8, 0x90, 0x9a, 0x4f, 0xf0,
0xd4, 0x7c, 0x92, 0x17, 0x17, 0x7c, 0x9d, 0xb7, 0x34, 0x3a, 0xea, 0x21, 0x0f, 0xbf, 0x01, 0x2e, 0xe2, 0x82, 0xaf, 0xf3, 0xa6, 0x46, 0x47, 0x5d, 0xe4, 0xe1, 0xb7, 0xc1, 0xf9, 0x0c, 0x87, 0xdd,
0x64, 0x38, 0xec, 0x5e, 0x61, 0x3e, 0x25, 0x2e, 0x08, 0xac, 0x12, 0xdd, 0x4a, 0x88, 0xa8, 0x9b, 0x2b, 0xcc, 0x27, 0xc5, 0x05, 0x81, 0x55, 0xa2, 0x9b, 0x09, 0x11, 0x75, 0x92, 0x84, 0xdf, 0x04,
0x24, 0xfc, 0x1a, 0x80, 0x1a, 0x79, 0xdd, 0x0a, 0xf9, 0xf8, 0xa7, 0xc5, 0x5d, 0x85, 0xad, 0xe8, 0x50, 0x23, 0xaf, 0x59, 0x21, 0x1f, 0xff, 0x94, 0xb8, 0xab, 0xb0, 0x15, 0xdd, 0x94, 0x34, 0xd4,
0x96, 0xa4, 0xa1, 0x2e, 0x72, 0xf0, 0x43, 0xa3, 0x6d, 0x26, 0xe9, 0x6d, 0x96, 0x9a, 0xd7, 0xf9, 0x41, 0x0e, 0x7e, 0x68, 0xb4, 0xcc, 0x24, 0xbd, 0xcd, 0x52, 0xf3, 0x3a, 0xdf, 0xb0, 0x2f, 0x1f,
0x86, 0x7d, 0xe5, 0xf8, 0x01, 0x98, 0x2a, 0x43, 0xb1, 0x8b, 0x35, 0x0f, 0x6b, 0x28, 0xa8, 0x07, 0x3f, 0x00, 0x53, 0x65, 0x28, 0x76, 0xb1, 0xe6, 0x61, 0x0d, 0x05, 0x75, 0x41, 0x9f, 0x62, 0x97,
0xfa, 0x34, 0xbb, 0x4c, 0x67, 0x72, 0x38, 0x1c, 0x07, 0x03, 0x7b, 0x58, 0x7e, 0x36, 0x46, 0xec, 0xe9, 0x4c, 0x0e, 0x87, 0x63, 0xa0, 0x6f, 0x17, 0xcb, 0xcf, 0xc6, 0x88, 0xfd, 0x84, 0x6f, 0x82,
0x27, 0x7c, 0x0b, 0xe4, 0x1b, 0x96, 0x1b, 0x27, 0xad, 0x80, 0xfe, 0x9d, 0xf5, 0x48, 0xe8, 0x7d, 0xfc, 0x9e, 0xe5, 0xc6, 0x49, 0x2b, 0xa0, 0x77, 0x67, 0x3d, 0x12, 0x7a, 0x5f, 0xcc, 0xdd, 0x30,
0x29, 0x77, 0xc3, 0x98, 0xfe, 0xc0, 0x00, 0x53, 0xdd, 0x4f, 0x95, 0x2f, 0xcb, 0xa2, 0x9f, 0x1b, 0xa6, 0xde, 0x37, 0xc0, 0x64, 0xe7, 0x53, 0xe5, 0x8b, 0xb2, 0xe8, 0x17, 0x06, 0x18, 0x6f, 0x3b,
0x60, 0xa2, 0xe3, 0x00, 0xe9, 0x62, 0x8c, 0xdb, 0x6e, 0xcc, 0xbd, 0x3e, 0x9e, 0x04, 0x62, 0x23, 0x40, 0x3a, 0x18, 0xe3, 0xb6, 0x1a, 0x73, 0xaf, 0x87, 0x27, 0x81, 0xd8, 0x08, 0xbc, 0xa2, 0xd5,
0xf0, 0x8a, 0x56, 0xb7, 0xec, 0x47, 0x06, 0x18, 0xcf, 0x26, 0xe6, 0x2f, 0xc9, 0x4b, 0xa5, 0xf7, 0x2d, 0xfb, 0x89, 0x01, 0xc6, 0xb2, 0x89, 0xf9, 0x0b, 0xf2, 0x52, 0xe9, 0xbd, 0x1c, 0x98, 0xec,
0x73, 0x60, 0xaa, 0x7b, 0x0d, 0x0e, 0x3d, 0xd5, 0x5d, 0xe8, 0x7b, 0x83, 0xa6, 0x5b, 0xcb, 0xf6, 0x5c, 0x83, 0x43, 0x4f, 0x75, 0x17, 0x7a, 0xde, 0xa0, 0xe9, 0xd4, 0xb2, 0x7d, 0xc7, 0x00, 0xc3,
0x5d, 0x03, 0x8c, 0xbe, 0xa3, 0xe4, 0x92, 0xaf, 0x99, 0xfd, 0xec, 0x0a, 0x25, 0x47, 0x5f, 0xca, 0x6f, 0x2b, 0xb9, 0xe4, 0x6b, 0x66, 0x2f, 0xbb, 0x42, 0xc9, 0xd1, 0x97, 0x32, 0x28, 0xd2, 0x21,
0xa0, 0x48, 0x87, 0x2c, 0xfd, 0xce, 0x00, 0x93, 0x5d, 0x8f, 0x73, 0x78, 0x0d, 0x0c, 0x59, 0xae, 0x4b, 0xbf, 0x37, 0xc0, 0x44, 0xc7, 0xe3, 0x1c, 0x5e, 0x03, 0x03, 0x96, 0xeb, 0x06, 0xfb, 0xa2,
0x1b, 0xec, 0x8b, 0x6e, 0x9e, 0xd6, 0x96, 0x5f, 0xe4, 0x54, 0x24, 0xb9, 0x9a, 0xcf, 0x72, 0x5f, 0x9b, 0xa7, 0xb5, 0xe5, 0x17, 0x38, 0x15, 0x49, 0xae, 0xe6, 0xb3, 0xdc, 0xe7, 0xe0, 0xb3, 0xd2,
0x80, 0xcf, 0x4a, 0x7f, 0x30, 0xc0, 0xe5, 0x07, 0x45, 0xdd, 0x17, 0xbd, 0x86, 0x73, 0xa0, 0x20, 0x9f, 0x0c, 0x70, 0xe9, 0x41, 0x51, 0xf7, 0x79, 0xaf, 0xe1, 0x2c, 0x28, 0xc8, 0x62, 0xfb, 0x90,
0x8b, 0xed, 0x43, 0xbe, 0x7e, 0x32, 0xbb, 0xca, 0x8c, 0xc0, 0x5f, 0xcb, 0x88, 0x5f, 0xa5, 0x5f, 0xaf, 0x9f, 0xcc, 0xae, 0x32, 0x23, 0xf0, 0xd7, 0x32, 0xe2, 0x57, 0xe9, 0xd7, 0x06, 0x18, 0xab,
0x19, 0x60, 0xbc, 0x8a, 0x49, 0xc3, 0xa9, 0x61, 0x84, 0x77, 0x30, 0xc1, 0x7e, 0x0d, 0xc3, 0x79, 0x62, 0xb2, 0xe7, 0xd4, 0x30, 0xc2, 0xdb, 0x98, 0x60, 0xbf, 0x86, 0xe1, 0x1c, 0x18, 0xe2, 0x5f,
0x30, 0xc2, 0xbf, 0x36, 0x86, 0x56, 0x2d, 0xf9, 0x46, 0x32, 0x21, 0x1d, 0x3d, 0x72, 0x3b, 0x61, 0x1b, 0x43, 0xab, 0x96, 0x7c, 0x23, 0x19, 0x97, 0x8e, 0x1e, 0xba, 0x9d, 0x30, 0x50, 0x2a, 0xa3,
0xa0, 0x54, 0x46, 0x7d, 0x4f, 0xc9, 0xf5, 0xfc, 0x9e, 0x72, 0x19, 0x0c, 0x86, 0x69, 0x03, 0xb8, 0xbe, 0xa7, 0xe4, 0xba, 0x7e, 0x4f, 0xb9, 0x04, 0xfa, 0xc3, 0xb4, 0x01, 0x5c, 0x60, 0x5c, 0xde,
0xc0, 0xb8, 0xbc, 0xe7, 0xcb, 0xa9, 0x9c, 0x1b, 0x90, 0x88, 0x77, 0xb9, 0xf2, 0x92, 0x1b, 0x90, 0xf3, 0xe5, 0x54, 0xce, 0x0d, 0x48, 0xc4, 0xbb, 0x5c, 0x79, 0xc9, 0x0d, 0x48, 0x84, 0x38, 0xb5,
0x08, 0x71, 0x6a, 0xe9, 0xe3, 0x1c, 0x38, 0xd7, 0x9e, 0x9f, 0x19, 0x20, 0x89, 0xdd, 0x8e, 0x0f, 0xf4, 0x41, 0x0e, 0x9c, 0x6b, 0xcd, 0xcf, 0x0c, 0x90, 0xc4, 0x6e, 0xdb, 0x07, 0x1c, 0xc6, 0x43,
0x38, 0x8c, 0x87, 0x38, 0x47, 0x7f, 0x37, 0x90, 0x7b, 0xf0, 0xbb, 0x01, 0xf8, 0x32, 0x98, 0x90, 0x9c, 0xa3, 0xbf, 0x1b, 0xc8, 0x3d, 0xf8, 0xdd, 0x00, 0x7c, 0x09, 0x8c, 0xcb, 0x9f, 0xcb, 0x07,
0x3f, 0x57, 0x0e, 0x42, 0x82, 0x29, 0xff, 0x32, 0x39, 0xd0, 0xfe, 0xde, 0x6f, 0x3d, 0x2b, 0x80, 0x21, 0xc1, 0x94, 0x7f, 0x99, 0xec, 0x6b, 0x7d, 0xef, 0xb7, 0x96, 0x15, 0x40, 0xed, 0x63, 0xe0,
0x3a, 0xc7, 0xc0, 0x6f, 0x65, 0xde, 0x34, 0xac, 0xa4, 0xef, 0x19, 0x8e, 0x9a, 0xc5, 0x17, 0x7b, 0x37, 0x32, 0x6f, 0x1a, 0xae, 0xa6, 0xef, 0x19, 0x58, 0x6d, 0xc7, 0x4b, 0x87, 0x7b, 0x6c, 0xcb,
0x3d, 0xc0, 0x8b, 0x23, 0xc7, 0x9d, 0x6f, 0xa8, 0x09, 0xce, 0xef, 0xb0, 0x12, 0xa3, 0xbc, 0x42, 0x2f, 0x13, 0x12, 0x90, 0xcc, 0x43, 0x87, 0x39, 0x30, 0xb4, 0xcd, 0x04, 0x78, 0x9f, 0x3c, 0xdf,
0x48, 0x40, 0xf8, 0x59, 0x98, 0x3c, 0x85, 0x98, 0x07, 0x23, 0x9c, 0xc5, 0x3b, 0xe9, 0xf9, 0xf6, 0xea, 0xf4, 0x9b, 0x09, 0x03, 0xa5, 0x32, 0xa5, 0x3f, 0x1b, 0xe0, 0x7c, 0xf2, 0x1a, 0xc8, 0x75,
0x65, 0xb9, 0x99, 0x30, 0x50, 0x2a, 0x53, 0xfa, 0xa3, 0x01, 0x2e, 0x24, 0xef, 0x85, 0x5c, 0x07, 0xb0, 0x1f, 0x2d, 0x06, 0xfe, 0xb6, 0x53, 0x87, 0x17, 0x45, 0xff, 0x53, 0x6b, 0x2a, 0x26, 0xbd,
0xfb, 0xd1, 0x52, 0xe0, 0xef, 0x38, 0x75, 0x78, 0x49, 0x74, 0x48, 0xb5, 0xb6, 0x63, 0xd2, 0x1d, 0x4f, 0x78, 0x1f, 0x0c, 0x52, 0xb1, 0xd8, 0x32, 0x0e, 0x5f, 0x39, 0x7e, 0x1c, 0x66, 0xa3, 0x46,
0x85, 0xf7, 0xc1, 0x30, 0x15, 0xe1, 0x20, 0x23, 0xf5, 0xd5, 0xe3, 0x47, 0x6a, 0x36, 0xae, 0x44, 0x94, 0x6f, 0x09, 0x35, 0xc1, 0x61, 0xa1, 0x58, 0xb3, 0x2a, 0xb1, 0x6f, 0xcb, 0x1e, 0xf8, 0x88,
0x81, 0x97, 0x50, 0x13, 0x1c, 0x16, 0xac, 0x35, 0xab, 0x12, 0xfb, 0xb6, 0xec, 0x92, 0x8f, 0x89, 0x08, 0xc5, 0xc5, 0x05, 0x41, 0x43, 0x8a, 0x5b, 0xfa, 0xa7, 0x01, 0xc6, 0xdb, 0x5e, 0x37, 0xc1,
0x60, 0x5d, 0x5a, 0x14, 0x34, 0xa4, 0xb8, 0xa5, 0xbf, 0x1b, 0x60, 0xa2, 0xe3, 0xfd, 0x13, 0xfc, 0x1f, 0x1a, 0x60, 0xa4, 0xa6, 0x4d, 0x4f, 0x6e, 0xe8, 0xb5, 0x93, 0xbf, 0xa0, 0xd2, 0x94, 0x8a,
0xbe, 0x01, 0xc6, 0x6a, 0xda, 0xf4, 0xe4, 0x96, 0x5f, 0x3f, 0xf9, 0x1b, 0x2b, 0x4d, 0xa9, 0xa8, 0x1a, 0x48, 0xa7, 0xa0, 0x16, 0x50, 0xb8, 0x09, 0xcc, 0x5a, 0xe6, 0x21, 0x61, 0xe6, 0xd3, 0xe4,
0x92, 0x74, 0x0a, 0x6a, 0x03, 0x85, 0x5b, 0xc0, 0xac, 0x65, 0x9e, 0x1a, 0x66, 0x3e, 0x5e, 0x5e, 0xa5, 0x66, 0xa3, 0x68, 0x2e, 0x76, 0x91, 0x41, 0x5d, 0x47, 0x57, 0xbe, 0xfb, 0xf1, 0x67, 0xd3,
0x6e, 0x35, 0x8b, 0xe6, 0x52, 0x0f, 0x19, 0xd4, 0x73, 0x74, 0xe5, 0xdb, 0x9f, 0x7c, 0x3e, 0x73, 0x67, 0x3e, 0xf9, 0x6c, 0xfa, 0xcc, 0xa7, 0x9f, 0x4d, 0x9f, 0x79, 0xa7, 0x39, 0x6d, 0x7c, 0xdc,
0xe6, 0xd3, 0xcf, 0x67, 0xce, 0x7c, 0xf6, 0xf9, 0xcc, 0x99, 0x77, 0x5b, 0x33, 0xc6, 0x27, 0xad, 0x9c, 0x36, 0x3e, 0x69, 0x4e, 0x1b, 0x9f, 0x36, 0xa7, 0x8d, 0xbf, 0x35, 0xa7, 0x8d, 0x9f, 0xff,
0x19, 0xe3, 0xd3, 0xd6, 0x8c, 0xf1, 0x59, 0x6b, 0xc6, 0xf8, 0x4b, 0x6b, 0xc6, 0xf8, 0xe9, 0x5f, 0x7d, 0xfa, 0xcc, 0xeb, 0x37, 0x8e, 0xfb, 0x7c, 0xf8, 0xff, 0x01, 0x00, 0x00, 0xff, 0xff, 0x1d,
0x67, 0xce, 0xbc, 0x71, 0xe3, 0xb8, 0x0f, 0x8c, 0xff, 0x1b, 0x00, 0x00, 0xff, 0xff, 0xab, 0x86, 0x01, 0xc1, 0x04, 0x92, 0x2c, 0x00, 0x00,
0x4f, 0xde, 0xb4, 0x2c, 0x00, 0x00,
} }
func (m *ConversionRequest) Marshal() (dAtA []byte, err error) { func (m *ConversionRequest) Marshal() (dAtA []byte, err error) {
@ -8975,7 +8973,7 @@ func (m *ValidationRule) Unmarshal(dAtA []byte) error {
if postIndex > l { if postIndex > l {
return io.ErrUnexpectedEOF return io.ErrUnexpectedEOF
} }
s := k8s_io_apimachinery_pkg_util_validation_field.ErrorType(dAtA[iNdEx:postIndex]) s := FieldValueErrorReason(dAtA[iNdEx:postIndex])
m.Reason = &s m.Reason = &s
iNdEx = postIndex iNdEx = postIndex
case 5: case 5:

View File

@ -683,7 +683,7 @@ message ValidationRule {
// The HTTP status code returned to the caller will match the reason of the reason of the first failed validation rule. // The HTTP status code returned to the caller will match the reason of the reason of the first failed validation rule.
// The currently supported reasons are: "FieldValueInvalid", "FieldValueForbidden", "FieldValueRequired", "FieldValueDuplicate". // The currently supported reasons are: "FieldValueInvalid", "FieldValueForbidden", "FieldValueRequired", "FieldValueDuplicate".
// If not set, default to use "FieldValueInvalid". // If not set, default to use "FieldValueInvalid".
// All future added reasons must be accepted by clients when reading this value. // All future added reasons must be accepted by clients when reading this value and unknown reasons should be treated as FieldValueInvalid.
// +optional // +optional
optional string reason = 4; optional string reason = 4;

View File

@ -16,8 +16,24 @@ limitations under the License.
package v1 package v1
import ( // FieldValueErrorReason is a machine-readable value providing more detail about why a field failed the validation.
"k8s.io/apimachinery/pkg/util/validation/field" // +enum
type FieldValueErrorReason string
const (
// FieldValueRequired is used to report required values that are not
// provided (e.g. empty strings, null values, or empty arrays).
FieldValueRequired FieldValueErrorReason = "FieldValueRequired"
// FieldValueDuplicate is used to report collisions of values that must be
// unique (e.g. unique IDs).
FieldValueDuplicate FieldValueErrorReason = "FieldValueDuplicate"
// FieldValueInvalid is used to report malformed values (e.g. failed regex
// match, too long, out of bounds).
FieldValueInvalid FieldValueErrorReason = "FieldValueInvalid"
// FieldValueForbidden is used to report valid (as per formatting rules)
// values which would be accepted under some conditions, but which are not
// permitted by the current conditions (such as security policy).
FieldValueForbidden FieldValueErrorReason = "FieldValueForbidden"
) )
// JSONSchemaProps is a JSON-Schema following Specification Draft 4 (http://json-schema.org/). // JSONSchemaProps is a JSON-Schema following Specification Draft 4 (http://json-schema.org/).
@ -255,9 +271,9 @@ type ValidationRule struct {
// The HTTP status code returned to the caller will match the reason of the reason of the first failed validation rule. // The HTTP status code returned to the caller will match the reason of the reason of the first failed validation rule.
// The currently supported reasons are: "FieldValueInvalid", "FieldValueForbidden", "FieldValueRequired", "FieldValueDuplicate". // The currently supported reasons are: "FieldValueInvalid", "FieldValueForbidden", "FieldValueRequired", "FieldValueDuplicate".
// If not set, default to use "FieldValueInvalid". // If not set, default to use "FieldValueInvalid".
// All future added reasons must be accepted by clients when reading this value. // All future added reasons must be accepted by clients when reading this value and unknown reasons should be treated as FieldValueInvalid.
// +optional // +optional
Reason *field.ErrorType `json:"reason,omitempty" protobuf:"bytes,4,opt,name=reason"` Reason *FieldValueErrorReason `json:"reason,omitempty" protobuf:"bytes,4,opt,name=reason"`
// fieldPath represents the field path returned when the validation fails. // fieldPath represents the field path returned when the validation fails.
// It must be a relative JSON path (i.e. with array notation) scoped to the location of this x-kubernetes-validations extension in the schema and refer to an existing field. // It must be a relative JSON path (i.e. with array notation) scoped to the location of this x-kubernetes-validations extension in the schema and refer to an existing field.
// e.g. when validation checks if a specific attribute `foo` under a map `testMap`, the fieldPath could be set to `.testMap.foo` // e.g. when validation checks if a specific attribute `foo` under a map `testMap`, the fieldPath could be set to `.testMap.foo`

View File

@ -28,7 +28,6 @@ import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
conversion "k8s.io/apimachinery/pkg/conversion" conversion "k8s.io/apimachinery/pkg/conversion"
runtime "k8s.io/apimachinery/pkg/runtime" runtime "k8s.io/apimachinery/pkg/runtime"
field "k8s.io/apimachinery/pkg/util/validation/field"
) )
func init() { func init() {
@ -1260,7 +1259,7 @@ func autoConvert_v1_ValidationRule_To_apiextensions_ValidationRule(in *Validatio
out.Rule = in.Rule out.Rule = in.Rule
out.Message = in.Message out.Message = in.Message
out.MessageExpression = in.MessageExpression out.MessageExpression = in.MessageExpression
out.Reason = (*field.ErrorType)(unsafe.Pointer(in.Reason)) out.Reason = (*apiextensions.FieldValueErrorReason)(unsafe.Pointer(in.Reason))
out.FieldPath = in.FieldPath out.FieldPath = in.FieldPath
return nil return nil
} }
@ -1274,7 +1273,7 @@ func autoConvert_apiextensions_ValidationRule_To_v1_ValidationRule(in *apiextens
out.Rule = in.Rule out.Rule = in.Rule
out.Message = in.Message out.Message = in.Message
out.MessageExpression = in.MessageExpression out.MessageExpression = in.MessageExpression
out.Reason = (*field.ErrorType)(unsafe.Pointer(in.Reason)) out.Reason = (*FieldValueErrorReason)(unsafe.Pointer(in.Reason))
out.FieldPath = in.FieldPath out.FieldPath = in.FieldPath
return nil return nil
} }

View File

@ -23,7 +23,6 @@ package v1
import ( import (
runtime "k8s.io/apimachinery/pkg/runtime" runtime "k8s.io/apimachinery/pkg/runtime"
field "k8s.io/apimachinery/pkg/util/validation/field"
) )
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
@ -617,7 +616,7 @@ func (in *ValidationRule) DeepCopyInto(out *ValidationRule) {
*out = *in *out = *in
if in.Reason != nil { if in.Reason != nil {
in, out := &in.Reason, &out.Reason in, out := &in.Reason, &out.Reason
*out = new(field.ErrorType) *out = new(FieldValueErrorReason)
**out = **in **out = **in
} }
return return

View File

@ -35,7 +35,6 @@ import (
strings "strings" strings "strings"
k8s_io_apimachinery_pkg_types "k8s.io/apimachinery/pkg/types" k8s_io_apimachinery_pkg_types "k8s.io/apimachinery/pkg/types"
k8s_io_apimachinery_pkg_util_validation_field "k8s.io/apimachinery/pkg/util/validation/field"
) )
// Reference imports to suppress errors if they are not otherwise used. // Reference imports to suppress errors if they are not otherwise used.
@ -786,205 +785,204 @@ func init() {
} }
var fileDescriptor_98a4cc6918394e53 = []byte{ var fileDescriptor_98a4cc6918394e53 = []byte{
// 3159 bytes of a gzipped FileDescriptorProto // 3144 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x5a, 0xcd, 0x73, 0x23, 0x47, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x5a, 0xcd, 0x73, 0x1c, 0x47,
0xd9, 0xdf, 0x91, 0x2c, 0x5b, 0x6e, 0x7b, 0x77, 0xed, 0xde, 0xb5, 0x33, 0xeb, 0x6c, 0x2c, 0xaf, 0xd9, 0xf7, 0xec, 0x6a, 0xa5, 0x55, 0x4b, 0xb6, 0xa5, 0xb6, 0xa5, 0x8c, 0x15, 0x47, 0x2b, 0xaf,
0xf2, 0x66, 0x5f, 0x27, 0xd9, 0x48, 0xc9, 0xbe, 0xc9, 0x9b, 0x90, 0x22, 0x45, 0x59, 0xb6, 0x37, 0xdf, 0xf8, 0x55, 0x12, 0x67, 0x95, 0xf8, 0x4d, 0xde, 0x84, 0x40, 0x8a, 0xd2, 0x4a, 0x72, 0x50,
0x38, 0x59, 0xaf, 0x4d, 0x6b, 0x37, 0x31, 0xe4, 0x73, 0xac, 0x69, 0x69, 0x27, 0x1e, 0xcd, 0xcc, 0x62, 0x59, 0xa2, 0xd7, 0x76, 0x04, 0xf9, 0x1c, 0xed, 0xf4, 0xae, 0x26, 0x9a, 0x9d, 0x19, 0x77,
0x76, 0xcf, 0xc8, 0x76, 0x05, 0x28, 0x3e, 0x2a, 0x05, 0x45, 0x01, 0xa1, 0x48, 0x2e, 0x14, 0x70, 0xcf, 0xac, 0xa4, 0x0a, 0x50, 0x7c, 0x54, 0x0a, 0x8a, 0x02, 0x42, 0x91, 0x5c, 0x28, 0xe0, 0x10,
0x08, 0x14, 0x17, 0x0e, 0x70, 0x80, 0xe2, 0x02, 0x7f, 0x40, 0x8e, 0x29, 0x8a, 0x43, 0x0e, 0x94, 0x28, 0x2e, 0x1c, 0xe0, 0x00, 0x37, 0xf8, 0x03, 0x72, 0x4c, 0x51, 0x1c, 0x72, 0xa0, 0x16, 0xb2,
0x20, 0xe2, 0xca, 0x91, 0x2a, 0xaa, 0x7c, 0xa2, 0xfa, 0x63, 0x7a, 0x5a, 0x23, 0x69, 0x77, 0x2b, 0x5c, 0x39, 0x52, 0x45, 0x95, 0x4e, 0x54, 0x7f, 0x4c, 0x4f, 0xef, 0xec, 0xae, 0xed, 0x8a, 0x76,
0x96, 0xb2, 0xdc, 0xa4, 0xe7, 0xeb, 0xf7, 0xcc, 0xd3, 0x4f, 0x3f, 0xfd, 0xf4, 0x33, 0x03, 0xea, 0x63, 0x6e, 0xbb, 0xcf, 0xd7, 0xef, 0x99, 0xa7, 0x9f, 0x7e, 0xfa, 0xe9, 0x67, 0x06, 0xd4, 0xf6,
0x7b, 0xcf, 0xd0, 0x92, 0xe3, 0x97, 0xf7, 0xa2, 0x5d, 0x4c, 0x3c, 0x1c, 0x62, 0x5a, 0x6e, 0x61, 0x9e, 0xa5, 0x25, 0xc7, 0x5f, 0xda, 0x8b, 0x76, 0x30, 0xf1, 0x70, 0x88, 0xe9, 0x52, 0x13, 0x7b,
0xcf, 0xf6, 0x49, 0x59, 0x32, 0xac, 0xc0, 0xc1, 0x07, 0x21, 0xf6, 0xa8, 0xe3, 0x7b, 0xf4, 0x31, 0xb6, 0x4f, 0x96, 0x24, 0xc3, 0x0a, 0x1c, 0x7c, 0x10, 0x62, 0x8f, 0x3a, 0xbe, 0x47, 0x1f, 0xb7,
0x2b, 0x70, 0x28, 0x26, 0x2d, 0x4c, 0xca, 0xc1, 0x5e, 0x83, 0xf1, 0x68, 0xb7, 0x40, 0xb9, 0xf5, 0x02, 0x87, 0x62, 0xd2, 0xc4, 0x64, 0x29, 0xd8, 0xab, 0x33, 0x1e, 0xed, 0x14, 0x58, 0x6a, 0x3e,
0xc4, 0x2e, 0x0e, 0xad, 0x27, 0xca, 0x0d, 0xec, 0x61, 0x62, 0x85, 0xd8, 0x2e, 0x05, 0xc4, 0x0f, 0xb9, 0x83, 0x43, 0xeb, 0xc9, 0xa5, 0x3a, 0xf6, 0x30, 0xb1, 0x42, 0x6c, 0x97, 0x02, 0xe2, 0x87,
0x7d, 0xf8, 0x9c, 0x30, 0x57, 0xea, 0x92, 0x7e, 0x43, 0x99, 0x2b, 0x05, 0x7b, 0x0d, 0xc6, 0xa3, 0x3e, 0x7c, 0x5e, 0x98, 0x2b, 0x75, 0x48, 0xbf, 0xa1, 0xcc, 0x95, 0x82, 0xbd, 0x3a, 0xe3, 0xd1,
0xdd, 0x02, 0x25, 0x69, 0x6e, 0xe1, 0xb1, 0x86, 0x13, 0xde, 0x8c, 0x76, 0x4b, 0x35, 0xbf, 0x59, 0x4e, 0x81, 0x92, 0x34, 0x37, 0xf7, 0x78, 0xdd, 0x09, 0x77, 0xa3, 0x9d, 0x52, 0xd5, 0x6f, 0x2c,
0x6e, 0xf8, 0x0d, 0xbf, 0xcc, 0xad, 0xee, 0x46, 0x75, 0xfe, 0x8f, 0xff, 0xe1, 0xbf, 0x04, 0xda, 0xd5, 0xfd, 0xba, 0xbf, 0xc4, 0xad, 0xee, 0x44, 0x35, 0xfe, 0x8f, 0xff, 0xe1, 0xbf, 0x04, 0xda,
0xc2, 0x93, 0x89, 0xf3, 0x4d, 0xab, 0x76, 0xd3, 0xf1, 0x30, 0x39, 0x4c, 0x3c, 0x6e, 0xe2, 0xd0, 0xdc, 0x53, 0x89, 0xf3, 0x0d, 0xab, 0xba, 0xeb, 0x78, 0x98, 0x1c, 0x26, 0x1e, 0x37, 0x70, 0x68,
0x2a, 0xb7, 0x7a, 0x7c, 0x5c, 0x28, 0x0f, 0xd2, 0x22, 0x91, 0x17, 0x3a, 0x4d, 0xdc, 0xa3, 0xf0, 0x2d, 0x35, 0xbb, 0x7c, 0x9c, 0x5b, 0xea, 0xa7, 0x45, 0x22, 0x2f, 0x74, 0x1a, 0xb8, 0x4b, 0xe1,
0xff, 0x77, 0x52, 0xa0, 0xb5, 0x9b, 0xb8, 0x69, 0xa5, 0xf5, 0x8a, 0x47, 0x06, 0x98, 0x5d, 0xf5, 0xff, 0xef, 0xa6, 0x40, 0xab, 0xbb, 0xb8, 0x61, 0xa5, 0xf5, 0x8a, 0x47, 0x06, 0x98, 0x5e, 0xf1,
0xbd, 0x16, 0x26, 0xec, 0x29, 0x11, 0xbe, 0x15, 0x61, 0x1a, 0xc2, 0x0a, 0xc8, 0x46, 0x8e, 0x6d, 0xbd, 0x26, 0x26, 0xec, 0x29, 0x11, 0xbe, 0x1d, 0x61, 0x1a, 0xc2, 0x32, 0xc8, 0x46, 0x8e, 0x6d,
0x1a, 0x4b, 0xc6, 0xf2, 0x64, 0xe5, 0xf1, 0x0f, 0xdb, 0x85, 0x13, 0x9d, 0x76, 0x21, 0x7b, 0x63, 0x1a, 0x0b, 0xc6, 0xe2, 0x78, 0xf9, 0x89, 0x0f, 0x5b, 0x85, 0x13, 0xed, 0x56, 0x21, 0x7b, 0x73,
0x63, 0xed, 0xa8, 0x5d, 0xb8, 0x30, 0x08, 0x29, 0x3c, 0x0c, 0x30, 0x2d, 0xdd, 0xd8, 0x58, 0x43, 0x7d, 0xf5, 0xa8, 0x55, 0xb8, 0xd0, 0x0f, 0x29, 0x3c, 0x0c, 0x30, 0x2d, 0xdd, 0x5c, 0x5f, 0x45,
0x4c, 0x19, 0x3e, 0x0f, 0x66, 0x6d, 0x4c, 0x1d, 0x82, 0xed, 0x95, 0xed, 0x8d, 0x97, 0x84, 0x7d, 0x4c, 0x19, 0xbe, 0x00, 0xa6, 0x6d, 0x4c, 0x1d, 0x82, 0xed, 0xe5, 0xad, 0xf5, 0x5b, 0xc2, 0xbe,
0x33, 0xc3, 0x2d, 0x9e, 0x93, 0x16, 0x67, 0xd7, 0xd2, 0x02, 0xa8, 0x57, 0x07, 0xee, 0x80, 0x09, 0x99, 0xe1, 0x16, 0xcf, 0x49, 0x8b, 0xd3, 0xab, 0x69, 0x01, 0xd4, 0xad, 0x03, 0xb7, 0xc1, 0x98,
0x7f, 0xf7, 0x2d, 0x5c, 0x0b, 0xa9, 0x99, 0x5d, 0xca, 0x2e, 0x4f, 0x5d, 0x7e, 0xac, 0x94, 0xac, 0xbf, 0xf3, 0x16, 0xae, 0x86, 0xd4, 0xcc, 0x2e, 0x64, 0x17, 0x27, 0xae, 0x3c, 0x5e, 0x4a, 0x56,
0xa0, 0x72, 0x81, 0x2f, 0x9b, 0x7c, 0xd8, 0x12, 0xb2, 0xf6, 0xd7, 0xe3, 0x95, 0xab, 0x9c, 0x96, 0x50, 0xb9, 0xc0, 0x97, 0x4d, 0x3e, 0x6c, 0x09, 0x59, 0xfb, 0x6b, 0xf1, 0xca, 0x95, 0x4f, 0x4b,
0x68, 0x13, 0x5b, 0xc2, 0x0a, 0x8a, 0xcd, 0x15, 0x7f, 0x99, 0x01, 0x50, 0x7f, 0x78, 0x1a, 0xf8, 0xb4, 0xb1, 0x4d, 0x61, 0x05, 0xc5, 0xe6, 0x8a, 0xbf, 0xca, 0x00, 0xa8, 0x3f, 0x3c, 0x0d, 0x7c,
0x1e, 0xc5, 0x43, 0x79, 0x7a, 0x0a, 0x66, 0x6a, 0xdc, 0x72, 0x88, 0x6d, 0x89, 0x6b, 0x66, 0x3e, 0x8f, 0xe2, 0x81, 0x3c, 0x3d, 0x05, 0x53, 0x55, 0x6e, 0x39, 0xc4, 0xb6, 0xc4, 0x35, 0x33, 0x9f,
0x8d, 0xf7, 0xa6, 0xc4, 0x9f, 0x59, 0x4d, 0x99, 0x43, 0x3d, 0x00, 0xf0, 0x3a, 0x18, 0x27, 0x98, 0xc6, 0x7b, 0x53, 0xe2, 0x4f, 0xad, 0xa4, 0xcc, 0xa1, 0x2e, 0x00, 0x78, 0x03, 0x8c, 0x12, 0x4c,
0x46, 0x6e, 0x68, 0x66, 0x97, 0x8c, 0xe5, 0xa9, 0xcb, 0x97, 0x06, 0x42, 0xf1, 0xfc, 0x66, 0xc9, 0x23, 0x37, 0x34, 0xb3, 0x0b, 0xc6, 0xe2, 0xc4, 0x95, 0xcb, 0x7d, 0xa1, 0x78, 0x7e, 0xb3, 0xe4,
0x57, 0x6a, 0x3d, 0x51, 0xaa, 0x86, 0x56, 0x18, 0xd1, 0xca, 0x29, 0x89, 0x34, 0x8e, 0xb8, 0x0d, 0x2b, 0x35, 0x9f, 0x2c, 0x55, 0x42, 0x2b, 0x8c, 0x68, 0xf9, 0x94, 0x44, 0x1a, 0x45, 0xdc, 0x06,
0x24, 0x6d, 0x15, 0xbf, 0x9b, 0x01, 0x33, 0x7a, 0x94, 0x5a, 0x0e, 0xde, 0x87, 0xfb, 0x60, 0x82, 0x92, 0xb6, 0x8a, 0xdf, 0xcb, 0x80, 0x29, 0x3d, 0x4a, 0x4d, 0x07, 0xef, 0xc3, 0x7d, 0x30, 0x46,
0x88, 0x64, 0xe1, 0x71, 0x9a, 0xba, 0xbc, 0x5d, 0x3a, 0xd6, 0xb6, 0x2a, 0xf5, 0x24, 0x61, 0x65, 0x44, 0xb2, 0xf0, 0x38, 0x4d, 0x5c, 0xd9, 0x2a, 0x1d, 0x6b, 0x5b, 0x95, 0xba, 0x92, 0xb0, 0x3c,
0x8a, 0xad, 0x99, 0xfc, 0x83, 0x62, 0x34, 0xf8, 0x36, 0xc8, 0x13, 0xb9, 0x50, 0x3c, 0x9b, 0xa6, 0xc1, 0xd6, 0x4c, 0xfe, 0x41, 0x31, 0x1a, 0x7c, 0x1b, 0xe4, 0x89, 0x5c, 0x28, 0x9e, 0x4d, 0x13,
0x2e, 0x7f, 0x69, 0x88, 0xc8, 0xc2, 0x70, 0x65, 0xba, 0xd3, 0x2e, 0xe4, 0xe3, 0x7f, 0x48, 0x01, 0x57, 0xbe, 0x3c, 0x40, 0x64, 0x61, 0xb8, 0x3c, 0xd9, 0x6e, 0x15, 0xf2, 0xf1, 0x3f, 0xa4, 0x00,
0x16, 0xdf, 0xcb, 0x80, 0xc5, 0xd5, 0x88, 0x86, 0x7e, 0x13, 0x61, 0xea, 0x47, 0xa4, 0x86, 0x57, 0x8b, 0xef, 0x65, 0xc0, 0xfc, 0x4a, 0x44, 0x43, 0xbf, 0x81, 0x30, 0xf5, 0x23, 0x52, 0xc5, 0x2b,
0x7d, 0x37, 0x6a, 0x7a, 0x6b, 0xb8, 0xee, 0x78, 0x4e, 0xc8, 0xb2, 0x75, 0x09, 0x8c, 0x79, 0x56, 0xbe, 0x1b, 0x35, 0xbc, 0x55, 0x5c, 0x73, 0x3c, 0x27, 0x64, 0xd9, 0xba, 0x00, 0x46, 0x3c, 0xab,
0x13, 0xcb, 0xec, 0x99, 0x96, 0x31, 0x1d, 0xbb, 0x66, 0x35, 0x31, 0xe2, 0x1c, 0x26, 0xc1, 0x92, 0x81, 0x65, 0xf6, 0x4c, 0xca, 0x98, 0x8e, 0x5c, 0xb7, 0x1a, 0x18, 0x71, 0x0e, 0x93, 0x60, 0xc9,
0x45, 0xee, 0x05, 0x25, 0x71, 0xfd, 0x30, 0xc0, 0x88, 0x73, 0xe0, 0x45, 0x30, 0x5e, 0xf7, 0x49, 0x22, 0xf7, 0x82, 0x92, 0xb8, 0x71, 0x18, 0x60, 0xc4, 0x39, 0xf0, 0x12, 0x18, 0xad, 0xf9, 0xa4,
0xd3, 0x12, 0xeb, 0x38, 0x99, 0xac, 0xcc, 0x15, 0x4e, 0x45, 0x92, 0x0b, 0x9f, 0x02, 0x53, 0x36, 0x61, 0x89, 0x75, 0x1c, 0x4f, 0x56, 0xe6, 0x2a, 0xa7, 0x22, 0xc9, 0x85, 0x4f, 0x83, 0x09, 0x1b,
0xa6, 0x35, 0xe2, 0x04, 0x0c, 0xda, 0x1c, 0xe3, 0xc2, 0x67, 0xa4, 0xf0, 0xd4, 0x5a, 0xc2, 0x42, 0xd3, 0x2a, 0x71, 0x02, 0x06, 0x6d, 0x8e, 0x70, 0xe1, 0x33, 0x52, 0x78, 0x62, 0x35, 0x61, 0x21,
0xba, 0x1c, 0xbc, 0x04, 0xf2, 0x01, 0x71, 0x7c, 0xe2, 0x84, 0x87, 0x66, 0x6e, 0xc9, 0x58, 0xce, 0x5d, 0x0e, 0x5e, 0x06, 0xf9, 0x80, 0x38, 0x3e, 0x71, 0xc2, 0x43, 0x33, 0xb7, 0x60, 0x2c, 0xe6,
0x55, 0x66, 0xa4, 0x4e, 0x7e, 0x5b, 0xd2, 0x91, 0x92, 0x80, 0x4b, 0x20, 0xff, 0x42, 0x75, 0xeb, 0xca, 0x53, 0x52, 0x27, 0xbf, 0x25, 0xe9, 0x48, 0x49, 0xc0, 0x05, 0x90, 0x7f, 0xb1, 0xb2, 0x79,
0xda, 0xb6, 0x15, 0xde, 0x34, 0xc7, 0x39, 0xc2, 0x18, 0x93, 0x46, 0x8a, 0x5a, 0xfc, 0x6b, 0x06, 0x7d, 0xcb, 0x0a, 0x77, 0xcd, 0x51, 0x8e, 0x30, 0xc2, 0xa4, 0x91, 0xa2, 0x16, 0xff, 0x9a, 0x01,
0x98, 0xe9, 0xa8, 0xc4, 0x21, 0x85, 0x57, 0x40, 0x9e, 0x86, 0xac, 0xe2, 0x34, 0x0e, 0x65, 0x4c, 0x66, 0x3a, 0x2a, 0x71, 0x48, 0xe1, 0x55, 0x90, 0xa7, 0x21, 0xab, 0x38, 0xf5, 0x43, 0x19, 0x93,
0x1e, 0x89, 0xc1, 0xaa, 0x92, 0x7e, 0xd4, 0x2e, 0xcc, 0x27, 0x1a, 0x31, 0x95, 0xc7, 0x43, 0xe9, 0x47, 0x63, 0xb0, 0x8a, 0xa4, 0x1f, 0xb5, 0x0a, 0xb3, 0x89, 0x46, 0x4c, 0xe5, 0xf1, 0x50, 0xba,
0xc2, 0x9f, 0x1b, 0xe0, 0xcc, 0x3e, 0xde, 0xbd, 0xe9, 0xfb, 0x7b, 0xab, 0xae, 0x83, 0xbd, 0x70, 0xf0, 0x17, 0x06, 0x38, 0xb3, 0x8f, 0x77, 0x76, 0x7d, 0x7f, 0x6f, 0xc5, 0x75, 0xb0, 0x17, 0xae,
0xd5, 0xf7, 0xea, 0x4e, 0x43, 0xe6, 0x00, 0x3a, 0x66, 0x0e, 0xbc, 0xdc, 0x6b, 0xb9, 0x72, 0x5f, 0xf8, 0x5e, 0xcd, 0xa9, 0xcb, 0x1c, 0x40, 0xc7, 0xcc, 0x81, 0x97, 0xbb, 0x2d, 0x97, 0x1f, 0x68,
0xa7, 0x5d, 0x38, 0xd3, 0x87, 0x81, 0xfa, 0xf9, 0x01, 0x77, 0x80, 0x59, 0x4b, 0x6d, 0x12, 0x59, 0xb7, 0x0a, 0x67, 0x7a, 0x30, 0x50, 0x2f, 0x3f, 0xe0, 0x36, 0x30, 0xab, 0xa9, 0x4d, 0x22, 0x0b,
0xc0, 0x44, 0xd9, 0x9a, 0xac, 0x9c, 0xef, 0xb4, 0x0b, 0xe6, 0xea, 0x00, 0x19, 0x34, 0x50, 0xbb, 0x98, 0x28, 0x5b, 0xe3, 0xe5, 0xf3, 0xed, 0x56, 0xc1, 0x5c, 0xe9, 0x23, 0x83, 0xfa, 0x6a, 0x17,
0xf8, 0xed, 0x6c, 0x3a, 0xbc, 0x5a, 0xba, 0xbd, 0x09, 0xf2, 0x6c, 0x1b, 0xdb, 0x56, 0x68, 0xc9, 0xbf, 0x93, 0x4d, 0x87, 0x57, 0x4b, 0xb7, 0x37, 0x41, 0x9e, 0x6d, 0x63, 0xdb, 0x0a, 0x2d, 0xb9,
0x8d, 0xf8, 0xf8, 0xdd, 0x6d, 0x7a, 0x51, 0x33, 0x36, 0x71, 0x68, 0x55, 0xa0, 0x5c, 0x10, 0x90, 0x11, 0x9f, 0xb8, 0xb7, 0x4d, 0x2f, 0x6a, 0xc6, 0x06, 0x0e, 0xad, 0x32, 0x94, 0x0b, 0x02, 0x12,
0xd0, 0x90, 0xb2, 0x0a, 0xbf, 0x06, 0xc6, 0x68, 0x80, 0x6b, 0x32, 0xd0, 0xaf, 0x1c, 0x77, 0xb3, 0x1a, 0x52, 0x56, 0xe1, 0xd7, 0xc1, 0x08, 0x0d, 0x70, 0x55, 0x06, 0xfa, 0x95, 0xe3, 0x6e, 0xb6,
0x0d, 0x78, 0x90, 0x6a, 0x80, 0x6b, 0xc9, 0x5e, 0x60, 0xff, 0x10, 0x87, 0x85, 0xef, 0x18, 0x60, 0x3e, 0x0f, 0x52, 0x09, 0x70, 0x35, 0xd9, 0x0b, 0xec, 0x1f, 0xe2, 0xb0, 0xf0, 0x1d, 0x03, 0x8c,
0x9c, 0xf2, 0x02, 0x25, 0x8b, 0xda, 0x6b, 0xa3, 0xf2, 0x20, 0x55, 0x05, 0xc5, 0x7f, 0x24, 0xc1, 0x52, 0x5e, 0xa0, 0x64, 0x51, 0x7b, 0x6d, 0x58, 0x1e, 0xa4, 0xaa, 0xa0, 0xf8, 0x8f, 0x24, 0x78,
0x8b, 0xff, 0xca, 0x80, 0x0b, 0x83, 0x54, 0x57, 0x7d, 0xcf, 0x16, 0xcb, 0xb1, 0x21, 0xf7, 0xb6, 0xf1, 0x5f, 0x19, 0x70, 0xa1, 0x9f, 0xea, 0x8a, 0xef, 0xd9, 0x62, 0x39, 0xd6, 0xe5, 0xde, 0x16,
0xc8, 0xf4, 0xa7, 0xf4, 0xbd, 0x7d, 0xd4, 0x2e, 0x3c, 0x74, 0x47, 0x03, 0x5a, 0x11, 0xf8, 0x9c, 0x99, 0xfe, 0xb4, 0xbe, 0xb7, 0x8f, 0x5a, 0x85, 0x87, 0xef, 0x6a, 0x40, 0x2b, 0x02, 0x9f, 0x53,
0x7a, 0x6e, 0x51, 0x28, 0x2e, 0x74, 0x3b, 0x76, 0xd4, 0x2e, 0x9c, 0x56, 0x6a, 0xdd, 0xbe, 0xc2, 0xcf, 0x2d, 0x0a, 0xc5, 0x85, 0x4e, 0xc7, 0x8e, 0x5a, 0x85, 0xd3, 0x4a, 0xad, 0xd3, 0x57, 0xd8,
0x16, 0x80, 0xae, 0x45, 0xc3, 0xeb, 0xc4, 0xf2, 0xa8, 0x30, 0xeb, 0x34, 0xb1, 0x0c, 0xdf, 0x23, 0x04, 0xd0, 0xb5, 0x68, 0x78, 0x83, 0x58, 0x1e, 0x15, 0x66, 0x9d, 0x06, 0x96, 0xe1, 0x7b, 0xf4,
0x77, 0x97, 0x1e, 0x4c, 0xa3, 0xb2, 0x20, 0x21, 0xe1, 0xd5, 0x1e, 0x6b, 0xa8, 0x0f, 0x02, 0xab, 0xde, 0xd2, 0x83, 0x69, 0x94, 0xe7, 0x24, 0x24, 0xbc, 0xd6, 0x65, 0x0d, 0xf5, 0x40, 0x60, 0x75,
0x5b, 0x04, 0x5b, 0x54, 0x95, 0x22, 0xed, 0x44, 0x61, 0x54, 0x24, 0xb9, 0xf0, 0x61, 0x30, 0xd1, 0x8b, 0x60, 0x8b, 0xaa, 0x52, 0xa4, 0x9d, 0x28, 0x8c, 0x8a, 0x24, 0x17, 0x3e, 0x02, 0xc6, 0x1a,
0xc4, 0x94, 0x5a, 0x0d, 0xcc, 0xeb, 0xcf, 0x64, 0x72, 0x44, 0x6f, 0x0a, 0x32, 0x8a, 0xf9, 0xac, 0x98, 0x52, 0xab, 0x8e, 0x79, 0xfd, 0x19, 0x4f, 0x8e, 0xe8, 0x0d, 0x41, 0x46, 0x31, 0x9f, 0xf5,
0x3f, 0x39, 0x3f, 0x28, 0x6a, 0x57, 0x1d, 0x1a, 0xc2, 0x57, 0x7b, 0x36, 0x40, 0xe9, 0xee, 0x9e, 0x27, 0xe7, 0xfb, 0x45, 0xed, 0x9a, 0x43, 0x43, 0xf8, 0x6a, 0xd7, 0x06, 0x28, 0xdd, 0xdb, 0x13,
0x90, 0x69, 0xf3, 0xf4, 0x57, 0xc5, 0x2f, 0xa6, 0x68, 0xc9, 0xff, 0x55, 0x90, 0x73, 0x42, 0xdc, 0x32, 0x6d, 0x9e, 0xfe, 0xaa, 0xf8, 0xc5, 0x14, 0x2d, 0xf9, 0xbf, 0x06, 0x72, 0x4e, 0x88, 0x1b,
0x8c, 0xcf, 0xee, 0x97, 0x47, 0x94, 0x7b, 0x95, 0x93, 0xd2, 0x87, 0xdc, 0x06, 0x43, 0x43, 0x02, 0xf1, 0xd9, 0xfd, 0xf2, 0x90, 0x72, 0xaf, 0x7c, 0x52, 0xfa, 0x90, 0x5b, 0x67, 0x68, 0x48, 0x80,
0xb4, 0xf8, 0xab, 0x0c, 0x78, 0x60, 0x90, 0x0a, 0x3b, 0x50, 0x28, 0x8b, 0x78, 0xe0, 0x46, 0xc4, 0x16, 0x7f, 0x9d, 0x01, 0x0f, 0xf5, 0x53, 0x61, 0x07, 0x0a, 0x65, 0x11, 0x0f, 0xdc, 0x88, 0x58,
0x72, 0x65, 0xc6, 0xa9, 0x88, 0x6f, 0x73, 0x2a, 0x92, 0x5c, 0x56, 0xf2, 0xa9, 0xe3, 0x35, 0x22, 0xae, 0xcc, 0x38, 0x15, 0xf1, 0x2d, 0x4e, 0x45, 0x92, 0xcb, 0x4a, 0x3e, 0x75, 0xbc, 0x7a, 0xe4,
0xd7, 0x22, 0x32, 0x9d, 0xd4, 0x53, 0x57, 0x25, 0x1d, 0x29, 0x09, 0x58, 0x02, 0x80, 0xde, 0xf4, 0x5a, 0x44, 0xa6, 0x93, 0x7a, 0xea, 0x8a, 0xa4, 0x23, 0x25, 0x01, 0x4b, 0x00, 0xd0, 0x5d, 0x9f,
0x49, 0xc8, 0x31, 0x64, 0xf5, 0x3a, 0xc5, 0x0a, 0x44, 0x55, 0x51, 0x91, 0x26, 0xc1, 0x4e, 0xb4, 0x84, 0x1c, 0x43, 0x56, 0xaf, 0x53, 0xac, 0x40, 0x54, 0x14, 0x15, 0x69, 0x12, 0xec, 0x44, 0xdb,
0x3d, 0xc7, 0xb3, 0xe5, 0xaa, 0xab, 0x5d, 0xfc, 0xa2, 0xe3, 0xd9, 0x88, 0x73, 0x18, 0xbe, 0xeb, 0x73, 0x3c, 0x5b, 0xae, 0xba, 0xda, 0xc5, 0x2f, 0x39, 0x9e, 0x8d, 0x38, 0x87, 0xe1, 0xbb, 0x0e,
0xd0, 0x90, 0x51, 0xe4, 0x92, 0x77, 0x45, 0x9d, 0x4b, 0x2a, 0x09, 0x86, 0x5f, 0x63, 0x55, 0xdf, 0x0d, 0x19, 0x45, 0x2e, 0x79, 0x47, 0xd4, 0xb9, 0xa4, 0x92, 0x60, 0xf8, 0x55, 0x56, 0xf5, 0x7d,
0x27, 0x0e, 0xa6, 0xe6, 0x78, 0x82, 0xbf, 0xaa, 0xa8, 0x48, 0x93, 0x28, 0xfe, 0x33, 0x3f, 0x38, 0xe2, 0x60, 0x6a, 0x8e, 0x26, 0xf8, 0x2b, 0x8a, 0x8a, 0x34, 0x89, 0xe2, 0x3f, 0xf3, 0xfd, 0x93,
0x49, 0x58, 0x29, 0x81, 0x0f, 0x82, 0x5c, 0x83, 0xf8, 0x51, 0x20, 0xa3, 0xa4, 0xa2, 0xfd, 0x3c, 0x84, 0x95, 0x12, 0x78, 0x11, 0xe4, 0xea, 0xc4, 0x8f, 0x02, 0x19, 0x25, 0x15, 0xed, 0x17, 0x18,
0x23, 0x22, 0xc1, 0x63, 0x59, 0xd9, 0xea, 0x6a, 0x53, 0x55, 0x56, 0xc6, 0xcd, 0x69, 0xcc, 0x87, 0x11, 0x09, 0x1e, 0xcb, 0xca, 0x66, 0x47, 0x9b, 0xaa, 0xb2, 0x32, 0x6e, 0x4e, 0x63, 0x3e, 0xfc,
0xdf, 0x34, 0x40, 0xce, 0x93, 0xc1, 0x61, 0x29, 0xf7, 0xea, 0x88, 0xf2, 0x82, 0x87, 0x37, 0x71, 0x96, 0x01, 0x72, 0x9e, 0x0c, 0x0e, 0x4b, 0xb9, 0x57, 0x87, 0x94, 0x17, 0x3c, 0xbc, 0x89, 0xbb,
0x57, 0x44, 0x5e, 0x20, 0xc3, 0x27, 0x41, 0x8e, 0xd6, 0xfc, 0x00, 0xcb, 0xa8, 0x2f, 0xc6, 0x42, 0x22, 0xf2, 0x02, 0x19, 0x3e, 0x05, 0x72, 0xb4, 0xea, 0x07, 0x58, 0x46, 0x7d, 0x3e, 0x16, 0xaa,
0x55, 0x46, 0x3c, 0x6a, 0x17, 0x4e, 0xc6, 0xe6, 0x38, 0x01, 0x09, 0x61, 0xf8, 0x1d, 0x03, 0x80, 0x30, 0xe2, 0x51, 0xab, 0x70, 0x32, 0x36, 0xc7, 0x09, 0x48, 0x08, 0xc3, 0xef, 0x1a, 0x00, 0x34,
0x96, 0xe5, 0x3a, 0xb6, 0xc5, 0x5b, 0x86, 0x1c, 0x77, 0x7f, 0xb8, 0x69, 0xfd, 0x92, 0x32, 0x2f, 0x2d, 0xd7, 0xb1, 0x2d, 0xde, 0x32, 0xe4, 0xb8, 0xfb, 0x83, 0x4d, 0xeb, 0x5b, 0xca, 0xbc, 0x58,
0x16, 0x2d, 0xf9, 0x8f, 0x34, 0x68, 0xf8, 0xae, 0x01, 0xa6, 0x69, 0xb4, 0x4b, 0xa4, 0x16, 0xe5, 0xb4, 0xe4, 0x3f, 0xd2, 0xa0, 0xe1, 0xbb, 0x06, 0x98, 0xa4, 0xd1, 0x0e, 0x91, 0x5a, 0x94, 0x37,
0xcd, 0xc5, 0xd4, 0xe5, 0x2f, 0x0f, 0xd5, 0x97, 0xaa, 0x06, 0x50, 0x99, 0xe9, 0xb4, 0x0b, 0xd3, 0x17, 0x13, 0x57, 0xbe, 0x32, 0x50, 0x5f, 0x2a, 0x1a, 0x40, 0x79, 0xaa, 0xdd, 0x2a, 0x4c, 0xea,
0x3a, 0x05, 0x75, 0x39, 0x00, 0xbf, 0x6f, 0x80, 0x7c, 0x2b, 0x3e, 0xb3, 0x27, 0xf8, 0x86, 0x7f, 0x14, 0xd4, 0xe1, 0x00, 0xfc, 0x81, 0x01, 0xf2, 0xcd, 0xf8, 0xcc, 0x1e, 0xe3, 0x1b, 0xfe, 0xf5,
0x7d, 0x44, 0x0b, 0x2b, 0x33, 0x2a, 0xd9, 0x05, 0xaa, 0x0f, 0x50, 0x1e, 0xc0, 0x3f, 0x1a, 0xc0, 0x21, 0x2d, 0xac, 0xcc, 0xa8, 0x64, 0x17, 0xa8, 0x3e, 0x40, 0x79, 0x00, 0xff, 0x68, 0x00, 0xd3,
0xb4, 0x6c, 0x51, 0xe0, 0x2d, 0x77, 0x9b, 0x38, 0x5e, 0x88, 0x89, 0xe8, 0x37, 0xa9, 0x99, 0xe7, 0xb2, 0x45, 0x81, 0xb7, 0xdc, 0x2d, 0xe2, 0x78, 0x21, 0x26, 0xa2, 0xdf, 0xa4, 0x66, 0x9e, 0xbb,
0xee, 0x0d, 0xf7, 0x2c, 0x4c, 0xf7, 0xb2, 0x95, 0x25, 0xe9, 0x9d, 0xb9, 0x32, 0xc0, 0x0d, 0x34, 0x37, 0xd8, 0xb3, 0x30, 0xdd, 0xcb, 0x96, 0x17, 0xa4, 0x77, 0xe6, 0x72, 0x1f, 0x37, 0x50, 0x5f,
0xd0, 0x41, 0x9e, 0x68, 0x49, 0x4b, 0x63, 0x4e, 0x8e, 0x20, 0xd1, 0x92, 0x5e, 0x4a, 0x56, 0x87, 0x07, 0x79, 0xa2, 0x25, 0x2d, 0x8d, 0x39, 0x3e, 0x84, 0x44, 0x4b, 0x7a, 0x29, 0x59, 0x1d, 0x92,
0xa4, 0x83, 0xd2, 0xa0, 0xe1, 0x16, 0x98, 0x0b, 0x08, 0xe6, 0x00, 0x37, 0xbc, 0x3d, 0xcf, 0xdf, 0x0e, 0x4a, 0x83, 0x86, 0x9b, 0x60, 0x26, 0x20, 0x98, 0x03, 0xdc, 0xf4, 0xf6, 0x3c, 0x7f, 0xdf,
0xf7, 0xae, 0x38, 0xd8, 0xb5, 0xa9, 0x09, 0x96, 0x8c, 0xe5, 0x7c, 0xe5, 0x5c, 0xa7, 0x5d, 0x98, 0xbb, 0xea, 0x60, 0xd7, 0xa6, 0x26, 0x58, 0x30, 0x16, 0xf3, 0xe5, 0x73, 0xed, 0x56, 0x61, 0x66,
0xdb, 0xee, 0x27, 0x80, 0xfa, 0xeb, 0x15, 0xdf, 0xcd, 0xa6, 0x6f, 0x01, 0xe9, 0x2e, 0x02, 0xbe, 0xab, 0x97, 0x00, 0xea, 0xad, 0x57, 0x7c, 0x37, 0x9b, 0xbe, 0x05, 0xa4, 0xbb, 0x08, 0xf8, 0xbe,
0x2f, 0x9e, 0x5e, 0xc4, 0x86, 0x9a, 0x06, 0x5f, 0xad, 0x37, 0x47, 0x94, 0x4c, 0xaa, 0x0d, 0x48, 0x78, 0x7a, 0x11, 0x1b, 0x6a, 0x1a, 0x7c, 0xb5, 0xde, 0x1c, 0x52, 0x32, 0xa9, 0x36, 0x20, 0xe9,
0x3a, 0x39, 0x45, 0xa2, 0x48, 0xf3, 0x03, 0xfe, 0xc4, 0x00, 0x27, 0xad, 0x5a, 0x0d, 0x07, 0x21, 0xe4, 0x14, 0x89, 0x22, 0xcd, 0x0f, 0xf8, 0x53, 0x03, 0x9c, 0xb4, 0xaa, 0x55, 0x1c, 0x84, 0xd8,
0xb6, 0x45, 0x71, 0xcf, 0x7c, 0x06, 0xf5, 0x6b, 0x4e, 0x7a, 0x75, 0x72, 0x45, 0x87, 0x46, 0xdd, 0x16, 0xc5, 0x3d, 0xf3, 0x19, 0xd4, 0xaf, 0x19, 0xe9, 0xd5, 0xc9, 0x65, 0x1d, 0x1a, 0x75, 0x7a,
0x9e, 0xc0, 0x67, 0xc1, 0x29, 0x1a, 0xfa, 0x04, 0xdb, 0xa9, 0xb6, 0x19, 0x76, 0xda, 0x85, 0x53, 0x02, 0x9f, 0x03, 0xa7, 0x68, 0xe8, 0x13, 0x6c, 0xa7, 0xda, 0x66, 0xd8, 0x6e, 0x15, 0x4e, 0x55,
0xd5, 0x2e, 0x0e, 0x4a, 0x49, 0x16, 0xff, 0x96, 0x03, 0x85, 0x3b, 0x6c, 0xb5, 0xbb, 0xb8, 0x98, 0x3a, 0x38, 0x28, 0x25, 0x59, 0xfc, 0x5b, 0x0e, 0x14, 0xee, 0xb2, 0xd5, 0xee, 0xe1, 0x62, 0x76,
0x5d, 0x04, 0xe3, 0xfc, 0x71, 0x6d, 0x1e, 0x95, 0xbc, 0xd6, 0x0a, 0x72, 0x2a, 0x92, 0x5c, 0x76, 0x09, 0x8c, 0xf2, 0xc7, 0xb5, 0x79, 0x54, 0xf2, 0x5a, 0x2b, 0xc8, 0xa9, 0x48, 0x72, 0xd9, 0x41,
0x50, 0x30, 0x7c, 0xd6, 0xbe, 0x64, 0xb9, 0xa0, 0x3a, 0x28, 0xaa, 0x82, 0x8c, 0x62, 0x3e, 0xbc, 0xc1, 0xf0, 0x59, 0xfb, 0x92, 0xe5, 0x82, 0xea, 0xa0, 0xa8, 0x08, 0x32, 0x8a, 0xf9, 0xf0, 0x0a,
0x0c, 0x80, 0x8d, 0x03, 0x82, 0xd9, 0x61, 0x65, 0x9b, 0x13, 0x5c, 0x5a, 0x2d, 0xd2, 0x9a, 0xe2, 0x00, 0x36, 0x0e, 0x08, 0x66, 0x87, 0x95, 0x6d, 0x8e, 0x71, 0x69, 0xb5, 0x48, 0xab, 0x8a, 0x83,
0x20, 0x4d, 0x0a, 0x5e, 0x01, 0x30, 0xfe, 0xe7, 0xf8, 0xde, 0xcb, 0x16, 0xf1, 0x1c, 0xaf, 0x61, 0x34, 0x29, 0x78, 0x15, 0xc0, 0xf8, 0x9f, 0xe3, 0x7b, 0x2f, 0x5b, 0xc4, 0x73, 0xbc, 0xba, 0x99,
0xe6, 0xb9, 0xdb, 0xf3, 0xac, 0x1b, 0x5b, 0xeb, 0xe1, 0xa2, 0x3e, 0x1a, 0xf0, 0x6d, 0x30, 0x2e, 0xe7, 0x6e, 0xcf, 0xb2, 0x6e, 0x6c, 0xb5, 0x8b, 0x8b, 0x7a, 0x68, 0xc0, 0xb7, 0xc1, 0xa8, 0x18,
0x86, 0x3e, 0xfc, 0x84, 0x18, 0x61, 0x95, 0x07, 0x3c, 0x46, 0x1c, 0x0a, 0x49, 0xc8, 0xde, 0xea, 0xfa, 0xf0, 0x13, 0x62, 0x88, 0x55, 0x1e, 0xf0, 0x18, 0x71, 0x28, 0x24, 0x21, 0xbb, 0xab, 0x7b,
0x9e, 0xbb, 0xd7, 0xd5, 0xfd, 0xb6, 0xe5, 0x74, 0xfc, 0xbf, 0xbc, 0x9c, 0x16, 0xff, 0x6d, 0xa4, 0xee, 0x7e, 0x57, 0xf7, 0x3b, 0x96, 0xd3, 0xd1, 0xff, 0xf2, 0x72, 0x5a, 0xfc, 0xb7, 0x91, 0xae,
0x6b, 0x8e, 0xf6, 0xa8, 0xd5, 0x9a, 0xe5, 0x62, 0xb8, 0x06, 0x66, 0xd8, 0x8d, 0x09, 0xe1, 0xc0, 0x39, 0xda, 0xa3, 0x56, 0xaa, 0x96, 0x8b, 0xe1, 0x2a, 0x98, 0x62, 0x37, 0x26, 0x84, 0x03, 0xd7,
0x75, 0x6a, 0x16, 0xe5, 0x17, 0x76, 0x91, 0xec, 0x6a, 0x86, 0x54, 0x4d, 0xf1, 0x51, 0x8f, 0x06, 0xa9, 0x5a, 0x94, 0x5f, 0xd8, 0x45, 0xb2, 0xab, 0x19, 0x52, 0x25, 0xc5, 0x47, 0x5d, 0x1a, 0xf0,
0x7c, 0x01, 0x40, 0x71, 0x8b, 0xe8, 0xb2, 0x23, 0x1a, 0x22, 0x75, 0x1f, 0xa8, 0xf6, 0x48, 0xa0, 0x45, 0x00, 0xc5, 0x2d, 0xa2, 0xc3, 0x8e, 0x68, 0x88, 0xd4, 0x7d, 0xa0, 0xd2, 0x25, 0x81, 0x7a,
0x3e, 0x5a, 0x70, 0x15, 0xcc, 0xba, 0xd6, 0x2e, 0x76, 0xab, 0xd8, 0xc5, 0xb5, 0xd0, 0x27, 0xdc, 0x68, 0xc1, 0x15, 0x30, 0xed, 0x5a, 0x3b, 0xd8, 0xad, 0x60, 0x17, 0x57, 0x43, 0x9f, 0x70, 0x53,
0x94, 0x18, 0x69, 0xcc, 0x75, 0xda, 0x85, 0xd9, 0xab, 0x69, 0x26, 0xea, 0x95, 0x2f, 0x5e, 0x48, 0x62, 0xa4, 0x31, 0xd3, 0x6e, 0x15, 0xa6, 0xaf, 0xa5, 0x99, 0xa8, 0x5b, 0xbe, 0x78, 0x21, 0xbd,
0x6f, 0x6d, 0xfd, 0xc1, 0xc5, 0xdd, 0xec, 0x83, 0x0c, 0x58, 0x18, 0x9c, 0x19, 0xf0, 0x5b, 0xc9, 0xb5, 0xf5, 0x07, 0x17, 0x77, 0xb3, 0x0f, 0x32, 0x60, 0xae, 0x7f, 0x66, 0xc0, 0x6f, 0x27, 0x57,
0x15, 0x52, 0xdc, 0x10, 0x5e, 0x1f, 0x55, 0x16, 0xca, 0x3b, 0x24, 0xe8, 0xbd, 0x3f, 0xc2, 0xaf, 0x48, 0x71, 0x43, 0x78, 0x7d, 0x58, 0x59, 0x28, 0xef, 0x90, 0xa0, 0xfb, 0xfe, 0x08, 0xbf, 0xc1,
0xb3, 0x76, 0xcd, 0x72, 0xe3, 0xa1, 0xd5, 0x6b, 0x23, 0x73, 0x81, 0x81, 0x54, 0x26, 0x45, 0x27, 0xda, 0x35, 0xcb, 0x8d, 0x87, 0x56, 0xaf, 0x0d, 0xcd, 0x05, 0x06, 0x52, 0x1e, 0x17, 0x9d, 0xa0,
0x68, 0xb9, 0xbc, 0xf1, 0xb3, 0x5c, 0x5c, 0xfc, 0xb5, 0x91, 0x9e, 0x22, 0x24, 0x3b, 0x18, 0xfe, 0xe5, 0xf2, 0xc6, 0xcf, 0x72, 0x71, 0xf1, 0x37, 0x46, 0x7a, 0x8a, 0x90, 0xec, 0x60, 0xf8, 0x43,
0xc0, 0x00, 0xa7, 0xfd, 0x00, 0x7b, 0x2b, 0xdb, 0x1b, 0x2f, 0xfd, 0x9f, 0xd8, 0xc9, 0x32, 0x54, 0x03, 0x9c, 0xf6, 0x03, 0xec, 0x2d, 0x6f, 0xad, 0xdf, 0xfa, 0x3f, 0xb1, 0x93, 0x65, 0xa8, 0xae,
0xd7, 0x8e, 0xe9, 0xe7, 0x0b, 0xd5, 0xad, 0x6b, 0xc2, 0xe0, 0x36, 0xf1, 0x03, 0x5a, 0x39, 0xd3, 0x1f, 0xd3, 0xcf, 0x17, 0x2b, 0x9b, 0xd7, 0x85, 0xc1, 0x2d, 0xe2, 0x07, 0xb4, 0x7c, 0xa6, 0xdd,
0x69, 0x17, 0x4e, 0x6f, 0x75, 0x43, 0xa1, 0x34, 0x76, 0xb1, 0x09, 0xe6, 0xd6, 0x0f, 0x42, 0x4c, 0x2a, 0x9c, 0xde, 0xec, 0x84, 0x42, 0x69, 0xec, 0x62, 0x03, 0xcc, 0xac, 0x1d, 0x84, 0x98, 0x78,
0x3c, 0xcb, 0x5d, 0xf3, 0x6b, 0x51, 0x13, 0x7b, 0xa1, 0x70, 0x34, 0x35, 0xf1, 0x32, 0xee, 0x72, 0x96, 0xbb, 0xea, 0x57, 0xa3, 0x06, 0xf6, 0x42, 0xe1, 0x68, 0x6a, 0xe2, 0x65, 0xdc, 0xe3, 0xc4,
0xe2, 0xf5, 0x00, 0xc8, 0x46, 0xc4, 0x95, 0x59, 0x3c, 0xa5, 0x26, 0xba, 0xe8, 0x2a, 0x62, 0xf4, 0xeb, 0x21, 0x90, 0x8d, 0x88, 0x2b, 0xb3, 0x78, 0x42, 0x4d, 0x74, 0xd1, 0x35, 0xc4, 0xe8, 0xc5,
0xe2, 0x05, 0x30, 0xc6, 0xfc, 0x84, 0xe7, 0x40, 0x96, 0x58, 0xfb, 0xdc, 0xea, 0x74, 0x65, 0x82, 0x0b, 0x60, 0x84, 0xf9, 0x09, 0xcf, 0x81, 0x2c, 0xb1, 0xf6, 0xb9, 0xd5, 0xc9, 0xf2, 0x18, 0x13,
0x89, 0x20, 0x6b, 0x1f, 0x31, 0x5a, 0xf1, 0x2f, 0x17, 0xc0, 0xe9, 0xd4, 0xb3, 0xc0, 0x05, 0x90, 0x41, 0xd6, 0x3e, 0x62, 0xb4, 0xe2, 0x5f, 0x2e, 0x80, 0xd3, 0xa9, 0x67, 0x81, 0x73, 0x20, 0xa3,
0x51, 0x63, 0x62, 0x20, 0x8d, 0x66, 0x36, 0xd6, 0x50, 0xc6, 0xb1, 0xe1, 0xd3, 0xaa, 0xf8, 0x0a, 0xc6, 0xc4, 0x40, 0x1a, 0xcd, 0xac, 0xaf, 0xa2, 0x8c, 0x63, 0xc3, 0x67, 0x54, 0xf1, 0x15, 0xa0,
0xd0, 0x82, 0x3a, 0x4b, 0x38, 0x95, 0xf5, 0xe7, 0x89, 0x39, 0xe6, 0x48, 0x5c, 0x38, 0x99, 0x0f, 0x05, 0x75, 0x96, 0x70, 0x2a, 0xeb, 0xcf, 0x13, 0x73, 0xcc, 0x91, 0xb8, 0x70, 0x32, 0x1f, 0x70,
0xb8, 0x2e, 0x77, 0x89, 0xf0, 0x01, 0xd7, 0x11, 0xa3, 0x7d, 0xda, 0x71, 0x5f, 0x3c, 0x6f, 0xcc, 0x4d, 0xee, 0x12, 0xe1, 0x03, 0xae, 0x21, 0x46, 0xfb, 0xb4, 0xe3, 0xbe, 0x78, 0xde, 0x98, 0xbb,
0xdd, 0xc5, 0xbc, 0x71, 0xfc, 0xb6, 0xf3, 0xc6, 0x07, 0x41, 0x2e, 0x74, 0x42, 0x17, 0xf3, 0x83, 0x87, 0x79, 0xe3, 0xe8, 0x1d, 0xe7, 0x8d, 0x17, 0x41, 0x2e, 0x74, 0x42, 0x17, 0xf3, 0x83, 0x4c,
0x4c, 0xbb, 0x46, 0x5d, 0x67, 0x44, 0x24, 0x78, 0xf0, 0x2d, 0x30, 0x61, 0xe3, 0xba, 0x15, 0xb9, 0xbb, 0x46, 0xdd, 0x60, 0x44, 0x24, 0x78, 0xf0, 0x2d, 0x30, 0x66, 0xe3, 0x9a, 0x15, 0xb9, 0x21,
0x21, 0x3f, 0xb3, 0xa6, 0x2e, 0xaf, 0x0e, 0x21, 0x85, 0xc4, 0x30, 0x78, 0x4d, 0xd8, 0x45, 0x31, 0x3f, 0xb3, 0x26, 0xae, 0xac, 0x0c, 0x20, 0x85, 0xc4, 0x30, 0x78, 0x55, 0xd8, 0x45, 0x31, 0x00,
0x00, 0x7c, 0x08, 0x4c, 0x34, 0xad, 0x03, 0xa7, 0x19, 0x35, 0x79, 0x83, 0x69, 0x08, 0xb1, 0x4d, 0x7c, 0x18, 0x8c, 0x35, 0xac, 0x03, 0xa7, 0x11, 0x35, 0x78, 0x83, 0x69, 0x08, 0xb1, 0x0d, 0x41,
0x41, 0x42, 0x31, 0x8f, 0x55, 0x46, 0x7c, 0x50, 0x73, 0x23, 0xea, 0xb4, 0xb0, 0x64, 0xca, 0xe6, 0x42, 0x31, 0x8f, 0x55, 0x46, 0x7c, 0x50, 0x75, 0x23, 0xea, 0x34, 0xb1, 0x64, 0xca, 0xe6, 0x4f,
0x4f, 0x55, 0xc6, 0xf5, 0x14, 0x1f, 0xf5, 0x68, 0x70, 0x30, 0xc7, 0xe3, 0xca, 0x53, 0x1a, 0x98, 0x55, 0xc6, 0xb5, 0x14, 0x1f, 0x75, 0x69, 0x70, 0x30, 0xc7, 0xe3, 0xca, 0x13, 0x1a, 0x98, 0x20,
0x20, 0xa1, 0x98, 0xd7, 0x0d, 0x26, 0xe5, 0xa7, 0x07, 0x81, 0x49, 0xe5, 0x1e, 0x0d, 0xf8, 0x28, 0xa1, 0x98, 0xd7, 0x09, 0x26, 0xe5, 0x27, 0xfb, 0x81, 0x49, 0xe5, 0x2e, 0x0d, 0xf8, 0x18, 0x18,
0x98, 0x6c, 0x5a, 0x07, 0x57, 0xb1, 0xd7, 0x08, 0x6f, 0x9a, 0x27, 0x97, 0x8c, 0xe5, 0x6c, 0xe5, 0x6f, 0x58, 0x07, 0xd7, 0xb0, 0x57, 0x0f, 0x77, 0xcd, 0x93, 0x0b, 0xc6, 0x62, 0xb6, 0x7c, 0xb2,
0x64, 0xa7, 0x5d, 0x98, 0xdc, 0x8c, 0x89, 0x28, 0xe1, 0x73, 0x61, 0xc7, 0x93, 0xc2, 0xa7, 0x34, 0xdd, 0x2a, 0x8c, 0x6f, 0xc4, 0x44, 0x94, 0xf0, 0xb9, 0xb0, 0xe3, 0x49, 0xe1, 0x53, 0x9a, 0x70,
0xe1, 0x98, 0x88, 0x12, 0x3e, 0xeb, 0x5e, 0x02, 0x2b, 0x64, 0x9b, 0xcb, 0x3c, 0xdd, 0x7d, 0xcd, 0x4c, 0x44, 0x09, 0x9f, 0x75, 0x2f, 0x81, 0x15, 0xb2, 0xcd, 0x65, 0x9e, 0xee, 0xbc, 0xe6, 0x6e,
0xdd, 0x16, 0x64, 0x14, 0xf3, 0xe1, 0x32, 0xc8, 0x37, 0xad, 0x03, 0x3e, 0x92, 0x30, 0x67, 0xb8, 0x09, 0x32, 0x8a, 0xf9, 0x70, 0x11, 0xe4, 0x1b, 0xd6, 0x01, 0x1f, 0x49, 0x98, 0x53, 0xdc, 0x2c,
0x59, 0x3e, 0x18, 0xdf, 0x94, 0x34, 0xa4, 0xb8, 0x5c, 0xd2, 0xf1, 0x84, 0xe4, 0xac, 0x26, 0x29, 0x1f, 0x8c, 0x6f, 0x48, 0x1a, 0x52, 0x5c, 0x2e, 0xe9, 0x78, 0x42, 0x72, 0x5a, 0x93, 0x94, 0x34,
0x69, 0x48, 0x71, 0x59, 0x12, 0x47, 0x9e, 0x73, 0x2b, 0xc2, 0x42, 0x18, 0xf2, 0xc8, 0xa8, 0x24, 0xa4, 0xb8, 0x2c, 0x89, 0x23, 0xcf, 0xb9, 0x1d, 0x61, 0x21, 0x0c, 0x79, 0x64, 0x54, 0x12, 0xdf,
0xbe, 0x91, 0xb0, 0x90, 0x2e, 0x07, 0x4b, 0x00, 0x34, 0x23, 0x37, 0x74, 0x02, 0x17, 0x6f, 0xd5, 0x4c, 0x58, 0x48, 0x97, 0x83, 0x25, 0x00, 0x1a, 0x91, 0x1b, 0x3a, 0x81, 0x8b, 0x37, 0x6b, 0xe6,
0xcd, 0x33, 0x3c, 0xfe, 0xbc, 0xe9, 0xdf, 0x54, 0x54, 0xa4, 0x49, 0x40, 0x0c, 0xc6, 0xb0, 0x17, 0x19, 0x1e, 0x7f, 0xde, 0xf4, 0x6f, 0x28, 0x2a, 0xd2, 0x24, 0x20, 0x06, 0x23, 0xd8, 0x8b, 0x1a,
0x35, 0xcd, 0xb3, 0xfc, 0x60, 0x1f, 0x4a, 0x0a, 0xaa, 0x9d, 0xb3, 0xee, 0x45, 0x4d, 0xc4, 0xcd, 0xe6, 0x59, 0x7e, 0xb0, 0x0f, 0x24, 0x05, 0xd5, 0xce, 0x59, 0xf3, 0xa2, 0x06, 0xe2, 0xe6, 0xe1,
0xc3, 0xa7, 0xc1, 0xc9, 0xa6, 0x75, 0xc0, 0xca, 0x01, 0x26, 0xa1, 0x83, 0xa9, 0x39, 0xc7, 0x1f, 0x33, 0xe0, 0x64, 0xc3, 0x3a, 0x60, 0xe5, 0x00, 0x93, 0xd0, 0xc1, 0xd4, 0x9c, 0xe1, 0x0f, 0x3f,
0x7e, 0x96, 0x75, 0xbb, 0x9b, 0x3a, 0x03, 0x75, 0xcb, 0x71, 0x45, 0xc7, 0xd3, 0x14, 0xe7, 0x35, 0xcd, 0xba, 0xdd, 0x0d, 0x9d, 0x81, 0x3a, 0xe5, 0xb8, 0xa2, 0xe3, 0x69, 0x8a, 0xb3, 0x9a, 0xa2,
0x45, 0x9d, 0x81, 0xba, 0xe5, 0x58, 0xa4, 0x09, 0xbe, 0x15, 0x39, 0x04, 0xdb, 0xe6, 0x7d, 0xbc, 0xce, 0x40, 0x9d, 0x72, 0x2c, 0xd2, 0x04, 0xdf, 0x8e, 0x1c, 0x82, 0x6d, 0xf3, 0x01, 0xde, 0x20,
0x41, 0x96, 0x2f, 0x2b, 0x04, 0x0d, 0x29, 0x2e, 0x6c, 0xc5, 0xb3, 0x2b, 0x93, 0x6f, 0xc3, 0x1b, 0xcb, 0x97, 0x15, 0x82, 0x86, 0x14, 0x17, 0x36, 0xe3, 0xd9, 0x95, 0xc9, 0xb7, 0xe1, 0xcd, 0xc1,
0xc3, 0xad, 0xe4, 0x5b, 0x64, 0x85, 0x10, 0xeb, 0x50, 0x9c, 0x34, 0xfa, 0xd4, 0x0a, 0x52, 0x90, 0x56, 0xf2, 0x4d, 0xb2, 0x4c, 0x88, 0x75, 0x28, 0x4e, 0x1a, 0x7d, 0x6a, 0x05, 0x29, 0xc8, 0x59,
0xb3, 0x5c, 0x77, 0xab, 0x6e, 0x9e, 0xe3, 0xb1, 0x1f, 0xf6, 0x09, 0xa2, 0xaa, 0xce, 0x0a, 0x03, 0xae, 0xbb, 0x59, 0x33, 0xcf, 0xf1, 0xd8, 0x0f, 0xfa, 0x04, 0x51, 0x55, 0x67, 0x99, 0x81, 0x20,
0x41, 0x02, 0x8b, 0x81, 0xfa, 0x1e, 0x4b, 0x8d, 0x85, 0xd1, 0x82, 0x6e, 0x31, 0x10, 0x24, 0xb0, 0x81, 0xc5, 0x40, 0x7d, 0x8f, 0xa5, 0xc6, 0xdc, 0x70, 0x41, 0x37, 0x19, 0x08, 0x12, 0x58, 0xfc,
0xf8, 0x93, 0x7a, 0x87, 0x5b, 0x75, 0xf3, 0xfe, 0x11, 0x3f, 0x29, 0x03, 0x41, 0x02, 0x0b, 0x3a, 0x49, 0xbd, 0xc3, 0xcd, 0x9a, 0xf9, 0xe0, 0x90, 0x9f, 0x94, 0x81, 0x20, 0x81, 0x05, 0x1d, 0x90,
0x20, 0xeb, 0xf9, 0xa1, 0x79, 0x7e, 0x24, 0xc7, 0x33, 0x3f, 0x70, 0xae, 0xf9, 0x21, 0x62, 0x18, 0xf5, 0xfc, 0xd0, 0x3c, 0x3f, 0x94, 0xe3, 0x99, 0x1f, 0x38, 0xd7, 0xfd, 0x10, 0x31, 0x0c, 0xf8,
0xf0, 0xc7, 0x06, 0x00, 0x41, 0x92, 0xa2, 0x0f, 0x0c, 0x65, 0x24, 0x92, 0x82, 0x2c, 0x25, 0xb9, 0x13, 0x03, 0x80, 0x20, 0x49, 0xd1, 0x87, 0x06, 0x32, 0x12, 0x49, 0x41, 0x96, 0x92, 0xdc, 0x5e,
0xbd, 0xee, 0x85, 0xe4, 0x30, 0xb9, 0x1e, 0x69, 0x7b, 0x40, 0xf3, 0x02, 0xfe, 0xc2, 0x00, 0x67, 0xf3, 0x42, 0x72, 0x98, 0x5c, 0x8f, 0xb4, 0x3d, 0xa0, 0x79, 0x01, 0x7f, 0x69, 0x80, 0xb3, 0x7a,
0xf5, 0x36, 0x59, 0xb9, 0xb7, 0xc8, 0x23, 0x72, 0x7d, 0xd8, 0x69, 0x5e, 0xf1, 0x7d, 0xb7, 0x62, 0x9b, 0xac, 0xdc, 0x9b, 0xe7, 0x11, 0xb9, 0x31, 0xe8, 0x34, 0x2f, 0xfb, 0xbe, 0x5b, 0x36, 0xdb,
0x76, 0xda, 0x85, 0xb3, 0x2b, 0x7d, 0x50, 0x51, 0x5f, 0x5f, 0xe0, 0x6f, 0x0c, 0x30, 0x2b, 0xab, 0xad, 0xc2, 0xd9, 0xe5, 0x1e, 0xa8, 0xa8, 0xa7, 0x2f, 0xf0, 0xb7, 0x06, 0x98, 0x96, 0x55, 0x54,
0xa8, 0xe6, 0x61, 0x81, 0x07, 0x10, 0x0f, 0x3b, 0x80, 0x69, 0x1c, 0x11, 0x47, 0xf5, 0x92, 0xbd, 0xf3, 0xb0, 0xc0, 0x03, 0x88, 0x07, 0x1d, 0xc0, 0x34, 0x8e, 0x88, 0xa3, 0x7a, 0xc9, 0xde, 0xc5,
0x87, 0x8f, 0x7a, 0x5d, 0x83, 0xbf, 0x37, 0xc0, 0xb4, 0x8d, 0x03, 0xec, 0xd9, 0xd8, 0xab, 0x31, 0x47, 0xdd, 0xae, 0xc1, 0x3f, 0x18, 0x60, 0xd2, 0xc6, 0x01, 0xf6, 0x6c, 0xec, 0x55, 0x99, 0xaf,
0x5f, 0x97, 0x86, 0x32, 0xb2, 0x48, 0xfb, 0xba, 0xa6, 0x41, 0x08, 0x37, 0x4b, 0xd2, 0xcd, 0x69, 0x0b, 0x03, 0x19, 0x59, 0xa4, 0x7d, 0x5d, 0xd5, 0x20, 0x84, 0x9b, 0x25, 0xe9, 0xe6, 0xa4, 0xce,
0x9d, 0x75, 0xd4, 0x2e, 0xcc, 0x27, 0xaa, 0x3a, 0x07, 0x75, 0x79, 0x09, 0xdf, 0x33, 0xc0, 0xe9, 0x3a, 0x6a, 0x15, 0x66, 0x13, 0x55, 0x9d, 0x83, 0x3a, 0xbc, 0x84, 0xef, 0x19, 0xe0, 0x74, 0xb2,
0x64, 0x01, 0xc4, 0x91, 0x72, 0x61, 0x84, 0x79, 0xc0, 0xdb, 0xd7, 0x95, 0x6e, 0x40, 0x94, 0xf6, 0x00, 0xe2, 0x48, 0xb9, 0x30, 0xc4, 0x3c, 0xe0, 0xed, 0xeb, 0x72, 0x27, 0x20, 0x4a, 0x7b, 0x00,
0x00, 0xfe, 0xd6, 0x60, 0x9d, 0x5a, 0x7c, 0xef, 0xa3, 0x66, 0x91, 0xc7, 0xf2, 0x8d, 0xa1, 0xc7, 0x7f, 0x67, 0xb0, 0x4e, 0x2d, 0xbe, 0xf7, 0x51, 0xb3, 0xc8, 0x63, 0xf9, 0xc6, 0xc0, 0x63, 0xa9,
0x52, 0x21, 0x88, 0x50, 0x5e, 0x4a, 0x5a, 0x41, 0xc5, 0x39, 0x6a, 0x17, 0xe6, 0xf4, 0x48, 0x2a, 0x10, 0x44, 0x28, 0x2f, 0x27, 0xad, 0xa0, 0xe2, 0x1c, 0xb5, 0x0a, 0x33, 0x7a, 0x24, 0x15, 0x03,
0x06, 0xd2, 0x3d, 0x84, 0xdf, 0x33, 0xc0, 0x34, 0x4e, 0x3a, 0x6e, 0x6a, 0x3e, 0x38, 0x94, 0x20, 0xe9, 0x1e, 0xc2, 0xef, 0x1b, 0x60, 0x12, 0x27, 0x1d, 0x37, 0x35, 0x2f, 0x0e, 0x24, 0x88, 0x3d,
0xf6, 0x6d, 0xe2, 0xc5, 0x4d, 0x5d, 0x63, 0x51, 0xd4, 0x85, 0xcd, 0x3a, 0x48, 0x7c, 0x60, 0x35, 0x9b, 0x78, 0x71, 0x53, 0xd7, 0x58, 0x14, 0x75, 0x60, 0xb3, 0x0e, 0x12, 0x1f, 0x58, 0x8d, 0xc0,
0x03, 0x17, 0x9b, 0xff, 0x33, 0xe4, 0x0e, 0x72, 0x5d, 0xd8, 0x45, 0x31, 0x00, 0xbc, 0x04, 0xf2, 0xc5, 0xe6, 0xff, 0x0c, 0xb8, 0x83, 0x5c, 0x13, 0x76, 0x51, 0x0c, 0x00, 0x2f, 0x83, 0xbc, 0x17,
0x5e, 0xe4, 0xba, 0xd6, 0xae, 0x8b, 0xcd, 0x87, 0x78, 0x2f, 0xa2, 0x46, 0xb2, 0xd7, 0x24, 0x1d, 0xb9, 0xae, 0xb5, 0xe3, 0x62, 0xf3, 0x61, 0xde, 0x8b, 0xa8, 0x91, 0xec, 0x75, 0x49, 0x47, 0x4a,
0x29, 0x09, 0x58, 0x07, 0x4b, 0x07, 0x2f, 0xaa, 0xcf, 0x93, 0xfa, 0x0e, 0x0d, 0xcd, 0x8b, 0xdc, 0x02, 0xd6, 0xc0, 0xc2, 0xc1, 0x4b, 0xea, 0xf3, 0xa4, 0x9e, 0x43, 0x43, 0xf3, 0x12, 0xb7, 0x32,
0xca, 0x42, 0xa7, 0x5d, 0x98, 0xdf, 0xe9, 0x3f, 0x56, 0xbc, 0xa3, 0x0d, 0xf8, 0x0a, 0xb8, 0x5f, 0xd7, 0x6e, 0x15, 0x66, 0xb7, 0x7b, 0x8f, 0x15, 0xef, 0x6a, 0x03, 0xbe, 0x02, 0x1e, 0xd4, 0x64,
0x93, 0x59, 0x6f, 0xee, 0x62, 0xdb, 0xc6, 0x76, 0x7c, 0x71, 0x33, 0xff, 0x57, 0x0c, 0x2e, 0xe3, 0xd6, 0x1a, 0x3b, 0xd8, 0xb6, 0xb1, 0x1d, 0x5f, 0xdc, 0xcc, 0xff, 0x15, 0x83, 0xcb, 0x78, 0x83,
0x0d, 0xbe, 0x93, 0x16, 0x40, 0xb7, 0xd3, 0x86, 0x57, 0xc1, 0xbc, 0xc6, 0xde, 0xf0, 0xc2, 0x2d, 0x6f, 0xa7, 0x05, 0xd0, 0x9d, 0xb4, 0xe1, 0x35, 0x30, 0xab, 0xb1, 0xd7, 0xbd, 0x70, 0x93, 0x54,
0x52, 0x0d, 0x89, 0xe3, 0x35, 0xcc, 0x65, 0x6e, 0xf7, 0x6c, 0xbc, 0x23, 0x77, 0x34, 0x1e, 0x1a, 0x42, 0xe2, 0x78, 0x75, 0x73, 0x91, 0xdb, 0x3d, 0x1b, 0xef, 0xc8, 0x6d, 0x8d, 0x87, 0xfa, 0xe8,
0xa0, 0x03, 0xbf, 0xd8, 0x65, 0x8d, 0xbf, 0x42, 0xb3, 0x82, 0x17, 0xf1, 0x21, 0x35, 0x1f, 0xe6, 0xc0, 0x2f, 0x75, 0x58, 0xe3, 0xaf, 0xd0, 0xac, 0xe0, 0x25, 0x7c, 0x48, 0xcd, 0x47, 0x78, 0x77,
0xdd, 0x09, 0x5f, 0xec, 0x1d, 0x8d, 0x8e, 0x06, 0xc8, 0xc3, 0x2f, 0x80, 0x33, 0x29, 0x0e, 0xbb, 0xc2, 0x17, 0x7b, 0x5b, 0xa3, 0xa3, 0x3e, 0xf2, 0xf0, 0x8b, 0xe0, 0x4c, 0x8a, 0xc3, 0xae, 0x28,
0xa2, 0x98, 0x8f, 0x88, 0xbb, 0x06, 0xeb, 0x67, 0x77, 0x62, 0x22, 0xea, 0x27, 0x09, 0x3f, 0x0f, 0xe6, 0xa3, 0xe2, 0xae, 0xc1, 0xfa, 0xd9, 0xed, 0x98, 0x88, 0x7a, 0x49, 0xc2, 0x2f, 0x00, 0xa8,
0xa0, 0x46, 0xde, 0xb4, 0x02, 0xae, 0xff, 0xa8, 0xb8, 0xf6, 0xb0, 0x15, 0xdd, 0x91, 0x34, 0xd4, 0x91, 0x37, 0xac, 0x80, 0xeb, 0x3f, 0x26, 0xae, 0x3d, 0x6c, 0x45, 0xb7, 0x25, 0x0d, 0xf5, 0x90,
0x47, 0x0e, 0xfe, 0xd4, 0xe8, 0x7a, 0x92, 0xe4, 0x76, 0x4c, 0xcd, 0x4b, 0x7c, 0xff, 0x6e, 0x1e, 0x83, 0x3f, 0x33, 0x3a, 0x9e, 0x24, 0xb9, 0x1d, 0x53, 0xf3, 0x32, 0xdf, 0xbf, 0x1b, 0xc7, 0xcc,
0x33, 0x0b, 0xb5, 0xf7, 0x20, 0x91, 0x8b, 0xb5, 0x30, 0x6b, 0x50, 0x68, 0x80, 0x0b, 0x0b, 0xec, 0x42, 0xed, 0x3d, 0x48, 0xe4, 0x62, 0x2d, 0xcc, 0x1a, 0x14, 0xea, 0xe3, 0xc2, 0x1c, 0xbb, 0xa1,
0x86, 0x9e, 0xaa, 0xf0, 0x70, 0x06, 0x64, 0xf7, 0xb0, 0xfc, 0xaa, 0x02, 0xb1, 0x9f, 0xd0, 0x06, 0xa7, 0x2a, 0x3c, 0x9c, 0x02, 0xd9, 0x3d, 0x2c, 0xbf, 0xaa, 0x40, 0xec, 0x27, 0xb4, 0x41, 0xae,
0xb9, 0x96, 0xe5, 0x46, 0xf1, 0x90, 0x61, 0xc8, 0xdd, 0x01, 0x12, 0xc6, 0x9f, 0xcd, 0x3c, 0x63, 0x69, 0xb9, 0x51, 0x3c, 0x64, 0x18, 0x70, 0x77, 0x80, 0x84, 0xf1, 0xe7, 0x32, 0xcf, 0x1a, 0x73,
0x2c, 0xbc, 0x6f, 0x80, 0xf9, 0xfe, 0x07, 0xcf, 0x3d, 0x75, 0xeb, 0x67, 0x06, 0x98, 0xed, 0x39, 0xef, 0x1b, 0x60, 0xb6, 0xf7, 0xc1, 0x73, 0x5f, 0xdd, 0xfa, 0xb9, 0x01, 0xa6, 0xbb, 0xce, 0x98,
0x63, 0xfa, 0x78, 0x74, 0xab, 0xdb, 0xa3, 0x57, 0x86, 0x7d, 0x58, 0x88, 0xcd, 0xc1, 0x3b, 0x64, 0x1e, 0x1e, 0xdd, 0xee, 0xf4, 0xe8, 0x95, 0x41, 0x1f, 0x16, 0x62, 0x73, 0xf0, 0x0e, 0x59, 0x77,
0xdd, 0xbd, 0x1f, 0x1a, 0x60, 0x26, 0x5d, 0xb6, 0xef, 0x65, 0xbc, 0x8a, 0xef, 0x67, 0xc0, 0x7c, 0xef, 0x47, 0x06, 0x98, 0x4a, 0x97, 0xed, 0xfb, 0x19, 0xaf, 0xe2, 0xfb, 0x19, 0x30, 0xdb, 0xbb,
0xff, 0xc6, 0x1e, 0x12, 0x35, 0xc1, 0x18, 0xcd, 0x24, 0xa8, 0xdf, 0xd4, 0xf8, 0x1d, 0x03, 0x4c, 0xb1, 0x87, 0x44, 0x4d, 0x30, 0x86, 0x33, 0x09, 0xea, 0x35, 0x35, 0x7e, 0xc7, 0x00, 0x13, 0x6f,
0xbd, 0xa5, 0xe4, 0xe2, 0xb7, 0xee, 0x43, 0x9f, 0x41, 0xc5, 0xe7, 0x64, 0xc2, 0xa0, 0x48, 0xc7, 0x29, 0xb9, 0xf8, 0xad, 0xfb, 0xc0, 0x67, 0x50, 0xf1, 0x39, 0x99, 0x30, 0x28, 0xd2, 0x71, 0x8b,
0x2d, 0xfe, 0xce, 0x00, 0x73, 0x7d, 0x1b, 0x00, 0x78, 0x11, 0x8c, 0x5b, 0xae, 0xeb, 0xef, 0x8b, 0xbf, 0x37, 0xc0, 0x4c, 0xcf, 0x06, 0x00, 0x5e, 0x02, 0xa3, 0x96, 0xeb, 0xfa, 0xfb, 0x62, 0x94,
0x51, 0xa2, 0xf6, 0x8e, 0x60, 0x85, 0x53, 0x91, 0xe4, 0x6a, 0xd1, 0xcb, 0x7c, 0x56, 0xd1, 0x2b, 0xa8, 0xbd, 0x23, 0x58, 0xe6, 0x54, 0x24, 0xb9, 0x5a, 0xf4, 0x32, 0x9f, 0x55, 0xf4, 0x8a, 0x7f,
0xfe, 0xc9, 0x00, 0xe7, 0x6f, 0x97, 0x89, 0xf7, 0x64, 0x49, 0x97, 0x41, 0x5e, 0x36, 0xef, 0x87, 0x32, 0xc0, 0xf9, 0x3b, 0x65, 0xe2, 0x7d, 0x59, 0xd2, 0x45, 0x90, 0x97, 0xcd, 0xfb, 0x21, 0x5f,
0x7c, 0x39, 0x65, 0x29, 0x96, 0x45, 0x83, 0x7f, 0x68, 0x26, 0x7e, 0x15, 0x3f, 0x30, 0xc0, 0x4c, 0x4e, 0x59, 0x8a, 0x65, 0xd1, 0xe0, 0x1f, 0x9a, 0x89, 0x5f, 0xc5, 0x0f, 0x0c, 0x30, 0x55, 0xc1,
0x15, 0x93, 0x96, 0x53, 0xc3, 0x08, 0xd7, 0x31, 0xc1, 0x5e, 0x0d, 0xc3, 0x32, 0x98, 0xe4, 0xaf, 0xa4, 0xe9, 0x54, 0x31, 0xc2, 0x35, 0x4c, 0xb0, 0x57, 0xc5, 0x70, 0x09, 0x8c, 0xf3, 0xd7, 0xdd,
0xbb, 0x03, 0xab, 0x16, 0xbf, 0xba, 0x99, 0x95, 0x21, 0x9f, 0xbc, 0x16, 0x33, 0x50, 0x22, 0xa3, 0x81, 0x55, 0x8d, 0x5f, 0xdd, 0x4c, 0xcb, 0x90, 0x8f, 0x5f, 0x8f, 0x19, 0x28, 0x91, 0x51, 0xaf,
0x5e, 0xf3, 0x64, 0x06, 0xbe, 0xe6, 0x39, 0x0f, 0xc6, 0x82, 0x64, 0x10, 0x9d, 0x67, 0x5c, 0x3e, 0x79, 0x32, 0x7d, 0x5f, 0xf3, 0x9c, 0x07, 0x23, 0x41, 0x32, 0x88, 0xce, 0x33, 0x2e, 0x9f, 0x3d,
0x7b, 0xe6, 0x54, 0xce, 0xf5, 0x49, 0xc8, 0xa7, 0x6b, 0x39, 0xc9, 0xf5, 0x49, 0x88, 0x38, 0xb5, 0x73, 0x2a, 0xe7, 0xfa, 0x24, 0xe4, 0xd3, 0xb5, 0x9c, 0xe4, 0xfa, 0x24, 0x44, 0x9c, 0xca, 0xf6,
0xf8, 0x87, 0x0c, 0x38, 0xd5, 0x5d, 0xc7, 0x19, 0x20, 0x89, 0xdc, 0x9e, 0xf7, 0x4a, 0x8c, 0x87, 0xcb, 0xa9, 0xce, 0x3a, 0xce, 0x00, 0x49, 0xe4, 0x76, 0xbd, 0x57, 0x62, 0x3c, 0xc4, 0x39, 0xfa,
0x38, 0x47, 0xff, 0xdc, 0x25, 0x73, 0xfb, 0xcf, 0x5d, 0xe0, 0xf3, 0x60, 0x56, 0xfe, 0x5c, 0x3f, 0xe7, 0x2e, 0x99, 0x3b, 0x7f, 0xee, 0x02, 0x5f, 0x00, 0xd3, 0xf2, 0xe7, 0xda, 0x41, 0x40, 0x30,
0x08, 0x08, 0xa6, 0xfc, 0xdd, 0x69, 0xb6, 0xfb, 0xa3, 0xd9, 0xcd, 0xb4, 0x00, 0xea, 0xd5, 0x81, 0xe5, 0xef, 0x4e, 0xb3, 0x9d, 0x1f, 0xcd, 0x6e, 0xa4, 0x05, 0x50, 0xb7, 0x0e, 0xfc, 0x7c, 0xea,
0xaf, 0xa5, 0x3e, 0xc5, 0x59, 0x4f, 0x3e, 0xc3, 0x39, 0x6a, 0x17, 0x9e, 0x1e, 0xf4, 0x15, 0x6b, 0x53, 0x9c, 0x8b, 0xc9, 0x67, 0x38, 0xac, 0x25, 0xe4, 0x7d, 0xc6, 0x2d, 0x56, 0x06, 0xd6, 0x08,
0x14, 0x3a, 0x6e, 0x39, 0x79, 0x49, 0x5f, 0xae, 0xb3, 0x7e, 0xa4, 0xb4, 0x4e, 0x88, 0x4f, 0xf8, 0xf1, 0x49, 0xea, 0xfb, 0x9c, 0x25, 0x30, 0x5e, 0x63, 0x02, 0x7c, 0x5e, 0x9f, 0xeb, 0x0c, 0xfa,
0xc1, 0x19, 0x7f, 0xc1, 0x53, 0x06, 0x93, 0x9c, 0xc5, 0x27, 0xfa, 0xb9, 0xee, 0x65, 0xb9, 0x12, 0xd5, 0x98, 0x81, 0x12, 0x99, 0xe2, 0x9f, 0x0d, 0xd0, 0xeb, 0x4b, 0x39, 0x78, 0x4e, 0xcc, 0x5d,
0x33, 0x50, 0x22, 0x53, 0xfc, 0xb3, 0x01, 0xfa, 0x7d, 0x4b, 0x07, 0xcf, 0x89, 0xc9, 0xac, 0x36, 0xb5, 0x61, 0x66, 0x3c, 0x73, 0x85, 0x4d, 0x30, 0x46, 0xc5, 0x62, 0xcb, 0x64, 0xdc, 0x3c, 0x66,
0xee, 0x8c, 0xa7, 0xb2, 0xb0, 0x05, 0x26, 0xa8, 0x48, 0x07, 0x99, 0xae, 0x5b, 0xc7, 0x4c, 0xd7, 0x32, 0xa6, 0x53, 0x47, 0x34, 0x7c, 0x31, 0x35, 0x06, 0x63, 0xf9, 0x58, 0xb5, 0xca, 0x91, 0x67,
0x74, 0x72, 0x89, 0x96, 0x30, 0xa6, 0xc6, 0x60, 0x2c, 0x63, 0x6b, 0x56, 0x25, 0xf2, 0x6c, 0x39, 0xcb, 0x51, 0xfc, 0xa4, 0xc8, 0xc7, 0x95, 0x65, 0x41, 0x43, 0x8a, 0x5b, 0xae, 0x7e, 0xf8, 0xc9,
0xac, 0x9f, 0x16, 0x19, 0xbb, 0xba, 0x22, 0x68, 0x48, 0x71, 0x2b, 0xb5, 0x0f, 0x3f, 0x59, 0x3c, 0xfc, 0x89, 0x8f, 0x3e, 0x99, 0x3f, 0xf1, 0xf1, 0x27, 0xf3, 0x27, 0xbe, 0xd9, 0x9e, 0x37, 0x3e,
0xf1, 0xd1, 0x27, 0x8b, 0x27, 0x3e, 0xfe, 0x64, 0xf1, 0xc4, 0x37, 0x3a, 0x8b, 0xc6, 0x87, 0x9d, 0x6c, 0xcf, 0x1b, 0x1f, 0xb5, 0xe7, 0x8d, 0x8f, 0xdb, 0xf3, 0xc6, 0xdf, 0xdb, 0xf3, 0xc6, 0x8f,
0x45, 0xe3, 0xa3, 0xce, 0xa2, 0xf1, 0x71, 0x67, 0xd1, 0xf8, 0x7b, 0x67, 0xd1, 0xf8, 0xd1, 0x3f, 0xff, 0x31, 0x7f, 0xe2, 0xab, 0xcf, 0x1f, 0xeb, 0xe3, 0xf4, 0xff, 0x04, 0x00, 0x00, 0xff, 0xff,
0x16, 0x4f, 0x7c, 0xe5, 0xb9, 0x63, 0x7d, 0xbe, 0xfe, 0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x3b, 0xde, 0xe9, 0x15, 0xbf, 0xf5, 0x2e, 0x00, 0x00,
0xf5, 0xa4, 0xa4, 0x17, 0x2f, 0x00, 0x00,
} }
func (m *ConversionRequest) Marshal() (dAtA []byte, err error) { func (m *ConversionRequest) Marshal() (dAtA []byte, err error) {
@ -9133,7 +9131,7 @@ func (m *ValidationRule) Unmarshal(dAtA []byte) error {
if postIndex > l { if postIndex > l {
return io.ErrUnexpectedEOF return io.ErrUnexpectedEOF
} }
s := k8s_io_apimachinery_pkg_util_validation_field.ErrorType(dAtA[iNdEx:postIndex]) s := FieldValueErrorReason(dAtA[iNdEx:postIndex])
m.Reason = &s m.Reason = &s
iNdEx = postIndex iNdEx = postIndex
case 5: case 5:

View File

@ -735,7 +735,7 @@ message ValidationRule {
// The HTTP status code returned to the caller will match the reason of the reason of the first failed validation rule. // The HTTP status code returned to the caller will match the reason of the reason of the first failed validation rule.
// The currently supported reasons are: "FieldValueInvalid", "FieldValueForbidden", "FieldValueRequired", "FieldValueDuplicate". // The currently supported reasons are: "FieldValueInvalid", "FieldValueForbidden", "FieldValueRequired", "FieldValueDuplicate".
// If not set, default to use "FieldValueInvalid". // If not set, default to use "FieldValueInvalid".
// All future added reasons must be accepted by clients when reading this value. // All future added reasons must be accepted by clients when reading this value and unknown reasons should be treated as FieldValueInvalid.
// +optional // +optional
optional string reason = 4; optional string reason = 4;

View File

@ -16,8 +16,24 @@ limitations under the License.
package v1beta1 package v1beta1
import ( // FieldValueErrorReason is a machine-readable value providing more detail about why a field failed the validation.
"k8s.io/apimachinery/pkg/util/validation/field" // +enum
type FieldValueErrorReason string
const (
// FieldValueRequired is used to report required values that are not
// provided (e.g. empty strings, null values, or empty arrays).
FieldValueRequired FieldValueErrorReason = "FieldValueRequired"
// FieldValueDuplicate is used to report collisions of values that must be
// unique (e.g. unique IDs).
FieldValueDuplicate FieldValueErrorReason = "FieldValueDuplicate"
// FieldValueInvalid is used to report malformed values (e.g. failed regex
// match, too long, out of bounds).
FieldValueInvalid FieldValueErrorReason = "FieldValueInvalid"
// FieldValueForbidden is used to report valid (as per formatting rules)
// values which would be accepted under some conditions, but which are not
// permitted by the current conditions (such as security policy).
FieldValueForbidden FieldValueErrorReason = "FieldValueForbidden"
) )
// JSONSchemaProps is a JSON-Schema following Specification Draft 4 (http://json-schema.org/). // JSONSchemaProps is a JSON-Schema following Specification Draft 4 (http://json-schema.org/).
@ -255,9 +271,9 @@ type ValidationRule struct {
// The HTTP status code returned to the caller will match the reason of the reason of the first failed validation rule. // The HTTP status code returned to the caller will match the reason of the reason of the first failed validation rule.
// The currently supported reasons are: "FieldValueInvalid", "FieldValueForbidden", "FieldValueRequired", "FieldValueDuplicate". // The currently supported reasons are: "FieldValueInvalid", "FieldValueForbidden", "FieldValueRequired", "FieldValueDuplicate".
// If not set, default to use "FieldValueInvalid". // If not set, default to use "FieldValueInvalid".
// All future added reasons must be accepted by clients when reading this value. // All future added reasons must be accepted by clients when reading this value and unknown reasons should be treated as FieldValueInvalid.
// +optional // +optional
Reason *field.ErrorType `json:"reason,omitempty" protobuf:"bytes,4,opt,name=reason"` Reason *FieldValueErrorReason `json:"reason,omitempty" protobuf:"bytes,4,opt,name=reason"`
// fieldPath represents the field path returned when the validation fails. // fieldPath represents the field path returned when the validation fails.
// It must be a relative JSON path (i.e. with array notation) scoped to the location of this x-kubernetes-validations extension in the schema and refer to an existing field. // It must be a relative JSON path (i.e. with array notation) scoped to the location of this x-kubernetes-validations extension in the schema and refer to an existing field.
// e.g. when validation checks if a specific attribute `foo` under a map `testMap`, the fieldPath could be set to `.testMap.foo` // e.g. when validation checks if a specific attribute `foo` under a map `testMap`, the fieldPath could be set to `.testMap.foo`

View File

@ -28,7 +28,6 @@ import (
v1 "k8s.io/apimachinery/pkg/apis/meta/v1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
conversion "k8s.io/apimachinery/pkg/conversion" conversion "k8s.io/apimachinery/pkg/conversion"
runtime "k8s.io/apimachinery/pkg/runtime" runtime "k8s.io/apimachinery/pkg/runtime"
field "k8s.io/apimachinery/pkg/util/validation/field"
) )
func init() { func init() {
@ -1308,7 +1307,7 @@ func autoConvert_v1beta1_ValidationRule_To_apiextensions_ValidationRule(in *Vali
out.Rule = in.Rule out.Rule = in.Rule
out.Message = in.Message out.Message = in.Message
out.MessageExpression = in.MessageExpression out.MessageExpression = in.MessageExpression
out.Reason = (*field.ErrorType)(unsafe.Pointer(in.Reason)) out.Reason = (*apiextensions.FieldValueErrorReason)(unsafe.Pointer(in.Reason))
out.FieldPath = in.FieldPath out.FieldPath = in.FieldPath
return nil return nil
} }
@ -1322,7 +1321,7 @@ func autoConvert_apiextensions_ValidationRule_To_v1beta1_ValidationRule(in *apie
out.Rule = in.Rule out.Rule = in.Rule
out.Message = in.Message out.Message = in.Message
out.MessageExpression = in.MessageExpression out.MessageExpression = in.MessageExpression
out.Reason = (*field.ErrorType)(unsafe.Pointer(in.Reason)) out.Reason = (*FieldValueErrorReason)(unsafe.Pointer(in.Reason))
out.FieldPath = in.FieldPath out.FieldPath = in.FieldPath
return nil return nil
} }

View File

@ -23,7 +23,6 @@ package v1beta1
import ( import (
runtime "k8s.io/apimachinery/pkg/runtime" runtime "k8s.io/apimachinery/pkg/runtime"
field "k8s.io/apimachinery/pkg/util/validation/field"
) )
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
@ -642,7 +641,7 @@ func (in *ValidationRule) DeepCopyInto(out *ValidationRule) {
*out = *in *out = *in
if in.Reason != nil { if in.Reason != nil {
in, out := &in.Reason, &out.Reason in, out := &in.Reason, &out.Reason
*out = new(field.ErrorType) *out = new(FieldValueErrorReason)
**out = **in **out = **in
} }
return return

View File

@ -63,10 +63,10 @@ const (
) )
var supportedValidationReason = sets.NewString( var supportedValidationReason = sets.NewString(
string(field.ErrorTypeInvalid), string(apiextensions.FieldValueRequired),
string(field.ErrorTypeForbidden), string(apiextensions.FieldValueForbidden),
string(field.ErrorTypeRequired), string(apiextensions.FieldValueInvalid),
string(field.ErrorTypeDuplicate), string(apiextensions.FieldValueDuplicate),
) )
// ValidateCustomResourceDefinition statically validates // ValidateCustomResourceDefinition statically validates

View File

@ -4090,8 +4090,8 @@ func TestValidateCustomResourceDefinition(t *testing.T) {
XValidations: apiextensions.ValidationRules{ XValidations: apiextensions.ValidationRules{
{ {
Rule: "self.a > 0", Rule: "self.a > 0",
Reason: func() *field.ErrorType { Reason: func() *apiextensions.FieldValueErrorReason {
r := field.ErrorTypeInternal r := apiextensions.FieldValueErrorReason("InternalError")
return &r return &r
}(), }(),
FieldPath: ".a", FieldPath: ".a",
@ -4100,6 +4100,36 @@ func TestValidateCustomResourceDefinition(t *testing.T) {
Properties: map[string]apiextensions.JSONSchemaProps{ Properties: map[string]apiextensions.JSONSchemaProps{
"a": { "a": {
Type: "number", Type: "number",
XValidations: apiextensions.ValidationRules{
{
Rule: "true",
Reason: func() *apiextensions.FieldValueErrorReason {
r := apiextensions.FieldValueRequired
return &r
}(),
},
{
Rule: "true",
Reason: func() *apiextensions.FieldValueErrorReason {
r := apiextensions.FieldValueInvalid
return &r
}(),
},
{
Rule: "true",
Reason: func() *apiextensions.FieldValueErrorReason {
r := apiextensions.FieldValueDuplicate
return &r
}(),
},
{
Rule: "true",
Reason: func() *apiextensions.FieldValueErrorReason {
r := apiextensions.FieldValueForbidden
return &r
}(),
},
},
}, },
}, },
}, },

View File

@ -23,7 +23,6 @@ package apiextensions
import ( import (
runtime "k8s.io/apimachinery/pkg/runtime" runtime "k8s.io/apimachinery/pkg/runtime"
field "k8s.io/apimachinery/pkg/util/validation/field"
) )
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
@ -534,7 +533,7 @@ func (in *ValidationRule) DeepCopyInto(out *ValidationRule) {
*out = *in *out = *in
if in.Reason != nil { if in.Reason != nil {
in, out := &in.Reason, &out.Reason in, out := &in.Reason, &out.Reason
*out = new(field.ErrorType) *out = new(FieldValueErrorReason)
**out = **in **out = **in
} }
return return

View File

@ -436,16 +436,16 @@ func ValidFieldPath(jsonPath string, schema *schema.Structural) (validFieldPath
return validFieldPath, nil return validFieldPath, nil
} }
func fieldErrorForReason(fldPath *field.Path, value interface{}, detail string, reason *field.ErrorType) *field.Error { func fieldErrorForReason(fldPath *field.Path, value interface{}, detail string, reason *apiextensions.FieldValueErrorReason) *field.Error {
if reason == nil { if reason == nil {
return field.Invalid(fldPath, value, detail) return field.Invalid(fldPath, value, detail)
} }
switch *reason { switch *reason {
case field.ErrorTypeForbidden: case apiextensions.FieldValueForbidden:
return field.Forbidden(fldPath, detail) return field.Forbidden(fldPath, detail)
case field.ErrorTypeRequired: case apiextensions.FieldValueRequired:
return field.Required(fldPath, detail) return field.Required(fldPath, detail)
case field.ErrorTypeDuplicate: case apiextensions.FieldValueDuplicate:
return field.Duplicate(fldPath, value) return field.Duplicate(fldPath, value)
default: default:
return field.Invalid(fldPath, value, detail) return field.Invalid(fldPath, value, detail)

View File

@ -2592,8 +2592,8 @@ func TestMessageExpression(t *testing.T) {
} }
func TestReasonAndFldPath(t *testing.T) { func TestReasonAndFldPath(t *testing.T) {
forbiddenReason := func() *field.ErrorType { forbiddenReason := func() *apiextensions.FieldValueErrorReason {
r := field.ErrorTypeForbidden r := apiextensions.FieldValueForbidden
return &r return &r
}() }()
tests := []struct { tests := []struct {
@ -3313,7 +3313,7 @@ func withRuleMessageAndMessageExpression(s schema.Structural, rule, message, mes
return s return s
} }
func withReasonAndFldPath(s schema.Structural, rule, jsonPath string, reason *field.ErrorType) schema.Structural { func withReasonAndFldPath(s schema.Structural, rule, jsonPath string, reason *apiextensions.FieldValueErrorReason) schema.Structural {
s.Extensions.XValidations = apiextensions.ValidationRules{ s.Extensions.XValidations = apiextensions.ValidationRules{
{ {
Rule: rule, Rule: rule,

View File

@ -2360,9 +2360,10 @@ func schema_pkg_apis_apiextensions_v1_ValidationRule(ref common.ReferenceCallbac
}, },
"reason": { "reason": {
SchemaProps: spec.SchemaProps{ SchemaProps: spec.SchemaProps{
Description: "reason provides a machine-readable validation failure reason that is returned to the caller when a request fails this validation rule. The HTTP status code returned to the caller will match the reason of the reason of the first failed validation rule. The currently supported reasons are: \"FieldValueInvalid\", \"FieldValueForbidden\", \"FieldValueRequired\", \"FieldValueDuplicate\". If not set, default to use \"FieldValueInvalid\". All future added reasons must be accepted by clients when reading this value.", Description: "reason provides a machine-readable validation failure reason that is returned to the caller when a request fails this validation rule. The HTTP status code returned to the caller will match the reason of the reason of the first failed validation rule. The currently supported reasons are: \"FieldValueInvalid\", \"FieldValueForbidden\", \"FieldValueRequired\", \"FieldValueDuplicate\". If not set, default to use \"FieldValueInvalid\". All future added reasons must be accepted by clients when reading this value and unknown reasons should be treated as FieldValueInvalid.\n\nPossible enum values:\n - `\"FieldValueDuplicate\"` is used to report collisions of values that must be unique (e.g. unique IDs).\n - `\"FieldValueForbidden\"` is used to report valid (as per formatting rules) values which would be accepted under some conditions, but which are not permitted by the current conditions (such as security policy).\n - `\"FieldValueInvalid\"` is used to report malformed values (e.g. failed regex match, too long, out of bounds).\n - `\"FieldValueRequired\"` is used to report required values that are not provided (e.g. empty strings, null values, or empty arrays).",
Type: []string{"string"}, Type: []string{"string"},
Format: "", Format: "",
Enum: []interface{}{"FieldValueDuplicate", "FieldValueForbidden", "FieldValueInvalid", "FieldValueRequired"},
}, },
}, },
"fieldPath": { "fieldPath": {
@ -3772,9 +3773,10 @@ func schema_pkg_apis_apiextensions_v1beta1_ValidationRule(ref common.ReferenceCa
}, },
"reason": { "reason": {
SchemaProps: spec.SchemaProps{ SchemaProps: spec.SchemaProps{
Description: "reason provides a machine-readable validation failure reason that is returned to the caller when a request fails this validation rule. The HTTP status code returned to the caller will match the reason of the reason of the first failed validation rule. The currently supported reasons are: \"FieldValueInvalid\", \"FieldValueForbidden\", \"FieldValueRequired\", \"FieldValueDuplicate\". If not set, default to use \"FieldValueInvalid\". All future added reasons must be accepted by clients when reading this value.", Description: "reason provides a machine-readable validation failure reason that is returned to the caller when a request fails this validation rule. The HTTP status code returned to the caller will match the reason of the reason of the first failed validation rule. The currently supported reasons are: \"FieldValueInvalid\", \"FieldValueForbidden\", \"FieldValueRequired\", \"FieldValueDuplicate\". If not set, default to use \"FieldValueInvalid\". All future added reasons must be accepted by clients when reading this value and unknown reasons should be treated as FieldValueInvalid.\n\nPossible enum values:\n - `\"FieldValueDuplicate\"` is used to report collisions of values that must be unique (e.g. unique IDs).\n - `\"FieldValueForbidden\"` is used to report valid (as per formatting rules) values which would be accepted under some conditions, but which are not permitted by the current conditions (such as security policy).\n - `\"FieldValueInvalid\"` is used to report malformed values (e.g. failed regex match, too long, out of bounds).\n - `\"FieldValueRequired\"` is used to report required values that are not provided (e.g. empty strings, null values, or empty arrays).",
Type: []string{"string"}, Type: []string{"string"},
Format: "", Format: "",
Enum: []interface{}{"FieldValueDuplicate", "FieldValueForbidden", "FieldValueInvalid", "FieldValueRequired"},
}, },
}, },
"fieldPath": { "fieldPath": {