···11+// Copyright 2023-2025 Buf Technologies, Inc.
22+//
33+// Licensed under the Apache License, Version 2.0 (the "License");
44+// you may not use this file except in compliance with the License.
55+// You may obtain a copy of the License at
66+//
77+// http://www.apache.org/licenses/LICENSE-2.0
88+//
99+// Unless required by applicable law or agreed to in writing, software
1010+// distributed under the License is distributed on an "AS IS" BASIS,
1111+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1212+// See the License for the specific language governing permissions and
1313+// limitations under the License.
1414+1515+// @generated by protoc-gen-es v2.11.0 with parameter "target=ts,import_extension=ts"
1616+// @generated from file buf/validate/validate.proto (package buf.validate, syntax proto2)
1717+/* eslint-disable */
1818+1919+import type { GenEnum, GenExtension, GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2";
2020+import { enumDesc, extDesc, fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv2";
2121+import type { Duration, FieldDescriptorProto_Type, FieldMask, FieldOptions, MessageOptions, OneofOptions, Timestamp } from "@bufbuild/protobuf/wkt";
2222+import { file_google_protobuf_descriptor, file_google_protobuf_duration, file_google_protobuf_field_mask, file_google_protobuf_timestamp } from "@bufbuild/protobuf/wkt";
2323+import type { Message } from "@bufbuild/protobuf";
2424+2525+/**
2626+ * Describes the file buf/validate/validate.proto.
2727+ */
2828+export const file_buf_validate_validate: GenFile = /*@__PURE__*/
2929+ fileDesc("ChtidWYvdmFsaWRhdGUvdmFsaWRhdGUucHJvdG8SDGJ1Zi52YWxpZGF0ZSI3CgRSdWxlEgoKAmlkGAEgASgJEg8KB21lc3NhZ2UYAiABKAkSEgoKZXhwcmVzc2lvbhgDIAEoCSKGAQoMTWVzc2FnZVJ1bGVzEhYKDmNlbF9leHByZXNzaW9uGAUgAygJEh8KA2NlbBgDIAMoCzISLmJ1Zi52YWxpZGF0ZS5SdWxlEi0KBW9uZW9mGAQgAygLMh4uYnVmLnZhbGlkYXRlLk1lc3NhZ2VPbmVvZlJ1bGVKBAgBEAJSCGRpc2FibGVkIjQKEE1lc3NhZ2VPbmVvZlJ1bGUSDgoGZmllbGRzGAEgAygJEhAKCHJlcXVpcmVkGAIgASgIIh4KCk9uZW9mUnVsZXMSEAoIcmVxdWlyZWQYASABKAgiiwkKCkZpZWxkUnVsZXMSFgoOY2VsX2V4cHJlc3Npb24YHSADKAkSHwoDY2VsGBcgAygLMhIuYnVmLnZhbGlkYXRlLlJ1bGUSEAoIcmVxdWlyZWQYGSABKAgSJAoGaWdub3JlGBsgASgOMhQuYnVmLnZhbGlkYXRlLklnbm9yZRIpCgVmbG9hdBgBIAEoCzIYLmJ1Zi52YWxpZGF0ZS5GbG9hdFJ1bGVzSAASKwoGZG91YmxlGAIgASgLMhkuYnVmLnZhbGlkYXRlLkRvdWJsZVJ1bGVzSAASKQoFaW50MzIYAyABKAsyGC5idWYudmFsaWRhdGUuSW50MzJSdWxlc0gAEikKBWludDY0GAQgASgLMhguYnVmLnZhbGlkYXRlLkludDY0UnVsZXNIABIrCgZ1aW50MzIYBSABKAsyGS5idWYudmFsaWRhdGUuVUludDMyUnVsZXNIABIrCgZ1aW50NjQYBiABKAsyGS5idWYudmFsaWRhdGUuVUludDY0UnVsZXNIABIrCgZzaW50MzIYByABKAsyGS5idWYudmFsaWRhdGUuU0ludDMyUnVsZXNIABIrCgZzaW50NjQYCCABKAsyGS5idWYudmFsaWRhdGUuU0ludDY0UnVsZXNIABItCgdmaXhlZDMyGAkgASgLMhouYnVmLnZhbGlkYXRlLkZpeGVkMzJSdWxlc0gAEi0KB2ZpeGVkNjQYCiABKAsyGi5idWYudmFsaWRhdGUuRml4ZWQ2NFJ1bGVzSAASLwoIc2ZpeGVkMzIYCyABKAsyGy5idWYudmFsaWRhdGUuU0ZpeGVkMzJSdWxlc0gAEi8KCHNmaXhlZDY0GAwgASgLMhsuYnVmLnZhbGlkYXRlLlNGaXhlZDY0UnVsZXNIABInCgRib29sGA0gASgLMhcuYnVmLnZhbGlkYXRlLkJvb2xSdWxlc0gAEisKBnN0cmluZxgOIAEoCzIZLmJ1Zi52YWxpZGF0ZS5TdHJpbmdSdWxlc0gAEikKBWJ5dGVzGA8gASgLMhguYnVmLnZhbGlkYXRlLkJ5dGVzUnVsZXNIABInCgRlbnVtGBAgASgLMhcuYnVmLnZhbGlkYXRlLkVudW1SdWxlc0gAEi8KCHJlcGVhdGVkGBIgASgLMhsuYnVmLnZhbGlkYXRlLlJlcGVhdGVkUnVsZXNIABIlCgNtYXAYEyABKAsyFi5idWYudmFsaWRhdGUuTWFwUnVsZXNIABIlCgNhbnkYFCABKAsyFi5idWYudmFsaWRhdGUuQW55UnVsZXNIABIvCghkdXJhdGlvbhgVIAEoCzIbLmJ1Zi52YWxpZGF0ZS5EdXJhdGlvblJ1bGVzSAASMgoKZmllbGRfbWFzaxgcIAEoCzIcLmJ1Zi52YWxpZGF0ZS5GaWVsZE1hc2tSdWxlc0gAEjEKCXRpbWVzdGFtcBgWIAEoCzIcLmJ1Zi52YWxpZGF0ZS5UaW1lc3RhbXBSdWxlc0gAQgYKBHR5cGVKBAgYEBlKBAgaEBtSB3NraXBwZWRSDGlnbm9yZV9lbXB0eSJVCg9QcmVkZWZpbmVkUnVsZXMSHwoDY2VsGAEgAygLMhIuYnVmLnZhbGlkYXRlLlJ1bGVKBAgYEBlKBAgaEBtSB3NraXBwZWRSDGlnbm9yZV9lbXB0eSLaFwoKRmxvYXRSdWxlcxKDAQoFY29uc3QYASABKAJCdMJIcQpvCgtmbG9hdC5jb25zdBpgdGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAndmFsdWUgbXVzdCBlcXVhbCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2NvbnN0JyldKSA6ICcnEp8BCgJsdBgCIAEoAkKQAcJIjAEKiQEKCGZsb2F0Lmx0Gn0haGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgKHRoaXMuaXNOYW4oKSB8fCB0aGlzID49IHJ1bGVzLmx0KT8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmx0XSkgOiAnJ0gAEq8BCgNsdGUYAyABKAJCnwHCSJsBCpgBCglmbG9hdC5sdGUaigEhaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgKHRoaXMuaXNOYW4oKSB8fCB0aGlzID4gcnVsZXMubHRlKT8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmx0ZV0pIDogJydIABLvBwoCZ3QYBCABKAJC4AfCSNwHCo0BCghmbG9hdC5ndBqAASFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiAodGhpcy5pc05hbigpIHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RdKSA6ICcnCsMBCgtmbG9hdC5ndF9sdBqzAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3QgJiYgKHRoaXMuaXNOYW4oKSB8fCB0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCs0BChVmbG9hdC5ndF9sdF9leGNsdXNpdmUaswFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3QgJiYgKHRoaXMuaXNOYW4oKSB8fCAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrTAQoMZmxvYXQuZ3RfbHRlGsIBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ICYmICh0aGlzLmlzTmFuKCkgfHwgdGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJycK3QEKFmZsb2F0Lmd0X2x0ZV9leGNsdXNpdmUawgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndCAmJiAodGhpcy5pc05hbigpIHx8IChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJ0gBEroICgNndGUYBSABKAJCqgjCSKYICpsBCglmbG9hdC5ndGUajQEhaGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgKHRoaXMuaXNOYW4oKSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZV0pIDogJycK0gEKDGZsb2F0Lmd0ZV9sdBrBAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3RlICYmICh0aGlzLmlzTmFuKCkgfHwgdGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycK3AEKFmZsb2F0Lmd0ZV9sdF9leGNsdXNpdmUawQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3RlICYmICh0aGlzLmlzTmFuKCkgfHwgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSkpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCuIBCg1mbG9hdC5ndGVfbHRlGtABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ZSAmJiAodGhpcy5pc05hbigpIHx8IHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJwrsAQoXZmxvYXQuZ3RlX2x0ZV9leGNsdXNpdmUa0AFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndGUgJiYgKHRoaXMuaXNOYW4oKSB8fCAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnSAESfwoCaW4YBiADKAJCc8JIcApuCghmbG9hdC5pbhpiISh0aGlzIGluIGdldEZpZWxkKHJ1bGVzLCAnaW4nKSkgPyAndmFsdWUgbXVzdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnaW4nKV0pIDogJycSdgoGbm90X2luGAcgAygCQmbCSGMKYQoMZmxvYXQubm90X2luGlF0aGlzIGluIHJ1bGVzLm5vdF9pbiA/ICd2YWx1ZSBtdXN0IG5vdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW3J1bGVzLm5vdF9pbl0pIDogJycSdQoGZmluaXRlGAggASgIQmXCSGIKYAoMZmxvYXQuZmluaXRlGlBydWxlcy5maW5pdGUgPyAodGhpcy5pc05hbigpIHx8IHRoaXMuaXNJbmYoKSA/ICd2YWx1ZSBtdXN0IGJlIGZpbml0ZScgOiAnJykgOiAnJxIrCgdleGFtcGxlGAkgAygCQhrCSBcKFQoNZmxvYXQuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4i7RcKC0RvdWJsZVJ1bGVzEoQBCgVjb25zdBgBIAEoAUJ1wkhyCnAKDGRvdWJsZS5jb25zdBpgdGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAndmFsdWUgbXVzdCBlcXVhbCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2NvbnN0JyldKSA6ICcnEqABCgJsdBgCIAEoAUKRAcJIjQEKigEKCWRvdWJsZS5sdBp9IWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmICh0aGlzLmlzTmFuKCkgfHwgdGhpcyA+PSBydWxlcy5sdCk/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5sdF0pIDogJydIABKwAQoDbHRlGAMgASgBQqABwkicAQqZAQoKZG91YmxlLmx0ZRqKASFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiAodGhpcy5pc05hbigpIHx8IHRoaXMgPiBydWxlcy5sdGUpPyAndmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMubHRlXSkgOiAnJ0gAEvQHCgJndBgEIAEoAULlB8JI4QcKjgEKCWRvdWJsZS5ndBqAASFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiAodGhpcy5pc05hbigpIHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RdKSA6ICcnCsQBCgxkb3VibGUuZ3RfbHQaswFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ICYmICh0aGlzLmlzTmFuKCkgfHwgdGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrOAQoWZG91YmxlLmd0X2x0X2V4Y2x1c2l2ZRqzAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndCAmJiAodGhpcy5pc05hbigpIHx8IChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCtQBCg1kb3VibGUuZ3RfbHRlGsIBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ICYmICh0aGlzLmlzTmFuKCkgfHwgdGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJycK3gEKF2RvdWJsZS5ndF9sdGVfZXhjbHVzaXZlGsIBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3QgJiYgKHRoaXMuaXNOYW4oKSB8fCAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJydIARK/CAoDZ3RlGAUgASgBQq8IwkirCAqcAQoKZG91YmxlLmd0ZRqNASFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiAodGhpcy5pc05hbigpIHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlXSkgOiAnJwrTAQoNZG91YmxlLmd0ZV9sdBrBAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3RlICYmICh0aGlzLmlzTmFuKCkgfHwgdGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycK3QEKF2RvdWJsZS5ndGVfbHRfZXhjbHVzaXZlGsEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ZSAmJiAodGhpcy5pc05hbigpIHx8IChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrjAQoOZG91YmxlLmd0ZV9sdGUa0AFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3RlICYmICh0aGlzLmlzTmFuKCkgfHwgdGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnCu0BChhkb3VibGUuZ3RlX2x0ZV9leGNsdXNpdmUa0AFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndGUgJiYgKHRoaXMuaXNOYW4oKSB8fCAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnSAESgAEKAmluGAYgAygBQnTCSHEKbwoJZG91YmxlLmluGmIhKHRoaXMgaW4gZ2V0RmllbGQocnVsZXMsICdpbicpKSA/ICd2YWx1ZSBtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdpbicpXSkgOiAnJxJ3CgZub3RfaW4YByADKAFCZ8JIZApiCg1kb3VibGUubm90X2luGlF0aGlzIGluIHJ1bGVzLm5vdF9pbiA/ICd2YWx1ZSBtdXN0IG5vdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW3J1bGVzLm5vdF9pbl0pIDogJycSdgoGZmluaXRlGAggASgIQmbCSGMKYQoNZG91YmxlLmZpbml0ZRpQcnVsZXMuZmluaXRlID8gKHRoaXMuaXNOYW4oKSB8fCB0aGlzLmlzSW5mKCkgPyAndmFsdWUgbXVzdCBiZSBmaW5pdGUnIDogJycpIDogJycSLAoHZXhhbXBsZRgJIAMoAUIbwkgYChYKDmRvdWJsZS5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCCwoJbGVzc190aGFuQg4KDGdyZWF0ZXJfdGhhbiKMFQoKSW50MzJSdWxlcxKDAQoFY29uc3QYASABKAVCdMJIcQpvCgtpbnQzMi5jb25zdBpgdGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAndmFsdWUgbXVzdCBlcXVhbCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2NvbnN0JyldKSA6ICcnEooBCgJsdBgCIAEoBUJ8wkh5CncKCGludDMyLmx0GmshaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+PSBydWxlcy5sdD8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmx0XSkgOiAnJ0gAEpwBCgNsdGUYAyABKAVCjAHCSIgBCoUBCglpbnQzMi5sdGUaeCFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiB0aGlzID4gcnVsZXMubHRlPyAndmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMubHRlXSkgOiAnJ0gAEpcHCgJndBgEIAEoBUKIB8JIhAcKegoIaW50MzIuZ3QabiFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDw9IHJ1bGVzLmd0PyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RdKSA6ICcnCrMBCgtpbnQzMi5ndF9sdBqjAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKuwEKFWludDMyLmd0X2x0X2V4Y2x1c2l2ZRqhAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndCAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCsMBCgxpbnQzMi5ndF9sdGUasgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnCssBChZpbnQzMi5ndF9sdGVfZXhjbHVzaXZlGrABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJydIARLjBwoDZ3RlGAUgASgFQtMHwkjPBwqIAQoJaW50MzIuZ3RlGnshaGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8IHJ1bGVzLmd0ZT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZV0pIDogJycKwgEKDGludDMyLmd0ZV9sdBqxAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3RlICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrKAQoWaW50MzIuZ3RlX2x0X2V4Y2x1c2l2ZRqvAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycK0gEKDWludDMyLmd0ZV9sdGUawAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3RlICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJycK2gEKF2ludDMyLmd0ZV9sdGVfZXhjbHVzaXZlGr4BaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJ0gBEn8KAmluGAYgAygFQnPCSHAKbgoIaW50MzIuaW4aYiEodGhpcyBpbiBnZXRGaWVsZChydWxlcywgJ2luJykpID8gJ3ZhbHVlIG11c3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2luJyldKSA6ICcnEnYKBm5vdF9pbhgHIAMoBUJmwkhjCmEKDGludDMyLm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEisKB2V4YW1wbGUYCCADKAVCGsJIFwoVCg1pbnQzMi5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCCwoJbGVzc190aGFuQg4KDGdyZWF0ZXJfdGhhbiKMFQoKSW50NjRSdWxlcxKDAQoFY29uc3QYASABKANCdMJIcQpvCgtpbnQ2NC5jb25zdBpgdGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAndmFsdWUgbXVzdCBlcXVhbCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2NvbnN0JyldKSA6ICcnEooBCgJsdBgCIAEoA0J8wkh5CncKCGludDY0Lmx0GmshaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+PSBydWxlcy5sdD8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmx0XSkgOiAnJ0gAEpwBCgNsdGUYAyABKANCjAHCSIgBCoUBCglpbnQ2NC5sdGUaeCFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiB0aGlzID4gcnVsZXMubHRlPyAndmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMubHRlXSkgOiAnJ0gAEpcHCgJndBgEIAEoA0KIB8JIhAcKegoIaW50NjQuZ3QabiFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDw9IHJ1bGVzLmd0PyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RdKSA6ICcnCrMBCgtpbnQ2NC5ndF9sdBqjAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKuwEKFWludDY0Lmd0X2x0X2V4Y2x1c2l2ZRqhAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndCAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCsMBCgxpbnQ2NC5ndF9sdGUasgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnCssBChZpbnQ2NC5ndF9sdGVfZXhjbHVzaXZlGrABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJydIARLjBwoDZ3RlGAUgASgDQtMHwkjPBwqIAQoJaW50NjQuZ3RlGnshaGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8IHJ1bGVzLmd0ZT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZV0pIDogJycKwgEKDGludDY0Lmd0ZV9sdBqxAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3RlICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrKAQoWaW50NjQuZ3RlX2x0X2V4Y2x1c2l2ZRqvAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycK0gEKDWludDY0Lmd0ZV9sdGUawAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3RlICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJycK2gEKF2ludDY0Lmd0ZV9sdGVfZXhjbHVzaXZlGr4BaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJ0gBEn8KAmluGAYgAygDQnPCSHAKbgoIaW50NjQuaW4aYiEodGhpcyBpbiBnZXRGaWVsZChydWxlcywgJ2luJykpID8gJ3ZhbHVlIG11c3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2luJyldKSA6ICcnEnYKBm5vdF9pbhgHIAMoA0JmwkhjCmEKDGludDY0Lm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEisKB2V4YW1wbGUYCSADKANCGsJIFwoVCg1pbnQ2NC5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCCwoJbGVzc190aGFuQg4KDGdyZWF0ZXJfdGhhbiKeFQoLVUludDMyUnVsZXMShAEKBWNvbnN0GAEgASgNQnXCSHIKcAoMdWludDMyLmNvbnN0GmB0aGlzICE9IGdldEZpZWxkKHJ1bGVzLCAnY29uc3QnKSA/ICd2YWx1ZSBtdXN0IGVxdWFsICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnY29uc3QnKV0pIDogJycSiwEKAmx0GAIgASgNQn3CSHoKeAoJdWludDMyLmx0GmshaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+PSBydWxlcy5sdD8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmx0XSkgOiAnJ0gAEp0BCgNsdGUYAyABKA1CjQHCSIkBCoYBCgp1aW50MzIubHRlGnghaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+IHJ1bGVzLmx0ZT8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmx0ZV0pIDogJydIABKcBwoCZ3QYBCABKA1CjQfCSIkHCnsKCXVpbnQzMi5ndBpuIWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPD0gcnVsZXMuZ3Q/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndF0pIDogJycKtAEKDHVpbnQzMi5ndF9sdBqjAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKvAEKFnVpbnQzMi5ndF9sdF9leGNsdXNpdmUaoQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrEAQoNdWludDMyLmd0X2x0ZRqyAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndCAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJycKzAEKF3VpbnQzMi5ndF9sdGVfZXhjbHVzaXZlGrABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJydIARLoBwoDZ3RlGAUgASgNQtgHwkjUBwqJAQoKdWludDMyLmd0ZRp7IWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPCBydWxlcy5ndGU/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGVdKSA6ICcnCsMBCg11aW50MzIuZ3RlX2x0GrEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCssBChd1aW50MzIuZ3RlX2x0X2V4Y2x1c2l2ZRqvAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycK0wEKDnVpbnQzMi5ndGVfbHRlGsABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnCtsBChh1aW50MzIuZ3RlX2x0ZV9leGNsdXNpdmUavgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnSAESgAEKAmluGAYgAygNQnTCSHEKbwoJdWludDMyLmluGmIhKHRoaXMgaW4gZ2V0RmllbGQocnVsZXMsICdpbicpKSA/ICd2YWx1ZSBtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdpbicpXSkgOiAnJxJ3CgZub3RfaW4YByADKA1CZ8JIZApiCg11aW50MzIubm90X2luGlF0aGlzIGluIHJ1bGVzLm5vdF9pbiA/ICd2YWx1ZSBtdXN0IG5vdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW3J1bGVzLm5vdF9pbl0pIDogJycSLAoHZXhhbXBsZRgIIAMoDUIbwkgYChYKDnVpbnQzMi5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCCwoJbGVzc190aGFuQg4KDGdyZWF0ZXJfdGhhbiKeFQoLVUludDY0UnVsZXMShAEKBWNvbnN0GAEgASgEQnXCSHIKcAoMdWludDY0LmNvbnN0GmB0aGlzICE9IGdldEZpZWxkKHJ1bGVzLCAnY29uc3QnKSA/ICd2YWx1ZSBtdXN0IGVxdWFsICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnY29uc3QnKV0pIDogJycSiwEKAmx0GAIgASgEQn3CSHoKeAoJdWludDY0Lmx0GmshaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+PSBydWxlcy5sdD8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmx0XSkgOiAnJ0gAEp0BCgNsdGUYAyABKARCjQHCSIkBCoYBCgp1aW50NjQubHRlGnghaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+IHJ1bGVzLmx0ZT8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmx0ZV0pIDogJydIABKcBwoCZ3QYBCABKARCjQfCSIkHCnsKCXVpbnQ2NC5ndBpuIWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPD0gcnVsZXMuZ3Q/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndF0pIDogJycKtAEKDHVpbnQ2NC5ndF9sdBqjAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKvAEKFnVpbnQ2NC5ndF9sdF9leGNsdXNpdmUaoQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrEAQoNdWludDY0Lmd0X2x0ZRqyAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndCAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJycKzAEKF3VpbnQ2NC5ndF9sdGVfZXhjbHVzaXZlGrABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJydIARLoBwoDZ3RlGAUgASgEQtgHwkjUBwqJAQoKdWludDY0Lmd0ZRp7IWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPCBydWxlcy5ndGU/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGVdKSA6ICcnCsMBCg11aW50NjQuZ3RlX2x0GrEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCssBChd1aW50NjQuZ3RlX2x0X2V4Y2x1c2l2ZRqvAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycK0wEKDnVpbnQ2NC5ndGVfbHRlGsABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnCtsBChh1aW50NjQuZ3RlX2x0ZV9leGNsdXNpdmUavgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnSAESgAEKAmluGAYgAygEQnTCSHEKbwoJdWludDY0LmluGmIhKHRoaXMgaW4gZ2V0RmllbGQocnVsZXMsICdpbicpKSA/ICd2YWx1ZSBtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdpbicpXSkgOiAnJxJ3CgZub3RfaW4YByADKARCZ8JIZApiCg11aW50NjQubm90X2luGlF0aGlzIGluIHJ1bGVzLm5vdF9pbiA/ICd2YWx1ZSBtdXN0IG5vdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW3J1bGVzLm5vdF9pbl0pIDogJycSLAoHZXhhbXBsZRgIIAMoBEIbwkgYChYKDnVpbnQ2NC5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCCwoJbGVzc190aGFuQg4KDGdyZWF0ZXJfdGhhbiKeFQoLU0ludDMyUnVsZXMShAEKBWNvbnN0GAEgASgRQnXCSHIKcAoMc2ludDMyLmNvbnN0GmB0aGlzICE9IGdldEZpZWxkKHJ1bGVzLCAnY29uc3QnKSA/ICd2YWx1ZSBtdXN0IGVxdWFsICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnY29uc3QnKV0pIDogJycSiwEKAmx0GAIgASgRQn3CSHoKeAoJc2ludDMyLmx0GmshaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+PSBydWxlcy5sdD8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmx0XSkgOiAnJ0gAEp0BCgNsdGUYAyABKBFCjQHCSIkBCoYBCgpzaW50MzIubHRlGnghaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+IHJ1bGVzLmx0ZT8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmx0ZV0pIDogJydIABKcBwoCZ3QYBCABKBFCjQfCSIkHCnsKCXNpbnQzMi5ndBpuIWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPD0gcnVsZXMuZ3Q/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndF0pIDogJycKtAEKDHNpbnQzMi5ndF9sdBqjAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKvAEKFnNpbnQzMi5ndF9sdF9leGNsdXNpdmUaoQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrEAQoNc2ludDMyLmd0X2x0ZRqyAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndCAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJycKzAEKF3NpbnQzMi5ndF9sdGVfZXhjbHVzaXZlGrABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJydIARLoBwoDZ3RlGAUgASgRQtgHwkjUBwqJAQoKc2ludDMyLmd0ZRp7IWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPCBydWxlcy5ndGU/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGVdKSA6ICcnCsMBCg1zaW50MzIuZ3RlX2x0GrEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCssBChdzaW50MzIuZ3RlX2x0X2V4Y2x1c2l2ZRqvAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycK0wEKDnNpbnQzMi5ndGVfbHRlGsABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnCtsBChhzaW50MzIuZ3RlX2x0ZV9leGNsdXNpdmUavgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnSAESgAEKAmluGAYgAygRQnTCSHEKbwoJc2ludDMyLmluGmIhKHRoaXMgaW4gZ2V0RmllbGQocnVsZXMsICdpbicpKSA/ICd2YWx1ZSBtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdpbicpXSkgOiAnJxJ3CgZub3RfaW4YByADKBFCZ8JIZApiCg1zaW50MzIubm90X2luGlF0aGlzIGluIHJ1bGVzLm5vdF9pbiA/ICd2YWx1ZSBtdXN0IG5vdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW3J1bGVzLm5vdF9pbl0pIDogJycSLAoHZXhhbXBsZRgIIAMoEUIbwkgYChYKDnNpbnQzMi5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCCwoJbGVzc190aGFuQg4KDGdyZWF0ZXJfdGhhbiKeFQoLU0ludDY0UnVsZXMShAEKBWNvbnN0GAEgASgSQnXCSHIKcAoMc2ludDY0LmNvbnN0GmB0aGlzICE9IGdldEZpZWxkKHJ1bGVzLCAnY29uc3QnKSA/ICd2YWx1ZSBtdXN0IGVxdWFsICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnY29uc3QnKV0pIDogJycSiwEKAmx0GAIgASgSQn3CSHoKeAoJc2ludDY0Lmx0GmshaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+PSBydWxlcy5sdD8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmx0XSkgOiAnJ0gAEp0BCgNsdGUYAyABKBJCjQHCSIkBCoYBCgpzaW50NjQubHRlGnghaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+IHJ1bGVzLmx0ZT8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmx0ZV0pIDogJydIABKcBwoCZ3QYBCABKBJCjQfCSIkHCnsKCXNpbnQ2NC5ndBpuIWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPD0gcnVsZXMuZ3Q/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndF0pIDogJycKtAEKDHNpbnQ2NC5ndF9sdBqjAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKvAEKFnNpbnQ2NC5ndF9sdF9leGNsdXNpdmUaoQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrEAQoNc2ludDY0Lmd0X2x0ZRqyAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndCAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJycKzAEKF3NpbnQ2NC5ndF9sdGVfZXhjbHVzaXZlGrABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJydIARLoBwoDZ3RlGAUgASgSQtgHwkjUBwqJAQoKc2ludDY0Lmd0ZRp7IWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPCBydWxlcy5ndGU/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGVdKSA6ICcnCsMBCg1zaW50NjQuZ3RlX2x0GrEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCssBChdzaW50NjQuZ3RlX2x0X2V4Y2x1c2l2ZRqvAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycK0wEKDnNpbnQ2NC5ndGVfbHRlGsABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnCtsBChhzaW50NjQuZ3RlX2x0ZV9leGNsdXNpdmUavgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnSAESgAEKAmluGAYgAygSQnTCSHEKbwoJc2ludDY0LmluGmIhKHRoaXMgaW4gZ2V0RmllbGQocnVsZXMsICdpbicpKSA/ICd2YWx1ZSBtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdpbicpXSkgOiAnJxJ3CgZub3RfaW4YByADKBJCZ8JIZApiCg1zaW50NjQubm90X2luGlF0aGlzIGluIHJ1bGVzLm5vdF9pbiA/ICd2YWx1ZSBtdXN0IG5vdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW3J1bGVzLm5vdF9pbl0pIDogJycSLAoHZXhhbXBsZRgIIAMoEkIbwkgYChYKDnNpbnQ2NC5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCCwoJbGVzc190aGFuQg4KDGdyZWF0ZXJfdGhhbiKvFQoMRml4ZWQzMlJ1bGVzEoUBCgVjb25zdBgBIAEoB0J2wkhzCnEKDWZpeGVkMzIuY29uc3QaYHRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ3ZhbHVlIG11c3QgZXF1YWwgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdjb25zdCcpXSkgOiAnJxKMAQoCbHQYAiABKAdCfsJIewp5CgpmaXhlZDMyLmx0GmshaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+PSBydWxlcy5sdD8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmx0XSkgOiAnJ0gAEp4BCgNsdGUYAyABKAdCjgHCSIoBCocBCgtmaXhlZDMyLmx0ZRp4IWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPiBydWxlcy5sdGU/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5sdGVdKSA6ICcnSAASoQcKAmd0GAQgASgHQpIHwkiOBwp8CgpmaXhlZDMyLmd0Gm4haGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8PSBydWxlcy5ndD8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0XSkgOiAnJwq1AQoNZml4ZWQzMi5ndF9sdBqjAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKvQEKF2ZpeGVkMzIuZ3RfbHRfZXhjbHVzaXZlGqEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKxQEKDmZpeGVkMzIuZ3RfbHRlGrIBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJwrNAQoYZml4ZWQzMi5ndF9sdGVfZXhjbHVzaXZlGrABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJydIARLtBwoDZ3RlGAUgASgHQt0HwkjZBwqKAQoLZml4ZWQzMi5ndGUaeyFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDwgcnVsZXMuZ3RlPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlXSkgOiAnJwrEAQoOZml4ZWQzMi5ndGVfbHQasQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycKzAEKGGZpeGVkMzIuZ3RlX2x0X2V4Y2x1c2l2ZRqvAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycK1AEKD2ZpeGVkMzIuZ3RlX2x0ZRrAAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJwrcAQoZZml4ZWQzMi5ndGVfbHRlX2V4Y2x1c2l2ZRq+AWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJydIARKBAQoCaW4YBiADKAdCdcJIcgpwCgpmaXhlZDMyLmluGmIhKHRoaXMgaW4gZ2V0RmllbGQocnVsZXMsICdpbicpKSA/ICd2YWx1ZSBtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdpbicpXSkgOiAnJxJ4CgZub3RfaW4YByADKAdCaMJIZQpjCg5maXhlZDMyLm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEi0KB2V4YW1wbGUYCCADKAdCHMJIGQoXCg9maXhlZDMyLmV4YW1wbGUaBHRydWUqCQjoBxCAgICAAkILCglsZXNzX3RoYW5CDgoMZ3JlYXRlcl90aGFuIq8VCgxGaXhlZDY0UnVsZXMShQEKBWNvbnN0GAEgASgGQnbCSHMKcQoNZml4ZWQ2NC5jb25zdBpgdGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAndmFsdWUgbXVzdCBlcXVhbCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2NvbnN0JyldKSA6ICcnEowBCgJsdBgCIAEoBkJ+wkh7CnkKCmZpeGVkNjQubHQaayFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiB0aGlzID49IHJ1bGVzLmx0PyAndmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMubHRdKSA6ICcnSAASngEKA2x0ZRgDIAEoBkKOAcJIigEKhwEKC2ZpeGVkNjQubHRlGnghaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+IHJ1bGVzLmx0ZT8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmx0ZV0pIDogJydIABKhBwoCZ3QYBCABKAZCkgfCSI4HCnwKCmZpeGVkNjQuZ3QabiFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDw9IHJ1bGVzLmd0PyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RdKSA6ICcnCrUBCg1maXhlZDY0Lmd0X2x0GqMBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndCAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwq9AQoXZml4ZWQ2NC5ndF9sdF9leGNsdXNpdmUaoQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrFAQoOZml4ZWQ2NC5ndF9sdGUasgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnCs0BChhmaXhlZDY0Lmd0X2x0ZV9leGNsdXNpdmUasAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndCAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJ0gBEu0HCgNndGUYBSABKAZC3QfCSNkHCooBCgtmaXhlZDY0Lmd0ZRp7IWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPCBydWxlcy5ndGU/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGVdKSA6ICcnCsQBCg5maXhlZDY0Lmd0ZV9sdBqxAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3RlICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrMAQoYZml4ZWQ2NC5ndGVfbHRfZXhjbHVzaXZlGq8BaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrUAQoPZml4ZWQ2NC5ndGVfbHRlGsABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnCtwBChlmaXhlZDY0Lmd0ZV9sdGVfZXhjbHVzaXZlGr4BaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJ0gBEoEBCgJpbhgGIAMoBkJ1wkhyCnAKCmZpeGVkNjQuaW4aYiEodGhpcyBpbiBnZXRGaWVsZChydWxlcywgJ2luJykpID8gJ3ZhbHVlIG11c3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2luJyldKSA6ICcnEngKBm5vdF9pbhgHIAMoBkJowkhlCmMKDmZpeGVkNjQubm90X2luGlF0aGlzIGluIHJ1bGVzLm5vdF9pbiA/ICd2YWx1ZSBtdXN0IG5vdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW3J1bGVzLm5vdF9pbl0pIDogJycSLQoHZXhhbXBsZRgIIAMoBkIcwkgZChcKD2ZpeGVkNjQuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4iwBUKDVNGaXhlZDMyUnVsZXMShgEKBWNvbnN0GAEgASgPQnfCSHQKcgoOc2ZpeGVkMzIuY29uc3QaYHRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ3ZhbHVlIG11c3QgZXF1YWwgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdjb25zdCcpXSkgOiAnJxKNAQoCbHQYAiABKA9Cf8JIfAp6CgtzZml4ZWQzMi5sdBprIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPj0gcnVsZXMubHQ/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5sdF0pIDogJydIABKfAQoDbHRlGAMgASgPQo8BwkiLAQqIAQoMc2ZpeGVkMzIubHRlGnghaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+IHJ1bGVzLmx0ZT8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmx0ZV0pIDogJydIABKmBwoCZ3QYBCABKA9ClwfCSJMHCn0KC3NmaXhlZDMyLmd0Gm4haGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8PSBydWxlcy5ndD8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0XSkgOiAnJwq2AQoOc2ZpeGVkMzIuZ3RfbHQaowFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCr4BChhzZml4ZWQzMi5ndF9sdF9leGNsdXNpdmUaoQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrGAQoPc2ZpeGVkMzIuZ3RfbHRlGrIBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJwrOAQoZc2ZpeGVkMzIuZ3RfbHRlX2V4Y2x1c2l2ZRqwAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnSAES8gcKA2d0ZRgFIAEoD0LiB8JI3gcKiwEKDHNmaXhlZDMyLmd0ZRp7IWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPCBydWxlcy5ndGU/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGVdKSA6ICcnCsUBCg9zZml4ZWQzMi5ndGVfbHQasQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycKzQEKGXNmaXhlZDMyLmd0ZV9sdF9leGNsdXNpdmUarwFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCtUBChBzZml4ZWQzMi5ndGVfbHRlGsABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnCt0BChpzZml4ZWQzMi5ndGVfbHRlX2V4Y2x1c2l2ZRq+AWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJydIARKCAQoCaW4YBiADKA9CdsJIcwpxCgtzZml4ZWQzMi5pbhpiISh0aGlzIGluIGdldEZpZWxkKHJ1bGVzLCAnaW4nKSkgPyAndmFsdWUgbXVzdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnaW4nKV0pIDogJycSeQoGbm90X2luGAcgAygPQmnCSGYKZAoPc2ZpeGVkMzIubm90X2luGlF0aGlzIGluIHJ1bGVzLm5vdF9pbiA/ICd2YWx1ZSBtdXN0IG5vdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW3J1bGVzLm5vdF9pbl0pIDogJycSLgoHZXhhbXBsZRgIIAMoD0IdwkgaChgKEHNmaXhlZDMyLmV4YW1wbGUaBHRydWUqCQjoBxCAgICAAkILCglsZXNzX3RoYW5CDgoMZ3JlYXRlcl90aGFuIsAVCg1TRml4ZWQ2NFJ1bGVzEoYBCgVjb25zdBgBIAEoEEJ3wkh0CnIKDnNmaXhlZDY0LmNvbnN0GmB0aGlzICE9IGdldEZpZWxkKHJ1bGVzLCAnY29uc3QnKSA/ICd2YWx1ZSBtdXN0IGVxdWFsICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnY29uc3QnKV0pIDogJycSjQEKAmx0GAIgASgQQn/CSHwKegoLc2ZpeGVkNjQubHQaayFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiB0aGlzID49IHJ1bGVzLmx0PyAndmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMubHRdKSA6ICcnSAASnwEKA2x0ZRgDIAEoEEKPAcJIiwEKiAEKDHNmaXhlZDY0Lmx0ZRp4IWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPiBydWxlcy5sdGU/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5sdGVdKSA6ICcnSAASpgcKAmd0GAQgASgQQpcHwkiTBwp9CgtzZml4ZWQ2NC5ndBpuIWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPD0gcnVsZXMuZ3Q/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndF0pIDogJycKtgEKDnNmaXhlZDY0Lmd0X2x0GqMBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndCAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwq+AQoYc2ZpeGVkNjQuZ3RfbHRfZXhjbHVzaXZlGqEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKxgEKD3NmaXhlZDY0Lmd0X2x0ZRqyAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndCAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJycKzgEKGXNmaXhlZDY0Lmd0X2x0ZV9leGNsdXNpdmUasAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndCAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJ0gBEvIHCgNndGUYBSABKBBC4gfCSN4HCosBCgxzZml4ZWQ2NC5ndGUaeyFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDwgcnVsZXMuZ3RlPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlXSkgOiAnJwrFAQoPc2ZpeGVkNjQuZ3RlX2x0GrEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCs0BChlzZml4ZWQ2NC5ndGVfbHRfZXhjbHVzaXZlGq8BaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrVAQoQc2ZpeGVkNjQuZ3RlX2x0ZRrAAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJwrdAQoac2ZpeGVkNjQuZ3RlX2x0ZV9leGNsdXNpdmUavgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnSAESggEKAmluGAYgAygQQnbCSHMKcQoLc2ZpeGVkNjQuaW4aYiEodGhpcyBpbiBnZXRGaWVsZChydWxlcywgJ2luJykpID8gJ3ZhbHVlIG11c3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2luJyldKSA6ICcnEnkKBm5vdF9pbhgHIAMoEEJpwkhmCmQKD3NmaXhlZDY0Lm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEi4KB2V4YW1wbGUYCCADKBBCHcJIGgoYChBzZml4ZWQ2NC5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCCwoJbGVzc190aGFuQg4KDGdyZWF0ZXJfdGhhbiLHAQoJQm9vbFJ1bGVzEoIBCgVjb25zdBgBIAEoCEJzwkhwCm4KCmJvb2wuY29uc3QaYHRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ3ZhbHVlIG11c3QgZXF1YWwgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdjb25zdCcpXSkgOiAnJxIqCgdleGFtcGxlGAIgAygIQhnCSBYKFAoMYm9vbC5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAIiiDkKC1N0cmluZ1J1bGVzEoYBCgVjb25zdBgBIAEoCUJ3wkh0CnIKDHN0cmluZy5jb25zdBpidGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAndmFsdWUgbXVzdCBlcXVhbCBgJXNgJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnY29uc3QnKV0pIDogJycSfgoDbGVuGBMgASgEQnHCSG4KbAoKc3RyaW5nLmxlbhpedWludCh0aGlzLnNpemUoKSkgIT0gcnVsZXMubGVuID8gJ3ZhbHVlIGxlbmd0aCBtdXN0IGJlICVzIGNoYXJhY3RlcnMnLmZvcm1hdChbcnVsZXMubGVuXSkgOiAnJxKZAQoHbWluX2xlbhgCIAEoBEKHAcJIgwEKgAEKDnN0cmluZy5taW5fbGVuGm51aW50KHRoaXMuc2l6ZSgpKSA8IHJ1bGVzLm1pbl9sZW4gPyAndmFsdWUgbGVuZ3RoIG11c3QgYmUgYXQgbGVhc3QgJXMgY2hhcmFjdGVycycuZm9ybWF0KFtydWxlcy5taW5fbGVuXSkgOiAnJxKXAQoHbWF4X2xlbhgDIAEoBEKFAcJIgQEKfwoOc3RyaW5nLm1heF9sZW4abXVpbnQodGhpcy5zaXplKCkpID4gcnVsZXMubWF4X2xlbiA/ICd2YWx1ZSBsZW5ndGggbXVzdCBiZSBhdCBtb3N0ICVzIGNoYXJhY3RlcnMnLmZvcm1hdChbcnVsZXMubWF4X2xlbl0pIDogJycSmwEKCWxlbl9ieXRlcxgUIAEoBEKHAcJIgwEKgAEKEHN0cmluZy5sZW5fYnl0ZXMabHVpbnQoYnl0ZXModGhpcykuc2l6ZSgpKSAhPSBydWxlcy5sZW5fYnl0ZXMgPyAndmFsdWUgbGVuZ3RoIG11c3QgYmUgJXMgYnl0ZXMnLmZvcm1hdChbcnVsZXMubGVuX2J5dGVzXSkgOiAnJxKjAQoJbWluX2J5dGVzGAQgASgEQo8BwkiLAQqIAQoQc3RyaW5nLm1pbl9ieXRlcxp0dWludChieXRlcyh0aGlzKS5zaXplKCkpIDwgcnVsZXMubWluX2J5dGVzID8gJ3ZhbHVlIGxlbmd0aCBtdXN0IGJlIGF0IGxlYXN0ICVzIGJ5dGVzJy5mb3JtYXQoW3J1bGVzLm1pbl9ieXRlc10pIDogJycSogEKCW1heF9ieXRlcxgFIAEoBEKOAcJIigEKhwEKEHN0cmluZy5tYXhfYnl0ZXMac3VpbnQoYnl0ZXModGhpcykuc2l6ZSgpKSA+IHJ1bGVzLm1heF9ieXRlcyA/ICd2YWx1ZSBsZW5ndGggbXVzdCBiZSBhdCBtb3N0ICVzIGJ5dGVzJy5mb3JtYXQoW3J1bGVzLm1heF9ieXRlc10pIDogJycSjQEKB3BhdHRlcm4YBiABKAlCfMJIeQp3Cg5zdHJpbmcucGF0dGVybhplIXRoaXMubWF0Y2hlcyhydWxlcy5wYXR0ZXJuKSA/ICd2YWx1ZSBkb2VzIG5vdCBtYXRjaCByZWdleCBwYXR0ZXJuIGAlc2AnLmZvcm1hdChbcnVsZXMucGF0dGVybl0pIDogJycShAEKBnByZWZpeBgHIAEoCUJ0wkhxCm8KDXN0cmluZy5wcmVmaXgaXiF0aGlzLnN0YXJ0c1dpdGgocnVsZXMucHJlZml4KSA/ICd2YWx1ZSBkb2VzIG5vdCBoYXZlIHByZWZpeCBgJXNgJy5mb3JtYXQoW3J1bGVzLnByZWZpeF0pIDogJycSggEKBnN1ZmZpeBgIIAEoCUJywkhvCm0KDXN0cmluZy5zdWZmaXgaXCF0aGlzLmVuZHNXaXRoKHJ1bGVzLnN1ZmZpeCkgPyAndmFsdWUgZG9lcyBub3QgaGF2ZSBzdWZmaXggYCVzYCcuZm9ybWF0KFtydWxlcy5zdWZmaXhdKSA6ICcnEpABCghjb250YWlucxgJIAEoCUJ+wkh7CnkKD3N0cmluZy5jb250YWlucxpmIXRoaXMuY29udGFpbnMocnVsZXMuY29udGFpbnMpID8gJ3ZhbHVlIGRvZXMgbm90IGNvbnRhaW4gc3Vic3RyaW5nIGAlc2AnLmZvcm1hdChbcnVsZXMuY29udGFpbnNdKSA6ICcnEpgBCgxub3RfY29udGFpbnMYFyABKAlCgQHCSH4KfAoTc3RyaW5nLm5vdF9jb250YWlucxpldGhpcy5jb250YWlucyhydWxlcy5ub3RfY29udGFpbnMpID8gJ3ZhbHVlIGNvbnRhaW5zIHN1YnN0cmluZyBgJXNgJy5mb3JtYXQoW3J1bGVzLm5vdF9jb250YWluc10pIDogJycSgAEKAmluGAogAygJQnTCSHEKbwoJc3RyaW5nLmluGmIhKHRoaXMgaW4gZ2V0RmllbGQocnVsZXMsICdpbicpKSA/ICd2YWx1ZSBtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdpbicpXSkgOiAnJxJ3CgZub3RfaW4YCyADKAlCZ8JIZApiCg1zdHJpbmcubm90X2luGlF0aGlzIGluIHJ1bGVzLm5vdF9pbiA/ICd2YWx1ZSBtdXN0IG5vdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW3J1bGVzLm5vdF9pbl0pIDogJycS3wEKBWVtYWlsGAwgASgIQs0BwkjJAQphCgxzdHJpbmcuZW1haWwSI3ZhbHVlIG11c3QgYmUgYSB2YWxpZCBlbWFpbCBhZGRyZXNzGiwhcnVsZXMuZW1haWwgfHwgdGhpcyA9PSAnJyB8fCB0aGlzLmlzRW1haWwoKQpkChJzdHJpbmcuZW1haWxfZW1wdHkSMnZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBlbWFpbCBhZGRyZXNzGhohcnVsZXMuZW1haWwgfHwgdGhpcyAhPSAnJ0gAEucBCghob3N0bmFtZRgNIAEoCELSAcJIzgEKZQoPc3RyaW5nLmhvc3RuYW1lEh52YWx1ZSBtdXN0IGJlIGEgdmFsaWQgaG9zdG5hbWUaMiFydWxlcy5ob3N0bmFtZSB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNIb3N0bmFtZSgpCmUKFXN0cmluZy5ob3N0bmFtZV9lbXB0eRItdmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIGhvc3RuYW1lGh0hcnVsZXMuaG9zdG5hbWUgfHwgdGhpcyAhPSAnJ0gAEscBCgJpcBgOIAEoCEK4AcJItAEKVQoJc3RyaW5nLmlwEiB2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgSVAgYWRkcmVzcxomIXJ1bGVzLmlwIHx8IHRoaXMgPT0gJycgfHwgdGhpcy5pc0lwKCkKWwoPc3RyaW5nLmlwX2VtcHR5Ei92YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgSVAgYWRkcmVzcxoXIXJ1bGVzLmlwIHx8IHRoaXMgIT0gJydIABLWAQoEaXB2NBgPIAEoCELFAcJIwQEKXAoLc3RyaW5nLmlwdjQSInZhbHVlIG11c3QgYmUgYSB2YWxpZCBJUHY0IGFkZHJlc3MaKSFydWxlcy5pcHY0IHx8IHRoaXMgPT0gJycgfHwgdGhpcy5pc0lwKDQpCmEKEXN0cmluZy5pcHY0X2VtcHR5EjF2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgSVB2NCBhZGRyZXNzGhkhcnVsZXMuaXB2NCB8fCB0aGlzICE9ICcnSAAS1gEKBGlwdjYYECABKAhCxQHCSMEBClwKC3N0cmluZy5pcHY2EiJ2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgSVB2NiBhZGRyZXNzGikhcnVsZXMuaXB2NiB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNJcCg2KQphChFzdHJpbmcuaXB2Nl9lbXB0eRIxdmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIElQdjYgYWRkcmVzcxoZIXJ1bGVzLmlwdjYgfHwgdGhpcyAhPSAnJ0gAEr8BCgN1cmkYESABKAhCrwHCSKsBClEKCnN0cmluZy51cmkSGXZhbHVlIG11c3QgYmUgYSB2YWxpZCBVUkkaKCFydWxlcy51cmkgfHwgdGhpcyA9PSAnJyB8fCB0aGlzLmlzVXJpKCkKVgoQc3RyaW5nLnVyaV9lbXB0eRIodmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIFVSSRoYIXJ1bGVzLnVyaSB8fCB0aGlzICE9ICcnSAAScAoHdXJpX3JlZhgSIAEoCEJdwkhaClgKDnN0cmluZy51cmlfcmVmEiN2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgVVJJIFJlZmVyZW5jZRohIXJ1bGVzLnVyaV9yZWYgfHwgdGhpcy5pc1VyaVJlZigpSAASkAIKB2FkZHJlc3MYFSABKAhC/AHCSPgBCoEBCg5zdHJpbmcuYWRkcmVzcxItdmFsdWUgbXVzdCBiZSBhIHZhbGlkIGhvc3RuYW1lLCBvciBpcCBhZGRyZXNzGkAhcnVsZXMuYWRkcmVzcyB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNIb3N0bmFtZSgpIHx8IHRoaXMuaXNJcCgpCnIKFHN0cmluZy5hZGRyZXNzX2VtcHR5Ejx2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgaG9zdG5hbWUsIG9yIGlwIGFkZHJlc3MaHCFydWxlcy5hZGRyZXNzIHx8IHRoaXMgIT0gJydIABKYAgoEdXVpZBgWIAEoCEKHAsJIgwIKpQEKC3N0cmluZy51dWlkEhp2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgVVVJRBp6IXJ1bGVzLnV1aWQgfHwgdGhpcyA9PSAnJyB8fCB0aGlzLm1hdGNoZXMoJ15bMC05YS1mQS1GXXs4fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXsxMn0kJykKWQoRc3RyaW5nLnV1aWRfZW1wdHkSKXZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBVVUlEGhkhcnVsZXMudXVpZCB8fCB0aGlzICE9ICcnSAAS8AEKBXR1dWlkGCEgASgIQt4BwkjaAQpzCgxzdHJpbmcudHV1aWQSInZhbHVlIG11c3QgYmUgYSB2YWxpZCB0cmltbWVkIFVVSUQaPyFydWxlcy50dXVpZCB8fCB0aGlzID09ICcnIHx8IHRoaXMubWF0Y2hlcygnXlswLTlhLWZBLUZdezMyfSQnKQpjChJzdHJpbmcudHV1aWRfZW1wdHkSMXZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCB0cmltbWVkIFVVSUQaGiFydWxlcy50dXVpZCB8fCB0aGlzICE9ICcnSAASlgIKEWlwX3dpdGhfcHJlZml4bGVuGBogASgIQvgBwkj0AQp4ChhzdHJpbmcuaXBfd2l0aF9wcmVmaXhsZW4SH3ZhbHVlIG11c3QgYmUgYSB2YWxpZCBJUCBwcmVmaXgaOyFydWxlcy5pcF93aXRoX3ByZWZpeGxlbiB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNJcFByZWZpeCgpCngKHnN0cmluZy5pcF93aXRoX3ByZWZpeGxlbl9lbXB0eRIudmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIElQIHByZWZpeBomIXJ1bGVzLmlwX3dpdGhfcHJlZml4bGVuIHx8IHRoaXMgIT0gJydIABLPAgoTaXB2NF93aXRoX3ByZWZpeGxlbhgbIAEoCEKvAsJIqwIKkwEKGnN0cmluZy5pcHY0X3dpdGhfcHJlZml4bGVuEjV2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgSVB2NCBhZGRyZXNzIHdpdGggcHJlZml4IGxlbmd0aBo+IXJ1bGVzLmlwdjRfd2l0aF9wcmVmaXhsZW4gfHwgdGhpcyA9PSAnJyB8fCB0aGlzLmlzSXBQcmVmaXgoNCkKkgEKIHN0cmluZy5pcHY0X3dpdGhfcHJlZml4bGVuX2VtcHR5EkR2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgSVB2NCBhZGRyZXNzIHdpdGggcHJlZml4IGxlbmd0aBooIXJ1bGVzLmlwdjRfd2l0aF9wcmVmaXhsZW4gfHwgdGhpcyAhPSAnJ0gAEs8CChNpcHY2X3dpdGhfcHJlZml4bGVuGBwgASgIQq8CwkirAgqTAQoac3RyaW5nLmlwdjZfd2l0aF9wcmVmaXhsZW4SNXZhbHVlIG11c3QgYmUgYSB2YWxpZCBJUHY2IGFkZHJlc3Mgd2l0aCBwcmVmaXggbGVuZ3RoGj4hcnVsZXMuaXB2Nl93aXRoX3ByZWZpeGxlbiB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNJcFByZWZpeCg2KQqSAQogc3RyaW5nLmlwdjZfd2l0aF9wcmVmaXhsZW5fZW1wdHkSRHZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBJUHY2IGFkZHJlc3Mgd2l0aCBwcmVmaXggbGVuZ3RoGighcnVsZXMuaXB2Nl93aXRoX3ByZWZpeGxlbiB8fCB0aGlzICE9ICcnSAAS8gEKCWlwX3ByZWZpeBgdIAEoCELcAcJI2AEKbAoQc3RyaW5nLmlwX3ByZWZpeBIfdmFsdWUgbXVzdCBiZSBhIHZhbGlkIElQIHByZWZpeBo3IXJ1bGVzLmlwX3ByZWZpeCB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNJcFByZWZpeCh0cnVlKQpoChZzdHJpbmcuaXBfcHJlZml4X2VtcHR5Ei52YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgSVAgcHJlZml4Gh4hcnVsZXMuaXBfcHJlZml4IHx8IHRoaXMgIT0gJydIABKDAgoLaXB2NF9wcmVmaXgYHiABKAhC6wHCSOcBCnUKEnN0cmluZy5pcHY0X3ByZWZpeBIhdmFsdWUgbXVzdCBiZSBhIHZhbGlkIElQdjQgcHJlZml4GjwhcnVsZXMuaXB2NF9wcmVmaXggfHwgdGhpcyA9PSAnJyB8fCB0aGlzLmlzSXBQcmVmaXgoNCwgdHJ1ZSkKbgoYc3RyaW5nLmlwdjRfcHJlZml4X2VtcHR5EjB2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgSVB2NCBwcmVmaXgaICFydWxlcy5pcHY0X3ByZWZpeCB8fCB0aGlzICE9ICcnSAASgwIKC2lwdjZfcHJlZml4GB8gASgIQusBwkjnAQp1ChJzdHJpbmcuaXB2Nl9wcmVmaXgSIXZhbHVlIG11c3QgYmUgYSB2YWxpZCBJUHY2IHByZWZpeBo8IXJ1bGVzLmlwdjZfcHJlZml4IHx8IHRoaXMgPT0gJycgfHwgdGhpcy5pc0lwUHJlZml4KDYsIHRydWUpCm4KGHN0cmluZy5pcHY2X3ByZWZpeF9lbXB0eRIwdmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIElQdjYgcHJlZml4GiAhcnVsZXMuaXB2Nl9wcmVmaXggfHwgdGhpcyAhPSAnJ0gAErUCCg1ob3N0X2FuZF9wb3J0GCAgASgIQpsCwkiXAgqZAQoUc3RyaW5nLmhvc3RfYW5kX3BvcnQSQXZhbHVlIG11c3QgYmUgYSB2YWxpZCBob3N0IChob3N0bmFtZSBvciBJUCBhZGRyZXNzKSBhbmQgcG9ydCBwYWlyGj4hcnVsZXMuaG9zdF9hbmRfcG9ydCB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNIb3N0QW5kUG9ydCh0cnVlKQp5ChpzdHJpbmcuaG9zdF9hbmRfcG9ydF9lbXB0eRI3dmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIGhvc3QgYW5kIHBvcnQgcGFpchoiIXJ1bGVzLmhvc3RfYW5kX3BvcnQgfHwgdGhpcyAhPSAnJ0gAEvUBCgR1bGlkGCMgASgIQuQBwkjgAQqCAQoLc3RyaW5nLnVsaWQSGnZhbHVlIG11c3QgYmUgYSB2YWxpZCBVTElEGlchcnVsZXMudWxpZCB8fCB0aGlzID09ICcnIHx8IHRoaXMubWF0Y2hlcygnXlswLTddWzAtOUEtSEpLTU5QLVRWLVphLWhqa21ucC10di16XXsyNX0kJykKWQoRc3RyaW5nLnVsaWRfZW1wdHkSKXZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBVTElEGhkhcnVsZXMudWxpZCB8fCB0aGlzICE9ICcnSAASqAUKEHdlbGxfa25vd25fcmVnZXgYGCABKA4yGC5idWYudmFsaWRhdGUuS25vd25SZWdleELxBMJI7QQK8AEKI3N0cmluZy53ZWxsX2tub3duX3JlZ2V4LmhlYWRlcl9uYW1lEiZ2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgSFRUUCBoZWFkZXIgbmFtZRqgAXJ1bGVzLndlbGxfa25vd25fcmVnZXggIT0gMSB8fCB0aGlzID09ICcnIHx8IHRoaXMubWF0Y2hlcyghaGFzKHJ1bGVzLnN0cmljdCkgfHwgcnVsZXMuc3RyaWN0ID8nXjo/WzAtOWEtekEtWiEjJCUmXCcqKy0uXl98flx4NjBdKyQnIDonXlteXHUwMDAwXHUwMDBBXHUwMDBEXSskJykKjQEKKXN0cmluZy53ZWxsX2tub3duX3JlZ2V4LmhlYWRlcl9uYW1lX2VtcHR5EjV2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgSFRUUCBoZWFkZXIgbmFtZRopcnVsZXMud2VsbF9rbm93bl9yZWdleCAhPSAxIHx8IHRoaXMgIT0gJycK5wEKJHN0cmluZy53ZWxsX2tub3duX3JlZ2V4LmhlYWRlcl92YWx1ZRIndmFsdWUgbXVzdCBiZSBhIHZhbGlkIEhUVFAgaGVhZGVyIHZhbHVlGpUBcnVsZXMud2VsbF9rbm93bl9yZWdleCAhPSAyIHx8IHRoaXMubWF0Y2hlcyghaGFzKHJ1bGVzLnN0cmljdCkgfHwgcnVsZXMuc3RyaWN0ID8nXlteXHUwMDAwLVx1MDAwOFx1MDAwQS1cdTAwMUZcdTAwN0ZdKiQnIDonXlteXHUwMDAwXHUwMDBBXHUwMDBEXSokJylIABIOCgZzdHJpY3QYGSABKAgSLAoHZXhhbXBsZRgiIAMoCUIbwkgYChYKDnN0cmluZy5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCDAoKd2VsbF9rbm93biLCEgoKQnl0ZXNSdWxlcxKAAQoFY29uc3QYASABKAxCccJIbgpsCgtieXRlcy5jb25zdBpddGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAndmFsdWUgbXVzdCBiZSAleCcuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2NvbnN0JyldKSA6ICcnEngKA2xlbhgNIAEoBEJrwkhoCmYKCWJ5dGVzLmxlbhpZdWludCh0aGlzLnNpemUoKSkgIT0gcnVsZXMubGVuID8gJ3ZhbHVlIGxlbmd0aCBtdXN0IGJlICVzIGJ5dGVzJy5mb3JtYXQoW3J1bGVzLmxlbl0pIDogJycSkAEKB21pbl9sZW4YAiABKARCf8JIfAp6Cg1ieXRlcy5taW5fbGVuGml1aW50KHRoaXMuc2l6ZSgpKSA8IHJ1bGVzLm1pbl9sZW4gPyAndmFsdWUgbGVuZ3RoIG11c3QgYmUgYXQgbGVhc3QgJXMgYnl0ZXMnLmZvcm1hdChbcnVsZXMubWluX2xlbl0pIDogJycSiAEKB21heF9sZW4YAyABKARCd8JIdApyCg1ieXRlcy5tYXhfbGVuGmF1aW50KHRoaXMuc2l6ZSgpKSA+IHJ1bGVzLm1heF9sZW4gPyAndmFsdWUgbXVzdCBiZSBhdCBtb3N0ICVzIGJ5dGVzJy5mb3JtYXQoW3J1bGVzLm1heF9sZW5dKSA6ICcnEpABCgdwYXR0ZXJuGAQgASgJQn/CSHwKegoNYnl0ZXMucGF0dGVybhppIXN0cmluZyh0aGlzKS5tYXRjaGVzKHJ1bGVzLnBhdHRlcm4pID8gJ3ZhbHVlIG11c3QgbWF0Y2ggcmVnZXggcGF0dGVybiBgJXNgJy5mb3JtYXQoW3J1bGVzLnBhdHRlcm5dKSA6ICcnEoEBCgZwcmVmaXgYBSABKAxCccJIbgpsCgxieXRlcy5wcmVmaXgaXCF0aGlzLnN0YXJ0c1dpdGgocnVsZXMucHJlZml4KSA/ICd2YWx1ZSBkb2VzIG5vdCBoYXZlIHByZWZpeCAleCcuZm9ybWF0KFtydWxlcy5wcmVmaXhdKSA6ICcnEn8KBnN1ZmZpeBgGIAEoDEJvwkhsCmoKDGJ5dGVzLnN1ZmZpeBpaIXRoaXMuZW5kc1dpdGgocnVsZXMuc3VmZml4KSA/ICd2YWx1ZSBkb2VzIG5vdCBoYXZlIHN1ZmZpeCAleCcuZm9ybWF0KFtydWxlcy5zdWZmaXhdKSA6ICcnEoMBCghjb250YWlucxgHIAEoDEJxwkhuCmwKDmJ5dGVzLmNvbnRhaW5zGlohdGhpcy5jb250YWlucyhydWxlcy5jb250YWlucykgPyAndmFsdWUgZG9lcyBub3QgY29udGFpbiAleCcuZm9ybWF0KFtydWxlcy5jb250YWluc10pIDogJycSpwEKAmluGAggAygMQpoBwkiWAQqTAQoIYnl0ZXMuaW4ahgFnZXRGaWVsZChydWxlcywgJ2luJykuc2l6ZSgpID4gMCAmJiAhKHRoaXMgaW4gZ2V0RmllbGQocnVsZXMsICdpbicpKSA/ICd2YWx1ZSBtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdpbicpXSkgOiAnJxJ2CgZub3RfaW4YCSADKAxCZsJIYwphCgxieXRlcy5ub3RfaW4aUXRoaXMgaW4gcnVsZXMubm90X2luID8gJ3ZhbHVlIG11c3Qgbm90IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbcnVsZXMubm90X2luXSkgOiAnJxLrAQoCaXAYCiABKAhC3AHCSNgBCnQKCGJ5dGVzLmlwEiB2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgSVAgYWRkcmVzcxpGIXJ1bGVzLmlwIHx8IHRoaXMuc2l6ZSgpID09IDAgfHwgdGhpcy5zaXplKCkgPT0gNCB8fCB0aGlzLnNpemUoKSA9PSAxNgpgCg5ieXRlcy5pcF9lbXB0eRIvdmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIElQIGFkZHJlc3MaHSFydWxlcy5pcCB8fCB0aGlzLnNpemUoKSAhPSAwSAAS5AEKBGlwdjQYCyABKAhC0wHCSM8BCmUKCmJ5dGVzLmlwdjQSInZhbHVlIG11c3QgYmUgYSB2YWxpZCBJUHY0IGFkZHJlc3MaMyFydWxlcy5pcHY0IHx8IHRoaXMuc2l6ZSgpID09IDAgfHwgdGhpcy5zaXplKCkgPT0gNApmChBieXRlcy5pcHY0X2VtcHR5EjF2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgSVB2NCBhZGRyZXNzGh8hcnVsZXMuaXB2NCB8fCB0aGlzLnNpemUoKSAhPSAwSAAS5QEKBGlwdjYYDCABKAhC1AHCSNABCmYKCmJ5dGVzLmlwdjYSInZhbHVlIG11c3QgYmUgYSB2YWxpZCBJUHY2IGFkZHJlc3MaNCFydWxlcy5pcHY2IHx8IHRoaXMuc2l6ZSgpID09IDAgfHwgdGhpcy5zaXplKCkgPT0gMTYKZgoQYnl0ZXMuaXB2Nl9lbXB0eRIxdmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIElQdjYgYWRkcmVzcxofIXJ1bGVzLmlwdjYgfHwgdGhpcy5zaXplKCkgIT0gMEgAEtUBCgR1dWlkGA8gASgIQsQBwkjAAQpeCgpieXRlcy51dWlkEhp2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgVVVJRBo0IXJ1bGVzLnV1aWQgfHwgdGhpcy5zaXplKCkgPT0gMCB8fCB0aGlzLnNpemUoKSA9PSAxNgpeChBieXRlcy51dWlkX2VtcHR5Eil2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgVVVJRBofIXJ1bGVzLnV1aWQgfHwgdGhpcy5zaXplKCkgIT0gMEgAEisKB2V4YW1wbGUYDiADKAxCGsJIFwoVCg1ieXRlcy5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCDAoKd2VsbF9rbm93biLUAwoJRW51bVJ1bGVzEoIBCgVjb25zdBgBIAEoBUJzwkhwCm4KCmVudW0uY29uc3QaYHRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ3ZhbHVlIG11c3QgZXF1YWwgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdjb25zdCcpXSkgOiAnJxIUCgxkZWZpbmVkX29ubHkYAiABKAgSfgoCaW4YAyADKAVCcsJIbwptCgdlbnVtLmluGmIhKHRoaXMgaW4gZ2V0RmllbGQocnVsZXMsICdpbicpKSA/ICd2YWx1ZSBtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdpbicpXSkgOiAnJxJ1CgZub3RfaW4YBCADKAVCZcJIYgpgCgtlbnVtLm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEioKB2V4YW1wbGUYBSADKAVCGcJIFgoUCgxlbnVtLmV4YW1wbGUaBHRydWUqCQjoBxCAgICAAiL7AwoNUmVwZWF0ZWRSdWxlcxKeAQoJbWluX2l0ZW1zGAEgASgEQooBwkiGAQqDAQoScmVwZWF0ZWQubWluX2l0ZW1zGm11aW50KHRoaXMuc2l6ZSgpKSA8IHJ1bGVzLm1pbl9pdGVtcyA/ICd2YWx1ZSBtdXN0IGNvbnRhaW4gYXQgbGVhc3QgJWQgaXRlbShzKScuZm9ybWF0KFtydWxlcy5taW5faXRlbXNdKSA6ICcnEqIBCgltYXhfaXRlbXMYAiABKARCjgHCSIoBCocBChJyZXBlYXRlZC5tYXhfaXRlbXMacXVpbnQodGhpcy5zaXplKCkpID4gcnVsZXMubWF4X2l0ZW1zID8gJ3ZhbHVlIG11c3QgY29udGFpbiBubyBtb3JlIHRoYW4gJXMgaXRlbShzKScuZm9ybWF0KFtydWxlcy5tYXhfaXRlbXNdKSA6ICcnEnAKBnVuaXF1ZRgDIAEoCEJgwkhdClsKD3JlcGVhdGVkLnVuaXF1ZRIocmVwZWF0ZWQgdmFsdWUgbXVzdCBjb250YWluIHVuaXF1ZSBpdGVtcxoeIXJ1bGVzLnVuaXF1ZSB8fCB0aGlzLnVuaXF1ZSgpEicKBWl0ZW1zGAQgASgLMhguYnVmLnZhbGlkYXRlLkZpZWxkUnVsZXMqCQjoBxCAgICAAiKKAwoITWFwUnVsZXMSjwEKCW1pbl9wYWlycxgBIAEoBEJ8wkh5CncKDW1hcC5taW5fcGFpcnMaZnVpbnQodGhpcy5zaXplKCkpIDwgcnVsZXMubWluX3BhaXJzID8gJ21hcCBtdXN0IGJlIGF0IGxlYXN0ICVkIGVudHJpZXMnLmZvcm1hdChbcnVsZXMubWluX3BhaXJzXSkgOiAnJxKOAQoJbWF4X3BhaXJzGAIgASgEQnvCSHgKdgoNbWFwLm1heF9wYWlycxpldWludCh0aGlzLnNpemUoKSkgPiBydWxlcy5tYXhfcGFpcnMgPyAnbWFwIG11c3QgYmUgYXQgbW9zdCAlZCBlbnRyaWVzJy5mb3JtYXQoW3J1bGVzLm1heF9wYWlyc10pIDogJycSJgoEa2V5cxgEIAEoCzIYLmJ1Zi52YWxpZGF0ZS5GaWVsZFJ1bGVzEigKBnZhbHVlcxgFIAEoCzIYLmJ1Zi52YWxpZGF0ZS5GaWVsZFJ1bGVzKgkI6AcQgICAgAIiJgoIQW55UnVsZXMSCgoCaW4YAiADKAkSDgoGbm90X2luGAMgAygJIpkXCg1EdXJhdGlvblJ1bGVzEqEBCgVjb25zdBgCIAEoCzIZLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbkJ3wkh0CnIKDmR1cmF0aW9uLmNvbnN0GmB0aGlzICE9IGdldEZpZWxkKHJ1bGVzLCAnY29uc3QnKSA/ICd2YWx1ZSBtdXN0IGVxdWFsICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnY29uc3QnKV0pIDogJycSqAEKAmx0GAMgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uQn/CSHwKegoLZHVyYXRpb24ubHQaayFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiB0aGlzID49IHJ1bGVzLmx0PyAndmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMubHRdKSA6ICcnSAASugEKA2x0ZRgEIAEoCzIZLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbkKPAcJIiwEKiAEKDGR1cmF0aW9uLmx0ZRp4IWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPiBydWxlcy5sdGU/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5sdGVdKSA6ICcnSAASwQcKAmd0GAUgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uQpcHwkiTBwp9CgtkdXJhdGlvbi5ndBpuIWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPD0gcnVsZXMuZ3Q/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndF0pIDogJycKtgEKDmR1cmF0aW9uLmd0X2x0GqMBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndCAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwq+AQoYZHVyYXRpb24uZ3RfbHRfZXhjbHVzaXZlGqEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKxgEKD2R1cmF0aW9uLmd0X2x0ZRqyAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndCAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJycKzgEKGWR1cmF0aW9uLmd0X2x0ZV9leGNsdXNpdmUasAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndCAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJ0gBEo0ICgNndGUYBiABKAsyGS5nb29nbGUucHJvdG9idWYuRHVyYXRpb25C4gfCSN4HCosBCgxkdXJhdGlvbi5ndGUaeyFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDwgcnVsZXMuZ3RlPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlXSkgOiAnJwrFAQoPZHVyYXRpb24uZ3RlX2x0GrEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCs0BChlkdXJhdGlvbi5ndGVfbHRfZXhjbHVzaXZlGq8BaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrVAQoQZHVyYXRpb24uZ3RlX2x0ZRrAAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJwrdAQoaZHVyYXRpb24uZ3RlX2x0ZV9leGNsdXNpdmUavgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnSAESnQEKAmluGAcgAygLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uQnbCSHMKcQoLZHVyYXRpb24uaW4aYiEodGhpcyBpbiBnZXRGaWVsZChydWxlcywgJ2luJykpID8gJ3ZhbHVlIG11c3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2luJyldKSA6ICcnEpQBCgZub3RfaW4YCCADKAsyGS5nb29nbGUucHJvdG9idWYuRHVyYXRpb25CacJIZgpkCg9kdXJhdGlvbi5ub3RfaW4aUXRoaXMgaW4gcnVsZXMubm90X2luID8gJ3ZhbHVlIG11c3Qgbm90IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbcnVsZXMubm90X2luXSkgOiAnJxJJCgdleGFtcGxlGAkgAygLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uQh3CSBoKGAoQZHVyYXRpb24uZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4i/QUKDkZpZWxkTWFza1J1bGVzEr8BCgVjb25zdBgBIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE1hc2tCkwHCSI8BCowBChBmaWVsZF9tYXNrLmNvbnN0Gnh0aGlzLnBhdGhzICE9IGdldEZpZWxkKHJ1bGVzLCAnY29uc3QnKS5wYXRocyA/ICd2YWx1ZSBtdXN0IGVxdWFsIHBhdGhzICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnY29uc3QnKS5wYXRoc10pIDogJycS2QEKAmluGAIgAygJQswBwkjIAQrFAQoNZmllbGRfbWFzay5pbhqzASF0aGlzLnBhdGhzLmFsbChwLCBwIGluIGdldEZpZWxkKHJ1bGVzLCAnaW4nKSB8fCBnZXRGaWVsZChydWxlcywgJ2luJykuZXhpc3RzKGYsIHAuc3RhcnRzV2l0aChmKycuJykpKSA/ICd2YWx1ZSBtdXN0IG9ubHkgY29udGFpbiBwYXRocyBpbiAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2luJyldKSA6ICcnEvMBCgZub3RfaW4YAyADKAlC4gHCSN4BCtsBChFmaWVsZF9tYXNrLm5vdF9pbhrFASF0aGlzLnBhdGhzLmFsbChwLCAhKHAgaW4gZ2V0RmllbGQocnVsZXMsICdub3RfaW4nKSB8fCBnZXRGaWVsZChydWxlcywgJ25vdF9pbicpLmV4aXN0cyhmLCBwLnN0YXJ0c1dpdGgoZisnLicpKSkpID8gJ3ZhbHVlIG11c3Qgbm90IGNvbnRhaW4gYW55IHBhdGhzIGluICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnbm90X2luJyldKSA6ICcnEkwKB2V4YW1wbGUYBCADKAsyGi5nb29nbGUucHJvdG9idWYuRmllbGRNYXNrQh/CSBwKGgoSZmllbGRfbWFzay5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAIikhgKDlRpbWVzdGFtcFJ1bGVzEqMBCgVjb25zdBgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBCeMJIdQpzCg90aW1lc3RhbXAuY29uc3QaYHRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ3ZhbHVlIG11c3QgZXF1YWwgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdjb25zdCcpXSkgOiAnJxKrAQoCbHQYAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQoABwkh9CnsKDHRpbWVzdGFtcC5sdBprIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPj0gcnVsZXMubHQ/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5sdF0pIDogJydIABK8AQoDbHRlGAQgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEKQAcJIjAEKiQEKDXRpbWVzdGFtcC5sdGUaeCFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiB0aGlzID4gcnVsZXMubHRlPyAndmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMubHRlXSkgOiAnJ0gAEmwKBmx0X25vdxgHIAEoCEJawkhXClUKEHRpbWVzdGFtcC5sdF9ub3caQShydWxlcy5sdF9ub3cgJiYgdGhpcyA+IG5vdykgPyAndmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gbm93JyA6ICcnSAASxwcKAmd0GAUgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEKcB8JImAcKfgoMdGltZXN0YW1wLmd0Gm4haGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8PSBydWxlcy5ndD8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0XSkgOiAnJwq3AQoPdGltZXN0YW1wLmd0X2x0GqMBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndCAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwq/AQoZdGltZXN0YW1wLmd0X2x0X2V4Y2x1c2l2ZRqhAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndCAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCscBChB0aW1lc3RhbXAuZ3RfbHRlGrIBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJwrPAQoadGltZXN0YW1wLmd0X2x0ZV9leGNsdXNpdmUasAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndCAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJ0gBEpMICgNndGUYBiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQucHwkjjBwqMAQoNdGltZXN0YW1wLmd0ZRp7IWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPCBydWxlcy5ndGU/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGVdKSA6ICcnCsYBChB0aW1lc3RhbXAuZ3RlX2x0GrEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCs4BChp0aW1lc3RhbXAuZ3RlX2x0X2V4Y2x1c2l2ZRqvAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycK1gEKEXRpbWVzdGFtcC5ndGVfbHRlGsABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnCt4BCht0aW1lc3RhbXAuZ3RlX2x0ZV9leGNsdXNpdmUavgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnSAESbwoGZ3Rfbm93GAggASgIQl3CSFoKWAoQdGltZXN0YW1wLmd0X25vdxpEKHJ1bGVzLmd0X25vdyAmJiB0aGlzIDwgbm93KSA/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBub3cnIDogJydIARK4AQoGd2l0aGluGAkgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uQowBwkiIAQqFAQoQdGltZXN0YW1wLndpdGhpbhpxdGhpcyA8IG5vdy1ydWxlcy53aXRoaW4gfHwgdGhpcyA+IG5vdytydWxlcy53aXRoaW4gPyAndmFsdWUgbXVzdCBiZSB3aXRoaW4gJXMgb2Ygbm93Jy5mb3JtYXQoW3J1bGVzLndpdGhpbl0pIDogJycSSwoHZXhhbXBsZRgKIAMoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBCHsJIGwoZChF0aW1lc3RhbXAuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4iOQoKVmlvbGF0aW9ucxIrCgp2aW9sYXRpb25zGAEgAygLMhcuYnVmLnZhbGlkYXRlLlZpb2xhdGlvbiKfAQoJVmlvbGF0aW9uEiYKBWZpZWxkGAUgASgLMhcuYnVmLnZhbGlkYXRlLkZpZWxkUGF0aBIlCgRydWxlGAYgASgLMhcuYnVmLnZhbGlkYXRlLkZpZWxkUGF0aBIPCgdydWxlX2lkGAIgASgJEg8KB21lc3NhZ2UYAyABKAkSDwoHZm9yX2tleRgEIAEoCEoECAEQAlIKZmllbGRfcGF0aCI9CglGaWVsZFBhdGgSMAoIZWxlbWVudHMYASADKAsyHi5idWYudmFsaWRhdGUuRmllbGRQYXRoRWxlbWVudCLpAgoQRmllbGRQYXRoRWxlbWVudBIUCgxmaWVsZF9udW1iZXIYASABKAUSEgoKZmllbGRfbmFtZRgCIAEoCRI+CgpmaWVsZF90eXBlGAMgASgOMiouZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLlR5cGUSPAoIa2V5X3R5cGUYBCABKA4yKi5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8uVHlwZRI+Cgp2YWx1ZV90eXBlGAUgASgOMiouZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLlR5cGUSDwoFaW5kZXgYBiABKARIABISCghib29sX2tleRgHIAEoCEgAEhEKB2ludF9rZXkYCCABKANIABISCgh1aW50X2tleRgJIAEoBEgAEhQKCnN0cmluZ19rZXkYCiABKAlIAEILCglzdWJzY3JpcHQqoQEKBklnbm9yZRIWChJJR05PUkVfVU5TUEVDSUZJRUQQABIYChRJR05PUkVfSUZfWkVST19WQUxVRRABEhEKDUlHTk9SRV9BTFdBWVMQAyIECAIQAioMSUdOT1JFX0VNUFRZKg5JR05PUkVfREVGQVVMVCoXSUdOT1JFX0lGX0RFRkFVTFRfVkFMVUUqFUlHTk9SRV9JRl9VTlBPUFVMQVRFRCpuCgpLbm93blJlZ2V4EhsKF0tOT1dOX1JFR0VYX1VOU1BFQ0lGSUVEEAASIAocS05PV05fUkVHRVhfSFRUUF9IRUFERVJfTkFNRRABEiEKHUtOT1dOX1JFR0VYX0hUVFBfSEVBREVSX1ZBTFVFEAI6VgoHbWVzc2FnZRIfLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucxiHCSABKAsyGi5idWYudmFsaWRhdGUuTWVzc2FnZVJ1bGVzUgdtZXNzYWdlOk4KBW9uZW9mEh0uZ29vZ2xlLnByb3RvYnVmLk9uZW9mT3B0aW9ucxiHCSABKAsyGC5idWYudmFsaWRhdGUuT25lb2ZSdWxlc1IFb25lb2Y6TgoFZmllbGQSHS5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zGIcJIAEoCzIYLmJ1Zi52YWxpZGF0ZS5GaWVsZFJ1bGVzUgVmaWVsZDpdCgpwcmVkZWZpbmVkEh0uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucxiICSABKAsyHS5idWYudmFsaWRhdGUuUHJlZGVmaW5lZFJ1bGVzUgpwcmVkZWZpbmVkQm4KEmJ1aWxkLmJ1Zi52YWxpZGF0ZUINVmFsaWRhdGVQcm90b1ABWkdidWYuYnVpbGQvZ2VuL2dvL2J1ZmJ1aWxkL3Byb3RvdmFsaWRhdGUvcHJvdG9jb2xidWZmZXJzL2dvL2J1Zi92YWxpZGF0ZQ", [file_google_protobuf_descriptor, file_google_protobuf_duration, file_google_protobuf_field_mask, file_google_protobuf_timestamp]);
3030+3131+/**
3232+ * `Rule` represents a validation rule written in the Common Expression
3333+ * Language (CEL) syntax. Each Rule includes a unique identifier, an
3434+ * optional error message, and the CEL expression to evaluate. For more
3535+ * information, [see our documentation](https://buf.build/docs/protovalidate/schemas/custom-rules/).
3636+ *
3737+ * ```proto
3838+ * message Foo {
3939+ * option (buf.validate.message).cel = {
4040+ * id: "foo.bar"
4141+ * message: "bar must be greater than 0"
4242+ * expression: "this.bar > 0"
4343+ * };
4444+ * int32 bar = 1;
4545+ * }
4646+ * ```
4747+ *
4848+ * @generated from message buf.validate.Rule
4949+ */
5050+export type Rule = Message<"buf.validate.Rule"> & {
5151+ /**
5252+ * `id` is a string that serves as a machine-readable name for this Rule.
5353+ * It should be unique within its scope, which could be either a message or a field.
5454+ *
5555+ * @generated from field: optional string id = 1;
5656+ */
5757+ id: string;
5858+5959+ /**
6060+ * `message` is an optional field that provides a human-readable error message
6161+ * for this Rule when the CEL expression evaluates to false. If a
6262+ * non-empty message is provided, any strings resulting from the CEL
6363+ * expression evaluation are ignored.
6464+ *
6565+ * @generated from field: optional string message = 2;
6666+ */
6767+ message: string;
6868+6969+ /**
7070+ * `expression` is the actual CEL expression that will be evaluated for
7171+ * validation. This string must resolve to either a boolean or a string
7272+ * value. If the expression evaluates to false or a non-empty string, the
7373+ * validation is considered failed, and the message is rejected.
7474+ *
7575+ * @generated from field: optional string expression = 3;
7676+ */
7777+ expression: string;
7878+};
7979+8080+/**
8181+ * Describes the message buf.validate.Rule.
8282+ * Use `create(RuleSchema)` to create a new message.
8383+ */
8484+export const RuleSchema: GenMessage<Rule> = /*@__PURE__*/
8585+ messageDesc(file_buf_validate_validate, 0);
8686+8787+/**
8888+ * MessageRules represents validation rules that are applied to the entire message.
8989+ * It includes disabling options and a list of Rule messages representing Common Expression Language (CEL) validation rules.
9090+ *
9191+ * @generated from message buf.validate.MessageRules
9292+ */
9393+export type MessageRules = Message<"buf.validate.MessageRules"> & {
9494+ /**
9595+ * `cel_expression` is a repeated field CEL expressions. Each expression specifies a validation
9696+ * rule to be applied to this message. These rules are written in Common Expression Language (CEL) syntax.
9797+ *
9898+ * This is a simplified form of the `cel` Rule field, where only `expression` is set. This allows for
9999+ * simpler syntax when defining CEL Rules where `id` and `message` derived from the `expression`. `id` will
100100+ * be same as the `expression`.
101101+ *
102102+ * For more information, [see our documentation](https://buf.build/docs/protovalidate/schemas/custom-rules/).
103103+ *
104104+ * ```proto
105105+ * message MyMessage {
106106+ * // The field `foo` must be greater than 42.
107107+ * option (buf.validate.message).cel_expression = "this.foo > 42";
108108+ * // The field `foo` must be less than 84.
109109+ * option (buf.validate.message).cel_expression = "this.foo < 84";
110110+ * optional int32 foo = 1;
111111+ * }
112112+ * ```
113113+ *
114114+ * @generated from field: repeated string cel_expression = 5;
115115+ */
116116+ celExpression: string[];
117117+118118+ /**
119119+ * `cel` is a repeated field of type Rule. Each Rule specifies a validation rule to be applied to this message.
120120+ * These rules are written in Common Expression Language (CEL) syntax. For more information,
121121+ * [see our documentation](https://buf.build/docs/protovalidate/schemas/custom-rules/).
122122+ *
123123+ *
124124+ * ```proto
125125+ * message MyMessage {
126126+ * // The field `foo` must be greater than 42.
127127+ * option (buf.validate.message).cel = {
128128+ * id: "my_message.value",
129129+ * message: "value must be greater than 42",
130130+ * expression: "this.foo > 42",
131131+ * };
132132+ * optional int32 foo = 1;
133133+ * }
134134+ * ```
135135+ *
136136+ * @generated from field: repeated buf.validate.Rule cel = 3;
137137+ */
138138+ cel: Rule[];
139139+140140+ /**
141141+ * `oneof` is a repeated field of type MessageOneofRule that specifies a list of fields
142142+ * of which at most one can be present. If `required` is also specified, then exactly one
143143+ * of the specified fields _must_ be present.
144144+ *
145145+ * This will enforce oneof-like constraints with a few features not provided by
146146+ * actual Protobuf oneof declarations:
147147+ * 1. Repeated and map fields are allowed in this validation. In a Protobuf oneof,
148148+ * only scalar fields are allowed.
149149+ * 2. Fields with implicit presence are allowed. In a Protobuf oneof, all member
150150+ * fields have explicit presence. This means that, for the purpose of determining
151151+ * how many fields are set, explicitly setting such a field to its zero value is
152152+ * effectively the same as not setting it at all.
153153+ * 3. This will always generate validation errors for a message unmarshalled from
154154+ * serialized data that sets more than one field. With a Protobuf oneof, when
155155+ * multiple fields are present in the serialized form, earlier values are usually
156156+ * silently ignored when unmarshalling, with only the last field being set when
157157+ * unmarshalling completes.
158158+ *
159159+ * Note that adding a field to a `oneof` will also set the IGNORE_IF_ZERO_VALUE on the fields. This means
160160+ * only the field that is set will be validated and the unset fields are not validated according to the field rules.
161161+ * This behavior can be overridden by setting `ignore` against a field.
162162+ *
163163+ * ```proto
164164+ * message MyMessage {
165165+ * // Only one of `field1` or `field2` _can_ be present in this message.
166166+ * option (buf.validate.message).oneof = { fields: ["field1", "field2"] };
167167+ * // Exactly one of `field3` or `field4` _must_ be present in this message.
168168+ * option (buf.validate.message).oneof = { fields: ["field3", "field4"], required: true };
169169+ * string field1 = 1;
170170+ * bytes field2 = 2;
171171+ * bool field3 = 3;
172172+ * int32 field4 = 4;
173173+ * }
174174+ * ```
175175+ *
176176+ * @generated from field: repeated buf.validate.MessageOneofRule oneof = 4;
177177+ */
178178+ oneof: MessageOneofRule[];
179179+};
180180+181181+/**
182182+ * Describes the message buf.validate.MessageRules.
183183+ * Use `create(MessageRulesSchema)` to create a new message.
184184+ */
185185+export const MessageRulesSchema: GenMessage<MessageRules> = /*@__PURE__*/
186186+ messageDesc(file_buf_validate_validate, 1);
187187+188188+/**
189189+ * @generated from message buf.validate.MessageOneofRule
190190+ */
191191+export type MessageOneofRule = Message<"buf.validate.MessageOneofRule"> & {
192192+ /**
193193+ * A list of field names to include in the oneof. All field names must be
194194+ * defined in the message. At least one field must be specified, and
195195+ * duplicates are not permitted.
196196+ *
197197+ * @generated from field: repeated string fields = 1;
198198+ */
199199+ fields: string[];
200200+201201+ /**
202202+ * If true, one of the fields specified _must_ be set.
203203+ *
204204+ * @generated from field: optional bool required = 2;
205205+ */
206206+ required: boolean;
207207+};
208208+209209+/**
210210+ * Describes the message buf.validate.MessageOneofRule.
211211+ * Use `create(MessageOneofRuleSchema)` to create a new message.
212212+ */
213213+export const MessageOneofRuleSchema: GenMessage<MessageOneofRule> = /*@__PURE__*/
214214+ messageDesc(file_buf_validate_validate, 2);
215215+216216+/**
217217+ * The `OneofRules` message type enables you to manage rules for
218218+ * oneof fields in your protobuf messages.
219219+ *
220220+ * @generated from message buf.validate.OneofRules
221221+ */
222222+export type OneofRules = Message<"buf.validate.OneofRules"> & {
223223+ /**
224224+ * If `required` is true, exactly one field of the oneof must be set. A
225225+ * validation error is returned if no fields in the oneof are set. Further rules
226226+ * should be placed on the fields themselves to ensure they are valid values,
227227+ * such as `min_len` or `gt`.
228228+ *
229229+ * ```proto
230230+ * message MyMessage {
231231+ * oneof value {
232232+ * // Either `a` or `b` must be set. If `a` is set, it must also be
233233+ * // non-empty; whereas if `b` is set, it can still be an empty string.
234234+ * option (buf.validate.oneof).required = true;
235235+ * string a = 1 [(buf.validate.field).string.min_len = 1];
236236+ * string b = 2;
237237+ * }
238238+ * }
239239+ * ```
240240+ *
241241+ * @generated from field: optional bool required = 1;
242242+ */
243243+ required: boolean;
244244+};
245245+246246+/**
247247+ * Describes the message buf.validate.OneofRules.
248248+ * Use `create(OneofRulesSchema)` to create a new message.
249249+ */
250250+export const OneofRulesSchema: GenMessage<OneofRules> = /*@__PURE__*/
251251+ messageDesc(file_buf_validate_validate, 3);
252252+253253+/**
254254+ * FieldRules encapsulates the rules for each type of field. Depending on
255255+ * the field, the correct set should be used to ensure proper validations.
256256+ *
257257+ * @generated from message buf.validate.FieldRules
258258+ */
259259+export type FieldRules = Message<"buf.validate.FieldRules"> & {
260260+ /**
261261+ * `cel_expression` is a repeated field CEL expressions. Each expression specifies a validation
262262+ * rule to be applied to this message. These rules are written in Common Expression Language (CEL) syntax.
263263+ *
264264+ * This is a simplified form of the `cel` Rule field, where only `expression` is set. This allows for
265265+ * simpler syntax when defining CEL Rules where `id` and `message` derived from the `expression`. `id` will
266266+ * be same as the `expression`.
267267+ *
268268+ * For more information, [see our documentation](https://buf.build/docs/protovalidate/schemas/custom-rules/).
269269+ *
270270+ * ```proto
271271+ * message MyMessage {
272272+ * // The field `value` must be greater than 42.
273273+ * optional int32 value = 1 [(buf.validate.field).cel_expression = "this > 42"];
274274+ * }
275275+ * ```
276276+ *
277277+ * @generated from field: repeated string cel_expression = 29;
278278+ */
279279+ celExpression: string[];
280280+281281+ /**
282282+ * `cel` is a repeated field used to represent a textual expression
283283+ * in the Common Expression Language (CEL) syntax. For more information,
284284+ * [see our documentation](https://buf.build/docs/protovalidate/schemas/custom-rules/).
285285+ *
286286+ * ```proto
287287+ * message MyMessage {
288288+ * // The field `value` must be greater than 42.
289289+ * optional int32 value = 1 [(buf.validate.field).cel = {
290290+ * id: "my_message.value",
291291+ * message: "value must be greater than 42",
292292+ * expression: "this > 42",
293293+ * }];
294294+ * }
295295+ * ```
296296+ *
297297+ * @generated from field: repeated buf.validate.Rule cel = 23;
298298+ */
299299+ cel: Rule[];
300300+301301+ /**
302302+ * If `required` is true, the field must be set. A validation error is returned
303303+ * if the field is not set.
304304+ *
305305+ * ```proto
306306+ * syntax="proto3";
307307+ *
308308+ * message FieldsWithPresence {
309309+ * // Requires any string to be set, including the empty string.
310310+ * optional string link = 1 [
311311+ * (buf.validate.field).required = true
312312+ * ];
313313+ * // Requires true or false to be set.
314314+ * optional bool disabled = 2 [
315315+ * (buf.validate.field).required = true
316316+ * ];
317317+ * // Requires a message to be set, including the empty message.
318318+ * SomeMessage msg = 4 [
319319+ * (buf.validate.field).required = true
320320+ * ];
321321+ * }
322322+ * ```
323323+ *
324324+ * All fields in the example above track presence. By default, Protovalidate
325325+ * ignores rules on those fields if no value is set. `required` ensures that
326326+ * the fields are set and valid.
327327+ *
328328+ * Fields that don't track presence are always validated by Protovalidate,
329329+ * whether they are set or not. It is not necessary to add `required`. It
330330+ * can be added to indicate that the field cannot be the zero value.
331331+ *
332332+ * ```proto
333333+ * syntax="proto3";
334334+ *
335335+ * message FieldsWithoutPresence {
336336+ * // `string.email` always applies, even to an empty string.
337337+ * string link = 1 [
338338+ * (buf.validate.field).string.email = true
339339+ * ];
340340+ * // `repeated.min_items` always applies, even to an empty list.
341341+ * repeated string labels = 2 [
342342+ * (buf.validate.field).repeated.min_items = 1
343343+ * ];
344344+ * // `required`, for fields that don't track presence, indicates
345345+ * // the value of the field can't be the zero value.
346346+ * int32 zero_value_not_allowed = 3 [
347347+ * (buf.validate.field).required = true
348348+ * ];
349349+ * }
350350+ * ```
351351+ *
352352+ * To learn which fields track presence, see the
353353+ * [Field Presence cheat sheet](https://protobuf.dev/programming-guides/field_presence/#cheat).
354354+ *
355355+ * Note: While field rules can be applied to repeated items, map keys, and map
356356+ * values, the elements are always considered to be set. Consequently,
357357+ * specifying `repeated.items.required` is redundant.
358358+ *
359359+ * @generated from field: optional bool required = 25;
360360+ */
361361+ required: boolean;
362362+363363+ /**
364364+ * Ignore validation rules on the field if its value matches the specified
365365+ * criteria. See the `Ignore` enum for details.
366366+ *
367367+ * ```proto
368368+ * message UpdateRequest {
369369+ * // The uri rule only applies if the field is not an empty string.
370370+ * string url = 1 [
371371+ * (buf.validate.field).ignore = IGNORE_IF_ZERO_VALUE,
372372+ * (buf.validate.field).string.uri = true
373373+ * ];
374374+ * }
375375+ * ```
376376+ *
377377+ * @generated from field: optional buf.validate.Ignore ignore = 27;
378378+ */
379379+ ignore: Ignore;
380380+381381+ /**
382382+ * @generated from oneof buf.validate.FieldRules.type
383383+ */
384384+ type: {
385385+ /**
386386+ * Scalar Field Types
387387+ *
388388+ * @generated from field: buf.validate.FloatRules float = 1;
389389+ */
390390+ value: FloatRules;
391391+ case: "float";
392392+ } | {
393393+ /**
394394+ * @generated from field: buf.validate.DoubleRules double = 2;
395395+ */
396396+ value: DoubleRules;
397397+ case: "double";
398398+ } | {
399399+ /**
400400+ * @generated from field: buf.validate.Int32Rules int32 = 3;
401401+ */
402402+ value: Int32Rules;
403403+ case: "int32";
404404+ } | {
405405+ /**
406406+ * @generated from field: buf.validate.Int64Rules int64 = 4;
407407+ */
408408+ value: Int64Rules;
409409+ case: "int64";
410410+ } | {
411411+ /**
412412+ * @generated from field: buf.validate.UInt32Rules uint32 = 5;
413413+ */
414414+ value: UInt32Rules;
415415+ case: "uint32";
416416+ } | {
417417+ /**
418418+ * @generated from field: buf.validate.UInt64Rules uint64 = 6;
419419+ */
420420+ value: UInt64Rules;
421421+ case: "uint64";
422422+ } | {
423423+ /**
424424+ * @generated from field: buf.validate.SInt32Rules sint32 = 7;
425425+ */
426426+ value: SInt32Rules;
427427+ case: "sint32";
428428+ } | {
429429+ /**
430430+ * @generated from field: buf.validate.SInt64Rules sint64 = 8;
431431+ */
432432+ value: SInt64Rules;
433433+ case: "sint64";
434434+ } | {
435435+ /**
436436+ * @generated from field: buf.validate.Fixed32Rules fixed32 = 9;
437437+ */
438438+ value: Fixed32Rules;
439439+ case: "fixed32";
440440+ } | {
441441+ /**
442442+ * @generated from field: buf.validate.Fixed64Rules fixed64 = 10;
443443+ */
444444+ value: Fixed64Rules;
445445+ case: "fixed64";
446446+ } | {
447447+ /**
448448+ * @generated from field: buf.validate.SFixed32Rules sfixed32 = 11;
449449+ */
450450+ value: SFixed32Rules;
451451+ case: "sfixed32";
452452+ } | {
453453+ /**
454454+ * @generated from field: buf.validate.SFixed64Rules sfixed64 = 12;
455455+ */
456456+ value: SFixed64Rules;
457457+ case: "sfixed64";
458458+ } | {
459459+ /**
460460+ * @generated from field: buf.validate.BoolRules bool = 13;
461461+ */
462462+ value: BoolRules;
463463+ case: "bool";
464464+ } | {
465465+ /**
466466+ * @generated from field: buf.validate.StringRules string = 14;
467467+ */
468468+ value: StringRules;
469469+ case: "string";
470470+ } | {
471471+ /**
472472+ * @generated from field: buf.validate.BytesRules bytes = 15;
473473+ */
474474+ value: BytesRules;
475475+ case: "bytes";
476476+ } | {
477477+ /**
478478+ * Complex Field Types
479479+ *
480480+ * @generated from field: buf.validate.EnumRules enum = 16;
481481+ */
482482+ value: EnumRules;
483483+ case: "enum";
484484+ } | {
485485+ /**
486486+ * @generated from field: buf.validate.RepeatedRules repeated = 18;
487487+ */
488488+ value: RepeatedRules;
489489+ case: "repeated";
490490+ } | {
491491+ /**
492492+ * @generated from field: buf.validate.MapRules map = 19;
493493+ */
494494+ value: MapRules;
495495+ case: "map";
496496+ } | {
497497+ /**
498498+ * Well-Known Field Types
499499+ *
500500+ * @generated from field: buf.validate.AnyRules any = 20;
501501+ */
502502+ value: AnyRules;
503503+ case: "any";
504504+ } | {
505505+ /**
506506+ * @generated from field: buf.validate.DurationRules duration = 21;
507507+ */
508508+ value: DurationRules;
509509+ case: "duration";
510510+ } | {
511511+ /**
512512+ * @generated from field: buf.validate.FieldMaskRules field_mask = 28;
513513+ */
514514+ value: FieldMaskRules;
515515+ case: "fieldMask";
516516+ } | {
517517+ /**
518518+ * @generated from field: buf.validate.TimestampRules timestamp = 22;
519519+ */
520520+ value: TimestampRules;
521521+ case: "timestamp";
522522+ } | { case: undefined; value?: undefined };
523523+};
524524+525525+/**
526526+ * Describes the message buf.validate.FieldRules.
527527+ * Use `create(FieldRulesSchema)` to create a new message.
528528+ */
529529+export const FieldRulesSchema: GenMessage<FieldRules> = /*@__PURE__*/
530530+ messageDesc(file_buf_validate_validate, 4);
531531+532532+/**
533533+ * PredefinedRules are custom rules that can be re-used with
534534+ * multiple fields.
535535+ *
536536+ * @generated from message buf.validate.PredefinedRules
537537+ */
538538+export type PredefinedRules = Message<"buf.validate.PredefinedRules"> & {
539539+ /**
540540+ * `cel` is a repeated field used to represent a textual expression
541541+ * in the Common Expression Language (CEL) syntax. For more information,
542542+ * [see our documentation](https://buf.build/docs/protovalidate/schemas/predefined-rules/).
543543+ *
544544+ * ```proto
545545+ * message MyMessage {
546546+ * // The field `value` must be greater than 42.
547547+ * optional int32 value = 1 [(buf.validate.predefined).cel = {
548548+ * id: "my_message.value",
549549+ * message: "value must be greater than 42",
550550+ * expression: "this > 42",
551551+ * }];
552552+ * }
553553+ * ```
554554+ *
555555+ * @generated from field: repeated buf.validate.Rule cel = 1;
556556+ */
557557+ cel: Rule[];
558558+};
559559+560560+/**
561561+ * Describes the message buf.validate.PredefinedRules.
562562+ * Use `create(PredefinedRulesSchema)` to create a new message.
563563+ */
564564+export const PredefinedRulesSchema: GenMessage<PredefinedRules> = /*@__PURE__*/
565565+ messageDesc(file_buf_validate_validate, 5);
566566+567567+/**
568568+ * FloatRules describes the rules applied to `float` values. These
569569+ * rules may also be applied to the `google.protobuf.FloatValue` Well-Known-Type.
570570+ *
571571+ * @generated from message buf.validate.FloatRules
572572+ */
573573+export type FloatRules = Message<"buf.validate.FloatRules"> & {
574574+ /**
575575+ * `const` requires the field value to exactly match the specified value. If
576576+ * the field value doesn't match, an error message is generated.
577577+ *
578578+ * ```proto
579579+ * message MyFloat {
580580+ * // value must equal 42.0
581581+ * float value = 1 [(buf.validate.field).float.const = 42.0];
582582+ * }
583583+ * ```
584584+ *
585585+ * @generated from field: optional float const = 1;
586586+ */
587587+ const: number;
588588+589589+ /**
590590+ * @generated from oneof buf.validate.FloatRules.less_than
591591+ */
592592+ lessThan: {
593593+ /**
594594+ * `lt` requires the field value to be less than the specified value (field <
595595+ * value). If the field value is equal to or greater than the specified value,
596596+ * an error message is generated.
597597+ *
598598+ * ```proto
599599+ * message MyFloat {
600600+ * // value must be less than 10.0
601601+ * float value = 1 [(buf.validate.field).float.lt = 10.0];
602602+ * }
603603+ * ```
604604+ *
605605+ * @generated from field: float lt = 2;
606606+ */
607607+ value: number;
608608+ case: "lt";
609609+ } | {
610610+ /**
611611+ * `lte` requires the field value to be less than or equal to the specified
612612+ * value (field <= value). If the field value is greater than the specified
613613+ * value, an error message is generated.
614614+ *
615615+ * ```proto
616616+ * message MyFloat {
617617+ * // value must be less than or equal to 10.0
618618+ * float value = 1 [(buf.validate.field).float.lte = 10.0];
619619+ * }
620620+ * ```
621621+ *
622622+ * @generated from field: float lte = 3;
623623+ */
624624+ value: number;
625625+ case: "lte";
626626+ } | { case: undefined; value?: undefined };
627627+628628+ /**
629629+ * @generated from oneof buf.validate.FloatRules.greater_than
630630+ */
631631+ greaterThan: {
632632+ /**
633633+ * `gt` requires the field value to be greater than the specified value
634634+ * (exclusive). If the value of `gt` is larger than a specified `lt` or
635635+ * `lte`, the range is reversed, and the field value must be outside the
636636+ * specified range. If the field value doesn't meet the required conditions,
637637+ * an error message is generated.
638638+ *
639639+ * ```proto
640640+ * message MyFloat {
641641+ * // value must be greater than 5.0 [float.gt]
642642+ * float value = 1 [(buf.validate.field).float.gt = 5.0];
643643+ *
644644+ * // value must be greater than 5 and less than 10.0 [float.gt_lt]
645645+ * float other_value = 2 [(buf.validate.field).float = { gt: 5.0, lt: 10.0 }];
646646+ *
647647+ * // value must be greater than 10 or less than 5.0 [float.gt_lt_exclusive]
648648+ * float another_value = 3 [(buf.validate.field).float = { gt: 10.0, lt: 5.0 }];
649649+ * }
650650+ * ```
651651+ *
652652+ * @generated from field: float gt = 4;
653653+ */
654654+ value: number;
655655+ case: "gt";
656656+ } | {
657657+ /**
658658+ * `gte` requires the field value to be greater than or equal to the specified
659659+ * value (exclusive). If the value of `gte` is larger than a specified `lt`
660660+ * or `lte`, the range is reversed, and the field value must be outside the
661661+ * specified range. If the field value doesn't meet the required conditions,
662662+ * an error message is generated.
663663+ *
664664+ * ```proto
665665+ * message MyFloat {
666666+ * // value must be greater than or equal to 5.0 [float.gte]
667667+ * float value = 1 [(buf.validate.field).float.gte = 5.0];
668668+ *
669669+ * // value must be greater than or equal to 5.0 and less than 10.0 [float.gte_lt]
670670+ * float other_value = 2 [(buf.validate.field).float = { gte: 5.0, lt: 10.0 }];
671671+ *
672672+ * // value must be greater than or equal to 10.0 or less than 5.0 [float.gte_lt_exclusive]
673673+ * float another_value = 3 [(buf.validate.field).float = { gte: 10.0, lt: 5.0 }];
674674+ * }
675675+ * ```
676676+ *
677677+ * @generated from field: float gte = 5;
678678+ */
679679+ value: number;
680680+ case: "gte";
681681+ } | { case: undefined; value?: undefined };
682682+683683+ /**
684684+ * `in` requires the field value to be equal to one of the specified values.
685685+ * If the field value isn't one of the specified values, an error message
686686+ * is generated.
687687+ *
688688+ * ```proto
689689+ * message MyFloat {
690690+ * // value must be in list [1.0, 2.0, 3.0]
691691+ * float value = 1 [(buf.validate.field).float = { in: [1.0, 2.0, 3.0] }];
692692+ * }
693693+ * ```
694694+ *
695695+ * @generated from field: repeated float in = 6;
696696+ */
697697+ in: number[];
698698+699699+ /**
700700+ * `in` requires the field value to not be equal to any of the specified
701701+ * values. If the field value is one of the specified values, an error
702702+ * message is generated.
703703+ *
704704+ * ```proto
705705+ * message MyFloat {
706706+ * // value must not be in list [1.0, 2.0, 3.0]
707707+ * float value = 1 [(buf.validate.field).float = { not_in: [1.0, 2.0, 3.0] }];
708708+ * }
709709+ * ```
710710+ *
711711+ * @generated from field: repeated float not_in = 7;
712712+ */
713713+ notIn: number[];
714714+715715+ /**
716716+ * `finite` requires the field value to be finite. If the field value is
717717+ * infinite or NaN, an error message is generated.
718718+ *
719719+ * @generated from field: optional bool finite = 8;
720720+ */
721721+ finite: boolean;
722722+723723+ /**
724724+ * `example` specifies values that the field may have. These values SHOULD
725725+ * conform to other rules. `example` values will not impact validation
726726+ * but may be used as helpful guidance on how to populate the given field.
727727+ *
728728+ * ```proto
729729+ * message MyFloat {
730730+ * float value = 1 [
731731+ * (buf.validate.field).float.example = 1.0,
732732+ * (buf.validate.field).float.example = inf
733733+ * ];
734734+ * }
735735+ * ```
736736+ *
737737+ * @generated from field: repeated float example = 9;
738738+ */
739739+ example: number[];
740740+};
741741+742742+/**
743743+ * Describes the message buf.validate.FloatRules.
744744+ * Use `create(FloatRulesSchema)` to create a new message.
745745+ */
746746+export const FloatRulesSchema: GenMessage<FloatRules> = /*@__PURE__*/
747747+ messageDesc(file_buf_validate_validate, 6);
748748+749749+/**
750750+ * DoubleRules describes the rules applied to `double` values. These
751751+ * rules may also be applied to the `google.protobuf.DoubleValue` Well-Known-Type.
752752+ *
753753+ * @generated from message buf.validate.DoubleRules
754754+ */
755755+export type DoubleRules = Message<"buf.validate.DoubleRules"> & {
756756+ /**
757757+ * `const` requires the field value to exactly match the specified value. If
758758+ * the field value doesn't match, an error message is generated.
759759+ *
760760+ * ```proto
761761+ * message MyDouble {
762762+ * // value must equal 42.0
763763+ * double value = 1 [(buf.validate.field).double.const = 42.0];
764764+ * }
765765+ * ```
766766+ *
767767+ * @generated from field: optional double const = 1;
768768+ */
769769+ const: number;
770770+771771+ /**
772772+ * @generated from oneof buf.validate.DoubleRules.less_than
773773+ */
774774+ lessThan: {
775775+ /**
776776+ * `lt` requires the field value to be less than the specified value (field <
777777+ * value). If the field value is equal to or greater than the specified
778778+ * value, an error message is generated.
779779+ *
780780+ * ```proto
781781+ * message MyDouble {
782782+ * // value must be less than 10.0
783783+ * double value = 1 [(buf.validate.field).double.lt = 10.0];
784784+ * }
785785+ * ```
786786+ *
787787+ * @generated from field: double lt = 2;
788788+ */
789789+ value: number;
790790+ case: "lt";
791791+ } | {
792792+ /**
793793+ * `lte` requires the field value to be less than or equal to the specified value
794794+ * (field <= value). If the field value is greater than the specified value,
795795+ * an error message is generated.
796796+ *
797797+ * ```proto
798798+ * message MyDouble {
799799+ * // value must be less than or equal to 10.0
800800+ * double value = 1 [(buf.validate.field).double.lte = 10.0];
801801+ * }
802802+ * ```
803803+ *
804804+ * @generated from field: double lte = 3;
805805+ */
806806+ value: number;
807807+ case: "lte";
808808+ } | { case: undefined; value?: undefined };
809809+810810+ /**
811811+ * @generated from oneof buf.validate.DoubleRules.greater_than
812812+ */
813813+ greaterThan: {
814814+ /**
815815+ * `gt` requires the field value to be greater than the specified value
816816+ * (exclusive). If the value of `gt` is larger than a specified `lt` or `lte`,
817817+ * the range is reversed, and the field value must be outside the specified
818818+ * range. If the field value doesn't meet the required conditions, an error
819819+ * message is generated.
820820+ *
821821+ * ```proto
822822+ * message MyDouble {
823823+ * // value must be greater than 5.0 [double.gt]
824824+ * double value = 1 [(buf.validate.field).double.gt = 5.0];
825825+ *
826826+ * // value must be greater than 5 and less than 10.0 [double.gt_lt]
827827+ * double other_value = 2 [(buf.validate.field).double = { gt: 5.0, lt: 10.0 }];
828828+ *
829829+ * // value must be greater than 10 or less than 5.0 [double.gt_lt_exclusive]
830830+ * double another_value = 3 [(buf.validate.field).double = { gt: 10.0, lt: 5.0 }];
831831+ * }
832832+ * ```
833833+ *
834834+ * @generated from field: double gt = 4;
835835+ */
836836+ value: number;
837837+ case: "gt";
838838+ } | {
839839+ /**
840840+ * `gte` requires the field value to be greater than or equal to the specified
841841+ * value (exclusive). If the value of `gte` is larger than a specified `lt` or
842842+ * `lte`, the range is reversed, and the field value must be outside the
843843+ * specified range. If the field value doesn't meet the required conditions,
844844+ * an error message is generated.
845845+ *
846846+ * ```proto
847847+ * message MyDouble {
848848+ * // value must be greater than or equal to 5.0 [double.gte]
849849+ * double value = 1 [(buf.validate.field).double.gte = 5.0];
850850+ *
851851+ * // value must be greater than or equal to 5.0 and less than 10.0 [double.gte_lt]
852852+ * double other_value = 2 [(buf.validate.field).double = { gte: 5.0, lt: 10.0 }];
853853+ *
854854+ * // value must be greater than or equal to 10.0 or less than 5.0 [double.gte_lt_exclusive]
855855+ * double another_value = 3 [(buf.validate.field).double = { gte: 10.0, lt: 5.0 }];
856856+ * }
857857+ * ```
858858+ *
859859+ * @generated from field: double gte = 5;
860860+ */
861861+ value: number;
862862+ case: "gte";
863863+ } | { case: undefined; value?: undefined };
864864+865865+ /**
866866+ * `in` requires the field value to be equal to one of the specified values.
867867+ * If the field value isn't one of the specified values, an error message is
868868+ * generated.
869869+ *
870870+ * ```proto
871871+ * message MyDouble {
872872+ * // value must be in list [1.0, 2.0, 3.0]
873873+ * double value = 1 [(buf.validate.field).double = { in: [1.0, 2.0, 3.0] }];
874874+ * }
875875+ * ```
876876+ *
877877+ * @generated from field: repeated double in = 6;
878878+ */
879879+ in: number[];
880880+881881+ /**
882882+ * `not_in` requires the field value to not be equal to any of the specified
883883+ * values. If the field value is one of the specified values, an error
884884+ * message is generated.
885885+ *
886886+ * ```proto
887887+ * message MyDouble {
888888+ * // value must not be in list [1.0, 2.0, 3.0]
889889+ * double value = 1 [(buf.validate.field).double = { not_in: [1.0, 2.0, 3.0] }];
890890+ * }
891891+ * ```
892892+ *
893893+ * @generated from field: repeated double not_in = 7;
894894+ */
895895+ notIn: number[];
896896+897897+ /**
898898+ * `finite` requires the field value to be finite. If the field value is
899899+ * infinite or NaN, an error message is generated.
900900+ *
901901+ * @generated from field: optional bool finite = 8;
902902+ */
903903+ finite: boolean;
904904+905905+ /**
906906+ * `example` specifies values that the field may have. These values SHOULD
907907+ * conform to other rules. `example` values will not impact validation
908908+ * but may be used as helpful guidance on how to populate the given field.
909909+ *
910910+ * ```proto
911911+ * message MyDouble {
912912+ * double value = 1 [
913913+ * (buf.validate.field).double.example = 1.0,
914914+ * (buf.validate.field).double.example = inf
915915+ * ];
916916+ * }
917917+ * ```
918918+ *
919919+ * @generated from field: repeated double example = 9;
920920+ */
921921+ example: number[];
922922+};
923923+924924+/**
925925+ * Describes the message buf.validate.DoubleRules.
926926+ * Use `create(DoubleRulesSchema)` to create a new message.
927927+ */
928928+export const DoubleRulesSchema: GenMessage<DoubleRules> = /*@__PURE__*/
929929+ messageDesc(file_buf_validate_validate, 7);
930930+931931+/**
932932+ * Int32Rules describes the rules applied to `int32` values. These
933933+ * rules may also be applied to the `google.protobuf.Int32Value` Well-Known-Type.
934934+ *
935935+ * @generated from message buf.validate.Int32Rules
936936+ */
937937+export type Int32Rules = Message<"buf.validate.Int32Rules"> & {
938938+ /**
939939+ * `const` requires the field value to exactly match the specified value. If
940940+ * the field value doesn't match, an error message is generated.
941941+ *
942942+ * ```proto
943943+ * message MyInt32 {
944944+ * // value must equal 42
945945+ * int32 value = 1 [(buf.validate.field).int32.const = 42];
946946+ * }
947947+ * ```
948948+ *
949949+ * @generated from field: optional int32 const = 1;
950950+ */
951951+ const: number;
952952+953953+ /**
954954+ * @generated from oneof buf.validate.Int32Rules.less_than
955955+ */
956956+ lessThan: {
957957+ /**
958958+ * `lt` requires the field value to be less than the specified value (field
959959+ * < value). If the field value is equal to or greater than the specified
960960+ * value, an error message is generated.
961961+ *
962962+ * ```proto
963963+ * message MyInt32 {
964964+ * // value must be less than 10
965965+ * int32 value = 1 [(buf.validate.field).int32.lt = 10];
966966+ * }
967967+ * ```
968968+ *
969969+ * @generated from field: int32 lt = 2;
970970+ */
971971+ value: number;
972972+ case: "lt";
973973+ } | {
974974+ /**
975975+ * `lte` requires the field value to be less than or equal to the specified
976976+ * value (field <= value). If the field value is greater than the specified
977977+ * value, an error message is generated.
978978+ *
979979+ * ```proto
980980+ * message MyInt32 {
981981+ * // value must be less than or equal to 10
982982+ * int32 value = 1 [(buf.validate.field).int32.lte = 10];
983983+ * }
984984+ * ```
985985+ *
986986+ * @generated from field: int32 lte = 3;
987987+ */
988988+ value: number;
989989+ case: "lte";
990990+ } | { case: undefined; value?: undefined };
991991+992992+ /**
993993+ * @generated from oneof buf.validate.Int32Rules.greater_than
994994+ */
995995+ greaterThan: {
996996+ /**
997997+ * `gt` requires the field value to be greater than the specified value
998998+ * (exclusive). If the value of `gt` is larger than a specified `lt` or
999999+ * `lte`, the range is reversed, and the field value must be outside the
10001000+ * specified range. If the field value doesn't meet the required conditions,
10011001+ * an error message is generated.
10021002+ *
10031003+ * ```proto
10041004+ * message MyInt32 {
10051005+ * // value must be greater than 5 [int32.gt]
10061006+ * int32 value = 1 [(buf.validate.field).int32.gt = 5];
10071007+ *
10081008+ * // value must be greater than 5 and less than 10 [int32.gt_lt]
10091009+ * int32 other_value = 2 [(buf.validate.field).int32 = { gt: 5, lt: 10 }];
10101010+ *
10111011+ * // value must be greater than 10 or less than 5 [int32.gt_lt_exclusive]
10121012+ * int32 another_value = 3 [(buf.validate.field).int32 = { gt: 10, lt: 5 }];
10131013+ * }
10141014+ * ```
10151015+ *
10161016+ * @generated from field: int32 gt = 4;
10171017+ */
10181018+ value: number;
10191019+ case: "gt";
10201020+ } | {
10211021+ /**
10221022+ * `gte` requires the field value to be greater than or equal to the specified value
10231023+ * (exclusive). If the value of `gte` is larger than a specified `lt` or
10241024+ * `lte`, the range is reversed, and the field value must be outside the
10251025+ * specified range. If the field value doesn't meet the required conditions,
10261026+ * an error message is generated.
10271027+ *
10281028+ * ```proto
10291029+ * message MyInt32 {
10301030+ * // value must be greater than or equal to 5 [int32.gte]
10311031+ * int32 value = 1 [(buf.validate.field).int32.gte = 5];
10321032+ *
10331033+ * // value must be greater than or equal to 5 and less than 10 [int32.gte_lt]
10341034+ * int32 other_value = 2 [(buf.validate.field).int32 = { gte: 5, lt: 10 }];
10351035+ *
10361036+ * // value must be greater than or equal to 10 or less than 5 [int32.gte_lt_exclusive]
10371037+ * int32 another_value = 3 [(buf.validate.field).int32 = { gte: 10, lt: 5 }];
10381038+ * }
10391039+ * ```
10401040+ *
10411041+ * @generated from field: int32 gte = 5;
10421042+ */
10431043+ value: number;
10441044+ case: "gte";
10451045+ } | { case: undefined; value?: undefined };
10461046+10471047+ /**
10481048+ * `in` requires the field value to be equal to one of the specified values.
10491049+ * If the field value isn't one of the specified values, an error message is
10501050+ * generated.
10511051+ *
10521052+ * ```proto
10531053+ * message MyInt32 {
10541054+ * // value must be in list [1, 2, 3]
10551055+ * int32 value = 1 [(buf.validate.field).int32 = { in: [1, 2, 3] }];
10561056+ * }
10571057+ * ```
10581058+ *
10591059+ * @generated from field: repeated int32 in = 6;
10601060+ */
10611061+ in: number[];
10621062+10631063+ /**
10641064+ * `not_in` requires the field value to not be equal to any of the specified
10651065+ * values. If the field value is one of the specified values, an error message
10661066+ * is generated.
10671067+ *
10681068+ * ```proto
10691069+ * message MyInt32 {
10701070+ * // value must not be in list [1, 2, 3]
10711071+ * int32 value = 1 [(buf.validate.field).int32 = { not_in: [1, 2, 3] }];
10721072+ * }
10731073+ * ```
10741074+ *
10751075+ * @generated from field: repeated int32 not_in = 7;
10761076+ */
10771077+ notIn: number[];
10781078+10791079+ /**
10801080+ * `example` specifies values that the field may have. These values SHOULD
10811081+ * conform to other rules. `example` values will not impact validation
10821082+ * but may be used as helpful guidance on how to populate the given field.
10831083+ *
10841084+ * ```proto
10851085+ * message MyInt32 {
10861086+ * int32 value = 1 [
10871087+ * (buf.validate.field).int32.example = 1,
10881088+ * (buf.validate.field).int32.example = -10
10891089+ * ];
10901090+ * }
10911091+ * ```
10921092+ *
10931093+ * @generated from field: repeated int32 example = 8;
10941094+ */
10951095+ example: number[];
10961096+};
10971097+10981098+/**
10991099+ * Describes the message buf.validate.Int32Rules.
11001100+ * Use `create(Int32RulesSchema)` to create a new message.
11011101+ */
11021102+export const Int32RulesSchema: GenMessage<Int32Rules> = /*@__PURE__*/
11031103+ messageDesc(file_buf_validate_validate, 8);
11041104+11051105+/**
11061106+ * Int64Rules describes the rules applied to `int64` values. These
11071107+ * rules may also be applied to the `google.protobuf.Int64Value` Well-Known-Type.
11081108+ *
11091109+ * @generated from message buf.validate.Int64Rules
11101110+ */
11111111+export type Int64Rules = Message<"buf.validate.Int64Rules"> & {
11121112+ /**
11131113+ * `const` requires the field value to exactly match the specified value. If
11141114+ * the field value doesn't match, an error message is generated.
11151115+ *
11161116+ * ```proto
11171117+ * message MyInt64 {
11181118+ * // value must equal 42
11191119+ * int64 value = 1 [(buf.validate.field).int64.const = 42];
11201120+ * }
11211121+ * ```
11221122+ *
11231123+ * @generated from field: optional int64 const = 1;
11241124+ */
11251125+ const: bigint;
11261126+11271127+ /**
11281128+ * @generated from oneof buf.validate.Int64Rules.less_than
11291129+ */
11301130+ lessThan: {
11311131+ /**
11321132+ * `lt` requires the field value to be less than the specified value (field <
11331133+ * value). If the field value is equal to or greater than the specified value,
11341134+ * an error message is generated.
11351135+ *
11361136+ * ```proto
11371137+ * message MyInt64 {
11381138+ * // value must be less than 10
11391139+ * int64 value = 1 [(buf.validate.field).int64.lt = 10];
11401140+ * }
11411141+ * ```
11421142+ *
11431143+ * @generated from field: int64 lt = 2;
11441144+ */
11451145+ value: bigint;
11461146+ case: "lt";
11471147+ } | {
11481148+ /**
11491149+ * `lte` requires the field value to be less than or equal to the specified
11501150+ * value (field <= value). If the field value is greater than the specified
11511151+ * value, an error message is generated.
11521152+ *
11531153+ * ```proto
11541154+ * message MyInt64 {
11551155+ * // value must be less than or equal to 10
11561156+ * int64 value = 1 [(buf.validate.field).int64.lte = 10];
11571157+ * }
11581158+ * ```
11591159+ *
11601160+ * @generated from field: int64 lte = 3;
11611161+ */
11621162+ value: bigint;
11631163+ case: "lte";
11641164+ } | { case: undefined; value?: undefined };
11651165+11661166+ /**
11671167+ * @generated from oneof buf.validate.Int64Rules.greater_than
11681168+ */
11691169+ greaterThan: {
11701170+ /**
11711171+ * `gt` requires the field value to be greater than the specified value
11721172+ * (exclusive). If the value of `gt` is larger than a specified `lt` or
11731173+ * `lte`, the range is reversed, and the field value must be outside the
11741174+ * specified range. If the field value doesn't meet the required conditions,
11751175+ * an error message is generated.
11761176+ *
11771177+ * ```proto
11781178+ * message MyInt64 {
11791179+ * // value must be greater than 5 [int64.gt]
11801180+ * int64 value = 1 [(buf.validate.field).int64.gt = 5];
11811181+ *
11821182+ * // value must be greater than 5 and less than 10 [int64.gt_lt]
11831183+ * int64 other_value = 2 [(buf.validate.field).int64 = { gt: 5, lt: 10 }];
11841184+ *
11851185+ * // value must be greater than 10 or less than 5 [int64.gt_lt_exclusive]
11861186+ * int64 another_value = 3 [(buf.validate.field).int64 = { gt: 10, lt: 5 }];
11871187+ * }
11881188+ * ```
11891189+ *
11901190+ * @generated from field: int64 gt = 4;
11911191+ */
11921192+ value: bigint;
11931193+ case: "gt";
11941194+ } | {
11951195+ /**
11961196+ * `gte` requires the field value to be greater than or equal to the specified
11971197+ * value (exclusive). If the value of `gte` is larger than a specified `lt`
11981198+ * or `lte`, the range is reversed, and the field value must be outside the
11991199+ * specified range. If the field value doesn't meet the required conditions,
12001200+ * an error message is generated.
12011201+ *
12021202+ * ```proto
12031203+ * message MyInt64 {
12041204+ * // value must be greater than or equal to 5 [int64.gte]
12051205+ * int64 value = 1 [(buf.validate.field).int64.gte = 5];
12061206+ *
12071207+ * // value must be greater than or equal to 5 and less than 10 [int64.gte_lt]
12081208+ * int64 other_value = 2 [(buf.validate.field).int64 = { gte: 5, lt: 10 }];
12091209+ *
12101210+ * // value must be greater than or equal to 10 or less than 5 [int64.gte_lt_exclusive]
12111211+ * int64 another_value = 3 [(buf.validate.field).int64 = { gte: 10, lt: 5 }];
12121212+ * }
12131213+ * ```
12141214+ *
12151215+ * @generated from field: int64 gte = 5;
12161216+ */
12171217+ value: bigint;
12181218+ case: "gte";
12191219+ } | { case: undefined; value?: undefined };
12201220+12211221+ /**
12221222+ * `in` requires the field value to be equal to one of the specified values.
12231223+ * If the field value isn't one of the specified values, an error message is
12241224+ * generated.
12251225+ *
12261226+ * ```proto
12271227+ * message MyInt64 {
12281228+ * // value must be in list [1, 2, 3]
12291229+ * int64 value = 1 [(buf.validate.field).int64 = { in: [1, 2, 3] }];
12301230+ * }
12311231+ * ```
12321232+ *
12331233+ * @generated from field: repeated int64 in = 6;
12341234+ */
12351235+ in: bigint[];
12361236+12371237+ /**
12381238+ * `not_in` requires the field value to not be equal to any of the specified
12391239+ * values. If the field value is one of the specified values, an error
12401240+ * message is generated.
12411241+ *
12421242+ * ```proto
12431243+ * message MyInt64 {
12441244+ * // value must not be in list [1, 2, 3]
12451245+ * int64 value = 1 [(buf.validate.field).int64 = { not_in: [1, 2, 3] }];
12461246+ * }
12471247+ * ```
12481248+ *
12491249+ * @generated from field: repeated int64 not_in = 7;
12501250+ */
12511251+ notIn: bigint[];
12521252+12531253+ /**
12541254+ * `example` specifies values that the field may have. These values SHOULD
12551255+ * conform to other rules. `example` values will not impact validation
12561256+ * but may be used as helpful guidance on how to populate the given field.
12571257+ *
12581258+ * ```proto
12591259+ * message MyInt64 {
12601260+ * int64 value = 1 [
12611261+ * (buf.validate.field).int64.example = 1,
12621262+ * (buf.validate.field).int64.example = -10
12631263+ * ];
12641264+ * }
12651265+ * ```
12661266+ *
12671267+ * @generated from field: repeated int64 example = 9;
12681268+ */
12691269+ example: bigint[];
12701270+};
12711271+12721272+/**
12731273+ * Describes the message buf.validate.Int64Rules.
12741274+ * Use `create(Int64RulesSchema)` to create a new message.
12751275+ */
12761276+export const Int64RulesSchema: GenMessage<Int64Rules> = /*@__PURE__*/
12771277+ messageDesc(file_buf_validate_validate, 9);
12781278+12791279+/**
12801280+ * UInt32Rules describes the rules applied to `uint32` values. These
12811281+ * rules may also be applied to the `google.protobuf.UInt32Value` Well-Known-Type.
12821282+ *
12831283+ * @generated from message buf.validate.UInt32Rules
12841284+ */
12851285+export type UInt32Rules = Message<"buf.validate.UInt32Rules"> & {
12861286+ /**
12871287+ * `const` requires the field value to exactly match the specified value. If
12881288+ * the field value doesn't match, an error message is generated.
12891289+ *
12901290+ * ```proto
12911291+ * message MyUInt32 {
12921292+ * // value must equal 42
12931293+ * uint32 value = 1 [(buf.validate.field).uint32.const = 42];
12941294+ * }
12951295+ * ```
12961296+ *
12971297+ * @generated from field: optional uint32 const = 1;
12981298+ */
12991299+ const: number;
13001300+13011301+ /**
13021302+ * @generated from oneof buf.validate.UInt32Rules.less_than
13031303+ */
13041304+ lessThan: {
13051305+ /**
13061306+ * `lt` requires the field value to be less than the specified value (field <
13071307+ * value). If the field value is equal to or greater than the specified value,
13081308+ * an error message is generated.
13091309+ *
13101310+ * ```proto
13111311+ * message MyUInt32 {
13121312+ * // value must be less than 10
13131313+ * uint32 value = 1 [(buf.validate.field).uint32.lt = 10];
13141314+ * }
13151315+ * ```
13161316+ *
13171317+ * @generated from field: uint32 lt = 2;
13181318+ */
13191319+ value: number;
13201320+ case: "lt";
13211321+ } | {
13221322+ /**
13231323+ * `lte` requires the field value to be less than or equal to the specified
13241324+ * value (field <= value). If the field value is greater than the specified
13251325+ * value, an error message is generated.
13261326+ *
13271327+ * ```proto
13281328+ * message MyUInt32 {
13291329+ * // value must be less than or equal to 10
13301330+ * uint32 value = 1 [(buf.validate.field).uint32.lte = 10];
13311331+ * }
13321332+ * ```
13331333+ *
13341334+ * @generated from field: uint32 lte = 3;
13351335+ */
13361336+ value: number;
13371337+ case: "lte";
13381338+ } | { case: undefined; value?: undefined };
13391339+13401340+ /**
13411341+ * @generated from oneof buf.validate.UInt32Rules.greater_than
13421342+ */
13431343+ greaterThan: {
13441344+ /**
13451345+ * `gt` requires the field value to be greater than the specified value
13461346+ * (exclusive). If the value of `gt` is larger than a specified `lt` or
13471347+ * `lte`, the range is reversed, and the field value must be outside the
13481348+ * specified range. If the field value doesn't meet the required conditions,
13491349+ * an error message is generated.
13501350+ *
13511351+ * ```proto
13521352+ * message MyUInt32 {
13531353+ * // value must be greater than 5 [uint32.gt]
13541354+ * uint32 value = 1 [(buf.validate.field).uint32.gt = 5];
13551355+ *
13561356+ * // value must be greater than 5 and less than 10 [uint32.gt_lt]
13571357+ * uint32 other_value = 2 [(buf.validate.field).uint32 = { gt: 5, lt: 10 }];
13581358+ *
13591359+ * // value must be greater than 10 or less than 5 [uint32.gt_lt_exclusive]
13601360+ * uint32 another_value = 3 [(buf.validate.field).uint32 = { gt: 10, lt: 5 }];
13611361+ * }
13621362+ * ```
13631363+ *
13641364+ * @generated from field: uint32 gt = 4;
13651365+ */
13661366+ value: number;
13671367+ case: "gt";
13681368+ } | {
13691369+ /**
13701370+ * `gte` requires the field value to be greater than or equal to the specified
13711371+ * value (exclusive). If the value of `gte` is larger than a specified `lt`
13721372+ * or `lte`, the range is reversed, and the field value must be outside the
13731373+ * specified range. If the field value doesn't meet the required conditions,
13741374+ * an error message is generated.
13751375+ *
13761376+ * ```proto
13771377+ * message MyUInt32 {
13781378+ * // value must be greater than or equal to 5 [uint32.gte]
13791379+ * uint32 value = 1 [(buf.validate.field).uint32.gte = 5];
13801380+ *
13811381+ * // value must be greater than or equal to 5 and less than 10 [uint32.gte_lt]
13821382+ * uint32 other_value = 2 [(buf.validate.field).uint32 = { gte: 5, lt: 10 }];
13831383+ *
13841384+ * // value must be greater than or equal to 10 or less than 5 [uint32.gte_lt_exclusive]
13851385+ * uint32 another_value = 3 [(buf.validate.field).uint32 = { gte: 10, lt: 5 }];
13861386+ * }
13871387+ * ```
13881388+ *
13891389+ * @generated from field: uint32 gte = 5;
13901390+ */
13911391+ value: number;
13921392+ case: "gte";
13931393+ } | { case: undefined; value?: undefined };
13941394+13951395+ /**
13961396+ * `in` requires the field value to be equal to one of the specified values.
13971397+ * If the field value isn't one of the specified values, an error message is
13981398+ * generated.
13991399+ *
14001400+ * ```proto
14011401+ * message MyUInt32 {
14021402+ * // value must be in list [1, 2, 3]
14031403+ * uint32 value = 1 [(buf.validate.field).uint32 = { in: [1, 2, 3] }];
14041404+ * }
14051405+ * ```
14061406+ *
14071407+ * @generated from field: repeated uint32 in = 6;
14081408+ */
14091409+ in: number[];
14101410+14111411+ /**
14121412+ * `not_in` requires the field value to not be equal to any of the specified
14131413+ * values. If the field value is one of the specified values, an error
14141414+ * message is generated.
14151415+ *
14161416+ * ```proto
14171417+ * message MyUInt32 {
14181418+ * // value must not be in list [1, 2, 3]
14191419+ * uint32 value = 1 [(buf.validate.field).uint32 = { not_in: [1, 2, 3] }];
14201420+ * }
14211421+ * ```
14221422+ *
14231423+ * @generated from field: repeated uint32 not_in = 7;
14241424+ */
14251425+ notIn: number[];
14261426+14271427+ /**
14281428+ * `example` specifies values that the field may have. These values SHOULD
14291429+ * conform to other rules. `example` values will not impact validation
14301430+ * but may be used as helpful guidance on how to populate the given field.
14311431+ *
14321432+ * ```proto
14331433+ * message MyUInt32 {
14341434+ * uint32 value = 1 [
14351435+ * (buf.validate.field).uint32.example = 1,
14361436+ * (buf.validate.field).uint32.example = 10
14371437+ * ];
14381438+ * }
14391439+ * ```
14401440+ *
14411441+ * @generated from field: repeated uint32 example = 8;
14421442+ */
14431443+ example: number[];
14441444+};
14451445+14461446+/**
14471447+ * Describes the message buf.validate.UInt32Rules.
14481448+ * Use `create(UInt32RulesSchema)` to create a new message.
14491449+ */
14501450+export const UInt32RulesSchema: GenMessage<UInt32Rules> = /*@__PURE__*/
14511451+ messageDesc(file_buf_validate_validate, 10);
14521452+14531453+/**
14541454+ * UInt64Rules describes the rules applied to `uint64` values. These
14551455+ * rules may also be applied to the `google.protobuf.UInt64Value` Well-Known-Type.
14561456+ *
14571457+ * @generated from message buf.validate.UInt64Rules
14581458+ */
14591459+export type UInt64Rules = Message<"buf.validate.UInt64Rules"> & {
14601460+ /**
14611461+ * `const` requires the field value to exactly match the specified value. If
14621462+ * the field value doesn't match, an error message is generated.
14631463+ *
14641464+ * ```proto
14651465+ * message MyUInt64 {
14661466+ * // value must equal 42
14671467+ * uint64 value = 1 [(buf.validate.field).uint64.const = 42];
14681468+ * }
14691469+ * ```
14701470+ *
14711471+ * @generated from field: optional uint64 const = 1;
14721472+ */
14731473+ const: bigint;
14741474+14751475+ /**
14761476+ * @generated from oneof buf.validate.UInt64Rules.less_than
14771477+ */
14781478+ lessThan: {
14791479+ /**
14801480+ * `lt` requires the field value to be less than the specified value (field <
14811481+ * value). If the field value is equal to or greater than the specified value,
14821482+ * an error message is generated.
14831483+ *
14841484+ * ```proto
14851485+ * message MyUInt64 {
14861486+ * // value must be less than 10
14871487+ * uint64 value = 1 [(buf.validate.field).uint64.lt = 10];
14881488+ * }
14891489+ * ```
14901490+ *
14911491+ * @generated from field: uint64 lt = 2;
14921492+ */
14931493+ value: bigint;
14941494+ case: "lt";
14951495+ } | {
14961496+ /**
14971497+ * `lte` requires the field value to be less than or equal to the specified
14981498+ * value (field <= value). If the field value is greater than the specified
14991499+ * value, an error message is generated.
15001500+ *
15011501+ * ```proto
15021502+ * message MyUInt64 {
15031503+ * // value must be less than or equal to 10
15041504+ * uint64 value = 1 [(buf.validate.field).uint64.lte = 10];
15051505+ * }
15061506+ * ```
15071507+ *
15081508+ * @generated from field: uint64 lte = 3;
15091509+ */
15101510+ value: bigint;
15111511+ case: "lte";
15121512+ } | { case: undefined; value?: undefined };
15131513+15141514+ /**
15151515+ * @generated from oneof buf.validate.UInt64Rules.greater_than
15161516+ */
15171517+ greaterThan: {
15181518+ /**
15191519+ * `gt` requires the field value to be greater than the specified value
15201520+ * (exclusive). If the value of `gt` is larger than a specified `lt` or
15211521+ * `lte`, the range is reversed, and the field value must be outside the
15221522+ * specified range. If the field value doesn't meet the required conditions,
15231523+ * an error message is generated.
15241524+ *
15251525+ * ```proto
15261526+ * message MyUInt64 {
15271527+ * // value must be greater than 5 [uint64.gt]
15281528+ * uint64 value = 1 [(buf.validate.field).uint64.gt = 5];
15291529+ *
15301530+ * // value must be greater than 5 and less than 10 [uint64.gt_lt]
15311531+ * uint64 other_value = 2 [(buf.validate.field).uint64 = { gt: 5, lt: 10 }];
15321532+ *
15331533+ * // value must be greater than 10 or less than 5 [uint64.gt_lt_exclusive]
15341534+ * uint64 another_value = 3 [(buf.validate.field).uint64 = { gt: 10, lt: 5 }];
15351535+ * }
15361536+ * ```
15371537+ *
15381538+ * @generated from field: uint64 gt = 4;
15391539+ */
15401540+ value: bigint;
15411541+ case: "gt";
15421542+ } | {
15431543+ /**
15441544+ * `gte` requires the field value to be greater than or equal to the specified
15451545+ * value (exclusive). If the value of `gte` is larger than a specified `lt`
15461546+ * or `lte`, the range is reversed, and the field value must be outside the
15471547+ * specified range. If the field value doesn't meet the required conditions,
15481548+ * an error message is generated.
15491549+ *
15501550+ * ```proto
15511551+ * message MyUInt64 {
15521552+ * // value must be greater than or equal to 5 [uint64.gte]
15531553+ * uint64 value = 1 [(buf.validate.field).uint64.gte = 5];
15541554+ *
15551555+ * // value must be greater than or equal to 5 and less than 10 [uint64.gte_lt]
15561556+ * uint64 other_value = 2 [(buf.validate.field).uint64 = { gte: 5, lt: 10 }];
15571557+ *
15581558+ * // value must be greater than or equal to 10 or less than 5 [uint64.gte_lt_exclusive]
15591559+ * uint64 another_value = 3 [(buf.validate.field).uint64 = { gte: 10, lt: 5 }];
15601560+ * }
15611561+ * ```
15621562+ *
15631563+ * @generated from field: uint64 gte = 5;
15641564+ */
15651565+ value: bigint;
15661566+ case: "gte";
15671567+ } | { case: undefined; value?: undefined };
15681568+15691569+ /**
15701570+ * `in` requires the field value to be equal to one of the specified values.
15711571+ * If the field value isn't one of the specified values, an error message is
15721572+ * generated.
15731573+ *
15741574+ * ```proto
15751575+ * message MyUInt64 {
15761576+ * // value must be in list [1, 2, 3]
15771577+ * uint64 value = 1 [(buf.validate.field).uint64 = { in: [1, 2, 3] }];
15781578+ * }
15791579+ * ```
15801580+ *
15811581+ * @generated from field: repeated uint64 in = 6;
15821582+ */
15831583+ in: bigint[];
15841584+15851585+ /**
15861586+ * `not_in` requires the field value to not be equal to any of the specified
15871587+ * values. If the field value is one of the specified values, an error
15881588+ * message is generated.
15891589+ *
15901590+ * ```proto
15911591+ * message MyUInt64 {
15921592+ * // value must not be in list [1, 2, 3]
15931593+ * uint64 value = 1 [(buf.validate.field).uint64 = { not_in: [1, 2, 3] }];
15941594+ * }
15951595+ * ```
15961596+ *
15971597+ * @generated from field: repeated uint64 not_in = 7;
15981598+ */
15991599+ notIn: bigint[];
16001600+16011601+ /**
16021602+ * `example` specifies values that the field may have. These values SHOULD
16031603+ * conform to other rules. `example` values will not impact validation
16041604+ * but may be used as helpful guidance on how to populate the given field.
16051605+ *
16061606+ * ```proto
16071607+ * message MyUInt64 {
16081608+ * uint64 value = 1 [
16091609+ * (buf.validate.field).uint64.example = 1,
16101610+ * (buf.validate.field).uint64.example = -10
16111611+ * ];
16121612+ * }
16131613+ * ```
16141614+ *
16151615+ * @generated from field: repeated uint64 example = 8;
16161616+ */
16171617+ example: bigint[];
16181618+};
16191619+16201620+/**
16211621+ * Describes the message buf.validate.UInt64Rules.
16221622+ * Use `create(UInt64RulesSchema)` to create a new message.
16231623+ */
16241624+export const UInt64RulesSchema: GenMessage<UInt64Rules> = /*@__PURE__*/
16251625+ messageDesc(file_buf_validate_validate, 11);
16261626+16271627+/**
16281628+ * SInt32Rules describes the rules applied to `sint32` values.
16291629+ *
16301630+ * @generated from message buf.validate.SInt32Rules
16311631+ */
16321632+export type SInt32Rules = Message<"buf.validate.SInt32Rules"> & {
16331633+ /**
16341634+ * `const` requires the field value to exactly match the specified value. If
16351635+ * the field value doesn't match, an error message is generated.
16361636+ *
16371637+ * ```proto
16381638+ * message MySInt32 {
16391639+ * // value must equal 42
16401640+ * sint32 value = 1 [(buf.validate.field).sint32.const = 42];
16411641+ * }
16421642+ * ```
16431643+ *
16441644+ * @generated from field: optional sint32 const = 1;
16451645+ */
16461646+ const: number;
16471647+16481648+ /**
16491649+ * @generated from oneof buf.validate.SInt32Rules.less_than
16501650+ */
16511651+ lessThan: {
16521652+ /**
16531653+ * `lt` requires the field value to be less than the specified value (field
16541654+ * < value). If the field value is equal to or greater than the specified
16551655+ * value, an error message is generated.
16561656+ *
16571657+ * ```proto
16581658+ * message MySInt32 {
16591659+ * // value must be less than 10
16601660+ * sint32 value = 1 [(buf.validate.field).sint32.lt = 10];
16611661+ * }
16621662+ * ```
16631663+ *
16641664+ * @generated from field: sint32 lt = 2;
16651665+ */
16661666+ value: number;
16671667+ case: "lt";
16681668+ } | {
16691669+ /**
16701670+ * `lte` requires the field value to be less than or equal to the specified
16711671+ * value (field <= value). If the field value is greater than the specified
16721672+ * value, an error message is generated.
16731673+ *
16741674+ * ```proto
16751675+ * message MySInt32 {
16761676+ * // value must be less than or equal to 10
16771677+ * sint32 value = 1 [(buf.validate.field).sint32.lte = 10];
16781678+ * }
16791679+ * ```
16801680+ *
16811681+ * @generated from field: sint32 lte = 3;
16821682+ */
16831683+ value: number;
16841684+ case: "lte";
16851685+ } | { case: undefined; value?: undefined };
16861686+16871687+ /**
16881688+ * @generated from oneof buf.validate.SInt32Rules.greater_than
16891689+ */
16901690+ greaterThan: {
16911691+ /**
16921692+ * `gt` requires the field value to be greater than the specified value
16931693+ * (exclusive). If the value of `gt` is larger than a specified `lt` or
16941694+ * `lte`, the range is reversed, and the field value must be outside the
16951695+ * specified range. If the field value doesn't meet the required conditions,
16961696+ * an error message is generated.
16971697+ *
16981698+ * ```proto
16991699+ * message MySInt32 {
17001700+ * // value must be greater than 5 [sint32.gt]
17011701+ * sint32 value = 1 [(buf.validate.field).sint32.gt = 5];
17021702+ *
17031703+ * // value must be greater than 5 and less than 10 [sint32.gt_lt]
17041704+ * sint32 other_value = 2 [(buf.validate.field).sint32 = { gt: 5, lt: 10 }];
17051705+ *
17061706+ * // value must be greater than 10 or less than 5 [sint32.gt_lt_exclusive]
17071707+ * sint32 another_value = 3 [(buf.validate.field).sint32 = { gt: 10, lt: 5 }];
17081708+ * }
17091709+ * ```
17101710+ *
17111711+ * @generated from field: sint32 gt = 4;
17121712+ */
17131713+ value: number;
17141714+ case: "gt";
17151715+ } | {
17161716+ /**
17171717+ * `gte` requires the field value to be greater than or equal to the specified
17181718+ * value (exclusive). If the value of `gte` is larger than a specified `lt`
17191719+ * or `lte`, the range is reversed, and the field value must be outside the
17201720+ * specified range. If the field value doesn't meet the required conditions,
17211721+ * an error message is generated.
17221722+ *
17231723+ * ```proto
17241724+ * message MySInt32 {
17251725+ * // value must be greater than or equal to 5 [sint32.gte]
17261726+ * sint32 value = 1 [(buf.validate.field).sint32.gte = 5];
17271727+ *
17281728+ * // value must be greater than or equal to 5 and less than 10 [sint32.gte_lt]
17291729+ * sint32 other_value = 2 [(buf.validate.field).sint32 = { gte: 5, lt: 10 }];
17301730+ *
17311731+ * // value must be greater than or equal to 10 or less than 5 [sint32.gte_lt_exclusive]
17321732+ * sint32 another_value = 3 [(buf.validate.field).sint32 = { gte: 10, lt: 5 }];
17331733+ * }
17341734+ * ```
17351735+ *
17361736+ * @generated from field: sint32 gte = 5;
17371737+ */
17381738+ value: number;
17391739+ case: "gte";
17401740+ } | { case: undefined; value?: undefined };
17411741+17421742+ /**
17431743+ * `in` requires the field value to be equal to one of the specified values.
17441744+ * If the field value isn't one of the specified values, an error message is
17451745+ * generated.
17461746+ *
17471747+ * ```proto
17481748+ * message MySInt32 {
17491749+ * // value must be in list [1, 2, 3]
17501750+ * sint32 value = 1 [(buf.validate.field).sint32 = { in: [1, 2, 3] }];
17511751+ * }
17521752+ * ```
17531753+ *
17541754+ * @generated from field: repeated sint32 in = 6;
17551755+ */
17561756+ in: number[];
17571757+17581758+ /**
17591759+ * `not_in` requires the field value to not be equal to any of the specified
17601760+ * values. If the field value is one of the specified values, an error
17611761+ * message is generated.
17621762+ *
17631763+ * ```proto
17641764+ * message MySInt32 {
17651765+ * // value must not be in list [1, 2, 3]
17661766+ * sint32 value = 1 [(buf.validate.field).sint32 = { not_in: [1, 2, 3] }];
17671767+ * }
17681768+ * ```
17691769+ *
17701770+ * @generated from field: repeated sint32 not_in = 7;
17711771+ */
17721772+ notIn: number[];
17731773+17741774+ /**
17751775+ * `example` specifies values that the field may have. These values SHOULD
17761776+ * conform to other rules. `example` values will not impact validation
17771777+ * but may be used as helpful guidance on how to populate the given field.
17781778+ *
17791779+ * ```proto
17801780+ * message MySInt32 {
17811781+ * sint32 value = 1 [
17821782+ * (buf.validate.field).sint32.example = 1,
17831783+ * (buf.validate.field).sint32.example = -10
17841784+ * ];
17851785+ * }
17861786+ * ```
17871787+ *
17881788+ * @generated from field: repeated sint32 example = 8;
17891789+ */
17901790+ example: number[];
17911791+};
17921792+17931793+/**
17941794+ * Describes the message buf.validate.SInt32Rules.
17951795+ * Use `create(SInt32RulesSchema)` to create a new message.
17961796+ */
17971797+export const SInt32RulesSchema: GenMessage<SInt32Rules> = /*@__PURE__*/
17981798+ messageDesc(file_buf_validate_validate, 12);
17991799+18001800+/**
18011801+ * SInt64Rules describes the rules applied to `sint64` values.
18021802+ *
18031803+ * @generated from message buf.validate.SInt64Rules
18041804+ */
18051805+export type SInt64Rules = Message<"buf.validate.SInt64Rules"> & {
18061806+ /**
18071807+ * `const` requires the field value to exactly match the specified value. If
18081808+ * the field value doesn't match, an error message is generated.
18091809+ *
18101810+ * ```proto
18111811+ * message MySInt64 {
18121812+ * // value must equal 42
18131813+ * sint64 value = 1 [(buf.validate.field).sint64.const = 42];
18141814+ * }
18151815+ * ```
18161816+ *
18171817+ * @generated from field: optional sint64 const = 1;
18181818+ */
18191819+ const: bigint;
18201820+18211821+ /**
18221822+ * @generated from oneof buf.validate.SInt64Rules.less_than
18231823+ */
18241824+ lessThan: {
18251825+ /**
18261826+ * `lt` requires the field value to be less than the specified value (field
18271827+ * < value). If the field value is equal to or greater than the specified
18281828+ * value, an error message is generated.
18291829+ *
18301830+ * ```proto
18311831+ * message MySInt64 {
18321832+ * // value must be less than 10
18331833+ * sint64 value = 1 [(buf.validate.field).sint64.lt = 10];
18341834+ * }
18351835+ * ```
18361836+ *
18371837+ * @generated from field: sint64 lt = 2;
18381838+ */
18391839+ value: bigint;
18401840+ case: "lt";
18411841+ } | {
18421842+ /**
18431843+ * `lte` requires the field value to be less than or equal to the specified
18441844+ * value (field <= value). If the field value is greater than the specified
18451845+ * value, an error message is generated.
18461846+ *
18471847+ * ```proto
18481848+ * message MySInt64 {
18491849+ * // value must be less than or equal to 10
18501850+ * sint64 value = 1 [(buf.validate.field).sint64.lte = 10];
18511851+ * }
18521852+ * ```
18531853+ *
18541854+ * @generated from field: sint64 lte = 3;
18551855+ */
18561856+ value: bigint;
18571857+ case: "lte";
18581858+ } | { case: undefined; value?: undefined };
18591859+18601860+ /**
18611861+ * @generated from oneof buf.validate.SInt64Rules.greater_than
18621862+ */
18631863+ greaterThan: {
18641864+ /**
18651865+ * `gt` requires the field value to be greater than the specified value
18661866+ * (exclusive). If the value of `gt` is larger than a specified `lt` or
18671867+ * `lte`, the range is reversed, and the field value must be outside the
18681868+ * specified range. If the field value doesn't meet the required conditions,
18691869+ * an error message is generated.
18701870+ *
18711871+ * ```proto
18721872+ * message MySInt64 {
18731873+ * // value must be greater than 5 [sint64.gt]
18741874+ * sint64 value = 1 [(buf.validate.field).sint64.gt = 5];
18751875+ *
18761876+ * // value must be greater than 5 and less than 10 [sint64.gt_lt]
18771877+ * sint64 other_value = 2 [(buf.validate.field).sint64 = { gt: 5, lt: 10 }];
18781878+ *
18791879+ * // value must be greater than 10 or less than 5 [sint64.gt_lt_exclusive]
18801880+ * sint64 another_value = 3 [(buf.validate.field).sint64 = { gt: 10, lt: 5 }];
18811881+ * }
18821882+ * ```
18831883+ *
18841884+ * @generated from field: sint64 gt = 4;
18851885+ */
18861886+ value: bigint;
18871887+ case: "gt";
18881888+ } | {
18891889+ /**
18901890+ * `gte` requires the field value to be greater than or equal to the specified
18911891+ * value (exclusive). If the value of `gte` is larger than a specified `lt`
18921892+ * or `lte`, the range is reversed, and the field value must be outside the
18931893+ * specified range. If the field value doesn't meet the required conditions,
18941894+ * an error message is generated.
18951895+ *
18961896+ * ```proto
18971897+ * message MySInt64 {
18981898+ * // value must be greater than or equal to 5 [sint64.gte]
18991899+ * sint64 value = 1 [(buf.validate.field).sint64.gte = 5];
19001900+ *
19011901+ * // value must be greater than or equal to 5 and less than 10 [sint64.gte_lt]
19021902+ * sint64 other_value = 2 [(buf.validate.field).sint64 = { gte: 5, lt: 10 }];
19031903+ *
19041904+ * // value must be greater than or equal to 10 or less than 5 [sint64.gte_lt_exclusive]
19051905+ * sint64 another_value = 3 [(buf.validate.field).sint64 = { gte: 10, lt: 5 }];
19061906+ * }
19071907+ * ```
19081908+ *
19091909+ * @generated from field: sint64 gte = 5;
19101910+ */
19111911+ value: bigint;
19121912+ case: "gte";
19131913+ } | { case: undefined; value?: undefined };
19141914+19151915+ /**
19161916+ * `in` requires the field value to be equal to one of the specified values.
19171917+ * If the field value isn't one of the specified values, an error message
19181918+ * is generated.
19191919+ *
19201920+ * ```proto
19211921+ * message MySInt64 {
19221922+ * // value must be in list [1, 2, 3]
19231923+ * sint64 value = 1 [(buf.validate.field).sint64 = { in: [1, 2, 3] }];
19241924+ * }
19251925+ * ```
19261926+ *
19271927+ * @generated from field: repeated sint64 in = 6;
19281928+ */
19291929+ in: bigint[];
19301930+19311931+ /**
19321932+ * `not_in` requires the field value to not be equal to any of the specified
19331933+ * values. If the field value is one of the specified values, an error
19341934+ * message is generated.
19351935+ *
19361936+ * ```proto
19371937+ * message MySInt64 {
19381938+ * // value must not be in list [1, 2, 3]
19391939+ * sint64 value = 1 [(buf.validate.field).sint64 = { not_in: [1, 2, 3] }];
19401940+ * }
19411941+ * ```
19421942+ *
19431943+ * @generated from field: repeated sint64 not_in = 7;
19441944+ */
19451945+ notIn: bigint[];
19461946+19471947+ /**
19481948+ * `example` specifies values that the field may have. These values SHOULD
19491949+ * conform to other rules. `example` values will not impact validation
19501950+ * but may be used as helpful guidance on how to populate the given field.
19511951+ *
19521952+ * ```proto
19531953+ * message MySInt64 {
19541954+ * sint64 value = 1 [
19551955+ * (buf.validate.field).sint64.example = 1,
19561956+ * (buf.validate.field).sint64.example = -10
19571957+ * ];
19581958+ * }
19591959+ * ```
19601960+ *
19611961+ * @generated from field: repeated sint64 example = 8;
19621962+ */
19631963+ example: bigint[];
19641964+};
19651965+19661966+/**
19671967+ * Describes the message buf.validate.SInt64Rules.
19681968+ * Use `create(SInt64RulesSchema)` to create a new message.
19691969+ */
19701970+export const SInt64RulesSchema: GenMessage<SInt64Rules> = /*@__PURE__*/
19711971+ messageDesc(file_buf_validate_validate, 13);
19721972+19731973+/**
19741974+ * Fixed32Rules describes the rules applied to `fixed32` values.
19751975+ *
19761976+ * @generated from message buf.validate.Fixed32Rules
19771977+ */
19781978+export type Fixed32Rules = Message<"buf.validate.Fixed32Rules"> & {
19791979+ /**
19801980+ * `const` requires the field value to exactly match the specified value.
19811981+ * If the field value doesn't match, an error message is generated.
19821982+ *
19831983+ * ```proto
19841984+ * message MyFixed32 {
19851985+ * // value must equal 42
19861986+ * fixed32 value = 1 [(buf.validate.field).fixed32.const = 42];
19871987+ * }
19881988+ * ```
19891989+ *
19901990+ * @generated from field: optional fixed32 const = 1;
19911991+ */
19921992+ const: number;
19931993+19941994+ /**
19951995+ * @generated from oneof buf.validate.Fixed32Rules.less_than
19961996+ */
19971997+ lessThan: {
19981998+ /**
19991999+ * `lt` requires the field value to be less than the specified value (field <
20002000+ * value). If the field value is equal to or greater than the specified value,
20012001+ * an error message is generated.
20022002+ *
20032003+ * ```proto
20042004+ * message MyFixed32 {
20052005+ * // value must be less than 10
20062006+ * fixed32 value = 1 [(buf.validate.field).fixed32.lt = 10];
20072007+ * }
20082008+ * ```
20092009+ *
20102010+ * @generated from field: fixed32 lt = 2;
20112011+ */
20122012+ value: number;
20132013+ case: "lt";
20142014+ } | {
20152015+ /**
20162016+ * `lte` requires the field value to be less than or equal to the specified
20172017+ * value (field <= value). If the field value is greater than the specified
20182018+ * value, an error message is generated.
20192019+ *
20202020+ * ```proto
20212021+ * message MyFixed32 {
20222022+ * // value must be less than or equal to 10
20232023+ * fixed32 value = 1 [(buf.validate.field).fixed32.lte = 10];
20242024+ * }
20252025+ * ```
20262026+ *
20272027+ * @generated from field: fixed32 lte = 3;
20282028+ */
20292029+ value: number;
20302030+ case: "lte";
20312031+ } | { case: undefined; value?: undefined };
20322032+20332033+ /**
20342034+ * @generated from oneof buf.validate.Fixed32Rules.greater_than
20352035+ */
20362036+ greaterThan: {
20372037+ /**
20382038+ * `gt` requires the field value to be greater than the specified value
20392039+ * (exclusive). If the value of `gt` is larger than a specified `lt` or
20402040+ * `lte`, the range is reversed, and the field value must be outside the
20412041+ * specified range. If the field value doesn't meet the required conditions,
20422042+ * an error message is generated.
20432043+ *
20442044+ * ```proto
20452045+ * message MyFixed32 {
20462046+ * // value must be greater than 5 [fixed32.gt]
20472047+ * fixed32 value = 1 [(buf.validate.field).fixed32.gt = 5];
20482048+ *
20492049+ * // value must be greater than 5 and less than 10 [fixed32.gt_lt]
20502050+ * fixed32 other_value = 2 [(buf.validate.field).fixed32 = { gt: 5, lt: 10 }];
20512051+ *
20522052+ * // value must be greater than 10 or less than 5 [fixed32.gt_lt_exclusive]
20532053+ * fixed32 another_value = 3 [(buf.validate.field).fixed32 = { gt: 10, lt: 5 }];
20542054+ * }
20552055+ * ```
20562056+ *
20572057+ * @generated from field: fixed32 gt = 4;
20582058+ */
20592059+ value: number;
20602060+ case: "gt";
20612061+ } | {
20622062+ /**
20632063+ * `gte` requires the field value to be greater than or equal to the specified
20642064+ * value (exclusive). If the value of `gte` is larger than a specified `lt`
20652065+ * or `lte`, the range is reversed, and the field value must be outside the
20662066+ * specified range. If the field value doesn't meet the required conditions,
20672067+ * an error message is generated.
20682068+ *
20692069+ * ```proto
20702070+ * message MyFixed32 {
20712071+ * // value must be greater than or equal to 5 [fixed32.gte]
20722072+ * fixed32 value = 1 [(buf.validate.field).fixed32.gte = 5];
20732073+ *
20742074+ * // value must be greater than or equal to 5 and less than 10 [fixed32.gte_lt]
20752075+ * fixed32 other_value = 2 [(buf.validate.field).fixed32 = { gte: 5, lt: 10 }];
20762076+ *
20772077+ * // value must be greater than or equal to 10 or less than 5 [fixed32.gte_lt_exclusive]
20782078+ * fixed32 another_value = 3 [(buf.validate.field).fixed32 = { gte: 10, lt: 5 }];
20792079+ * }
20802080+ * ```
20812081+ *
20822082+ * @generated from field: fixed32 gte = 5;
20832083+ */
20842084+ value: number;
20852085+ case: "gte";
20862086+ } | { case: undefined; value?: undefined };
20872087+20882088+ /**
20892089+ * `in` requires the field value to be equal to one of the specified values.
20902090+ * If the field value isn't one of the specified values, an error message
20912091+ * is generated.
20922092+ *
20932093+ * ```proto
20942094+ * message MyFixed32 {
20952095+ * // value must be in list [1, 2, 3]
20962096+ * fixed32 value = 1 [(buf.validate.field).fixed32 = { in: [1, 2, 3] }];
20972097+ * }
20982098+ * ```
20992099+ *
21002100+ * @generated from field: repeated fixed32 in = 6;
21012101+ */
21022102+ in: number[];
21032103+21042104+ /**
21052105+ * `not_in` requires the field value to not be equal to any of the specified
21062106+ * values. If the field value is one of the specified values, an error
21072107+ * message is generated.
21082108+ *
21092109+ * ```proto
21102110+ * message MyFixed32 {
21112111+ * // value must not be in list [1, 2, 3]
21122112+ * fixed32 value = 1 [(buf.validate.field).fixed32 = { not_in: [1, 2, 3] }];
21132113+ * }
21142114+ * ```
21152115+ *
21162116+ * @generated from field: repeated fixed32 not_in = 7;
21172117+ */
21182118+ notIn: number[];
21192119+21202120+ /**
21212121+ * `example` specifies values that the field may have. These values SHOULD
21222122+ * conform to other rules. `example` values will not impact validation
21232123+ * but may be used as helpful guidance on how to populate the given field.
21242124+ *
21252125+ * ```proto
21262126+ * message MyFixed32 {
21272127+ * fixed32 value = 1 [
21282128+ * (buf.validate.field).fixed32.example = 1,
21292129+ * (buf.validate.field).fixed32.example = 2
21302130+ * ];
21312131+ * }
21322132+ * ```
21332133+ *
21342134+ * @generated from field: repeated fixed32 example = 8;
21352135+ */
21362136+ example: number[];
21372137+};
21382138+21392139+/**
21402140+ * Describes the message buf.validate.Fixed32Rules.
21412141+ * Use `create(Fixed32RulesSchema)` to create a new message.
21422142+ */
21432143+export const Fixed32RulesSchema: GenMessage<Fixed32Rules> = /*@__PURE__*/
21442144+ messageDesc(file_buf_validate_validate, 14);
21452145+21462146+/**
21472147+ * Fixed64Rules describes the rules applied to `fixed64` values.
21482148+ *
21492149+ * @generated from message buf.validate.Fixed64Rules
21502150+ */
21512151+export type Fixed64Rules = Message<"buf.validate.Fixed64Rules"> & {
21522152+ /**
21532153+ * `const` requires the field value to exactly match the specified value. If
21542154+ * the field value doesn't match, an error message is generated.
21552155+ *
21562156+ * ```proto
21572157+ * message MyFixed64 {
21582158+ * // value must equal 42
21592159+ * fixed64 value = 1 [(buf.validate.field).fixed64.const = 42];
21602160+ * }
21612161+ * ```
21622162+ *
21632163+ * @generated from field: optional fixed64 const = 1;
21642164+ */
21652165+ const: bigint;
21662166+21672167+ /**
21682168+ * @generated from oneof buf.validate.Fixed64Rules.less_than
21692169+ */
21702170+ lessThan: {
21712171+ /**
21722172+ * `lt` requires the field value to be less than the specified value (field <
21732173+ * value). If the field value is equal to or greater than the specified value,
21742174+ * an error message is generated.
21752175+ *
21762176+ * ```proto
21772177+ * message MyFixed64 {
21782178+ * // value must be less than 10
21792179+ * fixed64 value = 1 [(buf.validate.field).fixed64.lt = 10];
21802180+ * }
21812181+ * ```
21822182+ *
21832183+ * @generated from field: fixed64 lt = 2;
21842184+ */
21852185+ value: bigint;
21862186+ case: "lt";
21872187+ } | {
21882188+ /**
21892189+ * `lte` requires the field value to be less than or equal to the specified
21902190+ * value (field <= value). If the field value is greater than the specified
21912191+ * value, an error message is generated.
21922192+ *
21932193+ * ```proto
21942194+ * message MyFixed64 {
21952195+ * // value must be less than or equal to 10
21962196+ * fixed64 value = 1 [(buf.validate.field).fixed64.lte = 10];
21972197+ * }
21982198+ * ```
21992199+ *
22002200+ * @generated from field: fixed64 lte = 3;
22012201+ */
22022202+ value: bigint;
22032203+ case: "lte";
22042204+ } | { case: undefined; value?: undefined };
22052205+22062206+ /**
22072207+ * @generated from oneof buf.validate.Fixed64Rules.greater_than
22082208+ */
22092209+ greaterThan: {
22102210+ /**
22112211+ * `gt` requires the field value to be greater than the specified value
22122212+ * (exclusive). If the value of `gt` is larger than a specified `lt` or
22132213+ * `lte`, the range is reversed, and the field value must be outside the
22142214+ * specified range. If the field value doesn't meet the required conditions,
22152215+ * an error message is generated.
22162216+ *
22172217+ * ```proto
22182218+ * message MyFixed64 {
22192219+ * // value must be greater than 5 [fixed64.gt]
22202220+ * fixed64 value = 1 [(buf.validate.field).fixed64.gt = 5];
22212221+ *
22222222+ * // value must be greater than 5 and less than 10 [fixed64.gt_lt]
22232223+ * fixed64 other_value = 2 [(buf.validate.field).fixed64 = { gt: 5, lt: 10 }];
22242224+ *
22252225+ * // value must be greater than 10 or less than 5 [fixed64.gt_lt_exclusive]
22262226+ * fixed64 another_value = 3 [(buf.validate.field).fixed64 = { gt: 10, lt: 5 }];
22272227+ * }
22282228+ * ```
22292229+ *
22302230+ * @generated from field: fixed64 gt = 4;
22312231+ */
22322232+ value: bigint;
22332233+ case: "gt";
22342234+ } | {
22352235+ /**
22362236+ * `gte` requires the field value to be greater than or equal to the specified
22372237+ * value (exclusive). If the value of `gte` is larger than a specified `lt`
22382238+ * or `lte`, the range is reversed, and the field value must be outside the
22392239+ * specified range. If the field value doesn't meet the required conditions,
22402240+ * an error message is generated.
22412241+ *
22422242+ * ```proto
22432243+ * message MyFixed64 {
22442244+ * // value must be greater than or equal to 5 [fixed64.gte]
22452245+ * fixed64 value = 1 [(buf.validate.field).fixed64.gte = 5];
22462246+ *
22472247+ * // value must be greater than or equal to 5 and less than 10 [fixed64.gte_lt]
22482248+ * fixed64 other_value = 2 [(buf.validate.field).fixed64 = { gte: 5, lt: 10 }];
22492249+ *
22502250+ * // value must be greater than or equal to 10 or less than 5 [fixed64.gte_lt_exclusive]
22512251+ * fixed64 another_value = 3 [(buf.validate.field).fixed64 = { gte: 10, lt: 5 }];
22522252+ * }
22532253+ * ```
22542254+ *
22552255+ * @generated from field: fixed64 gte = 5;
22562256+ */
22572257+ value: bigint;
22582258+ case: "gte";
22592259+ } | { case: undefined; value?: undefined };
22602260+22612261+ /**
22622262+ * `in` requires the field value to be equal to one of the specified values.
22632263+ * If the field value isn't one of the specified values, an error message is
22642264+ * generated.
22652265+ *
22662266+ * ```proto
22672267+ * message MyFixed64 {
22682268+ * // value must be in list [1, 2, 3]
22692269+ * fixed64 value = 1 [(buf.validate.field).fixed64 = { in: [1, 2, 3] }];
22702270+ * }
22712271+ * ```
22722272+ *
22732273+ * @generated from field: repeated fixed64 in = 6;
22742274+ */
22752275+ in: bigint[];
22762276+22772277+ /**
22782278+ * `not_in` requires the field value to not be equal to any of the specified
22792279+ * values. If the field value is one of the specified values, an error
22802280+ * message is generated.
22812281+ *
22822282+ * ```proto
22832283+ * message MyFixed64 {
22842284+ * // value must not be in list [1, 2, 3]
22852285+ * fixed64 value = 1 [(buf.validate.field).fixed64 = { not_in: [1, 2, 3] }];
22862286+ * }
22872287+ * ```
22882288+ *
22892289+ * @generated from field: repeated fixed64 not_in = 7;
22902290+ */
22912291+ notIn: bigint[];
22922292+22932293+ /**
22942294+ * `example` specifies values that the field may have. These values SHOULD
22952295+ * conform to other rules. `example` values will not impact validation
22962296+ * but may be used as helpful guidance on how to populate the given field.
22972297+ *
22982298+ * ```proto
22992299+ * message MyFixed64 {
23002300+ * fixed64 value = 1 [
23012301+ * (buf.validate.field).fixed64.example = 1,
23022302+ * (buf.validate.field).fixed64.example = 2
23032303+ * ];
23042304+ * }
23052305+ * ```
23062306+ *
23072307+ * @generated from field: repeated fixed64 example = 8;
23082308+ */
23092309+ example: bigint[];
23102310+};
23112311+23122312+/**
23132313+ * Describes the message buf.validate.Fixed64Rules.
23142314+ * Use `create(Fixed64RulesSchema)` to create a new message.
23152315+ */
23162316+export const Fixed64RulesSchema: GenMessage<Fixed64Rules> = /*@__PURE__*/
23172317+ messageDesc(file_buf_validate_validate, 15);
23182318+23192319+/**
23202320+ * SFixed32Rules describes the rules applied to `fixed32` values.
23212321+ *
23222322+ * @generated from message buf.validate.SFixed32Rules
23232323+ */
23242324+export type SFixed32Rules = Message<"buf.validate.SFixed32Rules"> & {
23252325+ /**
23262326+ * `const` requires the field value to exactly match the specified value. If
23272327+ * the field value doesn't match, an error message is generated.
23282328+ *
23292329+ * ```proto
23302330+ * message MySFixed32 {
23312331+ * // value must equal 42
23322332+ * sfixed32 value = 1 [(buf.validate.field).sfixed32.const = 42];
23332333+ * }
23342334+ * ```
23352335+ *
23362336+ * @generated from field: optional sfixed32 const = 1;
23372337+ */
23382338+ const: number;
23392339+23402340+ /**
23412341+ * @generated from oneof buf.validate.SFixed32Rules.less_than
23422342+ */
23432343+ lessThan: {
23442344+ /**
23452345+ * `lt` requires the field value to be less than the specified value (field <
23462346+ * value). If the field value is equal to or greater than the specified value,
23472347+ * an error message is generated.
23482348+ *
23492349+ * ```proto
23502350+ * message MySFixed32 {
23512351+ * // value must be less than 10
23522352+ * sfixed32 value = 1 [(buf.validate.field).sfixed32.lt = 10];
23532353+ * }
23542354+ * ```
23552355+ *
23562356+ * @generated from field: sfixed32 lt = 2;
23572357+ */
23582358+ value: number;
23592359+ case: "lt";
23602360+ } | {
23612361+ /**
23622362+ * `lte` requires the field value to be less than or equal to the specified
23632363+ * value (field <= value). If the field value is greater than the specified
23642364+ * value, an error message is generated.
23652365+ *
23662366+ * ```proto
23672367+ * message MySFixed32 {
23682368+ * // value must be less than or equal to 10
23692369+ * sfixed32 value = 1 [(buf.validate.field).sfixed32.lte = 10];
23702370+ * }
23712371+ * ```
23722372+ *
23732373+ * @generated from field: sfixed32 lte = 3;
23742374+ */
23752375+ value: number;
23762376+ case: "lte";
23772377+ } | { case: undefined; value?: undefined };
23782378+23792379+ /**
23802380+ * @generated from oneof buf.validate.SFixed32Rules.greater_than
23812381+ */
23822382+ greaterThan: {
23832383+ /**
23842384+ * `gt` requires the field value to be greater than the specified value
23852385+ * (exclusive). If the value of `gt` is larger than a specified `lt` or
23862386+ * `lte`, the range is reversed, and the field value must be outside the
23872387+ * specified range. If the field value doesn't meet the required conditions,
23882388+ * an error message is generated.
23892389+ *
23902390+ * ```proto
23912391+ * message MySFixed32 {
23922392+ * // value must be greater than 5 [sfixed32.gt]
23932393+ * sfixed32 value = 1 [(buf.validate.field).sfixed32.gt = 5];
23942394+ *
23952395+ * // value must be greater than 5 and less than 10 [sfixed32.gt_lt]
23962396+ * sfixed32 other_value = 2 [(buf.validate.field).sfixed32 = { gt: 5, lt: 10 }];
23972397+ *
23982398+ * // value must be greater than 10 or less than 5 [sfixed32.gt_lt_exclusive]
23992399+ * sfixed32 another_value = 3 [(buf.validate.field).sfixed32 = { gt: 10, lt: 5 }];
24002400+ * }
24012401+ * ```
24022402+ *
24032403+ * @generated from field: sfixed32 gt = 4;
24042404+ */
24052405+ value: number;
24062406+ case: "gt";
24072407+ } | {
24082408+ /**
24092409+ * `gte` requires the field value to be greater than or equal to the specified
24102410+ * value (exclusive). If the value of `gte` is larger than a specified `lt`
24112411+ * or `lte`, the range is reversed, and the field value must be outside the
24122412+ * specified range. If the field value doesn't meet the required conditions,
24132413+ * an error message is generated.
24142414+ *
24152415+ * ```proto
24162416+ * message MySFixed32 {
24172417+ * // value must be greater than or equal to 5 [sfixed32.gte]
24182418+ * sfixed32 value = 1 [(buf.validate.field).sfixed32.gte = 5];
24192419+ *
24202420+ * // value must be greater than or equal to 5 and less than 10 [sfixed32.gte_lt]
24212421+ * sfixed32 other_value = 2 [(buf.validate.field).sfixed32 = { gte: 5, lt: 10 }];
24222422+ *
24232423+ * // value must be greater than or equal to 10 or less than 5 [sfixed32.gte_lt_exclusive]
24242424+ * sfixed32 another_value = 3 [(buf.validate.field).sfixed32 = { gte: 10, lt: 5 }];
24252425+ * }
24262426+ * ```
24272427+ *
24282428+ * @generated from field: sfixed32 gte = 5;
24292429+ */
24302430+ value: number;
24312431+ case: "gte";
24322432+ } | { case: undefined; value?: undefined };
24332433+24342434+ /**
24352435+ * `in` requires the field value to be equal to one of the specified values.
24362436+ * If the field value isn't one of the specified values, an error message is
24372437+ * generated.
24382438+ *
24392439+ * ```proto
24402440+ * message MySFixed32 {
24412441+ * // value must be in list [1, 2, 3]
24422442+ * sfixed32 value = 1 [(buf.validate.field).sfixed32 = { in: [1, 2, 3] }];
24432443+ * }
24442444+ * ```
24452445+ *
24462446+ * @generated from field: repeated sfixed32 in = 6;
24472447+ */
24482448+ in: number[];
24492449+24502450+ /**
24512451+ * `not_in` requires the field value to not be equal to any of the specified
24522452+ * values. If the field value is one of the specified values, an error
24532453+ * message is generated.
24542454+ *
24552455+ * ```proto
24562456+ * message MySFixed32 {
24572457+ * // value must not be in list [1, 2, 3]
24582458+ * sfixed32 value = 1 [(buf.validate.field).sfixed32 = { not_in: [1, 2, 3] }];
24592459+ * }
24602460+ * ```
24612461+ *
24622462+ * @generated from field: repeated sfixed32 not_in = 7;
24632463+ */
24642464+ notIn: number[];
24652465+24662466+ /**
24672467+ * `example` specifies values that the field may have. These values SHOULD
24682468+ * conform to other rules. `example` values will not impact validation
24692469+ * but may be used as helpful guidance on how to populate the given field.
24702470+ *
24712471+ * ```proto
24722472+ * message MySFixed32 {
24732473+ * sfixed32 value = 1 [
24742474+ * (buf.validate.field).sfixed32.example = 1,
24752475+ * (buf.validate.field).sfixed32.example = 2
24762476+ * ];
24772477+ * }
24782478+ * ```
24792479+ *
24802480+ * @generated from field: repeated sfixed32 example = 8;
24812481+ */
24822482+ example: number[];
24832483+};
24842484+24852485+/**
24862486+ * Describes the message buf.validate.SFixed32Rules.
24872487+ * Use `create(SFixed32RulesSchema)` to create a new message.
24882488+ */
24892489+export const SFixed32RulesSchema: GenMessage<SFixed32Rules> = /*@__PURE__*/
24902490+ messageDesc(file_buf_validate_validate, 16);
24912491+24922492+/**
24932493+ * SFixed64Rules describes the rules applied to `fixed64` values.
24942494+ *
24952495+ * @generated from message buf.validate.SFixed64Rules
24962496+ */
24972497+export type SFixed64Rules = Message<"buf.validate.SFixed64Rules"> & {
24982498+ /**
24992499+ * `const` requires the field value to exactly match the specified value. If
25002500+ * the field value doesn't match, an error message is generated.
25012501+ *
25022502+ * ```proto
25032503+ * message MySFixed64 {
25042504+ * // value must equal 42
25052505+ * sfixed64 value = 1 [(buf.validate.field).sfixed64.const = 42];
25062506+ * }
25072507+ * ```
25082508+ *
25092509+ * @generated from field: optional sfixed64 const = 1;
25102510+ */
25112511+ const: bigint;
25122512+25132513+ /**
25142514+ * @generated from oneof buf.validate.SFixed64Rules.less_than
25152515+ */
25162516+ lessThan: {
25172517+ /**
25182518+ * `lt` requires the field value to be less than the specified value (field <
25192519+ * value). If the field value is equal to or greater than the specified value,
25202520+ * an error message is generated.
25212521+ *
25222522+ * ```proto
25232523+ * message MySFixed64 {
25242524+ * // value must be less than 10
25252525+ * sfixed64 value = 1 [(buf.validate.field).sfixed64.lt = 10];
25262526+ * }
25272527+ * ```
25282528+ *
25292529+ * @generated from field: sfixed64 lt = 2;
25302530+ */
25312531+ value: bigint;
25322532+ case: "lt";
25332533+ } | {
25342534+ /**
25352535+ * `lte` requires the field value to be less than or equal to the specified
25362536+ * value (field <= value). If the field value is greater than the specified
25372537+ * value, an error message is generated.
25382538+ *
25392539+ * ```proto
25402540+ * message MySFixed64 {
25412541+ * // value must be less than or equal to 10
25422542+ * sfixed64 value = 1 [(buf.validate.field).sfixed64.lte = 10];
25432543+ * }
25442544+ * ```
25452545+ *
25462546+ * @generated from field: sfixed64 lte = 3;
25472547+ */
25482548+ value: bigint;
25492549+ case: "lte";
25502550+ } | { case: undefined; value?: undefined };
25512551+25522552+ /**
25532553+ * @generated from oneof buf.validate.SFixed64Rules.greater_than
25542554+ */
25552555+ greaterThan: {
25562556+ /**
25572557+ * `gt` requires the field value to be greater than the specified value
25582558+ * (exclusive). If the value of `gt` is larger than a specified `lt` or
25592559+ * `lte`, the range is reversed, and the field value must be outside the
25602560+ * specified range. If the field value doesn't meet the required conditions,
25612561+ * an error message is generated.
25622562+ *
25632563+ * ```proto
25642564+ * message MySFixed64 {
25652565+ * // value must be greater than 5 [sfixed64.gt]
25662566+ * sfixed64 value = 1 [(buf.validate.field).sfixed64.gt = 5];
25672567+ *
25682568+ * // value must be greater than 5 and less than 10 [sfixed64.gt_lt]
25692569+ * sfixed64 other_value = 2 [(buf.validate.field).sfixed64 = { gt: 5, lt: 10 }];
25702570+ *
25712571+ * // value must be greater than 10 or less than 5 [sfixed64.gt_lt_exclusive]
25722572+ * sfixed64 another_value = 3 [(buf.validate.field).sfixed64 = { gt: 10, lt: 5 }];
25732573+ * }
25742574+ * ```
25752575+ *
25762576+ * @generated from field: sfixed64 gt = 4;
25772577+ */
25782578+ value: bigint;
25792579+ case: "gt";
25802580+ } | {
25812581+ /**
25822582+ * `gte` requires the field value to be greater than or equal to the specified
25832583+ * value (exclusive). If the value of `gte` is larger than a specified `lt`
25842584+ * or `lte`, the range is reversed, and the field value must be outside the
25852585+ * specified range. If the field value doesn't meet the required conditions,
25862586+ * an error message is generated.
25872587+ *
25882588+ * ```proto
25892589+ * message MySFixed64 {
25902590+ * // value must be greater than or equal to 5 [sfixed64.gte]
25912591+ * sfixed64 value = 1 [(buf.validate.field).sfixed64.gte = 5];
25922592+ *
25932593+ * // value must be greater than or equal to 5 and less than 10 [sfixed64.gte_lt]
25942594+ * sfixed64 other_value = 2 [(buf.validate.field).sfixed64 = { gte: 5, lt: 10 }];
25952595+ *
25962596+ * // value must be greater than or equal to 10 or less than 5 [sfixed64.gte_lt_exclusive]
25972597+ * sfixed64 another_value = 3 [(buf.validate.field).sfixed64 = { gte: 10, lt: 5 }];
25982598+ * }
25992599+ * ```
26002600+ *
26012601+ * @generated from field: sfixed64 gte = 5;
26022602+ */
26032603+ value: bigint;
26042604+ case: "gte";
26052605+ } | { case: undefined; value?: undefined };
26062606+26072607+ /**
26082608+ * `in` requires the field value to be equal to one of the specified values.
26092609+ * If the field value isn't one of the specified values, an error message is
26102610+ * generated.
26112611+ *
26122612+ * ```proto
26132613+ * message MySFixed64 {
26142614+ * // value must be in list [1, 2, 3]
26152615+ * sfixed64 value = 1 [(buf.validate.field).sfixed64 = { in: [1, 2, 3] }];
26162616+ * }
26172617+ * ```
26182618+ *
26192619+ * @generated from field: repeated sfixed64 in = 6;
26202620+ */
26212621+ in: bigint[];
26222622+26232623+ /**
26242624+ * `not_in` requires the field value to not be equal to any of the specified
26252625+ * values. If the field value is one of the specified values, an error
26262626+ * message is generated.
26272627+ *
26282628+ * ```proto
26292629+ * message MySFixed64 {
26302630+ * // value must not be in list [1, 2, 3]
26312631+ * sfixed64 value = 1 [(buf.validate.field).sfixed64 = { not_in: [1, 2, 3] }];
26322632+ * }
26332633+ * ```
26342634+ *
26352635+ * @generated from field: repeated sfixed64 not_in = 7;
26362636+ */
26372637+ notIn: bigint[];
26382638+26392639+ /**
26402640+ * `example` specifies values that the field may have. These values SHOULD
26412641+ * conform to other rules. `example` values will not impact validation
26422642+ * but may be used as helpful guidance on how to populate the given field.
26432643+ *
26442644+ * ```proto
26452645+ * message MySFixed64 {
26462646+ * sfixed64 value = 1 [
26472647+ * (buf.validate.field).sfixed64.example = 1,
26482648+ * (buf.validate.field).sfixed64.example = 2
26492649+ * ];
26502650+ * }
26512651+ * ```
26522652+ *
26532653+ * @generated from field: repeated sfixed64 example = 8;
26542654+ */
26552655+ example: bigint[];
26562656+};
26572657+26582658+/**
26592659+ * Describes the message buf.validate.SFixed64Rules.
26602660+ * Use `create(SFixed64RulesSchema)` to create a new message.
26612661+ */
26622662+export const SFixed64RulesSchema: GenMessage<SFixed64Rules> = /*@__PURE__*/
26632663+ messageDesc(file_buf_validate_validate, 17);
26642664+26652665+/**
26662666+ * BoolRules describes the rules applied to `bool` values. These rules
26672667+ * may also be applied to the `google.protobuf.BoolValue` Well-Known-Type.
26682668+ *
26692669+ * @generated from message buf.validate.BoolRules
26702670+ */
26712671+export type BoolRules = Message<"buf.validate.BoolRules"> & {
26722672+ /**
26732673+ * `const` requires the field value to exactly match the specified boolean value.
26742674+ * If the field value doesn't match, an error message is generated.
26752675+ *
26762676+ * ```proto
26772677+ * message MyBool {
26782678+ * // value must equal true
26792679+ * bool value = 1 [(buf.validate.field).bool.const = true];
26802680+ * }
26812681+ * ```
26822682+ *
26832683+ * @generated from field: optional bool const = 1;
26842684+ */
26852685+ const: boolean;
26862686+26872687+ /**
26882688+ * `example` specifies values that the field may have. These values SHOULD
26892689+ * conform to other rules. `example` values will not impact validation
26902690+ * but may be used as helpful guidance on how to populate the given field.
26912691+ *
26922692+ * ```proto
26932693+ * message MyBool {
26942694+ * bool value = 1 [
26952695+ * (buf.validate.field).bool.example = 1,
26962696+ * (buf.validate.field).bool.example = 2
26972697+ * ];
26982698+ * }
26992699+ * ```
27002700+ *
27012701+ * @generated from field: repeated bool example = 2;
27022702+ */
27032703+ example: boolean[];
27042704+};
27052705+27062706+/**
27072707+ * Describes the message buf.validate.BoolRules.
27082708+ * Use `create(BoolRulesSchema)` to create a new message.
27092709+ */
27102710+export const BoolRulesSchema: GenMessage<BoolRules> = /*@__PURE__*/
27112711+ messageDesc(file_buf_validate_validate, 18);
27122712+27132713+/**
27142714+ * StringRules describes the rules applied to `string` values These
27152715+ * rules may also be applied to the `google.protobuf.StringValue` Well-Known-Type.
27162716+ *
27172717+ * @generated from message buf.validate.StringRules
27182718+ */
27192719+export type StringRules = Message<"buf.validate.StringRules"> & {
27202720+ /**
27212721+ * `const` requires the field value to exactly match the specified value. If
27222722+ * the field value doesn't match, an error message is generated.
27232723+ *
27242724+ * ```proto
27252725+ * message MyString {
27262726+ * // value must equal `hello`
27272727+ * string value = 1 [(buf.validate.field).string.const = "hello"];
27282728+ * }
27292729+ * ```
27302730+ *
27312731+ * @generated from field: optional string const = 1;
27322732+ */
27332733+ const: string;
27342734+27352735+ /**
27362736+ * `len` dictates that the field value must have the specified
27372737+ * number of characters (Unicode code points), which may differ from the number
27382738+ * of bytes in the string. If the field value does not meet the specified
27392739+ * length, an error message will be generated.
27402740+ *
27412741+ * ```proto
27422742+ * message MyString {
27432743+ * // value length must be 5 characters
27442744+ * string value = 1 [(buf.validate.field).string.len = 5];
27452745+ * }
27462746+ * ```
27472747+ *
27482748+ * @generated from field: optional uint64 len = 19;
27492749+ */
27502750+ len: bigint;
27512751+27522752+ /**
27532753+ * `min_len` specifies that the field value must have at least the specified
27542754+ * number of characters (Unicode code points), which may differ from the number
27552755+ * of bytes in the string. If the field value contains fewer characters, an error
27562756+ * message will be generated.
27572757+ *
27582758+ * ```proto
27592759+ * message MyString {
27602760+ * // value length must be at least 3 characters
27612761+ * string value = 1 [(buf.validate.field).string.min_len = 3];
27622762+ * }
27632763+ * ```
27642764+ *
27652765+ * @generated from field: optional uint64 min_len = 2;
27662766+ */
27672767+ minLen: bigint;
27682768+27692769+ /**
27702770+ * `max_len` specifies that the field value must have no more than the specified
27712771+ * number of characters (Unicode code points), which may differ from the
27722772+ * number of bytes in the string. If the field value contains more characters,
27732773+ * an error message will be generated.
27742774+ *
27752775+ * ```proto
27762776+ * message MyString {
27772777+ * // value length must be at most 10 characters
27782778+ * string value = 1 [(buf.validate.field).string.max_len = 10];
27792779+ * }
27802780+ * ```
27812781+ *
27822782+ * @generated from field: optional uint64 max_len = 3;
27832783+ */
27842784+ maxLen: bigint;
27852785+27862786+ /**
27872787+ * `len_bytes` dictates that the field value must have the specified number of
27882788+ * bytes. If the field value does not match the specified length in bytes,
27892789+ * an error message will be generated.
27902790+ *
27912791+ * ```proto
27922792+ * message MyString {
27932793+ * // value length must be 6 bytes
27942794+ * string value = 1 [(buf.validate.field).string.len_bytes = 6];
27952795+ * }
27962796+ * ```
27972797+ *
27982798+ * @generated from field: optional uint64 len_bytes = 20;
27992799+ */
28002800+ lenBytes: bigint;
28012801+28022802+ /**
28032803+ * `min_bytes` specifies that the field value must have at least the specified
28042804+ * number of bytes. If the field value contains fewer bytes, an error message
28052805+ * will be generated.
28062806+ *
28072807+ * ```proto
28082808+ * message MyString {
28092809+ * // value length must be at least 4 bytes
28102810+ * string value = 1 [(buf.validate.field).string.min_bytes = 4];
28112811+ * }
28122812+ *
28132813+ * ```
28142814+ *
28152815+ * @generated from field: optional uint64 min_bytes = 4;
28162816+ */
28172817+ minBytes: bigint;
28182818+28192819+ /**
28202820+ * `max_bytes` specifies that the field value must have no more than the
28212821+ * specified number of bytes. If the field value contains more bytes, an
28222822+ * error message will be generated.
28232823+ *
28242824+ * ```proto
28252825+ * message MyString {
28262826+ * // value length must be at most 8 bytes
28272827+ * string value = 1 [(buf.validate.field).string.max_bytes = 8];
28282828+ * }
28292829+ * ```
28302830+ *
28312831+ * @generated from field: optional uint64 max_bytes = 5;
28322832+ */
28332833+ maxBytes: bigint;
28342834+28352835+ /**
28362836+ * `pattern` specifies that the field value must match the specified
28372837+ * regular expression (RE2 syntax), with the expression provided without any
28382838+ * delimiters. If the field value doesn't match the regular expression, an
28392839+ * error message will be generated.
28402840+ *
28412841+ * ```proto
28422842+ * message MyString {
28432843+ * // value does not match regex pattern `^[a-zA-Z]//$`
28442844+ * string value = 1 [(buf.validate.field).string.pattern = "^[a-zA-Z]//$"];
28452845+ * }
28462846+ * ```
28472847+ *
28482848+ * @generated from field: optional string pattern = 6;
28492849+ */
28502850+ pattern: string;
28512851+28522852+ /**
28532853+ * `prefix` specifies that the field value must have the
28542854+ * specified substring at the beginning of the string. If the field value
28552855+ * doesn't start with the specified prefix, an error message will be
28562856+ * generated.
28572857+ *
28582858+ * ```proto
28592859+ * message MyString {
28602860+ * // value does not have prefix `pre`
28612861+ * string value = 1 [(buf.validate.field).string.prefix = "pre"];
28622862+ * }
28632863+ * ```
28642864+ *
28652865+ * @generated from field: optional string prefix = 7;
28662866+ */
28672867+ prefix: string;
28682868+28692869+ /**
28702870+ * `suffix` specifies that the field value must have the
28712871+ * specified substring at the end of the string. If the field value doesn't
28722872+ * end with the specified suffix, an error message will be generated.
28732873+ *
28742874+ * ```proto
28752875+ * message MyString {
28762876+ * // value does not have suffix `post`
28772877+ * string value = 1 [(buf.validate.field).string.suffix = "post"];
28782878+ * }
28792879+ * ```
28802880+ *
28812881+ * @generated from field: optional string suffix = 8;
28822882+ */
28832883+ suffix: string;
28842884+28852885+ /**
28862886+ * `contains` specifies that the field value must have the
28872887+ * specified substring anywhere in the string. If the field value doesn't
28882888+ * contain the specified substring, an error message will be generated.
28892889+ *
28902890+ * ```proto
28912891+ * message MyString {
28922892+ * // value does not contain substring `inside`.
28932893+ * string value = 1 [(buf.validate.field).string.contains = "inside"];
28942894+ * }
28952895+ * ```
28962896+ *
28972897+ * @generated from field: optional string contains = 9;
28982898+ */
28992899+ contains: string;
29002900+29012901+ /**
29022902+ * `not_contains` specifies that the field value must not have the
29032903+ * specified substring anywhere in the string. If the field value contains
29042904+ * the specified substring, an error message will be generated.
29052905+ *
29062906+ * ```proto
29072907+ * message MyString {
29082908+ * // value contains substring `inside`.
29092909+ * string value = 1 [(buf.validate.field).string.not_contains = "inside"];
29102910+ * }
29112911+ * ```
29122912+ *
29132913+ * @generated from field: optional string not_contains = 23;
29142914+ */
29152915+ notContains: string;
29162916+29172917+ /**
29182918+ * `in` specifies that the field value must be equal to one of the specified
29192919+ * values. If the field value isn't one of the specified values, an error
29202920+ * message will be generated.
29212921+ *
29222922+ * ```proto
29232923+ * message MyString {
29242924+ * // value must be in list ["apple", "banana"]
29252925+ * string value = 1 [(buf.validate.field).string.in = "apple", (buf.validate.field).string.in = "banana"];
29262926+ * }
29272927+ * ```
29282928+ *
29292929+ * @generated from field: repeated string in = 10;
29302930+ */
29312931+ in: string[];
29322932+29332933+ /**
29342934+ * `not_in` specifies that the field value cannot be equal to any
29352935+ * of the specified values. If the field value is one of the specified values,
29362936+ * an error message will be generated.
29372937+ * ```proto
29382938+ * message MyString {
29392939+ * // value must not be in list ["orange", "grape"]
29402940+ * string value = 1 [(buf.validate.field).string.not_in = "orange", (buf.validate.field).string.not_in = "grape"];
29412941+ * }
29422942+ * ```
29432943+ *
29442944+ * @generated from field: repeated string not_in = 11;
29452945+ */
29462946+ notIn: string[];
29472947+29482948+ /**
29492949+ * `WellKnown` rules provide advanced rules against common string
29502950+ * patterns.
29512951+ *
29522952+ * @generated from oneof buf.validate.StringRules.well_known
29532953+ */
29542954+ wellKnown: {
29552955+ /**
29562956+ * `email` specifies that the field value must be a valid email address, for
29572957+ * example "foo@example.com".
29582958+ *
29592959+ * Conforms to the definition for a valid email address from the [HTML standard](https://html.spec.whatwg.org/multipage/input.html#valid-e-mail-address).
29602960+ * Note that this standard willfully deviates from [RFC 5322](https://datatracker.ietf.org/doc/html/rfc5322),
29612961+ * which allows many unexpected forms of email addresses and will easily match
29622962+ * a typographical error.
29632963+ *
29642964+ * If the field value isn't a valid email address, an error message will be generated.
29652965+ *
29662966+ * ```proto
29672967+ * message MyString {
29682968+ * // value must be a valid email address
29692969+ * string value = 1 [(buf.validate.field).string.email = true];
29702970+ * }
29712971+ * ```
29722972+ *
29732973+ * @generated from field: bool email = 12;
29742974+ */
29752975+ value: boolean;
29762976+ case: "email";
29772977+ } | {
29782978+ /**
29792979+ * `hostname` specifies that the field value must be a valid hostname, for
29802980+ * example "foo.example.com".
29812981+ *
29822982+ * A valid hostname follows the rules below:
29832983+ * - The name consists of one or more labels, separated by a dot (".").
29842984+ * - Each label can be 1 to 63 alphanumeric characters.
29852985+ * - A label can contain hyphens ("-"), but must not start or end with a hyphen.
29862986+ * - The right-most label must not be digits only.
29872987+ * - The name can have a trailing dot—for example, "foo.example.com.".
29882988+ * - The name can be 253 characters at most, excluding the optional trailing dot.
29892989+ *
29902990+ * If the field value isn't a valid hostname, an error message will be generated.
29912991+ *
29922992+ * ```proto
29932993+ * message MyString {
29942994+ * // value must be a valid hostname
29952995+ * string value = 1 [(buf.validate.field).string.hostname = true];
29962996+ * }
29972997+ * ```
29982998+ *
29992999+ * @generated from field: bool hostname = 13;
30003000+ */
30013001+ value: boolean;
30023002+ case: "hostname";
30033003+ } | {
30043004+ /**
30053005+ * `ip` specifies that the field value must be a valid IP (v4 or v6) address.
30063006+ *
30073007+ * IPv4 addresses are expected in the dotted decimal format—for example, "192.168.5.21".
30083008+ * IPv6 addresses are expected in their text representation—for example, "::1",
30093009+ * or "2001:0DB8:ABCD:0012::0".
30103010+ *
30113011+ * Both formats are well-defined in the internet standard [RFC 3986](https://datatracker.ietf.org/doc/html/rfc3986).
30123012+ * Zone identifiers for IPv6 addresses (for example, "fe80::a%en1") are supported.
30133013+ *
30143014+ * If the field value isn't a valid IP address, an error message will be
30153015+ * generated.
30163016+ *
30173017+ * ```proto
30183018+ * message MyString {
30193019+ * // value must be a valid IP address
30203020+ * string value = 1 [(buf.validate.field).string.ip = true];
30213021+ * }
30223022+ * ```
30233023+ *
30243024+ * @generated from field: bool ip = 14;
30253025+ */
30263026+ value: boolean;
30273027+ case: "ip";
30283028+ } | {
30293029+ /**
30303030+ * `ipv4` specifies that the field value must be a valid IPv4 address—for
30313031+ * example "192.168.5.21". If the field value isn't a valid IPv4 address, an
30323032+ * error message will be generated.
30333033+ *
30343034+ * ```proto
30353035+ * message MyString {
30363036+ * // value must be a valid IPv4 address
30373037+ * string value = 1 [(buf.validate.field).string.ipv4 = true];
30383038+ * }
30393039+ * ```
30403040+ *
30413041+ * @generated from field: bool ipv4 = 15;
30423042+ */
30433043+ value: boolean;
30443044+ case: "ipv4";
30453045+ } | {
30463046+ /**
30473047+ * `ipv6` specifies that the field value must be a valid IPv6 address—for
30483048+ * example "::1", or "d7a:115c:a1e0:ab12:4843:cd96:626b:430b". If the field
30493049+ * value is not a valid IPv6 address, an error message will be generated.
30503050+ *
30513051+ * ```proto
30523052+ * message MyString {
30533053+ * // value must be a valid IPv6 address
30543054+ * string value = 1 [(buf.validate.field).string.ipv6 = true];
30553055+ * }
30563056+ * ```
30573057+ *
30583058+ * @generated from field: bool ipv6 = 16;
30593059+ */
30603060+ value: boolean;
30613061+ case: "ipv6";
30623062+ } | {
30633063+ /**
30643064+ * `uri` specifies that the field value must be a valid URI, for example
30653065+ * "https://example.com/foo/bar?baz=quux#frag".
30663066+ *
30673067+ * URI is defined in the internet standard [RFC 3986](https://datatracker.ietf.org/doc/html/rfc3986).
30683068+ * Zone Identifiers in IPv6 address literals are supported ([RFC 6874](https://datatracker.ietf.org/doc/html/rfc6874)).
30693069+ *
30703070+ * If the field value isn't a valid URI, an error message will be generated.
30713071+ *
30723072+ * ```proto
30733073+ * message MyString {
30743074+ * // value must be a valid URI
30753075+ * string value = 1 [(buf.validate.field).string.uri = true];
30763076+ * }
30773077+ * ```
30783078+ *
30793079+ * @generated from field: bool uri = 17;
30803080+ */
30813081+ value: boolean;
30823082+ case: "uri";
30833083+ } | {
30843084+ /**
30853085+ * `uri_ref` specifies that the field value must be a valid URI Reference—either
30863086+ * a URI such as "https://example.com/foo/bar?baz=quux#frag", or a Relative
30873087+ * Reference such as "./foo/bar?query".
30883088+ *
30893089+ * URI, URI Reference, and Relative Reference are defined in the internet
30903090+ * standard [RFC 3986](https://datatracker.ietf.org/doc/html/rfc3986). Zone
30913091+ * Identifiers in IPv6 address literals are supported ([RFC 6874](https://datatracker.ietf.org/doc/html/rfc6874)).
30923092+ *
30933093+ * If the field value isn't a valid URI Reference, an error message will be
30943094+ * generated.
30953095+ *
30963096+ * ```proto
30973097+ * message MyString {
30983098+ * // value must be a valid URI Reference
30993099+ * string value = 1 [(buf.validate.field).string.uri_ref = true];
31003100+ * }
31013101+ * ```
31023102+ *
31033103+ * @generated from field: bool uri_ref = 18;
31043104+ */
31053105+ value: boolean;
31063106+ case: "uriRef";
31073107+ } | {
31083108+ /**
31093109+ * `address` specifies that the field value must be either a valid hostname
31103110+ * (for example, "example.com"), or a valid IP (v4 or v6) address (for example,
31113111+ * "192.168.0.1", or "::1"). If the field value isn't a valid hostname or IP,
31123112+ * an error message will be generated.
31133113+ *
31143114+ * ```proto
31153115+ * message MyString {
31163116+ * // value must be a valid hostname, or ip address
31173117+ * string value = 1 [(buf.validate.field).string.address = true];
31183118+ * }
31193119+ * ```
31203120+ *
31213121+ * @generated from field: bool address = 21;
31223122+ */
31233123+ value: boolean;
31243124+ case: "address";
31253125+ } | {
31263126+ /**
31273127+ * `uuid` specifies that the field value must be a valid UUID as defined by
31283128+ * [RFC 4122](https://datatracker.ietf.org/doc/html/rfc4122#section-4.1.2). If the
31293129+ * field value isn't a valid UUID, an error message will be generated.
31303130+ *
31313131+ * ```proto
31323132+ * message MyString {
31333133+ * // value must be a valid UUID
31343134+ * string value = 1 [(buf.validate.field).string.uuid = true];
31353135+ * }
31363136+ * ```
31373137+ *
31383138+ * @generated from field: bool uuid = 22;
31393139+ */
31403140+ value: boolean;
31413141+ case: "uuid";
31423142+ } | {
31433143+ /**
31443144+ * `tuuid` (trimmed UUID) specifies that the field value must be a valid UUID as
31453145+ * defined by [RFC 4122](https://datatracker.ietf.org/doc/html/rfc4122#section-4.1.2) with all dashes
31463146+ * omitted. If the field value isn't a valid UUID without dashes, an error message
31473147+ * will be generated.
31483148+ *
31493149+ * ```proto
31503150+ * message MyString {
31513151+ * // value must be a valid trimmed UUID
31523152+ * string value = 1 [(buf.validate.field).string.tuuid = true];
31533153+ * }
31543154+ * ```
31553155+ *
31563156+ * @generated from field: bool tuuid = 33;
31573157+ */
31583158+ value: boolean;
31593159+ case: "tuuid";
31603160+ } | {
31613161+ /**
31623162+ * `ip_with_prefixlen` specifies that the field value must be a valid IP
31633163+ * (v4 or v6) address with prefix length—for example, "192.168.5.21/16" or
31643164+ * "2001:0DB8:ABCD:0012::F1/64". If the field value isn't a valid IP with
31653165+ * prefix length, an error message will be generated.
31663166+ *
31673167+ * ```proto
31683168+ * message MyString {
31693169+ * // value must be a valid IP with prefix length
31703170+ * string value = 1 [(buf.validate.field).string.ip_with_prefixlen = true];
31713171+ * }
31723172+ * ```
31733173+ *
31743174+ * @generated from field: bool ip_with_prefixlen = 26;
31753175+ */
31763176+ value: boolean;
31773177+ case: "ipWithPrefixlen";
31783178+ } | {
31793179+ /**
31803180+ * `ipv4_with_prefixlen` specifies that the field value must be a valid
31813181+ * IPv4 address with prefix length—for example, "192.168.5.21/16". If the
31823182+ * field value isn't a valid IPv4 address with prefix length, an error
31833183+ * message will be generated.
31843184+ *
31853185+ * ```proto
31863186+ * message MyString {
31873187+ * // value must be a valid IPv4 address with prefix length
31883188+ * string value = 1 [(buf.validate.field).string.ipv4_with_prefixlen = true];
31893189+ * }
31903190+ * ```
31913191+ *
31923192+ * @generated from field: bool ipv4_with_prefixlen = 27;
31933193+ */
31943194+ value: boolean;
31953195+ case: "ipv4WithPrefixlen";
31963196+ } | {
31973197+ /**
31983198+ * `ipv6_with_prefixlen` specifies that the field value must be a valid
31993199+ * IPv6 address with prefix length—for example, "2001:0DB8:ABCD:0012::F1/64".
32003200+ * If the field value is not a valid IPv6 address with prefix length,
32013201+ * an error message will be generated.
32023202+ *
32033203+ * ```proto
32043204+ * message MyString {
32053205+ * // value must be a valid IPv6 address prefix length
32063206+ * string value = 1 [(buf.validate.field).string.ipv6_with_prefixlen = true];
32073207+ * }
32083208+ * ```
32093209+ *
32103210+ * @generated from field: bool ipv6_with_prefixlen = 28;
32113211+ */
32123212+ value: boolean;
32133213+ case: "ipv6WithPrefixlen";
32143214+ } | {
32153215+ /**
32163216+ * `ip_prefix` specifies that the field value must be a valid IP (v4 or v6)
32173217+ * prefix—for example, "192.168.0.0/16" or "2001:0DB8:ABCD:0012::0/64".
32183218+ *
32193219+ * The prefix must have all zeros for the unmasked bits. For example,
32203220+ * "2001:0DB8:ABCD:0012::0/64" designates the left-most 64 bits for the
32213221+ * prefix, and the remaining 64 bits must be zero.
32223222+ *
32233223+ * If the field value isn't a valid IP prefix, an error message will be
32243224+ * generated.
32253225+ *
32263226+ * ```proto
32273227+ * message MyString {
32283228+ * // value must be a valid IP prefix
32293229+ * string value = 1 [(buf.validate.field).string.ip_prefix = true];
32303230+ * }
32313231+ * ```
32323232+ *
32333233+ * @generated from field: bool ip_prefix = 29;
32343234+ */
32353235+ value: boolean;
32363236+ case: "ipPrefix";
32373237+ } | {
32383238+ /**
32393239+ * `ipv4_prefix` specifies that the field value must be a valid IPv4
32403240+ * prefix, for example "192.168.0.0/16".
32413241+ *
32423242+ * The prefix must have all zeros for the unmasked bits. For example,
32433243+ * "192.168.0.0/16" designates the left-most 16 bits for the prefix,
32443244+ * and the remaining 16 bits must be zero.
32453245+ *
32463246+ * If the field value isn't a valid IPv4 prefix, an error message
32473247+ * will be generated.
32483248+ *
32493249+ * ```proto
32503250+ * message MyString {
32513251+ * // value must be a valid IPv4 prefix
32523252+ * string value = 1 [(buf.validate.field).string.ipv4_prefix = true];
32533253+ * }
32543254+ * ```
32553255+ *
32563256+ * @generated from field: bool ipv4_prefix = 30;
32573257+ */
32583258+ value: boolean;
32593259+ case: "ipv4Prefix";
32603260+ } | {
32613261+ /**
32623262+ * `ipv6_prefix` specifies that the field value must be a valid IPv6 prefix—for
32633263+ * example, "2001:0DB8:ABCD:0012::0/64".
32643264+ *
32653265+ * The prefix must have all zeros for the unmasked bits. For example,
32663266+ * "2001:0DB8:ABCD:0012::0/64" designates the left-most 64 bits for the
32673267+ * prefix, and the remaining 64 bits must be zero.
32683268+ *
32693269+ * If the field value is not a valid IPv6 prefix, an error message will be
32703270+ * generated.
32713271+ *
32723272+ * ```proto
32733273+ * message MyString {
32743274+ * // value must be a valid IPv6 prefix
32753275+ * string value = 1 [(buf.validate.field).string.ipv6_prefix = true];
32763276+ * }
32773277+ * ```
32783278+ *
32793279+ * @generated from field: bool ipv6_prefix = 31;
32803280+ */
32813281+ value: boolean;
32823282+ case: "ipv6Prefix";
32833283+ } | {
32843284+ /**
32853285+ * `host_and_port` specifies that the field value must be valid host/port
32863286+ * pair—for example, "example.com:8080".
32873287+ *
32883288+ * The host can be one of:
32893289+ * - An IPv4 address in dotted decimal format—for example, "192.168.5.21".
32903290+ * - An IPv6 address enclosed in square brackets—for example, "[2001:0DB8:ABCD:0012::F1]".
32913291+ * - A hostname—for example, "example.com".
32923292+ *
32933293+ * The port is separated by a colon. It must be non-empty, with a decimal number
32943294+ * in the range of 0-65535, inclusive.
32953295+ *
32963296+ * @generated from field: bool host_and_port = 32;
32973297+ */
32983298+ value: boolean;
32993299+ case: "hostAndPort";
33003300+ } | {
33013301+ /**
33023302+ * `ulid` specifies that the field value must be a valid ULID (Universally Unique
33033303+ * Lexicographically Sortable Identifier) as defined by the [ULID specification](https://github.com/ulid/spec).
33043304+ * If the field value isn't a valid ULID, an error message will be generated.
33053305+ *
33063306+ * ```proto
33073307+ * message MyString {
33083308+ * // value must be a valid ULID
33093309+ * string value = 1 [(buf.validate.field).string.ulid = true];
33103310+ * }
33113311+ * ```
33123312+ *
33133313+ * @generated from field: bool ulid = 35;
33143314+ */
33153315+ value: boolean;
33163316+ case: "ulid";
33173317+ } | {
33183318+ /**
33193319+ * `well_known_regex` specifies a common well-known pattern
33203320+ * defined as a regex. If the field value doesn't match the well-known
33213321+ * regex, an error message will be generated.
33223322+ *
33233323+ * ```proto
33243324+ * message MyString {
33253325+ * // value must be a valid HTTP header value
33263326+ * string value = 1 [(buf.validate.field).string.well_known_regex = KNOWN_REGEX_HTTP_HEADER_VALUE];
33273327+ * }
33283328+ * ```
33293329+ *
33303330+ * #### KnownRegex
33313331+ *
33323332+ * `well_known_regex` contains some well-known patterns.
33333333+ *
33343334+ * | Name | Number | Description |
33353335+ * |-------------------------------|--------|-------------------------------------------|
33363336+ * | KNOWN_REGEX_UNSPECIFIED | 0 | |
33373337+ * | KNOWN_REGEX_HTTP_HEADER_NAME | 1 | HTTP header name as defined by [RFC 7230](https://datatracker.ietf.org/doc/html/rfc7230#section-3.2) |
33383338+ * | KNOWN_REGEX_HTTP_HEADER_VALUE | 2 | HTTP header value as defined by [RFC 7230](https://datatracker.ietf.org/doc/html/rfc7230#section-3.2.4) |
33393339+ *
33403340+ * @generated from field: buf.validate.KnownRegex well_known_regex = 24;
33413341+ */
33423342+ value: KnownRegex;
33433343+ case: "wellKnownRegex";
33443344+ } | { case: undefined; value?: undefined };
33453345+33463346+ /**
33473347+ * This applies to regexes `HTTP_HEADER_NAME` and `HTTP_HEADER_VALUE` to
33483348+ * enable strict header validation. By default, this is true, and HTTP header
33493349+ * validations are [RFC-compliant](https://datatracker.ietf.org/doc/html/rfc7230#section-3). Setting to false will enable looser
33503350+ * validations that only disallow `\r\n\0` characters, which can be used to
33513351+ * bypass header matching rules.
33523352+ *
33533353+ * ```proto
33543354+ * message MyString {
33553355+ * // The field `value` must have be a valid HTTP headers, but not enforced with strict rules.
33563356+ * string value = 1 [(buf.validate.field).string.strict = false];
33573357+ * }
33583358+ * ```
33593359+ *
33603360+ * @generated from field: optional bool strict = 25;
33613361+ */
33623362+ strict: boolean;
33633363+33643364+ /**
33653365+ * `example` specifies values that the field may have. These values SHOULD
33663366+ * conform to other rules. `example` values will not impact validation
33673367+ * but may be used as helpful guidance on how to populate the given field.
33683368+ *
33693369+ * ```proto
33703370+ * message MyString {
33713371+ * string value = 1 [
33723372+ * (buf.validate.field).string.example = "hello",
33733373+ * (buf.validate.field).string.example = "world"
33743374+ * ];
33753375+ * }
33763376+ * ```
33773377+ *
33783378+ * @generated from field: repeated string example = 34;
33793379+ */
33803380+ example: string[];
33813381+};
33823382+33833383+/**
33843384+ * Describes the message buf.validate.StringRules.
33853385+ * Use `create(StringRulesSchema)` to create a new message.
33863386+ */
33873387+export const StringRulesSchema: GenMessage<StringRules> = /*@__PURE__*/
33883388+ messageDesc(file_buf_validate_validate, 19);
33893389+33903390+/**
33913391+ * BytesRules describe the rules applied to `bytes` values. These rules
33923392+ * may also be applied to the `google.protobuf.BytesValue` Well-Known-Type.
33933393+ *
33943394+ * @generated from message buf.validate.BytesRules
33953395+ */
33963396+export type BytesRules = Message<"buf.validate.BytesRules"> & {
33973397+ /**
33983398+ * `const` requires the field value to exactly match the specified bytes
33993399+ * value. If the field value doesn't match, an error message is generated.
34003400+ *
34013401+ * ```proto
34023402+ * message MyBytes {
34033403+ * // value must be "\x01\x02\x03\x04"
34043404+ * bytes value = 1 [(buf.validate.field).bytes.const = "\x01\x02\x03\x04"];
34053405+ * }
34063406+ * ```
34073407+ *
34083408+ * @generated from field: optional bytes const = 1;
34093409+ */
34103410+ const: Uint8Array;
34113411+34123412+ /**
34133413+ * `len` requires the field value to have the specified length in bytes.
34143414+ * If the field value doesn't match, an error message is generated.
34153415+ *
34163416+ * ```proto
34173417+ * message MyBytes {
34183418+ * // value length must be 4 bytes.
34193419+ * optional bytes value = 1 [(buf.validate.field).bytes.len = 4];
34203420+ * }
34213421+ * ```
34223422+ *
34233423+ * @generated from field: optional uint64 len = 13;
34243424+ */
34253425+ len: bigint;
34263426+34273427+ /**
34283428+ * `min_len` requires the field value to have at least the specified minimum
34293429+ * length in bytes.
34303430+ * If the field value doesn't meet the requirement, an error message is generated.
34313431+ *
34323432+ * ```proto
34333433+ * message MyBytes {
34343434+ * // value length must be at least 2 bytes.
34353435+ * optional bytes value = 1 [(buf.validate.field).bytes.min_len = 2];
34363436+ * }
34373437+ * ```
34383438+ *
34393439+ * @generated from field: optional uint64 min_len = 2;
34403440+ */
34413441+ minLen: bigint;
34423442+34433443+ /**
34443444+ * `max_len` requires the field value to have at most the specified maximum
34453445+ * length in bytes.
34463446+ * If the field value exceeds the requirement, an error message is generated.
34473447+ *
34483448+ * ```proto
34493449+ * message MyBytes {
34503450+ * // value must be at most 6 bytes.
34513451+ * optional bytes value = 1 [(buf.validate.field).bytes.max_len = 6];
34523452+ * }
34533453+ * ```
34543454+ *
34553455+ * @generated from field: optional uint64 max_len = 3;
34563456+ */
34573457+ maxLen: bigint;
34583458+34593459+ /**
34603460+ * `pattern` requires the field value to match the specified regular
34613461+ * expression ([RE2 syntax](https://github.com/google/re2/wiki/Syntax)).
34623462+ * The value of the field must be valid UTF-8 or validation will fail with a
34633463+ * runtime error.
34643464+ * If the field value doesn't match the pattern, an error message is generated.
34653465+ *
34663466+ * ```proto
34673467+ * message MyBytes {
34683468+ * // value must match regex pattern "^[a-zA-Z0-9]+$".
34693469+ * optional bytes value = 1 [(buf.validate.field).bytes.pattern = "^[a-zA-Z0-9]+$"];
34703470+ * }
34713471+ * ```
34723472+ *
34733473+ * @generated from field: optional string pattern = 4;
34743474+ */
34753475+ pattern: string;
34763476+34773477+ /**
34783478+ * `prefix` requires the field value to have the specified bytes at the
34793479+ * beginning of the string.
34803480+ * If the field value doesn't meet the requirement, an error message is generated.
34813481+ *
34823482+ * ```proto
34833483+ * message MyBytes {
34843484+ * // value does not have prefix \x01\x02
34853485+ * optional bytes value = 1 [(buf.validate.field).bytes.prefix = "\x01\x02"];
34863486+ * }
34873487+ * ```
34883488+ *
34893489+ * @generated from field: optional bytes prefix = 5;
34903490+ */
34913491+ prefix: Uint8Array;
34923492+34933493+ /**
34943494+ * `suffix` requires the field value to have the specified bytes at the end
34953495+ * of the string.
34963496+ * If the field value doesn't meet the requirement, an error message is generated.
34973497+ *
34983498+ * ```proto
34993499+ * message MyBytes {
35003500+ * // value does not have suffix \x03\x04
35013501+ * optional bytes value = 1 [(buf.validate.field).bytes.suffix = "\x03\x04"];
35023502+ * }
35033503+ * ```
35043504+ *
35053505+ * @generated from field: optional bytes suffix = 6;
35063506+ */
35073507+ suffix: Uint8Array;
35083508+35093509+ /**
35103510+ * `contains` requires the field value to have the specified bytes anywhere in
35113511+ * the string.
35123512+ * If the field value doesn't meet the requirement, an error message is generated.
35133513+ *
35143514+ * ```proto
35153515+ * message MyBytes {
35163516+ * // value does not contain \x02\x03
35173517+ * optional bytes value = 1 [(buf.validate.field).bytes.contains = "\x02\x03"];
35183518+ * }
35193519+ * ```
35203520+ *
35213521+ * @generated from field: optional bytes contains = 7;
35223522+ */
35233523+ contains: Uint8Array;
35243524+35253525+ /**
35263526+ * `in` requires the field value to be equal to one of the specified
35273527+ * values. If the field value doesn't match any of the specified values, an
35283528+ * error message is generated.
35293529+ *
35303530+ * ```proto
35313531+ * message MyBytes {
35323532+ * // value must in ["\x01\x02", "\x02\x03", "\x03\x04"]
35333533+ * optional bytes value = 1 [(buf.validate.field).bytes.in = {"\x01\x02", "\x02\x03", "\x03\x04"}];
35343534+ * }
35353535+ * ```
35363536+ *
35373537+ * @generated from field: repeated bytes in = 8;
35383538+ */
35393539+ in: Uint8Array[];
35403540+35413541+ /**
35423542+ * `not_in` requires the field value to be not equal to any of the specified
35433543+ * values.
35443544+ * If the field value matches any of the specified values, an error message is
35453545+ * generated.
35463546+ *
35473547+ * ```proto
35483548+ * message MyBytes {
35493549+ * // value must not in ["\x01\x02", "\x02\x03", "\x03\x04"]
35503550+ * optional bytes value = 1 [(buf.validate.field).bytes.not_in = {"\x01\x02", "\x02\x03", "\x03\x04"}];
35513551+ * }
35523552+ * ```
35533553+ *
35543554+ * @generated from field: repeated bytes not_in = 9;
35553555+ */
35563556+ notIn: Uint8Array[];
35573557+35583558+ /**
35593559+ * WellKnown rules provide advanced rules against common byte
35603560+ * patterns
35613561+ *
35623562+ * @generated from oneof buf.validate.BytesRules.well_known
35633563+ */
35643564+ wellKnown: {
35653565+ /**
35663566+ * `ip` ensures that the field `value` is a valid IP address (v4 or v6) in byte format.
35673567+ * If the field value doesn't meet this rule, an error message is generated.
35683568+ *
35693569+ * ```proto
35703570+ * message MyBytes {
35713571+ * // value must be a valid IP address
35723572+ * optional bytes value = 1 [(buf.validate.field).bytes.ip = true];
35733573+ * }
35743574+ * ```
35753575+ *
35763576+ * @generated from field: bool ip = 10;
35773577+ */
35783578+ value: boolean;
35793579+ case: "ip";
35803580+ } | {
35813581+ /**
35823582+ * `ipv4` ensures that the field `value` is a valid IPv4 address in byte format.
35833583+ * If the field value doesn't meet this rule, an error message is generated.
35843584+ *
35853585+ * ```proto
35863586+ * message MyBytes {
35873587+ * // value must be a valid IPv4 address
35883588+ * optional bytes value = 1 [(buf.validate.field).bytes.ipv4 = true];
35893589+ * }
35903590+ * ```
35913591+ *
35923592+ * @generated from field: bool ipv4 = 11;
35933593+ */
35943594+ value: boolean;
35953595+ case: "ipv4";
35963596+ } | {
35973597+ /**
35983598+ * `ipv6` ensures that the field `value` is a valid IPv6 address in byte format.
35993599+ * If the field value doesn't meet this rule, an error message is generated.
36003600+ * ```proto
36013601+ * message MyBytes {
36023602+ * // value must be a valid IPv6 address
36033603+ * optional bytes value = 1 [(buf.validate.field).bytes.ipv6 = true];
36043604+ * }
36053605+ * ```
36063606+ *
36073607+ * @generated from field: bool ipv6 = 12;
36083608+ */
36093609+ value: boolean;
36103610+ case: "ipv6";
36113611+ } | {
36123612+ /**
36133613+ * `uuid` ensures that the field `value` encodes the 128-bit UUID data as
36143614+ * defined by [RFC 4122](https://datatracker.ietf.org/doc/html/rfc4122#section-4.1.2).
36153615+ * The field must contain exactly 16 bytes
36163616+ * representing the UUID. If the field value isn't a valid UUID, an error
36173617+ * message will be generated.
36183618+ *
36193619+ * ```proto
36203620+ * message MyBytes {
36213621+ * // value must be a valid UUID
36223622+ * optional bytes value = 1 [(buf.validate.field).bytes.uuid = true];
36233623+ * }
36243624+ * ```
36253625+ *
36263626+ * @generated from field: bool uuid = 15;
36273627+ */
36283628+ value: boolean;
36293629+ case: "uuid";
36303630+ } | { case: undefined; value?: undefined };
36313631+36323632+ /**
36333633+ * `example` specifies values that the field may have. These values SHOULD
36343634+ * conform to other rules. `example` values will not impact validation
36353635+ * but may be used as helpful guidance on how to populate the given field.
36363636+ *
36373637+ * ```proto
36383638+ * message MyBytes {
36393639+ * bytes value = 1 [
36403640+ * (buf.validate.field).bytes.example = "\x01\x02",
36413641+ * (buf.validate.field).bytes.example = "\x02\x03"
36423642+ * ];
36433643+ * }
36443644+ * ```
36453645+ *
36463646+ * @generated from field: repeated bytes example = 14;
36473647+ */
36483648+ example: Uint8Array[];
36493649+};
36503650+36513651+/**
36523652+ * Describes the message buf.validate.BytesRules.
36533653+ * Use `create(BytesRulesSchema)` to create a new message.
36543654+ */
36553655+export const BytesRulesSchema: GenMessage<BytesRules> = /*@__PURE__*/
36563656+ messageDesc(file_buf_validate_validate, 20);
36573657+36583658+/**
36593659+ * EnumRules describe the rules applied to `enum` values.
36603660+ *
36613661+ * @generated from message buf.validate.EnumRules
36623662+ */
36633663+export type EnumRules = Message<"buf.validate.EnumRules"> & {
36643664+ /**
36653665+ * `const` requires the field value to exactly match the specified enum value.
36663666+ * If the field value doesn't match, an error message is generated.
36673667+ *
36683668+ * ```proto
36693669+ * enum MyEnum {
36703670+ * MY_ENUM_UNSPECIFIED = 0;
36713671+ * MY_ENUM_VALUE1 = 1;
36723672+ * MY_ENUM_VALUE2 = 2;
36733673+ * }
36743674+ *
36753675+ * message MyMessage {
36763676+ * // The field `value` must be exactly MY_ENUM_VALUE1.
36773677+ * MyEnum value = 1 [(buf.validate.field).enum.const = 1];
36783678+ * }
36793679+ * ```
36803680+ *
36813681+ * @generated from field: optional int32 const = 1;
36823682+ */
36833683+ const: number;
36843684+36853685+ /**
36863686+ * `defined_only` requires the field value to be one of the defined values for
36873687+ * this enum, failing on any undefined value.
36883688+ *
36893689+ * ```proto
36903690+ * enum MyEnum {
36913691+ * MY_ENUM_UNSPECIFIED = 0;
36923692+ * MY_ENUM_VALUE1 = 1;
36933693+ * MY_ENUM_VALUE2 = 2;
36943694+ * }
36953695+ *
36963696+ * message MyMessage {
36973697+ * // The field `value` must be a defined value of MyEnum.
36983698+ * MyEnum value = 1 [(buf.validate.field).enum.defined_only = true];
36993699+ * }
37003700+ * ```
37013701+ *
37023702+ * @generated from field: optional bool defined_only = 2;
37033703+ */
37043704+ definedOnly: boolean;
37053705+37063706+ /**
37073707+ * `in` requires the field value to be equal to one of the
37083708+ * specified enum values. If the field value doesn't match any of the
37093709+ * specified values, an error message is generated.
37103710+ *
37113711+ * ```proto
37123712+ * enum MyEnum {
37133713+ * MY_ENUM_UNSPECIFIED = 0;
37143714+ * MY_ENUM_VALUE1 = 1;
37153715+ * MY_ENUM_VALUE2 = 2;
37163716+ * }
37173717+ *
37183718+ * message MyMessage {
37193719+ * // The field `value` must be equal to one of the specified values.
37203720+ * MyEnum value = 1 [(buf.validate.field).enum = { in: [1, 2]}];
37213721+ * }
37223722+ * ```
37233723+ *
37243724+ * @generated from field: repeated int32 in = 3;
37253725+ */
37263726+ in: number[];
37273727+37283728+ /**
37293729+ * `not_in` requires the field value to be not equal to any of the
37303730+ * specified enum values. If the field value matches one of the specified
37313731+ * values, an error message is generated.
37323732+ *
37333733+ * ```proto
37343734+ * enum MyEnum {
37353735+ * MY_ENUM_UNSPECIFIED = 0;
37363736+ * MY_ENUM_VALUE1 = 1;
37373737+ * MY_ENUM_VALUE2 = 2;
37383738+ * }
37393739+ *
37403740+ * message MyMessage {
37413741+ * // The field `value` must not be equal to any of the specified values.
37423742+ * MyEnum value = 1 [(buf.validate.field).enum = { not_in: [1, 2]}];
37433743+ * }
37443744+ * ```
37453745+ *
37463746+ * @generated from field: repeated int32 not_in = 4;
37473747+ */
37483748+ notIn: number[];
37493749+37503750+ /**
37513751+ * `example` specifies values that the field may have. These values SHOULD
37523752+ * conform to other rules. `example` values will not impact validation
37533753+ * but may be used as helpful guidance on how to populate the given field.
37543754+ *
37553755+ * ```proto
37563756+ * enum MyEnum {
37573757+ * MY_ENUM_UNSPECIFIED = 0;
37583758+ * MY_ENUM_VALUE1 = 1;
37593759+ * MY_ENUM_VALUE2 = 2;
37603760+ * }
37613761+ *
37623762+ * message MyMessage {
37633763+ * (buf.validate.field).enum.example = 1,
37643764+ * (buf.validate.field).enum.example = 2
37653765+ * }
37663766+ * ```
37673767+ *
37683768+ * @generated from field: repeated int32 example = 5;
37693769+ */
37703770+ example: number[];
37713771+};
37723772+37733773+/**
37743774+ * Describes the message buf.validate.EnumRules.
37753775+ * Use `create(EnumRulesSchema)` to create a new message.
37763776+ */
37773777+export const EnumRulesSchema: GenMessage<EnumRules> = /*@__PURE__*/
37783778+ messageDesc(file_buf_validate_validate, 21);
37793779+37803780+/**
37813781+ * RepeatedRules describe the rules applied to `repeated` values.
37823782+ *
37833783+ * @generated from message buf.validate.RepeatedRules
37843784+ */
37853785+export type RepeatedRules = Message<"buf.validate.RepeatedRules"> & {
37863786+ /**
37873787+ * `min_items` requires that this field must contain at least the specified
37883788+ * minimum number of items.
37893789+ *
37903790+ * Note that `min_items = 1` is equivalent to setting a field as `required`.
37913791+ *
37923792+ * ```proto
37933793+ * message MyRepeated {
37943794+ * // value must contain at least 2 items
37953795+ * repeated string value = 1 [(buf.validate.field).repeated.min_items = 2];
37963796+ * }
37973797+ * ```
37983798+ *
37993799+ * @generated from field: optional uint64 min_items = 1;
38003800+ */
38013801+ minItems: bigint;
38023802+38033803+ /**
38043804+ * `max_items` denotes that this field must not exceed a
38053805+ * certain number of items as the upper limit. If the field contains more
38063806+ * items than specified, an error message will be generated, requiring the
38073807+ * field to maintain no more than the specified number of items.
38083808+ *
38093809+ * ```proto
38103810+ * message MyRepeated {
38113811+ * // value must contain no more than 3 item(s)
38123812+ * repeated string value = 1 [(buf.validate.field).repeated.max_items = 3];
38133813+ * }
38143814+ * ```
38153815+ *
38163816+ * @generated from field: optional uint64 max_items = 2;
38173817+ */
38183818+ maxItems: bigint;
38193819+38203820+ /**
38213821+ * `unique` indicates that all elements in this field must
38223822+ * be unique. This rule is strictly applicable to scalar and enum
38233823+ * types, with message types not being supported.
38243824+ *
38253825+ * ```proto
38263826+ * message MyRepeated {
38273827+ * // repeated value must contain unique items
38283828+ * repeated string value = 1 [(buf.validate.field).repeated.unique = true];
38293829+ * }
38303830+ * ```
38313831+ *
38323832+ * @generated from field: optional bool unique = 3;
38333833+ */
38343834+ unique: boolean;
38353835+38363836+ /**
38373837+ * `items` details the rules to be applied to each item
38383838+ * in the field. Even for repeated message fields, validation is executed
38393839+ * against each item unless `ignore` is specified.
38403840+ *
38413841+ * ```proto
38423842+ * message MyRepeated {
38433843+ * // The items in the field `value` must follow the specified rules.
38443844+ * repeated string value = 1 [(buf.validate.field).repeated.items = {
38453845+ * string: {
38463846+ * min_len: 3
38473847+ * max_len: 10
38483848+ * }
38493849+ * }];
38503850+ * }
38513851+ * ```
38523852+ *
38533853+ * Note that the `required` rule does not apply. Repeated items
38543854+ * cannot be unset.
38553855+ *
38563856+ * @generated from field: optional buf.validate.FieldRules items = 4;
38573857+ */
38583858+ items?: FieldRules;
38593859+};
38603860+38613861+/**
38623862+ * Describes the message buf.validate.RepeatedRules.
38633863+ * Use `create(RepeatedRulesSchema)` to create a new message.
38643864+ */
38653865+export const RepeatedRulesSchema: GenMessage<RepeatedRules> = /*@__PURE__*/
38663866+ messageDesc(file_buf_validate_validate, 22);
38673867+38683868+/**
38693869+ * MapRules describe the rules applied to `map` values.
38703870+ *
38713871+ * @generated from message buf.validate.MapRules
38723872+ */
38733873+export type MapRules = Message<"buf.validate.MapRules"> & {
38743874+ /**
38753875+ * Specifies the minimum number of key-value pairs allowed. If the field has
38763876+ * fewer key-value pairs than specified, an error message is generated.
38773877+ *
38783878+ * ```proto
38793879+ * message MyMap {
38803880+ * // The field `value` must have at least 2 key-value pairs.
38813881+ * map<string, string> value = 1 [(buf.validate.field).map.min_pairs = 2];
38823882+ * }
38833883+ * ```
38843884+ *
38853885+ * @generated from field: optional uint64 min_pairs = 1;
38863886+ */
38873887+ minPairs: bigint;
38883888+38893889+ /**
38903890+ * Specifies the maximum number of key-value pairs allowed. If the field has
38913891+ * more key-value pairs than specified, an error message is generated.
38923892+ *
38933893+ * ```proto
38943894+ * message MyMap {
38953895+ * // The field `value` must have at most 3 key-value pairs.
38963896+ * map<string, string> value = 1 [(buf.validate.field).map.max_pairs = 3];
38973897+ * }
38983898+ * ```
38993899+ *
39003900+ * @generated from field: optional uint64 max_pairs = 2;
39013901+ */
39023902+ maxPairs: bigint;
39033903+39043904+ /**
39053905+ * Specifies the rules to be applied to each key in the field.
39063906+ *
39073907+ * ```proto
39083908+ * message MyMap {
39093909+ * // The keys in the field `value` must follow the specified rules.
39103910+ * map<string, string> value = 1 [(buf.validate.field).map.keys = {
39113911+ * string: {
39123912+ * min_len: 3
39133913+ * max_len: 10
39143914+ * }
39153915+ * }];
39163916+ * }
39173917+ * ```
39183918+ *
39193919+ * Note that the `required` rule does not apply. Map keys cannot be unset.
39203920+ *
39213921+ * @generated from field: optional buf.validate.FieldRules keys = 4;
39223922+ */
39233923+ keys?: FieldRules;
39243924+39253925+ /**
39263926+ * Specifies the rules to be applied to the value of each key in the
39273927+ * field. Message values will still have their validations evaluated unless
39283928+ * `ignore` is specified.
39293929+ *
39303930+ * ```proto
39313931+ * message MyMap {
39323932+ * // The values in the field `value` must follow the specified rules.
39333933+ * map<string, string> value = 1 [(buf.validate.field).map.values = {
39343934+ * string: {
39353935+ * min_len: 5
39363936+ * max_len: 20
39373937+ * }
39383938+ * }];
39393939+ * }
39403940+ * ```
39413941+ * Note that the `required` rule does not apply. Map values cannot be unset.
39423942+ *
39433943+ * @generated from field: optional buf.validate.FieldRules values = 5;
39443944+ */
39453945+ values?: FieldRules;
39463946+};
39473947+39483948+/**
39493949+ * Describes the message buf.validate.MapRules.
39503950+ * Use `create(MapRulesSchema)` to create a new message.
39513951+ */
39523952+export const MapRulesSchema: GenMessage<MapRules> = /*@__PURE__*/
39533953+ messageDesc(file_buf_validate_validate, 23);
39543954+39553955+/**
39563956+ * AnyRules describe rules applied exclusively to the `google.protobuf.Any` well-known type.
39573957+ *
39583958+ * @generated from message buf.validate.AnyRules
39593959+ */
39603960+export type AnyRules = Message<"buf.validate.AnyRules"> & {
39613961+ /**
39623962+ * `in` requires the field's `type_url` to be equal to one of the
39633963+ * specified values. If it doesn't match any of the specified values, an error
39643964+ * message is generated.
39653965+ *
39663966+ * ```proto
39673967+ * message MyAny {
39683968+ * // The `value` field must have a `type_url` equal to one of the specified values.
39693969+ * google.protobuf.Any value = 1 [(buf.validate.field).any = {
39703970+ * in: ["type.googleapis.com/MyType1", "type.googleapis.com/MyType2"]
39713971+ * }];
39723972+ * }
39733973+ * ```
39743974+ *
39753975+ * @generated from field: repeated string in = 2;
39763976+ */
39773977+ in: string[];
39783978+39793979+ /**
39803980+ * requires the field's type_url to be not equal to any of the specified values. If it matches any of the specified values, an error message is generated.
39813981+ *
39823982+ * ```proto
39833983+ * message MyAny {
39843984+ * // The `value` field must not have a `type_url` equal to any of the specified values.
39853985+ * google.protobuf.Any value = 1 [(buf.validate.field).any = {
39863986+ * not_in: ["type.googleapis.com/ForbiddenType1", "type.googleapis.com/ForbiddenType2"]
39873987+ * }];
39883988+ * }
39893989+ * ```
39903990+ *
39913991+ * @generated from field: repeated string not_in = 3;
39923992+ */
39933993+ notIn: string[];
39943994+};
39953995+39963996+/**
39973997+ * Describes the message buf.validate.AnyRules.
39983998+ * Use `create(AnyRulesSchema)` to create a new message.
39993999+ */
40004000+export const AnyRulesSchema: GenMessage<AnyRules> = /*@__PURE__*/
40014001+ messageDesc(file_buf_validate_validate, 24);
40024002+40034003+/**
40044004+ * DurationRules describe the rules applied exclusively to the `google.protobuf.Duration` well-known type.
40054005+ *
40064006+ * @generated from message buf.validate.DurationRules
40074007+ */
40084008+export type DurationRules = Message<"buf.validate.DurationRules"> & {
40094009+ /**
40104010+ * `const` dictates that the field must match the specified value of the `google.protobuf.Duration` type exactly.
40114011+ * If the field's value deviates from the specified value, an error message
40124012+ * will be generated.
40134013+ *
40144014+ * ```proto
40154015+ * message MyDuration {
40164016+ * // value must equal 5s
40174017+ * google.protobuf.Duration value = 1 [(buf.validate.field).duration.const = "5s"];
40184018+ * }
40194019+ * ```
40204020+ *
40214021+ * @generated from field: optional google.protobuf.Duration const = 2;
40224022+ */
40234023+ const?: Duration;
40244024+40254025+ /**
40264026+ * @generated from oneof buf.validate.DurationRules.less_than
40274027+ */
40284028+ lessThan: {
40294029+ /**
40304030+ * `lt` stipulates that the field must be less than the specified value of the `google.protobuf.Duration` type,
40314031+ * exclusive. If the field's value is greater than or equal to the specified
40324032+ * value, an error message will be generated.
40334033+ *
40344034+ * ```proto
40354035+ * message MyDuration {
40364036+ * // value must be less than 5s
40374037+ * google.protobuf.Duration value = 1 [(buf.validate.field).duration.lt = "5s"];
40384038+ * }
40394039+ * ```
40404040+ *
40414041+ * @generated from field: google.protobuf.Duration lt = 3;
40424042+ */
40434043+ value: Duration;
40444044+ case: "lt";
40454045+ } | {
40464046+ /**
40474047+ * `lte` indicates that the field must be less than or equal to the specified
40484048+ * value of the `google.protobuf.Duration` type, inclusive. If the field's value is greater than the specified value,
40494049+ * an error message will be generated.
40504050+ *
40514051+ * ```proto
40524052+ * message MyDuration {
40534053+ * // value must be less than or equal to 10s
40544054+ * google.protobuf.Duration value = 1 [(buf.validate.field).duration.lte = "10s"];
40554055+ * }
40564056+ * ```
40574057+ *
40584058+ * @generated from field: google.protobuf.Duration lte = 4;
40594059+ */
40604060+ value: Duration;
40614061+ case: "lte";
40624062+ } | { case: undefined; value?: undefined };
40634063+40644064+ /**
40654065+ * @generated from oneof buf.validate.DurationRules.greater_than
40664066+ */
40674067+ greaterThan: {
40684068+ /**
40694069+ * `gt` requires the duration field value to be greater than the specified
40704070+ * value (exclusive). If the value of `gt` is larger than a specified `lt`
40714071+ * or `lte`, the range is reversed, and the field value must be outside the
40724072+ * specified range. If the field value doesn't meet the required conditions,
40734073+ * an error message is generated.
40744074+ *
40754075+ * ```proto
40764076+ * message MyDuration {
40774077+ * // duration must be greater than 5s [duration.gt]
40784078+ * google.protobuf.Duration value = 1 [(buf.validate.field).duration.gt = { seconds: 5 }];
40794079+ *
40804080+ * // duration must be greater than 5s and less than 10s [duration.gt_lt]
40814081+ * google.protobuf.Duration another_value = 2 [(buf.validate.field).duration = { gt: { seconds: 5 }, lt: { seconds: 10 } }];
40824082+ *
40834083+ * // duration must be greater than 10s or less than 5s [duration.gt_lt_exclusive]
40844084+ * google.protobuf.Duration other_value = 3 [(buf.validate.field).duration = { gt: { seconds: 10 }, lt: { seconds: 5 } }];
40854085+ * }
40864086+ * ```
40874087+ *
40884088+ * @generated from field: google.protobuf.Duration gt = 5;
40894089+ */
40904090+ value: Duration;
40914091+ case: "gt";
40924092+ } | {
40934093+ /**
40944094+ * `gte` requires the duration field value to be greater than or equal to the
40954095+ * specified value (exclusive). If the value of `gte` is larger than a
40964096+ * specified `lt` or `lte`, the range is reversed, and the field value must
40974097+ * be outside the specified range. If the field value doesn't meet the
40984098+ * required conditions, an error message is generated.
40994099+ *
41004100+ * ```proto
41014101+ * message MyDuration {
41024102+ * // duration must be greater than or equal to 5s [duration.gte]
41034103+ * google.protobuf.Duration value = 1 [(buf.validate.field).duration.gte = { seconds: 5 }];
41044104+ *
41054105+ * // duration must be greater than or equal to 5s and less than 10s [duration.gte_lt]
41064106+ * google.protobuf.Duration another_value = 2 [(buf.validate.field).duration = { gte: { seconds: 5 }, lt: { seconds: 10 } }];
41074107+ *
41084108+ * // duration must be greater than or equal to 10s or less than 5s [duration.gte_lt_exclusive]
41094109+ * google.protobuf.Duration other_value = 3 [(buf.validate.field).duration = { gte: { seconds: 10 }, lt: { seconds: 5 } }];
41104110+ * }
41114111+ * ```
41124112+ *
41134113+ * @generated from field: google.protobuf.Duration gte = 6;
41144114+ */
41154115+ value: Duration;
41164116+ case: "gte";
41174117+ } | { case: undefined; value?: undefined };
41184118+41194119+ /**
41204120+ * `in` asserts that the field must be equal to one of the specified values of the `google.protobuf.Duration` type.
41214121+ * If the field's value doesn't correspond to any of the specified values,
41224122+ * an error message will be generated.
41234123+ *
41244124+ * ```proto
41254125+ * message MyDuration {
41264126+ * // value must be in list [1s, 2s, 3s]
41274127+ * google.protobuf.Duration value = 1 [(buf.validate.field).duration.in = ["1s", "2s", "3s"]];
41284128+ * }
41294129+ * ```
41304130+ *
41314131+ * @generated from field: repeated google.protobuf.Duration in = 7;
41324132+ */
41334133+ in: Duration[];
41344134+41354135+ /**
41364136+ * `not_in` denotes that the field must not be equal to
41374137+ * any of the specified values of the `google.protobuf.Duration` type.
41384138+ * If the field's value matches any of these values, an error message will be
41394139+ * generated.
41404140+ *
41414141+ * ```proto
41424142+ * message MyDuration {
41434143+ * // value must not be in list [1s, 2s, 3s]
41444144+ * google.protobuf.Duration value = 1 [(buf.validate.field).duration.not_in = ["1s", "2s", "3s"]];
41454145+ * }
41464146+ * ```
41474147+ *
41484148+ * @generated from field: repeated google.protobuf.Duration not_in = 8;
41494149+ */
41504150+ notIn: Duration[];
41514151+41524152+ /**
41534153+ * `example` specifies values that the field may have. These values SHOULD
41544154+ * conform to other rules. `example` values will not impact validation
41554155+ * but may be used as helpful guidance on how to populate the given field.
41564156+ *
41574157+ * ```proto
41584158+ * message MyDuration {
41594159+ * google.protobuf.Duration value = 1 [
41604160+ * (buf.validate.field).duration.example = { seconds: 1 },
41614161+ * (buf.validate.field).duration.example = { seconds: 2 },
41624162+ * ];
41634163+ * }
41644164+ * ```
41654165+ *
41664166+ * @generated from field: repeated google.protobuf.Duration example = 9;
41674167+ */
41684168+ example: Duration[];
41694169+};
41704170+41714171+/**
41724172+ * Describes the message buf.validate.DurationRules.
41734173+ * Use `create(DurationRulesSchema)` to create a new message.
41744174+ */
41754175+export const DurationRulesSchema: GenMessage<DurationRules> = /*@__PURE__*/
41764176+ messageDesc(file_buf_validate_validate, 25);
41774177+41784178+/**
41794179+ * FieldMaskRules describe rules applied exclusively to the `google.protobuf.FieldMask` well-known type.
41804180+ *
41814181+ * @generated from message buf.validate.FieldMaskRules
41824182+ */
41834183+export type FieldMaskRules = Message<"buf.validate.FieldMaskRules"> & {
41844184+ /**
41854185+ * `const` dictates that the field must match the specified value of the `google.protobuf.FieldMask` type exactly.
41864186+ * If the field's value deviates from the specified value, an error message
41874187+ * will be generated.
41884188+ *
41894189+ * ```proto
41904190+ * message MyFieldMask {
41914191+ * // value must equal ["a"]
41924192+ * google.protobuf.FieldMask value = 1 [(buf.validate.field).field_mask.const = {
41934193+ * paths: ["a"]
41944194+ * }];
41954195+ * }
41964196+ * ```
41974197+ *
41984198+ * @generated from field: optional google.protobuf.FieldMask const = 1;
41994199+ */
42004200+ const?: FieldMask;
42014201+42024202+ /**
42034203+ * `in` requires the field value to only contain paths matching specified
42044204+ * values or their subpaths.
42054205+ * If any of the field value's paths doesn't match the rule,
42064206+ * an error message is generated.
42074207+ * See: https://protobuf.dev/reference/protobuf/google.protobuf/#field-mask
42084208+ *
42094209+ * ```proto
42104210+ * message MyFieldMask {
42114211+ * // The `value` FieldMask must only contain paths listed in `in`.
42124212+ * google.protobuf.FieldMask value = 1 [(buf.validate.field).field_mask = {
42134213+ * in: ["a", "b", "c.a"]
42144214+ * }];
42154215+ * }
42164216+ * ```
42174217+ *
42184218+ * @generated from field: repeated string in = 2;
42194219+ */
42204220+ in: string[];
42214221+42224222+ /**
42234223+ * `not_in` requires the field value to not contain paths matching specified
42244224+ * values or their subpaths.
42254225+ * If any of the field value's paths matches the rule,
42264226+ * an error message is generated.
42274227+ * See: https://protobuf.dev/reference/protobuf/google.protobuf/#field-mask
42284228+ *
42294229+ * ```proto
42304230+ * message MyFieldMask {
42314231+ * // The `value` FieldMask shall not contain paths listed in `not_in`.
42324232+ * google.protobuf.FieldMask value = 1 [(buf.validate.field).field_mask = {
42334233+ * not_in: ["forbidden", "immutable", "c.a"]
42344234+ * }];
42354235+ * }
42364236+ * ```
42374237+ *
42384238+ * @generated from field: repeated string not_in = 3;
42394239+ */
42404240+ notIn: string[];
42414241+42424242+ /**
42434243+ * `example` specifies values that the field may have. These values SHOULD
42444244+ * conform to other rules. `example` values will not impact validation
42454245+ * but may be used as helpful guidance on how to populate the given field.
42464246+ *
42474247+ * ```proto
42484248+ * message MyFieldMask {
42494249+ * google.protobuf.FieldMask value = 1 [
42504250+ * (buf.validate.field).field_mask.example = { paths: ["a", "b"] },
42514251+ * (buf.validate.field).field_mask.example = { paths: ["c.a", "d"] },
42524252+ * ];
42534253+ * }
42544254+ * ```
42554255+ *
42564256+ * @generated from field: repeated google.protobuf.FieldMask example = 4;
42574257+ */
42584258+ example: FieldMask[];
42594259+};
42604260+42614261+/**
42624262+ * Describes the message buf.validate.FieldMaskRules.
42634263+ * Use `create(FieldMaskRulesSchema)` to create a new message.
42644264+ */
42654265+export const FieldMaskRulesSchema: GenMessage<FieldMaskRules> = /*@__PURE__*/
42664266+ messageDesc(file_buf_validate_validate, 26);
42674267+42684268+/**
42694269+ * TimestampRules describe the rules applied exclusively to the `google.protobuf.Timestamp` well-known type.
42704270+ *
42714271+ * @generated from message buf.validate.TimestampRules
42724272+ */
42734273+export type TimestampRules = Message<"buf.validate.TimestampRules"> & {
42744274+ /**
42754275+ * `const` dictates that this field, of the `google.protobuf.Timestamp` type, must exactly match the specified value. If the field value doesn't correspond to the specified timestamp, an error message will be generated.
42764276+ *
42774277+ * ```proto
42784278+ * message MyTimestamp {
42794279+ * // value must equal 2023-05-03T10:00:00Z
42804280+ * google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.const = {seconds: 1727998800}];
42814281+ * }
42824282+ * ```
42834283+ *
42844284+ * @generated from field: optional google.protobuf.Timestamp const = 2;
42854285+ */
42864286+ const?: Timestamp;
42874287+42884288+ /**
42894289+ * @generated from oneof buf.validate.TimestampRules.less_than
42904290+ */
42914291+ lessThan: {
42924292+ /**
42934293+ * requires the duration field value to be less than the specified value (field < value). If the field value doesn't meet the required conditions, an error message is generated.
42944294+ *
42954295+ * ```proto
42964296+ * message MyDuration {
42974297+ * // duration must be less than 'P3D' [duration.lt]
42984298+ * google.protobuf.Duration value = 1 [(buf.validate.field).duration.lt = { seconds: 259200 }];
42994299+ * }
43004300+ * ```
43014301+ *
43024302+ * @generated from field: google.protobuf.Timestamp lt = 3;
43034303+ */
43044304+ value: Timestamp;
43054305+ case: "lt";
43064306+ } | {
43074307+ /**
43084308+ * requires the timestamp field value to be less than or equal to the specified value (field <= value). If the field value doesn't meet the required conditions, an error message is generated.
43094309+ *
43104310+ * ```proto
43114311+ * message MyTimestamp {
43124312+ * // timestamp must be less than or equal to '2023-05-14T00:00:00Z' [timestamp.lte]
43134313+ * google.protobuf.Timestamp value = 1 [(buf.validate.field).timestamp.lte = { seconds: 1678867200 }];
43144314+ * }
43154315+ * ```
43164316+ *
43174317+ * @generated from field: google.protobuf.Timestamp lte = 4;
43184318+ */
43194319+ value: Timestamp;
43204320+ case: "lte";
43214321+ } | {
43224322+ /**
43234323+ * `lt_now` specifies that this field, of the `google.protobuf.Timestamp` type, must be less than the current time. `lt_now` can only be used with the `within` rule.
43244324+ *
43254325+ * ```proto
43264326+ * message MyTimestamp {
43274327+ * // value must be less than now
43284328+ * google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.lt_now = true];
43294329+ * }
43304330+ * ```
43314331+ *
43324332+ * @generated from field: bool lt_now = 7;
43334333+ */
43344334+ value: boolean;
43354335+ case: "ltNow";
43364336+ } | { case: undefined; value?: undefined };
43374337+43384338+ /**
43394339+ * @generated from oneof buf.validate.TimestampRules.greater_than
43404340+ */
43414341+ greaterThan: {
43424342+ /**
43434343+ * `gt` requires the timestamp field value to be greater than the specified
43444344+ * value (exclusive). If the value of `gt` is larger than a specified `lt`
43454345+ * or `lte`, the range is reversed, and the field value must be outside the
43464346+ * specified range. If the field value doesn't meet the required conditions,
43474347+ * an error message is generated.
43484348+ *
43494349+ * ```proto
43504350+ * message MyTimestamp {
43514351+ * // timestamp must be greater than '2023-01-01T00:00:00Z' [timestamp.gt]
43524352+ * google.protobuf.Timestamp value = 1 [(buf.validate.field).timestamp.gt = { seconds: 1672444800 }];
43534353+ *
43544354+ * // timestamp must be greater than '2023-01-01T00:00:00Z' and less than '2023-01-02T00:00:00Z' [timestamp.gt_lt]
43554355+ * google.protobuf.Timestamp another_value = 2 [(buf.validate.field).timestamp = { gt: { seconds: 1672444800 }, lt: { seconds: 1672531200 } }];
43564356+ *
43574357+ * // timestamp must be greater than '2023-01-02T00:00:00Z' or less than '2023-01-01T00:00:00Z' [timestamp.gt_lt_exclusive]
43584358+ * google.protobuf.Timestamp other_value = 3 [(buf.validate.field).timestamp = { gt: { seconds: 1672531200 }, lt: { seconds: 1672444800 } }];
43594359+ * }
43604360+ * ```
43614361+ *
43624362+ * @generated from field: google.protobuf.Timestamp gt = 5;
43634363+ */
43644364+ value: Timestamp;
43654365+ case: "gt";
43664366+ } | {
43674367+ /**
43684368+ * `gte` requires the timestamp field value to be greater than or equal to the
43694369+ * specified value (exclusive). If the value of `gte` is larger than a
43704370+ * specified `lt` or `lte`, the range is reversed, and the field value
43714371+ * must be outside the specified range. If the field value doesn't meet
43724372+ * the required conditions, an error message is generated.
43734373+ *
43744374+ * ```proto
43754375+ * message MyTimestamp {
43764376+ * // timestamp must be greater than or equal to '2023-01-01T00:00:00Z' [timestamp.gte]
43774377+ * google.protobuf.Timestamp value = 1 [(buf.validate.field).timestamp.gte = { seconds: 1672444800 }];
43784378+ *
43794379+ * // timestamp must be greater than or equal to '2023-01-01T00:00:00Z' and less than '2023-01-02T00:00:00Z' [timestamp.gte_lt]
43804380+ * google.protobuf.Timestamp another_value = 2 [(buf.validate.field).timestamp = { gte: { seconds: 1672444800 }, lt: { seconds: 1672531200 } }];
43814381+ *
43824382+ * // timestamp must be greater than or equal to '2023-01-02T00:00:00Z' or less than '2023-01-01T00:00:00Z' [timestamp.gte_lt_exclusive]
43834383+ * google.protobuf.Timestamp other_value = 3 [(buf.validate.field).timestamp = { gte: { seconds: 1672531200 }, lt: { seconds: 1672444800 } }];
43844384+ * }
43854385+ * ```
43864386+ *
43874387+ * @generated from field: google.protobuf.Timestamp gte = 6;
43884388+ */
43894389+ value: Timestamp;
43904390+ case: "gte";
43914391+ } | {
43924392+ /**
43934393+ * `gt_now` specifies that this field, of the `google.protobuf.Timestamp` type, must be greater than the current time. `gt_now` can only be used with the `within` rule.
43944394+ *
43954395+ * ```proto
43964396+ * message MyTimestamp {
43974397+ * // value must be greater than now
43984398+ * google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.gt_now = true];
43994399+ * }
44004400+ * ```
44014401+ *
44024402+ * @generated from field: bool gt_now = 8;
44034403+ */
44044404+ value: boolean;
44054405+ case: "gtNow";
44064406+ } | { case: undefined; value?: undefined };
44074407+44084408+ /**
44094409+ * `within` specifies that this field, of the `google.protobuf.Timestamp` type, must be within the specified duration of the current time. If the field value isn't within the duration, an error message is generated.
44104410+ *
44114411+ * ```proto
44124412+ * message MyTimestamp {
44134413+ * // value must be within 1 hour of now
44144414+ * google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.within = {seconds: 3600}];
44154415+ * }
44164416+ * ```
44174417+ *
44184418+ * @generated from field: optional google.protobuf.Duration within = 9;
44194419+ */
44204420+ within?: Duration;
44214421+44224422+ /**
44234423+ * `example` specifies values that the field may have. These values SHOULD
44244424+ * conform to other rules. `example` values will not impact validation
44254425+ * but may be used as helpful guidance on how to populate the given field.
44264426+ *
44274427+ * ```proto
44284428+ * message MyTimestamp {
44294429+ * google.protobuf.Timestamp value = 1 [
44304430+ * (buf.validate.field).timestamp.example = { seconds: 1672444800 },
44314431+ * (buf.validate.field).timestamp.example = { seconds: 1672531200 },
44324432+ * ];
44334433+ * }
44344434+ * ```
44354435+ *
44364436+ * @generated from field: repeated google.protobuf.Timestamp example = 10;
44374437+ */
44384438+ example: Timestamp[];
44394439+};
44404440+44414441+/**
44424442+ * Describes the message buf.validate.TimestampRules.
44434443+ * Use `create(TimestampRulesSchema)` to create a new message.
44444444+ */
44454445+export const TimestampRulesSchema: GenMessage<TimestampRules> = /*@__PURE__*/
44464446+ messageDesc(file_buf_validate_validate, 27);
44474447+44484448+/**
44494449+ * `Violations` is a collection of `Violation` messages. This message type is returned by
44504450+ * Protovalidate when a proto message fails to meet the requirements set by the `Rule` validation rules.
44514451+ * Each individual violation is represented by a `Violation` message.
44524452+ *
44534453+ * @generated from message buf.validate.Violations
44544454+ */
44554455+export type Violations = Message<"buf.validate.Violations"> & {
44564456+ /**
44574457+ * `violations` is a repeated field that contains all the `Violation` messages corresponding to the violations detected.
44584458+ *
44594459+ * @generated from field: repeated buf.validate.Violation violations = 1;
44604460+ */
44614461+ violations: Violation[];
44624462+};
44634463+44644464+/**
44654465+ * Describes the message buf.validate.Violations.
44664466+ * Use `create(ViolationsSchema)` to create a new message.
44674467+ */
44684468+export const ViolationsSchema: GenMessage<Violations> = /*@__PURE__*/
44694469+ messageDesc(file_buf_validate_validate, 28);
44704470+44714471+/**
44724472+ * `Violation` represents a single instance where a validation rule, expressed
44734473+ * as a `Rule`, was not met. It provides information about the field that
44744474+ * caused the violation, the specific rule that wasn't fulfilled, and a
44754475+ * human-readable error message.
44764476+ *
44774477+ * For example, consider the following message:
44784478+ *
44794479+ * ```proto
44804480+ * message User {
44814481+ * int32 age = 1 [(buf.validate.field).cel = {
44824482+ * id: "user.age",
44834483+ * expression: "this < 18 ? 'User must be at least 18 years old' : ''",
44844484+ * }];
44854485+ * }
44864486+ * ```
44874487+ *
44884488+ * It could produce the following violation:
44894489+ *
44904490+ * ```json
44914491+ * {
44924492+ * "ruleId": "user.age",
44934493+ * "message": "User must be at least 18 years old",
44944494+ * "field": {
44954495+ * "elements": [
44964496+ * {
44974497+ * "fieldNumber": 1,
44984498+ * "fieldName": "age",
44994499+ * "fieldType": "TYPE_INT32"
45004500+ * }
45014501+ * ]
45024502+ * },
45034503+ * "rule": {
45044504+ * "elements": [
45054505+ * {
45064506+ * "fieldNumber": 23,
45074507+ * "fieldName": "cel",
45084508+ * "fieldType": "TYPE_MESSAGE",
45094509+ * "index": "0"
45104510+ * }
45114511+ * ]
45124512+ * }
45134513+ * }
45144514+ * ```
45154515+ *
45164516+ * @generated from message buf.validate.Violation
45174517+ */
45184518+export type Violation = Message<"buf.validate.Violation"> & {
45194519+ /**
45204520+ * `field` is a machine-readable path to the field that failed validation.
45214521+ * This could be a nested field, in which case the path will include all the parent fields leading to the actual field that caused the violation.
45224522+ *
45234523+ * For example, consider the following message:
45244524+ *
45254525+ * ```proto
45264526+ * message Message {
45274527+ * bool a = 1 [(buf.validate.field).required = true];
45284528+ * }
45294529+ * ```
45304530+ *
45314531+ * It could produce the following violation:
45324532+ *
45334533+ * ```textproto
45344534+ * violation {
45354535+ * field { element { field_number: 1, field_name: "a", field_type: 8 } }
45364536+ * ...
45374537+ * }
45384538+ * ```
45394539+ *
45404540+ * @generated from field: optional buf.validate.FieldPath field = 5;
45414541+ */
45424542+ field?: FieldPath;
45434543+45444544+ /**
45454545+ * `rule` is a machine-readable path that points to the specific rule that failed validation.
45464546+ * This will be a nested field starting from the FieldRules of the field that failed validation.
45474547+ * For custom rules, this will provide the path of the rule, e.g. `cel[0]`.
45484548+ *
45494549+ * For example, consider the following message:
45504550+ *
45514551+ * ```proto
45524552+ * message Message {
45534553+ * bool a = 1 [(buf.validate.field).required = true];
45544554+ * bool b = 2 [(buf.validate.field).cel = {
45554555+ * id: "custom_rule",
45564556+ * expression: "!this ? 'b must be true': ''"
45574557+ * }]
45584558+ * }
45594559+ * ```
45604560+ *
45614561+ * It could produce the following violations:
45624562+ *
45634563+ * ```textproto
45644564+ * violation {
45654565+ * rule { element { field_number: 25, field_name: "required", field_type: 8 } }
45664566+ * ...
45674567+ * }
45684568+ * violation {
45694569+ * rule { element { field_number: 23, field_name: "cel", field_type: 11, index: 0 } }
45704570+ * ...
45714571+ * }
45724572+ * ```
45734573+ *
45744574+ * @generated from field: optional buf.validate.FieldPath rule = 6;
45754575+ */
45764576+ rule?: FieldPath;
45774577+45784578+ /**
45794579+ * `rule_id` is the unique identifier of the `Rule` that was not fulfilled.
45804580+ * This is the same `id` that was specified in the `Rule` message, allowing easy tracing of which rule was violated.
45814581+ *
45824582+ * @generated from field: optional string rule_id = 2;
45834583+ */
45844584+ ruleId: string;
45854585+45864586+ /**
45874587+ * `message` is a human-readable error message that describes the nature of the violation.
45884588+ * This can be the default error message from the violated `Rule`, or it can be a custom message that gives more context about the violation.
45894589+ *
45904590+ * @generated from field: optional string message = 3;
45914591+ */
45924592+ message: string;
45934593+45944594+ /**
45954595+ * `for_key` indicates whether the violation was caused by a map key, rather than a value.
45964596+ *
45974597+ * @generated from field: optional bool for_key = 4;
45984598+ */
45994599+ forKey: boolean;
46004600+};
46014601+46024602+/**
46034603+ * Describes the message buf.validate.Violation.
46044604+ * Use `create(ViolationSchema)` to create a new message.
46054605+ */
46064606+export const ViolationSchema: GenMessage<Violation> = /*@__PURE__*/
46074607+ messageDesc(file_buf_validate_validate, 29);
46084608+46094609+/**
46104610+ * `FieldPath` provides a path to a nested protobuf field.
46114611+ *
46124612+ * This message provides enough information to render a dotted field path even without protobuf descriptors.
46134613+ * It also provides enough information to resolve a nested field through unknown wire data.
46144614+ *
46154615+ * @generated from message buf.validate.FieldPath
46164616+ */
46174617+export type FieldPath = Message<"buf.validate.FieldPath"> & {
46184618+ /**
46194619+ * `elements` contains each element of the path, starting from the root and recursing downward.
46204620+ *
46214621+ * @generated from field: repeated buf.validate.FieldPathElement elements = 1;
46224622+ */
46234623+ elements: FieldPathElement[];
46244624+};
46254625+46264626+/**
46274627+ * Describes the message buf.validate.FieldPath.
46284628+ * Use `create(FieldPathSchema)` to create a new message.
46294629+ */
46304630+export const FieldPathSchema: GenMessage<FieldPath> = /*@__PURE__*/
46314631+ messageDesc(file_buf_validate_validate, 30);
46324632+46334633+/**
46344634+ * `FieldPathElement` provides enough information to nest through a single protobuf field.
46354635+ *
46364636+ * If the selected field is a map or repeated field, the `subscript` value selects a specific element from it.
46374637+ * A path that refers to a value nested under a map key or repeated field index will have a `subscript` value.
46384638+ * The `field_type` field allows unambiguous resolution of a field even if descriptors are not available.
46394639+ *
46404640+ * @generated from message buf.validate.FieldPathElement
46414641+ */
46424642+export type FieldPathElement = Message<"buf.validate.FieldPathElement"> & {
46434643+ /**
46444644+ * `field_number` is the field number this path element refers to.
46454645+ *
46464646+ * @generated from field: optional int32 field_number = 1;
46474647+ */
46484648+ fieldNumber: number;
46494649+46504650+ /**
46514651+ * `field_name` contains the field name this path element refers to.
46524652+ * This can be used to display a human-readable path even if the field number is unknown.
46534653+ *
46544654+ * @generated from field: optional string field_name = 2;
46554655+ */
46564656+ fieldName: string;
46574657+46584658+ /**
46594659+ * `field_type` specifies the type of this field. When using reflection, this value is not needed.
46604660+ *
46614661+ * This value is provided to make it possible to traverse unknown fields through wire data.
46624662+ * When traversing wire data, be mindful of both packed[1] and delimited[2] encoding schemes.
46634663+ *
46644664+ * [1]: https://protobuf.dev/programming-guides/encoding/#packed
46654665+ * [2]: https://protobuf.dev/programming-guides/encoding/#groups
46664666+ *
46674667+ * N.B.: Although groups are deprecated, the corresponding delimited encoding scheme is not, and
46684668+ * can be explicitly used in Protocol Buffers 2023 Edition.
46694669+ *
46704670+ * @generated from field: optional google.protobuf.FieldDescriptorProto.Type field_type = 3;
46714671+ */
46724672+ fieldType: FieldDescriptorProto_Type;
46734673+46744674+ /**
46754675+ * `key_type` specifies the map key type of this field. This value is useful when traversing
46764676+ * unknown fields through wire data: specifically, it allows handling the differences between
46774677+ * different integer encodings.
46784678+ *
46794679+ * @generated from field: optional google.protobuf.FieldDescriptorProto.Type key_type = 4;
46804680+ */
46814681+ keyType: FieldDescriptorProto_Type;
46824682+46834683+ /**
46844684+ * `value_type` specifies map value type of this field. This is useful if you want to display a
46854685+ * value inside unknown fields through wire data.
46864686+ *
46874687+ * @generated from field: optional google.protobuf.FieldDescriptorProto.Type value_type = 5;
46884688+ */
46894689+ valueType: FieldDescriptorProto_Type;
46904690+46914691+ /**
46924692+ * `subscript` contains a repeated index or map key, if this path element nests into a repeated or map field.
46934693+ *
46944694+ * @generated from oneof buf.validate.FieldPathElement.subscript
46954695+ */
46964696+ subscript: {
46974697+ /**
46984698+ * `index` specifies a 0-based index into a repeated field.
46994699+ *
47004700+ * @generated from field: uint64 index = 6;
47014701+ */
47024702+ value: bigint;
47034703+ case: "index";
47044704+ } | {
47054705+ /**
47064706+ * `bool_key` specifies a map key of type bool.
47074707+ *
47084708+ * @generated from field: bool bool_key = 7;
47094709+ */
47104710+ value: boolean;
47114711+ case: "boolKey";
47124712+ } | {
47134713+ /**
47144714+ * `int_key` specifies a map key of type int32, int64, sint32, sint64, sfixed32 or sfixed64.
47154715+ *
47164716+ * @generated from field: int64 int_key = 8;
47174717+ */
47184718+ value: bigint;
47194719+ case: "intKey";
47204720+ } | {
47214721+ /**
47224722+ * `uint_key` specifies a map key of type uint32, uint64, fixed32 or fixed64.
47234723+ *
47244724+ * @generated from field: uint64 uint_key = 9;
47254725+ */
47264726+ value: bigint;
47274727+ case: "uintKey";
47284728+ } | {
47294729+ /**
47304730+ * `string_key` specifies a map key of type string.
47314731+ *
47324732+ * @generated from field: string string_key = 10;
47334733+ */
47344734+ value: string;
47354735+ case: "stringKey";
47364736+ } | { case: undefined; value?: undefined };
47374737+};
47384738+47394739+/**
47404740+ * Describes the message buf.validate.FieldPathElement.
47414741+ * Use `create(FieldPathElementSchema)` to create a new message.
47424742+ */
47434743+export const FieldPathElementSchema: GenMessage<FieldPathElement> = /*@__PURE__*/
47444744+ messageDesc(file_buf_validate_validate, 31);
47454745+47464746+/**
47474747+ * Specifies how `FieldRules.ignore` behaves, depending on the field's value, and
47484748+ * whether the field tracks presence.
47494749+ *
47504750+ * @generated from enum buf.validate.Ignore
47514751+ */
47524752+export enum Ignore {
47534753+ /**
47544754+ * Ignore rules if the field tracks presence and is unset. This is the default
47554755+ * behavior.
47564756+ *
47574757+ * In proto3, only message fields, members of a Protobuf `oneof`, and fields
47584758+ * with the `optional` label track presence. Consequently, the following fields
47594759+ * are always validated, whether a value is set or not:
47604760+ *
47614761+ * ```proto
47624762+ * syntax="proto3";
47634763+ *
47644764+ * message RulesApply {
47654765+ * string email = 1 [
47664766+ * (buf.validate.field).string.email = true
47674767+ * ];
47684768+ * int32 age = 2 [
47694769+ * (buf.validate.field).int32.gt = 0
47704770+ * ];
47714771+ * repeated string labels = 3 [
47724772+ * (buf.validate.field).repeated.min_items = 1
47734773+ * ];
47744774+ * }
47754775+ * ```
47764776+ *
47774777+ * In contrast, the following fields track presence, and are only validated if
47784778+ * a value is set:
47794779+ *
47804780+ * ```proto
47814781+ * syntax="proto3";
47824782+ *
47834783+ * message RulesApplyIfSet {
47844784+ * optional string email = 1 [
47854785+ * (buf.validate.field).string.email = true
47864786+ * ];
47874787+ * oneof ref {
47884788+ * string reference = 2 [
47894789+ * (buf.validate.field).string.uuid = true
47904790+ * ];
47914791+ * string name = 3 [
47924792+ * (buf.validate.field).string.min_len = 4
47934793+ * ];
47944794+ * }
47954795+ * SomeMessage msg = 4 [
47964796+ * (buf.validate.field).cel = {/* ... *\/}
47974797+ * ];
47984798+ * }
47994799+ * ```
48004800+ *
48014801+ * To ensure that such a field is set, add the `required` rule.
48024802+ *
48034803+ * To learn which fields track presence, see the
48044804+ * [Field Presence cheat sheet](https://protobuf.dev/programming-guides/field_presence/#cheat).
48054805+ *
48064806+ * @generated from enum value: IGNORE_UNSPECIFIED = 0;
48074807+ */
48084808+ UNSPECIFIED = 0,
48094809+48104810+ /**
48114811+ * Ignore rules if the field is unset, or set to the zero value.
48124812+ *
48134813+ * The zero value depends on the field type:
48144814+ * - For strings, the zero value is the empty string.
48154815+ * - For bytes, the zero value is empty bytes.
48164816+ * - For bool, the zero value is false.
48174817+ * - For numeric types, the zero value is zero.
48184818+ * - For enums, the zero value is the first defined enum value.
48194819+ * - For repeated fields, the zero is an empty list.
48204820+ * - For map fields, the zero is an empty map.
48214821+ * - For message fields, absence of the message (typically a null-value) is considered zero value.
48224822+ *
48234823+ * For fields that track presence (e.g. adding the `optional` label in proto3),
48244824+ * this a no-op and behavior is the same as the default `IGNORE_UNSPECIFIED`.
48254825+ *
48264826+ * @generated from enum value: IGNORE_IF_ZERO_VALUE = 1;
48274827+ */
48284828+ IF_ZERO_VALUE = 1,
48294829+48304830+ /**
48314831+ * Always ignore rules, including the `required` rule.
48324832+ *
48334833+ * This is useful for ignoring the rules of a referenced message, or to
48344834+ * temporarily ignore rules during development.
48354835+ *
48364836+ * ```proto
48374837+ * message MyMessage {
48384838+ * // The field's rules will always be ignored, including any validations
48394839+ * // on value's fields.
48404840+ * MyOtherMessage value = 1 [
48414841+ * (buf.validate.field).ignore = IGNORE_ALWAYS
48424842+ * ];
48434843+ * }
48444844+ * ```
48454845+ *
48464846+ * @generated from enum value: IGNORE_ALWAYS = 3;
48474847+ */
48484848+ ALWAYS = 3,
48494849+}
48504850+48514851+/**
48524852+ * Describes the enum buf.validate.Ignore.
48534853+ */
48544854+export const IgnoreSchema: GenEnum<Ignore> = /*@__PURE__*/
48554855+ enumDesc(file_buf_validate_validate, 0);
48564856+48574857+/**
48584858+ * KnownRegex contains some well-known patterns.
48594859+ *
48604860+ * @generated from enum buf.validate.KnownRegex
48614861+ */
48624862+export enum KnownRegex {
48634863+ /**
48644864+ * @generated from enum value: KNOWN_REGEX_UNSPECIFIED = 0;
48654865+ */
48664866+ UNSPECIFIED = 0,
48674867+48684868+ /**
48694869+ * HTTP header name as defined by [RFC 7230](https://datatracker.ietf.org/doc/html/rfc7230#section-3.2).
48704870+ *
48714871+ * @generated from enum value: KNOWN_REGEX_HTTP_HEADER_NAME = 1;
48724872+ */
48734873+ HTTP_HEADER_NAME = 1,
48744874+48754875+ /**
48764876+ * HTTP header value as defined by [RFC 7230](https://datatracker.ietf.org/doc/html/rfc7230#section-3.2.4).
48774877+ *
48784878+ * @generated from enum value: KNOWN_REGEX_HTTP_HEADER_VALUE = 2;
48794879+ */
48804880+ HTTP_HEADER_VALUE = 2,
48814881+}
48824882+48834883+/**
48844884+ * Describes the enum buf.validate.KnownRegex.
48854885+ */
48864886+export const KnownRegexSchema: GenEnum<KnownRegex> = /*@__PURE__*/
48874887+ enumDesc(file_buf_validate_validate, 1);
48884888+48894889+/**
48904890+ * Rules specify the validations to be performed on this message. By default,
48914891+ * no validation is performed against a message.
48924892+ *
48934893+ * @generated from extension: optional buf.validate.MessageRules message = 1159;
48944894+ */
48954895+export const message: GenExtension<MessageOptions, MessageRules> = /*@__PURE__*/
48964896+ extDesc(file_buf_validate_validate, 0);
48974897+48984898+/**
48994899+ * Rules specify the validations to be performed on this oneof. By default,
49004900+ * no validation is performed against a oneof.
49014901+ *
49024902+ * @generated from extension: optional buf.validate.OneofRules oneof = 1159;
49034903+ */
49044904+export const oneof: GenExtension<OneofOptions, OneofRules> = /*@__PURE__*/
49054905+ extDesc(file_buf_validate_validate, 1);
49064906+49074907+/**
49084908+ * Rules specify the validations to be performed on this field. By default,
49094909+ * no validation is performed against a field.
49104910+ *
49114911+ * @generated from extension: optional buf.validate.FieldRules field = 1159;
49124912+ */
49134913+export const field: GenExtension<FieldOptions, FieldRules> = /*@__PURE__*/
49144914+ extDesc(file_buf_validate_validate, 2);
49154915+49164916+/**
49174917+ * Specifies predefined rules. When extending a standard rule message,
49184918+ * this adds additional CEL expressions that apply when the extension is used.
49194919+ *
49204920+ * ```proto
49214921+ * extend buf.validate.Int32Rules {
49224922+ * bool is_zero [(buf.validate.predefined).cel = {
49234923+ * id: "int32.is_zero",
49244924+ * message: "value must be zero",
49254925+ * expression: "!rule || this == 0",
49264926+ * }];
49274927+ * }
49284928+ *
49294929+ * message Foo {
49304930+ * int32 reserved = 1 [(buf.validate.field).int32.(is_zero) = true];
49314931+ * }
49324932+ * ```
49334933+ *
49344934+ * @generated from extension: optional buf.validate.PredefinedRules predefined = 1160;
49354935+ */
49364936+export const predefined: GenExtension<FieldOptions, PredefinedRules> = /*@__PURE__*/
49374937+ extDesc(file_buf_validate_validate, 3);
49384938+