Openstatus sdk www.openstatus.dev
at maintenance-api 4974 lines 234 kB view raw
1// Copyright 2023-2025 Buf Technologies, Inc. 2// 3// Licensed under the Apache License, Version 2.0 (the "License"); 4// you may not use this file except in compliance with the License. 5// You may obtain a copy of the License at 6// 7// http://www.apache.org/licenses/LICENSE-2.0 8// 9// Unless required by applicable law or agreed to in writing, software 10// distributed under the License is distributed on an "AS IS" BASIS, 11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12// See the License for the specific language governing permissions and 13// limitations under the License. 14 15// @generated by protoc-gen-es v2.11.0 with parameter "target=ts,import_extension=ts" 16// @generated from file buf/validate/validate.proto (package buf.validate, syntax proto2) 17/* eslint-disable */ 18 19import type { 20 GenEnum, 21 GenExtension, 22 GenFile, 23 GenMessage, 24} from "@bufbuild/protobuf/codegenv2"; 25import { 26 enumDesc, 27 extDesc, 28 fileDesc, 29 messageDesc, 30} from "@bufbuild/protobuf/codegenv2"; 31import type { 32 Duration, 33 FieldDescriptorProto_Type, 34 FieldMask, 35 FieldOptions, 36 MessageOptions, 37 OneofOptions, 38 Timestamp, 39} from "@bufbuild/protobuf/wkt"; 40import { 41 file_google_protobuf_descriptor, 42 file_google_protobuf_duration, 43 file_google_protobuf_field_mask, 44 file_google_protobuf_timestamp, 45} from "@bufbuild/protobuf/wkt"; 46import type { Message } from "@bufbuild/protobuf"; 47 48/** 49 * Describes the file buf/validate/validate.proto. 50 */ 51export const file_buf_validate_validate: GenFile = /*@__PURE__*/ 52 fileDesc( 53 "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", 54 [ 55 file_google_protobuf_descriptor, 56 file_google_protobuf_duration, 57 file_google_protobuf_field_mask, 58 file_google_protobuf_timestamp, 59 ], 60 ); 61 62/** 63 * `Rule` represents a validation rule written in the Common Expression 64 * Language (CEL) syntax. Each Rule includes a unique identifier, an 65 * optional error message, and the CEL expression to evaluate. For more 66 * information, [see our documentation](https://buf.build/docs/protovalidate/schemas/custom-rules/). 67 * 68 * ```proto 69 * message Foo { 70 * option (buf.validate.message).cel = { 71 * id: "foo.bar" 72 * message: "bar must be greater than 0" 73 * expression: "this.bar > 0" 74 * }; 75 * int32 bar = 1; 76 * } 77 * ``` 78 * 79 * @generated from message buf.validate.Rule 80 */ 81export type Rule = Message<"buf.validate.Rule"> & { 82 /** 83 * `id` is a string that serves as a machine-readable name for this Rule. 84 * It should be unique within its scope, which could be either a message or a field. 85 * 86 * @generated from field: optional string id = 1; 87 */ 88 id: string; 89 90 /** 91 * `message` is an optional field that provides a human-readable error message 92 * for this Rule when the CEL expression evaluates to false. If a 93 * non-empty message is provided, any strings resulting from the CEL 94 * expression evaluation are ignored. 95 * 96 * @generated from field: optional string message = 2; 97 */ 98 message: string; 99 100 /** 101 * `expression` is the actual CEL expression that will be evaluated for 102 * validation. This string must resolve to either a boolean or a string 103 * value. If the expression evaluates to false or a non-empty string, the 104 * validation is considered failed, and the message is rejected. 105 * 106 * @generated from field: optional string expression = 3; 107 */ 108 expression: string; 109}; 110 111/** 112 * Describes the message buf.validate.Rule. 113 * Use `create(RuleSchema)` to create a new message. 114 */ 115export const RuleSchema: GenMessage<Rule> = /*@__PURE__*/ 116 messageDesc(file_buf_validate_validate, 0); 117 118/** 119 * MessageRules represents validation rules that are applied to the entire message. 120 * It includes disabling options and a list of Rule messages representing Common Expression Language (CEL) validation rules. 121 * 122 * @generated from message buf.validate.MessageRules 123 */ 124export type MessageRules = Message<"buf.validate.MessageRules"> & { 125 /** 126 * `cel_expression` is a repeated field CEL expressions. Each expression specifies a validation 127 * rule to be applied to this message. These rules are written in Common Expression Language (CEL) syntax. 128 * 129 * This is a simplified form of the `cel` Rule field, where only `expression` is set. This allows for 130 * simpler syntax when defining CEL Rules where `id` and `message` derived from the `expression`. `id` will 131 * be same as the `expression`. 132 * 133 * For more information, [see our documentation](https://buf.build/docs/protovalidate/schemas/custom-rules/). 134 * 135 * ```proto 136 * message MyMessage { 137 * // The field `foo` must be greater than 42. 138 * option (buf.validate.message).cel_expression = "this.foo > 42"; 139 * // The field `foo` must be less than 84. 140 * option (buf.validate.message).cel_expression = "this.foo < 84"; 141 * optional int32 foo = 1; 142 * } 143 * ``` 144 * 145 * @generated from field: repeated string cel_expression = 5; 146 */ 147 celExpression: string[]; 148 149 /** 150 * `cel` is a repeated field of type Rule. Each Rule specifies a validation rule to be applied to this message. 151 * These rules are written in Common Expression Language (CEL) syntax. For more information, 152 * [see our documentation](https://buf.build/docs/protovalidate/schemas/custom-rules/). 153 * 154 * ```proto 155 * message MyMessage { 156 * // The field `foo` must be greater than 42. 157 * option (buf.validate.message).cel = { 158 * id: "my_message.value", 159 * message: "value must be greater than 42", 160 * expression: "this.foo > 42", 161 * }; 162 * optional int32 foo = 1; 163 * } 164 * ``` 165 * 166 * @generated from field: repeated buf.validate.Rule cel = 3; 167 */ 168 cel: Rule[]; 169 170 /** 171 * `oneof` is a repeated field of type MessageOneofRule that specifies a list of fields 172 * of which at most one can be present. If `required` is also specified, then exactly one 173 * of the specified fields _must_ be present. 174 * 175 * This will enforce oneof-like constraints with a few features not provided by 176 * actual Protobuf oneof declarations: 177 * 1. Repeated and map fields are allowed in this validation. In a Protobuf oneof, 178 * only scalar fields are allowed. 179 * 2. Fields with implicit presence are allowed. In a Protobuf oneof, all member 180 * fields have explicit presence. This means that, for the purpose of determining 181 * how many fields are set, explicitly setting such a field to its zero value is 182 * effectively the same as not setting it at all. 183 * 3. This will always generate validation errors for a message unmarshalled from 184 * serialized data that sets more than one field. With a Protobuf oneof, when 185 * multiple fields are present in the serialized form, earlier values are usually 186 * silently ignored when unmarshalling, with only the last field being set when 187 * unmarshalling completes. 188 * 189 * Note that adding a field to a `oneof` will also set the IGNORE_IF_ZERO_VALUE on the fields. This means 190 * only the field that is set will be validated and the unset fields are not validated according to the field rules. 191 * This behavior can be overridden by setting `ignore` against a field. 192 * 193 * ```proto 194 * message MyMessage { 195 * // Only one of `field1` or `field2` _can_ be present in this message. 196 * option (buf.validate.message).oneof = { fields: ["field1", "field2"] }; 197 * // Exactly one of `field3` or `field4` _must_ be present in this message. 198 * option (buf.validate.message).oneof = { fields: ["field3", "field4"], required: true }; 199 * string field1 = 1; 200 * bytes field2 = 2; 201 * bool field3 = 3; 202 * int32 field4 = 4; 203 * } 204 * ``` 205 * 206 * @generated from field: repeated buf.validate.MessageOneofRule oneof = 4; 207 */ 208 oneof: MessageOneofRule[]; 209}; 210 211/** 212 * Describes the message buf.validate.MessageRules. 213 * Use `create(MessageRulesSchema)` to create a new message. 214 */ 215export const MessageRulesSchema: GenMessage<MessageRules> = /*@__PURE__*/ 216 messageDesc(file_buf_validate_validate, 1); 217 218/** 219 * @generated from message buf.validate.MessageOneofRule 220 */ 221export type MessageOneofRule = Message<"buf.validate.MessageOneofRule"> & { 222 /** 223 * A list of field names to include in the oneof. All field names must be 224 * defined in the message. At least one field must be specified, and 225 * duplicates are not permitted. 226 * 227 * @generated from field: repeated string fields = 1; 228 */ 229 fields: string[]; 230 231 /** 232 * If true, one of the fields specified _must_ be set. 233 * 234 * @generated from field: optional bool required = 2; 235 */ 236 required: boolean; 237}; 238 239/** 240 * Describes the message buf.validate.MessageOneofRule. 241 * Use `create(MessageOneofRuleSchema)` to create a new message. 242 */ 243export const MessageOneofRuleSchema: GenMessage< 244 MessageOneofRule 245> = /*@__PURE__*/ 246 messageDesc(file_buf_validate_validate, 2); 247 248/** 249 * The `OneofRules` message type enables you to manage rules for 250 * oneof fields in your protobuf messages. 251 * 252 * @generated from message buf.validate.OneofRules 253 */ 254export type OneofRules = Message<"buf.validate.OneofRules"> & { 255 /** 256 * If `required` is true, exactly one field of the oneof must be set. A 257 * validation error is returned if no fields in the oneof are set. Further rules 258 * should be placed on the fields themselves to ensure they are valid values, 259 * such as `min_len` or `gt`. 260 * 261 * ```proto 262 * message MyMessage { 263 * oneof value { 264 * // Either `a` or `b` must be set. If `a` is set, it must also be 265 * // non-empty; whereas if `b` is set, it can still be an empty string. 266 * option (buf.validate.oneof).required = true; 267 * string a = 1 [(buf.validate.field).string.min_len = 1]; 268 * string b = 2; 269 * } 270 * } 271 * ``` 272 * 273 * @generated from field: optional bool required = 1; 274 */ 275 required: boolean; 276}; 277 278/** 279 * Describes the message buf.validate.OneofRules. 280 * Use `create(OneofRulesSchema)` to create a new message. 281 */ 282export const OneofRulesSchema: GenMessage<OneofRules> = /*@__PURE__*/ 283 messageDesc(file_buf_validate_validate, 3); 284 285/** 286 * FieldRules encapsulates the rules for each type of field. Depending on 287 * the field, the correct set should be used to ensure proper validations. 288 * 289 * @generated from message buf.validate.FieldRules 290 */ 291export type FieldRules = Message<"buf.validate.FieldRules"> & { 292 /** 293 * `cel_expression` is a repeated field CEL expressions. Each expression specifies a validation 294 * rule to be applied to this message. These rules are written in Common Expression Language (CEL) syntax. 295 * 296 * This is a simplified form of the `cel` Rule field, where only `expression` is set. This allows for 297 * simpler syntax when defining CEL Rules where `id` and `message` derived from the `expression`. `id` will 298 * be same as the `expression`. 299 * 300 * For more information, [see our documentation](https://buf.build/docs/protovalidate/schemas/custom-rules/). 301 * 302 * ```proto 303 * message MyMessage { 304 * // The field `value` must be greater than 42. 305 * optional int32 value = 1 [(buf.validate.field).cel_expression = "this > 42"]; 306 * } 307 * ``` 308 * 309 * @generated from field: repeated string cel_expression = 29; 310 */ 311 celExpression: string[]; 312 313 /** 314 * `cel` is a repeated field used to represent a textual expression 315 * in the Common Expression Language (CEL) syntax. For more information, 316 * [see our documentation](https://buf.build/docs/protovalidate/schemas/custom-rules/). 317 * 318 * ```proto 319 * message MyMessage { 320 * // The field `value` must be greater than 42. 321 * optional int32 value = 1 [(buf.validate.field).cel = { 322 * id: "my_message.value", 323 * message: "value must be greater than 42", 324 * expression: "this > 42", 325 * }]; 326 * } 327 * ``` 328 * 329 * @generated from field: repeated buf.validate.Rule cel = 23; 330 */ 331 cel: Rule[]; 332 333 /** 334 * If `required` is true, the field must be set. A validation error is returned 335 * if the field is not set. 336 * 337 * ```proto 338 * syntax="proto3"; 339 * 340 * message FieldsWithPresence { 341 * // Requires any string to be set, including the empty string. 342 * optional string link = 1 [ 343 * (buf.validate.field).required = true 344 * ]; 345 * // Requires true or false to be set. 346 * optional bool disabled = 2 [ 347 * (buf.validate.field).required = true 348 * ]; 349 * // Requires a message to be set, including the empty message. 350 * SomeMessage msg = 4 [ 351 * (buf.validate.field).required = true 352 * ]; 353 * } 354 * ``` 355 * 356 * All fields in the example above track presence. By default, Protovalidate 357 * ignores rules on those fields if no value is set. `required` ensures that 358 * the fields are set and valid. 359 * 360 * Fields that don't track presence are always validated by Protovalidate, 361 * whether they are set or not. It is not necessary to add `required`. It 362 * can be added to indicate that the field cannot be the zero value. 363 * 364 * ```proto 365 * syntax="proto3"; 366 * 367 * message FieldsWithoutPresence { 368 * // `string.email` always applies, even to an empty string. 369 * string link = 1 [ 370 * (buf.validate.field).string.email = true 371 * ]; 372 * // `repeated.min_items` always applies, even to an empty list. 373 * repeated string labels = 2 [ 374 * (buf.validate.field).repeated.min_items = 1 375 * ]; 376 * // `required`, for fields that don't track presence, indicates 377 * // the value of the field can't be the zero value. 378 * int32 zero_value_not_allowed = 3 [ 379 * (buf.validate.field).required = true 380 * ]; 381 * } 382 * ``` 383 * 384 * To learn which fields track presence, see the 385 * [Field Presence cheat sheet](https://protobuf.dev/programming-guides/field_presence/#cheat). 386 * 387 * Note: While field rules can be applied to repeated items, map keys, and map 388 * values, the elements are always considered to be set. Consequently, 389 * specifying `repeated.items.required` is redundant. 390 * 391 * @generated from field: optional bool required = 25; 392 */ 393 required: boolean; 394 395 /** 396 * Ignore validation rules on the field if its value matches the specified 397 * criteria. See the `Ignore` enum for details. 398 * 399 * ```proto 400 * message UpdateRequest { 401 * // The uri rule only applies if the field is not an empty string. 402 * string url = 1 [ 403 * (buf.validate.field).ignore = IGNORE_IF_ZERO_VALUE, 404 * (buf.validate.field).string.uri = true 405 * ]; 406 * } 407 * ``` 408 * 409 * @generated from field: optional buf.validate.Ignore ignore = 27; 410 */ 411 ignore: Ignore; 412 413 /** 414 * @generated from oneof buf.validate.FieldRules.type 415 */ 416 type: { 417 /** 418 * Scalar Field Types 419 * 420 * @generated from field: buf.validate.FloatRules float = 1; 421 */ 422 value: FloatRules; 423 case: "float"; 424 } | { 425 /** 426 * @generated from field: buf.validate.DoubleRules double = 2; 427 */ 428 value: DoubleRules; 429 case: "double"; 430 } | { 431 /** 432 * @generated from field: buf.validate.Int32Rules int32 = 3; 433 */ 434 value: Int32Rules; 435 case: "int32"; 436 } | { 437 /** 438 * @generated from field: buf.validate.Int64Rules int64 = 4; 439 */ 440 value: Int64Rules; 441 case: "int64"; 442 } | { 443 /** 444 * @generated from field: buf.validate.UInt32Rules uint32 = 5; 445 */ 446 value: UInt32Rules; 447 case: "uint32"; 448 } | { 449 /** 450 * @generated from field: buf.validate.UInt64Rules uint64 = 6; 451 */ 452 value: UInt64Rules; 453 case: "uint64"; 454 } | { 455 /** 456 * @generated from field: buf.validate.SInt32Rules sint32 = 7; 457 */ 458 value: SInt32Rules; 459 case: "sint32"; 460 } | { 461 /** 462 * @generated from field: buf.validate.SInt64Rules sint64 = 8; 463 */ 464 value: SInt64Rules; 465 case: "sint64"; 466 } | { 467 /** 468 * @generated from field: buf.validate.Fixed32Rules fixed32 = 9; 469 */ 470 value: Fixed32Rules; 471 case: "fixed32"; 472 } | { 473 /** 474 * @generated from field: buf.validate.Fixed64Rules fixed64 = 10; 475 */ 476 value: Fixed64Rules; 477 case: "fixed64"; 478 } | { 479 /** 480 * @generated from field: buf.validate.SFixed32Rules sfixed32 = 11; 481 */ 482 value: SFixed32Rules; 483 case: "sfixed32"; 484 } | { 485 /** 486 * @generated from field: buf.validate.SFixed64Rules sfixed64 = 12; 487 */ 488 value: SFixed64Rules; 489 case: "sfixed64"; 490 } | { 491 /** 492 * @generated from field: buf.validate.BoolRules bool = 13; 493 */ 494 value: BoolRules; 495 case: "bool"; 496 } | { 497 /** 498 * @generated from field: buf.validate.StringRules string = 14; 499 */ 500 value: StringRules; 501 case: "string"; 502 } | { 503 /** 504 * @generated from field: buf.validate.BytesRules bytes = 15; 505 */ 506 value: BytesRules; 507 case: "bytes"; 508 } | { 509 /** 510 * Complex Field Types 511 * 512 * @generated from field: buf.validate.EnumRules enum = 16; 513 */ 514 value: EnumRules; 515 case: "enum"; 516 } | { 517 /** 518 * @generated from field: buf.validate.RepeatedRules repeated = 18; 519 */ 520 value: RepeatedRules; 521 case: "repeated"; 522 } | { 523 /** 524 * @generated from field: buf.validate.MapRules map = 19; 525 */ 526 value: MapRules; 527 case: "map"; 528 } | { 529 /** 530 * Well-Known Field Types 531 * 532 * @generated from field: buf.validate.AnyRules any = 20; 533 */ 534 value: AnyRules; 535 case: "any"; 536 } | { 537 /** 538 * @generated from field: buf.validate.DurationRules duration = 21; 539 */ 540 value: DurationRules; 541 case: "duration"; 542 } | { 543 /** 544 * @generated from field: buf.validate.FieldMaskRules field_mask = 28; 545 */ 546 value: FieldMaskRules; 547 case: "fieldMask"; 548 } | { 549 /** 550 * @generated from field: buf.validate.TimestampRules timestamp = 22; 551 */ 552 value: TimestampRules; 553 case: "timestamp"; 554 } | { case: undefined; value?: undefined }; 555}; 556 557/** 558 * Describes the message buf.validate.FieldRules. 559 * Use `create(FieldRulesSchema)` to create a new message. 560 */ 561export const FieldRulesSchema: GenMessage<FieldRules> = /*@__PURE__*/ 562 messageDesc(file_buf_validate_validate, 4); 563 564/** 565 * PredefinedRules are custom rules that can be re-used with 566 * multiple fields. 567 * 568 * @generated from message buf.validate.PredefinedRules 569 */ 570export type PredefinedRules = Message<"buf.validate.PredefinedRules"> & { 571 /** 572 * `cel` is a repeated field used to represent a textual expression 573 * in the Common Expression Language (CEL) syntax. For more information, 574 * [see our documentation](https://buf.build/docs/protovalidate/schemas/predefined-rules/). 575 * 576 * ```proto 577 * message MyMessage { 578 * // The field `value` must be greater than 42. 579 * optional int32 value = 1 [(buf.validate.predefined).cel = { 580 * id: "my_message.value", 581 * message: "value must be greater than 42", 582 * expression: "this > 42", 583 * }]; 584 * } 585 * ``` 586 * 587 * @generated from field: repeated buf.validate.Rule cel = 1; 588 */ 589 cel: Rule[]; 590}; 591 592/** 593 * Describes the message buf.validate.PredefinedRules. 594 * Use `create(PredefinedRulesSchema)` to create a new message. 595 */ 596export const PredefinedRulesSchema: GenMessage<PredefinedRules> = /*@__PURE__*/ 597 messageDesc(file_buf_validate_validate, 5); 598 599/** 600 * FloatRules describes the rules applied to `float` values. These 601 * rules may also be applied to the `google.protobuf.FloatValue` Well-Known-Type. 602 * 603 * @generated from message buf.validate.FloatRules 604 */ 605export type FloatRules = Message<"buf.validate.FloatRules"> & { 606 /** 607 * `const` requires the field value to exactly match the specified value. If 608 * the field value doesn't match, an error message is generated. 609 * 610 * ```proto 611 * message MyFloat { 612 * // value must equal 42.0 613 * float value = 1 [(buf.validate.field).float.const = 42.0]; 614 * } 615 * ``` 616 * 617 * @generated from field: optional float const = 1; 618 */ 619 const: number; 620 621 /** 622 * @generated from oneof buf.validate.FloatRules.less_than 623 */ 624 lessThan: { 625 /** 626 * `lt` requires the field value to be less than the specified value (field < 627 * value). If the field value is equal to or greater than the specified value, 628 * an error message is generated. 629 * 630 * ```proto 631 * message MyFloat { 632 * // value must be less than 10.0 633 * float value = 1 [(buf.validate.field).float.lt = 10.0]; 634 * } 635 * ``` 636 * 637 * @generated from field: float lt = 2; 638 */ 639 value: number; 640 case: "lt"; 641 } | { 642 /** 643 * `lte` requires the field value to be less than or equal to the specified 644 * value (field <= value). If the field value is greater than the specified 645 * value, an error message is generated. 646 * 647 * ```proto 648 * message MyFloat { 649 * // value must be less than or equal to 10.0 650 * float value = 1 [(buf.validate.field).float.lte = 10.0]; 651 * } 652 * ``` 653 * 654 * @generated from field: float lte = 3; 655 */ 656 value: number; 657 case: "lte"; 658 } | { case: undefined; value?: undefined }; 659 660 /** 661 * @generated from oneof buf.validate.FloatRules.greater_than 662 */ 663 greaterThan: { 664 /** 665 * `gt` requires the field value to be greater than the specified value 666 * (exclusive). If the value of `gt` is larger than a specified `lt` or 667 * `lte`, the range is reversed, and the field value must be outside the 668 * specified range. If the field value doesn't meet the required conditions, 669 * an error message is generated. 670 * 671 * ```proto 672 * message MyFloat { 673 * // value must be greater than 5.0 [float.gt] 674 * float value = 1 [(buf.validate.field).float.gt = 5.0]; 675 * 676 * // value must be greater than 5 and less than 10.0 [float.gt_lt] 677 * float other_value = 2 [(buf.validate.field).float = { gt: 5.0, lt: 10.0 }]; 678 * 679 * // value must be greater than 10 or less than 5.0 [float.gt_lt_exclusive] 680 * float another_value = 3 [(buf.validate.field).float = { gt: 10.0, lt: 5.0 }]; 681 * } 682 * ``` 683 * 684 * @generated from field: float gt = 4; 685 */ 686 value: number; 687 case: "gt"; 688 } | { 689 /** 690 * `gte` requires the field value to be greater than or equal to the specified 691 * value (exclusive). If the value of `gte` is larger than a specified `lt` 692 * or `lte`, the range is reversed, and the field value must be outside the 693 * specified range. If the field value doesn't meet the required conditions, 694 * an error message is generated. 695 * 696 * ```proto 697 * message MyFloat { 698 * // value must be greater than or equal to 5.0 [float.gte] 699 * float value = 1 [(buf.validate.field).float.gte = 5.0]; 700 * 701 * // value must be greater than or equal to 5.0 and less than 10.0 [float.gte_lt] 702 * float other_value = 2 [(buf.validate.field).float = { gte: 5.0, lt: 10.0 }]; 703 * 704 * // value must be greater than or equal to 10.0 or less than 5.0 [float.gte_lt_exclusive] 705 * float another_value = 3 [(buf.validate.field).float = { gte: 10.0, lt: 5.0 }]; 706 * } 707 * ``` 708 * 709 * @generated from field: float gte = 5; 710 */ 711 value: number; 712 case: "gte"; 713 } | { case: undefined; value?: undefined }; 714 715 /** 716 * `in` requires the field value to be equal to one of the specified values. 717 * If the field value isn't one of the specified values, an error message 718 * is generated. 719 * 720 * ```proto 721 * message MyFloat { 722 * // value must be in list [1.0, 2.0, 3.0] 723 * float value = 1 [(buf.validate.field).float = { in: [1.0, 2.0, 3.0] }]; 724 * } 725 * ``` 726 * 727 * @generated from field: repeated float in = 6; 728 */ 729 in: number[]; 730 731 /** 732 * `in` requires the field value to not be equal to any of the specified 733 * values. If the field value is one of the specified values, an error 734 * message is generated. 735 * 736 * ```proto 737 * message MyFloat { 738 * // value must not be in list [1.0, 2.0, 3.0] 739 * float value = 1 [(buf.validate.field).float = { not_in: [1.0, 2.0, 3.0] }]; 740 * } 741 * ``` 742 * 743 * @generated from field: repeated float not_in = 7; 744 */ 745 notIn: number[]; 746 747 /** 748 * `finite` requires the field value to be finite. If the field value is 749 * infinite or NaN, an error message is generated. 750 * 751 * @generated from field: optional bool finite = 8; 752 */ 753 finite: boolean; 754 755 /** 756 * `example` specifies values that the field may have. These values SHOULD 757 * conform to other rules. `example` values will not impact validation 758 * but may be used as helpful guidance on how to populate the given field. 759 * 760 * ```proto 761 * message MyFloat { 762 * float value = 1 [ 763 * (buf.validate.field).float.example = 1.0, 764 * (buf.validate.field).float.example = inf 765 * ]; 766 * } 767 * ``` 768 * 769 * @generated from field: repeated float example = 9; 770 */ 771 example: number[]; 772}; 773 774/** 775 * Describes the message buf.validate.FloatRules. 776 * Use `create(FloatRulesSchema)` to create a new message. 777 */ 778export const FloatRulesSchema: GenMessage<FloatRules> = /*@__PURE__*/ 779 messageDesc(file_buf_validate_validate, 6); 780 781/** 782 * DoubleRules describes the rules applied to `double` values. These 783 * rules may also be applied to the `google.protobuf.DoubleValue` Well-Known-Type. 784 * 785 * @generated from message buf.validate.DoubleRules 786 */ 787export type DoubleRules = Message<"buf.validate.DoubleRules"> & { 788 /** 789 * `const` requires the field value to exactly match the specified value. If 790 * the field value doesn't match, an error message is generated. 791 * 792 * ```proto 793 * message MyDouble { 794 * // value must equal 42.0 795 * double value = 1 [(buf.validate.field).double.const = 42.0]; 796 * } 797 * ``` 798 * 799 * @generated from field: optional double const = 1; 800 */ 801 const: number; 802 803 /** 804 * @generated from oneof buf.validate.DoubleRules.less_than 805 */ 806 lessThan: { 807 /** 808 * `lt` requires the field value to be less than the specified value (field < 809 * value). If the field value is equal to or greater than the specified 810 * value, an error message is generated. 811 * 812 * ```proto 813 * message MyDouble { 814 * // value must be less than 10.0 815 * double value = 1 [(buf.validate.field).double.lt = 10.0]; 816 * } 817 * ``` 818 * 819 * @generated from field: double lt = 2; 820 */ 821 value: number; 822 case: "lt"; 823 } | { 824 /** 825 * `lte` requires the field value to be less than or equal to the specified value 826 * (field <= value). If the field value is greater than the specified value, 827 * an error message is generated. 828 * 829 * ```proto 830 * message MyDouble { 831 * // value must be less than or equal to 10.0 832 * double value = 1 [(buf.validate.field).double.lte = 10.0]; 833 * } 834 * ``` 835 * 836 * @generated from field: double lte = 3; 837 */ 838 value: number; 839 case: "lte"; 840 } | { case: undefined; value?: undefined }; 841 842 /** 843 * @generated from oneof buf.validate.DoubleRules.greater_than 844 */ 845 greaterThan: { 846 /** 847 * `gt` requires the field value to be greater than the specified value 848 * (exclusive). If the value of `gt` is larger than a specified `lt` or `lte`, 849 * the range is reversed, and the field value must be outside the specified 850 * range. If the field value doesn't meet the required conditions, an error 851 * message is generated. 852 * 853 * ```proto 854 * message MyDouble { 855 * // value must be greater than 5.0 [double.gt] 856 * double value = 1 [(buf.validate.field).double.gt = 5.0]; 857 * 858 * // value must be greater than 5 and less than 10.0 [double.gt_lt] 859 * double other_value = 2 [(buf.validate.field).double = { gt: 5.0, lt: 10.0 }]; 860 * 861 * // value must be greater than 10 or less than 5.0 [double.gt_lt_exclusive] 862 * double another_value = 3 [(buf.validate.field).double = { gt: 10.0, lt: 5.0 }]; 863 * } 864 * ``` 865 * 866 * @generated from field: double gt = 4; 867 */ 868 value: number; 869 case: "gt"; 870 } | { 871 /** 872 * `gte` requires the field value to be greater than or equal to the specified 873 * value (exclusive). If the value of `gte` is larger than a specified `lt` or 874 * `lte`, the range is reversed, and the field value must be outside the 875 * specified range. If the field value doesn't meet the required conditions, 876 * an error message is generated. 877 * 878 * ```proto 879 * message MyDouble { 880 * // value must be greater than or equal to 5.0 [double.gte] 881 * double value = 1 [(buf.validate.field).double.gte = 5.0]; 882 * 883 * // value must be greater than or equal to 5.0 and less than 10.0 [double.gte_lt] 884 * double other_value = 2 [(buf.validate.field).double = { gte: 5.0, lt: 10.0 }]; 885 * 886 * // value must be greater than or equal to 10.0 or less than 5.0 [double.gte_lt_exclusive] 887 * double another_value = 3 [(buf.validate.field).double = { gte: 10.0, lt: 5.0 }]; 888 * } 889 * ``` 890 * 891 * @generated from field: double gte = 5; 892 */ 893 value: number; 894 case: "gte"; 895 } | { case: undefined; value?: undefined }; 896 897 /** 898 * `in` requires the field value to be equal to one of the specified values. 899 * If the field value isn't one of the specified values, an error message is 900 * generated. 901 * 902 * ```proto 903 * message MyDouble { 904 * // value must be in list [1.0, 2.0, 3.0] 905 * double value = 1 [(buf.validate.field).double = { in: [1.0, 2.0, 3.0] }]; 906 * } 907 * ``` 908 * 909 * @generated from field: repeated double in = 6; 910 */ 911 in: number[]; 912 913 /** 914 * `not_in` requires the field value to not be equal to any of the specified 915 * values. If the field value is one of the specified values, an error 916 * message is generated. 917 * 918 * ```proto 919 * message MyDouble { 920 * // value must not be in list [1.0, 2.0, 3.0] 921 * double value = 1 [(buf.validate.field).double = { not_in: [1.0, 2.0, 3.0] }]; 922 * } 923 * ``` 924 * 925 * @generated from field: repeated double not_in = 7; 926 */ 927 notIn: number[]; 928 929 /** 930 * `finite` requires the field value to be finite. If the field value is 931 * infinite or NaN, an error message is generated. 932 * 933 * @generated from field: optional bool finite = 8; 934 */ 935 finite: boolean; 936 937 /** 938 * `example` specifies values that the field may have. These values SHOULD 939 * conform to other rules. `example` values will not impact validation 940 * but may be used as helpful guidance on how to populate the given field. 941 * 942 * ```proto 943 * message MyDouble { 944 * double value = 1 [ 945 * (buf.validate.field).double.example = 1.0, 946 * (buf.validate.field).double.example = inf 947 * ]; 948 * } 949 * ``` 950 * 951 * @generated from field: repeated double example = 9; 952 */ 953 example: number[]; 954}; 955 956/** 957 * Describes the message buf.validate.DoubleRules. 958 * Use `create(DoubleRulesSchema)` to create a new message. 959 */ 960export const DoubleRulesSchema: GenMessage<DoubleRules> = /*@__PURE__*/ 961 messageDesc(file_buf_validate_validate, 7); 962 963/** 964 * Int32Rules describes the rules applied to `int32` values. These 965 * rules may also be applied to the `google.protobuf.Int32Value` Well-Known-Type. 966 * 967 * @generated from message buf.validate.Int32Rules 968 */ 969export type Int32Rules = Message<"buf.validate.Int32Rules"> & { 970 /** 971 * `const` requires the field value to exactly match the specified value. If 972 * the field value doesn't match, an error message is generated. 973 * 974 * ```proto 975 * message MyInt32 { 976 * // value must equal 42 977 * int32 value = 1 [(buf.validate.field).int32.const = 42]; 978 * } 979 * ``` 980 * 981 * @generated from field: optional int32 const = 1; 982 */ 983 const: number; 984 985 /** 986 * @generated from oneof buf.validate.Int32Rules.less_than 987 */ 988 lessThan: { 989 /** 990 * `lt` requires the field value to be less than the specified value (field 991 * < value). If the field value is equal to or greater than the specified 992 * value, an error message is generated. 993 * 994 * ```proto 995 * message MyInt32 { 996 * // value must be less than 10 997 * int32 value = 1 [(buf.validate.field).int32.lt = 10]; 998 * } 999 * ``` 1000 * 1001 * @generated from field: int32 lt = 2; 1002 */ 1003 value: number; 1004 case: "lt"; 1005 } | { 1006 /** 1007 * `lte` requires the field value to be less than or equal to the specified 1008 * value (field <= value). If the field value is greater than the specified 1009 * value, an error message is generated. 1010 * 1011 * ```proto 1012 * message MyInt32 { 1013 * // value must be less than or equal to 10 1014 * int32 value = 1 [(buf.validate.field).int32.lte = 10]; 1015 * } 1016 * ``` 1017 * 1018 * @generated from field: int32 lte = 3; 1019 */ 1020 value: number; 1021 case: "lte"; 1022 } | { case: undefined; value?: undefined }; 1023 1024 /** 1025 * @generated from oneof buf.validate.Int32Rules.greater_than 1026 */ 1027 greaterThan: { 1028 /** 1029 * `gt` requires the field value to be greater than the specified value 1030 * (exclusive). If the value of `gt` is larger than a specified `lt` or 1031 * `lte`, the range is reversed, and the field value must be outside the 1032 * specified range. If the field value doesn't meet the required conditions, 1033 * an error message is generated. 1034 * 1035 * ```proto 1036 * message MyInt32 { 1037 * // value must be greater than 5 [int32.gt] 1038 * int32 value = 1 [(buf.validate.field).int32.gt = 5]; 1039 * 1040 * // value must be greater than 5 and less than 10 [int32.gt_lt] 1041 * int32 other_value = 2 [(buf.validate.field).int32 = { gt: 5, lt: 10 }]; 1042 * 1043 * // value must be greater than 10 or less than 5 [int32.gt_lt_exclusive] 1044 * int32 another_value = 3 [(buf.validate.field).int32 = { gt: 10, lt: 5 }]; 1045 * } 1046 * ``` 1047 * 1048 * @generated from field: int32 gt = 4; 1049 */ 1050 value: number; 1051 case: "gt"; 1052 } | { 1053 /** 1054 * `gte` requires the field value to be greater than or equal to the specified value 1055 * (exclusive). If the value of `gte` is larger than a specified `lt` or 1056 * `lte`, the range is reversed, and the field value must be outside the 1057 * specified range. If the field value doesn't meet the required conditions, 1058 * an error message is generated. 1059 * 1060 * ```proto 1061 * message MyInt32 { 1062 * // value must be greater than or equal to 5 [int32.gte] 1063 * int32 value = 1 [(buf.validate.field).int32.gte = 5]; 1064 * 1065 * // value must be greater than or equal to 5 and less than 10 [int32.gte_lt] 1066 * int32 other_value = 2 [(buf.validate.field).int32 = { gte: 5, lt: 10 }]; 1067 * 1068 * // value must be greater than or equal to 10 or less than 5 [int32.gte_lt_exclusive] 1069 * int32 another_value = 3 [(buf.validate.field).int32 = { gte: 10, lt: 5 }]; 1070 * } 1071 * ``` 1072 * 1073 * @generated from field: int32 gte = 5; 1074 */ 1075 value: number; 1076 case: "gte"; 1077 } | { case: undefined; value?: undefined }; 1078 1079 /** 1080 * `in` requires the field value to be equal to one of the specified values. 1081 * If the field value isn't one of the specified values, an error message is 1082 * generated. 1083 * 1084 * ```proto 1085 * message MyInt32 { 1086 * // value must be in list [1, 2, 3] 1087 * int32 value = 1 [(buf.validate.field).int32 = { in: [1, 2, 3] }]; 1088 * } 1089 * ``` 1090 * 1091 * @generated from field: repeated int32 in = 6; 1092 */ 1093 in: number[]; 1094 1095 /** 1096 * `not_in` requires the field value to not be equal to any of the specified 1097 * values. If the field value is one of the specified values, an error message 1098 * is generated. 1099 * 1100 * ```proto 1101 * message MyInt32 { 1102 * // value must not be in list [1, 2, 3] 1103 * int32 value = 1 [(buf.validate.field).int32 = { not_in: [1, 2, 3] }]; 1104 * } 1105 * ``` 1106 * 1107 * @generated from field: repeated int32 not_in = 7; 1108 */ 1109 notIn: number[]; 1110 1111 /** 1112 * `example` specifies values that the field may have. These values SHOULD 1113 * conform to other rules. `example` values will not impact validation 1114 * but may be used as helpful guidance on how to populate the given field. 1115 * 1116 * ```proto 1117 * message MyInt32 { 1118 * int32 value = 1 [ 1119 * (buf.validate.field).int32.example = 1, 1120 * (buf.validate.field).int32.example = -10 1121 * ]; 1122 * } 1123 * ``` 1124 * 1125 * @generated from field: repeated int32 example = 8; 1126 */ 1127 example: number[]; 1128}; 1129 1130/** 1131 * Describes the message buf.validate.Int32Rules. 1132 * Use `create(Int32RulesSchema)` to create a new message. 1133 */ 1134export const Int32RulesSchema: GenMessage<Int32Rules> = /*@__PURE__*/ 1135 messageDesc(file_buf_validate_validate, 8); 1136 1137/** 1138 * Int64Rules describes the rules applied to `int64` values. These 1139 * rules may also be applied to the `google.protobuf.Int64Value` Well-Known-Type. 1140 * 1141 * @generated from message buf.validate.Int64Rules 1142 */ 1143export type Int64Rules = Message<"buf.validate.Int64Rules"> & { 1144 /** 1145 * `const` requires the field value to exactly match the specified value. If 1146 * the field value doesn't match, an error message is generated. 1147 * 1148 * ```proto 1149 * message MyInt64 { 1150 * // value must equal 42 1151 * int64 value = 1 [(buf.validate.field).int64.const = 42]; 1152 * } 1153 * ``` 1154 * 1155 * @generated from field: optional int64 const = 1; 1156 */ 1157 const: bigint; 1158 1159 /** 1160 * @generated from oneof buf.validate.Int64Rules.less_than 1161 */ 1162 lessThan: { 1163 /** 1164 * `lt` requires the field value to be less than the specified value (field < 1165 * value). If the field value is equal to or greater than the specified value, 1166 * an error message is generated. 1167 * 1168 * ```proto 1169 * message MyInt64 { 1170 * // value must be less than 10 1171 * int64 value = 1 [(buf.validate.field).int64.lt = 10]; 1172 * } 1173 * ``` 1174 * 1175 * @generated from field: int64 lt = 2; 1176 */ 1177 value: bigint; 1178 case: "lt"; 1179 } | { 1180 /** 1181 * `lte` requires the field value to be less than or equal to the specified 1182 * value (field <= value). If the field value is greater than the specified 1183 * value, an error message is generated. 1184 * 1185 * ```proto 1186 * message MyInt64 { 1187 * // value must be less than or equal to 10 1188 * int64 value = 1 [(buf.validate.field).int64.lte = 10]; 1189 * } 1190 * ``` 1191 * 1192 * @generated from field: int64 lte = 3; 1193 */ 1194 value: bigint; 1195 case: "lte"; 1196 } | { case: undefined; value?: undefined }; 1197 1198 /** 1199 * @generated from oneof buf.validate.Int64Rules.greater_than 1200 */ 1201 greaterThan: { 1202 /** 1203 * `gt` requires the field value to be greater than the specified value 1204 * (exclusive). If the value of `gt` is larger than a specified `lt` or 1205 * `lte`, the range is reversed, and the field value must be outside the 1206 * specified range. If the field value doesn't meet the required conditions, 1207 * an error message is generated. 1208 * 1209 * ```proto 1210 * message MyInt64 { 1211 * // value must be greater than 5 [int64.gt] 1212 * int64 value = 1 [(buf.validate.field).int64.gt = 5]; 1213 * 1214 * // value must be greater than 5 and less than 10 [int64.gt_lt] 1215 * int64 other_value = 2 [(buf.validate.field).int64 = { gt: 5, lt: 10 }]; 1216 * 1217 * // value must be greater than 10 or less than 5 [int64.gt_lt_exclusive] 1218 * int64 another_value = 3 [(buf.validate.field).int64 = { gt: 10, lt: 5 }]; 1219 * } 1220 * ``` 1221 * 1222 * @generated from field: int64 gt = 4; 1223 */ 1224 value: bigint; 1225 case: "gt"; 1226 } | { 1227 /** 1228 * `gte` requires the field value to be greater than or equal to the specified 1229 * value (exclusive). If the value of `gte` is larger than a specified `lt` 1230 * or `lte`, the range is reversed, and the field value must be outside the 1231 * specified range. If the field value doesn't meet the required conditions, 1232 * an error message is generated. 1233 * 1234 * ```proto 1235 * message MyInt64 { 1236 * // value must be greater than or equal to 5 [int64.gte] 1237 * int64 value = 1 [(buf.validate.field).int64.gte = 5]; 1238 * 1239 * // value must be greater than or equal to 5 and less than 10 [int64.gte_lt] 1240 * int64 other_value = 2 [(buf.validate.field).int64 = { gte: 5, lt: 10 }]; 1241 * 1242 * // value must be greater than or equal to 10 or less than 5 [int64.gte_lt_exclusive] 1243 * int64 another_value = 3 [(buf.validate.field).int64 = { gte: 10, lt: 5 }]; 1244 * } 1245 * ``` 1246 * 1247 * @generated from field: int64 gte = 5; 1248 */ 1249 value: bigint; 1250 case: "gte"; 1251 } | { case: undefined; value?: undefined }; 1252 1253 /** 1254 * `in` requires the field value to be equal to one of the specified values. 1255 * If the field value isn't one of the specified values, an error message is 1256 * generated. 1257 * 1258 * ```proto 1259 * message MyInt64 { 1260 * // value must be in list [1, 2, 3] 1261 * int64 value = 1 [(buf.validate.field).int64 = { in: [1, 2, 3] }]; 1262 * } 1263 * ``` 1264 * 1265 * @generated from field: repeated int64 in = 6; 1266 */ 1267 in: bigint[]; 1268 1269 /** 1270 * `not_in` requires the field value to not be equal to any of the specified 1271 * values. If the field value is one of the specified values, an error 1272 * message is generated. 1273 * 1274 * ```proto 1275 * message MyInt64 { 1276 * // value must not be in list [1, 2, 3] 1277 * int64 value = 1 [(buf.validate.field).int64 = { not_in: [1, 2, 3] }]; 1278 * } 1279 * ``` 1280 * 1281 * @generated from field: repeated int64 not_in = 7; 1282 */ 1283 notIn: bigint[]; 1284 1285 /** 1286 * `example` specifies values that the field may have. These values SHOULD 1287 * conform to other rules. `example` values will not impact validation 1288 * but may be used as helpful guidance on how to populate the given field. 1289 * 1290 * ```proto 1291 * message MyInt64 { 1292 * int64 value = 1 [ 1293 * (buf.validate.field).int64.example = 1, 1294 * (buf.validate.field).int64.example = -10 1295 * ]; 1296 * } 1297 * ``` 1298 * 1299 * @generated from field: repeated int64 example = 9; 1300 */ 1301 example: bigint[]; 1302}; 1303 1304/** 1305 * Describes the message buf.validate.Int64Rules. 1306 * Use `create(Int64RulesSchema)` to create a new message. 1307 */ 1308export const Int64RulesSchema: GenMessage<Int64Rules> = /*@__PURE__*/ 1309 messageDesc(file_buf_validate_validate, 9); 1310 1311/** 1312 * UInt32Rules describes the rules applied to `uint32` values. These 1313 * rules may also be applied to the `google.protobuf.UInt32Value` Well-Known-Type. 1314 * 1315 * @generated from message buf.validate.UInt32Rules 1316 */ 1317export type UInt32Rules = Message<"buf.validate.UInt32Rules"> & { 1318 /** 1319 * `const` requires the field value to exactly match the specified value. If 1320 * the field value doesn't match, an error message is generated. 1321 * 1322 * ```proto 1323 * message MyUInt32 { 1324 * // value must equal 42 1325 * uint32 value = 1 [(buf.validate.field).uint32.const = 42]; 1326 * } 1327 * ``` 1328 * 1329 * @generated from field: optional uint32 const = 1; 1330 */ 1331 const: number; 1332 1333 /** 1334 * @generated from oneof buf.validate.UInt32Rules.less_than 1335 */ 1336 lessThan: { 1337 /** 1338 * `lt` requires the field value to be less than the specified value (field < 1339 * value). If the field value is equal to or greater than the specified value, 1340 * an error message is generated. 1341 * 1342 * ```proto 1343 * message MyUInt32 { 1344 * // value must be less than 10 1345 * uint32 value = 1 [(buf.validate.field).uint32.lt = 10]; 1346 * } 1347 * ``` 1348 * 1349 * @generated from field: uint32 lt = 2; 1350 */ 1351 value: number; 1352 case: "lt"; 1353 } | { 1354 /** 1355 * `lte` requires the field value to be less than or equal to the specified 1356 * value (field <= value). If the field value is greater than the specified 1357 * value, an error message is generated. 1358 * 1359 * ```proto 1360 * message MyUInt32 { 1361 * // value must be less than or equal to 10 1362 * uint32 value = 1 [(buf.validate.field).uint32.lte = 10]; 1363 * } 1364 * ``` 1365 * 1366 * @generated from field: uint32 lte = 3; 1367 */ 1368 value: number; 1369 case: "lte"; 1370 } | { case: undefined; value?: undefined }; 1371 1372 /** 1373 * @generated from oneof buf.validate.UInt32Rules.greater_than 1374 */ 1375 greaterThan: { 1376 /** 1377 * `gt` requires the field value to be greater than the specified value 1378 * (exclusive). If the value of `gt` is larger than a specified `lt` or 1379 * `lte`, the range is reversed, and the field value must be outside the 1380 * specified range. If the field value doesn't meet the required conditions, 1381 * an error message is generated. 1382 * 1383 * ```proto 1384 * message MyUInt32 { 1385 * // value must be greater than 5 [uint32.gt] 1386 * uint32 value = 1 [(buf.validate.field).uint32.gt = 5]; 1387 * 1388 * // value must be greater than 5 and less than 10 [uint32.gt_lt] 1389 * uint32 other_value = 2 [(buf.validate.field).uint32 = { gt: 5, lt: 10 }]; 1390 * 1391 * // value must be greater than 10 or less than 5 [uint32.gt_lt_exclusive] 1392 * uint32 another_value = 3 [(buf.validate.field).uint32 = { gt: 10, lt: 5 }]; 1393 * } 1394 * ``` 1395 * 1396 * @generated from field: uint32 gt = 4; 1397 */ 1398 value: number; 1399 case: "gt"; 1400 } | { 1401 /** 1402 * `gte` requires the field value to be greater than or equal to the specified 1403 * value (exclusive). If the value of `gte` is larger than a specified `lt` 1404 * or `lte`, the range is reversed, and the field value must be outside the 1405 * specified range. If the field value doesn't meet the required conditions, 1406 * an error message is generated. 1407 * 1408 * ```proto 1409 * message MyUInt32 { 1410 * // value must be greater than or equal to 5 [uint32.gte] 1411 * uint32 value = 1 [(buf.validate.field).uint32.gte = 5]; 1412 * 1413 * // value must be greater than or equal to 5 and less than 10 [uint32.gte_lt] 1414 * uint32 other_value = 2 [(buf.validate.field).uint32 = { gte: 5, lt: 10 }]; 1415 * 1416 * // value must be greater than or equal to 10 or less than 5 [uint32.gte_lt_exclusive] 1417 * uint32 another_value = 3 [(buf.validate.field).uint32 = { gte: 10, lt: 5 }]; 1418 * } 1419 * ``` 1420 * 1421 * @generated from field: uint32 gte = 5; 1422 */ 1423 value: number; 1424 case: "gte"; 1425 } | { case: undefined; value?: undefined }; 1426 1427 /** 1428 * `in` requires the field value to be equal to one of the specified values. 1429 * If the field value isn't one of the specified values, an error message is 1430 * generated. 1431 * 1432 * ```proto 1433 * message MyUInt32 { 1434 * // value must be in list [1, 2, 3] 1435 * uint32 value = 1 [(buf.validate.field).uint32 = { in: [1, 2, 3] }]; 1436 * } 1437 * ``` 1438 * 1439 * @generated from field: repeated uint32 in = 6; 1440 */ 1441 in: number[]; 1442 1443 /** 1444 * `not_in` requires the field value to not be equal to any of the specified 1445 * values. If the field value is one of the specified values, an error 1446 * message is generated. 1447 * 1448 * ```proto 1449 * message MyUInt32 { 1450 * // value must not be in list [1, 2, 3] 1451 * uint32 value = 1 [(buf.validate.field).uint32 = { not_in: [1, 2, 3] }]; 1452 * } 1453 * ``` 1454 * 1455 * @generated from field: repeated uint32 not_in = 7; 1456 */ 1457 notIn: number[]; 1458 1459 /** 1460 * `example` specifies values that the field may have. These values SHOULD 1461 * conform to other rules. `example` values will not impact validation 1462 * but may be used as helpful guidance on how to populate the given field. 1463 * 1464 * ```proto 1465 * message MyUInt32 { 1466 * uint32 value = 1 [ 1467 * (buf.validate.field).uint32.example = 1, 1468 * (buf.validate.field).uint32.example = 10 1469 * ]; 1470 * } 1471 * ``` 1472 * 1473 * @generated from field: repeated uint32 example = 8; 1474 */ 1475 example: number[]; 1476}; 1477 1478/** 1479 * Describes the message buf.validate.UInt32Rules. 1480 * Use `create(UInt32RulesSchema)` to create a new message. 1481 */ 1482export const UInt32RulesSchema: GenMessage<UInt32Rules> = /*@__PURE__*/ 1483 messageDesc(file_buf_validate_validate, 10); 1484 1485/** 1486 * UInt64Rules describes the rules applied to `uint64` values. These 1487 * rules may also be applied to the `google.protobuf.UInt64Value` Well-Known-Type. 1488 * 1489 * @generated from message buf.validate.UInt64Rules 1490 */ 1491export type UInt64Rules = Message<"buf.validate.UInt64Rules"> & { 1492 /** 1493 * `const` requires the field value to exactly match the specified value. If 1494 * the field value doesn't match, an error message is generated. 1495 * 1496 * ```proto 1497 * message MyUInt64 { 1498 * // value must equal 42 1499 * uint64 value = 1 [(buf.validate.field).uint64.const = 42]; 1500 * } 1501 * ``` 1502 * 1503 * @generated from field: optional uint64 const = 1; 1504 */ 1505 const: bigint; 1506 1507 /** 1508 * @generated from oneof buf.validate.UInt64Rules.less_than 1509 */ 1510 lessThan: { 1511 /** 1512 * `lt` requires the field value to be less than the specified value (field < 1513 * value). If the field value is equal to or greater than the specified value, 1514 * an error message is generated. 1515 * 1516 * ```proto 1517 * message MyUInt64 { 1518 * // value must be less than 10 1519 * uint64 value = 1 [(buf.validate.field).uint64.lt = 10]; 1520 * } 1521 * ``` 1522 * 1523 * @generated from field: uint64 lt = 2; 1524 */ 1525 value: bigint; 1526 case: "lt"; 1527 } | { 1528 /** 1529 * `lte` requires the field value to be less than or equal to the specified 1530 * value (field <= value). If the field value is greater than the specified 1531 * value, an error message is generated. 1532 * 1533 * ```proto 1534 * message MyUInt64 { 1535 * // value must be less than or equal to 10 1536 * uint64 value = 1 [(buf.validate.field).uint64.lte = 10]; 1537 * } 1538 * ``` 1539 * 1540 * @generated from field: uint64 lte = 3; 1541 */ 1542 value: bigint; 1543 case: "lte"; 1544 } | { case: undefined; value?: undefined }; 1545 1546 /** 1547 * @generated from oneof buf.validate.UInt64Rules.greater_than 1548 */ 1549 greaterThan: { 1550 /** 1551 * `gt` requires the field value to be greater than the specified value 1552 * (exclusive). If the value of `gt` is larger than a specified `lt` or 1553 * `lte`, the range is reversed, and the field value must be outside the 1554 * specified range. If the field value doesn't meet the required conditions, 1555 * an error message is generated. 1556 * 1557 * ```proto 1558 * message MyUInt64 { 1559 * // value must be greater than 5 [uint64.gt] 1560 * uint64 value = 1 [(buf.validate.field).uint64.gt = 5]; 1561 * 1562 * // value must be greater than 5 and less than 10 [uint64.gt_lt] 1563 * uint64 other_value = 2 [(buf.validate.field).uint64 = { gt: 5, lt: 10 }]; 1564 * 1565 * // value must be greater than 10 or less than 5 [uint64.gt_lt_exclusive] 1566 * uint64 another_value = 3 [(buf.validate.field).uint64 = { gt: 10, lt: 5 }]; 1567 * } 1568 * ``` 1569 * 1570 * @generated from field: uint64 gt = 4; 1571 */ 1572 value: bigint; 1573 case: "gt"; 1574 } | { 1575 /** 1576 * `gte` requires the field value to be greater than or equal to the specified 1577 * value (exclusive). If the value of `gte` is larger than a specified `lt` 1578 * or `lte`, the range is reversed, and the field value must be outside the 1579 * specified range. If the field value doesn't meet the required conditions, 1580 * an error message is generated. 1581 * 1582 * ```proto 1583 * message MyUInt64 { 1584 * // value must be greater than or equal to 5 [uint64.gte] 1585 * uint64 value = 1 [(buf.validate.field).uint64.gte = 5]; 1586 * 1587 * // value must be greater than or equal to 5 and less than 10 [uint64.gte_lt] 1588 * uint64 other_value = 2 [(buf.validate.field).uint64 = { gte: 5, lt: 10 }]; 1589 * 1590 * // value must be greater than or equal to 10 or less than 5 [uint64.gte_lt_exclusive] 1591 * uint64 another_value = 3 [(buf.validate.field).uint64 = { gte: 10, lt: 5 }]; 1592 * } 1593 * ``` 1594 * 1595 * @generated from field: uint64 gte = 5; 1596 */ 1597 value: bigint; 1598 case: "gte"; 1599 } | { case: undefined; value?: undefined }; 1600 1601 /** 1602 * `in` requires the field value to be equal to one of the specified values. 1603 * If the field value isn't one of the specified values, an error message is 1604 * generated. 1605 * 1606 * ```proto 1607 * message MyUInt64 { 1608 * // value must be in list [1, 2, 3] 1609 * uint64 value = 1 [(buf.validate.field).uint64 = { in: [1, 2, 3] }]; 1610 * } 1611 * ``` 1612 * 1613 * @generated from field: repeated uint64 in = 6; 1614 */ 1615 in: bigint[]; 1616 1617 /** 1618 * `not_in` requires the field value to not be equal to any of the specified 1619 * values. If the field value is one of the specified values, an error 1620 * message is generated. 1621 * 1622 * ```proto 1623 * message MyUInt64 { 1624 * // value must not be in list [1, 2, 3] 1625 * uint64 value = 1 [(buf.validate.field).uint64 = { not_in: [1, 2, 3] }]; 1626 * } 1627 * ``` 1628 * 1629 * @generated from field: repeated uint64 not_in = 7; 1630 */ 1631 notIn: bigint[]; 1632 1633 /** 1634 * `example` specifies values that the field may have. These values SHOULD 1635 * conform to other rules. `example` values will not impact validation 1636 * but may be used as helpful guidance on how to populate the given field. 1637 * 1638 * ```proto 1639 * message MyUInt64 { 1640 * uint64 value = 1 [ 1641 * (buf.validate.field).uint64.example = 1, 1642 * (buf.validate.field).uint64.example = -10 1643 * ]; 1644 * } 1645 * ``` 1646 * 1647 * @generated from field: repeated uint64 example = 8; 1648 */ 1649 example: bigint[]; 1650}; 1651 1652/** 1653 * Describes the message buf.validate.UInt64Rules. 1654 * Use `create(UInt64RulesSchema)` to create a new message. 1655 */ 1656export const UInt64RulesSchema: GenMessage<UInt64Rules> = /*@__PURE__*/ 1657 messageDesc(file_buf_validate_validate, 11); 1658 1659/** 1660 * SInt32Rules describes the rules applied to `sint32` values. 1661 * 1662 * @generated from message buf.validate.SInt32Rules 1663 */ 1664export type SInt32Rules = Message<"buf.validate.SInt32Rules"> & { 1665 /** 1666 * `const` requires the field value to exactly match the specified value. If 1667 * the field value doesn't match, an error message is generated. 1668 * 1669 * ```proto 1670 * message MySInt32 { 1671 * // value must equal 42 1672 * sint32 value = 1 [(buf.validate.field).sint32.const = 42]; 1673 * } 1674 * ``` 1675 * 1676 * @generated from field: optional sint32 const = 1; 1677 */ 1678 const: number; 1679 1680 /** 1681 * @generated from oneof buf.validate.SInt32Rules.less_than 1682 */ 1683 lessThan: { 1684 /** 1685 * `lt` requires the field value to be less than the specified value (field 1686 * < value). If the field value is equal to or greater than the specified 1687 * value, an error message is generated. 1688 * 1689 * ```proto 1690 * message MySInt32 { 1691 * // value must be less than 10 1692 * sint32 value = 1 [(buf.validate.field).sint32.lt = 10]; 1693 * } 1694 * ``` 1695 * 1696 * @generated from field: sint32 lt = 2; 1697 */ 1698 value: number; 1699 case: "lt"; 1700 } | { 1701 /** 1702 * `lte` requires the field value to be less than or equal to the specified 1703 * value (field <= value). If the field value is greater than the specified 1704 * value, an error message is generated. 1705 * 1706 * ```proto 1707 * message MySInt32 { 1708 * // value must be less than or equal to 10 1709 * sint32 value = 1 [(buf.validate.field).sint32.lte = 10]; 1710 * } 1711 * ``` 1712 * 1713 * @generated from field: sint32 lte = 3; 1714 */ 1715 value: number; 1716 case: "lte"; 1717 } | { case: undefined; value?: undefined }; 1718 1719 /** 1720 * @generated from oneof buf.validate.SInt32Rules.greater_than 1721 */ 1722 greaterThan: { 1723 /** 1724 * `gt` requires the field value to be greater than the specified value 1725 * (exclusive). If the value of `gt` is larger than a specified `lt` or 1726 * `lte`, the range is reversed, and the field value must be outside the 1727 * specified range. If the field value doesn't meet the required conditions, 1728 * an error message is generated. 1729 * 1730 * ```proto 1731 * message MySInt32 { 1732 * // value must be greater than 5 [sint32.gt] 1733 * sint32 value = 1 [(buf.validate.field).sint32.gt = 5]; 1734 * 1735 * // value must be greater than 5 and less than 10 [sint32.gt_lt] 1736 * sint32 other_value = 2 [(buf.validate.field).sint32 = { gt: 5, lt: 10 }]; 1737 * 1738 * // value must be greater than 10 or less than 5 [sint32.gt_lt_exclusive] 1739 * sint32 another_value = 3 [(buf.validate.field).sint32 = { gt: 10, lt: 5 }]; 1740 * } 1741 * ``` 1742 * 1743 * @generated from field: sint32 gt = 4; 1744 */ 1745 value: number; 1746 case: "gt"; 1747 } | { 1748 /** 1749 * `gte` requires the field value to be greater than or equal to the specified 1750 * value (exclusive). If the value of `gte` is larger than a specified `lt` 1751 * or `lte`, the range is reversed, and the field value must be outside the 1752 * specified range. If the field value doesn't meet the required conditions, 1753 * an error message is generated. 1754 * 1755 * ```proto 1756 * message MySInt32 { 1757 * // value must be greater than or equal to 5 [sint32.gte] 1758 * sint32 value = 1 [(buf.validate.field).sint32.gte = 5]; 1759 * 1760 * // value must be greater than or equal to 5 and less than 10 [sint32.gte_lt] 1761 * sint32 other_value = 2 [(buf.validate.field).sint32 = { gte: 5, lt: 10 }]; 1762 * 1763 * // value must be greater than or equal to 10 or less than 5 [sint32.gte_lt_exclusive] 1764 * sint32 another_value = 3 [(buf.validate.field).sint32 = { gte: 10, lt: 5 }]; 1765 * } 1766 * ``` 1767 * 1768 * @generated from field: sint32 gte = 5; 1769 */ 1770 value: number; 1771 case: "gte"; 1772 } | { case: undefined; value?: undefined }; 1773 1774 /** 1775 * `in` requires the field value to be equal to one of the specified values. 1776 * If the field value isn't one of the specified values, an error message is 1777 * generated. 1778 * 1779 * ```proto 1780 * message MySInt32 { 1781 * // value must be in list [1, 2, 3] 1782 * sint32 value = 1 [(buf.validate.field).sint32 = { in: [1, 2, 3] }]; 1783 * } 1784 * ``` 1785 * 1786 * @generated from field: repeated sint32 in = 6; 1787 */ 1788 in: number[]; 1789 1790 /** 1791 * `not_in` requires the field value to not be equal to any of the specified 1792 * values. If the field value is one of the specified values, an error 1793 * message is generated. 1794 * 1795 * ```proto 1796 * message MySInt32 { 1797 * // value must not be in list [1, 2, 3] 1798 * sint32 value = 1 [(buf.validate.field).sint32 = { not_in: [1, 2, 3] }]; 1799 * } 1800 * ``` 1801 * 1802 * @generated from field: repeated sint32 not_in = 7; 1803 */ 1804 notIn: number[]; 1805 1806 /** 1807 * `example` specifies values that the field may have. These values SHOULD 1808 * conform to other rules. `example` values will not impact validation 1809 * but may be used as helpful guidance on how to populate the given field. 1810 * 1811 * ```proto 1812 * message MySInt32 { 1813 * sint32 value = 1 [ 1814 * (buf.validate.field).sint32.example = 1, 1815 * (buf.validate.field).sint32.example = -10 1816 * ]; 1817 * } 1818 * ``` 1819 * 1820 * @generated from field: repeated sint32 example = 8; 1821 */ 1822 example: number[]; 1823}; 1824 1825/** 1826 * Describes the message buf.validate.SInt32Rules. 1827 * Use `create(SInt32RulesSchema)` to create a new message. 1828 */ 1829export const SInt32RulesSchema: GenMessage<SInt32Rules> = /*@__PURE__*/ 1830 messageDesc(file_buf_validate_validate, 12); 1831 1832/** 1833 * SInt64Rules describes the rules applied to `sint64` values. 1834 * 1835 * @generated from message buf.validate.SInt64Rules 1836 */ 1837export type SInt64Rules = Message<"buf.validate.SInt64Rules"> & { 1838 /** 1839 * `const` requires the field value to exactly match the specified value. If 1840 * the field value doesn't match, an error message is generated. 1841 * 1842 * ```proto 1843 * message MySInt64 { 1844 * // value must equal 42 1845 * sint64 value = 1 [(buf.validate.field).sint64.const = 42]; 1846 * } 1847 * ``` 1848 * 1849 * @generated from field: optional sint64 const = 1; 1850 */ 1851 const: bigint; 1852 1853 /** 1854 * @generated from oneof buf.validate.SInt64Rules.less_than 1855 */ 1856 lessThan: { 1857 /** 1858 * `lt` requires the field value to be less than the specified value (field 1859 * < value). If the field value is equal to or greater than the specified 1860 * value, an error message is generated. 1861 * 1862 * ```proto 1863 * message MySInt64 { 1864 * // value must be less than 10 1865 * sint64 value = 1 [(buf.validate.field).sint64.lt = 10]; 1866 * } 1867 * ``` 1868 * 1869 * @generated from field: sint64 lt = 2; 1870 */ 1871 value: bigint; 1872 case: "lt"; 1873 } | { 1874 /** 1875 * `lte` requires the field value to be less than or equal to the specified 1876 * value (field <= value). If the field value is greater than the specified 1877 * value, an error message is generated. 1878 * 1879 * ```proto 1880 * message MySInt64 { 1881 * // value must be less than or equal to 10 1882 * sint64 value = 1 [(buf.validate.field).sint64.lte = 10]; 1883 * } 1884 * ``` 1885 * 1886 * @generated from field: sint64 lte = 3; 1887 */ 1888 value: bigint; 1889 case: "lte"; 1890 } | { case: undefined; value?: undefined }; 1891 1892 /** 1893 * @generated from oneof buf.validate.SInt64Rules.greater_than 1894 */ 1895 greaterThan: { 1896 /** 1897 * `gt` requires the field value to be greater than the specified value 1898 * (exclusive). If the value of `gt` is larger than a specified `lt` or 1899 * `lte`, the range is reversed, and the field value must be outside the 1900 * specified range. If the field value doesn't meet the required conditions, 1901 * an error message is generated. 1902 * 1903 * ```proto 1904 * message MySInt64 { 1905 * // value must be greater than 5 [sint64.gt] 1906 * sint64 value = 1 [(buf.validate.field).sint64.gt = 5]; 1907 * 1908 * // value must be greater than 5 and less than 10 [sint64.gt_lt] 1909 * sint64 other_value = 2 [(buf.validate.field).sint64 = { gt: 5, lt: 10 }]; 1910 * 1911 * // value must be greater than 10 or less than 5 [sint64.gt_lt_exclusive] 1912 * sint64 another_value = 3 [(buf.validate.field).sint64 = { gt: 10, lt: 5 }]; 1913 * } 1914 * ``` 1915 * 1916 * @generated from field: sint64 gt = 4; 1917 */ 1918 value: bigint; 1919 case: "gt"; 1920 } | { 1921 /** 1922 * `gte` requires the field value to be greater than or equal to the specified 1923 * value (exclusive). If the value of `gte` is larger than a specified `lt` 1924 * or `lte`, the range is reversed, and the field value must be outside the 1925 * specified range. If the field value doesn't meet the required conditions, 1926 * an error message is generated. 1927 * 1928 * ```proto 1929 * message MySInt64 { 1930 * // value must be greater than or equal to 5 [sint64.gte] 1931 * sint64 value = 1 [(buf.validate.field).sint64.gte = 5]; 1932 * 1933 * // value must be greater than or equal to 5 and less than 10 [sint64.gte_lt] 1934 * sint64 other_value = 2 [(buf.validate.field).sint64 = { gte: 5, lt: 10 }]; 1935 * 1936 * // value must be greater than or equal to 10 or less than 5 [sint64.gte_lt_exclusive] 1937 * sint64 another_value = 3 [(buf.validate.field).sint64 = { gte: 10, lt: 5 }]; 1938 * } 1939 * ``` 1940 * 1941 * @generated from field: sint64 gte = 5; 1942 */ 1943 value: bigint; 1944 case: "gte"; 1945 } | { case: undefined; value?: undefined }; 1946 1947 /** 1948 * `in` requires the field value to be equal to one of the specified values. 1949 * If the field value isn't one of the specified values, an error message 1950 * is generated. 1951 * 1952 * ```proto 1953 * message MySInt64 { 1954 * // value must be in list [1, 2, 3] 1955 * sint64 value = 1 [(buf.validate.field).sint64 = { in: [1, 2, 3] }]; 1956 * } 1957 * ``` 1958 * 1959 * @generated from field: repeated sint64 in = 6; 1960 */ 1961 in: bigint[]; 1962 1963 /** 1964 * `not_in` requires the field value to not be equal to any of the specified 1965 * values. If the field value is one of the specified values, an error 1966 * message is generated. 1967 * 1968 * ```proto 1969 * message MySInt64 { 1970 * // value must not be in list [1, 2, 3] 1971 * sint64 value = 1 [(buf.validate.field).sint64 = { not_in: [1, 2, 3] }]; 1972 * } 1973 * ``` 1974 * 1975 * @generated from field: repeated sint64 not_in = 7; 1976 */ 1977 notIn: bigint[]; 1978 1979 /** 1980 * `example` specifies values that the field may have. These values SHOULD 1981 * conform to other rules. `example` values will not impact validation 1982 * but may be used as helpful guidance on how to populate the given field. 1983 * 1984 * ```proto 1985 * message MySInt64 { 1986 * sint64 value = 1 [ 1987 * (buf.validate.field).sint64.example = 1, 1988 * (buf.validate.field).sint64.example = -10 1989 * ]; 1990 * } 1991 * ``` 1992 * 1993 * @generated from field: repeated sint64 example = 8; 1994 */ 1995 example: bigint[]; 1996}; 1997 1998/** 1999 * Describes the message buf.validate.SInt64Rules. 2000 * Use `create(SInt64RulesSchema)` to create a new message. 2001 */ 2002export const SInt64RulesSchema: GenMessage<SInt64Rules> = /*@__PURE__*/ 2003 messageDesc(file_buf_validate_validate, 13); 2004 2005/** 2006 * Fixed32Rules describes the rules applied to `fixed32` values. 2007 * 2008 * @generated from message buf.validate.Fixed32Rules 2009 */ 2010export type Fixed32Rules = Message<"buf.validate.Fixed32Rules"> & { 2011 /** 2012 * `const` requires the field value to exactly match the specified value. 2013 * If the field value doesn't match, an error message is generated. 2014 * 2015 * ```proto 2016 * message MyFixed32 { 2017 * // value must equal 42 2018 * fixed32 value = 1 [(buf.validate.field).fixed32.const = 42]; 2019 * } 2020 * ``` 2021 * 2022 * @generated from field: optional fixed32 const = 1; 2023 */ 2024 const: number; 2025 2026 /** 2027 * @generated from oneof buf.validate.Fixed32Rules.less_than 2028 */ 2029 lessThan: { 2030 /** 2031 * `lt` requires the field value to be less than the specified value (field < 2032 * value). If the field value is equal to or greater than the specified value, 2033 * an error message is generated. 2034 * 2035 * ```proto 2036 * message MyFixed32 { 2037 * // value must be less than 10 2038 * fixed32 value = 1 [(buf.validate.field).fixed32.lt = 10]; 2039 * } 2040 * ``` 2041 * 2042 * @generated from field: fixed32 lt = 2; 2043 */ 2044 value: number; 2045 case: "lt"; 2046 } | { 2047 /** 2048 * `lte` requires the field value to be less than or equal to the specified 2049 * value (field <= value). If the field value is greater than the specified 2050 * value, an error message is generated. 2051 * 2052 * ```proto 2053 * message MyFixed32 { 2054 * // value must be less than or equal to 10 2055 * fixed32 value = 1 [(buf.validate.field).fixed32.lte = 10]; 2056 * } 2057 * ``` 2058 * 2059 * @generated from field: fixed32 lte = 3; 2060 */ 2061 value: number; 2062 case: "lte"; 2063 } | { case: undefined; value?: undefined }; 2064 2065 /** 2066 * @generated from oneof buf.validate.Fixed32Rules.greater_than 2067 */ 2068 greaterThan: { 2069 /** 2070 * `gt` requires the field value to be greater than the specified value 2071 * (exclusive). If the value of `gt` is larger than a specified `lt` or 2072 * `lte`, the range is reversed, and the field value must be outside the 2073 * specified range. If the field value doesn't meet the required conditions, 2074 * an error message is generated. 2075 * 2076 * ```proto 2077 * message MyFixed32 { 2078 * // value must be greater than 5 [fixed32.gt] 2079 * fixed32 value = 1 [(buf.validate.field).fixed32.gt = 5]; 2080 * 2081 * // value must be greater than 5 and less than 10 [fixed32.gt_lt] 2082 * fixed32 other_value = 2 [(buf.validate.field).fixed32 = { gt: 5, lt: 10 }]; 2083 * 2084 * // value must be greater than 10 or less than 5 [fixed32.gt_lt_exclusive] 2085 * fixed32 another_value = 3 [(buf.validate.field).fixed32 = { gt: 10, lt: 5 }]; 2086 * } 2087 * ``` 2088 * 2089 * @generated from field: fixed32 gt = 4; 2090 */ 2091 value: number; 2092 case: "gt"; 2093 } | { 2094 /** 2095 * `gte` requires the field value to be greater than or equal to the specified 2096 * value (exclusive). If the value of `gte` is larger than a specified `lt` 2097 * or `lte`, the range is reversed, and the field value must be outside the 2098 * specified range. If the field value doesn't meet the required conditions, 2099 * an error message is generated. 2100 * 2101 * ```proto 2102 * message MyFixed32 { 2103 * // value must be greater than or equal to 5 [fixed32.gte] 2104 * fixed32 value = 1 [(buf.validate.field).fixed32.gte = 5]; 2105 * 2106 * // value must be greater than or equal to 5 and less than 10 [fixed32.gte_lt] 2107 * fixed32 other_value = 2 [(buf.validate.field).fixed32 = { gte: 5, lt: 10 }]; 2108 * 2109 * // value must be greater than or equal to 10 or less than 5 [fixed32.gte_lt_exclusive] 2110 * fixed32 another_value = 3 [(buf.validate.field).fixed32 = { gte: 10, lt: 5 }]; 2111 * } 2112 * ``` 2113 * 2114 * @generated from field: fixed32 gte = 5; 2115 */ 2116 value: number; 2117 case: "gte"; 2118 } | { case: undefined; value?: undefined }; 2119 2120 /** 2121 * `in` requires the field value to be equal to one of the specified values. 2122 * If the field value isn't one of the specified values, an error message 2123 * is generated. 2124 * 2125 * ```proto 2126 * message MyFixed32 { 2127 * // value must be in list [1, 2, 3] 2128 * fixed32 value = 1 [(buf.validate.field).fixed32 = { in: [1, 2, 3] }]; 2129 * } 2130 * ``` 2131 * 2132 * @generated from field: repeated fixed32 in = 6; 2133 */ 2134 in: number[]; 2135 2136 /** 2137 * `not_in` requires the field value to not be equal to any of the specified 2138 * values. If the field value is one of the specified values, an error 2139 * message is generated. 2140 * 2141 * ```proto 2142 * message MyFixed32 { 2143 * // value must not be in list [1, 2, 3] 2144 * fixed32 value = 1 [(buf.validate.field).fixed32 = { not_in: [1, 2, 3] }]; 2145 * } 2146 * ``` 2147 * 2148 * @generated from field: repeated fixed32 not_in = 7; 2149 */ 2150 notIn: number[]; 2151 2152 /** 2153 * `example` specifies values that the field may have. These values SHOULD 2154 * conform to other rules. `example` values will not impact validation 2155 * but may be used as helpful guidance on how to populate the given field. 2156 * 2157 * ```proto 2158 * message MyFixed32 { 2159 * fixed32 value = 1 [ 2160 * (buf.validate.field).fixed32.example = 1, 2161 * (buf.validate.field).fixed32.example = 2 2162 * ]; 2163 * } 2164 * ``` 2165 * 2166 * @generated from field: repeated fixed32 example = 8; 2167 */ 2168 example: number[]; 2169}; 2170 2171/** 2172 * Describes the message buf.validate.Fixed32Rules. 2173 * Use `create(Fixed32RulesSchema)` to create a new message. 2174 */ 2175export const Fixed32RulesSchema: GenMessage<Fixed32Rules> = /*@__PURE__*/ 2176 messageDesc(file_buf_validate_validate, 14); 2177 2178/** 2179 * Fixed64Rules describes the rules applied to `fixed64` values. 2180 * 2181 * @generated from message buf.validate.Fixed64Rules 2182 */ 2183export type Fixed64Rules = Message<"buf.validate.Fixed64Rules"> & { 2184 /** 2185 * `const` requires the field value to exactly match the specified value. If 2186 * the field value doesn't match, an error message is generated. 2187 * 2188 * ```proto 2189 * message MyFixed64 { 2190 * // value must equal 42 2191 * fixed64 value = 1 [(buf.validate.field).fixed64.const = 42]; 2192 * } 2193 * ``` 2194 * 2195 * @generated from field: optional fixed64 const = 1; 2196 */ 2197 const: bigint; 2198 2199 /** 2200 * @generated from oneof buf.validate.Fixed64Rules.less_than 2201 */ 2202 lessThan: { 2203 /** 2204 * `lt` requires the field value to be less than the specified value (field < 2205 * value). If the field value is equal to or greater than the specified value, 2206 * an error message is generated. 2207 * 2208 * ```proto 2209 * message MyFixed64 { 2210 * // value must be less than 10 2211 * fixed64 value = 1 [(buf.validate.field).fixed64.lt = 10]; 2212 * } 2213 * ``` 2214 * 2215 * @generated from field: fixed64 lt = 2; 2216 */ 2217 value: bigint; 2218 case: "lt"; 2219 } | { 2220 /** 2221 * `lte` requires the field value to be less than or equal to the specified 2222 * value (field <= value). If the field value is greater than the specified 2223 * value, an error message is generated. 2224 * 2225 * ```proto 2226 * message MyFixed64 { 2227 * // value must be less than or equal to 10 2228 * fixed64 value = 1 [(buf.validate.field).fixed64.lte = 10]; 2229 * } 2230 * ``` 2231 * 2232 * @generated from field: fixed64 lte = 3; 2233 */ 2234 value: bigint; 2235 case: "lte"; 2236 } | { case: undefined; value?: undefined }; 2237 2238 /** 2239 * @generated from oneof buf.validate.Fixed64Rules.greater_than 2240 */ 2241 greaterThan: { 2242 /** 2243 * `gt` requires the field value to be greater than the specified value 2244 * (exclusive). If the value of `gt` is larger than a specified `lt` or 2245 * `lte`, the range is reversed, and the field value must be outside the 2246 * specified range. If the field value doesn't meet the required conditions, 2247 * an error message is generated. 2248 * 2249 * ```proto 2250 * message MyFixed64 { 2251 * // value must be greater than 5 [fixed64.gt] 2252 * fixed64 value = 1 [(buf.validate.field).fixed64.gt = 5]; 2253 * 2254 * // value must be greater than 5 and less than 10 [fixed64.gt_lt] 2255 * fixed64 other_value = 2 [(buf.validate.field).fixed64 = { gt: 5, lt: 10 }]; 2256 * 2257 * // value must be greater than 10 or less than 5 [fixed64.gt_lt_exclusive] 2258 * fixed64 another_value = 3 [(buf.validate.field).fixed64 = { gt: 10, lt: 5 }]; 2259 * } 2260 * ``` 2261 * 2262 * @generated from field: fixed64 gt = 4; 2263 */ 2264 value: bigint; 2265 case: "gt"; 2266 } | { 2267 /** 2268 * `gte` requires the field value to be greater than or equal to the specified 2269 * value (exclusive). If the value of `gte` is larger than a specified `lt` 2270 * or `lte`, the range is reversed, and the field value must be outside the 2271 * specified range. If the field value doesn't meet the required conditions, 2272 * an error message is generated. 2273 * 2274 * ```proto 2275 * message MyFixed64 { 2276 * // value must be greater than or equal to 5 [fixed64.gte] 2277 * fixed64 value = 1 [(buf.validate.field).fixed64.gte = 5]; 2278 * 2279 * // value must be greater than or equal to 5 and less than 10 [fixed64.gte_lt] 2280 * fixed64 other_value = 2 [(buf.validate.field).fixed64 = { gte: 5, lt: 10 }]; 2281 * 2282 * // value must be greater than or equal to 10 or less than 5 [fixed64.gte_lt_exclusive] 2283 * fixed64 another_value = 3 [(buf.validate.field).fixed64 = { gte: 10, lt: 5 }]; 2284 * } 2285 * ``` 2286 * 2287 * @generated from field: fixed64 gte = 5; 2288 */ 2289 value: bigint; 2290 case: "gte"; 2291 } | { case: undefined; value?: undefined }; 2292 2293 /** 2294 * `in` requires the field value to be equal to one of the specified values. 2295 * If the field value isn't one of the specified values, an error message is 2296 * generated. 2297 * 2298 * ```proto 2299 * message MyFixed64 { 2300 * // value must be in list [1, 2, 3] 2301 * fixed64 value = 1 [(buf.validate.field).fixed64 = { in: [1, 2, 3] }]; 2302 * } 2303 * ``` 2304 * 2305 * @generated from field: repeated fixed64 in = 6; 2306 */ 2307 in: bigint[]; 2308 2309 /** 2310 * `not_in` requires the field value to not be equal to any of the specified 2311 * values. If the field value is one of the specified values, an error 2312 * message is generated. 2313 * 2314 * ```proto 2315 * message MyFixed64 { 2316 * // value must not be in list [1, 2, 3] 2317 * fixed64 value = 1 [(buf.validate.field).fixed64 = { not_in: [1, 2, 3] }]; 2318 * } 2319 * ``` 2320 * 2321 * @generated from field: repeated fixed64 not_in = 7; 2322 */ 2323 notIn: bigint[]; 2324 2325 /** 2326 * `example` specifies values that the field may have. These values SHOULD 2327 * conform to other rules. `example` values will not impact validation 2328 * but may be used as helpful guidance on how to populate the given field. 2329 * 2330 * ```proto 2331 * message MyFixed64 { 2332 * fixed64 value = 1 [ 2333 * (buf.validate.field).fixed64.example = 1, 2334 * (buf.validate.field).fixed64.example = 2 2335 * ]; 2336 * } 2337 * ``` 2338 * 2339 * @generated from field: repeated fixed64 example = 8; 2340 */ 2341 example: bigint[]; 2342}; 2343 2344/** 2345 * Describes the message buf.validate.Fixed64Rules. 2346 * Use `create(Fixed64RulesSchema)` to create a new message. 2347 */ 2348export const Fixed64RulesSchema: GenMessage<Fixed64Rules> = /*@__PURE__*/ 2349 messageDesc(file_buf_validate_validate, 15); 2350 2351/** 2352 * SFixed32Rules describes the rules applied to `fixed32` values. 2353 * 2354 * @generated from message buf.validate.SFixed32Rules 2355 */ 2356export type SFixed32Rules = Message<"buf.validate.SFixed32Rules"> & { 2357 /** 2358 * `const` requires the field value to exactly match the specified value. If 2359 * the field value doesn't match, an error message is generated. 2360 * 2361 * ```proto 2362 * message MySFixed32 { 2363 * // value must equal 42 2364 * sfixed32 value = 1 [(buf.validate.field).sfixed32.const = 42]; 2365 * } 2366 * ``` 2367 * 2368 * @generated from field: optional sfixed32 const = 1; 2369 */ 2370 const: number; 2371 2372 /** 2373 * @generated from oneof buf.validate.SFixed32Rules.less_than 2374 */ 2375 lessThan: { 2376 /** 2377 * `lt` requires the field value to be less than the specified value (field < 2378 * value). If the field value is equal to or greater than the specified value, 2379 * an error message is generated. 2380 * 2381 * ```proto 2382 * message MySFixed32 { 2383 * // value must be less than 10 2384 * sfixed32 value = 1 [(buf.validate.field).sfixed32.lt = 10]; 2385 * } 2386 * ``` 2387 * 2388 * @generated from field: sfixed32 lt = 2; 2389 */ 2390 value: number; 2391 case: "lt"; 2392 } | { 2393 /** 2394 * `lte` requires the field value to be less than or equal to the specified 2395 * value (field <= value). If the field value is greater than the specified 2396 * value, an error message is generated. 2397 * 2398 * ```proto 2399 * message MySFixed32 { 2400 * // value must be less than or equal to 10 2401 * sfixed32 value = 1 [(buf.validate.field).sfixed32.lte = 10]; 2402 * } 2403 * ``` 2404 * 2405 * @generated from field: sfixed32 lte = 3; 2406 */ 2407 value: number; 2408 case: "lte"; 2409 } | { case: undefined; value?: undefined }; 2410 2411 /** 2412 * @generated from oneof buf.validate.SFixed32Rules.greater_than 2413 */ 2414 greaterThan: { 2415 /** 2416 * `gt` requires the field value to be greater than the specified value 2417 * (exclusive). If the value of `gt` is larger than a specified `lt` or 2418 * `lte`, the range is reversed, and the field value must be outside the 2419 * specified range. If the field value doesn't meet the required conditions, 2420 * an error message is generated. 2421 * 2422 * ```proto 2423 * message MySFixed32 { 2424 * // value must be greater than 5 [sfixed32.gt] 2425 * sfixed32 value = 1 [(buf.validate.field).sfixed32.gt = 5]; 2426 * 2427 * // value must be greater than 5 and less than 10 [sfixed32.gt_lt] 2428 * sfixed32 other_value = 2 [(buf.validate.field).sfixed32 = { gt: 5, lt: 10 }]; 2429 * 2430 * // value must be greater than 10 or less than 5 [sfixed32.gt_lt_exclusive] 2431 * sfixed32 another_value = 3 [(buf.validate.field).sfixed32 = { gt: 10, lt: 5 }]; 2432 * } 2433 * ``` 2434 * 2435 * @generated from field: sfixed32 gt = 4; 2436 */ 2437 value: number; 2438 case: "gt"; 2439 } | { 2440 /** 2441 * `gte` requires the field value to be greater than or equal to the specified 2442 * value (exclusive). If the value of `gte` is larger than a specified `lt` 2443 * or `lte`, the range is reversed, and the field value must be outside the 2444 * specified range. If the field value doesn't meet the required conditions, 2445 * an error message is generated. 2446 * 2447 * ```proto 2448 * message MySFixed32 { 2449 * // value must be greater than or equal to 5 [sfixed32.gte] 2450 * sfixed32 value = 1 [(buf.validate.field).sfixed32.gte = 5]; 2451 * 2452 * // value must be greater than or equal to 5 and less than 10 [sfixed32.gte_lt] 2453 * sfixed32 other_value = 2 [(buf.validate.field).sfixed32 = { gte: 5, lt: 10 }]; 2454 * 2455 * // value must be greater than or equal to 10 or less than 5 [sfixed32.gte_lt_exclusive] 2456 * sfixed32 another_value = 3 [(buf.validate.field).sfixed32 = { gte: 10, lt: 5 }]; 2457 * } 2458 * ``` 2459 * 2460 * @generated from field: sfixed32 gte = 5; 2461 */ 2462 value: number; 2463 case: "gte"; 2464 } | { case: undefined; value?: undefined }; 2465 2466 /** 2467 * `in` requires the field value to be equal to one of the specified values. 2468 * If the field value isn't one of the specified values, an error message is 2469 * generated. 2470 * 2471 * ```proto 2472 * message MySFixed32 { 2473 * // value must be in list [1, 2, 3] 2474 * sfixed32 value = 1 [(buf.validate.field).sfixed32 = { in: [1, 2, 3] }]; 2475 * } 2476 * ``` 2477 * 2478 * @generated from field: repeated sfixed32 in = 6; 2479 */ 2480 in: number[]; 2481 2482 /** 2483 * `not_in` requires the field value to not be equal to any of the specified 2484 * values. If the field value is one of the specified values, an error 2485 * message is generated. 2486 * 2487 * ```proto 2488 * message MySFixed32 { 2489 * // value must not be in list [1, 2, 3] 2490 * sfixed32 value = 1 [(buf.validate.field).sfixed32 = { not_in: [1, 2, 3] }]; 2491 * } 2492 * ``` 2493 * 2494 * @generated from field: repeated sfixed32 not_in = 7; 2495 */ 2496 notIn: number[]; 2497 2498 /** 2499 * `example` specifies values that the field may have. These values SHOULD 2500 * conform to other rules. `example` values will not impact validation 2501 * but may be used as helpful guidance on how to populate the given field. 2502 * 2503 * ```proto 2504 * message MySFixed32 { 2505 * sfixed32 value = 1 [ 2506 * (buf.validate.field).sfixed32.example = 1, 2507 * (buf.validate.field).sfixed32.example = 2 2508 * ]; 2509 * } 2510 * ``` 2511 * 2512 * @generated from field: repeated sfixed32 example = 8; 2513 */ 2514 example: number[]; 2515}; 2516 2517/** 2518 * Describes the message buf.validate.SFixed32Rules. 2519 * Use `create(SFixed32RulesSchema)` to create a new message. 2520 */ 2521export const SFixed32RulesSchema: GenMessage<SFixed32Rules> = /*@__PURE__*/ 2522 messageDesc(file_buf_validate_validate, 16); 2523 2524/** 2525 * SFixed64Rules describes the rules applied to `fixed64` values. 2526 * 2527 * @generated from message buf.validate.SFixed64Rules 2528 */ 2529export type SFixed64Rules = Message<"buf.validate.SFixed64Rules"> & { 2530 /** 2531 * `const` requires the field value to exactly match the specified value. If 2532 * the field value doesn't match, an error message is generated. 2533 * 2534 * ```proto 2535 * message MySFixed64 { 2536 * // value must equal 42 2537 * sfixed64 value = 1 [(buf.validate.field).sfixed64.const = 42]; 2538 * } 2539 * ``` 2540 * 2541 * @generated from field: optional sfixed64 const = 1; 2542 */ 2543 const: bigint; 2544 2545 /** 2546 * @generated from oneof buf.validate.SFixed64Rules.less_than 2547 */ 2548 lessThan: { 2549 /** 2550 * `lt` requires the field value to be less than the specified value (field < 2551 * value). If the field value is equal to or greater than the specified value, 2552 * an error message is generated. 2553 * 2554 * ```proto 2555 * message MySFixed64 { 2556 * // value must be less than 10 2557 * sfixed64 value = 1 [(buf.validate.field).sfixed64.lt = 10]; 2558 * } 2559 * ``` 2560 * 2561 * @generated from field: sfixed64 lt = 2; 2562 */ 2563 value: bigint; 2564 case: "lt"; 2565 } | { 2566 /** 2567 * `lte` requires the field value to be less than or equal to the specified 2568 * value (field <= value). If the field value is greater than the specified 2569 * value, an error message is generated. 2570 * 2571 * ```proto 2572 * message MySFixed64 { 2573 * // value must be less than or equal to 10 2574 * sfixed64 value = 1 [(buf.validate.field).sfixed64.lte = 10]; 2575 * } 2576 * ``` 2577 * 2578 * @generated from field: sfixed64 lte = 3; 2579 */ 2580 value: bigint; 2581 case: "lte"; 2582 } | { case: undefined; value?: undefined }; 2583 2584 /** 2585 * @generated from oneof buf.validate.SFixed64Rules.greater_than 2586 */ 2587 greaterThan: { 2588 /** 2589 * `gt` requires the field value to be greater than the specified value 2590 * (exclusive). If the value of `gt` is larger than a specified `lt` or 2591 * `lte`, the range is reversed, and the field value must be outside the 2592 * specified range. If the field value doesn't meet the required conditions, 2593 * an error message is generated. 2594 * 2595 * ```proto 2596 * message MySFixed64 { 2597 * // value must be greater than 5 [sfixed64.gt] 2598 * sfixed64 value = 1 [(buf.validate.field).sfixed64.gt = 5]; 2599 * 2600 * // value must be greater than 5 and less than 10 [sfixed64.gt_lt] 2601 * sfixed64 other_value = 2 [(buf.validate.field).sfixed64 = { gt: 5, lt: 10 }]; 2602 * 2603 * // value must be greater than 10 or less than 5 [sfixed64.gt_lt_exclusive] 2604 * sfixed64 another_value = 3 [(buf.validate.field).sfixed64 = { gt: 10, lt: 5 }]; 2605 * } 2606 * ``` 2607 * 2608 * @generated from field: sfixed64 gt = 4; 2609 */ 2610 value: bigint; 2611 case: "gt"; 2612 } | { 2613 /** 2614 * `gte` requires the field value to be greater than or equal to the specified 2615 * value (exclusive). If the value of `gte` is larger than a specified `lt` 2616 * or `lte`, the range is reversed, and the field value must be outside the 2617 * specified range. If the field value doesn't meet the required conditions, 2618 * an error message is generated. 2619 * 2620 * ```proto 2621 * message MySFixed64 { 2622 * // value must be greater than or equal to 5 [sfixed64.gte] 2623 * sfixed64 value = 1 [(buf.validate.field).sfixed64.gte = 5]; 2624 * 2625 * // value must be greater than or equal to 5 and less than 10 [sfixed64.gte_lt] 2626 * sfixed64 other_value = 2 [(buf.validate.field).sfixed64 = { gte: 5, lt: 10 }]; 2627 * 2628 * // value must be greater than or equal to 10 or less than 5 [sfixed64.gte_lt_exclusive] 2629 * sfixed64 another_value = 3 [(buf.validate.field).sfixed64 = { gte: 10, lt: 5 }]; 2630 * } 2631 * ``` 2632 * 2633 * @generated from field: sfixed64 gte = 5; 2634 */ 2635 value: bigint; 2636 case: "gte"; 2637 } | { case: undefined; value?: undefined }; 2638 2639 /** 2640 * `in` requires the field value to be equal to one of the specified values. 2641 * If the field value isn't one of the specified values, an error message is 2642 * generated. 2643 * 2644 * ```proto 2645 * message MySFixed64 { 2646 * // value must be in list [1, 2, 3] 2647 * sfixed64 value = 1 [(buf.validate.field).sfixed64 = { in: [1, 2, 3] }]; 2648 * } 2649 * ``` 2650 * 2651 * @generated from field: repeated sfixed64 in = 6; 2652 */ 2653 in: bigint[]; 2654 2655 /** 2656 * `not_in` requires the field value to not be equal to any of the specified 2657 * values. If the field value is one of the specified values, an error 2658 * message is generated. 2659 * 2660 * ```proto 2661 * message MySFixed64 { 2662 * // value must not be in list [1, 2, 3] 2663 * sfixed64 value = 1 [(buf.validate.field).sfixed64 = { not_in: [1, 2, 3] }]; 2664 * } 2665 * ``` 2666 * 2667 * @generated from field: repeated sfixed64 not_in = 7; 2668 */ 2669 notIn: bigint[]; 2670 2671 /** 2672 * `example` specifies values that the field may have. These values SHOULD 2673 * conform to other rules. `example` values will not impact validation 2674 * but may be used as helpful guidance on how to populate the given field. 2675 * 2676 * ```proto 2677 * message MySFixed64 { 2678 * sfixed64 value = 1 [ 2679 * (buf.validate.field).sfixed64.example = 1, 2680 * (buf.validate.field).sfixed64.example = 2 2681 * ]; 2682 * } 2683 * ``` 2684 * 2685 * @generated from field: repeated sfixed64 example = 8; 2686 */ 2687 example: bigint[]; 2688}; 2689 2690/** 2691 * Describes the message buf.validate.SFixed64Rules. 2692 * Use `create(SFixed64RulesSchema)` to create a new message. 2693 */ 2694export const SFixed64RulesSchema: GenMessage<SFixed64Rules> = /*@__PURE__*/ 2695 messageDesc(file_buf_validate_validate, 17); 2696 2697/** 2698 * BoolRules describes the rules applied to `bool` values. These rules 2699 * may also be applied to the `google.protobuf.BoolValue` Well-Known-Type. 2700 * 2701 * @generated from message buf.validate.BoolRules 2702 */ 2703export type BoolRules = Message<"buf.validate.BoolRules"> & { 2704 /** 2705 * `const` requires the field value to exactly match the specified boolean value. 2706 * If the field value doesn't match, an error message is generated. 2707 * 2708 * ```proto 2709 * message MyBool { 2710 * // value must equal true 2711 * bool value = 1 [(buf.validate.field).bool.const = true]; 2712 * } 2713 * ``` 2714 * 2715 * @generated from field: optional bool const = 1; 2716 */ 2717 const: boolean; 2718 2719 /** 2720 * `example` specifies values that the field may have. These values SHOULD 2721 * conform to other rules. `example` values will not impact validation 2722 * but may be used as helpful guidance on how to populate the given field. 2723 * 2724 * ```proto 2725 * message MyBool { 2726 * bool value = 1 [ 2727 * (buf.validate.field).bool.example = 1, 2728 * (buf.validate.field).bool.example = 2 2729 * ]; 2730 * } 2731 * ``` 2732 * 2733 * @generated from field: repeated bool example = 2; 2734 */ 2735 example: boolean[]; 2736}; 2737 2738/** 2739 * Describes the message buf.validate.BoolRules. 2740 * Use `create(BoolRulesSchema)` to create a new message. 2741 */ 2742export const BoolRulesSchema: GenMessage<BoolRules> = /*@__PURE__*/ 2743 messageDesc(file_buf_validate_validate, 18); 2744 2745/** 2746 * StringRules describes the rules applied to `string` values These 2747 * rules may also be applied to the `google.protobuf.StringValue` Well-Known-Type. 2748 * 2749 * @generated from message buf.validate.StringRules 2750 */ 2751export type StringRules = Message<"buf.validate.StringRules"> & { 2752 /** 2753 * `const` requires the field value to exactly match the specified value. If 2754 * the field value doesn't match, an error message is generated. 2755 * 2756 * ```proto 2757 * message MyString { 2758 * // value must equal `hello` 2759 * string value = 1 [(buf.validate.field).string.const = "hello"]; 2760 * } 2761 * ``` 2762 * 2763 * @generated from field: optional string const = 1; 2764 */ 2765 const: string; 2766 2767 /** 2768 * `len` dictates that the field value must have the specified 2769 * number of characters (Unicode code points), which may differ from the number 2770 * of bytes in the string. If the field value does not meet the specified 2771 * length, an error message will be generated. 2772 * 2773 * ```proto 2774 * message MyString { 2775 * // value length must be 5 characters 2776 * string value = 1 [(buf.validate.field).string.len = 5]; 2777 * } 2778 * ``` 2779 * 2780 * @generated from field: optional uint64 len = 19; 2781 */ 2782 len: bigint; 2783 2784 /** 2785 * `min_len` specifies that the field value must have at least the specified 2786 * number of characters (Unicode code points), which may differ from the number 2787 * of bytes in the string. If the field value contains fewer characters, an error 2788 * message will be generated. 2789 * 2790 * ```proto 2791 * message MyString { 2792 * // value length must be at least 3 characters 2793 * string value = 1 [(buf.validate.field).string.min_len = 3]; 2794 * } 2795 * ``` 2796 * 2797 * @generated from field: optional uint64 min_len = 2; 2798 */ 2799 minLen: bigint; 2800 2801 /** 2802 * `max_len` specifies that the field value must have no more than the specified 2803 * number of characters (Unicode code points), which may differ from the 2804 * number of bytes in the string. If the field value contains more characters, 2805 * an error message will be generated. 2806 * 2807 * ```proto 2808 * message MyString { 2809 * // value length must be at most 10 characters 2810 * string value = 1 [(buf.validate.field).string.max_len = 10]; 2811 * } 2812 * ``` 2813 * 2814 * @generated from field: optional uint64 max_len = 3; 2815 */ 2816 maxLen: bigint; 2817 2818 /** 2819 * `len_bytes` dictates that the field value must have the specified number of 2820 * bytes. If the field value does not match the specified length in bytes, 2821 * an error message will be generated. 2822 * 2823 * ```proto 2824 * message MyString { 2825 * // value length must be 6 bytes 2826 * string value = 1 [(buf.validate.field).string.len_bytes = 6]; 2827 * } 2828 * ``` 2829 * 2830 * @generated from field: optional uint64 len_bytes = 20; 2831 */ 2832 lenBytes: bigint; 2833 2834 /** 2835 * `min_bytes` specifies that the field value must have at least the specified 2836 * number of bytes. If the field value contains fewer bytes, an error message 2837 * will be generated. 2838 * 2839 * ```proto 2840 * message MyString { 2841 * // value length must be at least 4 bytes 2842 * string value = 1 [(buf.validate.field).string.min_bytes = 4]; 2843 * } 2844 * 2845 * ``` 2846 * 2847 * @generated from field: optional uint64 min_bytes = 4; 2848 */ 2849 minBytes: bigint; 2850 2851 /** 2852 * `max_bytes` specifies that the field value must have no more than the 2853 * specified number of bytes. If the field value contains more bytes, an 2854 * error message will be generated. 2855 * 2856 * ```proto 2857 * message MyString { 2858 * // value length must be at most 8 bytes 2859 * string value = 1 [(buf.validate.field).string.max_bytes = 8]; 2860 * } 2861 * ``` 2862 * 2863 * @generated from field: optional uint64 max_bytes = 5; 2864 */ 2865 maxBytes: bigint; 2866 2867 /** 2868 * `pattern` specifies that the field value must match the specified 2869 * regular expression (RE2 syntax), with the expression provided without any 2870 * delimiters. If the field value doesn't match the regular expression, an 2871 * error message will be generated. 2872 * 2873 * ```proto 2874 * message MyString { 2875 * // value does not match regex pattern `^[a-zA-Z]//$` 2876 * string value = 1 [(buf.validate.field).string.pattern = "^[a-zA-Z]//$"]; 2877 * } 2878 * ``` 2879 * 2880 * @generated from field: optional string pattern = 6; 2881 */ 2882 pattern: string; 2883 2884 /** 2885 * `prefix` specifies that the field value must have the 2886 * specified substring at the beginning of the string. If the field value 2887 * doesn't start with the specified prefix, an error message will be 2888 * generated. 2889 * 2890 * ```proto 2891 * message MyString { 2892 * // value does not have prefix `pre` 2893 * string value = 1 [(buf.validate.field).string.prefix = "pre"]; 2894 * } 2895 * ``` 2896 * 2897 * @generated from field: optional string prefix = 7; 2898 */ 2899 prefix: string; 2900 2901 /** 2902 * `suffix` specifies that the field value must have the 2903 * specified substring at the end of the string. If the field value doesn't 2904 * end with the specified suffix, an error message will be generated. 2905 * 2906 * ```proto 2907 * message MyString { 2908 * // value does not have suffix `post` 2909 * string value = 1 [(buf.validate.field).string.suffix = "post"]; 2910 * } 2911 * ``` 2912 * 2913 * @generated from field: optional string suffix = 8; 2914 */ 2915 suffix: string; 2916 2917 /** 2918 * `contains` specifies that the field value must have the 2919 * specified substring anywhere in the string. If the field value doesn't 2920 * contain the specified substring, an error message will be generated. 2921 * 2922 * ```proto 2923 * message MyString { 2924 * // value does not contain substring `inside`. 2925 * string value = 1 [(buf.validate.field).string.contains = "inside"]; 2926 * } 2927 * ``` 2928 * 2929 * @generated from field: optional string contains = 9; 2930 */ 2931 contains: string; 2932 2933 /** 2934 * `not_contains` specifies that the field value must not have the 2935 * specified substring anywhere in the string. If the field value contains 2936 * the specified substring, an error message will be generated. 2937 * 2938 * ```proto 2939 * message MyString { 2940 * // value contains substring `inside`. 2941 * string value = 1 [(buf.validate.field).string.not_contains = "inside"]; 2942 * } 2943 * ``` 2944 * 2945 * @generated from field: optional string not_contains = 23; 2946 */ 2947 notContains: string; 2948 2949 /** 2950 * `in` specifies that the field value must be equal to one of the specified 2951 * values. If the field value isn't one of the specified values, an error 2952 * message will be generated. 2953 * 2954 * ```proto 2955 * message MyString { 2956 * // value must be in list ["apple", "banana"] 2957 * string value = 1 [(buf.validate.field).string.in = "apple", (buf.validate.field).string.in = "banana"]; 2958 * } 2959 * ``` 2960 * 2961 * @generated from field: repeated string in = 10; 2962 */ 2963 in: string[]; 2964 2965 /** 2966 * `not_in` specifies that the field value cannot be equal to any 2967 * of the specified values. If the field value is one of the specified values, 2968 * an error message will be generated. 2969 * ```proto 2970 * message MyString { 2971 * // value must not be in list ["orange", "grape"] 2972 * string value = 1 [(buf.validate.field).string.not_in = "orange", (buf.validate.field).string.not_in = "grape"]; 2973 * } 2974 * ``` 2975 * 2976 * @generated from field: repeated string not_in = 11; 2977 */ 2978 notIn: string[]; 2979 2980 /** 2981 * `WellKnown` rules provide advanced rules against common string 2982 * patterns. 2983 * 2984 * @generated from oneof buf.validate.StringRules.well_known 2985 */ 2986 wellKnown: { 2987 /** 2988 * `email` specifies that the field value must be a valid email address, for 2989 * example "foo@example.com". 2990 * 2991 * 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). 2992 * Note that this standard willfully deviates from [RFC 5322](https://datatracker.ietf.org/doc/html/rfc5322), 2993 * which allows many unexpected forms of email addresses and will easily match 2994 * a typographical error. 2995 * 2996 * If the field value isn't a valid email address, an error message will be generated. 2997 * 2998 * ```proto 2999 * message MyString { 3000 * // value must be a valid email address 3001 * string value = 1 [(buf.validate.field).string.email = true]; 3002 * } 3003 * ``` 3004 * 3005 * @generated from field: bool email = 12; 3006 */ 3007 value: boolean; 3008 case: "email"; 3009 } | { 3010 /** 3011 * `hostname` specifies that the field value must be a valid hostname, for 3012 * example "foo.example.com". 3013 * 3014 * A valid hostname follows the rules below: 3015 * - The name consists of one or more labels, separated by a dot ("."). 3016 * - Each label can be 1 to 63 alphanumeric characters. 3017 * - A label can contain hyphens ("-"), but must not start or end with a hyphen. 3018 * - The right-most label must not be digits only. 3019 * - The name can have a trailing dot—for example, "foo.example.com.". 3020 * - The name can be 253 characters at most, excluding the optional trailing dot. 3021 * 3022 * If the field value isn't a valid hostname, an error message will be generated. 3023 * 3024 * ```proto 3025 * message MyString { 3026 * // value must be a valid hostname 3027 * string value = 1 [(buf.validate.field).string.hostname = true]; 3028 * } 3029 * ``` 3030 * 3031 * @generated from field: bool hostname = 13; 3032 */ 3033 value: boolean; 3034 case: "hostname"; 3035 } | { 3036 /** 3037 * `ip` specifies that the field value must be a valid IP (v4 or v6) address. 3038 * 3039 * IPv4 addresses are expected in the dotted decimal format—for example, "192.168.5.21". 3040 * IPv6 addresses are expected in their text representation—for example, "::1", 3041 * or "2001:0DB8:ABCD:0012::0". 3042 * 3043 * Both formats are well-defined in the internet standard [RFC 3986](https://datatracker.ietf.org/doc/html/rfc3986). 3044 * Zone identifiers for IPv6 addresses (for example, "fe80::a%en1") are supported. 3045 * 3046 * If the field value isn't a valid IP address, an error message will be 3047 * generated. 3048 * 3049 * ```proto 3050 * message MyString { 3051 * // value must be a valid IP address 3052 * string value = 1 [(buf.validate.field).string.ip = true]; 3053 * } 3054 * ``` 3055 * 3056 * @generated from field: bool ip = 14; 3057 */ 3058 value: boolean; 3059 case: "ip"; 3060 } | { 3061 /** 3062 * `ipv4` specifies that the field value must be a valid IPv4 address—for 3063 * example "192.168.5.21". If the field value isn't a valid IPv4 address, an 3064 * error message will be generated. 3065 * 3066 * ```proto 3067 * message MyString { 3068 * // value must be a valid IPv4 address 3069 * string value = 1 [(buf.validate.field).string.ipv4 = true]; 3070 * } 3071 * ``` 3072 * 3073 * @generated from field: bool ipv4 = 15; 3074 */ 3075 value: boolean; 3076 case: "ipv4"; 3077 } | { 3078 /** 3079 * `ipv6` specifies that the field value must be a valid IPv6 address—for 3080 * example "::1", or "d7a:115c:a1e0:ab12:4843:cd96:626b:430b". If the field 3081 * value is not a valid IPv6 address, an error message will be generated. 3082 * 3083 * ```proto 3084 * message MyString { 3085 * // value must be a valid IPv6 address 3086 * string value = 1 [(buf.validate.field).string.ipv6 = true]; 3087 * } 3088 * ``` 3089 * 3090 * @generated from field: bool ipv6 = 16; 3091 */ 3092 value: boolean; 3093 case: "ipv6"; 3094 } | { 3095 /** 3096 * `uri` specifies that the field value must be a valid URI, for example 3097 * "https://example.com/foo/bar?baz=quux#frag". 3098 * 3099 * URI is defined in the internet standard [RFC 3986](https://datatracker.ietf.org/doc/html/rfc3986). 3100 * Zone Identifiers in IPv6 address literals are supported ([RFC 6874](https://datatracker.ietf.org/doc/html/rfc6874)). 3101 * 3102 * If the field value isn't a valid URI, an error message will be generated. 3103 * 3104 * ```proto 3105 * message MyString { 3106 * // value must be a valid URI 3107 * string value = 1 [(buf.validate.field).string.uri = true]; 3108 * } 3109 * ``` 3110 * 3111 * @generated from field: bool uri = 17; 3112 */ 3113 value: boolean; 3114 case: "uri"; 3115 } | { 3116 /** 3117 * `uri_ref` specifies that the field value must be a valid URI Reference—either 3118 * a URI such as "https://example.com/foo/bar?baz=quux#frag", or a Relative 3119 * Reference such as "./foo/bar?query". 3120 * 3121 * URI, URI Reference, and Relative Reference are defined in the internet 3122 * standard [RFC 3986](https://datatracker.ietf.org/doc/html/rfc3986). Zone 3123 * Identifiers in IPv6 address literals are supported ([RFC 6874](https://datatracker.ietf.org/doc/html/rfc6874)). 3124 * 3125 * If the field value isn't a valid URI Reference, an error message will be 3126 * generated. 3127 * 3128 * ```proto 3129 * message MyString { 3130 * // value must be a valid URI Reference 3131 * string value = 1 [(buf.validate.field).string.uri_ref = true]; 3132 * } 3133 * ``` 3134 * 3135 * @generated from field: bool uri_ref = 18; 3136 */ 3137 value: boolean; 3138 case: "uriRef"; 3139 } | { 3140 /** 3141 * `address` specifies that the field value must be either a valid hostname 3142 * (for example, "example.com"), or a valid IP (v4 or v6) address (for example, 3143 * "192.168.0.1", or "::1"). If the field value isn't a valid hostname or IP, 3144 * an error message will be generated. 3145 * 3146 * ```proto 3147 * message MyString { 3148 * // value must be a valid hostname, or ip address 3149 * string value = 1 [(buf.validate.field).string.address = true]; 3150 * } 3151 * ``` 3152 * 3153 * @generated from field: bool address = 21; 3154 */ 3155 value: boolean; 3156 case: "address"; 3157 } | { 3158 /** 3159 * `uuid` specifies that the field value must be a valid UUID as defined by 3160 * [RFC 4122](https://datatracker.ietf.org/doc/html/rfc4122#section-4.1.2). If the 3161 * field value isn't a valid UUID, an error message will be generated. 3162 * 3163 * ```proto 3164 * message MyString { 3165 * // value must be a valid UUID 3166 * string value = 1 [(buf.validate.field).string.uuid = true]; 3167 * } 3168 * ``` 3169 * 3170 * @generated from field: bool uuid = 22; 3171 */ 3172 value: boolean; 3173 case: "uuid"; 3174 } | { 3175 /** 3176 * `tuuid` (trimmed UUID) specifies that the field value must be a valid UUID as 3177 * defined by [RFC 4122](https://datatracker.ietf.org/doc/html/rfc4122#section-4.1.2) with all dashes 3178 * omitted. If the field value isn't a valid UUID without dashes, an error message 3179 * will be generated. 3180 * 3181 * ```proto 3182 * message MyString { 3183 * // value must be a valid trimmed UUID 3184 * string value = 1 [(buf.validate.field).string.tuuid = true]; 3185 * } 3186 * ``` 3187 * 3188 * @generated from field: bool tuuid = 33; 3189 */ 3190 value: boolean; 3191 case: "tuuid"; 3192 } | { 3193 /** 3194 * `ip_with_prefixlen` specifies that the field value must be a valid IP 3195 * (v4 or v6) address with prefix length—for example, "192.168.5.21/16" or 3196 * "2001:0DB8:ABCD:0012::F1/64". If the field value isn't a valid IP with 3197 * prefix length, an error message will be generated. 3198 * 3199 * ```proto 3200 * message MyString { 3201 * // value must be a valid IP with prefix length 3202 * string value = 1 [(buf.validate.field).string.ip_with_prefixlen = true]; 3203 * } 3204 * ``` 3205 * 3206 * @generated from field: bool ip_with_prefixlen = 26; 3207 */ 3208 value: boolean; 3209 case: "ipWithPrefixlen"; 3210 } | { 3211 /** 3212 * `ipv4_with_prefixlen` specifies that the field value must be a valid 3213 * IPv4 address with prefix length—for example, "192.168.5.21/16". If the 3214 * field value isn't a valid IPv4 address with prefix length, an error 3215 * message will be generated. 3216 * 3217 * ```proto 3218 * message MyString { 3219 * // value must be a valid IPv4 address with prefix length 3220 * string value = 1 [(buf.validate.field).string.ipv4_with_prefixlen = true]; 3221 * } 3222 * ``` 3223 * 3224 * @generated from field: bool ipv4_with_prefixlen = 27; 3225 */ 3226 value: boolean; 3227 case: "ipv4WithPrefixlen"; 3228 } | { 3229 /** 3230 * `ipv6_with_prefixlen` specifies that the field value must be a valid 3231 * IPv6 address with prefix length—for example, "2001:0DB8:ABCD:0012::F1/64". 3232 * If the field value is not a valid IPv6 address with prefix length, 3233 * an error message will be generated. 3234 * 3235 * ```proto 3236 * message MyString { 3237 * // value must be a valid IPv6 address prefix length 3238 * string value = 1 [(buf.validate.field).string.ipv6_with_prefixlen = true]; 3239 * } 3240 * ``` 3241 * 3242 * @generated from field: bool ipv6_with_prefixlen = 28; 3243 */ 3244 value: boolean; 3245 case: "ipv6WithPrefixlen"; 3246 } | { 3247 /** 3248 * `ip_prefix` specifies that the field value must be a valid IP (v4 or v6) 3249 * prefix—for example, "192.168.0.0/16" or "2001:0DB8:ABCD:0012::0/64". 3250 * 3251 * The prefix must have all zeros for the unmasked bits. For example, 3252 * "2001:0DB8:ABCD:0012::0/64" designates the left-most 64 bits for the 3253 * prefix, and the remaining 64 bits must be zero. 3254 * 3255 * If the field value isn't a valid IP prefix, an error message will be 3256 * generated. 3257 * 3258 * ```proto 3259 * message MyString { 3260 * // value must be a valid IP prefix 3261 * string value = 1 [(buf.validate.field).string.ip_prefix = true]; 3262 * } 3263 * ``` 3264 * 3265 * @generated from field: bool ip_prefix = 29; 3266 */ 3267 value: boolean; 3268 case: "ipPrefix"; 3269 } | { 3270 /** 3271 * `ipv4_prefix` specifies that the field value must be a valid IPv4 3272 * prefix, for example "192.168.0.0/16". 3273 * 3274 * The prefix must have all zeros for the unmasked bits. For example, 3275 * "192.168.0.0/16" designates the left-most 16 bits for the prefix, 3276 * and the remaining 16 bits must be zero. 3277 * 3278 * If the field value isn't a valid IPv4 prefix, an error message 3279 * will be generated. 3280 * 3281 * ```proto 3282 * message MyString { 3283 * // value must be a valid IPv4 prefix 3284 * string value = 1 [(buf.validate.field).string.ipv4_prefix = true]; 3285 * } 3286 * ``` 3287 * 3288 * @generated from field: bool ipv4_prefix = 30; 3289 */ 3290 value: boolean; 3291 case: "ipv4Prefix"; 3292 } | { 3293 /** 3294 * `ipv6_prefix` specifies that the field value must be a valid IPv6 prefix—for 3295 * example, "2001:0DB8:ABCD:0012::0/64". 3296 * 3297 * The prefix must have all zeros for the unmasked bits. For example, 3298 * "2001:0DB8:ABCD:0012::0/64" designates the left-most 64 bits for the 3299 * prefix, and the remaining 64 bits must be zero. 3300 * 3301 * If the field value is not a valid IPv6 prefix, an error message will be 3302 * generated. 3303 * 3304 * ```proto 3305 * message MyString { 3306 * // value must be a valid IPv6 prefix 3307 * string value = 1 [(buf.validate.field).string.ipv6_prefix = true]; 3308 * } 3309 * ``` 3310 * 3311 * @generated from field: bool ipv6_prefix = 31; 3312 */ 3313 value: boolean; 3314 case: "ipv6Prefix"; 3315 } | { 3316 /** 3317 * `host_and_port` specifies that the field value must be valid host/port 3318 * pair—for example, "example.com:8080". 3319 * 3320 * The host can be one of: 3321 * - An IPv4 address in dotted decimal format—for example, "192.168.5.21". 3322 * - An IPv6 address enclosed in square brackets—for example, "[2001:0DB8:ABCD:0012::F1]". 3323 * - A hostname—for example, "example.com". 3324 * 3325 * The port is separated by a colon. It must be non-empty, with a decimal number 3326 * in the range of 0-65535, inclusive. 3327 * 3328 * @generated from field: bool host_and_port = 32; 3329 */ 3330 value: boolean; 3331 case: "hostAndPort"; 3332 } | { 3333 /** 3334 * `ulid` specifies that the field value must be a valid ULID (Universally Unique 3335 * Lexicographically Sortable Identifier) as defined by the [ULID specification](https://github.com/ulid/spec). 3336 * If the field value isn't a valid ULID, an error message will be generated. 3337 * 3338 * ```proto 3339 * message MyString { 3340 * // value must be a valid ULID 3341 * string value = 1 [(buf.validate.field).string.ulid = true]; 3342 * } 3343 * ``` 3344 * 3345 * @generated from field: bool ulid = 35; 3346 */ 3347 value: boolean; 3348 case: "ulid"; 3349 } | { 3350 /** 3351 * `well_known_regex` specifies a common well-known pattern 3352 * defined as a regex. If the field value doesn't match the well-known 3353 * regex, an error message will be generated. 3354 * 3355 * ```proto 3356 * message MyString { 3357 * // value must be a valid HTTP header value 3358 * string value = 1 [(buf.validate.field).string.well_known_regex = KNOWN_REGEX_HTTP_HEADER_VALUE]; 3359 * } 3360 * ``` 3361 * 3362 * #### KnownRegex 3363 * 3364 * `well_known_regex` contains some well-known patterns. 3365 * 3366 * | Name | Number | Description | 3367 * |-------------------------------|--------|-------------------------------------------| 3368 * | KNOWN_REGEX_UNSPECIFIED | 0 | | 3369 * | KNOWN_REGEX_HTTP_HEADER_NAME | 1 | HTTP header name as defined by [RFC 7230](https://datatracker.ietf.org/doc/html/rfc7230#section-3.2) | 3370 * | 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) | 3371 * 3372 * @generated from field: buf.validate.KnownRegex well_known_regex = 24; 3373 */ 3374 value: KnownRegex; 3375 case: "wellKnownRegex"; 3376 } | { case: undefined; value?: undefined }; 3377 3378 /** 3379 * This applies to regexes `HTTP_HEADER_NAME` and `HTTP_HEADER_VALUE` to 3380 * enable strict header validation. By default, this is true, and HTTP header 3381 * validations are [RFC-compliant](https://datatracker.ietf.org/doc/html/rfc7230#section-3). Setting to false will enable looser 3382 * validations that only disallow `\r\n\0` characters, which can be used to 3383 * bypass header matching rules. 3384 * 3385 * ```proto 3386 * message MyString { 3387 * // The field `value` must have be a valid HTTP headers, but not enforced with strict rules. 3388 * string value = 1 [(buf.validate.field).string.strict = false]; 3389 * } 3390 * ``` 3391 * 3392 * @generated from field: optional bool strict = 25; 3393 */ 3394 strict: boolean; 3395 3396 /** 3397 * `example` specifies values that the field may have. These values SHOULD 3398 * conform to other rules. `example` values will not impact validation 3399 * but may be used as helpful guidance on how to populate the given field. 3400 * 3401 * ```proto 3402 * message MyString { 3403 * string value = 1 [ 3404 * (buf.validate.field).string.example = "hello", 3405 * (buf.validate.field).string.example = "world" 3406 * ]; 3407 * } 3408 * ``` 3409 * 3410 * @generated from field: repeated string example = 34; 3411 */ 3412 example: string[]; 3413}; 3414 3415/** 3416 * Describes the message buf.validate.StringRules. 3417 * Use `create(StringRulesSchema)` to create a new message. 3418 */ 3419export const StringRulesSchema: GenMessage<StringRules> = /*@__PURE__*/ 3420 messageDesc(file_buf_validate_validate, 19); 3421 3422/** 3423 * BytesRules describe the rules applied to `bytes` values. These rules 3424 * may also be applied to the `google.protobuf.BytesValue` Well-Known-Type. 3425 * 3426 * @generated from message buf.validate.BytesRules 3427 */ 3428export type BytesRules = Message<"buf.validate.BytesRules"> & { 3429 /** 3430 * `const` requires the field value to exactly match the specified bytes 3431 * value. If the field value doesn't match, an error message is generated. 3432 * 3433 * ```proto 3434 * message MyBytes { 3435 * // value must be "\x01\x02\x03\x04" 3436 * bytes value = 1 [(buf.validate.field).bytes.const = "\x01\x02\x03\x04"]; 3437 * } 3438 * ``` 3439 * 3440 * @generated from field: optional bytes const = 1; 3441 */ 3442 const: Uint8Array; 3443 3444 /** 3445 * `len` requires the field value to have the specified length in bytes. 3446 * If the field value doesn't match, an error message is generated. 3447 * 3448 * ```proto 3449 * message MyBytes { 3450 * // value length must be 4 bytes. 3451 * optional bytes value = 1 [(buf.validate.field).bytes.len = 4]; 3452 * } 3453 * ``` 3454 * 3455 * @generated from field: optional uint64 len = 13; 3456 */ 3457 len: bigint; 3458 3459 /** 3460 * `min_len` requires the field value to have at least the specified minimum 3461 * length in bytes. 3462 * If the field value doesn't meet the requirement, an error message is generated. 3463 * 3464 * ```proto 3465 * message MyBytes { 3466 * // value length must be at least 2 bytes. 3467 * optional bytes value = 1 [(buf.validate.field).bytes.min_len = 2]; 3468 * } 3469 * ``` 3470 * 3471 * @generated from field: optional uint64 min_len = 2; 3472 */ 3473 minLen: bigint; 3474 3475 /** 3476 * `max_len` requires the field value to have at most the specified maximum 3477 * length in bytes. 3478 * If the field value exceeds the requirement, an error message is generated. 3479 * 3480 * ```proto 3481 * message MyBytes { 3482 * // value must be at most 6 bytes. 3483 * optional bytes value = 1 [(buf.validate.field).bytes.max_len = 6]; 3484 * } 3485 * ``` 3486 * 3487 * @generated from field: optional uint64 max_len = 3; 3488 */ 3489 maxLen: bigint; 3490 3491 /** 3492 * `pattern` requires the field value to match the specified regular 3493 * expression ([RE2 syntax](https://github.com/google/re2/wiki/Syntax)). 3494 * The value of the field must be valid UTF-8 or validation will fail with a 3495 * runtime error. 3496 * If the field value doesn't match the pattern, an error message is generated. 3497 * 3498 * ```proto 3499 * message MyBytes { 3500 * // value must match regex pattern "^[a-zA-Z0-9]+$". 3501 * optional bytes value = 1 [(buf.validate.field).bytes.pattern = "^[a-zA-Z0-9]+$"]; 3502 * } 3503 * ``` 3504 * 3505 * @generated from field: optional string pattern = 4; 3506 */ 3507 pattern: string; 3508 3509 /** 3510 * `prefix` requires the field value to have the specified bytes at the 3511 * beginning of the string. 3512 * If the field value doesn't meet the requirement, an error message is generated. 3513 * 3514 * ```proto 3515 * message MyBytes { 3516 * // value does not have prefix \x01\x02 3517 * optional bytes value = 1 [(buf.validate.field).bytes.prefix = "\x01\x02"]; 3518 * } 3519 * ``` 3520 * 3521 * @generated from field: optional bytes prefix = 5; 3522 */ 3523 prefix: Uint8Array; 3524 3525 /** 3526 * `suffix` requires the field value to have the specified bytes at the end 3527 * of the string. 3528 * If the field value doesn't meet the requirement, an error message is generated. 3529 * 3530 * ```proto 3531 * message MyBytes { 3532 * // value does not have suffix \x03\x04 3533 * optional bytes value = 1 [(buf.validate.field).bytes.suffix = "\x03\x04"]; 3534 * } 3535 * ``` 3536 * 3537 * @generated from field: optional bytes suffix = 6; 3538 */ 3539 suffix: Uint8Array; 3540 3541 /** 3542 * `contains` requires the field value to have the specified bytes anywhere in 3543 * the string. 3544 * If the field value doesn't meet the requirement, an error message is generated. 3545 * 3546 * ```proto 3547 * message MyBytes { 3548 * // value does not contain \x02\x03 3549 * optional bytes value = 1 [(buf.validate.field).bytes.contains = "\x02\x03"]; 3550 * } 3551 * ``` 3552 * 3553 * @generated from field: optional bytes contains = 7; 3554 */ 3555 contains: Uint8Array; 3556 3557 /** 3558 * `in` requires the field value to be equal to one of the specified 3559 * values. If the field value doesn't match any of the specified values, an 3560 * error message is generated. 3561 * 3562 * ```proto 3563 * message MyBytes { 3564 * // value must in ["\x01\x02", "\x02\x03", "\x03\x04"] 3565 * optional bytes value = 1 [(buf.validate.field).bytes.in = {"\x01\x02", "\x02\x03", "\x03\x04"}]; 3566 * } 3567 * ``` 3568 * 3569 * @generated from field: repeated bytes in = 8; 3570 */ 3571 in: Uint8Array[]; 3572 3573 /** 3574 * `not_in` requires the field value to be not equal to any of the specified 3575 * values. 3576 * If the field value matches any of the specified values, an error message is 3577 * generated. 3578 * 3579 * ```proto 3580 * message MyBytes { 3581 * // value must not in ["\x01\x02", "\x02\x03", "\x03\x04"] 3582 * optional bytes value = 1 [(buf.validate.field).bytes.not_in = {"\x01\x02", "\x02\x03", "\x03\x04"}]; 3583 * } 3584 * ``` 3585 * 3586 * @generated from field: repeated bytes not_in = 9; 3587 */ 3588 notIn: Uint8Array[]; 3589 3590 /** 3591 * WellKnown rules provide advanced rules against common byte 3592 * patterns 3593 * 3594 * @generated from oneof buf.validate.BytesRules.well_known 3595 */ 3596 wellKnown: { 3597 /** 3598 * `ip` ensures that the field `value` is a valid IP address (v4 or v6) in byte format. 3599 * If the field value doesn't meet this rule, an error message is generated. 3600 * 3601 * ```proto 3602 * message MyBytes { 3603 * // value must be a valid IP address 3604 * optional bytes value = 1 [(buf.validate.field).bytes.ip = true]; 3605 * } 3606 * ``` 3607 * 3608 * @generated from field: bool ip = 10; 3609 */ 3610 value: boolean; 3611 case: "ip"; 3612 } | { 3613 /** 3614 * `ipv4` ensures that the field `value` is a valid IPv4 address in byte format. 3615 * If the field value doesn't meet this rule, an error message is generated. 3616 * 3617 * ```proto 3618 * message MyBytes { 3619 * // value must be a valid IPv4 address 3620 * optional bytes value = 1 [(buf.validate.field).bytes.ipv4 = true]; 3621 * } 3622 * ``` 3623 * 3624 * @generated from field: bool ipv4 = 11; 3625 */ 3626 value: boolean; 3627 case: "ipv4"; 3628 } | { 3629 /** 3630 * `ipv6` ensures that the field `value` is a valid IPv6 address in byte format. 3631 * If the field value doesn't meet this rule, an error message is generated. 3632 * ```proto 3633 * message MyBytes { 3634 * // value must be a valid IPv6 address 3635 * optional bytes value = 1 [(buf.validate.field).bytes.ipv6 = true]; 3636 * } 3637 * ``` 3638 * 3639 * @generated from field: bool ipv6 = 12; 3640 */ 3641 value: boolean; 3642 case: "ipv6"; 3643 } | { 3644 /** 3645 * `uuid` ensures that the field `value` encodes the 128-bit UUID data as 3646 * defined by [RFC 4122](https://datatracker.ietf.org/doc/html/rfc4122#section-4.1.2). 3647 * The field must contain exactly 16 bytes 3648 * representing the UUID. If the field value isn't a valid UUID, an error 3649 * message will be generated. 3650 * 3651 * ```proto 3652 * message MyBytes { 3653 * // value must be a valid UUID 3654 * optional bytes value = 1 [(buf.validate.field).bytes.uuid = true]; 3655 * } 3656 * ``` 3657 * 3658 * @generated from field: bool uuid = 15; 3659 */ 3660 value: boolean; 3661 case: "uuid"; 3662 } | { case: undefined; value?: undefined }; 3663 3664 /** 3665 * `example` specifies values that the field may have. These values SHOULD 3666 * conform to other rules. `example` values will not impact validation 3667 * but may be used as helpful guidance on how to populate the given field. 3668 * 3669 * ```proto 3670 * message MyBytes { 3671 * bytes value = 1 [ 3672 * (buf.validate.field).bytes.example = "\x01\x02", 3673 * (buf.validate.field).bytes.example = "\x02\x03" 3674 * ]; 3675 * } 3676 * ``` 3677 * 3678 * @generated from field: repeated bytes example = 14; 3679 */ 3680 example: Uint8Array[]; 3681}; 3682 3683/** 3684 * Describes the message buf.validate.BytesRules. 3685 * Use `create(BytesRulesSchema)` to create a new message. 3686 */ 3687export const BytesRulesSchema: GenMessage<BytesRules> = /*@__PURE__*/ 3688 messageDesc(file_buf_validate_validate, 20); 3689 3690/** 3691 * EnumRules describe the rules applied to `enum` values. 3692 * 3693 * @generated from message buf.validate.EnumRules 3694 */ 3695export type EnumRules = Message<"buf.validate.EnumRules"> & { 3696 /** 3697 * `const` requires the field value to exactly match the specified enum value. 3698 * If the field value doesn't match, an error message is generated. 3699 * 3700 * ```proto 3701 * enum MyEnum { 3702 * MY_ENUM_UNSPECIFIED = 0; 3703 * MY_ENUM_VALUE1 = 1; 3704 * MY_ENUM_VALUE2 = 2; 3705 * } 3706 * 3707 * message MyMessage { 3708 * // The field `value` must be exactly MY_ENUM_VALUE1. 3709 * MyEnum value = 1 [(buf.validate.field).enum.const = 1]; 3710 * } 3711 * ``` 3712 * 3713 * @generated from field: optional int32 const = 1; 3714 */ 3715 const: number; 3716 3717 /** 3718 * `defined_only` requires the field value to be one of the defined values for 3719 * this enum, failing on any undefined value. 3720 * 3721 * ```proto 3722 * enum MyEnum { 3723 * MY_ENUM_UNSPECIFIED = 0; 3724 * MY_ENUM_VALUE1 = 1; 3725 * MY_ENUM_VALUE2 = 2; 3726 * } 3727 * 3728 * message MyMessage { 3729 * // The field `value` must be a defined value of MyEnum. 3730 * MyEnum value = 1 [(buf.validate.field).enum.defined_only = true]; 3731 * } 3732 * ``` 3733 * 3734 * @generated from field: optional bool defined_only = 2; 3735 */ 3736 definedOnly: boolean; 3737 3738 /** 3739 * `in` requires the field value to be equal to one of the 3740 * specified enum values. If the field value doesn't match any of the 3741 * specified values, an error message is generated. 3742 * 3743 * ```proto 3744 * enum MyEnum { 3745 * MY_ENUM_UNSPECIFIED = 0; 3746 * MY_ENUM_VALUE1 = 1; 3747 * MY_ENUM_VALUE2 = 2; 3748 * } 3749 * 3750 * message MyMessage { 3751 * // The field `value` must be equal to one of the specified values. 3752 * MyEnum value = 1 [(buf.validate.field).enum = { in: [1, 2]}]; 3753 * } 3754 * ``` 3755 * 3756 * @generated from field: repeated int32 in = 3; 3757 */ 3758 in: number[]; 3759 3760 /** 3761 * `not_in` requires the field value to be not equal to any of the 3762 * specified enum values. If the field value matches one of the specified 3763 * values, an error message is generated. 3764 * 3765 * ```proto 3766 * enum MyEnum { 3767 * MY_ENUM_UNSPECIFIED = 0; 3768 * MY_ENUM_VALUE1 = 1; 3769 * MY_ENUM_VALUE2 = 2; 3770 * } 3771 * 3772 * message MyMessage { 3773 * // The field `value` must not be equal to any of the specified values. 3774 * MyEnum value = 1 [(buf.validate.field).enum = { not_in: [1, 2]}]; 3775 * } 3776 * ``` 3777 * 3778 * @generated from field: repeated int32 not_in = 4; 3779 */ 3780 notIn: number[]; 3781 3782 /** 3783 * `example` specifies values that the field may have. These values SHOULD 3784 * conform to other rules. `example` values will not impact validation 3785 * but may be used as helpful guidance on how to populate the given field. 3786 * 3787 * ```proto 3788 * enum MyEnum { 3789 * MY_ENUM_UNSPECIFIED = 0; 3790 * MY_ENUM_VALUE1 = 1; 3791 * MY_ENUM_VALUE2 = 2; 3792 * } 3793 * 3794 * message MyMessage { 3795 * (buf.validate.field).enum.example = 1, 3796 * (buf.validate.field).enum.example = 2 3797 * } 3798 * ``` 3799 * 3800 * @generated from field: repeated int32 example = 5; 3801 */ 3802 example: number[]; 3803}; 3804 3805/** 3806 * Describes the message buf.validate.EnumRules. 3807 * Use `create(EnumRulesSchema)` to create a new message. 3808 */ 3809export const EnumRulesSchema: GenMessage<EnumRules> = /*@__PURE__*/ 3810 messageDesc(file_buf_validate_validate, 21); 3811 3812/** 3813 * RepeatedRules describe the rules applied to `repeated` values. 3814 * 3815 * @generated from message buf.validate.RepeatedRules 3816 */ 3817export type RepeatedRules = Message<"buf.validate.RepeatedRules"> & { 3818 /** 3819 * `min_items` requires that this field must contain at least the specified 3820 * minimum number of items. 3821 * 3822 * Note that `min_items = 1` is equivalent to setting a field as `required`. 3823 * 3824 * ```proto 3825 * message MyRepeated { 3826 * // value must contain at least 2 items 3827 * repeated string value = 1 [(buf.validate.field).repeated.min_items = 2]; 3828 * } 3829 * ``` 3830 * 3831 * @generated from field: optional uint64 min_items = 1; 3832 */ 3833 minItems: bigint; 3834 3835 /** 3836 * `max_items` denotes that this field must not exceed a 3837 * certain number of items as the upper limit. If the field contains more 3838 * items than specified, an error message will be generated, requiring the 3839 * field to maintain no more than the specified number of items. 3840 * 3841 * ```proto 3842 * message MyRepeated { 3843 * // value must contain no more than 3 item(s) 3844 * repeated string value = 1 [(buf.validate.field).repeated.max_items = 3]; 3845 * } 3846 * ``` 3847 * 3848 * @generated from field: optional uint64 max_items = 2; 3849 */ 3850 maxItems: bigint; 3851 3852 /** 3853 * `unique` indicates that all elements in this field must 3854 * be unique. This rule is strictly applicable to scalar and enum 3855 * types, with message types not being supported. 3856 * 3857 * ```proto 3858 * message MyRepeated { 3859 * // repeated value must contain unique items 3860 * repeated string value = 1 [(buf.validate.field).repeated.unique = true]; 3861 * } 3862 * ``` 3863 * 3864 * @generated from field: optional bool unique = 3; 3865 */ 3866 unique: boolean; 3867 3868 /** 3869 * `items` details the rules to be applied to each item 3870 * in the field. Even for repeated message fields, validation is executed 3871 * against each item unless `ignore` is specified. 3872 * 3873 * ```proto 3874 * message MyRepeated { 3875 * // The items in the field `value` must follow the specified rules. 3876 * repeated string value = 1 [(buf.validate.field).repeated.items = { 3877 * string: { 3878 * min_len: 3 3879 * max_len: 10 3880 * } 3881 * }]; 3882 * } 3883 * ``` 3884 * 3885 * Note that the `required` rule does not apply. Repeated items 3886 * cannot be unset. 3887 * 3888 * @generated from field: optional buf.validate.FieldRules items = 4; 3889 */ 3890 items?: FieldRules; 3891}; 3892 3893/** 3894 * Describes the message buf.validate.RepeatedRules. 3895 * Use `create(RepeatedRulesSchema)` to create a new message. 3896 */ 3897export const RepeatedRulesSchema: GenMessage<RepeatedRules> = /*@__PURE__*/ 3898 messageDesc(file_buf_validate_validate, 22); 3899 3900/** 3901 * MapRules describe the rules applied to `map` values. 3902 * 3903 * @generated from message buf.validate.MapRules 3904 */ 3905export type MapRules = Message<"buf.validate.MapRules"> & { 3906 /** 3907 * Specifies the minimum number of key-value pairs allowed. If the field has 3908 * fewer key-value pairs than specified, an error message is generated. 3909 * 3910 * ```proto 3911 * message MyMap { 3912 * // The field `value` must have at least 2 key-value pairs. 3913 * map<string, string> value = 1 [(buf.validate.field).map.min_pairs = 2]; 3914 * } 3915 * ``` 3916 * 3917 * @generated from field: optional uint64 min_pairs = 1; 3918 */ 3919 minPairs: bigint; 3920 3921 /** 3922 * Specifies the maximum number of key-value pairs allowed. If the field has 3923 * more key-value pairs than specified, an error message is generated. 3924 * 3925 * ```proto 3926 * message MyMap { 3927 * // The field `value` must have at most 3 key-value pairs. 3928 * map<string, string> value = 1 [(buf.validate.field).map.max_pairs = 3]; 3929 * } 3930 * ``` 3931 * 3932 * @generated from field: optional uint64 max_pairs = 2; 3933 */ 3934 maxPairs: bigint; 3935 3936 /** 3937 * Specifies the rules to be applied to each key in the field. 3938 * 3939 * ```proto 3940 * message MyMap { 3941 * // The keys in the field `value` must follow the specified rules. 3942 * map<string, string> value = 1 [(buf.validate.field).map.keys = { 3943 * string: { 3944 * min_len: 3 3945 * max_len: 10 3946 * } 3947 * }]; 3948 * } 3949 * ``` 3950 * 3951 * Note that the `required` rule does not apply. Map keys cannot be unset. 3952 * 3953 * @generated from field: optional buf.validate.FieldRules keys = 4; 3954 */ 3955 keys?: FieldRules; 3956 3957 /** 3958 * Specifies the rules to be applied to the value of each key in the 3959 * field. Message values will still have their validations evaluated unless 3960 * `ignore` is specified. 3961 * 3962 * ```proto 3963 * message MyMap { 3964 * // The values in the field `value` must follow the specified rules. 3965 * map<string, string> value = 1 [(buf.validate.field).map.values = { 3966 * string: { 3967 * min_len: 5 3968 * max_len: 20 3969 * } 3970 * }]; 3971 * } 3972 * ``` 3973 * Note that the `required` rule does not apply. Map values cannot be unset. 3974 * 3975 * @generated from field: optional buf.validate.FieldRules values = 5; 3976 */ 3977 values?: FieldRules; 3978}; 3979 3980/** 3981 * Describes the message buf.validate.MapRules. 3982 * Use `create(MapRulesSchema)` to create a new message. 3983 */ 3984export const MapRulesSchema: GenMessage<MapRules> = /*@__PURE__*/ 3985 messageDesc(file_buf_validate_validate, 23); 3986 3987/** 3988 * AnyRules describe rules applied exclusively to the `google.protobuf.Any` well-known type. 3989 * 3990 * @generated from message buf.validate.AnyRules 3991 */ 3992export type AnyRules = Message<"buf.validate.AnyRules"> & { 3993 /** 3994 * `in` requires the field's `type_url` to be equal to one of the 3995 * specified values. If it doesn't match any of the specified values, an error 3996 * message is generated. 3997 * 3998 * ```proto 3999 * message MyAny { 4000 * // The `value` field must have a `type_url` equal to one of the specified values. 4001 * google.protobuf.Any value = 1 [(buf.validate.field).any = { 4002 * in: ["type.googleapis.com/MyType1", "type.googleapis.com/MyType2"] 4003 * }]; 4004 * } 4005 * ``` 4006 * 4007 * @generated from field: repeated string in = 2; 4008 */ 4009 in: string[]; 4010 4011 /** 4012 * 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. 4013 * 4014 * ```proto 4015 * message MyAny { 4016 * // The `value` field must not have a `type_url` equal to any of the specified values. 4017 * google.protobuf.Any value = 1 [(buf.validate.field).any = { 4018 * not_in: ["type.googleapis.com/ForbiddenType1", "type.googleapis.com/ForbiddenType2"] 4019 * }]; 4020 * } 4021 * ``` 4022 * 4023 * @generated from field: repeated string not_in = 3; 4024 */ 4025 notIn: string[]; 4026}; 4027 4028/** 4029 * Describes the message buf.validate.AnyRules. 4030 * Use `create(AnyRulesSchema)` to create a new message. 4031 */ 4032export const AnyRulesSchema: GenMessage<AnyRules> = /*@__PURE__*/ 4033 messageDesc(file_buf_validate_validate, 24); 4034 4035/** 4036 * DurationRules describe the rules applied exclusively to the `google.protobuf.Duration` well-known type. 4037 * 4038 * @generated from message buf.validate.DurationRules 4039 */ 4040export type DurationRules = Message<"buf.validate.DurationRules"> & { 4041 /** 4042 * `const` dictates that the field must match the specified value of the `google.protobuf.Duration` type exactly. 4043 * If the field's value deviates from the specified value, an error message 4044 * will be generated. 4045 * 4046 * ```proto 4047 * message MyDuration { 4048 * // value must equal 5s 4049 * google.protobuf.Duration value = 1 [(buf.validate.field).duration.const = "5s"]; 4050 * } 4051 * ``` 4052 * 4053 * @generated from field: optional google.protobuf.Duration const = 2; 4054 */ 4055 const?: Duration; 4056 4057 /** 4058 * @generated from oneof buf.validate.DurationRules.less_than 4059 */ 4060 lessThan: { 4061 /** 4062 * `lt` stipulates that the field must be less than the specified value of the `google.protobuf.Duration` type, 4063 * exclusive. If the field's value is greater than or equal to the specified 4064 * value, an error message will be generated. 4065 * 4066 * ```proto 4067 * message MyDuration { 4068 * // value must be less than 5s 4069 * google.protobuf.Duration value = 1 [(buf.validate.field).duration.lt = "5s"]; 4070 * } 4071 * ``` 4072 * 4073 * @generated from field: google.protobuf.Duration lt = 3; 4074 */ 4075 value: Duration; 4076 case: "lt"; 4077 } | { 4078 /** 4079 * `lte` indicates that the field must be less than or equal to the specified 4080 * value of the `google.protobuf.Duration` type, inclusive. If the field's value is greater than the specified value, 4081 * an error message will be generated. 4082 * 4083 * ```proto 4084 * message MyDuration { 4085 * // value must be less than or equal to 10s 4086 * google.protobuf.Duration value = 1 [(buf.validate.field).duration.lte = "10s"]; 4087 * } 4088 * ``` 4089 * 4090 * @generated from field: google.protobuf.Duration lte = 4; 4091 */ 4092 value: Duration; 4093 case: "lte"; 4094 } | { case: undefined; value?: undefined }; 4095 4096 /** 4097 * @generated from oneof buf.validate.DurationRules.greater_than 4098 */ 4099 greaterThan: { 4100 /** 4101 * `gt` requires the duration field value to be greater than the specified 4102 * value (exclusive). If the value of `gt` is larger than a specified `lt` 4103 * or `lte`, the range is reversed, and the field value must be outside the 4104 * specified range. If the field value doesn't meet the required conditions, 4105 * an error message is generated. 4106 * 4107 * ```proto 4108 * message MyDuration { 4109 * // duration must be greater than 5s [duration.gt] 4110 * google.protobuf.Duration value = 1 [(buf.validate.field).duration.gt = { seconds: 5 }]; 4111 * 4112 * // duration must be greater than 5s and less than 10s [duration.gt_lt] 4113 * google.protobuf.Duration another_value = 2 [(buf.validate.field).duration = { gt: { seconds: 5 }, lt: { seconds: 10 } }]; 4114 * 4115 * // duration must be greater than 10s or less than 5s [duration.gt_lt_exclusive] 4116 * google.protobuf.Duration other_value = 3 [(buf.validate.field).duration = { gt: { seconds: 10 }, lt: { seconds: 5 } }]; 4117 * } 4118 * ``` 4119 * 4120 * @generated from field: google.protobuf.Duration gt = 5; 4121 */ 4122 value: Duration; 4123 case: "gt"; 4124 } | { 4125 /** 4126 * `gte` requires the duration field value to be greater than or equal to the 4127 * specified value (exclusive). If the value of `gte` is larger than a 4128 * specified `lt` or `lte`, the range is reversed, and the field value must 4129 * be outside the specified range. If the field value doesn't meet the 4130 * required conditions, an error message is generated. 4131 * 4132 * ```proto 4133 * message MyDuration { 4134 * // duration must be greater than or equal to 5s [duration.gte] 4135 * google.protobuf.Duration value = 1 [(buf.validate.field).duration.gte = { seconds: 5 }]; 4136 * 4137 * // duration must be greater than or equal to 5s and less than 10s [duration.gte_lt] 4138 * google.protobuf.Duration another_value = 2 [(buf.validate.field).duration = { gte: { seconds: 5 }, lt: { seconds: 10 } }]; 4139 * 4140 * // duration must be greater than or equal to 10s or less than 5s [duration.gte_lt_exclusive] 4141 * google.protobuf.Duration other_value = 3 [(buf.validate.field).duration = { gte: { seconds: 10 }, lt: { seconds: 5 } }]; 4142 * } 4143 * ``` 4144 * 4145 * @generated from field: google.protobuf.Duration gte = 6; 4146 */ 4147 value: Duration; 4148 case: "gte"; 4149 } | { case: undefined; value?: undefined }; 4150 4151 /** 4152 * `in` asserts that the field must be equal to one of the specified values of the `google.protobuf.Duration` type. 4153 * If the field's value doesn't correspond to any of the specified values, 4154 * an error message will be generated. 4155 * 4156 * ```proto 4157 * message MyDuration { 4158 * // value must be in list [1s, 2s, 3s] 4159 * google.protobuf.Duration value = 1 [(buf.validate.field).duration.in = ["1s", "2s", "3s"]]; 4160 * } 4161 * ``` 4162 * 4163 * @generated from field: repeated google.protobuf.Duration in = 7; 4164 */ 4165 in: Duration[]; 4166 4167 /** 4168 * `not_in` denotes that the field must not be equal to 4169 * any of the specified values of the `google.protobuf.Duration` type. 4170 * If the field's value matches any of these values, an error message will be 4171 * generated. 4172 * 4173 * ```proto 4174 * message MyDuration { 4175 * // value must not be in list [1s, 2s, 3s] 4176 * google.protobuf.Duration value = 1 [(buf.validate.field).duration.not_in = ["1s", "2s", "3s"]]; 4177 * } 4178 * ``` 4179 * 4180 * @generated from field: repeated google.protobuf.Duration not_in = 8; 4181 */ 4182 notIn: Duration[]; 4183 4184 /** 4185 * `example` specifies values that the field may have. These values SHOULD 4186 * conform to other rules. `example` values will not impact validation 4187 * but may be used as helpful guidance on how to populate the given field. 4188 * 4189 * ```proto 4190 * message MyDuration { 4191 * google.protobuf.Duration value = 1 [ 4192 * (buf.validate.field).duration.example = { seconds: 1 }, 4193 * (buf.validate.field).duration.example = { seconds: 2 }, 4194 * ]; 4195 * } 4196 * ``` 4197 * 4198 * @generated from field: repeated google.protobuf.Duration example = 9; 4199 */ 4200 example: Duration[]; 4201}; 4202 4203/** 4204 * Describes the message buf.validate.DurationRules. 4205 * Use `create(DurationRulesSchema)` to create a new message. 4206 */ 4207export const DurationRulesSchema: GenMessage<DurationRules> = /*@__PURE__*/ 4208 messageDesc(file_buf_validate_validate, 25); 4209 4210/** 4211 * FieldMaskRules describe rules applied exclusively to the `google.protobuf.FieldMask` well-known type. 4212 * 4213 * @generated from message buf.validate.FieldMaskRules 4214 */ 4215export type FieldMaskRules = Message<"buf.validate.FieldMaskRules"> & { 4216 /** 4217 * `const` dictates that the field must match the specified value of the `google.protobuf.FieldMask` type exactly. 4218 * If the field's value deviates from the specified value, an error message 4219 * will be generated. 4220 * 4221 * ```proto 4222 * message MyFieldMask { 4223 * // value must equal ["a"] 4224 * google.protobuf.FieldMask value = 1 [(buf.validate.field).field_mask.const = { 4225 * paths: ["a"] 4226 * }]; 4227 * } 4228 * ``` 4229 * 4230 * @generated from field: optional google.protobuf.FieldMask const = 1; 4231 */ 4232 const?: FieldMask; 4233 4234 /** 4235 * `in` requires the field value to only contain paths matching specified 4236 * values or their subpaths. 4237 * If any of the field value's paths doesn't match the rule, 4238 * an error message is generated. 4239 * See: https://protobuf.dev/reference/protobuf/google.protobuf/#field-mask 4240 * 4241 * ```proto 4242 * message MyFieldMask { 4243 * // The `value` FieldMask must only contain paths listed in `in`. 4244 * google.protobuf.FieldMask value = 1 [(buf.validate.field).field_mask = { 4245 * in: ["a", "b", "c.a"] 4246 * }]; 4247 * } 4248 * ``` 4249 * 4250 * @generated from field: repeated string in = 2; 4251 */ 4252 in: string[]; 4253 4254 /** 4255 * `not_in` requires the field value to not contain paths matching specified 4256 * values or their subpaths. 4257 * If any of the field value's paths matches the rule, 4258 * an error message is generated. 4259 * See: https://protobuf.dev/reference/protobuf/google.protobuf/#field-mask 4260 * 4261 * ```proto 4262 * message MyFieldMask { 4263 * // The `value` FieldMask shall not contain paths listed in `not_in`. 4264 * google.protobuf.FieldMask value = 1 [(buf.validate.field).field_mask = { 4265 * not_in: ["forbidden", "immutable", "c.a"] 4266 * }]; 4267 * } 4268 * ``` 4269 * 4270 * @generated from field: repeated string not_in = 3; 4271 */ 4272 notIn: string[]; 4273 4274 /** 4275 * `example` specifies values that the field may have. These values SHOULD 4276 * conform to other rules. `example` values will not impact validation 4277 * but may be used as helpful guidance on how to populate the given field. 4278 * 4279 * ```proto 4280 * message MyFieldMask { 4281 * google.protobuf.FieldMask value = 1 [ 4282 * (buf.validate.field).field_mask.example = { paths: ["a", "b"] }, 4283 * (buf.validate.field).field_mask.example = { paths: ["c.a", "d"] }, 4284 * ]; 4285 * } 4286 * ``` 4287 * 4288 * @generated from field: repeated google.protobuf.FieldMask example = 4; 4289 */ 4290 example: FieldMask[]; 4291}; 4292 4293/** 4294 * Describes the message buf.validate.FieldMaskRules. 4295 * Use `create(FieldMaskRulesSchema)` to create a new message. 4296 */ 4297export const FieldMaskRulesSchema: GenMessage<FieldMaskRules> = /*@__PURE__*/ 4298 messageDesc(file_buf_validate_validate, 26); 4299 4300/** 4301 * TimestampRules describe the rules applied exclusively to the `google.protobuf.Timestamp` well-known type. 4302 * 4303 * @generated from message buf.validate.TimestampRules 4304 */ 4305export type TimestampRules = Message<"buf.validate.TimestampRules"> & { 4306 /** 4307 * `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. 4308 * 4309 * ```proto 4310 * message MyTimestamp { 4311 * // value must equal 2023-05-03T10:00:00Z 4312 * google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.const = {seconds: 1727998800}]; 4313 * } 4314 * ``` 4315 * 4316 * @generated from field: optional google.protobuf.Timestamp const = 2; 4317 */ 4318 const?: Timestamp; 4319 4320 /** 4321 * @generated from oneof buf.validate.TimestampRules.less_than 4322 */ 4323 lessThan: { 4324 /** 4325 * 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. 4326 * 4327 * ```proto 4328 * message MyDuration { 4329 * // duration must be less than 'P3D' [duration.lt] 4330 * google.protobuf.Duration value = 1 [(buf.validate.field).duration.lt = { seconds: 259200 }]; 4331 * } 4332 * ``` 4333 * 4334 * @generated from field: google.protobuf.Timestamp lt = 3; 4335 */ 4336 value: Timestamp; 4337 case: "lt"; 4338 } | { 4339 /** 4340 * 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. 4341 * 4342 * ```proto 4343 * message MyTimestamp { 4344 * // timestamp must be less than or equal to '2023-05-14T00:00:00Z' [timestamp.lte] 4345 * google.protobuf.Timestamp value = 1 [(buf.validate.field).timestamp.lte = { seconds: 1678867200 }]; 4346 * } 4347 * ``` 4348 * 4349 * @generated from field: google.protobuf.Timestamp lte = 4; 4350 */ 4351 value: Timestamp; 4352 case: "lte"; 4353 } | { 4354 /** 4355 * `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. 4356 * 4357 * ```proto 4358 * message MyTimestamp { 4359 * // value must be less than now 4360 * google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.lt_now = true]; 4361 * } 4362 * ``` 4363 * 4364 * @generated from field: bool lt_now = 7; 4365 */ 4366 value: boolean; 4367 case: "ltNow"; 4368 } | { case: undefined; value?: undefined }; 4369 4370 /** 4371 * @generated from oneof buf.validate.TimestampRules.greater_than 4372 */ 4373 greaterThan: { 4374 /** 4375 * `gt` requires the timestamp field value to be greater than the specified 4376 * value (exclusive). If the value of `gt` is larger than a specified `lt` 4377 * or `lte`, the range is reversed, and the field value must be outside the 4378 * specified range. If the field value doesn't meet the required conditions, 4379 * an error message is generated. 4380 * 4381 * ```proto 4382 * message MyTimestamp { 4383 * // timestamp must be greater than '2023-01-01T00:00:00Z' [timestamp.gt] 4384 * google.protobuf.Timestamp value = 1 [(buf.validate.field).timestamp.gt = { seconds: 1672444800 }]; 4385 * 4386 * // timestamp must be greater than '2023-01-01T00:00:00Z' and less than '2023-01-02T00:00:00Z' [timestamp.gt_lt] 4387 * google.protobuf.Timestamp another_value = 2 [(buf.validate.field).timestamp = { gt: { seconds: 1672444800 }, lt: { seconds: 1672531200 } }]; 4388 * 4389 * // timestamp must be greater than '2023-01-02T00:00:00Z' or less than '2023-01-01T00:00:00Z' [timestamp.gt_lt_exclusive] 4390 * google.protobuf.Timestamp other_value = 3 [(buf.validate.field).timestamp = { gt: { seconds: 1672531200 }, lt: { seconds: 1672444800 } }]; 4391 * } 4392 * ``` 4393 * 4394 * @generated from field: google.protobuf.Timestamp gt = 5; 4395 */ 4396 value: Timestamp; 4397 case: "gt"; 4398 } | { 4399 /** 4400 * `gte` requires the timestamp field value to be greater than or equal to the 4401 * specified value (exclusive). If the value of `gte` is larger than a 4402 * specified `lt` or `lte`, the range is reversed, and the field value 4403 * must be outside the specified range. If the field value doesn't meet 4404 * the required conditions, an error message is generated. 4405 * 4406 * ```proto 4407 * message MyTimestamp { 4408 * // timestamp must be greater than or equal to '2023-01-01T00:00:00Z' [timestamp.gte] 4409 * google.protobuf.Timestamp value = 1 [(buf.validate.field).timestamp.gte = { seconds: 1672444800 }]; 4410 * 4411 * // timestamp must be greater than or equal to '2023-01-01T00:00:00Z' and less than '2023-01-02T00:00:00Z' [timestamp.gte_lt] 4412 * google.protobuf.Timestamp another_value = 2 [(buf.validate.field).timestamp = { gte: { seconds: 1672444800 }, lt: { seconds: 1672531200 } }]; 4413 * 4414 * // 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] 4415 * google.protobuf.Timestamp other_value = 3 [(buf.validate.field).timestamp = { gte: { seconds: 1672531200 }, lt: { seconds: 1672444800 } }]; 4416 * } 4417 * ``` 4418 * 4419 * @generated from field: google.protobuf.Timestamp gte = 6; 4420 */ 4421 value: Timestamp; 4422 case: "gte"; 4423 } | { 4424 /** 4425 * `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. 4426 * 4427 * ```proto 4428 * message MyTimestamp { 4429 * // value must be greater than now 4430 * google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.gt_now = true]; 4431 * } 4432 * ``` 4433 * 4434 * @generated from field: bool gt_now = 8; 4435 */ 4436 value: boolean; 4437 case: "gtNow"; 4438 } | { case: undefined; value?: undefined }; 4439 4440 /** 4441 * `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. 4442 * 4443 * ```proto 4444 * message MyTimestamp { 4445 * // value must be within 1 hour of now 4446 * google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.within = {seconds: 3600}]; 4447 * } 4448 * ``` 4449 * 4450 * @generated from field: optional google.protobuf.Duration within = 9; 4451 */ 4452 within?: Duration; 4453 4454 /** 4455 * `example` specifies values that the field may have. These values SHOULD 4456 * conform to other rules. `example` values will not impact validation 4457 * but may be used as helpful guidance on how to populate the given field. 4458 * 4459 * ```proto 4460 * message MyTimestamp { 4461 * google.protobuf.Timestamp value = 1 [ 4462 * (buf.validate.field).timestamp.example = { seconds: 1672444800 }, 4463 * (buf.validate.field).timestamp.example = { seconds: 1672531200 }, 4464 * ]; 4465 * } 4466 * ``` 4467 * 4468 * @generated from field: repeated google.protobuf.Timestamp example = 10; 4469 */ 4470 example: Timestamp[]; 4471}; 4472 4473/** 4474 * Describes the message buf.validate.TimestampRules. 4475 * Use `create(TimestampRulesSchema)` to create a new message. 4476 */ 4477export const TimestampRulesSchema: GenMessage<TimestampRules> = /*@__PURE__*/ 4478 messageDesc(file_buf_validate_validate, 27); 4479 4480/** 4481 * `Violations` is a collection of `Violation` messages. This message type is returned by 4482 * Protovalidate when a proto message fails to meet the requirements set by the `Rule` validation rules. 4483 * Each individual violation is represented by a `Violation` message. 4484 * 4485 * @generated from message buf.validate.Violations 4486 */ 4487export type Violations = Message<"buf.validate.Violations"> & { 4488 /** 4489 * `violations` is a repeated field that contains all the `Violation` messages corresponding to the violations detected. 4490 * 4491 * @generated from field: repeated buf.validate.Violation violations = 1; 4492 */ 4493 violations: Violation[]; 4494}; 4495 4496/** 4497 * Describes the message buf.validate.Violations. 4498 * Use `create(ViolationsSchema)` to create a new message. 4499 */ 4500export const ViolationsSchema: GenMessage<Violations> = /*@__PURE__*/ 4501 messageDesc(file_buf_validate_validate, 28); 4502 4503/** 4504 * `Violation` represents a single instance where a validation rule, expressed 4505 * as a `Rule`, was not met. It provides information about the field that 4506 * caused the violation, the specific rule that wasn't fulfilled, and a 4507 * human-readable error message. 4508 * 4509 * For example, consider the following message: 4510 * 4511 * ```proto 4512 * message User { 4513 * int32 age = 1 [(buf.validate.field).cel = { 4514 * id: "user.age", 4515 * expression: "this < 18 ? 'User must be at least 18 years old' : ''", 4516 * }]; 4517 * } 4518 * ``` 4519 * 4520 * It could produce the following violation: 4521 * 4522 * ```json 4523 * { 4524 * "ruleId": "user.age", 4525 * "message": "User must be at least 18 years old", 4526 * "field": { 4527 * "elements": [ 4528 * { 4529 * "fieldNumber": 1, 4530 * "fieldName": "age", 4531 * "fieldType": "TYPE_INT32" 4532 * } 4533 * ] 4534 * }, 4535 * "rule": { 4536 * "elements": [ 4537 * { 4538 * "fieldNumber": 23, 4539 * "fieldName": "cel", 4540 * "fieldType": "TYPE_MESSAGE", 4541 * "index": "0" 4542 * } 4543 * ] 4544 * } 4545 * } 4546 * ``` 4547 * 4548 * @generated from message buf.validate.Violation 4549 */ 4550export type Violation = Message<"buf.validate.Violation"> & { 4551 /** 4552 * `field` is a machine-readable path to the field that failed validation. 4553 * 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. 4554 * 4555 * For example, consider the following message: 4556 * 4557 * ```proto 4558 * message Message { 4559 * bool a = 1 [(buf.validate.field).required = true]; 4560 * } 4561 * ``` 4562 * 4563 * It could produce the following violation: 4564 * 4565 * ```textproto 4566 * violation { 4567 * field { element { field_number: 1, field_name: "a", field_type: 8 } } 4568 * ... 4569 * } 4570 * ``` 4571 * 4572 * @generated from field: optional buf.validate.FieldPath field = 5; 4573 */ 4574 field?: FieldPath; 4575 4576 /** 4577 * `rule` is a machine-readable path that points to the specific rule that failed validation. 4578 * This will be a nested field starting from the FieldRules of the field that failed validation. 4579 * For custom rules, this will provide the path of the rule, e.g. `cel[0]`. 4580 * 4581 * For example, consider the following message: 4582 * 4583 * ```proto 4584 * message Message { 4585 * bool a = 1 [(buf.validate.field).required = true]; 4586 * bool b = 2 [(buf.validate.field).cel = { 4587 * id: "custom_rule", 4588 * expression: "!this ? 'b must be true': ''" 4589 * }] 4590 * } 4591 * ``` 4592 * 4593 * It could produce the following violations: 4594 * 4595 * ```textproto 4596 * violation { 4597 * rule { element { field_number: 25, field_name: "required", field_type: 8 } } 4598 * ... 4599 * } 4600 * violation { 4601 * rule { element { field_number: 23, field_name: "cel", field_type: 11, index: 0 } } 4602 * ... 4603 * } 4604 * ``` 4605 * 4606 * @generated from field: optional buf.validate.FieldPath rule = 6; 4607 */ 4608 rule?: FieldPath; 4609 4610 /** 4611 * `rule_id` is the unique identifier of the `Rule` that was not fulfilled. 4612 * This is the same `id` that was specified in the `Rule` message, allowing easy tracing of which rule was violated. 4613 * 4614 * @generated from field: optional string rule_id = 2; 4615 */ 4616 ruleId: string; 4617 4618 /** 4619 * `message` is a human-readable error message that describes the nature of the violation. 4620 * 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. 4621 * 4622 * @generated from field: optional string message = 3; 4623 */ 4624 message: string; 4625 4626 /** 4627 * `for_key` indicates whether the violation was caused by a map key, rather than a value. 4628 * 4629 * @generated from field: optional bool for_key = 4; 4630 */ 4631 forKey: boolean; 4632}; 4633 4634/** 4635 * Describes the message buf.validate.Violation. 4636 * Use `create(ViolationSchema)` to create a new message. 4637 */ 4638export const ViolationSchema: GenMessage<Violation> = /*@__PURE__*/ 4639 messageDesc(file_buf_validate_validate, 29); 4640 4641/** 4642 * `FieldPath` provides a path to a nested protobuf field. 4643 * 4644 * This message provides enough information to render a dotted field path even without protobuf descriptors. 4645 * It also provides enough information to resolve a nested field through unknown wire data. 4646 * 4647 * @generated from message buf.validate.FieldPath 4648 */ 4649export type FieldPath = Message<"buf.validate.FieldPath"> & { 4650 /** 4651 * `elements` contains each element of the path, starting from the root and recursing downward. 4652 * 4653 * @generated from field: repeated buf.validate.FieldPathElement elements = 1; 4654 */ 4655 elements: FieldPathElement[]; 4656}; 4657 4658/** 4659 * Describes the message buf.validate.FieldPath. 4660 * Use `create(FieldPathSchema)` to create a new message. 4661 */ 4662export const FieldPathSchema: GenMessage<FieldPath> = /*@__PURE__*/ 4663 messageDesc(file_buf_validate_validate, 30); 4664 4665/** 4666 * `FieldPathElement` provides enough information to nest through a single protobuf field. 4667 * 4668 * If the selected field is a map or repeated field, the `subscript` value selects a specific element from it. 4669 * A path that refers to a value nested under a map key or repeated field index will have a `subscript` value. 4670 * The `field_type` field allows unambiguous resolution of a field even if descriptors are not available. 4671 * 4672 * @generated from message buf.validate.FieldPathElement 4673 */ 4674export type FieldPathElement = Message<"buf.validate.FieldPathElement"> & { 4675 /** 4676 * `field_number` is the field number this path element refers to. 4677 * 4678 * @generated from field: optional int32 field_number = 1; 4679 */ 4680 fieldNumber: number; 4681 4682 /** 4683 * `field_name` contains the field name this path element refers to. 4684 * This can be used to display a human-readable path even if the field number is unknown. 4685 * 4686 * @generated from field: optional string field_name = 2; 4687 */ 4688 fieldName: string; 4689 4690 /** 4691 * `field_type` specifies the type of this field. When using reflection, this value is not needed. 4692 * 4693 * This value is provided to make it possible to traverse unknown fields through wire data. 4694 * When traversing wire data, be mindful of both packed[1] and delimited[2] encoding schemes. 4695 * 4696 * [1]: https://protobuf.dev/programming-guides/encoding/#packed 4697 * [2]: https://protobuf.dev/programming-guides/encoding/#groups 4698 * 4699 * N.B.: Although groups are deprecated, the corresponding delimited encoding scheme is not, and 4700 * can be explicitly used in Protocol Buffers 2023 Edition. 4701 * 4702 * @generated from field: optional google.protobuf.FieldDescriptorProto.Type field_type = 3; 4703 */ 4704 fieldType: FieldDescriptorProto_Type; 4705 4706 /** 4707 * `key_type` specifies the map key type of this field. This value is useful when traversing 4708 * unknown fields through wire data: specifically, it allows handling the differences between 4709 * different integer encodings. 4710 * 4711 * @generated from field: optional google.protobuf.FieldDescriptorProto.Type key_type = 4; 4712 */ 4713 keyType: FieldDescriptorProto_Type; 4714 4715 /** 4716 * `value_type` specifies map value type of this field. This is useful if you want to display a 4717 * value inside unknown fields through wire data. 4718 * 4719 * @generated from field: optional google.protobuf.FieldDescriptorProto.Type value_type = 5; 4720 */ 4721 valueType: FieldDescriptorProto_Type; 4722 4723 /** 4724 * `subscript` contains a repeated index or map key, if this path element nests into a repeated or map field. 4725 * 4726 * @generated from oneof buf.validate.FieldPathElement.subscript 4727 */ 4728 subscript: { 4729 /** 4730 * `index` specifies a 0-based index into a repeated field. 4731 * 4732 * @generated from field: uint64 index = 6; 4733 */ 4734 value: bigint; 4735 case: "index"; 4736 } | { 4737 /** 4738 * `bool_key` specifies a map key of type bool. 4739 * 4740 * @generated from field: bool bool_key = 7; 4741 */ 4742 value: boolean; 4743 case: "boolKey"; 4744 } | { 4745 /** 4746 * `int_key` specifies a map key of type int32, int64, sint32, sint64, sfixed32 or sfixed64. 4747 * 4748 * @generated from field: int64 int_key = 8; 4749 */ 4750 value: bigint; 4751 case: "intKey"; 4752 } | { 4753 /** 4754 * `uint_key` specifies a map key of type uint32, uint64, fixed32 or fixed64. 4755 * 4756 * @generated from field: uint64 uint_key = 9; 4757 */ 4758 value: bigint; 4759 case: "uintKey"; 4760 } | { 4761 /** 4762 * `string_key` specifies a map key of type string. 4763 * 4764 * @generated from field: string string_key = 10; 4765 */ 4766 value: string; 4767 case: "stringKey"; 4768 } | { case: undefined; value?: undefined }; 4769}; 4770 4771/** 4772 * Describes the message buf.validate.FieldPathElement. 4773 * Use `create(FieldPathElementSchema)` to create a new message. 4774 */ 4775export const FieldPathElementSchema: GenMessage< 4776 FieldPathElement 4777> = /*@__PURE__*/ 4778 messageDesc(file_buf_validate_validate, 31); 4779 4780/** 4781 * Specifies how `FieldRules.ignore` behaves, depending on the field's value, and 4782 * whether the field tracks presence. 4783 * 4784 * @generated from enum buf.validate.Ignore 4785 */ 4786export enum Ignore { 4787 /** 4788 * Ignore rules if the field tracks presence and is unset. This is the default 4789 * behavior. 4790 * 4791 * In proto3, only message fields, members of a Protobuf `oneof`, and fields 4792 * with the `optional` label track presence. Consequently, the following fields 4793 * are always validated, whether a value is set or not: 4794 * 4795 * ```proto 4796 * syntax="proto3"; 4797 * 4798 * message RulesApply { 4799 * string email = 1 [ 4800 * (buf.validate.field).string.email = true 4801 * ]; 4802 * int32 age = 2 [ 4803 * (buf.validate.field).int32.gt = 0 4804 * ]; 4805 * repeated string labels = 3 [ 4806 * (buf.validate.field).repeated.min_items = 1 4807 * ]; 4808 * } 4809 * ``` 4810 * 4811 * In contrast, the following fields track presence, and are only validated if 4812 * a value is set: 4813 * 4814 * ```proto 4815 * syntax="proto3"; 4816 * 4817 * message RulesApplyIfSet { 4818 * optional string email = 1 [ 4819 * (buf.validate.field).string.email = true 4820 * ]; 4821 * oneof ref { 4822 * string reference = 2 [ 4823 * (buf.validate.field).string.uuid = true 4824 * ]; 4825 * string name = 3 [ 4826 * (buf.validate.field).string.min_len = 4 4827 * ]; 4828 * } 4829 * SomeMessage msg = 4 [ 4830 * (buf.validate.field).cel = {/* ... *\/} 4831 * ]; 4832 * } 4833 * ``` 4834 * 4835 * To ensure that such a field is set, add the `required` rule. 4836 * 4837 * To learn which fields track presence, see the 4838 * [Field Presence cheat sheet](https://protobuf.dev/programming-guides/field_presence/#cheat). 4839 * 4840 * @generated from enum value: IGNORE_UNSPECIFIED = 0; 4841 */ 4842 UNSPECIFIED = 0, 4843 4844 /** 4845 * Ignore rules if the field is unset, or set to the zero value. 4846 * 4847 * The zero value depends on the field type: 4848 * - For strings, the zero value is the empty string. 4849 * - For bytes, the zero value is empty bytes. 4850 * - For bool, the zero value is false. 4851 * - For numeric types, the zero value is zero. 4852 * - For enums, the zero value is the first defined enum value. 4853 * - For repeated fields, the zero is an empty list. 4854 * - For map fields, the zero is an empty map. 4855 * - For message fields, absence of the message (typically a null-value) is considered zero value. 4856 * 4857 * For fields that track presence (e.g. adding the `optional` label in proto3), 4858 * this a no-op and behavior is the same as the default `IGNORE_UNSPECIFIED`. 4859 * 4860 * @generated from enum value: IGNORE_IF_ZERO_VALUE = 1; 4861 */ 4862 IF_ZERO_VALUE = 1, 4863 4864 /** 4865 * Always ignore rules, including the `required` rule. 4866 * 4867 * This is useful for ignoring the rules of a referenced message, or to 4868 * temporarily ignore rules during development. 4869 * 4870 * ```proto 4871 * message MyMessage { 4872 * // The field's rules will always be ignored, including any validations 4873 * // on value's fields. 4874 * MyOtherMessage value = 1 [ 4875 * (buf.validate.field).ignore = IGNORE_ALWAYS 4876 * ]; 4877 * } 4878 * ``` 4879 * 4880 * @generated from enum value: IGNORE_ALWAYS = 3; 4881 */ 4882 ALWAYS = 3, 4883} 4884 4885/** 4886 * Describes the enum buf.validate.Ignore. 4887 */ 4888export const IgnoreSchema: GenEnum<Ignore> = /*@__PURE__*/ 4889 enumDesc(file_buf_validate_validate, 0); 4890 4891/** 4892 * KnownRegex contains some well-known patterns. 4893 * 4894 * @generated from enum buf.validate.KnownRegex 4895 */ 4896export enum KnownRegex { 4897 /** 4898 * @generated from enum value: KNOWN_REGEX_UNSPECIFIED = 0; 4899 */ 4900 UNSPECIFIED = 0, 4901 4902 /** 4903 * HTTP header name as defined by [RFC 7230](https://datatracker.ietf.org/doc/html/rfc7230#section-3.2). 4904 * 4905 * @generated from enum value: KNOWN_REGEX_HTTP_HEADER_NAME = 1; 4906 */ 4907 HTTP_HEADER_NAME = 1, 4908 4909 /** 4910 * HTTP header value as defined by [RFC 7230](https://datatracker.ietf.org/doc/html/rfc7230#section-3.2.4). 4911 * 4912 * @generated from enum value: KNOWN_REGEX_HTTP_HEADER_VALUE = 2; 4913 */ 4914 HTTP_HEADER_VALUE = 2, 4915} 4916 4917/** 4918 * Describes the enum buf.validate.KnownRegex. 4919 */ 4920export const KnownRegexSchema: GenEnum<KnownRegex> = /*@__PURE__*/ 4921 enumDesc(file_buf_validate_validate, 1); 4922 4923/** 4924 * Rules specify the validations to be performed on this message. By default, 4925 * no validation is performed against a message. 4926 * 4927 * @generated from extension: optional buf.validate.MessageRules message = 1159; 4928 */ 4929export const message: GenExtension<MessageOptions, MessageRules> = /*@__PURE__*/ 4930 extDesc(file_buf_validate_validate, 0); 4931 4932/** 4933 * Rules specify the validations to be performed on this oneof. By default, 4934 * no validation is performed against a oneof. 4935 * 4936 * @generated from extension: optional buf.validate.OneofRules oneof = 1159; 4937 */ 4938export const oneof: GenExtension<OneofOptions, OneofRules> = /*@__PURE__*/ 4939 extDesc(file_buf_validate_validate, 1); 4940 4941/** 4942 * Rules specify the validations to be performed on this field. By default, 4943 * no validation is performed against a field. 4944 * 4945 * @generated from extension: optional buf.validate.FieldRules field = 1159; 4946 */ 4947export const field: GenExtension<FieldOptions, FieldRules> = /*@__PURE__*/ 4948 extDesc(file_buf_validate_validate, 2); 4949 4950/** 4951 * Specifies predefined rules. When extending a standard rule message, 4952 * this adds additional CEL expressions that apply when the extension is used. 4953 * 4954 * ```proto 4955 * extend buf.validate.Int32Rules { 4956 * bool is_zero [(buf.validate.predefined).cel = { 4957 * id: "int32.is_zero", 4958 * message: "value must be zero", 4959 * expression: "!rule || this == 0", 4960 * }]; 4961 * } 4962 * 4963 * message Foo { 4964 * int32 reserved = 1 [(buf.validate.field).int32.(is_zero) = true]; 4965 * } 4966 * ``` 4967 * 4968 * @generated from extension: optional buf.validate.PredefinedRules predefined = 1160; 4969 */ 4970export const predefined: GenExtension< 4971 FieldOptions, 4972 PredefinedRules 4973> = /*@__PURE__*/ 4974 extDesc(file_buf_validate_validate, 3);